release.sh changes & fixes
[minix3.git] / external / public-domain / sqlite / dist / sqlite3.c
blob419d963b67dd68f112565c034a6befa2a8d73b58
1 /******************************************************************************
2 ** This file is an amalgamation of many separate C source files from SQLite
3 ** version 3.7.10. By combining all the individual C code files into this
4 ** single large file, the entire code can be compiled as a single translation
5 ** unit. This allows many compilers to do optimizations that would not be
6 ** possible if the files were compiled separately. Performance improvements
7 ** of 5% or more are commonly seen when SQLite is compiled as a single
8 ** translation unit.
9 **
10 ** This file is all you need to compile SQLite. To use SQLite in other
11 ** programs, you need this file and the "sqlite3.h" header file that defines
12 ** the programming interface to the SQLite library. (If you do not have
13 ** the "sqlite3.h" header file at hand, you will find a copy embedded within
14 ** the text of this file. Search for "Begin file sqlite3.h" to find the start
15 ** of the embedded sqlite3.h header file.) Additional code files may be needed
16 ** if you want a wrapper to interface SQLite with your choice of programming
17 ** language. The code for the "sqlite3" command-line shell is also in a
18 ** separate file. This file contains only code for the core SQLite library.
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 ***************************************/
30 ** 2001 September 15
32 ** The author disclaims copyright to this source code. In place of
33 ** a legal notice, here is a blessing:
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.
39 *************************************************************************
40 ** Internal interface definitions for SQLite.
43 #ifndef _SQLITEINT_H_
44 #define _SQLITEINT_H_
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.
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.
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.
63 ** Similar is true for Mac OS X. LFS is only supported on Mac OS X 9 and later.
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
74 ** Include the configuration header output by 'configure' if we're using the
75 ** autoconf-based build
77 #ifdef _HAVE_SQLITE_CONFIG_H
78 #include "config.h"
79 #endif
81 /************** Include sqliteLimit.h in the middle of sqliteInt.h ***********/
82 /************** Begin file sqliteLimit.h *************************************/
84 ** 2007 May 7
86 ** The author disclaims copyright to this source code. In place of
87 ** a legal notice, here is a blessing:
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.
93 *************************************************************************
94 **
95 ** This file defines various limits of what SQLite can process.
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.
102 ** The hard limit is the ability of a 32-bit signed integer
103 ** to count the size: 2^31-1 or 2147483647.
105 #ifndef SQLITE_MAX_LENGTH
106 # define SQLITE_MAX_LENGTH 1000000000
107 #endif
110 ** This is the maximum number of
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
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.
126 #ifndef SQLITE_MAX_COLUMN
127 # define SQLITE_MAX_COLUMN 2000
128 #endif
131 ** The maximum length of a single SQL statement in bytes.
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.
137 #ifndef SQLITE_MAX_SQL_LENGTH
138 # define SQLITE_MAX_SQL_LENGTH 1000000000
139 #endif
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.
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.
151 #ifndef SQLITE_MAX_EXPR_DEPTH
152 # define SQLITE_MAX_EXPR_DEPTH 1000
153 #endif
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.
163 #ifndef SQLITE_MAX_COMPOUND_SELECT
164 # define SQLITE_MAX_COMPOUND_SELECT 500
165 #endif
168 ** The maximum number of opcodes in a VDBE program.
169 ** Not currently enforced.
171 #ifndef SQLITE_MAX_VDBE_OP
172 # define SQLITE_MAX_VDBE_OP 25000
173 #endif
176 ** The maximum number of arguments to an SQL function.
178 #ifndef SQLITE_MAX_FUNCTION_ARG
179 # define SQLITE_MAX_FUNCTION_ARG 127
180 #endif
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
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
194 ** The default number of frames to accumulate in the log file before
195 ** checkpointing the database in WAL mode.
197 #ifndef SQLITE_DEFAULT_WAL_AUTOCHECKPOINT
198 # define SQLITE_DEFAULT_WAL_AUTOCHECKPOINT 1000
199 #endif
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.
206 #ifndef SQLITE_MAX_ATTACHED
207 # define SQLITE_MAX_ATTACHED 10
208 #endif
212 ** The maximum value of a ?nnn wildcard that the parser will accept.
214 #ifndef SQLITE_MAX_VARIABLE_NUMBER
215 # define SQLITE_MAX_VARIABLE_NUMBER 999
216 #endif
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.
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.
229 #ifdef SQLITE_MAX_PAGE_SIZE
230 # undef SQLITE_MAX_PAGE_SIZE
231 #endif
232 #define SQLITE_MAX_PAGE_SIZE 65536
236 ** The default size of a database page.
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
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.
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
263 ** Maximum number of pages in one database file.
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.
269 #ifndef SQLITE_MAX_PAGE_COUNT
270 # define SQLITE_MAX_PAGE_COUNT 1073741823
271 #endif
274 ** Maximum length (in bytes) of the pattern in a LIKE or GLOB
275 ** operator.
277 #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
278 # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
279 #endif
282 ** Maximum depth of recursion for triggers.
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.
288 #ifndef SQLITE_MAX_TRIGGER_DEPTH
289 # define SQLITE_MAX_TRIGGER_DEPTH 1000
290 #endif
292 /************** End of sqliteLimit.h *****************************************/
293 /************** Continuing where we left off in sqliteInt.h ******************/
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
304 /* Needed for various definitions... */
305 #ifndef _GNU_SOURCE
306 # define _GNU_SOURCE
307 #endif
310 ** Include standard header files as necessary
312 #ifdef HAVE_STDINT_H
313 #include <stdint.h>
314 #endif
315 #ifdef HAVE_INTTYPES_H
316 #include <inttypes.h>
317 #endif
320 ** The following macros are used to cast pointers to integers and
321 ** integers to pointers. The way you do this varies from one compiler
322 ** to the next, so we have developed the following set of #if statements
323 ** to generate appropriate macros for a wide range of compilers.
325 ** The correct "ANSI" way to do this is to use the intptr_t type.
326 ** Unfortunately, that typedef is not available on all compilers, or
327 ** if it is available, it requires an #include of specific headers
328 ** that vary from one machine to the next.
330 ** Ticket #3860: The llvm-gcc-4.2 compiler from Apple chokes on
331 ** the ((void*)&((char*)0)[X]) construct. But MSVC chokes on ((void*)(X)).
332 ** So we have to define the macros in different ways depending on the
333 ** compiler.
335 #if defined(__PTRDIFF_TYPE__) /* This case should work for GCC */
336 # define SQLITE_INT_TO_PTR(X) ((void*)(__PTRDIFF_TYPE__)(X))
337 # define SQLITE_PTR_TO_INT(X) ((int)(__PTRDIFF_TYPE__)(X))
338 #elif !defined(__GNUC__) /* Works for compilers other than LLVM */
339 # define SQLITE_INT_TO_PTR(X) ((void*)&((char*)0)[X])
340 # define SQLITE_PTR_TO_INT(X) ((int)(((char*)X)-(char*)0))
341 #elif defined(HAVE_STDINT_H) /* Use this case if we have ANSI headers */
342 # define SQLITE_INT_TO_PTR(X) ((void*)(intptr_t)(X))
343 # define SQLITE_PTR_TO_INT(X) ((int)(intptr_t)(X))
344 #else /* Generates a warning - but it always works */
345 # define SQLITE_INT_TO_PTR(X) ((void*)(X))
346 # define SQLITE_PTR_TO_INT(X) ((int)(X))
347 #endif
350 ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2.
351 ** 0 means mutexes are permanently disable and the library is never
352 ** threadsafe. 1 means the library is serialized which is the highest
353 ** level of threadsafety. 2 means the libary is multithreaded - multiple
354 ** threads can use SQLite as long as no two threads try to use the same
355 ** database connection at the same time.
357 ** Older versions of SQLite used an optional THREADSAFE macro.
358 ** We support that for legacy.
360 #if !defined(SQLITE_THREADSAFE)
361 #if defined(THREADSAFE)
362 # define SQLITE_THREADSAFE THREADSAFE
363 #else
364 # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */
365 #endif
366 #endif
369 ** Powersafe overwrite is on by default. But can be turned off using
370 ** the -DSQLITE_POWERSAFE_OVERWRITE=0 command-line option.
372 #ifndef SQLITE_POWERSAFE_OVERWRITE
373 # define SQLITE_POWERSAFE_OVERWRITE 1
374 #endif
377 ** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.
378 ** It determines whether or not the features related to
379 ** SQLITE_CONFIG_MEMSTATUS are available by default or not. This value can
380 ** be overridden at runtime using the sqlite3_config() API.
382 #if !defined(SQLITE_DEFAULT_MEMSTATUS)
383 # define SQLITE_DEFAULT_MEMSTATUS 1
384 #endif
387 ** Exactly one of the following macros must be defined in order to
388 ** specify which memory allocation subsystem to use.
390 ** SQLITE_SYSTEM_MALLOC // Use normal system malloc()
391 ** SQLITE_WIN32_MALLOC // Use Win32 native heap API
392 ** SQLITE_MEMDEBUG // Debugging version of system malloc()
394 ** On Windows, if the SQLITE_WIN32_MALLOC_VALIDATE macro is defined and the
395 ** assert() macro is enabled, each call into the Win32 native heap subsystem
396 ** will cause HeapValidate to be called. If heap validation should fail, an
397 ** assertion will be triggered.
399 ** (Historical note: There used to be several other options, but we've
400 ** pared it down to just these three.)
402 ** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as
403 ** the default.
405 #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)>1
406 # error "At most one of the following compile-time configuration options\
407 is allows: SQLITE_SYSTEM_MALLOC, SQLITE_WIN32_MALLOC, SQLITE_MEMDEBUG"
408 #endif
409 #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)==0
410 # define SQLITE_SYSTEM_MALLOC 1
411 #endif
414 ** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the
415 ** sizes of memory allocations below this value where possible.
417 #if !defined(SQLITE_MALLOC_SOFT_LIMIT)
418 # define SQLITE_MALLOC_SOFT_LIMIT 1024
419 #endif
422 ** We need to define _XOPEN_SOURCE as follows in order to enable
423 ** recursive mutexes on most Unix systems. But Mac OS X is different.
424 ** The _XOPEN_SOURCE define causes problems for Mac OS X we are told,
425 ** so it is omitted there. See ticket #2673.
427 ** Later we learn that _XOPEN_SOURCE is poorly or incorrectly
428 ** implemented on some systems. So we avoid defining it at all
429 ** if it is already defined or if it is unneeded because we are
430 ** not doing a threadsafe build. Ticket #2681.
432 ** See also ticket #2741.
434 #if !defined(_XOPEN_SOURCE) && !defined(__DARWIN__) && !defined(__APPLE__) && SQLITE_THREADSAFE
435 # define _XOPEN_SOURCE 500 /* Needed to enable pthread recursive mutexes */
436 #endif
439 ** The TCL headers are only needed when compiling the TCL bindings.
441 #if defined(SQLITE_TCL) || defined(TCLSH)
442 # include <tcl.h>
443 #endif
446 ** Many people are failing to set -DNDEBUG=1 when compiling SQLite.
447 ** Setting NDEBUG makes the code smaller and run faster. So the following
448 ** lines are added to automatically set NDEBUG unless the -DSQLITE_DEBUG=1
449 ** option is set. Thus NDEBUG becomes an opt-in rather than an opt-out
450 ** feature.
452 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
453 # define NDEBUG 1
454 #endif
457 ** The testcase() macro is used to aid in coverage testing. When
458 ** doing coverage testing, the condition inside the argument to
459 ** testcase() must be evaluated both true and false in order to
460 ** get full branch coverage. The testcase() macro is inserted
461 ** to help ensure adequate test coverage in places where simple
462 ** condition/decision coverage is inadequate. For example, testcase()
463 ** can be used to make sure boundary values are tested. For
464 ** bitmask tests, testcase() can be used to make sure each bit
465 ** is significant and used at least once. On switch statements
466 ** where multiple cases go to the same block of code, testcase()
467 ** can insure that all cases are evaluated.
470 #ifdef SQLITE_COVERAGE_TEST
471 SQLITE_PRIVATE void sqlite3Coverage(int);
472 # define testcase(X) if( X ){ sqlite3Coverage(__LINE__); }
473 #else
474 # define testcase(X)
475 #endif
478 ** The TESTONLY macro is used to enclose variable declarations or
479 ** other bits of code that are needed to support the arguments
480 ** within testcase() and assert() macros.
482 #if !defined(NDEBUG) || defined(SQLITE_COVERAGE_TEST)
483 # define TESTONLY(X) X
484 #else
485 # define TESTONLY(X)
486 #endif
489 ** Sometimes we need a small amount of code such as a variable initialization
490 ** to setup for a later assert() statement. We do not want this code to
491 ** appear when assert() is disabled. The following macro is therefore
492 ** used to contain that setup code. The "VVA" acronym stands for
493 ** "Verification, Validation, and Accreditation". In other words, the
494 ** code within VVA_ONLY() will only run during verification processes.
496 #ifndef NDEBUG
497 # define VVA_ONLY(X) X
498 #else
499 # define VVA_ONLY(X)
500 #endif
503 ** The ALWAYS and NEVER macros surround boolean expressions which
504 ** are intended to always be true or false, respectively. Such
505 ** expressions could be omitted from the code completely. But they
506 ** are included in a few cases in order to enhance the resilience
507 ** of SQLite to unexpected behavior - to make the code "self-healing"
508 ** or "ductile" rather than being "brittle" and crashing at the first
509 ** hint of unplanned behavior.
511 ** In other words, ALWAYS and NEVER are added for defensive code.
513 ** When doing coverage testing ALWAYS and NEVER are hard-coded to
514 ** be true and false so that the unreachable code then specify will
515 ** not be counted as untested code.
517 #if defined(SQLITE_COVERAGE_TEST)
518 # define ALWAYS(X) (1)
519 # define NEVER(X) (0)
520 #elif !defined(NDEBUG)
521 # define ALWAYS(X) ((X)?1:(assert(0),0))
522 # define NEVER(X) ((X)?(assert(0),1):0)
523 #else
524 # define ALWAYS(X) (X)
525 # define NEVER(X) (X)
526 #endif
529 ** Return true (non-zero) if the input is a integer that is too large
530 ** to fit in 32-bits. This macro is used inside of various testcase()
531 ** macros to verify that we have tested SQLite for large-file support.
533 #define IS_BIG_INT(X) (((X)&~(i64)0xffffffff)!=0)
536 ** The macro unlikely() is a hint that surrounds a boolean
537 ** expression that is usually false. Macro likely() surrounds
538 ** a boolean expression that is usually true. GCC is able to
539 ** use these hints to generate better code, sometimes.
541 #if defined(__GNUC__) && 0
542 # define likely(X) __builtin_expect((X),1)
543 # define unlikely(X) __builtin_expect((X),0)
544 #else
545 # define likely(X) !!(X)
546 # define unlikely(X) !!(X)
547 #endif
549 /************** Include sqlite3.h in the middle of sqliteInt.h ***************/
550 /************** Begin file sqlite3.h *****************************************/
552 ** 2001 September 15
554 ** The author disclaims copyright to this source code. In place of
555 ** a legal notice, here is a blessing:
557 ** May you do good and not evil.
558 ** May you find forgiveness for yourself and forgive others.
559 ** May you share freely, never taking more than you give.
561 *************************************************************************
562 ** This header file defines the interface that the SQLite library
563 ** presents to client programs. If a C-function, structure, datatype,
564 ** or constant definition does not appear in this file, then it is
565 ** not a published API of SQLite, is subject to change without
566 ** notice, and should not be referenced by programs that use SQLite.
568 ** Some of the definitions that are in this file are marked as
569 ** "experimental". Experimental interfaces are normally new
570 ** features recently added to SQLite. We do not anticipate changes
571 ** to experimental interfaces but reserve the right to make minor changes
572 ** if experience from use "in the wild" suggest such changes are prudent.
574 ** The official C-language API documentation for SQLite is derived
575 ** from comments in this file. This file is the authoritative source
576 ** on how SQLite interfaces are suppose to operate.
578 ** The name of this file under configuration management is "sqlite.h.in".
579 ** The makefile makes some minor changes to this file (such as inserting
580 ** the version number) and changes its name to "sqlite3.h" as
581 ** part of the build process.
583 #ifndef _SQLITE3_H_
584 #define _SQLITE3_H_
585 #include <stdarg.h> /* Needed for the definition of va_list */
588 ** Make sure we can call this stuff from C++.
590 #if 0
591 extern "C" {
592 #endif
596 ** Add the ability to override 'extern'
598 #ifndef SQLITE_EXTERN
599 # define SQLITE_EXTERN extern
600 #endif
602 #ifndef SQLITE_API
603 # define SQLITE_API
604 #endif
608 ** These no-op macros are used in front of interfaces to mark those
609 ** interfaces as either deprecated or experimental. New applications
610 ** should not use deprecated interfaces - they are support for backwards
611 ** compatibility only. Application writers should be aware that
612 ** experimental interfaces are subject to change in point releases.
614 ** These macros used to resolve to various kinds of compiler magic that
615 ** would generate warning messages when they were used. But that
616 ** compiler magic ended up generating such a flurry of bug reports
617 ** that we have taken it all out and gone back to using simple
618 ** noop macros.
620 #define SQLITE_DEPRECATED
621 #define SQLITE_EXPERIMENTAL
624 ** Ensure these symbols were not defined by some previous header file.
626 #ifdef SQLITE_VERSION
627 # undef SQLITE_VERSION
628 #endif
629 #ifdef SQLITE_VERSION_NUMBER
630 # undef SQLITE_VERSION_NUMBER
631 #endif
634 ** CAPI3REF: Compile-Time Library Version Numbers
636 ** ^(The [SQLITE_VERSION] C preprocessor macro in the sqlite3.h header
637 ** evaluates to a string literal that is the SQLite version in the
638 ** format "X.Y.Z" where X is the major version number (always 3 for
639 ** SQLite3) and Y is the minor version number and Z is the release number.)^
640 ** ^(The [SQLITE_VERSION_NUMBER] C preprocessor macro resolves to an integer
641 ** with the value (X*1000000 + Y*1000 + Z) where X, Y, and Z are the same
642 ** numbers used in [SQLITE_VERSION].)^
643 ** The SQLITE_VERSION_NUMBER for any given release of SQLite will also
644 ** be larger than the release from which it is derived. Either Y will
645 ** be held constant and Z will be incremented or else Y will be incremented
646 ** and Z will be reset to zero.
648 ** Since version 3.6.18, SQLite source code has been stored in the
649 ** <a href="http://www.fossil-scm.org/">Fossil configuration management
650 ** system</a>. ^The SQLITE_SOURCE_ID macro evaluates to
651 ** a string which identifies a particular check-in of SQLite
652 ** within its configuration management system. ^The SQLITE_SOURCE_ID
653 ** string contains the date and time of the check-in (UTC) and an SHA1
654 ** hash of the entire source tree.
656 ** See also: [sqlite3_libversion()],
657 ** [sqlite3_libversion_number()], [sqlite3_sourceid()],
658 ** [sqlite_version()] and [sqlite_source_id()].
660 #define SQLITE_VERSION "3.7.10"
661 #define SQLITE_VERSION_NUMBER 3007010
662 #define SQLITE_SOURCE_ID "2012-01-16 13:28:40 ebd01a8deffb5024a5d7494eef800d2366d97204"
665 ** CAPI3REF: Run-Time Library Version Numbers
666 ** KEYWORDS: sqlite3_version, sqlite3_sourceid
668 ** These interfaces provide the same information as the [SQLITE_VERSION],
669 ** [SQLITE_VERSION_NUMBER], and [SQLITE_SOURCE_ID] C preprocessor macros
670 ** but are associated with the library instead of the header file. ^(Cautious
671 ** programmers might include assert() statements in their application to
672 ** verify that values returned by these interfaces match the macros in
673 ** the header, and thus insure that the application is
674 ** compiled with matching library and header files.
676 ** <blockquote><pre>
677 ** assert( sqlite3_libversion_number()==SQLITE_VERSION_NUMBER );
678 ** assert( strcmp(sqlite3_sourceid(),SQLITE_SOURCE_ID)==0 );
679 ** assert( strcmp(sqlite3_libversion(),SQLITE_VERSION)==0 );
680 ** </pre></blockquote>)^
682 ** ^The sqlite3_version[] string constant contains the text of [SQLITE_VERSION]
683 ** macro. ^The sqlite3_libversion() function returns a pointer to the
684 ** to the sqlite3_version[] string constant. The sqlite3_libversion()
685 ** function is provided for use in DLLs since DLL users usually do not have
686 ** direct access to string constants within the DLL. ^The
687 ** sqlite3_libversion_number() function returns an integer equal to
688 ** [SQLITE_VERSION_NUMBER]. ^The sqlite3_sourceid() function returns
689 ** a pointer to a string constant whose value is the same as the
690 ** [SQLITE_SOURCE_ID] C preprocessor macro.
692 ** See also: [sqlite_version()] and [sqlite_source_id()].
694 SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
695 SQLITE_API const char *sqlite3_libversion(void);
696 SQLITE_API const char *sqlite3_sourceid(void);
697 SQLITE_API int sqlite3_libversion_number(void);
700 ** CAPI3REF: Run-Time Library Compilation Options Diagnostics
702 ** ^The sqlite3_compileoption_used() function returns 0 or 1
703 ** indicating whether the specified option was defined at
704 ** compile time. ^The SQLITE_ prefix may be omitted from the
705 ** option name passed to sqlite3_compileoption_used().
707 ** ^The sqlite3_compileoption_get() function allows iterating
708 ** over the list of options that were defined at compile time by
709 ** returning the N-th compile time option string. ^If N is out of range,
710 ** sqlite3_compileoption_get() returns a NULL pointer. ^The SQLITE_
711 ** prefix is omitted from any strings returned by
712 ** sqlite3_compileoption_get().
714 ** ^Support for the diagnostic functions sqlite3_compileoption_used()
715 ** and sqlite3_compileoption_get() may be omitted by specifying the
716 ** [SQLITE_OMIT_COMPILEOPTION_DIAGS] option at compile time.
718 ** See also: SQL functions [sqlite_compileoption_used()] and
719 ** [sqlite_compileoption_get()] and the [compile_options pragma].
721 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
722 SQLITE_API int sqlite3_compileoption_used(const char *zOptName);
723 SQLITE_API const char *sqlite3_compileoption_get(int N);
724 #endif
727 ** CAPI3REF: Test To See If The Library Is Threadsafe
729 ** ^The sqlite3_threadsafe() function returns zero if and only if
730 ** SQLite was compiled with mutexing code omitted due to the
731 ** [SQLITE_THREADSAFE] compile-time option being set to 0.
733 ** SQLite can be compiled with or without mutexes. When
734 ** the [SQLITE_THREADSAFE] C preprocessor macro is 1 or 2, mutexes
735 ** are enabled and SQLite is threadsafe. When the
736 ** [SQLITE_THREADSAFE] macro is 0,
737 ** the mutexes are omitted. Without the mutexes, it is not safe
738 ** to use SQLite concurrently from more than one thread.
740 ** Enabling mutexes incurs a measurable performance penalty.
741 ** So if speed is of utmost importance, it makes sense to disable
742 ** the mutexes. But for maximum safety, mutexes should be enabled.
743 ** ^The default behavior is for mutexes to be enabled.
745 ** This interface can be used by an application to make sure that the
746 ** version of SQLite that it is linking against was compiled with
747 ** the desired setting of the [SQLITE_THREADSAFE] macro.
749 ** This interface only reports on the compile-time mutex setting
750 ** of the [SQLITE_THREADSAFE] flag. If SQLite is compiled with
751 ** SQLITE_THREADSAFE=1 or =2 then mutexes are enabled by default but
752 ** can be fully or partially disabled using a call to [sqlite3_config()]
753 ** with the verbs [SQLITE_CONFIG_SINGLETHREAD], [SQLITE_CONFIG_MULTITHREAD],
754 ** or [SQLITE_CONFIG_MUTEX]. ^(The return value of the
755 ** sqlite3_threadsafe() function shows only the compile-time setting of
756 ** thread safety, not any run-time changes to that setting made by
757 ** sqlite3_config(). In other words, the return value from sqlite3_threadsafe()
758 ** is unchanged by calls to sqlite3_config().)^
760 ** See the [threading mode] documentation for additional information.
762 SQLITE_API int sqlite3_threadsafe(void);
765 ** CAPI3REF: Database Connection Handle
766 ** KEYWORDS: {database connection} {database connections}
768 ** Each open SQLite database is represented by a pointer to an instance of
769 ** the opaque structure named "sqlite3". It is useful to think of an sqlite3
770 ** pointer as an object. The [sqlite3_open()], [sqlite3_open16()], and
771 ** [sqlite3_open_v2()] interfaces are its constructors, and [sqlite3_close()]
772 ** is its destructor. There are many other interfaces (such as
773 ** [sqlite3_prepare_v2()], [sqlite3_create_function()], and
774 ** [sqlite3_busy_timeout()] to name but three) that are methods on an
775 ** sqlite3 object.
777 typedef struct sqlite3 sqlite3;
780 ** CAPI3REF: 64-Bit Integer Types
781 ** KEYWORDS: sqlite_int64 sqlite_uint64
783 ** Because there is no cross-platform way to specify 64-bit integer types
784 ** SQLite includes typedefs for 64-bit signed and unsigned integers.
786 ** The sqlite3_int64 and sqlite3_uint64 are the preferred type definitions.
787 ** The sqlite_int64 and sqlite_uint64 types are supported for backwards
788 ** compatibility only.
790 ** ^The sqlite3_int64 and sqlite_int64 types can store integer values
791 ** between -9223372036854775808 and +9223372036854775807 inclusive. ^The
792 ** sqlite3_uint64 and sqlite_uint64 types can store integer values
793 ** between 0 and +18446744073709551615 inclusive.
795 #ifdef SQLITE_INT64_TYPE
796 typedef SQLITE_INT64_TYPE sqlite_int64;
797 typedef unsigned SQLITE_INT64_TYPE sqlite_uint64;
798 #elif defined(_MSC_VER) || defined(__BORLANDC__)
799 typedef __int64 sqlite_int64;
800 typedef unsigned __int64 sqlite_uint64;
801 #else
802 typedef long long int sqlite_int64;
803 typedef unsigned long long int sqlite_uint64;
804 #endif
805 typedef sqlite_int64 sqlite3_int64;
806 typedef sqlite_uint64 sqlite3_uint64;
809 ** If compiling for a processor that lacks floating point support,
810 ** substitute integer for floating-point.
812 #ifdef SQLITE_OMIT_FLOATING_POINT
813 # define double sqlite3_int64
814 #endif
817 ** CAPI3REF: Closing A Database Connection
819 ** ^The sqlite3_close() routine is the destructor for the [sqlite3] object.
820 ** ^Calls to sqlite3_close() return SQLITE_OK if the [sqlite3] object is
821 ** successfully destroyed and all associated resources are deallocated.
823 ** Applications must [sqlite3_finalize | finalize] all [prepared statements]
824 ** and [sqlite3_blob_close | close] all [BLOB handles] associated with
825 ** the [sqlite3] object prior to attempting to close the object. ^If
826 ** sqlite3_close() is called on a [database connection] that still has
827 ** outstanding [prepared statements] or [BLOB handles], then it returns
828 ** SQLITE_BUSY.
830 ** ^If [sqlite3_close()] is invoked while a transaction is open,
831 ** the transaction is automatically rolled back.
833 ** The C parameter to [sqlite3_close(C)] must be either a NULL
834 ** pointer or an [sqlite3] object pointer obtained
835 ** from [sqlite3_open()], [sqlite3_open16()], or
836 ** [sqlite3_open_v2()], and not previously closed.
837 ** ^Calling sqlite3_close() with a NULL pointer argument is a
838 ** harmless no-op.
840 SQLITE_API int sqlite3_close(sqlite3 *);
843 ** The type for a callback function.
844 ** This is legacy and deprecated. It is included for historical
845 ** compatibility and is not documented.
847 typedef int (*sqlite3_callback)(void*,int,char**, char**);
850 ** CAPI3REF: One-Step Query Execution Interface
852 ** The sqlite3_exec() interface is a convenience wrapper around
853 ** [sqlite3_prepare_v2()], [sqlite3_step()], and [sqlite3_finalize()],
854 ** that allows an application to run multiple statements of SQL
855 ** without having to use a lot of C code.
857 ** ^The sqlite3_exec() interface runs zero or more UTF-8 encoded,
858 ** semicolon-separate SQL statements passed into its 2nd argument,
859 ** in the context of the [database connection] passed in as its 1st
860 ** argument. ^If the callback function of the 3rd argument to
861 ** sqlite3_exec() is not NULL, then it is invoked for each result row
862 ** coming out of the evaluated SQL statements. ^The 4th argument to
863 ** sqlite3_exec() is relayed through to the 1st argument of each
864 ** callback invocation. ^If the callback pointer to sqlite3_exec()
865 ** is NULL, then no callback is ever invoked and result rows are
866 ** ignored.
868 ** ^If an error occurs while evaluating the SQL statements passed into
869 ** sqlite3_exec(), then execution of the current statement stops and
870 ** subsequent statements are skipped. ^If the 5th parameter to sqlite3_exec()
871 ** is not NULL then any error message is written into memory obtained
872 ** from [sqlite3_malloc()] and passed back through the 5th parameter.
873 ** To avoid memory leaks, the application should invoke [sqlite3_free()]
874 ** on error message strings returned through the 5th parameter of
875 ** of sqlite3_exec() after the error message string is no longer needed.
876 ** ^If the 5th parameter to sqlite3_exec() is not NULL and no errors
877 ** occur, then sqlite3_exec() sets the pointer in its 5th parameter to
878 ** NULL before returning.
880 ** ^If an sqlite3_exec() callback returns non-zero, the sqlite3_exec()
881 ** routine returns SQLITE_ABORT without invoking the callback again and
882 ** without running any subsequent SQL statements.
884 ** ^The 2nd argument to the sqlite3_exec() callback function is the
885 ** number of columns in the result. ^The 3rd argument to the sqlite3_exec()
886 ** callback is an array of pointers to strings obtained as if from
887 ** [sqlite3_column_text()], one for each column. ^If an element of a
888 ** result row is NULL then the corresponding string pointer for the
889 ** sqlite3_exec() callback is a NULL pointer. ^The 4th argument to the
890 ** sqlite3_exec() callback is an array of pointers to strings where each
891 ** entry represents the name of corresponding result column as obtained
892 ** from [sqlite3_column_name()].
894 ** ^If the 2nd parameter to sqlite3_exec() is a NULL pointer, a pointer
895 ** to an empty string, or a pointer that contains only whitespace and/or
896 ** SQL comments, then no SQL statements are evaluated and the database
897 ** is not changed.
899 ** Restrictions:
901 ** <ul>
902 ** <li> The application must insure that the 1st parameter to sqlite3_exec()
903 ** is a valid and open [database connection].
904 ** <li> The application must not close [database connection] specified by
905 ** the 1st parameter to sqlite3_exec() while sqlite3_exec() is running.
906 ** <li> The application must not modify the SQL statement text passed into
907 ** the 2nd parameter of sqlite3_exec() while sqlite3_exec() is running.
908 ** </ul>
910 SQLITE_API int sqlite3_exec(
911 sqlite3*, /* An open database */
912 const char *sql, /* SQL to be evaluated */
913 int (*callback)(void*,int,char**,char**), /* Callback function */
914 void *, /* 1st argument to callback */
915 char **errmsg /* Error msg written here */
919 ** CAPI3REF: Result Codes
920 ** KEYWORDS: SQLITE_OK {error code} {error codes}
921 ** KEYWORDS: {result code} {result codes}
923 ** Many SQLite functions return an integer result code from the set shown
924 ** here in order to indicate success or failure.
926 ** New error codes may be added in future versions of SQLite.
928 ** See also: [SQLITE_IOERR_READ | extended result codes],
929 ** [sqlite3_vtab_on_conflict()] [SQLITE_ROLLBACK | result codes].
931 #define SQLITE_OK 0 /* Successful result */
932 /* beginning-of-error-codes */
933 #define SQLITE_ERROR 1 /* SQL error or missing database */
934 #define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */
935 #define SQLITE_PERM 3 /* Access permission denied */
936 #define SQLITE_ABORT 4 /* Callback routine requested an abort */
937 #define SQLITE_BUSY 5 /* The database file is locked */
938 #define SQLITE_LOCKED 6 /* A table in the database is locked */
939 #define SQLITE_NOMEM 7 /* A malloc() failed */
940 #define SQLITE_READONLY 8 /* Attempt to write a readonly database */
941 #define SQLITE_INTERRUPT 9 /* Operation terminated by sqlite3_interrupt()*/
942 #define SQLITE_IOERR 10 /* Some kind of disk I/O error occurred */
943 #define SQLITE_CORRUPT 11 /* The database disk image is malformed */
944 #define SQLITE_NOTFOUND 12 /* Unknown opcode in sqlite3_file_control() */
945 #define SQLITE_FULL 13 /* Insertion failed because database is full */
946 #define SQLITE_CANTOPEN 14 /* Unable to open the database file */
947 #define SQLITE_PROTOCOL 15 /* Database lock protocol error */
948 #define SQLITE_EMPTY 16 /* Database is empty */
949 #define SQLITE_SCHEMA 17 /* The database schema changed */
950 #define SQLITE_TOOBIG 18 /* String or BLOB exceeds size limit */
951 #define SQLITE_CONSTRAINT 19 /* Abort due to constraint violation */
952 #define SQLITE_MISMATCH 20 /* Data type mismatch */
953 #define SQLITE_MISUSE 21 /* Library used incorrectly */
954 #define SQLITE_NOLFS 22 /* Uses OS features not supported on host */
955 #define SQLITE_AUTH 23 /* Authorization denied */
956 #define SQLITE_FORMAT 24 /* Auxiliary database format error */
957 #define SQLITE_RANGE 25 /* 2nd parameter to sqlite3_bind out of range */
958 #define SQLITE_NOTADB 26 /* File opened that is not a database file */
959 #define SQLITE_ROW 100 /* sqlite3_step() has another row ready */
960 #define SQLITE_DONE 101 /* sqlite3_step() has finished executing */
961 /* end-of-error-codes */
964 ** CAPI3REF: Extended Result Codes
965 ** KEYWORDS: {extended error code} {extended error codes}
966 ** KEYWORDS: {extended result code} {extended result codes}
968 ** In its default configuration, SQLite API routines return one of 26 integer
969 ** [SQLITE_OK | result codes]. However, experience has shown that many of
970 ** these result codes are too coarse-grained. They do not provide as
971 ** much information about problems as programmers might like. In an effort to
972 ** address this, newer versions of SQLite (version 3.3.8 and later) include
973 ** support for additional result codes that provide more detailed information
974 ** about errors. The extended result codes are enabled or disabled
975 ** on a per database connection basis using the
976 ** [sqlite3_extended_result_codes()] API.
978 ** Some of the available extended result codes are listed here.
979 ** One may expect the number of extended result codes will be expand
980 ** over time. Software that uses extended result codes should expect
981 ** to see new result codes in future releases of SQLite.
983 ** The SQLITE_OK result code will never be extended. It will always
984 ** be exactly zero.
986 #define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8))
987 #define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8))
988 #define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8))
989 #define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8))
990 #define SQLITE_IOERR_DIR_FSYNC (SQLITE_IOERR | (5<<8))
991 #define SQLITE_IOERR_TRUNCATE (SQLITE_IOERR | (6<<8))
992 #define SQLITE_IOERR_FSTAT (SQLITE_IOERR | (7<<8))
993 #define SQLITE_IOERR_UNLOCK (SQLITE_IOERR | (8<<8))
994 #define SQLITE_IOERR_RDLOCK (SQLITE_IOERR | (9<<8))
995 #define SQLITE_IOERR_DELETE (SQLITE_IOERR | (10<<8))
996 #define SQLITE_IOERR_BLOCKED (SQLITE_IOERR | (11<<8))
997 #define SQLITE_IOERR_NOMEM (SQLITE_IOERR | (12<<8))
998 #define SQLITE_IOERR_ACCESS (SQLITE_IOERR | (13<<8))
999 #define SQLITE_IOERR_CHECKRESERVEDLOCK (SQLITE_IOERR | (14<<8))
1000 #define SQLITE_IOERR_LOCK (SQLITE_IOERR | (15<<8))
1001 #define SQLITE_IOERR_CLOSE (SQLITE_IOERR | (16<<8))
1002 #define SQLITE_IOERR_DIR_CLOSE (SQLITE_IOERR | (17<<8))
1003 #define SQLITE_IOERR_SHMOPEN (SQLITE_IOERR | (18<<8))
1004 #define SQLITE_IOERR_SHMSIZE (SQLITE_IOERR | (19<<8))
1005 #define SQLITE_IOERR_SHMLOCK (SQLITE_IOERR | (20<<8))
1006 #define SQLITE_IOERR_SHMMAP (SQLITE_IOERR | (21<<8))
1007 #define SQLITE_IOERR_SEEK (SQLITE_IOERR | (22<<8))
1008 #define SQLITE_LOCKED_SHAREDCACHE (SQLITE_LOCKED | (1<<8))
1009 #define SQLITE_BUSY_RECOVERY (SQLITE_BUSY | (1<<8))
1010 #define SQLITE_CANTOPEN_NOTEMPDIR (SQLITE_CANTOPEN | (1<<8))
1011 #define SQLITE_CORRUPT_VTAB (SQLITE_CORRUPT | (1<<8))
1012 #define SQLITE_READONLY_RECOVERY (SQLITE_READONLY | (1<<8))
1013 #define SQLITE_READONLY_CANTLOCK (SQLITE_READONLY | (2<<8))
1016 ** CAPI3REF: Flags For File Open Operations
1018 ** These bit values are intended for use in the
1019 ** 3rd parameter to the [sqlite3_open_v2()] interface and
1020 ** in the 4th parameter to the [sqlite3_vfs.xOpen] method.
1022 #define SQLITE_OPEN_READONLY 0x00000001 /* Ok for sqlite3_open_v2() */
1023 #define SQLITE_OPEN_READWRITE 0x00000002 /* Ok for sqlite3_open_v2() */
1024 #define SQLITE_OPEN_CREATE 0x00000004 /* Ok for sqlite3_open_v2() */
1025 #define SQLITE_OPEN_DELETEONCLOSE 0x00000008 /* VFS only */
1026 #define SQLITE_OPEN_EXCLUSIVE 0x00000010 /* VFS only */
1027 #define SQLITE_OPEN_AUTOPROXY 0x00000020 /* VFS only */
1028 #define SQLITE_OPEN_URI 0x00000040 /* Ok for sqlite3_open_v2() */
1029 #define SQLITE_OPEN_MAIN_DB 0x00000100 /* VFS only */
1030 #define SQLITE_OPEN_TEMP_DB 0x00000200 /* VFS only */
1031 #define SQLITE_OPEN_TRANSIENT_DB 0x00000400 /* VFS only */
1032 #define SQLITE_OPEN_MAIN_JOURNAL 0x00000800 /* VFS only */
1033 #define SQLITE_OPEN_TEMP_JOURNAL 0x00001000 /* VFS only */
1034 #define SQLITE_OPEN_SUBJOURNAL 0x00002000 /* VFS only */
1035 #define SQLITE_OPEN_MASTER_JOURNAL 0x00004000 /* VFS only */
1036 #define SQLITE_OPEN_NOMUTEX 0x00008000 /* Ok for sqlite3_open_v2() */
1037 #define SQLITE_OPEN_FULLMUTEX 0x00010000 /* Ok for sqlite3_open_v2() */
1038 #define SQLITE_OPEN_SHAREDCACHE 0x00020000 /* Ok for sqlite3_open_v2() */
1039 #define SQLITE_OPEN_PRIVATECACHE 0x00040000 /* Ok for sqlite3_open_v2() */
1040 #define SQLITE_OPEN_WAL 0x00080000 /* VFS only */
1042 /* Reserved: 0x00F00000 */
1045 ** CAPI3REF: Device Characteristics
1047 ** The xDeviceCharacteristics method of the [sqlite3_io_methods]
1048 ** object returns an integer which is a vector of the these
1049 ** bit values expressing I/O characteristics of the mass storage
1050 ** device that holds the file that the [sqlite3_io_methods]
1051 ** refers to.
1053 ** The SQLITE_IOCAP_ATOMIC property means that all writes of
1054 ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
1055 ** mean that writes of blocks that are nnn bytes in size and
1056 ** are aligned to an address which is an integer multiple of
1057 ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
1058 ** that when data is appended to a file, the data is appended
1059 ** first then the size of the file is extended, never the other
1060 ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that
1061 ** information is written to disk in the same order as calls
1062 ** to xWrite(). The SQLITE_IOCAP_POWERSAFE_OVERWRITE property means that
1063 ** after reboot following a crash or power loss, the only bytes in a
1064 ** file that were written at the application level might have changed
1065 ** and that adjacent bytes, even bytes within the same sector are
1066 ** guaranteed to be unchanged.
1068 #define SQLITE_IOCAP_ATOMIC 0x00000001
1069 #define SQLITE_IOCAP_ATOMIC512 0x00000002
1070 #define SQLITE_IOCAP_ATOMIC1K 0x00000004
1071 #define SQLITE_IOCAP_ATOMIC2K 0x00000008
1072 #define SQLITE_IOCAP_ATOMIC4K 0x00000010
1073 #define SQLITE_IOCAP_ATOMIC8K 0x00000020
1074 #define SQLITE_IOCAP_ATOMIC16K 0x00000040
1075 #define SQLITE_IOCAP_ATOMIC32K 0x00000080
1076 #define SQLITE_IOCAP_ATOMIC64K 0x00000100
1077 #define SQLITE_IOCAP_SAFE_APPEND 0x00000200
1078 #define SQLITE_IOCAP_SEQUENTIAL 0x00000400
1079 #define SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN 0x00000800
1080 #define SQLITE_IOCAP_POWERSAFE_OVERWRITE 0x00001000
1083 ** CAPI3REF: File Locking Levels
1085 ** SQLite uses one of these integer values as the second
1086 ** argument to calls it makes to the xLock() and xUnlock() methods
1087 ** of an [sqlite3_io_methods] object.
1089 #define SQLITE_LOCK_NONE 0
1090 #define SQLITE_LOCK_SHARED 1
1091 #define SQLITE_LOCK_RESERVED 2
1092 #define SQLITE_LOCK_PENDING 3
1093 #define SQLITE_LOCK_EXCLUSIVE 4
1096 ** CAPI3REF: Synchronization Type Flags
1098 ** When SQLite invokes the xSync() method of an
1099 ** [sqlite3_io_methods] object it uses a combination of
1100 ** these integer values as the second argument.
1102 ** When the SQLITE_SYNC_DATAONLY flag is used, it means that the
1103 ** sync operation only needs to flush data to mass storage. Inode
1104 ** information need not be flushed. If the lower four bits of the flag
1105 ** equal SQLITE_SYNC_NORMAL, that means to use normal fsync() semantics.
1106 ** If the lower four bits equal SQLITE_SYNC_FULL, that means
1107 ** to use Mac OS X style fullsync instead of fsync().
1109 ** Do not confuse the SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags
1110 ** with the [PRAGMA synchronous]=NORMAL and [PRAGMA synchronous]=FULL
1111 ** settings. The [synchronous pragma] determines when calls to the
1112 ** xSync VFS method occur and applies uniformly across all platforms.
1113 ** The SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL flags determine how
1114 ** energetic or rigorous or forceful the sync operations are and
1115 ** only make a difference on Mac OSX for the default SQLite code.
1116 ** (Third-party VFS implementations might also make the distinction
1117 ** between SQLITE_SYNC_NORMAL and SQLITE_SYNC_FULL, but among the
1118 ** operating systems natively supported by SQLite, only Mac OSX
1119 ** cares about the difference.)
1121 #define SQLITE_SYNC_NORMAL 0x00002
1122 #define SQLITE_SYNC_FULL 0x00003
1123 #define SQLITE_SYNC_DATAONLY 0x00010
1126 ** CAPI3REF: OS Interface Open File Handle
1128 ** An [sqlite3_file] object represents an open file in the
1129 ** [sqlite3_vfs | OS interface layer]. Individual OS interface
1130 ** implementations will
1131 ** want to subclass this object by appending additional fields
1132 ** for their own use. The pMethods entry is a pointer to an
1133 ** [sqlite3_io_methods] object that defines methods for performing
1134 ** I/O operations on the open file.
1136 typedef struct sqlite3_file sqlite3_file;
1137 struct sqlite3_file {
1138 const struct sqlite3_io_methods *pMethods; /* Methods for an open file */
1142 ** CAPI3REF: OS Interface File Virtual Methods Object
1144 ** Every file opened by the [sqlite3_vfs.xOpen] method populates an
1145 ** [sqlite3_file] object (or, more commonly, a subclass of the
1146 ** [sqlite3_file] object) with a pointer to an instance of this object.
1147 ** This object defines the methods used to perform various operations
1148 ** against the open file represented by the [sqlite3_file] object.
1150 ** If the [sqlite3_vfs.xOpen] method sets the sqlite3_file.pMethods element
1151 ** to a non-NULL pointer, then the sqlite3_io_methods.xClose method
1152 ** may be invoked even if the [sqlite3_vfs.xOpen] reported that it failed. The
1153 ** only way to prevent a call to xClose following a failed [sqlite3_vfs.xOpen]
1154 ** is for the [sqlite3_vfs.xOpen] to set the sqlite3_file.pMethods element
1155 ** to NULL.
1157 ** The flags argument to xSync may be one of [SQLITE_SYNC_NORMAL] or
1158 ** [SQLITE_SYNC_FULL]. The first choice is the normal fsync().
1159 ** The second choice is a Mac OS X style fullsync. The [SQLITE_SYNC_DATAONLY]
1160 ** flag may be ORed in to indicate that only the data of the file
1161 ** and not its inode needs to be synced.
1163 ** The integer values to xLock() and xUnlock() are one of
1164 ** <ul>
1165 ** <li> [SQLITE_LOCK_NONE],
1166 ** <li> [SQLITE_LOCK_SHARED],
1167 ** <li> [SQLITE_LOCK_RESERVED],
1168 ** <li> [SQLITE_LOCK_PENDING], or
1169 ** <li> [SQLITE_LOCK_EXCLUSIVE].
1170 ** </ul>
1171 ** xLock() increases the lock. xUnlock() decreases the lock.
1172 ** The xCheckReservedLock() method checks whether any database connection,
1173 ** either in this process or in some other process, is holding a RESERVED,
1174 ** PENDING, or EXCLUSIVE lock on the file. It returns true
1175 ** if such a lock exists and false otherwise.
1177 ** The xFileControl() method is a generic interface that allows custom
1178 ** VFS implementations to directly control an open file using the
1179 ** [sqlite3_file_control()] interface. The second "op" argument is an
1180 ** integer opcode. The third argument is a generic pointer intended to
1181 ** point to a structure that may contain arguments or space in which to
1182 ** write return values. Potential uses for xFileControl() might be
1183 ** functions to enable blocking locks with timeouts, to change the
1184 ** locking strategy (for example to use dot-file locks), to inquire
1185 ** about the status of a lock, or to break stale locks. The SQLite
1186 ** core reserves all opcodes less than 100 for its own use.
1187 ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available.
1188 ** Applications that define a custom xFileControl method should use opcodes
1189 ** greater than 100 to avoid conflicts. VFS implementations should
1190 ** return [SQLITE_NOTFOUND] for file control opcodes that they do not
1191 ** recognize.
1193 ** The xSectorSize() method returns the sector size of the
1194 ** device that underlies the file. The sector size is the
1195 ** minimum write that can be performed without disturbing
1196 ** other bytes in the file. The xDeviceCharacteristics()
1197 ** method returns a bit vector describing behaviors of the
1198 ** underlying device:
1200 ** <ul>
1201 ** <li> [SQLITE_IOCAP_ATOMIC]
1202 ** <li> [SQLITE_IOCAP_ATOMIC512]
1203 ** <li> [SQLITE_IOCAP_ATOMIC1K]
1204 ** <li> [SQLITE_IOCAP_ATOMIC2K]
1205 ** <li> [SQLITE_IOCAP_ATOMIC4K]
1206 ** <li> [SQLITE_IOCAP_ATOMIC8K]
1207 ** <li> [SQLITE_IOCAP_ATOMIC16K]
1208 ** <li> [SQLITE_IOCAP_ATOMIC32K]
1209 ** <li> [SQLITE_IOCAP_ATOMIC64K]
1210 ** <li> [SQLITE_IOCAP_SAFE_APPEND]
1211 ** <li> [SQLITE_IOCAP_SEQUENTIAL]
1212 ** </ul>
1214 ** The SQLITE_IOCAP_ATOMIC property means that all writes of
1215 ** any size are atomic. The SQLITE_IOCAP_ATOMICnnn values
1216 ** mean that writes of blocks that are nnn bytes in size and
1217 ** are aligned to an address which is an integer multiple of
1218 ** nnn are atomic. The SQLITE_IOCAP_SAFE_APPEND value means
1219 ** that when data is appended to a file, the data is appended
1220 ** first then the size of the file is extended, never the other
1221 ** way around. The SQLITE_IOCAP_SEQUENTIAL property means that
1222 ** information is written to disk in the same order as calls
1223 ** to xWrite().
1225 ** If xRead() returns SQLITE_IOERR_SHORT_READ it must also fill
1226 ** in the unread portions of the buffer with zeros. A VFS that
1227 ** fails to zero-fill short reads might seem to work. However,
1228 ** failure to zero-fill short reads will eventually lead to
1229 ** database corruption.
1231 typedef struct sqlite3_io_methods sqlite3_io_methods;
1232 struct sqlite3_io_methods {
1233 int iVersion;
1234 int (*xClose)(sqlite3_file*);
1235 int (*xRead)(sqlite3_file*, void*, int iAmt, sqlite3_int64 iOfst);
1236 int (*xWrite)(sqlite3_file*, const void*, int iAmt, sqlite3_int64 iOfst);
1237 int (*xTruncate)(sqlite3_file*, sqlite3_int64 size);
1238 int (*xSync)(sqlite3_file*, int flags);
1239 int (*xFileSize)(sqlite3_file*, sqlite3_int64 *pSize);
1240 int (*xLock)(sqlite3_file*, int);
1241 int (*xUnlock)(sqlite3_file*, int);
1242 int (*xCheckReservedLock)(sqlite3_file*, int *pResOut);
1243 int (*xFileControl)(sqlite3_file*, int op, void *pArg);
1244 int (*xSectorSize)(sqlite3_file*);
1245 int (*xDeviceCharacteristics)(sqlite3_file*);
1246 /* Methods above are valid for version 1 */
1247 int (*xShmMap)(sqlite3_file*, int iPg, int pgsz, int, void volatile**);
1248 int (*xShmLock)(sqlite3_file*, int offset, int n, int flags);
1249 void (*xShmBarrier)(sqlite3_file*);
1250 int (*xShmUnmap)(sqlite3_file*, int deleteFlag);
1251 /* Methods above are valid for version 2 */
1252 /* Additional methods may be added in future releases */
1256 ** CAPI3REF: Standard File Control Opcodes
1258 ** These integer constants are opcodes for the xFileControl method
1259 ** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()]
1260 ** interface.
1262 ** The [SQLITE_FCNTL_LOCKSTATE] opcode is used for debugging. This
1263 ** opcode causes the xFileControl method to write the current state of
1264 ** the lock (one of [SQLITE_LOCK_NONE], [SQLITE_LOCK_SHARED],
1265 ** [SQLITE_LOCK_RESERVED], [SQLITE_LOCK_PENDING], or [SQLITE_LOCK_EXCLUSIVE])
1266 ** into an integer that the pArg argument points to. This capability
1267 ** is used during testing and only needs to be supported when SQLITE_TEST
1268 ** is defined.
1270 ** The [SQLITE_FCNTL_SIZE_HINT] opcode is used by SQLite to give the VFS
1271 ** layer a hint of how large the database file will grow to be during the
1272 ** current transaction. This hint is not guaranteed to be accurate but it
1273 ** is often close. The underlying VFS might choose to preallocate database
1274 ** file space based on this hint in order to help writes to the database
1275 ** file run faster.
1277 ** The [SQLITE_FCNTL_CHUNK_SIZE] opcode is used to request that the VFS
1278 ** extends and truncates the database file in chunks of a size specified
1279 ** by the user. The fourth argument to [sqlite3_file_control()] should
1280 ** point to an integer (type int) containing the new chunk-size to use
1281 ** for the nominated database. Allocating database file space in large
1282 ** chunks (say 1MB at a time), may reduce file-system fragmentation and
1283 ** improve performance on some systems.
1285 ** The [SQLITE_FCNTL_FILE_POINTER] opcode is used to obtain a pointer
1286 ** to the [sqlite3_file] object associated with a particular database
1287 ** connection. See the [sqlite3_file_control()] documentation for
1288 ** additional information.
1290 ** ^(The [SQLITE_FCNTL_SYNC_OMITTED] opcode is generated internally by
1291 ** SQLite and sent to all VFSes in place of a call to the xSync method
1292 ** when the database connection has [PRAGMA synchronous] set to OFF.)^
1293 ** Some specialized VFSes need this signal in order to operate correctly
1294 ** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most
1295 ** VFSes do not need this signal and should silently ignore this opcode.
1296 ** Applications should not call [sqlite3_file_control()] with this
1297 ** opcode as doing so may disrupt the operation of the specialized VFSes
1298 ** that do require it.
1300 ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic
1301 ** retry counts and intervals for certain disk I/O operations for the
1302 ** windows [VFS] in order to provide robustness in the presence of
1303 ** anti-virus programs. By default, the windows VFS will retry file read,
1304 ** file write, and file delete operations up to 10 times, with a delay
1305 ** of 25 milliseconds before the first retry and with the delay increasing
1306 ** by an additional 25 milliseconds with each subsequent retry. This
1307 ** opcode allows these two values (10 retries and 25 milliseconds of delay)
1308 ** to be adjusted. The values are changed for all database connections
1309 ** within the same process. The argument is a pointer to an array of two
1310 ** integers where the first integer i the new retry count and the second
1311 ** integer is the delay. If either integer is negative, then the setting
1312 ** is not changed but instead the prior value of that setting is written
1313 ** into the array entry, allowing the current retry settings to be
1314 ** interrogated. The zDbName parameter is ignored.
1316 ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the
1317 ** persistent [WAL | Write AHead Log] setting. By default, the auxiliary
1318 ** write ahead log and shared memory files used for transaction control
1319 ** are automatically deleted when the latest connection to the database
1320 ** closes. Setting persistent WAL mode causes those files to persist after
1321 ** close. Persisting the files is useful when other processes that do not
1322 ** have write permission on the directory containing the database file want
1323 ** to read the database file, as the WAL and shared memory files must exist
1324 ** in order for the database to be readable. The fourth parameter to
1325 ** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
1326 ** That integer is 0 to disable persistent WAL mode or 1 to enable persistent
1327 ** WAL mode. If the integer is -1, then it is overwritten with the current
1328 ** WAL persistence setting.
1330 ** ^The [SQLITE_FCNTL_POWERSAFE_OVERWRITE] opcode is used to set or query the
1331 ** persistent "powersafe-overwrite" or "PSOW" setting. The PSOW setting
1332 ** determines the [SQLITE_IOCAP_POWERSAFE_OVERWRITE] bit of the
1333 ** xDeviceCharacteristics methods. The fourth parameter to
1334 ** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
1335 ** That integer is 0 to disable zero-damage mode or 1 to enable zero-damage
1336 ** mode. If the integer is -1, then it is overwritten with the current
1337 ** zero-damage mode setting.
1339 ** ^The [SQLITE_FCNTL_OVERWRITE] opcode is invoked by SQLite after opening
1340 ** a write transaction to indicate that, unless it is rolled back for some
1341 ** reason, the entire database file will be overwritten by the current
1342 ** transaction. This is used by VACUUM operations.
1344 ** ^The [SQLITE_FCNTL_VFSNAME] opcode can be used to obtain the names of
1345 ** all [VFSes] in the VFS stack. The names are of all VFS shims and the
1346 ** final bottom-level VFS are written into memory obtained from
1347 ** [sqlite3_malloc()] and the result is stored in the char* variable
1348 ** that the fourth parameter of [sqlite3_file_control()] points to.
1349 ** The caller is responsible for freeing the memory when done. As with
1350 ** all file-control actions, there is no guarantee that this will actually
1351 ** do anything. Callers should initialize the char* variable to a NULL
1352 ** pointer in case this file-control is not implemented. This file-control
1353 ** is intended for diagnostic use only.
1355 #define SQLITE_FCNTL_LOCKSTATE 1
1356 #define SQLITE_GET_LOCKPROXYFILE 2
1357 #define SQLITE_SET_LOCKPROXYFILE 3
1358 #define SQLITE_LAST_ERRNO 4
1359 #define SQLITE_FCNTL_SIZE_HINT 5
1360 #define SQLITE_FCNTL_CHUNK_SIZE 6
1361 #define SQLITE_FCNTL_FILE_POINTER 7
1362 #define SQLITE_FCNTL_SYNC_OMITTED 8
1363 #define SQLITE_FCNTL_WIN32_AV_RETRY 9
1364 #define SQLITE_FCNTL_PERSIST_WAL 10
1365 #define SQLITE_FCNTL_OVERWRITE 11
1366 #define SQLITE_FCNTL_VFSNAME 12
1367 #define SQLITE_FCNTL_POWERSAFE_OVERWRITE 13
1370 ** CAPI3REF: Mutex Handle
1372 ** The mutex module within SQLite defines [sqlite3_mutex] to be an
1373 ** abstract type for a mutex object. The SQLite core never looks
1374 ** at the internal representation of an [sqlite3_mutex]. It only
1375 ** deals with pointers to the [sqlite3_mutex] object.
1377 ** Mutexes are created using [sqlite3_mutex_alloc()].
1379 typedef struct sqlite3_mutex sqlite3_mutex;
1382 ** CAPI3REF: OS Interface Object
1384 ** An instance of the sqlite3_vfs object defines the interface between
1385 ** the SQLite core and the underlying operating system. The "vfs"
1386 ** in the name of the object stands for "virtual file system". See
1387 ** the [VFS | VFS documentation] for further information.
1389 ** The value of the iVersion field is initially 1 but may be larger in
1390 ** future versions of SQLite. Additional fields may be appended to this
1391 ** object when the iVersion value is increased. Note that the structure
1392 ** of the sqlite3_vfs object changes in the transaction between
1393 ** SQLite version 3.5.9 and 3.6.0 and yet the iVersion field was not
1394 ** modified.
1396 ** The szOsFile field is the size of the subclassed [sqlite3_file]
1397 ** structure used by this VFS. mxPathname is the maximum length of
1398 ** a pathname in this VFS.
1400 ** Registered sqlite3_vfs objects are kept on a linked list formed by
1401 ** the pNext pointer. The [sqlite3_vfs_register()]
1402 ** and [sqlite3_vfs_unregister()] interfaces manage this list
1403 ** in a thread-safe way. The [sqlite3_vfs_find()] interface
1404 ** searches the list. Neither the application code nor the VFS
1405 ** implementation should use the pNext pointer.
1407 ** The pNext field is the only field in the sqlite3_vfs
1408 ** structure that SQLite will ever modify. SQLite will only access
1409 ** or modify this field while holding a particular static mutex.
1410 ** The application should never modify anything within the sqlite3_vfs
1411 ** object once the object has been registered.
1413 ** The zName field holds the name of the VFS module. The name must
1414 ** be unique across all VFS modules.
1416 ** [[sqlite3_vfs.xOpen]]
1417 ** ^SQLite guarantees that the zFilename parameter to xOpen
1418 ** is either a NULL pointer or string obtained
1419 ** from xFullPathname() with an optional suffix added.
1420 ** ^If a suffix is added to the zFilename parameter, it will
1421 ** consist of a single "-" character followed by no more than
1422 ** 11 alphanumeric and/or "-" characters.
1423 ** ^SQLite further guarantees that
1424 ** the string will be valid and unchanged until xClose() is
1425 ** called. Because of the previous sentence,
1426 ** the [sqlite3_file] can safely store a pointer to the
1427 ** filename if it needs to remember the filename for some reason.
1428 ** If the zFilename parameter to xOpen is a NULL pointer then xOpen
1429 ** must invent its own temporary name for the file. ^Whenever the
1430 ** xFilename parameter is NULL it will also be the case that the
1431 ** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
1433 ** The flags argument to xOpen() includes all bits set in
1434 ** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()]
1435 ** or [sqlite3_open16()] is used, then flags includes at least
1436 ** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE].
1437 ** If xOpen() opens a file read-only then it sets *pOutFlags to
1438 ** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set.
1440 ** ^(SQLite will also add one of the following flags to the xOpen()
1441 ** call, depending on the object being opened:
1443 ** <ul>
1444 ** <li> [SQLITE_OPEN_MAIN_DB]
1445 ** <li> [SQLITE_OPEN_MAIN_JOURNAL]
1446 ** <li> [SQLITE_OPEN_TEMP_DB]
1447 ** <li> [SQLITE_OPEN_TEMP_JOURNAL]
1448 ** <li> [SQLITE_OPEN_TRANSIENT_DB]
1449 ** <li> [SQLITE_OPEN_SUBJOURNAL]
1450 ** <li> [SQLITE_OPEN_MASTER_JOURNAL]
1451 ** <li> [SQLITE_OPEN_WAL]
1452 ** </ul>)^
1454 ** The file I/O implementation can use the object type flags to
1455 ** change the way it deals with files. For example, an application
1456 ** that does not care about crash recovery or rollback might make
1457 ** the open of a journal file a no-op. Writes to this journal would
1458 ** also be no-ops, and any attempt to read the journal would return
1459 ** SQLITE_IOERR. Or the implementation might recognize that a database
1460 ** file will be doing page-aligned sector reads and writes in a random
1461 ** order and set up its I/O subsystem accordingly.
1463 ** SQLite might also add one of the following flags to the xOpen method:
1465 ** <ul>
1466 ** <li> [SQLITE_OPEN_DELETEONCLOSE]
1467 ** <li> [SQLITE_OPEN_EXCLUSIVE]
1468 ** </ul>
1470 ** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
1471 ** deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE]
1472 ** will be set for TEMP databases and their journals, transient
1473 ** databases, and subjournals.
1475 ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
1476 ** with the [SQLITE_OPEN_CREATE] flag, which are both directly
1477 ** analogous to the O_EXCL and O_CREAT flags of the POSIX open()
1478 ** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
1479 ** SQLITE_OPEN_CREATE, is used to indicate that file should always
1480 ** be created, and that it is an error if it already exists.
1481 ** It is <i>not</i> used to indicate the file should be opened
1482 ** for exclusive access.
1484 ** ^At least szOsFile bytes of memory are allocated by SQLite
1485 ** to hold the [sqlite3_file] structure passed as the third
1486 ** argument to xOpen. The xOpen method does not have to
1487 ** allocate the structure; it should just fill it in. Note that
1488 ** the xOpen method must set the sqlite3_file.pMethods to either
1489 ** a valid [sqlite3_io_methods] object or to NULL. xOpen must do
1490 ** this even if the open fails. SQLite expects that the sqlite3_file.pMethods
1491 ** element will be valid after xOpen returns regardless of the success
1492 ** or failure of the xOpen call.
1494 ** [[sqlite3_vfs.xAccess]]
1495 ** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
1496 ** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
1497 ** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
1498 ** to test whether a file is at least readable. The file can be a
1499 ** directory.
1501 ** ^SQLite will always allocate at least mxPathname+1 bytes for the
1502 ** output buffer xFullPathname. The exact size of the output buffer
1503 ** is also passed as a parameter to both methods. If the output buffer
1504 ** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
1505 ** handled as a fatal error by SQLite, vfs implementations should endeavor
1506 ** to prevent this by setting mxPathname to a sufficiently large value.
1508 ** The xRandomness(), xSleep(), xCurrentTime(), and xCurrentTimeInt64()
1509 ** interfaces are not strictly a part of the filesystem, but they are
1510 ** included in the VFS structure for completeness.
1511 ** The xRandomness() function attempts to return nBytes bytes
1512 ** of good-quality randomness into zOut. The return value is
1513 ** the actual number of bytes of randomness obtained.
1514 ** The xSleep() method causes the calling thread to sleep for at
1515 ** least the number of microseconds given. ^The xCurrentTime()
1516 ** method returns a Julian Day Number for the current date and time as
1517 ** a floating point value.
1518 ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
1519 ** Day Number multiplied by 86400000 (the number of milliseconds in
1520 ** a 24-hour day).
1521 ** ^SQLite will use the xCurrentTimeInt64() method to get the current
1522 ** date and time if that method is available (if iVersion is 2 or
1523 ** greater and the function pointer is not NULL) and will fall back
1524 ** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
1526 ** ^The xSetSystemCall(), xGetSystemCall(), and xNestSystemCall() interfaces
1527 ** are not used by the SQLite core. These optional interfaces are provided
1528 ** by some VFSes to facilitate testing of the VFS code. By overriding
1529 ** system calls with functions under its control, a test program can
1530 ** simulate faults and error conditions that would otherwise be difficult
1531 ** or impossible to induce. The set of system calls that can be overridden
1532 ** varies from one VFS to another, and from one version of the same VFS to the
1533 ** next. Applications that use these interfaces must be prepared for any
1534 ** or all of these interfaces to be NULL or for their behavior to change
1535 ** from one release to the next. Applications must not attempt to access
1536 ** any of these methods if the iVersion of the VFS is less than 3.
1538 typedef struct sqlite3_vfs sqlite3_vfs;
1539 typedef void (*sqlite3_syscall_ptr)(void);
1540 struct sqlite3_vfs {
1541 int iVersion; /* Structure version number (currently 3) */
1542 int szOsFile; /* Size of subclassed sqlite3_file */
1543 int mxPathname; /* Maximum file pathname length */
1544 sqlite3_vfs *pNext; /* Next registered VFS */
1545 const char *zName; /* Name of this virtual file system */
1546 void *pAppData; /* Pointer to application-specific data */
1547 int (*xOpen)(sqlite3_vfs*, const char *zName, sqlite3_file*,
1548 int flags, int *pOutFlags);
1549 int (*xDelete)(sqlite3_vfs*, const char *zName, int syncDir);
1550 int (*xAccess)(sqlite3_vfs*, const char *zName, int flags, int *pResOut);
1551 int (*xFullPathname)(sqlite3_vfs*, const char *zName, int nOut, char *zOut);
1552 void *(*xDlOpen)(sqlite3_vfs*, const char *zFilename);
1553 void (*xDlError)(sqlite3_vfs*, int nByte, char *zErrMsg);
1554 void (*(*xDlSym)(sqlite3_vfs*,void*, const char *zSymbol))(void);
1555 void (*xDlClose)(sqlite3_vfs*, void*);
1556 int (*xRandomness)(sqlite3_vfs*, int nByte, char *zOut);
1557 int (*xSleep)(sqlite3_vfs*, int microseconds);
1558 int (*xCurrentTime)(sqlite3_vfs*, double*);
1559 int (*xGetLastError)(sqlite3_vfs*, int, char *);
1561 ** The methods above are in version 1 of the sqlite_vfs object
1562 ** definition. Those that follow are added in version 2 or later
1564 int (*xCurrentTimeInt64)(sqlite3_vfs*, sqlite3_int64*);
1566 ** The methods above are in versions 1 and 2 of the sqlite_vfs object.
1567 ** Those below are for version 3 and greater.
1569 int (*xSetSystemCall)(sqlite3_vfs*, const char *zName, sqlite3_syscall_ptr);
1570 sqlite3_syscall_ptr (*xGetSystemCall)(sqlite3_vfs*, const char *zName);
1571 const char *(*xNextSystemCall)(sqlite3_vfs*, const char *zName);
1573 ** The methods above are in versions 1 through 3 of the sqlite_vfs object.
1574 ** New fields may be appended in figure versions. The iVersion
1575 ** value will increment whenever this happens.
1580 ** CAPI3REF: Flags for the xAccess VFS method
1582 ** These integer constants can be used as the third parameter to
1583 ** the xAccess method of an [sqlite3_vfs] object. They determine
1584 ** what kind of permissions the xAccess method is looking for.
1585 ** With SQLITE_ACCESS_EXISTS, the xAccess method
1586 ** simply checks whether the file exists.
1587 ** With SQLITE_ACCESS_READWRITE, the xAccess method
1588 ** checks whether the named directory is both readable and writable
1589 ** (in other words, if files can be added, removed, and renamed within
1590 ** the directory).
1591 ** The SQLITE_ACCESS_READWRITE constant is currently used only by the
1592 ** [temp_store_directory pragma], though this could change in a future
1593 ** release of SQLite.
1594 ** With SQLITE_ACCESS_READ, the xAccess method
1595 ** checks whether the file is readable. The SQLITE_ACCESS_READ constant is
1596 ** currently unused, though it might be used in a future release of
1597 ** SQLite.
1599 #define SQLITE_ACCESS_EXISTS 0
1600 #define SQLITE_ACCESS_READWRITE 1 /* Used by PRAGMA temp_store_directory */
1601 #define SQLITE_ACCESS_READ 2 /* Unused */
1604 ** CAPI3REF: Flags for the xShmLock VFS method
1606 ** These integer constants define the various locking operations
1607 ** allowed by the xShmLock method of [sqlite3_io_methods]. The
1608 ** following are the only legal combinations of flags to the
1609 ** xShmLock method:
1611 ** <ul>
1612 ** <li> SQLITE_SHM_LOCK | SQLITE_SHM_SHARED
1613 ** <li> SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE
1614 ** <li> SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED
1615 ** <li> SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE
1616 ** </ul>
1618 ** When unlocking, the same SHARED or EXCLUSIVE flag must be supplied as
1619 ** was given no the corresponding lock.
1621 ** The xShmLock method can transition between unlocked and SHARED or
1622 ** between unlocked and EXCLUSIVE. It cannot transition between SHARED
1623 ** and EXCLUSIVE.
1625 #define SQLITE_SHM_UNLOCK 1
1626 #define SQLITE_SHM_LOCK 2
1627 #define SQLITE_SHM_SHARED 4
1628 #define SQLITE_SHM_EXCLUSIVE 8
1631 ** CAPI3REF: Maximum xShmLock index
1633 ** The xShmLock method on [sqlite3_io_methods] may use values
1634 ** between 0 and this upper bound as its "offset" argument.
1635 ** The SQLite core will never attempt to acquire or release a
1636 ** lock outside of this range
1638 #define SQLITE_SHM_NLOCK 8
1642 ** CAPI3REF: Initialize The SQLite Library
1644 ** ^The sqlite3_initialize() routine initializes the
1645 ** SQLite library. ^The sqlite3_shutdown() routine
1646 ** deallocates any resources that were allocated by sqlite3_initialize().
1647 ** These routines are designed to aid in process initialization and
1648 ** shutdown on embedded systems. Workstation applications using
1649 ** SQLite normally do not need to invoke either of these routines.
1651 ** A call to sqlite3_initialize() is an "effective" call if it is
1652 ** the first time sqlite3_initialize() is invoked during the lifetime of
1653 ** the process, or if it is the first time sqlite3_initialize() is invoked
1654 ** following a call to sqlite3_shutdown(). ^(Only an effective call
1655 ** of sqlite3_initialize() does any initialization. All other calls
1656 ** are harmless no-ops.)^
1658 ** A call to sqlite3_shutdown() is an "effective" call if it is the first
1659 ** call to sqlite3_shutdown() since the last sqlite3_initialize(). ^(Only
1660 ** an effective call to sqlite3_shutdown() does any deinitialization.
1661 ** All other valid calls to sqlite3_shutdown() are harmless no-ops.)^
1663 ** The sqlite3_initialize() interface is threadsafe, but sqlite3_shutdown()
1664 ** is not. The sqlite3_shutdown() interface must only be called from a
1665 ** single thread. All open [database connections] must be closed and all
1666 ** other SQLite resources must be deallocated prior to invoking
1667 ** sqlite3_shutdown().
1669 ** Among other things, ^sqlite3_initialize() will invoke
1670 ** sqlite3_os_init(). Similarly, ^sqlite3_shutdown()
1671 ** will invoke sqlite3_os_end().
1673 ** ^The sqlite3_initialize() routine returns [SQLITE_OK] on success.
1674 ** ^If for some reason, sqlite3_initialize() is unable to initialize
1675 ** the library (perhaps it is unable to allocate a needed resource such
1676 ** as a mutex) it returns an [error code] other than [SQLITE_OK].
1678 ** ^The sqlite3_initialize() routine is called internally by many other
1679 ** SQLite interfaces so that an application usually does not need to
1680 ** invoke sqlite3_initialize() directly. For example, [sqlite3_open()]
1681 ** calls sqlite3_initialize() so the SQLite library will be automatically
1682 ** initialized when [sqlite3_open()] is called if it has not be initialized
1683 ** already. ^However, if SQLite is compiled with the [SQLITE_OMIT_AUTOINIT]
1684 ** compile-time option, then the automatic calls to sqlite3_initialize()
1685 ** are omitted and the application must call sqlite3_initialize() directly
1686 ** prior to using any other SQLite interface. For maximum portability,
1687 ** it is recommended that applications always invoke sqlite3_initialize()
1688 ** directly prior to using any other SQLite interface. Future releases
1689 ** of SQLite may require this. In other words, the behavior exhibited
1690 ** when SQLite is compiled with [SQLITE_OMIT_AUTOINIT] might become the
1691 ** default behavior in some future release of SQLite.
1693 ** The sqlite3_os_init() routine does operating-system specific
1694 ** initialization of the SQLite library. The sqlite3_os_end()
1695 ** routine undoes the effect of sqlite3_os_init(). Typical tasks
1696 ** performed by these routines include allocation or deallocation
1697 ** of static resources, initialization of global variables,
1698 ** setting up a default [sqlite3_vfs] module, or setting up
1699 ** a default configuration using [sqlite3_config()].
1701 ** The application should never invoke either sqlite3_os_init()
1702 ** or sqlite3_os_end() directly. The application should only invoke
1703 ** sqlite3_initialize() and sqlite3_shutdown(). The sqlite3_os_init()
1704 ** interface is called automatically by sqlite3_initialize() and
1705 ** sqlite3_os_end() is called by sqlite3_shutdown(). Appropriate
1706 ** implementations for sqlite3_os_init() and sqlite3_os_end()
1707 ** are built into SQLite when it is compiled for Unix, Windows, or OS/2.
1708 ** When [custom builds | built for other platforms]
1709 ** (using the [SQLITE_OS_OTHER=1] compile-time
1710 ** option) the application must supply a suitable implementation for
1711 ** sqlite3_os_init() and sqlite3_os_end(). An application-supplied
1712 ** implementation of sqlite3_os_init() or sqlite3_os_end()
1713 ** must return [SQLITE_OK] on success and some other [error code] upon
1714 ** failure.
1716 SQLITE_API int sqlite3_initialize(void);
1717 SQLITE_API int sqlite3_shutdown(void);
1718 SQLITE_API int sqlite3_os_init(void);
1719 SQLITE_API int sqlite3_os_end(void);
1722 ** CAPI3REF: Configuring The SQLite Library
1724 ** The sqlite3_config() interface is used to make global configuration
1725 ** changes to SQLite in order to tune SQLite to the specific needs of
1726 ** the application. The default configuration is recommended for most
1727 ** applications and so this routine is usually not necessary. It is
1728 ** provided to support rare applications with unusual needs.
1730 ** The sqlite3_config() interface is not threadsafe. The application
1731 ** must insure that no other SQLite interfaces are invoked by other
1732 ** threads while sqlite3_config() is running. Furthermore, sqlite3_config()
1733 ** may only be invoked prior to library initialization using
1734 ** [sqlite3_initialize()] or after shutdown by [sqlite3_shutdown()].
1735 ** ^If sqlite3_config() is called after [sqlite3_initialize()] and before
1736 ** [sqlite3_shutdown()] then it will return SQLITE_MISUSE.
1737 ** Note, however, that ^sqlite3_config() can be called as part of the
1738 ** implementation of an application-defined [sqlite3_os_init()].
1740 ** The first argument to sqlite3_config() is an integer
1741 ** [configuration option] that determines
1742 ** what property of SQLite is to be configured. Subsequent arguments
1743 ** vary depending on the [configuration option]
1744 ** in the first argument.
1746 ** ^When a configuration option is set, sqlite3_config() returns [SQLITE_OK].
1747 ** ^If the option is unknown or SQLite is unable to set the option
1748 ** then this routine returns a non-zero [error code].
1750 SQLITE_API int sqlite3_config(int, ...);
1753 ** CAPI3REF: Configure database connections
1755 ** The sqlite3_db_config() interface is used to make configuration
1756 ** changes to a [database connection]. The interface is similar to
1757 ** [sqlite3_config()] except that the changes apply to a single
1758 ** [database connection] (specified in the first argument).
1760 ** The second argument to sqlite3_db_config(D,V,...) is the
1761 ** [SQLITE_DBCONFIG_LOOKASIDE | configuration verb] - an integer code
1762 ** that indicates what aspect of the [database connection] is being configured.
1763 ** Subsequent arguments vary depending on the configuration verb.
1765 ** ^Calls to sqlite3_db_config() return SQLITE_OK if and only if
1766 ** the call is considered successful.
1768 SQLITE_API int sqlite3_db_config(sqlite3*, int op, ...);
1771 ** CAPI3REF: Memory Allocation Routines
1773 ** An instance of this object defines the interface between SQLite
1774 ** and low-level memory allocation routines.
1776 ** This object is used in only one place in the SQLite interface.
1777 ** A pointer to an instance of this object is the argument to
1778 ** [sqlite3_config()] when the configuration option is
1779 ** [SQLITE_CONFIG_MALLOC] or [SQLITE_CONFIG_GETMALLOC].
1780 ** By creating an instance of this object
1781 ** and passing it to [sqlite3_config]([SQLITE_CONFIG_MALLOC])
1782 ** during configuration, an application can specify an alternative
1783 ** memory allocation subsystem for SQLite to use for all of its
1784 ** dynamic memory needs.
1786 ** Note that SQLite comes with several [built-in memory allocators]
1787 ** that are perfectly adequate for the overwhelming majority of applications
1788 ** and that this object is only useful to a tiny minority of applications
1789 ** with specialized memory allocation requirements. This object is
1790 ** also used during testing of SQLite in order to specify an alternative
1791 ** memory allocator that simulates memory out-of-memory conditions in
1792 ** order to verify that SQLite recovers gracefully from such
1793 ** conditions.
1795 ** The xMalloc, xRealloc, and xFree methods must work like the
1796 ** malloc(), realloc() and free() functions from the standard C library.
1797 ** ^SQLite guarantees that the second argument to
1798 ** xRealloc is always a value returned by a prior call to xRoundup.
1800 ** xSize should return the allocated size of a memory allocation
1801 ** previously obtained from xMalloc or xRealloc. The allocated size
1802 ** is always at least as big as the requested size but may be larger.
1804 ** The xRoundup method returns what would be the allocated size of
1805 ** a memory allocation given a particular requested size. Most memory
1806 ** allocators round up memory allocations at least to the next multiple
1807 ** of 8. Some allocators round up to a larger multiple or to a power of 2.
1808 ** Every memory allocation request coming in through [sqlite3_malloc()]
1809 ** or [sqlite3_realloc()] first calls xRoundup. If xRoundup returns 0,
1810 ** that causes the corresponding memory allocation to fail.
1812 ** The xInit method initializes the memory allocator. (For example,
1813 ** it might allocate any require mutexes or initialize internal data
1814 ** structures. The xShutdown method is invoked (indirectly) by
1815 ** [sqlite3_shutdown()] and should deallocate any resources acquired
1816 ** by xInit. The pAppData pointer is used as the only parameter to
1817 ** xInit and xShutdown.
1819 ** SQLite holds the [SQLITE_MUTEX_STATIC_MASTER] mutex when it invokes
1820 ** the xInit method, so the xInit method need not be threadsafe. The
1821 ** xShutdown method is only called from [sqlite3_shutdown()] so it does
1822 ** not need to be threadsafe either. For all other methods, SQLite
1823 ** holds the [SQLITE_MUTEX_STATIC_MEM] mutex as long as the
1824 ** [SQLITE_CONFIG_MEMSTATUS] configuration option is turned on (which
1825 ** it is by default) and so the methods are automatically serialized.
1826 ** However, if [SQLITE_CONFIG_MEMSTATUS] is disabled, then the other
1827 ** methods must be threadsafe or else make their own arrangements for
1828 ** serialization.
1830 ** SQLite will never invoke xInit() more than once without an intervening
1831 ** call to xShutdown().
1833 typedef struct sqlite3_mem_methods sqlite3_mem_methods;
1834 struct sqlite3_mem_methods {
1835 void *(*xMalloc)(int); /* Memory allocation function */
1836 void (*xFree)(void*); /* Free a prior allocation */
1837 void *(*xRealloc)(void*,int); /* Resize an allocation */
1838 int (*xSize)(void*); /* Return the size of an allocation */
1839 int (*xRoundup)(int); /* Round up request size to allocation size */
1840 int (*xInit)(void*); /* Initialize the memory allocator */
1841 void (*xShutdown)(void*); /* Deinitialize the memory allocator */
1842 void *pAppData; /* Argument to xInit() and xShutdown() */
1846 ** CAPI3REF: Configuration Options
1847 ** KEYWORDS: {configuration option}
1849 ** These constants are the available integer configuration options that
1850 ** can be passed as the first argument to the [sqlite3_config()] interface.
1852 ** New configuration options may be added in future releases of SQLite.
1853 ** Existing configuration options might be discontinued. Applications
1854 ** should check the return code from [sqlite3_config()] to make sure that
1855 ** the call worked. The [sqlite3_config()] interface will return a
1856 ** non-zero [error code] if a discontinued or unsupported configuration option
1857 ** is invoked.
1859 ** <dl>
1860 ** [[SQLITE_CONFIG_SINGLETHREAD]] <dt>SQLITE_CONFIG_SINGLETHREAD</dt>
1861 ** <dd>There are no arguments to this option. ^This option sets the
1862 ** [threading mode] to Single-thread. In other words, it disables
1863 ** all mutexing and puts SQLite into a mode where it can only be used
1864 ** by a single thread. ^If SQLite is compiled with
1865 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1866 ** it is not possible to change the [threading mode] from its default
1867 ** value of Single-thread and so [sqlite3_config()] will return
1868 ** [SQLITE_ERROR] if called with the SQLITE_CONFIG_SINGLETHREAD
1869 ** configuration option.</dd>
1871 ** [[SQLITE_CONFIG_MULTITHREAD]] <dt>SQLITE_CONFIG_MULTITHREAD</dt>
1872 ** <dd>There are no arguments to this option. ^This option sets the
1873 ** [threading mode] to Multi-thread. In other words, it disables
1874 ** mutexing on [database connection] and [prepared statement] objects.
1875 ** The application is responsible for serializing access to
1876 ** [database connections] and [prepared statements]. But other mutexes
1877 ** are enabled so that SQLite will be safe to use in a multi-threaded
1878 ** environment as long as no two threads attempt to use the same
1879 ** [database connection] at the same time. ^If SQLite is compiled with
1880 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1881 ** it is not possible to set the Multi-thread [threading mode] and
1882 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1883 ** SQLITE_CONFIG_MULTITHREAD configuration option.</dd>
1885 ** [[SQLITE_CONFIG_SERIALIZED]] <dt>SQLITE_CONFIG_SERIALIZED</dt>
1886 ** <dd>There are no arguments to this option. ^This option sets the
1887 ** [threading mode] to Serialized. In other words, this option enables
1888 ** all mutexes including the recursive
1889 ** mutexes on [database connection] and [prepared statement] objects.
1890 ** In this mode (which is the default when SQLite is compiled with
1891 ** [SQLITE_THREADSAFE=1]) the SQLite library will itself serialize access
1892 ** to [database connections] and [prepared statements] so that the
1893 ** application is free to use the same [database connection] or the
1894 ** same [prepared statement] in different threads at the same time.
1895 ** ^If SQLite is compiled with
1896 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1897 ** it is not possible to set the Serialized [threading mode] and
1898 ** [sqlite3_config()] will return [SQLITE_ERROR] if called with the
1899 ** SQLITE_CONFIG_SERIALIZED configuration option.</dd>
1901 ** [[SQLITE_CONFIG_MALLOC]] <dt>SQLITE_CONFIG_MALLOC</dt>
1902 ** <dd> ^(This option takes a single argument which is a pointer to an
1903 ** instance of the [sqlite3_mem_methods] structure. The argument specifies
1904 ** alternative low-level memory allocation routines to be used in place of
1905 ** the memory allocation routines built into SQLite.)^ ^SQLite makes
1906 ** its own private copy of the content of the [sqlite3_mem_methods] structure
1907 ** before the [sqlite3_config()] call returns.</dd>
1909 ** [[SQLITE_CONFIG_GETMALLOC]] <dt>SQLITE_CONFIG_GETMALLOC</dt>
1910 ** <dd> ^(This option takes a single argument which is a pointer to an
1911 ** instance of the [sqlite3_mem_methods] structure. The [sqlite3_mem_methods]
1912 ** structure is filled with the currently defined memory allocation routines.)^
1913 ** This option can be used to overload the default memory allocation
1914 ** routines with a wrapper that simulations memory allocation failure or
1915 ** tracks memory usage, for example. </dd>
1917 ** [[SQLITE_CONFIG_MEMSTATUS]] <dt>SQLITE_CONFIG_MEMSTATUS</dt>
1918 ** <dd> ^This option takes single argument of type int, interpreted as a
1919 ** boolean, which enables or disables the collection of memory allocation
1920 ** statistics. ^(When memory allocation statistics are disabled, the
1921 ** following SQLite interfaces become non-operational:
1922 ** <ul>
1923 ** <li> [sqlite3_memory_used()]
1924 ** <li> [sqlite3_memory_highwater()]
1925 ** <li> [sqlite3_soft_heap_limit64()]
1926 ** <li> [sqlite3_status()]
1927 ** </ul>)^
1928 ** ^Memory allocation statistics are enabled by default unless SQLite is
1929 ** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1930 ** allocation statistics are disabled by default.
1931 ** </dd>
1933 ** [[SQLITE_CONFIG_SCRATCH]] <dt>SQLITE_CONFIG_SCRATCH</dt>
1934 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1935 ** scratch memory. There are three arguments: A pointer an 8-byte
1936 ** aligned memory buffer from which the scratch allocations will be
1937 ** drawn, the size of each scratch allocation (sz),
1938 ** and the maximum number of scratch allocations (N). The sz
1939 ** argument must be a multiple of 16.
1940 ** The first argument must be a pointer to an 8-byte aligned buffer
1941 ** of at least sz*N bytes of memory.
1942 ** ^SQLite will use no more than two scratch buffers per thread. So
1943 ** N should be set to twice the expected maximum number of threads.
1944 ** ^SQLite will never require a scratch buffer that is more than 6
1945 ** times the database page size. ^If SQLite needs needs additional
1946 ** scratch memory beyond what is provided by this configuration option, then
1947 ** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
1949 ** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1950 ** <dd> ^This option specifies a static memory buffer that SQLite can use for
1951 ** the database page cache with the default page cache implementation.
1952 ** This configuration should not be used if an application-define page
1953 ** cache implementation is loaded using the SQLITE_CONFIG_PCACHE2 option.
1954 ** There are three arguments to this option: A pointer to 8-byte aligned
1955 ** memory, the size of each page buffer (sz), and the number of pages (N).
1956 ** The sz argument should be the size of the largest database page
1957 ** (a power of two between 512 and 32768) plus a little extra for each
1958 ** page header. ^The page header size is 20 to 40 bytes depending on
1959 ** the host architecture. ^It is harmless, apart from the wasted memory,
1960 ** to make sz a little too large. The first
1961 ** argument should point to an allocation of at least sz*N bytes of memory.
1962 ** ^SQLite will use the memory provided by the first argument to satisfy its
1963 ** memory needs for the first N pages that it adds to cache. ^If additional
1964 ** page cache memory is needed beyond what is provided by this option, then
1965 ** SQLite goes to [sqlite3_malloc()] for the additional storage space.
1966 ** The pointer in the first argument must
1967 ** be aligned to an 8-byte boundary or subsequent behavior of SQLite
1968 ** will be undefined.</dd>
1970 ** [[SQLITE_CONFIG_HEAP]] <dt>SQLITE_CONFIG_HEAP</dt>
1971 ** <dd> ^This option specifies a static memory buffer that SQLite will use
1972 ** for all of its dynamic memory allocation needs beyond those provided
1973 ** for by [SQLITE_CONFIG_SCRATCH] and [SQLITE_CONFIG_PAGECACHE].
1974 ** There are three arguments: An 8-byte aligned pointer to the memory,
1975 ** the number of bytes in the memory buffer, and the minimum allocation size.
1976 ** ^If the first pointer (the memory pointer) is NULL, then SQLite reverts
1977 ** to using its default memory allocator (the system malloc() implementation),
1978 ** undoing any prior invocation of [SQLITE_CONFIG_MALLOC]. ^If the
1979 ** memory pointer is not NULL and either [SQLITE_ENABLE_MEMSYS3] or
1980 ** [SQLITE_ENABLE_MEMSYS5] are defined, then the alternative memory
1981 ** allocator is engaged to handle all of SQLites memory allocation needs.
1982 ** The first pointer (the memory pointer) must be aligned to an 8-byte
1983 ** boundary or subsequent behavior of SQLite will be undefined.
1984 ** The minimum allocation size is capped at 2**12. Reasonable values
1985 ** for the minimum allocation size are 2**5 through 2**8.</dd>
1987 ** [[SQLITE_CONFIG_MUTEX]] <dt>SQLITE_CONFIG_MUTEX</dt>
1988 ** <dd> ^(This option takes a single argument which is a pointer to an
1989 ** instance of the [sqlite3_mutex_methods] structure. The argument specifies
1990 ** alternative low-level mutex routines to be used in place
1991 ** the mutex routines built into SQLite.)^ ^SQLite makes a copy of the
1992 ** content of the [sqlite3_mutex_methods] structure before the call to
1993 ** [sqlite3_config()] returns. ^If SQLite is compiled with
1994 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
1995 ** the entire mutexing subsystem is omitted from the build and hence calls to
1996 ** [sqlite3_config()] with the SQLITE_CONFIG_MUTEX configuration option will
1997 ** return [SQLITE_ERROR].</dd>
1999 ** [[SQLITE_CONFIG_GETMUTEX]] <dt>SQLITE_CONFIG_GETMUTEX</dt>
2000 ** <dd> ^(This option takes a single argument which is a pointer to an
2001 ** instance of the [sqlite3_mutex_methods] structure. The
2002 ** [sqlite3_mutex_methods]
2003 ** structure is filled with the currently defined mutex routines.)^
2004 ** This option can be used to overload the default mutex allocation
2005 ** routines with a wrapper used to track mutex usage for performance
2006 ** profiling or testing, for example. ^If SQLite is compiled with
2007 ** the [SQLITE_THREADSAFE | SQLITE_THREADSAFE=0] compile-time option then
2008 ** the entire mutexing subsystem is omitted from the build and hence calls to
2009 ** [sqlite3_config()] with the SQLITE_CONFIG_GETMUTEX configuration option will
2010 ** return [SQLITE_ERROR].</dd>
2012 ** [[SQLITE_CONFIG_LOOKASIDE]] <dt>SQLITE_CONFIG_LOOKASIDE</dt>
2013 ** <dd> ^(This option takes two arguments that determine the default
2014 ** memory allocation for the lookaside memory allocator on each
2015 ** [database connection]. The first argument is the
2016 ** size of each lookaside buffer slot and the second is the number of
2017 ** slots allocated to each database connection.)^ ^(This option sets the
2018 ** <i>default</i> lookaside size. The [SQLITE_DBCONFIG_LOOKASIDE]
2019 ** verb to [sqlite3_db_config()] can be used to change the lookaside
2020 ** configuration on individual connections.)^ </dd>
2022 ** [[SQLITE_CONFIG_PCACHE2]] <dt>SQLITE_CONFIG_PCACHE2</dt>
2023 ** <dd> ^(This option takes a single argument which is a pointer to
2024 ** an [sqlite3_pcache_methods2] object. This object specifies the interface
2025 ** to a custom page cache implementation.)^ ^SQLite makes a copy of the
2026 ** object and uses it for page cache memory allocations.</dd>
2028 ** [[SQLITE_CONFIG_GETPCACHE2]] <dt>SQLITE_CONFIG_GETPCACHE2</dt>
2029 ** <dd> ^(This option takes a single argument which is a pointer to an
2030 ** [sqlite3_pcache_methods2] object. SQLite copies of the current
2031 ** page cache implementation into that object.)^ </dd>
2033 ** [[SQLITE_CONFIG_LOG]] <dt>SQLITE_CONFIG_LOG</dt>
2034 ** <dd> ^The SQLITE_CONFIG_LOG option takes two arguments: a pointer to a
2035 ** function with a call signature of void(*)(void*,int,const char*),
2036 ** and a pointer to void. ^If the function pointer is not NULL, it is
2037 ** invoked by [sqlite3_log()] to process each logging event. ^If the
2038 ** function pointer is NULL, the [sqlite3_log()] interface becomes a no-op.
2039 ** ^The void pointer that is the second argument to SQLITE_CONFIG_LOG is
2040 ** passed through as the first parameter to the application-defined logger
2041 ** function whenever that function is invoked. ^The second parameter to
2042 ** the logger function is a copy of the first parameter to the corresponding
2043 ** [sqlite3_log()] call and is intended to be a [result code] or an
2044 ** [extended result code]. ^The third parameter passed to the logger is
2045 ** log message after formatting via [sqlite3_snprintf()].
2046 ** The SQLite logging interface is not reentrant; the logger function
2047 ** supplied by the application must not invoke any SQLite interface.
2048 ** In a multi-threaded application, the application-defined logger
2049 ** function must be threadsafe. </dd>
2051 ** [[SQLITE_CONFIG_URI]] <dt>SQLITE_CONFIG_URI
2052 ** <dd> This option takes a single argument of type int. If non-zero, then
2053 ** URI handling is globally enabled. If the parameter is zero, then URI handling
2054 ** is globally disabled. If URI handling is globally enabled, all filenames
2055 ** passed to [sqlite3_open()], [sqlite3_open_v2()], [sqlite3_open16()] or
2056 ** specified as part of [ATTACH] commands are interpreted as URIs, regardless
2057 ** of whether or not the [SQLITE_OPEN_URI] flag is set when the database
2058 ** connection is opened. If it is globally disabled, filenames are
2059 ** only interpreted as URIs if the SQLITE_OPEN_URI flag is set when the
2060 ** database connection is opened. By default, URI handling is globally
2061 ** disabled. The default value may be changed by compiling with the
2062 ** [SQLITE_USE_URI] symbol defined.
2064 ** [[SQLITE_CONFIG_PCACHE]] [[SQLITE_CONFIG_GETPCACHE]]
2065 ** <dt>SQLITE_CONFIG_PCACHE and SQLITE_CONFNIG_GETPCACHE
2066 ** <dd> These options are obsolete and should not be used by new code.
2067 ** They are retained for backwards compatibility but are now no-ops.
2068 ** </dl>
2070 #define SQLITE_CONFIG_SINGLETHREAD 1 /* nil */
2071 #define SQLITE_CONFIG_MULTITHREAD 2 /* nil */
2072 #define SQLITE_CONFIG_SERIALIZED 3 /* nil */
2073 #define SQLITE_CONFIG_MALLOC 4 /* sqlite3_mem_methods* */
2074 #define SQLITE_CONFIG_GETMALLOC 5 /* sqlite3_mem_methods* */
2075 #define SQLITE_CONFIG_SCRATCH 6 /* void*, int sz, int N */
2076 #define SQLITE_CONFIG_PAGECACHE 7 /* void*, int sz, int N */
2077 #define SQLITE_CONFIG_HEAP 8 /* void*, int nByte, int min */
2078 #define SQLITE_CONFIG_MEMSTATUS 9 /* boolean */
2079 #define SQLITE_CONFIG_MUTEX 10 /* sqlite3_mutex_methods* */
2080 #define SQLITE_CONFIG_GETMUTEX 11 /* sqlite3_mutex_methods* */
2081 /* previously SQLITE_CONFIG_CHUNKALLOC 12 which is now unused. */
2082 #define SQLITE_CONFIG_LOOKASIDE 13 /* int int */
2083 #define SQLITE_CONFIG_PCACHE 14 /* no-op */
2084 #define SQLITE_CONFIG_GETPCACHE 15 /* no-op */
2085 #define SQLITE_CONFIG_LOG 16 /* xFunc, void* */
2086 #define SQLITE_CONFIG_URI 17 /* int */
2087 #define SQLITE_CONFIG_PCACHE2 18 /* sqlite3_pcache_methods2* */
2088 #define SQLITE_CONFIG_GETPCACHE2 19 /* sqlite3_pcache_methods2* */
2091 ** CAPI3REF: Database Connection Configuration Options
2093 ** These constants are the available integer configuration options that
2094 ** can be passed as the second argument to the [sqlite3_db_config()] interface.
2096 ** New configuration options may be added in future releases of SQLite.
2097 ** Existing configuration options might be discontinued. Applications
2098 ** should check the return code from [sqlite3_db_config()] to make sure that
2099 ** the call worked. ^The [sqlite3_db_config()] interface will return a
2100 ** non-zero [error code] if a discontinued or unsupported configuration option
2101 ** is invoked.
2103 ** <dl>
2104 ** <dt>SQLITE_DBCONFIG_LOOKASIDE</dt>
2105 ** <dd> ^This option takes three additional arguments that determine the
2106 ** [lookaside memory allocator] configuration for the [database connection].
2107 ** ^The first argument (the third parameter to [sqlite3_db_config()] is a
2108 ** pointer to a memory buffer to use for lookaside memory.
2109 ** ^The first argument after the SQLITE_DBCONFIG_LOOKASIDE verb
2110 ** may be NULL in which case SQLite will allocate the
2111 ** lookaside buffer itself using [sqlite3_malloc()]. ^The second argument is the
2112 ** size of each lookaside buffer slot. ^The third argument is the number of
2113 ** slots. The size of the buffer in the first argument must be greater than
2114 ** or equal to the product of the second and third arguments. The buffer
2115 ** must be aligned to an 8-byte boundary. ^If the second argument to
2116 ** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
2117 ** rounded down to the next smaller multiple of 8. ^(The lookaside memory
2118 ** configuration for a database connection can only be changed when that
2119 ** connection is not currently using lookaside memory, or in other words
2120 ** when the "current value" returned by
2121 ** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
2122 ** Any attempt to change the lookaside memory configuration when lookaside
2123 ** memory is in use leaves the configuration unchanged and returns
2124 ** [SQLITE_BUSY].)^</dd>
2126 ** <dt>SQLITE_DBCONFIG_ENABLE_FKEY</dt>
2127 ** <dd> ^This option is used to enable or disable the enforcement of
2128 ** [foreign key constraints]. There should be two additional arguments.
2129 ** The first argument is an integer which is 0 to disable FK enforcement,
2130 ** positive to enable FK enforcement or negative to leave FK enforcement
2131 ** unchanged. The second parameter is a pointer to an integer into which
2132 ** is written 0 or 1 to indicate whether FK enforcement is off or on
2133 ** following this call. The second parameter may be a NULL pointer, in
2134 ** which case the FK enforcement setting is not reported back. </dd>
2136 ** <dt>SQLITE_DBCONFIG_ENABLE_TRIGGER</dt>
2137 ** <dd> ^This option is used to enable or disable [CREATE TRIGGER | triggers].
2138 ** There should be two additional arguments.
2139 ** The first argument is an integer which is 0 to disable triggers,
2140 ** positive to enable triggers or negative to leave the setting unchanged.
2141 ** The second parameter is a pointer to an integer into which
2142 ** is written 0 or 1 to indicate whether triggers are disabled or enabled
2143 ** following this call. The second parameter may be a NULL pointer, in
2144 ** which case the trigger setting is not reported back. </dd>
2146 ** </dl>
2148 #define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
2149 #define SQLITE_DBCONFIG_ENABLE_FKEY 1002 /* int int* */
2150 #define SQLITE_DBCONFIG_ENABLE_TRIGGER 1003 /* int int* */
2154 ** CAPI3REF: Enable Or Disable Extended Result Codes
2156 ** ^The sqlite3_extended_result_codes() routine enables or disables the
2157 ** [extended result codes] feature of SQLite. ^The extended result
2158 ** codes are disabled by default for historical compatibility.
2160 SQLITE_API int sqlite3_extended_result_codes(sqlite3*, int onoff);
2163 ** CAPI3REF: Last Insert Rowid
2165 ** ^Each entry in an SQLite table has a unique 64-bit signed
2166 ** integer key called the [ROWID | "rowid"]. ^The rowid is always available
2167 ** as an undeclared column named ROWID, OID, or _ROWID_ as long as those
2168 ** names are not also used by explicitly declared columns. ^If
2169 ** the table has a column of type [INTEGER PRIMARY KEY] then that column
2170 ** is another alias for the rowid.
2172 ** ^This routine returns the [rowid] of the most recent
2173 ** successful [INSERT] into the database from the [database connection]
2174 ** in the first argument. ^As of SQLite version 3.7.7, this routines
2175 ** records the last insert rowid of both ordinary tables and [virtual tables].
2176 ** ^If no successful [INSERT]s
2177 ** have ever occurred on that database connection, zero is returned.
2179 ** ^(If an [INSERT] occurs within a trigger or within a [virtual table]
2180 ** method, then this routine will return the [rowid] of the inserted
2181 ** row as long as the trigger or virtual table method is running.
2182 ** But once the trigger or virtual table method ends, the value returned
2183 ** by this routine reverts to what it was before the trigger or virtual
2184 ** table method began.)^
2186 ** ^An [INSERT] that fails due to a constraint violation is not a
2187 ** successful [INSERT] and does not change the value returned by this
2188 ** routine. ^Thus INSERT OR FAIL, INSERT OR IGNORE, INSERT OR ROLLBACK,
2189 ** and INSERT OR ABORT make no changes to the return value of this
2190 ** routine when their insertion fails. ^(When INSERT OR REPLACE
2191 ** encounters a constraint violation, it does not fail. The
2192 ** INSERT continues to completion after deleting rows that caused
2193 ** the constraint problem so INSERT OR REPLACE will always change
2194 ** the return value of this interface.)^
2196 ** ^For the purposes of this routine, an [INSERT] is considered to
2197 ** be successful even if it is subsequently rolled back.
2199 ** This function is accessible to SQL statements via the
2200 ** [last_insert_rowid() SQL function].
2202 ** If a separate thread performs a new [INSERT] on the same
2203 ** database connection while the [sqlite3_last_insert_rowid()]
2204 ** function is running and thus changes the last insert [rowid],
2205 ** then the value returned by [sqlite3_last_insert_rowid()] is
2206 ** unpredictable and might not equal either the old or the new
2207 ** last insert [rowid].
2209 SQLITE_API sqlite3_int64 sqlite3_last_insert_rowid(sqlite3*);
2212 ** CAPI3REF: Count The Number Of Rows Modified
2214 ** ^This function returns the number of database rows that were changed
2215 ** or inserted or deleted by the most recently completed SQL statement
2216 ** on the [database connection] specified by the first parameter.
2217 ** ^(Only changes that are directly specified by the [INSERT], [UPDATE],
2218 ** or [DELETE] statement are counted. Auxiliary changes caused by
2219 ** triggers or [foreign key actions] are not counted.)^ Use the
2220 ** [sqlite3_total_changes()] function to find the total number of changes
2221 ** including changes caused by triggers and foreign key actions.
2223 ** ^Changes to a view that are simulated by an [INSTEAD OF trigger]
2224 ** are not counted. Only real table changes are counted.
2226 ** ^(A "row change" is a change to a single row of a single table
2227 ** caused by an INSERT, DELETE, or UPDATE statement. Rows that
2228 ** are changed as side effects of [REPLACE] constraint resolution,
2229 ** rollback, ABORT processing, [DROP TABLE], or by any other
2230 ** mechanisms do not count as direct row changes.)^
2232 ** A "trigger context" is a scope of execution that begins and
2233 ** ends with the script of a [CREATE TRIGGER | trigger].
2234 ** Most SQL statements are
2235 ** evaluated outside of any trigger. This is the "top level"
2236 ** trigger context. If a trigger fires from the top level, a
2237 ** new trigger context is entered for the duration of that one
2238 ** trigger. Subtriggers create subcontexts for their duration.
2240 ** ^Calling [sqlite3_exec()] or [sqlite3_step()] recursively does
2241 ** not create a new trigger context.
2243 ** ^This function returns the number of direct row changes in the
2244 ** most recent INSERT, UPDATE, or DELETE statement within the same
2245 ** trigger context.
2247 ** ^Thus, when called from the top level, this function returns the
2248 ** number of changes in the most recent INSERT, UPDATE, or DELETE
2249 ** that also occurred at the top level. ^(Within the body of a trigger,
2250 ** the sqlite3_changes() interface can be called to find the number of
2251 ** changes in the most recently completed INSERT, UPDATE, or DELETE
2252 ** statement within the body of the same trigger.
2253 ** However, the number returned does not include changes
2254 ** caused by subtriggers since those have their own context.)^
2256 ** See also the [sqlite3_total_changes()] interface, the
2257 ** [count_changes pragma], and the [changes() SQL function].
2259 ** If a separate thread makes changes on the same database connection
2260 ** while [sqlite3_changes()] is running then the value returned
2261 ** is unpredictable and not meaningful.
2263 SQLITE_API int sqlite3_changes(sqlite3*);
2266 ** CAPI3REF: Total Number Of Rows Modified
2268 ** ^This function returns the number of row changes caused by [INSERT],
2269 ** [UPDATE] or [DELETE] statements since the [database connection] was opened.
2270 ** ^(The count returned by sqlite3_total_changes() includes all changes
2271 ** from all [CREATE TRIGGER | trigger] contexts and changes made by
2272 ** [foreign key actions]. However,
2273 ** the count does not include changes used to implement [REPLACE] constraints,
2274 ** do rollbacks or ABORT processing, or [DROP TABLE] processing. The
2275 ** count does not include rows of views that fire an [INSTEAD OF trigger],
2276 ** though if the INSTEAD OF trigger makes changes of its own, those changes
2277 ** are counted.)^
2278 ** ^The sqlite3_total_changes() function counts the changes as soon as
2279 ** the statement that makes them is completed (when the statement handle
2280 ** is passed to [sqlite3_reset()] or [sqlite3_finalize()]).
2282 ** See also the [sqlite3_changes()] interface, the
2283 ** [count_changes pragma], and the [total_changes() SQL function].
2285 ** If a separate thread makes changes on the same database connection
2286 ** while [sqlite3_total_changes()] is running then the value
2287 ** returned is unpredictable and not meaningful.
2289 SQLITE_API int sqlite3_total_changes(sqlite3*);
2292 ** CAPI3REF: Interrupt A Long-Running Query
2294 ** ^This function causes any pending database operation to abort and
2295 ** return at its earliest opportunity. This routine is typically
2296 ** called in response to a user action such as pressing "Cancel"
2297 ** or Ctrl-C where the user wants a long query operation to halt
2298 ** immediately.
2300 ** ^It is safe to call this routine from a thread different from the
2301 ** thread that is currently running the database operation. But it
2302 ** is not safe to call this routine with a [database connection] that
2303 ** is closed or might close before sqlite3_interrupt() returns.
2305 ** ^If an SQL operation is very nearly finished at the time when
2306 ** sqlite3_interrupt() is called, then it might not have an opportunity
2307 ** to be interrupted and might continue to completion.
2309 ** ^An SQL operation that is interrupted will return [SQLITE_INTERRUPT].
2310 ** ^If the interrupted SQL operation is an INSERT, UPDATE, or DELETE
2311 ** that is inside an explicit transaction, then the entire transaction
2312 ** will be rolled back automatically.
2314 ** ^The sqlite3_interrupt(D) call is in effect until all currently running
2315 ** SQL statements on [database connection] D complete. ^Any new SQL statements
2316 ** that are started after the sqlite3_interrupt() call and before the
2317 ** running statements reaches zero are interrupted as if they had been
2318 ** running prior to the sqlite3_interrupt() call. ^New SQL statements
2319 ** that are started after the running statement count reaches zero are
2320 ** not effected by the sqlite3_interrupt().
2321 ** ^A call to sqlite3_interrupt(D) that occurs when there are no running
2322 ** SQL statements is a no-op and has no effect on SQL statements
2323 ** that are started after the sqlite3_interrupt() call returns.
2325 ** If the database connection closes while [sqlite3_interrupt()]
2326 ** is running then bad things will likely happen.
2328 SQLITE_API void sqlite3_interrupt(sqlite3*);
2331 ** CAPI3REF: Determine If An SQL Statement Is Complete
2333 ** These routines are useful during command-line input to determine if the
2334 ** currently entered text seems to form a complete SQL statement or
2335 ** if additional input is needed before sending the text into
2336 ** SQLite for parsing. ^These routines return 1 if the input string
2337 ** appears to be a complete SQL statement. ^A statement is judged to be
2338 ** complete if it ends with a semicolon token and is not a prefix of a
2339 ** well-formed CREATE TRIGGER statement. ^Semicolons that are embedded within
2340 ** string literals or quoted identifier names or comments are not
2341 ** independent tokens (they are part of the token in which they are
2342 ** embedded) and thus do not count as a statement terminator. ^Whitespace
2343 ** and comments that follow the final semicolon are ignored.
2345 ** ^These routines return 0 if the statement is incomplete. ^If a
2346 ** memory allocation fails, then SQLITE_NOMEM is returned.
2348 ** ^These routines do not parse the SQL statements thus
2349 ** will not detect syntactically incorrect SQL.
2351 ** ^(If SQLite has not been initialized using [sqlite3_initialize()] prior
2352 ** to invoking sqlite3_complete16() then sqlite3_initialize() is invoked
2353 ** automatically by sqlite3_complete16(). If that initialization fails,
2354 ** then the return value from sqlite3_complete16() will be non-zero
2355 ** regardless of whether or not the input SQL is complete.)^
2357 ** The input to [sqlite3_complete()] must be a zero-terminated
2358 ** UTF-8 string.
2360 ** The input to [sqlite3_complete16()] must be a zero-terminated
2361 ** UTF-16 string in native byte order.
2363 SQLITE_API int sqlite3_complete(const char *sql);
2364 SQLITE_API int sqlite3_complete16(const void *sql);
2367 ** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors
2369 ** ^This routine sets a callback function that might be invoked whenever
2370 ** an attempt is made to open a database table that another thread
2371 ** or process has locked.
2373 ** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]
2374 ** is returned immediately upon encountering the lock. ^If the busy callback
2375 ** is not NULL, then the callback might be invoked with two arguments.
2377 ** ^The first argument to the busy handler is a copy of the void* pointer which
2378 ** is the third argument to sqlite3_busy_handler(). ^The second argument to
2379 ** the busy handler callback is the number of times that the busy handler has
2380 ** been invoked for this locking event. ^If the
2381 ** busy callback returns 0, then no additional attempts are made to
2382 ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned.
2383 ** ^If the callback returns non-zero, then another attempt
2384 ** is made to open the database for reading and the cycle repeats.
2386 ** The presence of a busy handler does not guarantee that it will be invoked
2387 ** when there is lock contention. ^If SQLite determines that invoking the busy
2388 ** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY]
2389 ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler.
2390 ** Consider a scenario where one process is holding a read lock that
2391 ** it is trying to promote to a reserved lock and
2392 ** a second process is holding a reserved lock that it is trying
2393 ** to promote to an exclusive lock. The first process cannot proceed
2394 ** because it is blocked by the second and the second process cannot
2395 ** proceed because it is blocked by the first. If both processes
2396 ** invoke the busy handlers, neither will make any progress. Therefore,
2397 ** SQLite returns [SQLITE_BUSY] for the first process, hoping that this
2398 ** will induce the first process to release its read lock and allow
2399 ** the second process to proceed.
2401 ** ^The default busy callback is NULL.
2403 ** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED]
2404 ** when SQLite is in the middle of a large transaction where all the
2405 ** changes will not fit into the in-memory cache. SQLite will
2406 ** already hold a RESERVED lock on the database file, but it needs
2407 ** to promote this lock to EXCLUSIVE so that it can spill cache
2408 ** pages into the database file without harm to concurrent
2409 ** readers. ^If it is unable to promote the lock, then the in-memory
2410 ** cache will be left in an inconsistent state and so the error
2411 ** code is promoted from the relatively benign [SQLITE_BUSY] to
2412 ** the more severe [SQLITE_IOERR_BLOCKED]. ^This error code promotion
2413 ** forces an automatic rollback of the changes. See the
2414 ** <a href="/cvstrac/wiki?p=CorruptionFollowingBusyError">
2415 ** CorruptionFollowingBusyError</a> wiki page for a discussion of why
2416 ** this is important.
2418 ** ^(There can only be a single busy handler defined for each
2419 ** [database connection]. Setting a new busy handler clears any
2420 ** previously set handler.)^ ^Note that calling [sqlite3_busy_timeout()]
2421 ** will also set or clear the busy handler.
2423 ** The busy callback should not take any actions which modify the
2424 ** database connection that invoked the busy handler. Any such actions
2425 ** result in undefined behavior.
2427 ** A busy handler must not close the database connection
2428 ** or [prepared statement] that invoked the busy handler.
2430 SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
2433 ** CAPI3REF: Set A Busy Timeout
2435 ** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps
2436 ** for a specified amount of time when a table is locked. ^The handler
2437 ** will sleep multiple times until at least "ms" milliseconds of sleeping
2438 ** have accumulated. ^After at least "ms" milliseconds of sleeping,
2439 ** the handler returns 0 which causes [sqlite3_step()] to return
2440 ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED].
2442 ** ^Calling this routine with an argument less than or equal to zero
2443 ** turns off all busy handlers.
2445 ** ^(There can only be a single busy handler for a particular
2446 ** [database connection] any any given moment. If another busy handler
2447 ** was defined (using [sqlite3_busy_handler()]) prior to calling
2448 ** this routine, that other busy handler is cleared.)^
2450 SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
2453 ** CAPI3REF: Convenience Routines For Running Queries
2455 ** This is a legacy interface that is preserved for backwards compatibility.
2456 ** Use of this interface is not recommended.
2458 ** Definition: A <b>result table</b> is memory data structure created by the
2459 ** [sqlite3_get_table()] interface. A result table records the
2460 ** complete query results from one or more queries.
2462 ** The table conceptually has a number of rows and columns. But
2463 ** these numbers are not part of the result table itself. These
2464 ** numbers are obtained separately. Let N be the number of rows
2465 ** and M be the number of columns.
2467 ** A result table is an array of pointers to zero-terminated UTF-8 strings.
2468 ** There are (N+1)*M elements in the array. The first M pointers point
2469 ** to zero-terminated strings that contain the names of the columns.
2470 ** The remaining entries all point to query results. NULL values result
2471 ** in NULL pointers. All other values are in their UTF-8 zero-terminated
2472 ** string representation as returned by [sqlite3_column_text()].
2474 ** A result table might consist of one or more memory allocations.
2475 ** It is not safe to pass a result table directly to [sqlite3_free()].
2476 ** A result table should be deallocated using [sqlite3_free_table()].
2478 ** ^(As an example of the result table format, suppose a query result
2479 ** is as follows:
2481 ** <blockquote><pre>
2482 ** Name | Age
2483 ** -----------------------
2484 ** Alice | 43
2485 ** Bob | 28
2486 ** Cindy | 21
2487 ** </pre></blockquote>
2489 ** There are two column (M==2) and three rows (N==3). Thus the
2490 ** result table has 8 entries. Suppose the result table is stored
2491 ** in an array names azResult. Then azResult holds this content:
2493 ** <blockquote><pre>
2494 ** azResult&#91;0] = "Name";
2495 ** azResult&#91;1] = "Age";
2496 ** azResult&#91;2] = "Alice";
2497 ** azResult&#91;3] = "43";
2498 ** azResult&#91;4] = "Bob";
2499 ** azResult&#91;5] = "28";
2500 ** azResult&#91;6] = "Cindy";
2501 ** azResult&#91;7] = "21";
2502 ** </pre></blockquote>)^
2504 ** ^The sqlite3_get_table() function evaluates one or more
2505 ** semicolon-separated SQL statements in the zero-terminated UTF-8
2506 ** string of its 2nd parameter and returns a result table to the
2507 ** pointer given in its 3rd parameter.
2509 ** After the application has finished with the result from sqlite3_get_table(),
2510 ** it must pass the result table pointer to sqlite3_free_table() in order to
2511 ** release the memory that was malloced. Because of the way the
2512 ** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling
2513 ** function must not try to call [sqlite3_free()] directly. Only
2514 ** [sqlite3_free_table()] is able to release the memory properly and safely.
2516 ** The sqlite3_get_table() interface is implemented as a wrapper around
2517 ** [sqlite3_exec()]. The sqlite3_get_table() routine does not have access
2518 ** to any internal data structures of SQLite. It uses only the public
2519 ** interface defined here. As a consequence, errors that occur in the
2520 ** wrapper layer outside of the internal [sqlite3_exec()] call are not
2521 ** reflected in subsequent calls to [sqlite3_errcode()] or
2522 ** [sqlite3_errmsg()].
2524 SQLITE_API int sqlite3_get_table(
2525 sqlite3 *db, /* An open database */
2526 const char *zSql, /* SQL to be evaluated */
2527 char ***pazResult, /* Results of the query */
2528 int *pnRow, /* Number of result rows written here */
2529 int *pnColumn, /* Number of result columns written here */
2530 char **pzErrmsg /* Error msg written here */
2532 SQLITE_API void sqlite3_free_table(char **result);
2535 ** CAPI3REF: Formatted String Printing Functions
2537 ** These routines are work-alikes of the "printf()" family of functions
2538 ** from the standard C library.
2540 ** ^The sqlite3_mprintf() and sqlite3_vmprintf() routines write their
2541 ** results into memory obtained from [sqlite3_malloc()].
2542 ** The strings returned by these two routines should be
2543 ** released by [sqlite3_free()]. ^Both routines return a
2544 ** NULL pointer if [sqlite3_malloc()] is unable to allocate enough
2545 ** memory to hold the resulting string.
2547 ** ^(The sqlite3_snprintf() routine is similar to "snprintf()" from
2548 ** the standard C library. The result is written into the
2549 ** buffer supplied as the second parameter whose size is given by
2550 ** the first parameter. Note that the order of the
2551 ** first two parameters is reversed from snprintf().)^ This is an
2552 ** historical accident that cannot be fixed without breaking
2553 ** backwards compatibility. ^(Note also that sqlite3_snprintf()
2554 ** returns a pointer to its buffer instead of the number of
2555 ** characters actually written into the buffer.)^ We admit that
2556 ** the number of characters written would be a more useful return
2557 ** value but we cannot change the implementation of sqlite3_snprintf()
2558 ** now without breaking compatibility.
2560 ** ^As long as the buffer size is greater than zero, sqlite3_snprintf()
2561 ** guarantees that the buffer is always zero-terminated. ^The first
2562 ** parameter "n" is the total size of the buffer, including space for
2563 ** the zero terminator. So the longest string that can be completely
2564 ** written will be n-1 characters.
2566 ** ^The sqlite3_vsnprintf() routine is a varargs version of sqlite3_snprintf().
2568 ** These routines all implement some additional formatting
2569 ** options that are useful for constructing SQL statements.
2570 ** All of the usual printf() formatting options apply. In addition, there
2571 ** is are "%q", "%Q", and "%z" options.
2573 ** ^(The %q option works like %s in that it substitutes a nul-terminated
2574 ** string from the argument list. But %q also doubles every '\'' character.
2575 ** %q is designed for use inside a string literal.)^ By doubling each '\''
2576 ** character it escapes that character and allows it to be inserted into
2577 ** the string.
2579 ** For example, assume the string variable zText contains text as follows:
2581 ** <blockquote><pre>
2582 ** char *zText = "It's a happy day!";
2583 ** </pre></blockquote>
2585 ** One can use this text in an SQL statement as follows:
2587 ** <blockquote><pre>
2588 ** char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES('%q')", zText);
2589 ** sqlite3_exec(db, zSQL, 0, 0, 0);
2590 ** sqlite3_free(zSQL);
2591 ** </pre></blockquote>
2593 ** Because the %q format string is used, the '\'' character in zText
2594 ** is escaped and the SQL generated is as follows:
2596 ** <blockquote><pre>
2597 ** INSERT INTO table1 VALUES('It''s a happy day!')
2598 ** </pre></blockquote>
2600 ** This is correct. Had we used %s instead of %q, the generated SQL
2601 ** would have looked like this:
2603 ** <blockquote><pre>
2604 ** INSERT INTO table1 VALUES('It's a happy day!');
2605 ** </pre></blockquote>
2607 ** This second example is an SQL syntax error. As a general rule you should
2608 ** always use %q instead of %s when inserting text into a string literal.
2610 ** ^(The %Q option works like %q except it also adds single quotes around
2611 ** the outside of the total string. Additionally, if the parameter in the
2612 ** argument list is a NULL pointer, %Q substitutes the text "NULL" (without
2613 ** single quotes).)^ So, for example, one could say:
2615 ** <blockquote><pre>
2616 ** char *zSQL = sqlite3_mprintf("INSERT INTO table VALUES(%Q)", zText);
2617 ** sqlite3_exec(db, zSQL, 0, 0, 0);
2618 ** sqlite3_free(zSQL);
2619 ** </pre></blockquote>
2621 ** The code above will render a correct SQL statement in the zSQL
2622 ** variable even if the zText variable is a NULL pointer.
2624 ** ^(The "%z" formatting option works like "%s" but with the
2625 ** addition that after the string has been read and copied into
2626 ** the result, [sqlite3_free()] is called on the input string.)^
2628 SQLITE_API char *sqlite3_mprintf(const char*,...);
2629 SQLITE_API char *sqlite3_vmprintf(const char*, va_list);
2630 SQLITE_API char *sqlite3_snprintf(int,char*,const char*, ...);
2631 SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
2634 ** CAPI3REF: Memory Allocation Subsystem
2636 ** The SQLite core uses these three routines for all of its own
2637 ** internal memory allocation needs. "Core" in the previous sentence
2638 ** does not include operating-system specific VFS implementation. The
2639 ** Windows VFS uses native malloc() and free() for some operations.
2641 ** ^The sqlite3_malloc() routine returns a pointer to a block
2642 ** of memory at least N bytes in length, where N is the parameter.
2643 ** ^If sqlite3_malloc() is unable to obtain sufficient free
2644 ** memory, it returns a NULL pointer. ^If the parameter N to
2645 ** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
2646 ** a NULL pointer.
2648 ** ^Calling sqlite3_free() with a pointer previously returned
2649 ** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
2650 ** that it might be reused. ^The sqlite3_free() routine is
2651 ** a no-op if is called with a NULL pointer. Passing a NULL pointer
2652 ** to sqlite3_free() is harmless. After being freed, memory
2653 ** should neither be read nor written. Even reading previously freed
2654 ** memory might result in a segmentation fault or other severe error.
2655 ** Memory corruption, a segmentation fault, or other severe error
2656 ** might result if sqlite3_free() is called with a non-NULL pointer that
2657 ** was not obtained from sqlite3_malloc() or sqlite3_realloc().
2659 ** ^(The sqlite3_realloc() interface attempts to resize a
2660 ** prior memory allocation to be at least N bytes, where N is the
2661 ** second parameter. The memory allocation to be resized is the first
2662 ** parameter.)^ ^ If the first parameter to sqlite3_realloc()
2663 ** is a NULL pointer then its behavior is identical to calling
2664 ** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
2665 ** ^If the second parameter to sqlite3_realloc() is zero or
2666 ** negative then the behavior is exactly the same as calling
2667 ** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
2668 ** ^sqlite3_realloc() returns a pointer to a memory allocation
2669 ** of at least N bytes in size or NULL if sufficient memory is unavailable.
2670 ** ^If M is the size of the prior allocation, then min(N,M) bytes
2671 ** of the prior allocation are copied into the beginning of buffer returned
2672 ** by sqlite3_realloc() and the prior allocation is freed.
2673 ** ^If sqlite3_realloc() returns NULL, then the prior allocation
2674 ** is not freed.
2676 ** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
2677 ** is always aligned to at least an 8 byte boundary, or to a
2678 ** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
2679 ** option is used.
2681 ** In SQLite version 3.5.0 and 3.5.1, it was possible to define
2682 ** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in
2683 ** implementation of these routines to be omitted. That capability
2684 ** is no longer provided. Only built-in memory allocators can be used.
2686 ** The Windows OS interface layer calls
2687 ** the system malloc() and free() directly when converting
2688 ** filenames between the UTF-8 encoding used by SQLite
2689 ** and whatever filename encoding is used by the particular Windows
2690 ** installation. Memory allocation errors are detected, but
2691 ** they are reported back as [SQLITE_CANTOPEN] or
2692 ** [SQLITE_IOERR] rather than [SQLITE_NOMEM].
2694 ** The pointer arguments to [sqlite3_free()] and [sqlite3_realloc()]
2695 ** must be either NULL or else pointers obtained from a prior
2696 ** invocation of [sqlite3_malloc()] or [sqlite3_realloc()] that have
2697 ** not yet been released.
2699 ** The application must not read or write any part of
2700 ** a block of memory after it has been released using
2701 ** [sqlite3_free()] or [sqlite3_realloc()].
2703 SQLITE_API void *sqlite3_malloc(int);
2704 SQLITE_API void *sqlite3_realloc(void*, int);
2705 SQLITE_API void sqlite3_free(void*);
2708 ** CAPI3REF: Memory Allocator Statistics
2710 ** SQLite provides these two interfaces for reporting on the status
2711 ** of the [sqlite3_malloc()], [sqlite3_free()], and [sqlite3_realloc()]
2712 ** routines, which form the built-in memory allocation subsystem.
2714 ** ^The [sqlite3_memory_used()] routine returns the number of bytes
2715 ** of memory currently outstanding (malloced but not freed).
2716 ** ^The [sqlite3_memory_highwater()] routine returns the maximum
2717 ** value of [sqlite3_memory_used()] since the high-water mark
2718 ** was last reset. ^The values returned by [sqlite3_memory_used()] and
2719 ** [sqlite3_memory_highwater()] include any overhead
2720 ** added by SQLite in its implementation of [sqlite3_malloc()],
2721 ** but not overhead added by the any underlying system library
2722 ** routines that [sqlite3_malloc()] may call.
2724 ** ^The memory high-water mark is reset to the current value of
2725 ** [sqlite3_memory_used()] if and only if the parameter to
2726 ** [sqlite3_memory_highwater()] is true. ^The value returned
2727 ** by [sqlite3_memory_highwater(1)] is the high-water mark
2728 ** prior to the reset.
2730 SQLITE_API sqlite3_int64 sqlite3_memory_used(void);
2731 SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag);
2734 ** CAPI3REF: Pseudo-Random Number Generator
2736 ** SQLite contains a high-quality pseudo-random number generator (PRNG) used to
2737 ** select random [ROWID | ROWIDs] when inserting new records into a table that
2738 ** already uses the largest possible [ROWID]. The PRNG is also used for
2739 ** the build-in random() and randomblob() SQL functions. This interface allows
2740 ** applications to access the same PRNG for other purposes.
2742 ** ^A call to this routine stores N bytes of randomness into buffer P.
2744 ** ^The first time this routine is invoked (either internally or by
2745 ** the application) the PRNG is seeded using randomness obtained
2746 ** from the xRandomness method of the default [sqlite3_vfs] object.
2747 ** ^On all subsequent invocations, the pseudo-randomness is generated
2748 ** internally and without recourse to the [sqlite3_vfs] xRandomness
2749 ** method.
2751 SQLITE_API void sqlite3_randomness(int N, void *P);
2754 ** CAPI3REF: Compile-Time Authorization Callbacks
2756 ** ^This routine registers an authorizer callback with a particular
2757 ** [database connection], supplied in the first argument.
2758 ** ^The authorizer callback is invoked as SQL statements are being compiled
2759 ** by [sqlite3_prepare()] or its variants [sqlite3_prepare_v2()],
2760 ** [sqlite3_prepare16()] and [sqlite3_prepare16_v2()]. ^At various
2761 ** points during the compilation process, as logic is being created
2762 ** to perform various actions, the authorizer callback is invoked to
2763 ** see if those actions are allowed. ^The authorizer callback should
2764 ** return [SQLITE_OK] to allow the action, [SQLITE_IGNORE] to disallow the
2765 ** specific action but allow the SQL statement to continue to be
2766 ** compiled, or [SQLITE_DENY] to cause the entire SQL statement to be
2767 ** rejected with an error. ^If the authorizer callback returns
2768 ** any value other than [SQLITE_IGNORE], [SQLITE_OK], or [SQLITE_DENY]
2769 ** then the [sqlite3_prepare_v2()] or equivalent call that triggered
2770 ** the authorizer will fail with an error message.
2772 ** When the callback returns [SQLITE_OK], that means the operation
2773 ** requested is ok. ^When the callback returns [SQLITE_DENY], the
2774 ** [sqlite3_prepare_v2()] or equivalent call that triggered the
2775 ** authorizer will fail with an error message explaining that
2776 ** access is denied.
2778 ** ^The first parameter to the authorizer callback is a copy of the third
2779 ** parameter to the sqlite3_set_authorizer() interface. ^The second parameter
2780 ** to the callback is an integer [SQLITE_COPY | action code] that specifies
2781 ** the particular action to be authorized. ^The third through sixth parameters
2782 ** to the callback are zero-terminated strings that contain additional
2783 ** details about the action to be authorized.
2785 ** ^If the action code is [SQLITE_READ]
2786 ** and the callback returns [SQLITE_IGNORE] then the
2787 ** [prepared statement] statement is constructed to substitute
2788 ** a NULL value in place of the table column that would have
2789 ** been read if [SQLITE_OK] had been returned. The [SQLITE_IGNORE]
2790 ** return can be used to deny an untrusted user access to individual
2791 ** columns of a table.
2792 ** ^If the action code is [SQLITE_DELETE] and the callback returns
2793 ** [SQLITE_IGNORE] then the [DELETE] operation proceeds but the
2794 ** [truncate optimization] is disabled and all rows are deleted individually.
2796 ** An authorizer is used when [sqlite3_prepare | preparing]
2797 ** SQL statements from an untrusted source, to ensure that the SQL statements
2798 ** do not try to access data they are not allowed to see, or that they do not
2799 ** try to execute malicious statements that damage the database. For
2800 ** example, an application may allow a user to enter arbitrary
2801 ** SQL queries for evaluation by a database. But the application does
2802 ** not want the user to be able to make arbitrary changes to the
2803 ** database. An authorizer could then be put in place while the
2804 ** user-entered SQL is being [sqlite3_prepare | prepared] that
2805 ** disallows everything except [SELECT] statements.
2807 ** Applications that need to process SQL from untrusted sources
2808 ** might also consider lowering resource limits using [sqlite3_limit()]
2809 ** and limiting database size using the [max_page_count] [PRAGMA]
2810 ** in addition to using an authorizer.
2812 ** ^(Only a single authorizer can be in place on a database connection
2813 ** at a time. Each call to sqlite3_set_authorizer overrides the
2814 ** previous call.)^ ^Disable the authorizer by installing a NULL callback.
2815 ** The authorizer is disabled by default.
2817 ** The authorizer callback must not do anything that will modify
2818 ** the database connection that invoked the authorizer callback.
2819 ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
2820 ** database connections for the meaning of "modify" in this paragraph.
2822 ** ^When [sqlite3_prepare_v2()] is used to prepare a statement, the
2823 ** statement might be re-prepared during [sqlite3_step()] due to a
2824 ** schema change. Hence, the application should ensure that the
2825 ** correct authorizer callback remains in place during the [sqlite3_step()].
2827 ** ^Note that the authorizer callback is invoked only during
2828 ** [sqlite3_prepare()] or its variants. Authorization is not
2829 ** performed during statement evaluation in [sqlite3_step()], unless
2830 ** as stated in the previous paragraph, sqlite3_step() invokes
2831 ** sqlite3_prepare_v2() to reprepare a statement after a schema change.
2833 SQLITE_API int sqlite3_set_authorizer(
2834 sqlite3*,
2835 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
2836 void *pUserData
2840 ** CAPI3REF: Authorizer Return Codes
2842 ** The [sqlite3_set_authorizer | authorizer callback function] must
2843 ** return either [SQLITE_OK] or one of these two constants in order
2844 ** to signal SQLite whether or not the action is permitted. See the
2845 ** [sqlite3_set_authorizer | authorizer documentation] for additional
2846 ** information.
2848 ** Note that SQLITE_IGNORE is also used as a [SQLITE_ROLLBACK | return code]
2849 ** from the [sqlite3_vtab_on_conflict()] interface.
2851 #define SQLITE_DENY 1 /* Abort the SQL statement with an error */
2852 #define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */
2855 ** CAPI3REF: Authorizer Action Codes
2857 ** The [sqlite3_set_authorizer()] interface registers a callback function
2858 ** that is invoked to authorize certain SQL statement actions. The
2859 ** second parameter to the callback is an integer code that specifies
2860 ** what action is being authorized. These are the integer action codes that
2861 ** the authorizer callback may be passed.
2863 ** These action code values signify what kind of operation is to be
2864 ** authorized. The 3rd and 4th parameters to the authorization
2865 ** callback function will be parameters or NULL depending on which of these
2866 ** codes is used as the second parameter. ^(The 5th parameter to the
2867 ** authorizer callback is the name of the database ("main", "temp",
2868 ** etc.) if applicable.)^ ^The 6th parameter to the authorizer callback
2869 ** is the name of the inner-most trigger or view that is responsible for
2870 ** the access attempt or NULL if this access attempt is directly from
2871 ** top-level SQL code.
2873 /******************************************* 3rd ************ 4th ***********/
2874 #define SQLITE_CREATE_INDEX 1 /* Index Name Table Name */
2875 #define SQLITE_CREATE_TABLE 2 /* Table Name NULL */
2876 #define SQLITE_CREATE_TEMP_INDEX 3 /* Index Name Table Name */
2877 #define SQLITE_CREATE_TEMP_TABLE 4 /* Table Name NULL */
2878 #define SQLITE_CREATE_TEMP_TRIGGER 5 /* Trigger Name Table Name */
2879 #define SQLITE_CREATE_TEMP_VIEW 6 /* View Name NULL */
2880 #define SQLITE_CREATE_TRIGGER 7 /* Trigger Name Table Name */
2881 #define SQLITE_CREATE_VIEW 8 /* View Name NULL */
2882 #define SQLITE_DELETE 9 /* Table Name NULL */
2883 #define SQLITE_DROP_INDEX 10 /* Index Name Table Name */
2884 #define SQLITE_DROP_TABLE 11 /* Table Name NULL */
2885 #define SQLITE_DROP_TEMP_INDEX 12 /* Index Name Table Name */
2886 #define SQLITE_DROP_TEMP_TABLE 13 /* Table Name NULL */
2887 #define SQLITE_DROP_TEMP_TRIGGER 14 /* Trigger Name Table Name */
2888 #define SQLITE_DROP_TEMP_VIEW 15 /* View Name NULL */
2889 #define SQLITE_DROP_TRIGGER 16 /* Trigger Name Table Name */
2890 #define SQLITE_DROP_VIEW 17 /* View Name NULL */
2891 #define SQLITE_INSERT 18 /* Table Name NULL */
2892 #define SQLITE_PRAGMA 19 /* Pragma Name 1st arg or NULL */
2893 #define SQLITE_READ 20 /* Table Name Column Name */
2894 #define SQLITE_SELECT 21 /* NULL NULL */
2895 #define SQLITE_TRANSACTION 22 /* Operation NULL */
2896 #define SQLITE_UPDATE 23 /* Table Name Column Name */
2897 #define SQLITE_ATTACH 24 /* Filename NULL */
2898 #define SQLITE_DETACH 25 /* Database Name NULL */
2899 #define SQLITE_ALTER_TABLE 26 /* Database Name Table Name */
2900 #define SQLITE_REINDEX 27 /* Index Name NULL */
2901 #define SQLITE_ANALYZE 28 /* Table Name NULL */
2902 #define SQLITE_CREATE_VTABLE 29 /* Table Name Module Name */
2903 #define SQLITE_DROP_VTABLE 30 /* Table Name Module Name */
2904 #define SQLITE_FUNCTION 31 /* NULL Function Name */
2905 #define SQLITE_SAVEPOINT 32 /* Operation Savepoint Name */
2906 #define SQLITE_COPY 0 /* No longer used */
2909 ** CAPI3REF: Tracing And Profiling Functions
2911 ** These routines register callback functions that can be used for
2912 ** tracing and profiling the execution of SQL statements.
2914 ** ^The callback function registered by sqlite3_trace() is invoked at
2915 ** various times when an SQL statement is being run by [sqlite3_step()].
2916 ** ^The sqlite3_trace() callback is invoked with a UTF-8 rendering of the
2917 ** SQL statement text as the statement first begins executing.
2918 ** ^(Additional sqlite3_trace() callbacks might occur
2919 ** as each triggered subprogram is entered. The callbacks for triggers
2920 ** contain a UTF-8 SQL comment that identifies the trigger.)^
2922 ** ^The callback function registered by sqlite3_profile() is invoked
2923 ** as each SQL statement finishes. ^The profile callback contains
2924 ** the original statement text and an estimate of wall-clock time
2925 ** of how long that statement took to run. ^The profile callback
2926 ** time is in units of nanoseconds, however the current implementation
2927 ** is only capable of millisecond resolution so the six least significant
2928 ** digits in the time are meaningless. Future versions of SQLite
2929 ** might provide greater resolution on the profiler callback. The
2930 ** sqlite3_profile() function is considered experimental and is
2931 ** subject to change in future versions of SQLite.
2933 SQLITE_API void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*);
2934 SQLITE_API SQLITE_EXPERIMENTAL void *sqlite3_profile(sqlite3*,
2935 void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
2938 ** CAPI3REF: Query Progress Callbacks
2940 ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
2941 ** function X to be invoked periodically during long running calls to
2942 ** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
2943 ** database connection D. An example use for this
2944 ** interface is to keep a GUI updated during a large query.
2946 ** ^The parameter P is passed through as the only parameter to the
2947 ** callback function X. ^The parameter N is the number of
2948 ** [virtual machine instructions] that are evaluated between successive
2949 ** invocations of the callback X.
2951 ** ^Only a single progress handler may be defined at one time per
2952 ** [database connection]; setting a new progress handler cancels the
2953 ** old one. ^Setting parameter X to NULL disables the progress handler.
2954 ** ^The progress handler is also disabled by setting N to a value less
2955 ** than 1.
2957 ** ^If the progress callback returns non-zero, the operation is
2958 ** interrupted. This feature can be used to implement a
2959 ** "Cancel" button on a GUI progress dialog box.
2961 ** The progress handler callback must not do anything that will modify
2962 ** the database connection that invoked the progress handler.
2963 ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
2964 ** database connections for the meaning of "modify" in this paragraph.
2967 SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
2970 ** CAPI3REF: Opening A New Database Connection
2972 ** ^These routines open an SQLite database file as specified by the
2973 ** filename argument. ^The filename argument is interpreted as UTF-8 for
2974 ** sqlite3_open() and sqlite3_open_v2() and as UTF-16 in the native byte
2975 ** order for sqlite3_open16(). ^(A [database connection] handle is usually
2976 ** returned in *ppDb, even if an error occurs. The only exception is that
2977 ** if SQLite is unable to allocate memory to hold the [sqlite3] object,
2978 ** a NULL will be written into *ppDb instead of a pointer to the [sqlite3]
2979 ** object.)^ ^(If the database is opened (and/or created) successfully, then
2980 ** [SQLITE_OK] is returned. Otherwise an [error code] is returned.)^ ^The
2981 ** [sqlite3_errmsg()] or [sqlite3_errmsg16()] routines can be used to obtain
2982 ** an English language description of the error following a failure of any
2983 ** of the sqlite3_open() routines.
2985 ** ^The default encoding for the database will be UTF-8 if
2986 ** sqlite3_open() or sqlite3_open_v2() is called and
2987 ** UTF-16 in the native byte order if sqlite3_open16() is used.
2989 ** Whether or not an error occurs when it is opened, resources
2990 ** associated with the [database connection] handle should be released by
2991 ** passing it to [sqlite3_close()] when it is no longer required.
2993 ** The sqlite3_open_v2() interface works like sqlite3_open()
2994 ** except that it accepts two additional parameters for additional control
2995 ** over the new database connection. ^(The flags parameter to
2996 ** sqlite3_open_v2() can take one of
2997 ** the following three values, optionally combined with the
2998 ** [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX], [SQLITE_OPEN_SHAREDCACHE],
2999 ** [SQLITE_OPEN_PRIVATECACHE], and/or [SQLITE_OPEN_URI] flags:)^
3001 ** <dl>
3002 ** ^(<dt>[SQLITE_OPEN_READONLY]</dt>
3003 ** <dd>The database is opened in read-only mode. If the database does not
3004 ** already exist, an error is returned.</dd>)^
3006 ** ^(<dt>[SQLITE_OPEN_READWRITE]</dt>
3007 ** <dd>The database is opened for reading and writing if possible, or reading
3008 ** only if the file is write protected by the operating system. In either
3009 ** case the database must already exist, otherwise an error is returned.</dd>)^
3011 ** ^(<dt>[SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE]</dt>
3012 ** <dd>The database is opened for reading and writing, and is created if
3013 ** it does not already exist. This is the behavior that is always used for
3014 ** sqlite3_open() and sqlite3_open16().</dd>)^
3015 ** </dl>
3017 ** If the 3rd parameter to sqlite3_open_v2() is not one of the
3018 ** combinations shown above optionally combined with other
3019 ** [SQLITE_OPEN_READONLY | SQLITE_OPEN_* bits]
3020 ** then the behavior is undefined.
3022 ** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection
3023 ** opens in the multi-thread [threading mode] as long as the single-thread
3024 ** mode has not been set at compile-time or start-time. ^If the
3025 ** [SQLITE_OPEN_FULLMUTEX] flag is set then the database connection opens
3026 ** in the serialized [threading mode] unless single-thread was
3027 ** previously selected at compile-time or start-time.
3028 ** ^The [SQLITE_OPEN_SHAREDCACHE] flag causes the database connection to be
3029 ** eligible to use [shared cache mode], regardless of whether or not shared
3030 ** cache is enabled using [sqlite3_enable_shared_cache()]. ^The
3031 ** [SQLITE_OPEN_PRIVATECACHE] flag causes the database connection to not
3032 ** participate in [shared cache mode] even if it is enabled.
3034 ** ^The fourth parameter to sqlite3_open_v2() is the name of the
3035 ** [sqlite3_vfs] object that defines the operating system interface that
3036 ** the new database connection should use. ^If the fourth parameter is
3037 ** a NULL pointer then the default [sqlite3_vfs] object is used.
3039 ** ^If the filename is ":memory:", then a private, temporary in-memory database
3040 ** is created for the connection. ^This in-memory database will vanish when
3041 ** the database connection is closed. Future versions of SQLite might
3042 ** make use of additional special filenames that begin with the ":" character.
3043 ** It is recommended that when a database filename actually does begin with
3044 ** a ":" character you should prefix the filename with a pathname such as
3045 ** "./" to avoid ambiguity.
3047 ** ^If the filename is an empty string, then a private, temporary
3048 ** on-disk database will be created. ^This private database will be
3049 ** automatically deleted as soon as the database connection is closed.
3051 ** [[URI filenames in sqlite3_open()]] <h3>URI Filenames</h3>
3053 ** ^If [URI filename] interpretation is enabled, and the filename argument
3054 ** begins with "file:", then the filename is interpreted as a URI. ^URI
3055 ** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
3056 ** set in the fourth argument to sqlite3_open_v2(), or if it has
3057 ** been enabled globally using the [SQLITE_CONFIG_URI] option with the
3058 ** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
3059 ** As of SQLite version 3.7.7, URI filename interpretation is turned off
3060 ** by default, but future releases of SQLite might enable URI filename
3061 ** interpretation by default. See "[URI filenames]" for additional
3062 ** information.
3064 ** URI filenames are parsed according to RFC 3986. ^If the URI contains an
3065 ** authority, then it must be either an empty string or the string
3066 ** "localhost". ^If the authority is not an empty string or "localhost", an
3067 ** error is returned to the caller. ^The fragment component of a URI, if
3068 ** present, is ignored.
3070 ** ^SQLite uses the path component of the URI as the name of the disk file
3071 ** which contains the database. ^If the path begins with a '/' character,
3072 ** then it is interpreted as an absolute path. ^If the path does not begin
3073 ** with a '/' (meaning that the authority section is omitted from the URI)
3074 ** then the path is interpreted as a relative path.
3075 ** ^On windows, the first component of an absolute path
3076 ** is a drive specification (e.g. "C:").
3078 ** [[core URI query parameters]]
3079 ** The query component of a URI may contain parameters that are interpreted
3080 ** either by SQLite itself, or by a [VFS | custom VFS implementation].
3081 ** SQLite interprets the following three query parameters:
3083 ** <ul>
3084 ** <li> <b>vfs</b>: ^The "vfs" parameter may be used to specify the name of
3085 ** a VFS object that provides the operating system interface that should
3086 ** be used to access the database file on disk. ^If this option is set to
3087 ** an empty string the default VFS object is used. ^Specifying an unknown
3088 ** VFS is an error. ^If sqlite3_open_v2() is used and the vfs option is
3089 ** present, then the VFS specified by the option takes precedence over
3090 ** the value passed as the fourth parameter to sqlite3_open_v2().
3092 ** <li> <b>mode</b>: ^(The mode parameter may be set to either "ro", "rw" or
3093 ** "rwc". Attempting to set it to any other value is an error)^.
3094 ** ^If "ro" is specified, then the database is opened for read-only
3095 ** access, just as if the [SQLITE_OPEN_READONLY] flag had been set in the
3096 ** third argument to sqlite3_prepare_v2(). ^If the mode option is set to
3097 ** "rw", then the database is opened for read-write (but not create)
3098 ** access, as if SQLITE_OPEN_READWRITE (but not SQLITE_OPEN_CREATE) had
3099 ** been set. ^Value "rwc" is equivalent to setting both
3100 ** SQLITE_OPEN_READWRITE and SQLITE_OPEN_CREATE. ^If sqlite3_open_v2() is
3101 ** used, it is an error to specify a value for the mode parameter that is
3102 ** less restrictive than that specified by the flags passed as the third
3103 ** parameter.
3105 ** <li> <b>cache</b>: ^The cache parameter may be set to either "shared" or
3106 ** "private". ^Setting it to "shared" is equivalent to setting the
3107 ** SQLITE_OPEN_SHAREDCACHE bit in the flags argument passed to
3108 ** sqlite3_open_v2(). ^Setting the cache parameter to "private" is
3109 ** equivalent to setting the SQLITE_OPEN_PRIVATECACHE bit.
3110 ** ^If sqlite3_open_v2() is used and the "cache" parameter is present in
3111 ** a URI filename, its value overrides any behaviour requested by setting
3112 ** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.
3113 ** </ul>
3115 ** ^Specifying an unknown parameter in the query component of a URI is not an
3116 ** error. Future versions of SQLite might understand additional query
3117 ** parameters. See "[query parameters with special meaning to SQLite]" for
3118 ** additional information.
3120 ** [[URI filename examples]] <h3>URI filename examples</h3>
3122 ** <table border="1" align=center cellpadding=5>
3123 ** <tr><th> URI filenames <th> Results
3124 ** <tr><td> file:data.db <td>
3125 ** Open the file "data.db" in the current directory.
3126 ** <tr><td> file:/home/fred/data.db<br>
3127 ** file:///home/fred/data.db <br>
3128 ** file://localhost/home/fred/data.db <br> <td>
3129 ** Open the database file "/home/fred/data.db".
3130 ** <tr><td> file://darkstar/home/fred/data.db <td>
3131 ** An error. "darkstar" is not a recognized authority.
3132 ** <tr><td style="white-space:nowrap">
3133 ** file:///C:/Documents%20and%20Settings/fred/Desktop/data.db
3134 ** <td> Windows only: Open the file "data.db" on fred's desktop on drive
3135 ** C:. Note that the %20 escaping in this example is not strictly
3136 ** necessary - space characters can be used literally
3137 ** in URI filenames.
3138 ** <tr><td> file:data.db?mode=ro&cache=private <td>
3139 ** Open file "data.db" in the current directory for read-only access.
3140 ** Regardless of whether or not shared-cache mode is enabled by
3141 ** default, use a private cache.
3142 ** <tr><td> file:/home/fred/data.db?vfs=unix-nolock <td>
3143 ** Open file "/home/fred/data.db". Use the special VFS "unix-nolock".
3144 ** <tr><td> file:data.db?mode=readonly <td>
3145 ** An error. "readonly" is not a valid option for the "mode" parameter.
3146 ** </table>
3148 ** ^URI hexadecimal escape sequences (%HH) are supported within the path and
3149 ** query components of a URI. A hexadecimal escape sequence consists of a
3150 ** percent sign - "%" - followed by exactly two hexadecimal digits
3151 ** specifying an octet value. ^Before the path or query components of a
3152 ** URI filename are interpreted, they are encoded using UTF-8 and all
3153 ** hexadecimal escape sequences replaced by a single byte containing the
3154 ** corresponding octet. If this process generates an invalid UTF-8 encoding,
3155 ** the results are undefined.
3157 ** <b>Note to Windows users:</b> The encoding used for the filename argument
3158 ** of sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
3159 ** codepage is currently defined. Filenames containing international
3160 ** characters must be converted to UTF-8 prior to passing them into
3161 ** sqlite3_open() or sqlite3_open_v2().
3163 SQLITE_API int sqlite3_open(
3164 const char *filename, /* Database filename (UTF-8) */
3165 sqlite3 **ppDb /* OUT: SQLite db handle */
3167 SQLITE_API int sqlite3_open16(
3168 const void *filename, /* Database filename (UTF-16) */
3169 sqlite3 **ppDb /* OUT: SQLite db handle */
3171 SQLITE_API int sqlite3_open_v2(
3172 const char *filename, /* Database filename (UTF-8) */
3173 sqlite3 **ppDb, /* OUT: SQLite db handle */
3174 int flags, /* Flags */
3175 const char *zVfs /* Name of VFS module to use */
3179 ** CAPI3REF: Obtain Values For URI Parameters
3181 ** These are utility routines, useful to VFS implementations, that check
3182 ** to see if a database file was a URI that contained a specific query
3183 ** parameter, and if so obtains the value of that query parameter.
3185 ** If F is the database filename pointer passed into the xOpen() method of
3186 ** a VFS implementation when the flags parameter to xOpen() has one or
3187 ** more of the [SQLITE_OPEN_URI] or [SQLITE_OPEN_MAIN_DB] bits set and
3188 ** P is the name of the query parameter, then
3189 ** sqlite3_uri_parameter(F,P) returns the value of the P
3190 ** parameter if it exists or a NULL pointer if P does not appear as a
3191 ** query parameter on F. If P is a query parameter of F
3192 ** has no explicit value, then sqlite3_uri_parameter(F,P) returns
3193 ** a pointer to an empty string.
3195 ** The sqlite3_uri_boolean(F,P,B) routine assumes that P is a boolean
3196 ** parameter and returns true (1) or false (0) according to the value
3197 ** of P. The value of P is true if it is "yes" or "true" or "on" or
3198 ** a non-zero number and is false otherwise. If P is not a query parameter
3199 ** on F then sqlite3_uri_boolean(F,P,B) returns (B!=0).
3201 ** The sqlite3_uri_int64(F,P,D) routine converts the value of P into a
3202 ** 64-bit signed integer and returns that integer, or D if P does not
3203 ** exist. If the value of P is something other than an integer, then
3204 ** zero is returned.
3206 ** If F is a NULL pointer, then sqlite3_uri_parameter(F,P) returns NULL and
3207 ** sqlite3_uri_boolean(F,P,B) returns B. If F is not a NULL pointer and
3208 ** is not a database file pathname pointer that SQLite passed into the xOpen
3209 ** VFS method, then the behavior of this routine is undefined and probably
3210 ** undesirable.
3212 SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam);
3213 SQLITE_API int sqlite3_uri_boolean(const char *zFile, const char *zParam, int bDefault);
3214 SQLITE_API sqlite3_int64 sqlite3_uri_int64(const char*, const char*, sqlite3_int64);
3218 ** CAPI3REF: Error Codes And Messages
3220 ** ^The sqlite3_errcode() interface returns the numeric [result code] or
3221 ** [extended result code] for the most recent failed sqlite3_* API call
3222 ** associated with a [database connection]. If a prior API call failed
3223 ** but the most recent API call succeeded, the return value from
3224 ** sqlite3_errcode() is undefined. ^The sqlite3_extended_errcode()
3225 ** interface is the same except that it always returns the
3226 ** [extended result code] even when extended result codes are
3227 ** disabled.
3229 ** ^The sqlite3_errmsg() and sqlite3_errmsg16() return English-language
3230 ** text that describes the error, as either UTF-8 or UTF-16 respectively.
3231 ** ^(Memory to hold the error message string is managed internally.
3232 ** The application does not need to worry about freeing the result.
3233 ** However, the error string might be overwritten or deallocated by
3234 ** subsequent calls to other SQLite interface functions.)^
3236 ** When the serialized [threading mode] is in use, it might be the
3237 ** case that a second error occurs on a separate thread in between
3238 ** the time of the first error and the call to these interfaces.
3239 ** When that happens, the second error will be reported since these
3240 ** interfaces always report the most recent result. To avoid
3241 ** this, each thread can obtain exclusive use of the [database connection] D
3242 ** by invoking [sqlite3_mutex_enter]([sqlite3_db_mutex](D)) before beginning
3243 ** to use D and invoking [sqlite3_mutex_leave]([sqlite3_db_mutex](D)) after
3244 ** all calls to the interfaces listed here are completed.
3246 ** If an interface fails with SQLITE_MISUSE, that means the interface
3247 ** was invoked incorrectly by the application. In that case, the
3248 ** error code and message may or may not be set.
3250 SQLITE_API int sqlite3_errcode(sqlite3 *db);
3251 SQLITE_API int sqlite3_extended_errcode(sqlite3 *db);
3252 SQLITE_API const char *sqlite3_errmsg(sqlite3*);
3253 SQLITE_API const void *sqlite3_errmsg16(sqlite3*);
3256 ** CAPI3REF: SQL Statement Object
3257 ** KEYWORDS: {prepared statement} {prepared statements}
3259 ** An instance of this object represents a single SQL statement.
3260 ** This object is variously known as a "prepared statement" or a
3261 ** "compiled SQL statement" or simply as a "statement".
3263 ** The life of a statement object goes something like this:
3265 ** <ol>
3266 ** <li> Create the object using [sqlite3_prepare_v2()] or a related
3267 ** function.
3268 ** <li> Bind values to [host parameters] using the sqlite3_bind_*()
3269 ** interfaces.
3270 ** <li> Run the SQL by calling [sqlite3_step()] one or more times.
3271 ** <li> Reset the statement using [sqlite3_reset()] then go back
3272 ** to step 2. Do this zero or more times.
3273 ** <li> Destroy the object using [sqlite3_finalize()].
3274 ** </ol>
3276 ** Refer to documentation on individual methods above for additional
3277 ** information.
3279 typedef struct sqlite3_stmt sqlite3_stmt;
3282 ** CAPI3REF: Run-time Limits
3284 ** ^(This interface allows the size of various constructs to be limited
3285 ** on a connection by connection basis. The first parameter is the
3286 ** [database connection] whose limit is to be set or queried. The
3287 ** second parameter is one of the [limit categories] that define a
3288 ** class of constructs to be size limited. The third parameter is the
3289 ** new limit for that construct.)^
3291 ** ^If the new limit is a negative number, the limit is unchanged.
3292 ** ^(For each limit category SQLITE_LIMIT_<i>NAME</i> there is a
3293 ** [limits | hard upper bound]
3294 ** set at compile-time by a C preprocessor macro called
3295 ** [limits | SQLITE_MAX_<i>NAME</i>].
3296 ** (The "_LIMIT_" in the name is changed to "_MAX_".))^
3297 ** ^Attempts to increase a limit above its hard upper bound are
3298 ** silently truncated to the hard upper bound.
3300 ** ^Regardless of whether or not the limit was changed, the
3301 ** [sqlite3_limit()] interface returns the prior value of the limit.
3302 ** ^Hence, to find the current value of a limit without changing it,
3303 ** simply invoke this interface with the third parameter set to -1.
3305 ** Run-time limits are intended for use in applications that manage
3306 ** both their own internal database and also databases that are controlled
3307 ** by untrusted external sources. An example application might be a
3308 ** web browser that has its own databases for storing history and
3309 ** separate databases controlled by JavaScript applications downloaded
3310 ** off the Internet. The internal databases can be given the
3311 ** large, default limits. Databases managed by external sources can
3312 ** be given much smaller limits designed to prevent a denial of service
3313 ** attack. Developers might also want to use the [sqlite3_set_authorizer()]
3314 ** interface to further control untrusted SQL. The size of the database
3315 ** created by an untrusted script can be contained using the
3316 ** [max_page_count] [PRAGMA].
3318 ** New run-time limit categories may be added in future releases.
3320 SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
3323 ** CAPI3REF: Run-Time Limit Categories
3324 ** KEYWORDS: {limit category} {*limit categories}
3326 ** These constants define various performance limits
3327 ** that can be lowered at run-time using [sqlite3_limit()].
3328 ** The synopsis of the meanings of the various limits is shown below.
3329 ** Additional information is available at [limits | Limits in SQLite].
3331 ** <dl>
3332 ** [[SQLITE_LIMIT_LENGTH]] ^(<dt>SQLITE_LIMIT_LENGTH</dt>
3333 ** <dd>The maximum size of any string or BLOB or table row, in bytes.<dd>)^
3335 ** [[SQLITE_LIMIT_SQL_LENGTH]] ^(<dt>SQLITE_LIMIT_SQL_LENGTH</dt>
3336 ** <dd>The maximum length of an SQL statement, in bytes.</dd>)^
3338 ** [[SQLITE_LIMIT_COLUMN]] ^(<dt>SQLITE_LIMIT_COLUMN</dt>
3339 ** <dd>The maximum number of columns in a table definition or in the
3340 ** result set of a [SELECT] or the maximum number of columns in an index
3341 ** or in an ORDER BY or GROUP BY clause.</dd>)^
3343 ** [[SQLITE_LIMIT_EXPR_DEPTH]] ^(<dt>SQLITE_LIMIT_EXPR_DEPTH</dt>
3344 ** <dd>The maximum depth of the parse tree on any expression.</dd>)^
3346 ** [[SQLITE_LIMIT_COMPOUND_SELECT]] ^(<dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
3347 ** <dd>The maximum number of terms in a compound SELECT statement.</dd>)^
3349 ** [[SQLITE_LIMIT_VDBE_OP]] ^(<dt>SQLITE_LIMIT_VDBE_OP</dt>
3350 ** <dd>The maximum number of instructions in a virtual machine program
3351 ** used to implement an SQL statement. This limit is not currently
3352 ** enforced, though that might be added in some future release of
3353 ** SQLite.</dd>)^
3355 ** [[SQLITE_LIMIT_FUNCTION_ARG]] ^(<dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
3356 ** <dd>The maximum number of arguments on a function.</dd>)^
3358 ** [[SQLITE_LIMIT_ATTACHED]] ^(<dt>SQLITE_LIMIT_ATTACHED</dt>
3359 ** <dd>The maximum number of [ATTACH | attached databases].)^</dd>
3361 ** [[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]]
3362 ** ^(<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
3363 ** <dd>The maximum length of the pattern argument to the [LIKE] or
3364 ** [GLOB] operators.</dd>)^
3366 ** [[SQLITE_LIMIT_VARIABLE_NUMBER]]
3367 ** ^(<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
3368 ** <dd>The maximum index number of any [parameter] in an SQL statement.)^
3370 ** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
3371 ** <dd>The maximum depth of recursion for triggers.</dd>)^
3372 ** </dl>
3374 #define SQLITE_LIMIT_LENGTH 0
3375 #define SQLITE_LIMIT_SQL_LENGTH 1
3376 #define SQLITE_LIMIT_COLUMN 2
3377 #define SQLITE_LIMIT_EXPR_DEPTH 3
3378 #define SQLITE_LIMIT_COMPOUND_SELECT 4
3379 #define SQLITE_LIMIT_VDBE_OP 5
3380 #define SQLITE_LIMIT_FUNCTION_ARG 6
3381 #define SQLITE_LIMIT_ATTACHED 7
3382 #define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8
3383 #define SQLITE_LIMIT_VARIABLE_NUMBER 9
3384 #define SQLITE_LIMIT_TRIGGER_DEPTH 10
3387 ** CAPI3REF: Compiling An SQL Statement
3388 ** KEYWORDS: {SQL statement compiler}
3390 ** To execute an SQL query, it must first be compiled into a byte-code
3391 ** program using one of these routines.
3393 ** The first argument, "db", is a [database connection] obtained from a
3394 ** prior successful call to [sqlite3_open()], [sqlite3_open_v2()] or
3395 ** [sqlite3_open16()]. The database connection must not have been closed.
3397 ** The second argument, "zSql", is the statement to be compiled, encoded
3398 ** as either UTF-8 or UTF-16. The sqlite3_prepare() and sqlite3_prepare_v2()
3399 ** interfaces use UTF-8, and sqlite3_prepare16() and sqlite3_prepare16_v2()
3400 ** use UTF-16.
3402 ** ^If the nByte argument is less than zero, then zSql is read up to the
3403 ** first zero terminator. ^If nByte is non-negative, then it is the maximum
3404 ** number of bytes read from zSql. ^When nByte is non-negative, the
3405 ** zSql string ends at either the first '\000' or '\u0000' character or
3406 ** the nByte-th byte, whichever comes first. If the caller knows
3407 ** that the supplied string is nul-terminated, then there is a small
3408 ** performance advantage to be gained by passing an nByte parameter that
3409 ** is equal to the number of bytes in the input string <i>including</i>
3410 ** the nul-terminator bytes as this saves SQLite from having to
3411 ** make a copy of the input string.
3413 ** ^If pzTail is not NULL then *pzTail is made to point to the first byte
3414 ** past the end of the first SQL statement in zSql. These routines only
3415 ** compile the first statement in zSql, so *pzTail is left pointing to
3416 ** what remains uncompiled.
3418 ** ^*ppStmt is left pointing to a compiled [prepared statement] that can be
3419 ** executed using [sqlite3_step()]. ^If there is an error, *ppStmt is set
3420 ** to NULL. ^If the input text contains no SQL (if the input is an empty
3421 ** string or a comment) then *ppStmt is set to NULL.
3422 ** The calling procedure is responsible for deleting the compiled
3423 ** SQL statement using [sqlite3_finalize()] after it has finished with it.
3424 ** ppStmt may not be NULL.
3426 ** ^On success, the sqlite3_prepare() family of routines return [SQLITE_OK];
3427 ** otherwise an [error code] is returned.
3429 ** The sqlite3_prepare_v2() and sqlite3_prepare16_v2() interfaces are
3430 ** recommended for all new programs. The two older interfaces are retained
3431 ** for backwards compatibility, but their use is discouraged.
3432 ** ^In the "v2" interfaces, the prepared statement
3433 ** that is returned (the [sqlite3_stmt] object) contains a copy of the
3434 ** original SQL text. This causes the [sqlite3_step()] interface to
3435 ** behave differently in three ways:
3437 ** <ol>
3438 ** <li>
3439 ** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it
3440 ** always used to do, [sqlite3_step()] will automatically recompile the SQL
3441 ** statement and try to run it again.
3442 ** </li>
3444 ** <li>
3445 ** ^When an error occurs, [sqlite3_step()] will return one of the detailed
3446 ** [error codes] or [extended error codes]. ^The legacy behavior was that
3447 ** [sqlite3_step()] would only return a generic [SQLITE_ERROR] result code
3448 ** and the application would have to make a second call to [sqlite3_reset()]
3449 ** in order to find the underlying cause of the problem. With the "v2" prepare
3450 ** interfaces, the underlying reason for the error is returned immediately.
3451 ** </li>
3453 ** <li>
3454 ** ^If the specific value bound to [parameter | host parameter] in the
3455 ** WHERE clause might influence the choice of query plan for a statement,
3456 ** then the statement will be automatically recompiled, as if there had been
3457 ** a schema change, on the first [sqlite3_step()] call following any change
3458 ** to the [sqlite3_bind_text | bindings] of that [parameter].
3459 ** ^The specific value of WHERE-clause [parameter] might influence the
3460 ** choice of query plan if the parameter is the left-hand side of a [LIKE]
3461 ** or [GLOB] operator or if the parameter is compared to an indexed column
3462 ** and the [SQLITE_ENABLE_STAT3] compile-time option is enabled.
3463 ** the
3464 ** </li>
3465 ** </ol>
3467 SQLITE_API int sqlite3_prepare(
3468 sqlite3 *db, /* Database handle */
3469 const char *zSql, /* SQL statement, UTF-8 encoded */
3470 int nByte, /* Maximum length of zSql in bytes. */
3471 sqlite3_stmt **ppStmt, /* OUT: Statement handle */
3472 const char **pzTail /* OUT: Pointer to unused portion of zSql */
3474 SQLITE_API int sqlite3_prepare_v2(
3475 sqlite3 *db, /* Database handle */
3476 const char *zSql, /* SQL statement, UTF-8 encoded */
3477 int nByte, /* Maximum length of zSql in bytes. */
3478 sqlite3_stmt **ppStmt, /* OUT: Statement handle */
3479 const char **pzTail /* OUT: Pointer to unused portion of zSql */
3481 SQLITE_API int sqlite3_prepare16(
3482 sqlite3 *db, /* Database handle */
3483 const void *zSql, /* SQL statement, UTF-16 encoded */
3484 int nByte, /* Maximum length of zSql in bytes. */
3485 sqlite3_stmt **ppStmt, /* OUT: Statement handle */
3486 const void **pzTail /* OUT: Pointer to unused portion of zSql */
3488 SQLITE_API int sqlite3_prepare16_v2(
3489 sqlite3 *db, /* Database handle */
3490 const void *zSql, /* SQL statement, UTF-16 encoded */
3491 int nByte, /* Maximum length of zSql in bytes. */
3492 sqlite3_stmt **ppStmt, /* OUT: Statement handle */
3493 const void **pzTail /* OUT: Pointer to unused portion of zSql */
3497 ** CAPI3REF: Retrieving Statement SQL
3499 ** ^This interface can be used to retrieve a saved copy of the original
3500 ** SQL text used to create a [prepared statement] if that statement was
3501 ** compiled using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()].
3503 SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt);
3506 ** CAPI3REF: Determine If An SQL Statement Writes The Database
3508 ** ^The sqlite3_stmt_readonly(X) interface returns true (non-zero) if
3509 ** and only if the [prepared statement] X makes no direct changes to
3510 ** the content of the database file.
3512 ** Note that [application-defined SQL functions] or
3513 ** [virtual tables] might change the database indirectly as a side effect.
3514 ** ^(For example, if an application defines a function "eval()" that
3515 ** calls [sqlite3_exec()], then the following SQL statement would
3516 ** change the database file through side-effects:
3518 ** <blockquote><pre>
3519 ** SELECT eval('DELETE FROM t1') FROM t2;
3520 ** </pre></blockquote>
3522 ** But because the [SELECT] statement does not change the database file
3523 ** directly, sqlite3_stmt_readonly() would still return true.)^
3525 ** ^Transaction control statements such as [BEGIN], [COMMIT], [ROLLBACK],
3526 ** [SAVEPOINT], and [RELEASE] cause sqlite3_stmt_readonly() to return true,
3527 ** since the statements themselves do not actually modify the database but
3528 ** rather they control the timing of when other statements modify the
3529 ** database. ^The [ATTACH] and [DETACH] statements also cause
3530 ** sqlite3_stmt_readonly() to return true since, while those statements
3531 ** change the configuration of a database connection, they do not make
3532 ** changes to the content of the database files on disk.
3534 SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt);
3537 ** CAPI3REF: Determine If A Prepared Statement Has Been Reset
3539 ** ^The sqlite3_stmt_busy(S) interface returns true (non-zero) if the
3540 ** [prepared statement] S has been stepped at least once using
3541 ** [sqlite3_step(S)] but has not run to completion and/or has not
3542 ** been reset using [sqlite3_reset(S)]. ^The sqlite3_stmt_busy(S)
3543 ** interface returns false if S is a NULL pointer. If S is not a
3544 ** NULL pointer and is not a pointer to a valid [prepared statement]
3545 ** object, then the behavior is undefined and probably undesirable.
3547 ** This interface can be used in combination [sqlite3_next_stmt()]
3548 ** to locate all prepared statements associated with a database
3549 ** connection that are in need of being reset. This can be used,
3550 ** for example, in diagnostic routines to search for prepared
3551 ** statements that are holding a transaction open.
3553 SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt*);
3556 ** CAPI3REF: Dynamically Typed Value Object
3557 ** KEYWORDS: {protected sqlite3_value} {unprotected sqlite3_value}
3559 ** SQLite uses the sqlite3_value object to represent all values
3560 ** that can be stored in a database table. SQLite uses dynamic typing
3561 ** for the values it stores. ^Values stored in sqlite3_value objects
3562 ** can be integers, floating point values, strings, BLOBs, or NULL.
3564 ** An sqlite3_value object may be either "protected" or "unprotected".
3565 ** Some interfaces require a protected sqlite3_value. Other interfaces
3566 ** will accept either a protected or an unprotected sqlite3_value.
3567 ** Every interface that accepts sqlite3_value arguments specifies
3568 ** whether or not it requires a protected sqlite3_value.
3570 ** The terms "protected" and "unprotected" refer to whether or not
3571 ** a mutex is held. An internal mutex is held for a protected
3572 ** sqlite3_value object but no mutex is held for an unprotected
3573 ** sqlite3_value object. If SQLite is compiled to be single-threaded
3574 ** (with [SQLITE_THREADSAFE=0] and with [sqlite3_threadsafe()] returning 0)
3575 ** or if SQLite is run in one of reduced mutex modes
3576 ** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD]
3577 ** then there is no distinction between protected and unprotected
3578 ** sqlite3_value objects and they can be used interchangeably. However,
3579 ** for maximum code portability it is recommended that applications
3580 ** still make the distinction between protected and unprotected
3581 ** sqlite3_value objects even when not strictly required.
3583 ** ^The sqlite3_value objects that are passed as parameters into the
3584 ** implementation of [application-defined SQL functions] are protected.
3585 ** ^The sqlite3_value object returned by
3586 ** [sqlite3_column_value()] is unprotected.
3587 ** Unprotected sqlite3_value objects may only be used with
3588 ** [sqlite3_result_value()] and [sqlite3_bind_value()].
3589 ** The [sqlite3_value_blob | sqlite3_value_type()] family of
3590 ** interfaces require protected sqlite3_value objects.
3592 typedef struct Mem sqlite3_value;
3595 ** CAPI3REF: SQL Function Context Object
3597 ** The context in which an SQL function executes is stored in an
3598 ** sqlite3_context object. ^A pointer to an sqlite3_context object
3599 ** is always first parameter to [application-defined SQL functions].
3600 ** The application-defined SQL function implementation will pass this
3601 ** pointer through into calls to [sqlite3_result_int | sqlite3_result()],
3602 ** [sqlite3_aggregate_context()], [sqlite3_user_data()],
3603 ** [sqlite3_context_db_handle()], [sqlite3_get_auxdata()],
3604 ** and/or [sqlite3_set_auxdata()].
3606 typedef struct sqlite3_context sqlite3_context;
3609 ** CAPI3REF: Binding Values To Prepared Statements
3610 ** KEYWORDS: {host parameter} {host parameters} {host parameter name}
3611 ** KEYWORDS: {SQL parameter} {SQL parameters} {parameter binding}
3613 ** ^(In the SQL statement text input to [sqlite3_prepare_v2()] and its variants,
3614 ** literals may be replaced by a [parameter] that matches one of following
3615 ** templates:
3617 ** <ul>
3618 ** <li> ?
3619 ** <li> ?NNN
3620 ** <li> :VVV
3621 ** <li> @VVV
3622 ** <li> $VVV
3623 ** </ul>
3625 ** In the templates above, NNN represents an integer literal,
3626 ** and VVV represents an alphanumeric identifier.)^ ^The values of these
3627 ** parameters (also called "host parameter names" or "SQL parameters")
3628 ** can be set using the sqlite3_bind_*() routines defined here.
3630 ** ^The first argument to the sqlite3_bind_*() routines is always
3631 ** a pointer to the [sqlite3_stmt] object returned from
3632 ** [sqlite3_prepare_v2()] or its variants.
3634 ** ^The second argument is the index of the SQL parameter to be set.
3635 ** ^The leftmost SQL parameter has an index of 1. ^When the same named
3636 ** SQL parameter is used more than once, second and subsequent
3637 ** occurrences have the same index as the first occurrence.
3638 ** ^The index for named parameters can be looked up using the
3639 ** [sqlite3_bind_parameter_index()] API if desired. ^The index
3640 ** for "?NNN" parameters is the value of NNN.
3641 ** ^The NNN value must be between 1 and the [sqlite3_limit()]
3642 ** parameter [SQLITE_LIMIT_VARIABLE_NUMBER] (default value: 999).
3644 ** ^The third argument is the value to bind to the parameter.
3646 ** ^(In those routines that have a fourth argument, its value is the
3647 ** number of bytes in the parameter. To be clear: the value is the
3648 ** number of <u>bytes</u> in the value, not the number of characters.)^
3649 ** ^If the fourth parameter is negative, the length of the string is
3650 ** the number of bytes up to the first zero terminator.
3651 ** If a non-negative fourth parameter is provided to sqlite3_bind_text()
3652 ** or sqlite3_bind_text16() then that parameter must be the byte offset
3653 ** where the NUL terminator would occur assuming the string were NUL
3654 ** terminated. If any NUL characters occur at byte offsets less than
3655 ** the value of the fourth parameter then the resulting string value will
3656 ** contain embedded NULs. The result of expressions involving strings
3657 ** with embedded NULs is undefined.
3659 ** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
3660 ** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
3661 ** string after SQLite has finished with it. ^The destructor is called
3662 ** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
3663 ** sqlite3_bind_text(), or sqlite3_bind_text16() fails.
3664 ** ^If the fifth argument is
3665 ** the special value [SQLITE_STATIC], then SQLite assumes that the
3666 ** information is in static, unmanaged space and does not need to be freed.
3667 ** ^If the fifth argument has the value [SQLITE_TRANSIENT], then
3668 ** SQLite makes its own private copy of the data immediately, before
3669 ** the sqlite3_bind_*() routine returns.
3671 ** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
3672 ** is filled with zeroes. ^A zeroblob uses a fixed amount of memory
3673 ** (just an integer to hold its size) while it is being processed.
3674 ** Zeroblobs are intended to serve as placeholders for BLOBs whose
3675 ** content is later written using
3676 ** [sqlite3_blob_open | incremental BLOB I/O] routines.
3677 ** ^A negative value for the zeroblob results in a zero-length BLOB.
3679 ** ^If any of the sqlite3_bind_*() routines are called with a NULL pointer
3680 ** for the [prepared statement] or with a prepared statement for which
3681 ** [sqlite3_step()] has been called more recently than [sqlite3_reset()],
3682 ** then the call will return [SQLITE_MISUSE]. If any sqlite3_bind_()
3683 ** routine is passed a [prepared statement] that has been finalized, the
3684 ** result is undefined and probably harmful.
3686 ** ^Bindings are not cleared by the [sqlite3_reset()] routine.
3687 ** ^Unbound parameters are interpreted as NULL.
3689 ** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an
3690 ** [error code] if anything goes wrong.
3691 ** ^[SQLITE_RANGE] is returned if the parameter
3692 ** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails.
3694 ** See also: [sqlite3_bind_parameter_count()],
3695 ** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()].
3697 SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
3698 SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
3699 SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
3700 SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
3701 SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
3702 SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
3703 SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
3704 SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
3705 SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
3708 ** CAPI3REF: Number Of SQL Parameters
3710 ** ^This routine can be used to find the number of [SQL parameters]
3711 ** in a [prepared statement]. SQL parameters are tokens of the
3712 ** form "?", "?NNN", ":AAA", "$AAA", or "@AAA" that serve as
3713 ** placeholders for values that are [sqlite3_bind_blob | bound]
3714 ** to the parameters at a later time.
3716 ** ^(This routine actually returns the index of the largest (rightmost)
3717 ** parameter. For all forms except ?NNN, this will correspond to the
3718 ** number of unique parameters. If parameters of the ?NNN form are used,
3719 ** there may be gaps in the list.)^
3721 ** See also: [sqlite3_bind_blob|sqlite3_bind()],
3722 ** [sqlite3_bind_parameter_name()], and
3723 ** [sqlite3_bind_parameter_index()].
3725 SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt*);
3728 ** CAPI3REF: Name Of A Host Parameter
3730 ** ^The sqlite3_bind_parameter_name(P,N) interface returns
3731 ** the name of the N-th [SQL parameter] in the [prepared statement] P.
3732 ** ^(SQL parameters of the form "?NNN" or ":AAA" or "@AAA" or "$AAA"
3733 ** have a name which is the string "?NNN" or ":AAA" or "@AAA" or "$AAA"
3734 ** respectively.
3735 ** In other words, the initial ":" or "$" or "@" or "?"
3736 ** is included as part of the name.)^
3737 ** ^Parameters of the form "?" without a following integer have no name
3738 ** and are referred to as "nameless" or "anonymous parameters".
3740 ** ^The first host parameter has an index of 1, not 0.
3742 ** ^If the value N is out of range or if the N-th parameter is
3743 ** nameless, then NULL is returned. ^The returned string is
3744 ** always in UTF-8 encoding even if the named parameter was
3745 ** originally specified as UTF-16 in [sqlite3_prepare16()] or
3746 ** [sqlite3_prepare16_v2()].
3748 ** See also: [sqlite3_bind_blob|sqlite3_bind()],
3749 ** [sqlite3_bind_parameter_count()], and
3750 ** [sqlite3_bind_parameter_index()].
3752 SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt*, int);
3755 ** CAPI3REF: Index Of A Parameter With A Given Name
3757 ** ^Return the index of an SQL parameter given its name. ^The
3758 ** index value returned is suitable for use as the second
3759 ** parameter to [sqlite3_bind_blob|sqlite3_bind()]. ^A zero
3760 ** is returned if no matching parameter is found. ^The parameter
3761 ** name must be given in UTF-8 even if the original statement
3762 ** was prepared from UTF-16 text using [sqlite3_prepare16_v2()].
3764 ** See also: [sqlite3_bind_blob|sqlite3_bind()],
3765 ** [sqlite3_bind_parameter_count()], and
3766 ** [sqlite3_bind_parameter_index()].
3768 SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt*, const char *zName);
3771 ** CAPI3REF: Reset All Bindings On A Prepared Statement
3773 ** ^Contrary to the intuition of many, [sqlite3_reset()] does not reset
3774 ** the [sqlite3_bind_blob | bindings] on a [prepared statement].
3775 ** ^Use this routine to reset all host parameters to NULL.
3777 SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt*);
3780 ** CAPI3REF: Number Of Columns In A Result Set
3782 ** ^Return the number of columns in the result set returned by the
3783 ** [prepared statement]. ^This routine returns 0 if pStmt is an SQL
3784 ** statement that does not return data (for example an [UPDATE]).
3786 ** See also: [sqlite3_data_count()]
3788 SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt);
3791 ** CAPI3REF: Column Names In A Result Set
3793 ** ^These routines return the name assigned to a particular column
3794 ** in the result set of a [SELECT] statement. ^The sqlite3_column_name()
3795 ** interface returns a pointer to a zero-terminated UTF-8 string
3796 ** and sqlite3_column_name16() returns a pointer to a zero-terminated
3797 ** UTF-16 string. ^The first parameter is the [prepared statement]
3798 ** that implements the [SELECT] statement. ^The second parameter is the
3799 ** column number. ^The leftmost column is number 0.
3801 ** ^The returned string pointer is valid until either the [prepared statement]
3802 ** is destroyed by [sqlite3_finalize()] or until the statement is automatically
3803 ** reprepared by the first call to [sqlite3_step()] for a particular run
3804 ** or until the next call to
3805 ** sqlite3_column_name() or sqlite3_column_name16() on the same column.
3807 ** ^If sqlite3_malloc() fails during the processing of either routine
3808 ** (for example during a conversion from UTF-8 to UTF-16) then a
3809 ** NULL pointer is returned.
3811 ** ^The name of a result column is the value of the "AS" clause for
3812 ** that column, if there is an AS clause. If there is no AS clause
3813 ** then the name of the column is unspecified and may change from
3814 ** one release of SQLite to the next.
3816 SQLITE_API const char *sqlite3_column_name(sqlite3_stmt*, int N);
3817 SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt*, int N);
3820 ** CAPI3REF: Source Of Data In A Query Result
3822 ** ^These routines provide a means to determine the database, table, and
3823 ** table column that is the origin of a particular result column in
3824 ** [SELECT] statement.
3825 ** ^The name of the database or table or column can be returned as
3826 ** either a UTF-8 or UTF-16 string. ^The _database_ routines return
3827 ** the database name, the _table_ routines return the table name, and
3828 ** the origin_ routines return the column name.
3829 ** ^The returned string is valid until the [prepared statement] is destroyed
3830 ** using [sqlite3_finalize()] or until the statement is automatically
3831 ** reprepared by the first call to [sqlite3_step()] for a particular run
3832 ** or until the same information is requested
3833 ** again in a different encoding.
3835 ** ^The names returned are the original un-aliased names of the
3836 ** database, table, and column.
3838 ** ^The first argument to these interfaces is a [prepared statement].
3839 ** ^These functions return information about the Nth result column returned by
3840 ** the statement, where N is the second function argument.
3841 ** ^The left-most column is column 0 for these routines.
3843 ** ^If the Nth column returned by the statement is an expression or
3844 ** subquery and is not a column value, then all of these functions return
3845 ** NULL. ^These routine might also return NULL if a memory allocation error
3846 ** occurs. ^Otherwise, they return the name of the attached database, table,
3847 ** or column that query result column was extracted from.
3849 ** ^As with all other SQLite APIs, those whose names end with "16" return
3850 ** UTF-16 encoded strings and the other functions return UTF-8.
3852 ** ^These APIs are only available if the library was compiled with the
3853 ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol.
3855 ** If two or more threads call one or more of these routines against the same
3856 ** prepared statement and column at the same time then the results are
3857 ** undefined.
3859 ** If two or more threads call one or more
3860 ** [sqlite3_column_database_name | column metadata interfaces]
3861 ** for the same [prepared statement] and result column
3862 ** at the same time then the results are undefined.
3864 SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt*,int);
3865 SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt*,int);
3866 SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt*,int);
3867 SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt*,int);
3868 SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt*,int);
3869 SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt*,int);
3872 ** CAPI3REF: Declared Datatype Of A Query Result
3874 ** ^(The first parameter is a [prepared statement].
3875 ** If this statement is a [SELECT] statement and the Nth column of the
3876 ** returned result set of that [SELECT] is a table column (not an
3877 ** expression or subquery) then the declared type of the table
3878 ** column is returned.)^ ^If the Nth column of the result set is an
3879 ** expression or subquery, then a NULL pointer is returned.
3880 ** ^The returned string is always UTF-8 encoded.
3882 ** ^(For example, given the database schema:
3884 ** CREATE TABLE t1(c1 VARIANT);
3886 ** and the following statement to be compiled:
3888 ** SELECT c1 + 1, c1 FROM t1;
3890 ** this routine would return the string "VARIANT" for the second result
3891 ** column (i==1), and a NULL pointer for the first result column (i==0).)^
3893 ** ^SQLite uses dynamic run-time typing. ^So just because a column
3894 ** is declared to contain a particular type does not mean that the
3895 ** data stored in that column is of the declared type. SQLite is
3896 ** strongly typed, but the typing is dynamic not static. ^Type
3897 ** is associated with individual values, not with the containers
3898 ** used to hold those values.
3900 SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt*,int);
3901 SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt*,int);
3904 ** CAPI3REF: Evaluate An SQL Statement
3906 ** After a [prepared statement] has been prepared using either
3907 ** [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] or one of the legacy
3908 ** interfaces [sqlite3_prepare()] or [sqlite3_prepare16()], this function
3909 ** must be called one or more times to evaluate the statement.
3911 ** The details of the behavior of the sqlite3_step() interface depend
3912 ** on whether the statement was prepared using the newer "v2" interface
3913 ** [sqlite3_prepare_v2()] and [sqlite3_prepare16_v2()] or the older legacy
3914 ** interface [sqlite3_prepare()] and [sqlite3_prepare16()]. The use of the
3915 ** new "v2" interface is recommended for new applications but the legacy
3916 ** interface will continue to be supported.
3918 ** ^In the legacy interface, the return value will be either [SQLITE_BUSY],
3919 ** [SQLITE_DONE], [SQLITE_ROW], [SQLITE_ERROR], or [SQLITE_MISUSE].
3920 ** ^With the "v2" interface, any of the other [result codes] or
3921 ** [extended result codes] might be returned as well.
3923 ** ^[SQLITE_BUSY] means that the database engine was unable to acquire the
3924 ** database locks it needs to do its job. ^If the statement is a [COMMIT]
3925 ** or occurs outside of an explicit transaction, then you can retry the
3926 ** statement. If the statement is not a [COMMIT] and occurs within an
3927 ** explicit transaction then you should rollback the transaction before
3928 ** continuing.
3930 ** ^[SQLITE_DONE] means that the statement has finished executing
3931 ** successfully. sqlite3_step() should not be called again on this virtual
3932 ** machine without first calling [sqlite3_reset()] to reset the virtual
3933 ** machine back to its initial state.
3935 ** ^If the SQL statement being executed returns any data, then [SQLITE_ROW]
3936 ** is returned each time a new row of data is ready for processing by the
3937 ** caller. The values may be accessed using the [column access functions].
3938 ** sqlite3_step() is called again to retrieve the next row of data.
3940 ** ^[SQLITE_ERROR] means that a run-time error (such as a constraint
3941 ** violation) has occurred. sqlite3_step() should not be called again on
3942 ** the VM. More information may be found by calling [sqlite3_errmsg()].
3943 ** ^With the legacy interface, a more specific error code (for example,
3944 ** [SQLITE_INTERRUPT], [SQLITE_SCHEMA], [SQLITE_CORRUPT], and so forth)
3945 ** can be obtained by calling [sqlite3_reset()] on the
3946 ** [prepared statement]. ^In the "v2" interface,
3947 ** the more specific error code is returned directly by sqlite3_step().
3949 ** [SQLITE_MISUSE] means that the this routine was called inappropriately.
3950 ** Perhaps it was called on a [prepared statement] that has
3951 ** already been [sqlite3_finalize | finalized] or on one that had
3952 ** previously returned [SQLITE_ERROR] or [SQLITE_DONE]. Or it could
3953 ** be the case that the same database connection is being used by two or
3954 ** more threads at the same moment in time.
3956 ** For all versions of SQLite up to and including 3.6.23.1, a call to
3957 ** [sqlite3_reset()] was required after sqlite3_step() returned anything
3958 ** other than [SQLITE_ROW] before any subsequent invocation of
3959 ** sqlite3_step(). Failure to reset the prepared statement using
3960 ** [sqlite3_reset()] would result in an [SQLITE_MISUSE] return from
3961 ** sqlite3_step(). But after version 3.6.23.1, sqlite3_step() began
3962 ** calling [sqlite3_reset()] automatically in this circumstance rather
3963 ** than returning [SQLITE_MISUSE]. This is not considered a compatibility
3964 ** break because any application that ever receives an SQLITE_MISUSE error
3965 ** is broken by definition. The [SQLITE_OMIT_AUTORESET] compile-time option
3966 ** can be used to restore the legacy behavior.
3968 ** <b>Goofy Interface Alert:</b> In the legacy interface, the sqlite3_step()
3969 ** API always returns a generic error code, [SQLITE_ERROR], following any
3970 ** error other than [SQLITE_BUSY] and [SQLITE_MISUSE]. You must call
3971 ** [sqlite3_reset()] or [sqlite3_finalize()] in order to find one of the
3972 ** specific [error codes] that better describes the error.
3973 ** We admit that this is a goofy design. The problem has been fixed
3974 ** with the "v2" interface. If you prepare all of your SQL statements
3975 ** using either [sqlite3_prepare_v2()] or [sqlite3_prepare16_v2()] instead
3976 ** of the legacy [sqlite3_prepare()] and [sqlite3_prepare16()] interfaces,
3977 ** then the more specific [error codes] are returned directly
3978 ** by sqlite3_step(). The use of the "v2" interface is recommended.
3980 SQLITE_API int sqlite3_step(sqlite3_stmt*);
3983 ** CAPI3REF: Number of columns in a result set
3985 ** ^The sqlite3_data_count(P) interface returns the number of columns in the
3986 ** current row of the result set of [prepared statement] P.
3987 ** ^If prepared statement P does not have results ready to return
3988 ** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of
3989 ** interfaces) then sqlite3_data_count(P) returns 0.
3990 ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
3991 ** ^The sqlite3_data_count(P) routine returns 0 if the previous call to
3992 ** [sqlite3_step](P) returned [SQLITE_DONE]. ^The sqlite3_data_count(P)
3993 ** will return non-zero if previous call to [sqlite3_step](P) returned
3994 ** [SQLITE_ROW], except in the case of the [PRAGMA incremental_vacuum]
3995 ** where it always returns zero since each step of that multi-step
3996 ** pragma returns 0 columns of data.
3998 ** See also: [sqlite3_column_count()]
4000 SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt);
4003 ** CAPI3REF: Fundamental Datatypes
4004 ** KEYWORDS: SQLITE_TEXT
4006 ** ^(Every value in SQLite has one of five fundamental datatypes:
4008 ** <ul>
4009 ** <li> 64-bit signed integer
4010 ** <li> 64-bit IEEE floating point number
4011 ** <li> string
4012 ** <li> BLOB
4013 ** <li> NULL
4014 ** </ul>)^
4016 ** These constants are codes for each of those types.
4018 ** Note that the SQLITE_TEXT constant was also used in SQLite version 2
4019 ** for a completely different meaning. Software that links against both
4020 ** SQLite version 2 and SQLite version 3 should use SQLITE3_TEXT, not
4021 ** SQLITE_TEXT.
4023 #define SQLITE_INTEGER 1
4024 #define SQLITE_FLOAT 2
4025 #define SQLITE_BLOB 4
4026 #define SQLITE_NULL 5
4027 #ifdef SQLITE_TEXT
4028 # undef SQLITE_TEXT
4029 #else
4030 # define SQLITE_TEXT 3
4031 #endif
4032 #define SQLITE3_TEXT 3
4035 ** CAPI3REF: Result Values From A Query
4036 ** KEYWORDS: {column access functions}
4038 ** These routines form the "result set" interface.
4040 ** ^These routines return information about a single column of the current
4041 ** result row of a query. ^In every case the first argument is a pointer
4042 ** to the [prepared statement] that is being evaluated (the [sqlite3_stmt*]
4043 ** that was returned from [sqlite3_prepare_v2()] or one of its variants)
4044 ** and the second argument is the index of the column for which information
4045 ** should be returned. ^The leftmost column of the result set has the index 0.
4046 ** ^The number of columns in the result can be determined using
4047 ** [sqlite3_column_count()].
4049 ** If the SQL statement does not currently point to a valid row, or if the
4050 ** column index is out of range, the result is undefined.
4051 ** These routines may only be called when the most recent call to
4052 ** [sqlite3_step()] has returned [SQLITE_ROW] and neither
4053 ** [sqlite3_reset()] nor [sqlite3_finalize()] have been called subsequently.
4054 ** If any of these routines are called after [sqlite3_reset()] or
4055 ** [sqlite3_finalize()] or after [sqlite3_step()] has returned
4056 ** something other than [SQLITE_ROW], the results are undefined.
4057 ** If [sqlite3_step()] or [sqlite3_reset()] or [sqlite3_finalize()]
4058 ** are called from a different thread while any of these routines
4059 ** are pending, then the results are undefined.
4061 ** ^The sqlite3_column_type() routine returns the
4062 ** [SQLITE_INTEGER | datatype code] for the initial data type
4063 ** of the result column. ^The returned value is one of [SQLITE_INTEGER],
4064 ** [SQLITE_FLOAT], [SQLITE_TEXT], [SQLITE_BLOB], or [SQLITE_NULL]. The value
4065 ** returned by sqlite3_column_type() is only meaningful if no type
4066 ** conversions have occurred as described below. After a type conversion,
4067 ** the value returned by sqlite3_column_type() is undefined. Future
4068 ** versions of SQLite may change the behavior of sqlite3_column_type()
4069 ** following a type conversion.
4071 ** ^If the result is a BLOB or UTF-8 string then the sqlite3_column_bytes()
4072 ** routine returns the number of bytes in that BLOB or string.
4073 ** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts
4074 ** the string to UTF-8 and then returns the number of bytes.
4075 ** ^If the result is a numeric value then sqlite3_column_bytes() uses
4076 ** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns
4077 ** the number of bytes in that string.
4078 ** ^If the result is NULL, then sqlite3_column_bytes() returns zero.
4080 ** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
4081 ** routine returns the number of bytes in that BLOB or string.
4082 ** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
4083 ** the string to UTF-16 and then returns the number of bytes.
4084 ** ^If the result is a numeric value then sqlite3_column_bytes16() uses
4085 ** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns
4086 ** the number of bytes in that string.
4087 ** ^If the result is NULL, then sqlite3_column_bytes16() returns zero.
4089 ** ^The values returned by [sqlite3_column_bytes()] and
4090 ** [sqlite3_column_bytes16()] do not include the zero terminators at the end
4091 ** of the string. ^For clarity: the values returned by
4092 ** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of
4093 ** bytes in the string, not the number of characters.
4095 ** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
4096 ** even empty strings, are always zero-terminated. ^The return
4097 ** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
4099 ** ^The object returned by [sqlite3_column_value()] is an
4100 ** [unprotected sqlite3_value] object. An unprotected sqlite3_value object
4101 ** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()].
4102 ** If the [unprotected sqlite3_value] object returned by
4103 ** [sqlite3_column_value()] is used in any other way, including calls
4104 ** to routines like [sqlite3_value_int()], [sqlite3_value_text()],
4105 ** or [sqlite3_value_bytes()], then the behavior is undefined.
4107 ** These routines attempt to convert the value where appropriate. ^For
4108 ** example, if the internal representation is FLOAT and a text result
4109 ** is requested, [sqlite3_snprintf()] is used internally to perform the
4110 ** conversion automatically. ^(The following table details the conversions
4111 ** that are applied:
4113 ** <blockquote>
4114 ** <table border="1">
4115 ** <tr><th> Internal<br>Type <th> Requested<br>Type <th> Conversion
4117 ** <tr><td> NULL <td> INTEGER <td> Result is 0
4118 ** <tr><td> NULL <td> FLOAT <td> Result is 0.0
4119 ** <tr><td> NULL <td> TEXT <td> Result is NULL pointer
4120 ** <tr><td> NULL <td> BLOB <td> Result is NULL pointer
4121 ** <tr><td> INTEGER <td> FLOAT <td> Convert from integer to float
4122 ** <tr><td> INTEGER <td> TEXT <td> ASCII rendering of the integer
4123 ** <tr><td> INTEGER <td> BLOB <td> Same as INTEGER->TEXT
4124 ** <tr><td> FLOAT <td> INTEGER <td> Convert from float to integer
4125 ** <tr><td> FLOAT <td> TEXT <td> ASCII rendering of the float
4126 ** <tr><td> FLOAT <td> BLOB <td> Same as FLOAT->TEXT
4127 ** <tr><td> TEXT <td> INTEGER <td> Use atoi()
4128 ** <tr><td> TEXT <td> FLOAT <td> Use atof()
4129 ** <tr><td> TEXT <td> BLOB <td> No change
4130 ** <tr><td> BLOB <td> INTEGER <td> Convert to TEXT then use atoi()
4131 ** <tr><td> BLOB <td> FLOAT <td> Convert to TEXT then use atof()
4132 ** <tr><td> BLOB <td> TEXT <td> Add a zero terminator if needed
4133 ** </table>
4134 ** </blockquote>)^
4136 ** The table above makes reference to standard C library functions atoi()
4137 ** and atof(). SQLite does not really use these functions. It has its
4138 ** own equivalent internal routines. The atoi() and atof() names are
4139 ** used in the table for brevity and because they are familiar to most
4140 ** C programmers.
4142 ** Note that when type conversions occur, pointers returned by prior
4143 ** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
4144 ** sqlite3_column_text16() may be invalidated.
4145 ** Type conversions and pointer invalidations might occur
4146 ** in the following cases:
4148 ** <ul>
4149 ** <li> The initial content is a BLOB and sqlite3_column_text() or
4150 ** sqlite3_column_text16() is called. A zero-terminator might
4151 ** need to be added to the string.</li>
4152 ** <li> The initial content is UTF-8 text and sqlite3_column_bytes16() or
4153 ** sqlite3_column_text16() is called. The content must be converted
4154 ** to UTF-16.</li>
4155 ** <li> The initial content is UTF-16 text and sqlite3_column_bytes() or
4156 ** sqlite3_column_text() is called. The content must be converted
4157 ** to UTF-8.</li>
4158 ** </ul>
4160 ** ^Conversions between UTF-16be and UTF-16le are always done in place and do
4161 ** not invalidate a prior pointer, though of course the content of the buffer
4162 ** that the prior pointer references will have been modified. Other kinds
4163 ** of conversion are done in place when it is possible, but sometimes they
4164 ** are not possible and in those cases prior pointers are invalidated.
4166 ** The safest and easiest to remember policy is to invoke these routines
4167 ** in one of the following ways:
4169 ** <ul>
4170 ** <li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
4171 ** <li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
4172 ** <li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
4173 ** </ul>
4175 ** In other words, you should call sqlite3_column_text(),
4176 ** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
4177 ** into the desired format, then invoke sqlite3_column_bytes() or
4178 ** sqlite3_column_bytes16() to find the size of the result. Do not mix calls
4179 ** to sqlite3_column_text() or sqlite3_column_blob() with calls to
4180 ** sqlite3_column_bytes16(), and do not mix calls to sqlite3_column_text16()
4181 ** with calls to sqlite3_column_bytes().
4183 ** ^The pointers returned are valid until a type conversion occurs as
4184 ** described above, or until [sqlite3_step()] or [sqlite3_reset()] or
4185 ** [sqlite3_finalize()] is called. ^The memory space used to hold strings
4186 ** and BLOBs is freed automatically. Do <b>not</b> pass the pointers returned
4187 ** [sqlite3_column_blob()], [sqlite3_column_text()], etc. into
4188 ** [sqlite3_free()].
4190 ** ^(If a memory allocation error occurs during the evaluation of any
4191 ** of these routines, a default value is returned. The default value
4192 ** is either the integer 0, the floating point number 0.0, or a NULL
4193 ** pointer. Subsequent calls to [sqlite3_errcode()] will return
4194 ** [SQLITE_NOMEM].)^
4196 SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt*, int iCol);
4197 SQLITE_API int sqlite3_column_bytes(sqlite3_stmt*, int iCol);
4198 SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt*, int iCol);
4199 SQLITE_API double sqlite3_column_double(sqlite3_stmt*, int iCol);
4200 SQLITE_API int sqlite3_column_int(sqlite3_stmt*, int iCol);
4201 SQLITE_API sqlite3_int64 sqlite3_column_int64(sqlite3_stmt*, int iCol);
4202 SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt*, int iCol);
4203 SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt*, int iCol);
4204 SQLITE_API int sqlite3_column_type(sqlite3_stmt*, int iCol);
4205 SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt*, int iCol);
4208 ** CAPI3REF: Destroy A Prepared Statement Object
4210 ** ^The sqlite3_finalize() function is called to delete a [prepared statement].
4211 ** ^If the most recent evaluation of the statement encountered no errors
4212 ** or if the statement is never been evaluated, then sqlite3_finalize() returns
4213 ** SQLITE_OK. ^If the most recent evaluation of statement S failed, then
4214 ** sqlite3_finalize(S) returns the appropriate [error code] or
4215 ** [extended error code].
4217 ** ^The sqlite3_finalize(S) routine can be called at any point during
4218 ** the life cycle of [prepared statement] S:
4219 ** before statement S is ever evaluated, after
4220 ** one or more calls to [sqlite3_reset()], or after any call
4221 ** to [sqlite3_step()] regardless of whether or not the statement has
4222 ** completed execution.
4224 ** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.
4226 ** The application must finalize every [prepared statement] in order to avoid
4227 ** resource leaks. It is a grievous error for the application to try to use
4228 ** a prepared statement after it has been finalized. Any use of a prepared
4229 ** statement after it has been finalized can result in undefined and
4230 ** undesirable behavior such as segfaults and heap corruption.
4232 SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
4235 ** CAPI3REF: Reset A Prepared Statement Object
4237 ** The sqlite3_reset() function is called to reset a [prepared statement]
4238 ** object back to its initial state, ready to be re-executed.
4239 ** ^Any SQL statement variables that had values bound to them using
4240 ** the [sqlite3_bind_blob | sqlite3_bind_*() API] retain their values.
4241 ** Use [sqlite3_clear_bindings()] to reset the bindings.
4243 ** ^The [sqlite3_reset(S)] interface resets the [prepared statement] S
4244 ** back to the beginning of its program.
4246 ** ^If the most recent call to [sqlite3_step(S)] for the
4247 ** [prepared statement] S returned [SQLITE_ROW] or [SQLITE_DONE],
4248 ** or if [sqlite3_step(S)] has never before been called on S,
4249 ** then [sqlite3_reset(S)] returns [SQLITE_OK].
4251 ** ^If the most recent call to [sqlite3_step(S)] for the
4252 ** [prepared statement] S indicated an error, then
4253 ** [sqlite3_reset(S)] returns an appropriate [error code].
4255 ** ^The [sqlite3_reset(S)] interface does not change the values
4256 ** of any [sqlite3_bind_blob|bindings] on the [prepared statement] S.
4258 SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt);
4261 ** CAPI3REF: Create Or Redefine SQL Functions
4262 ** KEYWORDS: {function creation routines}
4263 ** KEYWORDS: {application-defined SQL function}
4264 ** KEYWORDS: {application-defined SQL functions}
4266 ** ^These functions (collectively known as "function creation routines")
4267 ** are used to add SQL functions or aggregates or to redefine the behavior
4268 ** of existing SQL functions or aggregates. The only differences between
4269 ** these routines are the text encoding expected for
4270 ** the second parameter (the name of the function being created)
4271 ** and the presence or absence of a destructor callback for
4272 ** the application data pointer.
4274 ** ^The first parameter is the [database connection] to which the SQL
4275 ** function is to be added. ^If an application uses more than one database
4276 ** connection then application-defined SQL functions must be added
4277 ** to each database connection separately.
4279 ** ^The second parameter is the name of the SQL function to be created or
4280 ** redefined. ^The length of the name is limited to 255 bytes in a UTF-8
4281 ** representation, exclusive of the zero-terminator. ^Note that the name
4282 ** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.
4283 ** ^Any attempt to create a function with a longer name
4284 ** will result in [SQLITE_MISUSE] being returned.
4286 ** ^The third parameter (nArg)
4287 ** is the number of arguments that the SQL function or
4288 ** aggregate takes. ^If this parameter is -1, then the SQL function or
4289 ** aggregate may take any number of arguments between 0 and the limit
4290 ** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]). If the third
4291 ** parameter is less than -1 or greater than 127 then the behavior is
4292 ** undefined.
4294 ** ^The fourth parameter, eTextRep, specifies what
4295 ** [SQLITE_UTF8 | text encoding] this SQL function prefers for
4296 ** its parameters. Every SQL function implementation must be able to work
4297 ** with UTF-8, UTF-16le, or UTF-16be. But some implementations may be
4298 ** more efficient with one encoding than another. ^An application may
4299 ** invoke sqlite3_create_function() or sqlite3_create_function16() multiple
4300 ** times with the same function but with different values of eTextRep.
4301 ** ^When multiple implementations of the same function are available, SQLite
4302 ** will pick the one that involves the least amount of data conversion.
4303 ** If there is only a single implementation which does not care what text
4304 ** encoding is used, then the fourth argument should be [SQLITE_ANY].
4306 ** ^(The fifth parameter is an arbitrary pointer. The implementation of the
4307 ** function can gain access to this pointer using [sqlite3_user_data()].)^
4309 ** ^The sixth, seventh and eighth parameters, xFunc, xStep and xFinal, are
4310 ** pointers to C-language functions that implement the SQL function or
4311 ** aggregate. ^A scalar SQL function requires an implementation of the xFunc
4312 ** callback only; NULL pointers must be passed as the xStep and xFinal
4313 ** parameters. ^An aggregate SQL function requires an implementation of xStep
4314 ** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing
4315 ** SQL function or aggregate, pass NULL pointers for all three function
4316 ** callbacks.
4318 ** ^(If the ninth parameter to sqlite3_create_function_v2() is not NULL,
4319 ** then it is destructor for the application data pointer.
4320 ** The destructor is invoked when the function is deleted, either by being
4321 ** overloaded or when the database connection closes.)^
4322 ** ^The destructor is also invoked if the call to
4323 ** sqlite3_create_function_v2() fails.
4324 ** ^When the destructor callback of the tenth parameter is invoked, it
4325 ** is passed a single argument which is a copy of the application data
4326 ** pointer which was the fifth parameter to sqlite3_create_function_v2().
4328 ** ^It is permitted to register multiple implementations of the same
4329 ** functions with the same name but with either differing numbers of
4330 ** arguments or differing preferred text encodings. ^SQLite will use
4331 ** the implementation that most closely matches the way in which the
4332 ** SQL function is used. ^A function implementation with a non-negative
4333 ** nArg parameter is a better match than a function implementation with
4334 ** a negative nArg. ^A function where the preferred text encoding
4335 ** matches the database encoding is a better
4336 ** match than a function where the encoding is different.
4337 ** ^A function where the encoding difference is between UTF16le and UTF16be
4338 ** is a closer match than a function where the encoding difference is
4339 ** between UTF8 and UTF16.
4341 ** ^Built-in functions may be overloaded by new application-defined functions.
4343 ** ^An application-defined function is permitted to call other
4344 ** SQLite interfaces. However, such calls must not
4345 ** close the database connection nor finalize or reset the prepared
4346 ** statement in which the function is running.
4348 SQLITE_API int sqlite3_create_function(
4349 sqlite3 *db,
4350 const char *zFunctionName,
4351 int nArg,
4352 int eTextRep,
4353 void *pApp,
4354 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
4355 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
4356 void (*xFinal)(sqlite3_context*)
4358 SQLITE_API int sqlite3_create_function16(
4359 sqlite3 *db,
4360 const void *zFunctionName,
4361 int nArg,
4362 int eTextRep,
4363 void *pApp,
4364 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
4365 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
4366 void (*xFinal)(sqlite3_context*)
4368 SQLITE_API int sqlite3_create_function_v2(
4369 sqlite3 *db,
4370 const char *zFunctionName,
4371 int nArg,
4372 int eTextRep,
4373 void *pApp,
4374 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
4375 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
4376 void (*xFinal)(sqlite3_context*),
4377 void(*xDestroy)(void*)
4381 ** CAPI3REF: Text Encodings
4383 ** These constant define integer codes that represent the various
4384 ** text encodings supported by SQLite.
4386 #define SQLITE_UTF8 1
4387 #define SQLITE_UTF16LE 2
4388 #define SQLITE_UTF16BE 3
4389 #define SQLITE_UTF16 4 /* Use native byte order */
4390 #define SQLITE_ANY 5 /* sqlite3_create_function only */
4391 #define SQLITE_UTF16_ALIGNED 8 /* sqlite3_create_collation only */
4394 ** CAPI3REF: Deprecated Functions
4395 ** DEPRECATED
4397 ** These functions are [deprecated]. In order to maintain
4398 ** backwards compatibility with older code, these functions continue
4399 ** to be supported. However, new applications should avoid
4400 ** the use of these functions. To help encourage people to avoid
4401 ** using these functions, we are not going to tell you what they do.
4403 #ifndef SQLITE_OMIT_DEPRECATED
4404 SQLITE_API SQLITE_DEPRECATED int sqlite3_aggregate_count(sqlite3_context*);
4405 SQLITE_API SQLITE_DEPRECATED int sqlite3_expired(sqlite3_stmt*);
4406 SQLITE_API SQLITE_DEPRECATED int sqlite3_transfer_bindings(sqlite3_stmt*, sqlite3_stmt*);
4407 SQLITE_API SQLITE_DEPRECATED int sqlite3_global_recover(void);
4408 SQLITE_API SQLITE_DEPRECATED void sqlite3_thread_cleanup(void);
4409 SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int64,int),void*,sqlite3_int64);
4410 #endif
4413 ** CAPI3REF: Obtaining SQL Function Parameter Values
4415 ** The C-language implementation of SQL functions and aggregates uses
4416 ** this set of interface routines to access the parameter values on
4417 ** the function or aggregate.
4419 ** The xFunc (for scalar functions) or xStep (for aggregates) parameters
4420 ** to [sqlite3_create_function()] and [sqlite3_create_function16()]
4421 ** define callbacks that implement the SQL functions and aggregates.
4422 ** The 3rd parameter to these callbacks is an array of pointers to
4423 ** [protected sqlite3_value] objects. There is one [sqlite3_value] object for
4424 ** each parameter to the SQL function. These routines are used to
4425 ** extract values from the [sqlite3_value] objects.
4427 ** These routines work only with [protected sqlite3_value] objects.
4428 ** Any attempt to use these routines on an [unprotected sqlite3_value]
4429 ** object results in undefined behavior.
4431 ** ^These routines work just like the corresponding [column access functions]
4432 ** except that these routines take a single [protected sqlite3_value] object
4433 ** pointer instead of a [sqlite3_stmt*] pointer and an integer column number.
4435 ** ^The sqlite3_value_text16() interface extracts a UTF-16 string
4436 ** in the native byte-order of the host machine. ^The
4437 ** sqlite3_value_text16be() and sqlite3_value_text16le() interfaces
4438 ** extract UTF-16 strings as big-endian and little-endian respectively.
4440 ** ^(The sqlite3_value_numeric_type() interface attempts to apply
4441 ** numeric affinity to the value. This means that an attempt is
4442 ** made to convert the value to an integer or floating point. If
4443 ** such a conversion is possible without loss of information (in other
4444 ** words, if the value is a string that looks like a number)
4445 ** then the conversion is performed. Otherwise no conversion occurs.
4446 ** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
4448 ** Please pay particular attention to the fact that the pointer returned
4449 ** from [sqlite3_value_blob()], [sqlite3_value_text()], or
4450 ** [sqlite3_value_text16()] can be invalidated by a subsequent call to
4451 ** [sqlite3_value_bytes()], [sqlite3_value_bytes16()], [sqlite3_value_text()],
4452 ** or [sqlite3_value_text16()].
4454 ** These routines must be called from the same thread as
4455 ** the SQL function that supplied the [sqlite3_value*] parameters.
4457 SQLITE_API const void *sqlite3_value_blob(sqlite3_value*);
4458 SQLITE_API int sqlite3_value_bytes(sqlite3_value*);
4459 SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
4460 SQLITE_API double sqlite3_value_double(sqlite3_value*);
4461 SQLITE_API int sqlite3_value_int(sqlite3_value*);
4462 SQLITE_API sqlite3_int64 sqlite3_value_int64(sqlite3_value*);
4463 SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value*);
4464 SQLITE_API const void *sqlite3_value_text16(sqlite3_value*);
4465 SQLITE_API const void *sqlite3_value_text16le(sqlite3_value*);
4466 SQLITE_API const void *sqlite3_value_text16be(sqlite3_value*);
4467 SQLITE_API int sqlite3_value_type(sqlite3_value*);
4468 SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
4471 ** CAPI3REF: Obtain Aggregate Function Context
4473 ** Implementations of aggregate SQL functions use this
4474 ** routine to allocate memory for storing their state.
4476 ** ^The first time the sqlite3_aggregate_context(C,N) routine is called
4477 ** for a particular aggregate function, SQLite
4478 ** allocates N of memory, zeroes out that memory, and returns a pointer
4479 ** to the new memory. ^On second and subsequent calls to
4480 ** sqlite3_aggregate_context() for the same aggregate function instance,
4481 ** the same buffer is returned. Sqlite3_aggregate_context() is normally
4482 ** called once for each invocation of the xStep callback and then one
4483 ** last time when the xFinal callback is invoked. ^(When no rows match
4484 ** an aggregate query, the xStep() callback of the aggregate function
4485 ** implementation is never called and xFinal() is called exactly once.
4486 ** In those cases, sqlite3_aggregate_context() might be called for the
4487 ** first time from within xFinal().)^
4489 ** ^The sqlite3_aggregate_context(C,N) routine returns a NULL pointer if N is
4490 ** less than or equal to zero or if a memory allocate error occurs.
4492 ** ^(The amount of space allocated by sqlite3_aggregate_context(C,N) is
4493 ** determined by the N parameter on first successful call. Changing the
4494 ** value of N in subsequent call to sqlite3_aggregate_context() within
4495 ** the same aggregate function instance will not resize the memory
4496 ** allocation.)^
4498 ** ^SQLite automatically frees the memory allocated by
4499 ** sqlite3_aggregate_context() when the aggregate query concludes.
4501 ** The first parameter must be a copy of the
4502 ** [sqlite3_context | SQL function context] that is the first parameter
4503 ** to the xStep or xFinal callback routine that implements the aggregate
4504 ** function.
4506 ** This routine must be called from the same thread in which
4507 ** the aggregate SQL function is running.
4509 SQLITE_API void *sqlite3_aggregate_context(sqlite3_context*, int nBytes);
4512 ** CAPI3REF: User Data For Functions
4514 ** ^The sqlite3_user_data() interface returns a copy of
4515 ** the pointer that was the pUserData parameter (the 5th parameter)
4516 ** of the [sqlite3_create_function()]
4517 ** and [sqlite3_create_function16()] routines that originally
4518 ** registered the application defined function.
4520 ** This routine must be called from the same thread in which
4521 ** the application-defined function is running.
4523 SQLITE_API void *sqlite3_user_data(sqlite3_context*);
4526 ** CAPI3REF: Database Connection For Functions
4528 ** ^The sqlite3_context_db_handle() interface returns a copy of
4529 ** the pointer to the [database connection] (the 1st parameter)
4530 ** of the [sqlite3_create_function()]
4531 ** and [sqlite3_create_function16()] routines that originally
4532 ** registered the application defined function.
4534 SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context*);
4537 ** CAPI3REF: Function Auxiliary Data
4539 ** The following two functions may be used by scalar SQL functions to
4540 ** associate metadata with argument values. If the same value is passed to
4541 ** multiple invocations of the same SQL function during query execution, under
4542 ** some circumstances the associated metadata may be preserved. This may
4543 ** be used, for example, to add a regular-expression matching scalar
4544 ** function. The compiled version of the regular expression is stored as
4545 ** metadata associated with the SQL value passed as the regular expression
4546 ** pattern. The compiled regular expression can be reused on multiple
4547 ** invocations of the same function so that the original pattern string
4548 ** does not need to be recompiled on each invocation.
4550 ** ^The sqlite3_get_auxdata() interface returns a pointer to the metadata
4551 ** associated by the sqlite3_set_auxdata() function with the Nth argument
4552 ** value to the application-defined function. ^If no metadata has been ever
4553 ** been set for the Nth argument of the function, or if the corresponding
4554 ** function parameter has changed since the meta-data was set,
4555 ** then sqlite3_get_auxdata() returns a NULL pointer.
4557 ** ^The sqlite3_set_auxdata() interface saves the metadata
4558 ** pointed to by its 3rd parameter as the metadata for the N-th
4559 ** argument of the application-defined function. Subsequent
4560 ** calls to sqlite3_get_auxdata() might return this data, if it has
4561 ** not been destroyed.
4562 ** ^If it is not NULL, SQLite will invoke the destructor
4563 ** function given by the 4th parameter to sqlite3_set_auxdata() on
4564 ** the metadata when the corresponding function parameter changes
4565 ** or when the SQL statement completes, whichever comes first.
4567 ** SQLite is free to call the destructor and drop metadata on any
4568 ** parameter of any function at any time. ^The only guarantee is that
4569 ** the destructor will be called before the metadata is dropped.
4571 ** ^(In practice, metadata is preserved between function calls for
4572 ** expressions that are constant at compile time. This includes literal
4573 ** values and [parameters].)^
4575 ** These routines must be called from the same thread in which
4576 ** the SQL function is running.
4578 SQLITE_API void *sqlite3_get_auxdata(sqlite3_context*, int N);
4579 SQLITE_API void sqlite3_set_auxdata(sqlite3_context*, int N, void*, void (*)(void*));
4583 ** CAPI3REF: Constants Defining Special Destructor Behavior
4585 ** These are special values for the destructor that is passed in as the
4586 ** final argument to routines like [sqlite3_result_blob()]. ^If the destructor
4587 ** argument is SQLITE_STATIC, it means that the content pointer is constant
4588 ** and will never change. It does not need to be destroyed. ^The
4589 ** SQLITE_TRANSIENT value means that the content will likely change in
4590 ** the near future and that SQLite should make its own private copy of
4591 ** the content before returning.
4593 ** The typedef is necessary to work around problems in certain
4594 ** C++ compilers. See ticket #2191.
4596 typedef void (*sqlite3_destructor_type)(void*);
4597 #define SQLITE_STATIC ((sqlite3_destructor_type)0)
4598 #define SQLITE_TRANSIENT ((sqlite3_destructor_type)-1)
4601 ** CAPI3REF: Setting The Result Of An SQL Function
4603 ** These routines are used by the xFunc or xFinal callbacks that
4604 ** implement SQL functions and aggregates. See
4605 ** [sqlite3_create_function()] and [sqlite3_create_function16()]
4606 ** for additional information.
4608 ** These functions work very much like the [parameter binding] family of
4609 ** functions used to bind values to host parameters in prepared statements.
4610 ** Refer to the [SQL parameter] documentation for additional information.
4612 ** ^The sqlite3_result_blob() interface sets the result from
4613 ** an application-defined function to be the BLOB whose content is pointed
4614 ** to by the second parameter and which is N bytes long where N is the
4615 ** third parameter.
4617 ** ^The sqlite3_result_zeroblob() interfaces set the result of
4618 ** the application-defined function to be a BLOB containing all zero
4619 ** bytes and N bytes in size, where N is the value of the 2nd parameter.
4621 ** ^The sqlite3_result_double() interface sets the result from
4622 ** an application-defined function to be a floating point value specified
4623 ** by its 2nd argument.
4625 ** ^The sqlite3_result_error() and sqlite3_result_error16() functions
4626 ** cause the implemented SQL function to throw an exception.
4627 ** ^SQLite uses the string pointed to by the
4628 ** 2nd parameter of sqlite3_result_error() or sqlite3_result_error16()
4629 ** as the text of an error message. ^SQLite interprets the error
4630 ** message string from sqlite3_result_error() as UTF-8. ^SQLite
4631 ** interprets the string from sqlite3_result_error16() as UTF-16 in native
4632 ** byte order. ^If the third parameter to sqlite3_result_error()
4633 ** or sqlite3_result_error16() is negative then SQLite takes as the error
4634 ** message all text up through the first zero character.
4635 ** ^If the third parameter to sqlite3_result_error() or
4636 ** sqlite3_result_error16() is non-negative then SQLite takes that many
4637 ** bytes (not characters) from the 2nd parameter as the error message.
4638 ** ^The sqlite3_result_error() and sqlite3_result_error16()
4639 ** routines make a private copy of the error message text before
4640 ** they return. Hence, the calling function can deallocate or
4641 ** modify the text after they return without harm.
4642 ** ^The sqlite3_result_error_code() function changes the error code
4643 ** returned by SQLite as a result of an error in a function. ^By default,
4644 ** the error code is SQLITE_ERROR. ^A subsequent call to sqlite3_result_error()
4645 ** or sqlite3_result_error16() resets the error code to SQLITE_ERROR.
4647 ** ^The sqlite3_result_toobig() interface causes SQLite to throw an error
4648 ** indicating that a string or BLOB is too long to represent.
4650 ** ^The sqlite3_result_nomem() interface causes SQLite to throw an error
4651 ** indicating that a memory allocation failed.
4653 ** ^The sqlite3_result_int() interface sets the return value
4654 ** of the application-defined function to be the 32-bit signed integer
4655 ** value given in the 2nd argument.
4656 ** ^The sqlite3_result_int64() interface sets the return value
4657 ** of the application-defined function to be the 64-bit signed integer
4658 ** value given in the 2nd argument.
4660 ** ^The sqlite3_result_null() interface sets the return value
4661 ** of the application-defined function to be NULL.
4663 ** ^The sqlite3_result_text(), sqlite3_result_text16(),
4664 ** sqlite3_result_text16le(), and sqlite3_result_text16be() interfaces
4665 ** set the return value of the application-defined function to be
4666 ** a text string which is represented as UTF-8, UTF-16 native byte order,
4667 ** UTF-16 little endian, or UTF-16 big endian, respectively.
4668 ** ^SQLite takes the text result from the application from
4669 ** the 2nd parameter of the sqlite3_result_text* interfaces.
4670 ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
4671 ** is negative, then SQLite takes result text from the 2nd parameter
4672 ** through the first zero character.
4673 ** ^If the 3rd parameter to the sqlite3_result_text* interfaces
4674 ** is non-negative, then as many bytes (not characters) of the text
4675 ** pointed to by the 2nd parameter are taken as the application-defined
4676 ** function result. If the 3rd parameter is non-negative, then it
4677 ** must be the byte offset into the string where the NUL terminator would
4678 ** appear if the string where NUL terminated. If any NUL characters occur
4679 ** in the string at a byte offset that is less than the value of the 3rd
4680 ** parameter, then the resulting string will contain embedded NULs and the
4681 ** result of expressions operating on strings with embedded NULs is undefined.
4682 ** ^If the 4th parameter to the sqlite3_result_text* interfaces
4683 ** or sqlite3_result_blob is a non-NULL pointer, then SQLite calls that
4684 ** function as the destructor on the text or BLOB result when it has
4685 ** finished using that result.
4686 ** ^If the 4th parameter to the sqlite3_result_text* interfaces or to
4687 ** sqlite3_result_blob is the special constant SQLITE_STATIC, then SQLite
4688 ** assumes that the text or BLOB result is in constant space and does not
4689 ** copy the content of the parameter nor call a destructor on the content
4690 ** when it has finished using that result.
4691 ** ^If the 4th parameter to the sqlite3_result_text* interfaces
4692 ** or sqlite3_result_blob is the special constant SQLITE_TRANSIENT
4693 ** then SQLite makes a copy of the result into space obtained from
4694 ** from [sqlite3_malloc()] before it returns.
4696 ** ^The sqlite3_result_value() interface sets the result of
4697 ** the application-defined function to be a copy the
4698 ** [unprotected sqlite3_value] object specified by the 2nd parameter. ^The
4699 ** sqlite3_result_value() interface makes a copy of the [sqlite3_value]
4700 ** so that the [sqlite3_value] specified in the parameter may change or
4701 ** be deallocated after sqlite3_result_value() returns without harm.
4702 ** ^A [protected sqlite3_value] object may always be used where an
4703 ** [unprotected sqlite3_value] object is required, so either
4704 ** kind of [sqlite3_value] object can be used with this interface.
4706 ** If these routines are called from within the different thread
4707 ** than the one containing the application-defined function that received
4708 ** the [sqlite3_context] pointer, the results are undefined.
4710 SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
4711 SQLITE_API void sqlite3_result_double(sqlite3_context*, double);
4712 SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int);
4713 SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int);
4714 SQLITE_API void sqlite3_result_error_toobig(sqlite3_context*);
4715 SQLITE_API void sqlite3_result_error_nomem(sqlite3_context*);
4716 SQLITE_API void sqlite3_result_error_code(sqlite3_context*, int);
4717 SQLITE_API void sqlite3_result_int(sqlite3_context*, int);
4718 SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
4719 SQLITE_API void sqlite3_result_null(sqlite3_context*);
4720 SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
4721 SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
4722 SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
4723 SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
4724 SQLITE_API void sqlite3_result_value(sqlite3_context*, sqlite3_value*);
4725 SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
4728 ** CAPI3REF: Define New Collating Sequences
4730 ** ^These functions add, remove, or modify a [collation] associated
4731 ** with the [database connection] specified as the first argument.
4733 ** ^The name of the collation is a UTF-8 string
4734 ** for sqlite3_create_collation() and sqlite3_create_collation_v2()
4735 ** and a UTF-16 string in native byte order for sqlite3_create_collation16().
4736 ** ^Collation names that compare equal according to [sqlite3_strnicmp()] are
4737 ** considered to be the same name.
4739 ** ^(The third argument (eTextRep) must be one of the constants:
4740 ** <ul>
4741 ** <li> [SQLITE_UTF8],
4742 ** <li> [SQLITE_UTF16LE],
4743 ** <li> [SQLITE_UTF16BE],
4744 ** <li> [SQLITE_UTF16], or
4745 ** <li> [SQLITE_UTF16_ALIGNED].
4746 ** </ul>)^
4747 ** ^The eTextRep argument determines the encoding of strings passed
4748 ** to the collating function callback, xCallback.
4749 ** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep
4750 ** force strings to be UTF16 with native byte order.
4751 ** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin
4752 ** on an even byte address.
4754 ** ^The fourth argument, pArg, is an application data pointer that is passed
4755 ** through as the first argument to the collating function callback.
4757 ** ^The fifth argument, xCallback, is a pointer to the collating function.
4758 ** ^Multiple collating functions can be registered using the same name but
4759 ** with different eTextRep parameters and SQLite will use whichever
4760 ** function requires the least amount of data transformation.
4761 ** ^If the xCallback argument is NULL then the collating function is
4762 ** deleted. ^When all collating functions having the same name are deleted,
4763 ** that collation is no longer usable.
4765 ** ^The collating function callback is invoked with a copy of the pArg
4766 ** application data pointer and with two strings in the encoding specified
4767 ** by the eTextRep argument. The collating function must return an
4768 ** integer that is negative, zero, or positive
4769 ** if the first string is less than, equal to, or greater than the second,
4770 ** respectively. A collating function must always return the same answer
4771 ** given the same inputs. If two or more collating functions are registered
4772 ** to the same collation name (using different eTextRep values) then all
4773 ** must give an equivalent answer when invoked with equivalent strings.
4774 ** The collating function must obey the following properties for all
4775 ** strings A, B, and C:
4777 ** <ol>
4778 ** <li> If A==B then B==A.
4779 ** <li> If A==B and B==C then A==C.
4780 ** <li> If A&lt;B THEN B&gt;A.
4781 ** <li> If A&lt;B and B&lt;C then A&lt;C.
4782 ** </ol>
4784 ** If a collating function fails any of the above constraints and that
4785 ** collating function is registered and used, then the behavior of SQLite
4786 ** is undefined.
4788 ** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation()
4789 ** with the addition that the xDestroy callback is invoked on pArg when
4790 ** the collating function is deleted.
4791 ** ^Collating functions are deleted when they are overridden by later
4792 ** calls to the collation creation functions or when the
4793 ** [database connection] is closed using [sqlite3_close()].
4795 ** ^The xDestroy callback is <u>not</u> called if the
4796 ** sqlite3_create_collation_v2() function fails. Applications that invoke
4797 ** sqlite3_create_collation_v2() with a non-NULL xDestroy argument should
4798 ** check the return code and dispose of the application data pointer
4799 ** themselves rather than expecting SQLite to deal with it for them.
4800 ** This is different from every other SQLite interface. The inconsistency
4801 ** is unfortunate but cannot be changed without breaking backwards
4802 ** compatibility.
4804 ** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
4806 SQLITE_API int sqlite3_create_collation(
4807 sqlite3*,
4808 const char *zName,
4809 int eTextRep,
4810 void *pArg,
4811 int(*xCompare)(void*,int,const void*,int,const void*)
4813 SQLITE_API int sqlite3_create_collation_v2(
4814 sqlite3*,
4815 const char *zName,
4816 int eTextRep,
4817 void *pArg,
4818 int(*xCompare)(void*,int,const void*,int,const void*),
4819 void(*xDestroy)(void*)
4821 SQLITE_API int sqlite3_create_collation16(
4822 sqlite3*,
4823 const void *zName,
4824 int eTextRep,
4825 void *pArg,
4826 int(*xCompare)(void*,int,const void*,int,const void*)
4830 ** CAPI3REF: Collation Needed Callbacks
4832 ** ^To avoid having to register all collation sequences before a database
4833 ** can be used, a single callback function may be registered with the
4834 ** [database connection] to be invoked whenever an undefined collation
4835 ** sequence is required.
4837 ** ^If the function is registered using the sqlite3_collation_needed() API,
4838 ** then it is passed the names of undefined collation sequences as strings
4839 ** encoded in UTF-8. ^If sqlite3_collation_needed16() is used,
4840 ** the names are passed as UTF-16 in machine native byte order.
4841 ** ^A call to either function replaces the existing collation-needed callback.
4843 ** ^(When the callback is invoked, the first argument passed is a copy
4844 ** of the second argument to sqlite3_collation_needed() or
4845 ** sqlite3_collation_needed16(). The second argument is the database
4846 ** connection. The third argument is one of [SQLITE_UTF8], [SQLITE_UTF16BE],
4847 ** or [SQLITE_UTF16LE], indicating the most desirable form of the collation
4848 ** sequence function required. The fourth parameter is the name of the
4849 ** required collation sequence.)^
4851 ** The callback function should register the desired collation using
4852 ** [sqlite3_create_collation()], [sqlite3_create_collation16()], or
4853 ** [sqlite3_create_collation_v2()].
4855 SQLITE_API int sqlite3_collation_needed(
4856 sqlite3*,
4857 void*,
4858 void(*)(void*,sqlite3*,int eTextRep,const char*)
4860 SQLITE_API int sqlite3_collation_needed16(
4861 sqlite3*,
4862 void*,
4863 void(*)(void*,sqlite3*,int eTextRep,const void*)
4866 #ifdef SQLITE_HAS_CODEC
4868 ** Specify the key for an encrypted database. This routine should be
4869 ** called right after sqlite3_open().
4871 ** The code to implement this API is not available in the public release
4872 ** of SQLite.
4874 SQLITE_API int sqlite3_key(
4875 sqlite3 *db, /* Database to be rekeyed */
4876 const void *pKey, int nKey /* The key */
4880 ** Change the key on an open database. If the current database is not
4881 ** encrypted, this routine will encrypt it. If pNew==0 or nNew==0, the
4882 ** database is decrypted.
4884 ** The code to implement this API is not available in the public release
4885 ** of SQLite.
4887 SQLITE_API int sqlite3_rekey(
4888 sqlite3 *db, /* Database to be rekeyed */
4889 const void *pKey, int nKey /* The new key */
4893 ** Specify the activation key for a SEE database. Unless
4894 ** activated, none of the SEE routines will work.
4896 SQLITE_API void sqlite3_activate_see(
4897 const char *zPassPhrase /* Activation phrase */
4899 #endif
4901 #ifdef SQLITE_ENABLE_CEROD
4903 ** Specify the activation key for a CEROD database. Unless
4904 ** activated, none of the CEROD routines will work.
4906 SQLITE_API void sqlite3_activate_cerod(
4907 const char *zPassPhrase /* Activation phrase */
4909 #endif
4912 ** CAPI3REF: Suspend Execution For A Short Time
4914 ** The sqlite3_sleep() function causes the current thread to suspend execution
4915 ** for at least a number of milliseconds specified in its parameter.
4917 ** If the operating system does not support sleep requests with
4918 ** millisecond time resolution, then the time will be rounded up to
4919 ** the nearest second. The number of milliseconds of sleep actually
4920 ** requested from the operating system is returned.
4922 ** ^SQLite implements this interface by calling the xSleep()
4923 ** method of the default [sqlite3_vfs] object. If the xSleep() method
4924 ** of the default VFS is not implemented correctly, or not implemented at
4925 ** all, then the behavior of sqlite3_sleep() may deviate from the description
4926 ** in the previous paragraphs.
4928 SQLITE_API int sqlite3_sleep(int);
4931 ** CAPI3REF: Name Of The Folder Holding Temporary Files
4933 ** ^(If this global variable is made to point to a string which is
4934 ** the name of a folder (a.k.a. directory), then all temporary files
4935 ** created by SQLite when using a built-in [sqlite3_vfs | VFS]
4936 ** will be placed in that directory.)^ ^If this variable
4937 ** is a NULL pointer, then SQLite performs a search for an appropriate
4938 ** temporary file directory.
4940 ** It is not safe to read or modify this variable in more than one
4941 ** thread at a time. It is not safe to read or modify this variable
4942 ** if a [database connection] is being used at the same time in a separate
4943 ** thread.
4944 ** It is intended that this variable be set once
4945 ** as part of process initialization and before any SQLite interface
4946 ** routines have been called and that this variable remain unchanged
4947 ** thereafter.
4949 ** ^The [temp_store_directory pragma] may modify this variable and cause
4950 ** it to point to memory obtained from [sqlite3_malloc]. ^Furthermore,
4951 ** the [temp_store_directory pragma] always assumes that any string
4952 ** that this variable points to is held in memory obtained from
4953 ** [sqlite3_malloc] and the pragma may attempt to free that memory
4954 ** using [sqlite3_free].
4955 ** Hence, if this variable is modified directly, either it should be
4956 ** made NULL or made to point to memory obtained from [sqlite3_malloc]
4957 ** or else the use of the [temp_store_directory pragma] should be avoided.
4959 SQLITE_API char *sqlite3_temp_directory;
4962 ** CAPI3REF: Test For Auto-Commit Mode
4963 ** KEYWORDS: {autocommit mode}
4965 ** ^The sqlite3_get_autocommit() interface returns non-zero or
4966 ** zero if the given database connection is or is not in autocommit mode,
4967 ** respectively. ^Autocommit mode is on by default.
4968 ** ^Autocommit mode is disabled by a [BEGIN] statement.
4969 ** ^Autocommit mode is re-enabled by a [COMMIT] or [ROLLBACK].
4971 ** If certain kinds of errors occur on a statement within a multi-statement
4972 ** transaction (errors including [SQLITE_FULL], [SQLITE_IOERR],
4973 ** [SQLITE_NOMEM], [SQLITE_BUSY], and [SQLITE_INTERRUPT]) then the
4974 ** transaction might be rolled back automatically. The only way to
4975 ** find out whether SQLite automatically rolled back the transaction after
4976 ** an error is to use this function.
4978 ** If another thread changes the autocommit status of the database
4979 ** connection while this routine is running, then the return value
4980 ** is undefined.
4982 SQLITE_API int sqlite3_get_autocommit(sqlite3*);
4985 ** CAPI3REF: Find The Database Handle Of A Prepared Statement
4987 ** ^The sqlite3_db_handle interface returns the [database connection] handle
4988 ** to which a [prepared statement] belongs. ^The [database connection]
4989 ** returned by sqlite3_db_handle is the same [database connection]
4990 ** that was the first argument
4991 ** to the [sqlite3_prepare_v2()] call (or its variants) that was used to
4992 ** create the statement in the first place.
4994 SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt*);
4997 ** CAPI3REF: Return The Filename For A Database Connection
4999 ** ^The sqlite3_db_filename(D,N) interface returns a pointer to a filename
5000 ** associated with database N of connection D. ^The main database file
5001 ** has the name "main". If there is no attached database N on the database
5002 ** connection D, or if database N is a temporary or in-memory database, then
5003 ** a NULL pointer is returned.
5005 ** ^The filename returned by this function is the output of the
5006 ** xFullPathname method of the [VFS]. ^In other words, the filename
5007 ** will be an absolute pathname, even if the filename used
5008 ** to open the database originally was a URI or relative pathname.
5010 SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName);
5013 ** CAPI3REF: Find the next prepared statement
5015 ** ^This interface returns a pointer to the next [prepared statement] after
5016 ** pStmt associated with the [database connection] pDb. ^If pStmt is NULL
5017 ** then this interface returns a pointer to the first prepared statement
5018 ** associated with the database connection pDb. ^If no prepared statement
5019 ** satisfies the conditions of this routine, it returns NULL.
5021 ** The [database connection] pointer D in a call to
5022 ** [sqlite3_next_stmt(D,S)] must refer to an open database
5023 ** connection and in particular must not be a NULL pointer.
5025 SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt);
5028 ** CAPI3REF: Commit And Rollback Notification Callbacks
5030 ** ^The sqlite3_commit_hook() interface registers a callback
5031 ** function to be invoked whenever a transaction is [COMMIT | committed].
5032 ** ^Any callback set by a previous call to sqlite3_commit_hook()
5033 ** for the same database connection is overridden.
5034 ** ^The sqlite3_rollback_hook() interface registers a callback
5035 ** function to be invoked whenever a transaction is [ROLLBACK | rolled back].
5036 ** ^Any callback set by a previous call to sqlite3_rollback_hook()
5037 ** for the same database connection is overridden.
5038 ** ^The pArg argument is passed through to the callback.
5039 ** ^If the callback on a commit hook function returns non-zero,
5040 ** then the commit is converted into a rollback.
5042 ** ^The sqlite3_commit_hook(D,C,P) and sqlite3_rollback_hook(D,C,P) functions
5043 ** return the P argument from the previous call of the same function
5044 ** on the same [database connection] D, or NULL for
5045 ** the first call for each function on D.
5047 ** The commit and rollback hook callbacks are not reentrant.
5048 ** The callback implementation must not do anything that will modify
5049 ** the database connection that invoked the callback. Any actions
5050 ** to modify the database connection must be deferred until after the
5051 ** completion of the [sqlite3_step()] call that triggered the commit
5052 ** or rollback hook in the first place.
5053 ** Note that running any other SQL statements, including SELECT statements,
5054 ** or merely calling [sqlite3_prepare_v2()] and [sqlite3_step()] will modify
5055 ** the database connections for the meaning of "modify" in this paragraph.
5057 ** ^Registering a NULL function disables the callback.
5059 ** ^When the commit hook callback routine returns zero, the [COMMIT]
5060 ** operation is allowed to continue normally. ^If the commit hook
5061 ** returns non-zero, then the [COMMIT] is converted into a [ROLLBACK].
5062 ** ^The rollback hook is invoked on a rollback that results from a commit
5063 ** hook returning non-zero, just as it would be with any other rollback.
5065 ** ^For the purposes of this API, a transaction is said to have been
5066 ** rolled back if an explicit "ROLLBACK" statement is executed, or
5067 ** an error or constraint causes an implicit rollback to occur.
5068 ** ^The rollback callback is not invoked if a transaction is
5069 ** automatically rolled back because the database connection is closed.
5071 ** See also the [sqlite3_update_hook()] interface.
5073 SQLITE_API void *sqlite3_commit_hook(sqlite3*, int(*)(void*), void*);
5074 SQLITE_API void *sqlite3_rollback_hook(sqlite3*, void(*)(void *), void*);
5077 ** CAPI3REF: Data Change Notification Callbacks
5079 ** ^The sqlite3_update_hook() interface registers a callback function
5080 ** with the [database connection] identified by the first argument
5081 ** to be invoked whenever a row is updated, inserted or deleted.
5082 ** ^Any callback set by a previous call to this function
5083 ** for the same database connection is overridden.
5085 ** ^The second argument is a pointer to the function to invoke when a
5086 ** row is updated, inserted or deleted.
5087 ** ^The first argument to the callback is a copy of the third argument
5088 ** to sqlite3_update_hook().
5089 ** ^The second callback argument is one of [SQLITE_INSERT], [SQLITE_DELETE],
5090 ** or [SQLITE_UPDATE], depending on the operation that caused the callback
5091 ** to be invoked.
5092 ** ^The third and fourth arguments to the callback contain pointers to the
5093 ** database and table name containing the affected row.
5094 ** ^The final callback parameter is the [rowid] of the row.
5095 ** ^In the case of an update, this is the [rowid] after the update takes place.
5097 ** ^(The update hook is not invoked when internal system tables are
5098 ** modified (i.e. sqlite_master and sqlite_sequence).)^
5100 ** ^In the current implementation, the update hook
5101 ** is not invoked when duplication rows are deleted because of an
5102 ** [ON CONFLICT | ON CONFLICT REPLACE] clause. ^Nor is the update hook
5103 ** invoked when rows are deleted using the [truncate optimization].
5104 ** The exceptions defined in this paragraph might change in a future
5105 ** release of SQLite.
5107 ** The update hook implementation must not do anything that will modify
5108 ** the database connection that invoked the update hook. Any actions
5109 ** to modify the database connection must be deferred until after the
5110 ** completion of the [sqlite3_step()] call that triggered the update hook.
5111 ** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
5112 ** database connections for the meaning of "modify" in this paragraph.
5114 ** ^The sqlite3_update_hook(D,C,P) function
5115 ** returns the P argument from the previous call
5116 ** on the same [database connection] D, or NULL for
5117 ** the first call on D.
5119 ** See also the [sqlite3_commit_hook()] and [sqlite3_rollback_hook()]
5120 ** interfaces.
5122 SQLITE_API void *sqlite3_update_hook(
5123 sqlite3*,
5124 void(*)(void *,int ,char const *,char const *,sqlite3_int64),
5125 void*
5129 ** CAPI3REF: Enable Or Disable Shared Pager Cache
5130 ** KEYWORDS: {shared cache}
5132 ** ^(This routine enables or disables the sharing of the database cache
5133 ** and schema data structures between [database connection | connections]
5134 ** to the same database. Sharing is enabled if the argument is true
5135 ** and disabled if the argument is false.)^
5137 ** ^Cache sharing is enabled and disabled for an entire process.
5138 ** This is a change as of SQLite version 3.5.0. In prior versions of SQLite,
5139 ** sharing was enabled or disabled for each thread separately.
5141 ** ^(The cache sharing mode set by this interface effects all subsequent
5142 ** calls to [sqlite3_open()], [sqlite3_open_v2()], and [sqlite3_open16()].
5143 ** Existing database connections continue use the sharing mode
5144 ** that was in effect at the time they were opened.)^
5146 ** ^(This routine returns [SQLITE_OK] if shared cache was enabled or disabled
5147 ** successfully. An [error code] is returned otherwise.)^
5149 ** ^Shared cache is disabled by default. But this might change in
5150 ** future releases of SQLite. Applications that care about shared
5151 ** cache setting should set it explicitly.
5153 ** See Also: [SQLite Shared-Cache Mode]
5155 SQLITE_API int sqlite3_enable_shared_cache(int);
5158 ** CAPI3REF: Attempt To Free Heap Memory
5160 ** ^The sqlite3_release_memory() interface attempts to free N bytes
5161 ** of heap memory by deallocating non-essential memory allocations
5162 ** held by the database library. Memory used to cache database
5163 ** pages to improve performance is an example of non-essential memory.
5164 ** ^sqlite3_release_memory() returns the number of bytes actually freed,
5165 ** which might be more or less than the amount requested.
5166 ** ^The sqlite3_release_memory() routine is a no-op returning zero
5167 ** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT].
5169 ** See also: [sqlite3_db_release_memory()]
5171 SQLITE_API int sqlite3_release_memory(int);
5174 ** CAPI3REF: Free Memory Used By A Database Connection
5176 ** ^The sqlite3_db_release_memory(D) interface attempts to free as much heap
5177 ** memory as possible from database connection D. Unlike the
5178 ** [sqlite3_release_memory()] interface, this interface is effect even
5179 ** when then [SQLITE_ENABLE_MEMORY_MANAGEMENT] compile-time option is
5180 ** omitted.
5182 ** See also: [sqlite3_release_memory()]
5184 SQLITE_API int sqlite3_db_release_memory(sqlite3*);
5187 ** CAPI3REF: Impose A Limit On Heap Size
5189 ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
5190 ** soft limit on the amount of heap memory that may be allocated by SQLite.
5191 ** ^SQLite strives to keep heap memory utilization below the soft heap
5192 ** limit by reducing the number of pages held in the page cache
5193 ** as heap memory usages approaches the limit.
5194 ** ^The soft heap limit is "soft" because even though SQLite strives to stay
5195 ** below the limit, it will exceed the limit rather than generate
5196 ** an [SQLITE_NOMEM] error. In other words, the soft heap limit
5197 ** is advisory only.
5199 ** ^The return value from sqlite3_soft_heap_limit64() is the size of
5200 ** the soft heap limit prior to the call, or negative in the case of an
5201 ** error. ^If the argument N is negative
5202 ** then no change is made to the soft heap limit. Hence, the current
5203 ** size of the soft heap limit can be determined by invoking
5204 ** sqlite3_soft_heap_limit64() with a negative argument.
5206 ** ^If the argument N is zero then the soft heap limit is disabled.
5208 ** ^(The soft heap limit is not enforced in the current implementation
5209 ** if one or more of following conditions are true:
5211 ** <ul>
5212 ** <li> The soft heap limit is set to zero.
5213 ** <li> Memory accounting is disabled using a combination of the
5214 ** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and
5215 ** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option.
5216 ** <li> An alternative page cache implementation is specified using
5217 ** [sqlite3_config]([SQLITE_CONFIG_PCACHE2],...).
5218 ** <li> The page cache allocates from its own memory pool supplied
5219 ** by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than
5220 ** from the heap.
5221 ** </ul>)^
5223 ** Beginning with SQLite version 3.7.3, the soft heap limit is enforced
5224 ** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT]
5225 ** compile-time option is invoked. With [SQLITE_ENABLE_MEMORY_MANAGEMENT],
5226 ** the soft heap limit is enforced on every memory allocation. Without
5227 ** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced
5228 ** when memory is allocated by the page cache. Testing suggests that because
5229 ** the page cache is the predominate memory user in SQLite, most
5230 ** applications will achieve adequate soft heap limit enforcement without
5231 ** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT].
5233 ** The circumstances under which SQLite will enforce the soft heap limit may
5234 ** changes in future releases of SQLite.
5236 SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
5239 ** CAPI3REF: Deprecated Soft Heap Limit Interface
5240 ** DEPRECATED
5242 ** This is a deprecated version of the [sqlite3_soft_heap_limit64()]
5243 ** interface. This routine is provided for historical compatibility
5244 ** only. All new applications should use the
5245 ** [sqlite3_soft_heap_limit64()] interface rather than this one.
5247 SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
5251 ** CAPI3REF: Extract Metadata About A Column Of A Table
5253 ** ^This routine returns metadata about a specific column of a specific
5254 ** database table accessible using the [database connection] handle
5255 ** passed as the first function argument.
5257 ** ^The column is identified by the second, third and fourth parameters to
5258 ** this function. ^The second parameter is either the name of the database
5259 ** (i.e. "main", "temp", or an attached database) containing the specified
5260 ** table or NULL. ^If it is NULL, then all attached databases are searched
5261 ** for the table using the same algorithm used by the database engine to
5262 ** resolve unqualified table references.
5264 ** ^The third and fourth parameters to this function are the table and column
5265 ** name of the desired column, respectively. Neither of these parameters
5266 ** may be NULL.
5268 ** ^Metadata is returned by writing to the memory locations passed as the 5th
5269 ** and subsequent parameters to this function. ^Any of these arguments may be
5270 ** NULL, in which case the corresponding element of metadata is omitted.
5272 ** ^(<blockquote>
5273 ** <table border="1">
5274 ** <tr><th> Parameter <th> Output<br>Type <th> Description
5276 ** <tr><td> 5th <td> const char* <td> Data type
5277 ** <tr><td> 6th <td> const char* <td> Name of default collation sequence
5278 ** <tr><td> 7th <td> int <td> True if column has a NOT NULL constraint
5279 ** <tr><td> 8th <td> int <td> True if column is part of the PRIMARY KEY
5280 ** <tr><td> 9th <td> int <td> True if column is [AUTOINCREMENT]
5281 ** </table>
5282 ** </blockquote>)^
5284 ** ^The memory pointed to by the character pointers returned for the
5285 ** declaration type and collation sequence is valid only until the next
5286 ** call to any SQLite API function.
5288 ** ^If the specified table is actually a view, an [error code] is returned.
5290 ** ^If the specified column is "rowid", "oid" or "_rowid_" and an
5291 ** [INTEGER PRIMARY KEY] column has been explicitly declared, then the output
5292 ** parameters are set for the explicitly declared column. ^(If there is no
5293 ** explicitly declared [INTEGER PRIMARY KEY] column, then the output
5294 ** parameters are set as follows:
5296 ** <pre>
5297 ** data type: "INTEGER"
5298 ** collation sequence: "BINARY"
5299 ** not null: 0
5300 ** primary key: 1
5301 ** auto increment: 0
5302 ** </pre>)^
5304 ** ^(This function may load one or more schemas from database files. If an
5305 ** error occurs during this process, or if the requested table or column
5306 ** cannot be found, an [error code] is returned and an error message left
5307 ** in the [database connection] (to be retrieved using sqlite3_errmsg()).)^
5309 ** ^This API is only available if the library was compiled with the
5310 ** [SQLITE_ENABLE_COLUMN_METADATA] C-preprocessor symbol defined.
5312 SQLITE_API int sqlite3_table_column_metadata(
5313 sqlite3 *db, /* Connection handle */
5314 const char *zDbName, /* Database name or NULL */
5315 const char *zTableName, /* Table name */
5316 const char *zColumnName, /* Column name */
5317 char const **pzDataType, /* OUTPUT: Declared data type */
5318 char const **pzCollSeq, /* OUTPUT: Collation sequence name */
5319 int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */
5320 int *pPrimaryKey, /* OUTPUT: True if column part of PK */
5321 int *pAutoinc /* OUTPUT: True if column is auto-increment */
5325 ** CAPI3REF: Load An Extension
5327 ** ^This interface loads an SQLite extension library from the named file.
5329 ** ^The sqlite3_load_extension() interface attempts to load an
5330 ** SQLite extension library contained in the file zFile.
5332 ** ^The entry point is zProc.
5333 ** ^zProc may be 0, in which case the name of the entry point
5334 ** defaults to "sqlite3_extension_init".
5335 ** ^The sqlite3_load_extension() interface returns
5336 ** [SQLITE_OK] on success and [SQLITE_ERROR] if something goes wrong.
5337 ** ^If an error occurs and pzErrMsg is not 0, then the
5338 ** [sqlite3_load_extension()] interface shall attempt to
5339 ** fill *pzErrMsg with error message text stored in memory
5340 ** obtained from [sqlite3_malloc()]. The calling function
5341 ** should free this memory by calling [sqlite3_free()].
5343 ** ^Extension loading must be enabled using
5344 ** [sqlite3_enable_load_extension()] prior to calling this API,
5345 ** otherwise an error will be returned.
5347 ** See also the [load_extension() SQL function].
5349 SQLITE_API int sqlite3_load_extension(
5350 sqlite3 *db, /* Load the extension into this database connection */
5351 const char *zFile, /* Name of the shared library containing extension */
5352 const char *zProc, /* Entry point. Derived from zFile if 0 */
5353 char **pzErrMsg /* Put error message here if not 0 */
5357 ** CAPI3REF: Enable Or Disable Extension Loading
5359 ** ^So as not to open security holes in older applications that are
5360 ** unprepared to deal with extension loading, and as a means of disabling
5361 ** extension loading while evaluating user-entered SQL, the following API
5362 ** is provided to turn the [sqlite3_load_extension()] mechanism on and off.
5364 ** ^Extension loading is off by default. See ticket #1863.
5365 ** ^Call the sqlite3_enable_load_extension() routine with onoff==1
5366 ** to turn extension loading on and call it with onoff==0 to turn
5367 ** it back off again.
5369 SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
5372 ** CAPI3REF: Automatically Load Statically Linked Extensions
5374 ** ^This interface causes the xEntryPoint() function to be invoked for
5375 ** each new [database connection] that is created. The idea here is that
5376 ** xEntryPoint() is the entry point for a statically linked SQLite extension
5377 ** that is to be automatically loaded into all new database connections.
5379 ** ^(Even though the function prototype shows that xEntryPoint() takes
5380 ** no arguments and returns void, SQLite invokes xEntryPoint() with three
5381 ** arguments and expects and integer result as if the signature of the
5382 ** entry point where as follows:
5384 ** <blockquote><pre>
5385 ** &nbsp; int xEntryPoint(
5386 ** &nbsp; sqlite3 *db,
5387 ** &nbsp; const char **pzErrMsg,
5388 ** &nbsp; const struct sqlite3_api_routines *pThunk
5389 ** &nbsp; );
5390 ** </pre></blockquote>)^
5392 ** If the xEntryPoint routine encounters an error, it should make *pzErrMsg
5393 ** point to an appropriate error message (obtained from [sqlite3_mprintf()])
5394 ** and return an appropriate [error code]. ^SQLite ensures that *pzErrMsg
5395 ** is NULL before calling the xEntryPoint(). ^SQLite will invoke
5396 ** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns. ^If any
5397 ** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()],
5398 ** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail.
5400 ** ^Calling sqlite3_auto_extension(X) with an entry point X that is already
5401 ** on the list of automatic extensions is a harmless no-op. ^No entry point
5402 ** will be called more than once for each database connection that is opened.
5404 ** See also: [sqlite3_reset_auto_extension()].
5406 SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void));
5409 ** CAPI3REF: Reset Automatic Extension Loading
5411 ** ^This interface disables all automatic extensions previously
5412 ** registered using [sqlite3_auto_extension()].
5414 SQLITE_API void sqlite3_reset_auto_extension(void);
5417 ** The interface to the virtual-table mechanism is currently considered
5418 ** to be experimental. The interface might change in incompatible ways.
5419 ** If this is a problem for you, do not use the interface at this time.
5421 ** When the virtual-table mechanism stabilizes, we will declare the
5422 ** interface fixed, support it indefinitely, and remove this comment.
5426 ** Structures used by the virtual table interface
5428 typedef struct sqlite3_vtab sqlite3_vtab;
5429 typedef struct sqlite3_index_info sqlite3_index_info;
5430 typedef struct sqlite3_vtab_cursor sqlite3_vtab_cursor;
5431 typedef struct sqlite3_module sqlite3_module;
5434 ** CAPI3REF: Virtual Table Object
5435 ** KEYWORDS: sqlite3_module {virtual table module}
5437 ** This structure, sometimes called a "virtual table module",
5438 ** defines the implementation of a [virtual tables].
5439 ** This structure consists mostly of methods for the module.
5441 ** ^A virtual table module is created by filling in a persistent
5442 ** instance of this structure and passing a pointer to that instance
5443 ** to [sqlite3_create_module()] or [sqlite3_create_module_v2()].
5444 ** ^The registration remains valid until it is replaced by a different
5445 ** module or until the [database connection] closes. The content
5446 ** of this structure must not change while it is registered with
5447 ** any database connection.
5449 struct sqlite3_module {
5450 int iVersion;
5451 int (*xCreate)(sqlite3*, void *pAux,
5452 int argc, const char *const*argv,
5453 sqlite3_vtab **ppVTab, char**);
5454 int (*xConnect)(sqlite3*, void *pAux,
5455 int argc, const char *const*argv,
5456 sqlite3_vtab **ppVTab, char**);
5457 int (*xBestIndex)(sqlite3_vtab *pVTab, sqlite3_index_info*);
5458 int (*xDisconnect)(sqlite3_vtab *pVTab);
5459 int (*xDestroy)(sqlite3_vtab *pVTab);
5460 int (*xOpen)(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor);
5461 int (*xClose)(sqlite3_vtab_cursor*);
5462 int (*xFilter)(sqlite3_vtab_cursor*, int idxNum, const char *idxStr,
5463 int argc, sqlite3_value **argv);
5464 int (*xNext)(sqlite3_vtab_cursor*);
5465 int (*xEof)(sqlite3_vtab_cursor*);
5466 int (*xColumn)(sqlite3_vtab_cursor*, sqlite3_context*, int);
5467 int (*xRowid)(sqlite3_vtab_cursor*, sqlite3_int64 *pRowid);
5468 int (*xUpdate)(sqlite3_vtab *, int, sqlite3_value **, sqlite3_int64 *);
5469 int (*xBegin)(sqlite3_vtab *pVTab);
5470 int (*xSync)(sqlite3_vtab *pVTab);
5471 int (*xCommit)(sqlite3_vtab *pVTab);
5472 int (*xRollback)(sqlite3_vtab *pVTab);
5473 int (*xFindFunction)(sqlite3_vtab *pVtab, int nArg, const char *zName,
5474 void (**pxFunc)(sqlite3_context*,int,sqlite3_value**),
5475 void **ppArg);
5476 int (*xRename)(sqlite3_vtab *pVtab, const char *zNew);
5477 /* The methods above are in version 1 of the sqlite_module object. Those
5478 ** below are for version 2 and greater. */
5479 int (*xSavepoint)(sqlite3_vtab *pVTab, int);
5480 int (*xRelease)(sqlite3_vtab *pVTab, int);
5481 int (*xRollbackTo)(sqlite3_vtab *pVTab, int);
5485 ** CAPI3REF: Virtual Table Indexing Information
5486 ** KEYWORDS: sqlite3_index_info
5488 ** The sqlite3_index_info structure and its substructures is used as part
5489 ** of the [virtual table] interface to
5490 ** pass information into and receive the reply from the [xBestIndex]
5491 ** method of a [virtual table module]. The fields under **Inputs** are the
5492 ** inputs to xBestIndex and are read-only. xBestIndex inserts its
5493 ** results into the **Outputs** fields.
5495 ** ^(The aConstraint[] array records WHERE clause constraints of the form:
5497 ** <blockquote>column OP expr</blockquote>
5499 ** where OP is =, &lt;, &lt;=, &gt;, or &gt;=.)^ ^(The particular operator is
5500 ** stored in aConstraint[].op using one of the
5501 ** [SQLITE_INDEX_CONSTRAINT_EQ | SQLITE_INDEX_CONSTRAINT_ values].)^
5502 ** ^(The index of the column is stored in
5503 ** aConstraint[].iColumn.)^ ^(aConstraint[].usable is TRUE if the
5504 ** expr on the right-hand side can be evaluated (and thus the constraint
5505 ** is usable) and false if it cannot.)^
5507 ** ^The optimizer automatically inverts terms of the form "expr OP column"
5508 ** and makes other simplifications to the WHERE clause in an attempt to
5509 ** get as many WHERE clause terms into the form shown above as possible.
5510 ** ^The aConstraint[] array only reports WHERE clause terms that are
5511 ** relevant to the particular virtual table being queried.
5513 ** ^Information about the ORDER BY clause is stored in aOrderBy[].
5514 ** ^Each term of aOrderBy records a column of the ORDER BY clause.
5516 ** The [xBestIndex] method must fill aConstraintUsage[] with information
5517 ** about what parameters to pass to xFilter. ^If argvIndex>0 then
5518 ** the right-hand side of the corresponding aConstraint[] is evaluated
5519 ** and becomes the argvIndex-th entry in argv. ^(If aConstraintUsage[].omit
5520 ** is true, then the constraint is assumed to be fully handled by the
5521 ** virtual table and is not checked again by SQLite.)^
5523 ** ^The idxNum and idxPtr values are recorded and passed into the
5524 ** [xFilter] method.
5525 ** ^[sqlite3_free()] is used to free idxPtr if and only if
5526 ** needToFreeIdxPtr is true.
5528 ** ^The orderByConsumed means that output from [xFilter]/[xNext] will occur in
5529 ** the correct order to satisfy the ORDER BY clause so that no separate
5530 ** sorting step is required.
5532 ** ^The estimatedCost value is an estimate of the cost of doing the
5533 ** particular lookup. A full scan of a table with N entries should have
5534 ** a cost of N. A binary search of a table of N entries should have a
5535 ** cost of approximately log(N).
5537 struct sqlite3_index_info {
5538 /* Inputs */
5539 int nConstraint; /* Number of entries in aConstraint */
5540 struct sqlite3_index_constraint {
5541 int iColumn; /* Column on left-hand side of constraint */
5542 unsigned char op; /* Constraint operator */
5543 unsigned char usable; /* True if this constraint is usable */
5544 int iTermOffset; /* Used internally - xBestIndex should ignore */
5545 } *aConstraint; /* Table of WHERE clause constraints */
5546 int nOrderBy; /* Number of terms in the ORDER BY clause */
5547 struct sqlite3_index_orderby {
5548 int iColumn; /* Column number */
5549 unsigned char desc; /* True for DESC. False for ASC. */
5550 } *aOrderBy; /* The ORDER BY clause */
5551 /* Outputs */
5552 struct sqlite3_index_constraint_usage {
5553 int argvIndex; /* if >0, constraint is part of argv to xFilter */
5554 unsigned char omit; /* Do not code a test for this constraint */
5555 } *aConstraintUsage;
5556 int idxNum; /* Number used to identify the index */
5557 char *idxStr; /* String, possibly obtained from sqlite3_malloc */
5558 int needToFreeIdxStr; /* Free idxStr using sqlite3_free() if true */
5559 int orderByConsumed; /* True if output is already ordered */
5560 double estimatedCost; /* Estimated cost of using this index */
5564 ** CAPI3REF: Virtual Table Constraint Operator Codes
5566 ** These macros defined the allowed values for the
5567 ** [sqlite3_index_info].aConstraint[].op field. Each value represents
5568 ** an operator that is part of a constraint term in the wHERE clause of
5569 ** a query that uses a [virtual table].
5571 #define SQLITE_INDEX_CONSTRAINT_EQ 2
5572 #define SQLITE_INDEX_CONSTRAINT_GT 4
5573 #define SQLITE_INDEX_CONSTRAINT_LE 8
5574 #define SQLITE_INDEX_CONSTRAINT_LT 16
5575 #define SQLITE_INDEX_CONSTRAINT_GE 32
5576 #define SQLITE_INDEX_CONSTRAINT_MATCH 64
5579 ** CAPI3REF: Register A Virtual Table Implementation
5581 ** ^These routines are used to register a new [virtual table module] name.
5582 ** ^Module names must be registered before
5583 ** creating a new [virtual table] using the module and before using a
5584 ** preexisting [virtual table] for the module.
5586 ** ^The module name is registered on the [database connection] specified
5587 ** by the first parameter. ^The name of the module is given by the
5588 ** second parameter. ^The third parameter is a pointer to
5589 ** the implementation of the [virtual table module]. ^The fourth
5590 ** parameter is an arbitrary client data pointer that is passed through
5591 ** into the [xCreate] and [xConnect] methods of the virtual table module
5592 ** when a new virtual table is be being created or reinitialized.
5594 ** ^The sqlite3_create_module_v2() interface has a fifth parameter which
5595 ** is a pointer to a destructor for the pClientData. ^SQLite will
5596 ** invoke the destructor function (if it is not NULL) when SQLite
5597 ** no longer needs the pClientData pointer. ^The destructor will also
5598 ** be invoked if the call to sqlite3_create_module_v2() fails.
5599 ** ^The sqlite3_create_module()
5600 ** interface is equivalent to sqlite3_create_module_v2() with a NULL
5601 ** destructor.
5603 SQLITE_API int sqlite3_create_module(
5604 sqlite3 *db, /* SQLite connection to register module with */
5605 const char *zName, /* Name of the module */
5606 const sqlite3_module *p, /* Methods for the module */
5607 void *pClientData /* Client data for xCreate/xConnect */
5609 SQLITE_API int sqlite3_create_module_v2(
5610 sqlite3 *db, /* SQLite connection to register module with */
5611 const char *zName, /* Name of the module */
5612 const sqlite3_module *p, /* Methods for the module */
5613 void *pClientData, /* Client data for xCreate/xConnect */
5614 void(*xDestroy)(void*) /* Module destructor function */
5618 ** CAPI3REF: Virtual Table Instance Object
5619 ** KEYWORDS: sqlite3_vtab
5621 ** Every [virtual table module] implementation uses a subclass
5622 ** of this object to describe a particular instance
5623 ** of the [virtual table]. Each subclass will
5624 ** be tailored to the specific needs of the module implementation.
5625 ** The purpose of this superclass is to define certain fields that are
5626 ** common to all module implementations.
5628 ** ^Virtual tables methods can set an error message by assigning a
5629 ** string obtained from [sqlite3_mprintf()] to zErrMsg. The method should
5630 ** take care that any prior string is freed by a call to [sqlite3_free()]
5631 ** prior to assigning a new string to zErrMsg. ^After the error message
5632 ** is delivered up to the client application, the string will be automatically
5633 ** freed by sqlite3_free() and the zErrMsg field will be zeroed.
5635 struct sqlite3_vtab {
5636 const sqlite3_module *pModule; /* The module for this virtual table */
5637 int nRef; /* NO LONGER USED */
5638 char *zErrMsg; /* Error message from sqlite3_mprintf() */
5639 /* Virtual table implementations will typically add additional fields */
5643 ** CAPI3REF: Virtual Table Cursor Object
5644 ** KEYWORDS: sqlite3_vtab_cursor {virtual table cursor}
5646 ** Every [virtual table module] implementation uses a subclass of the
5647 ** following structure to describe cursors that point into the
5648 ** [virtual table] and are used
5649 ** to loop through the virtual table. Cursors are created using the
5650 ** [sqlite3_module.xOpen | xOpen] method of the module and are destroyed
5651 ** by the [sqlite3_module.xClose | xClose] method. Cursors are used
5652 ** by the [xFilter], [xNext], [xEof], [xColumn], and [xRowid] methods
5653 ** of the module. Each module implementation will define
5654 ** the content of a cursor structure to suit its own needs.
5656 ** This superclass exists in order to define fields of the cursor that
5657 ** are common to all implementations.
5659 struct sqlite3_vtab_cursor {
5660 sqlite3_vtab *pVtab; /* Virtual table of this cursor */
5661 /* Virtual table implementations will typically add additional fields */
5665 ** CAPI3REF: Declare The Schema Of A Virtual Table
5667 ** ^The [xCreate] and [xConnect] methods of a
5668 ** [virtual table module] call this interface
5669 ** to declare the format (the names and datatypes of the columns) of
5670 ** the virtual tables they implement.
5672 SQLITE_API int sqlite3_declare_vtab(sqlite3*, const char *zSQL);
5675 ** CAPI3REF: Overload A Function For A Virtual Table
5677 ** ^(Virtual tables can provide alternative implementations of functions
5678 ** using the [xFindFunction] method of the [virtual table module].
5679 ** But global versions of those functions
5680 ** must exist in order to be overloaded.)^
5682 ** ^(This API makes sure a global version of a function with a particular
5683 ** name and number of parameters exists. If no such function exists
5684 ** before this API is called, a new function is created.)^ ^The implementation
5685 ** of the new function always causes an exception to be thrown. So
5686 ** the new function is not good for anything by itself. Its only
5687 ** purpose is to be a placeholder function that can be overloaded
5688 ** by a [virtual table].
5690 SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
5693 ** The interface to the virtual-table mechanism defined above (back up
5694 ** to a comment remarkably similar to this one) is currently considered
5695 ** to be experimental. The interface might change in incompatible ways.
5696 ** If this is a problem for you, do not use the interface at this time.
5698 ** When the virtual-table mechanism stabilizes, we will declare the
5699 ** interface fixed, support it indefinitely, and remove this comment.
5703 ** CAPI3REF: A Handle To An Open BLOB
5704 ** KEYWORDS: {BLOB handle} {BLOB handles}
5706 ** An instance of this object represents an open BLOB on which
5707 ** [sqlite3_blob_open | incremental BLOB I/O] can be performed.
5708 ** ^Objects of this type are created by [sqlite3_blob_open()]
5709 ** and destroyed by [sqlite3_blob_close()].
5710 ** ^The [sqlite3_blob_read()] and [sqlite3_blob_write()] interfaces
5711 ** can be used to read or write small subsections of the BLOB.
5712 ** ^The [sqlite3_blob_bytes()] interface returns the size of the BLOB in bytes.
5714 typedef struct sqlite3_blob sqlite3_blob;
5717 ** CAPI3REF: Open A BLOB For Incremental I/O
5719 ** ^(This interfaces opens a [BLOB handle | handle] to the BLOB located
5720 ** in row iRow, column zColumn, table zTable in database zDb;
5721 ** in other words, the same BLOB that would be selected by:
5723 ** <pre>
5724 ** SELECT zColumn FROM zDb.zTable WHERE [rowid] = iRow;
5725 ** </pre>)^
5727 ** ^If the flags parameter is non-zero, then the BLOB is opened for read
5728 ** and write access. ^If it is zero, the BLOB is opened for read access.
5729 ** ^It is not possible to open a column that is part of an index or primary
5730 ** key for writing. ^If [foreign key constraints] are enabled, it is
5731 ** not possible to open a column that is part of a [child key] for writing.
5733 ** ^Note that the database name is not the filename that contains
5734 ** the database but rather the symbolic name of the database that
5735 ** appears after the AS keyword when the database is connected using [ATTACH].
5736 ** ^For the main database file, the database name is "main".
5737 ** ^For TEMP tables, the database name is "temp".
5739 ** ^(On success, [SQLITE_OK] is returned and the new [BLOB handle] is written
5740 ** to *ppBlob. Otherwise an [error code] is returned and *ppBlob is set
5741 ** to be a null pointer.)^
5742 ** ^This function sets the [database connection] error code and message
5743 ** accessible via [sqlite3_errcode()] and [sqlite3_errmsg()] and related
5744 ** functions. ^Note that the *ppBlob variable is always initialized in a
5745 ** way that makes it safe to invoke [sqlite3_blob_close()] on *ppBlob
5746 ** regardless of the success or failure of this routine.
5748 ** ^(If the row that a BLOB handle points to is modified by an
5749 ** [UPDATE], [DELETE], or by [ON CONFLICT] side-effects
5750 ** then the BLOB handle is marked as "expired".
5751 ** This is true if any column of the row is changed, even a column
5752 ** other than the one the BLOB handle is open on.)^
5753 ** ^Calls to [sqlite3_blob_read()] and [sqlite3_blob_write()] for
5754 ** an expired BLOB handle fail with a return code of [SQLITE_ABORT].
5755 ** ^(Changes written into a BLOB prior to the BLOB expiring are not
5756 ** rolled back by the expiration of the BLOB. Such changes will eventually
5757 ** commit if the transaction continues to completion.)^
5759 ** ^Use the [sqlite3_blob_bytes()] interface to determine the size of
5760 ** the opened blob. ^The size of a blob may not be changed by this
5761 ** interface. Use the [UPDATE] SQL command to change the size of a
5762 ** blob.
5764 ** ^The [sqlite3_bind_zeroblob()] and [sqlite3_result_zeroblob()] interfaces
5765 ** and the built-in [zeroblob] SQL function can be used, if desired,
5766 ** to create an empty, zero-filled blob in which to read or write using
5767 ** this interface.
5769 ** To avoid a resource leak, every open [BLOB handle] should eventually
5770 ** be released by a call to [sqlite3_blob_close()].
5772 SQLITE_API int sqlite3_blob_open(
5773 sqlite3*,
5774 const char *zDb,
5775 const char *zTable,
5776 const char *zColumn,
5777 sqlite3_int64 iRow,
5778 int flags,
5779 sqlite3_blob **ppBlob
5783 ** CAPI3REF: Move a BLOB Handle to a New Row
5785 ** ^This function is used to move an existing blob handle so that it points
5786 ** to a different row of the same database table. ^The new row is identified
5787 ** by the rowid value passed as the second argument. Only the row can be
5788 ** changed. ^The database, table and column on which the blob handle is open
5789 ** remain the same. Moving an existing blob handle to a new row can be
5790 ** faster than closing the existing handle and opening a new one.
5792 ** ^(The new row must meet the same criteria as for [sqlite3_blob_open()] -
5793 ** it must exist and there must be either a blob or text value stored in
5794 ** the nominated column.)^ ^If the new row is not present in the table, or if
5795 ** it does not contain a blob or text value, or if another error occurs, an
5796 ** SQLite error code is returned and the blob handle is considered aborted.
5797 ** ^All subsequent calls to [sqlite3_blob_read()], [sqlite3_blob_write()] or
5798 ** [sqlite3_blob_reopen()] on an aborted blob handle immediately return
5799 ** SQLITE_ABORT. ^Calling [sqlite3_blob_bytes()] on an aborted blob handle
5800 ** always returns zero.
5802 ** ^This function sets the database handle error code and message.
5804 SQLITE_API SQLITE_EXPERIMENTAL int sqlite3_blob_reopen(sqlite3_blob *, sqlite3_int64);
5807 ** CAPI3REF: Close A BLOB Handle
5809 ** ^Closes an open [BLOB handle].
5811 ** ^Closing a BLOB shall cause the current transaction to commit
5812 ** if there are no other BLOBs, no pending prepared statements, and the
5813 ** database connection is in [autocommit mode].
5814 ** ^If any writes were made to the BLOB, they might be held in cache
5815 ** until the close operation if they will fit.
5817 ** ^(Closing the BLOB often forces the changes
5818 ** out to disk and so if any I/O errors occur, they will likely occur
5819 ** at the time when the BLOB is closed. Any errors that occur during
5820 ** closing are reported as a non-zero return value.)^
5822 ** ^(The BLOB is closed unconditionally. Even if this routine returns
5823 ** an error code, the BLOB is still closed.)^
5825 ** ^Calling this routine with a null pointer (such as would be returned
5826 ** by a failed call to [sqlite3_blob_open()]) is a harmless no-op.
5828 SQLITE_API int sqlite3_blob_close(sqlite3_blob *);
5831 ** CAPI3REF: Return The Size Of An Open BLOB
5833 ** ^Returns the size in bytes of the BLOB accessible via the
5834 ** successfully opened [BLOB handle] in its only argument. ^The
5835 ** incremental blob I/O routines can only read or overwriting existing
5836 ** blob content; they cannot change the size of a blob.
5838 ** This routine only works on a [BLOB handle] which has been created
5839 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5840 ** been closed by [sqlite3_blob_close()]. Passing any other pointer in
5841 ** to this routine results in undefined and probably undesirable behavior.
5843 SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *);
5846 ** CAPI3REF: Read Data From A BLOB Incrementally
5848 ** ^(This function is used to read data from an open [BLOB handle] into a
5849 ** caller-supplied buffer. N bytes of data are copied into buffer Z
5850 ** from the open BLOB, starting at offset iOffset.)^
5852 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5853 ** [SQLITE_ERROR] is returned and no data is read. ^If N or iOffset is
5854 ** less than zero, [SQLITE_ERROR] is returned and no data is read.
5855 ** ^The size of the blob (and hence the maximum value of N+iOffset)
5856 ** can be determined using the [sqlite3_blob_bytes()] interface.
5858 ** ^An attempt to read from an expired [BLOB handle] fails with an
5859 ** error code of [SQLITE_ABORT].
5861 ** ^(On success, sqlite3_blob_read() returns SQLITE_OK.
5862 ** Otherwise, an [error code] or an [extended error code] is returned.)^
5864 ** This routine only works on a [BLOB handle] which has been created
5865 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5866 ** been closed by [sqlite3_blob_close()]. Passing any other pointer in
5867 ** to this routine results in undefined and probably undesirable behavior.
5869 ** See also: [sqlite3_blob_write()].
5871 SQLITE_API int sqlite3_blob_read(sqlite3_blob *, void *Z, int N, int iOffset);
5874 ** CAPI3REF: Write Data Into A BLOB Incrementally
5876 ** ^This function is used to write data into an open [BLOB handle] from a
5877 ** caller-supplied buffer. ^N bytes of data are copied from the buffer Z
5878 ** into the open BLOB, starting at offset iOffset.
5880 ** ^If the [BLOB handle] passed as the first argument was not opened for
5881 ** writing (the flags parameter to [sqlite3_blob_open()] was zero),
5882 ** this function returns [SQLITE_READONLY].
5884 ** ^This function may only modify the contents of the BLOB; it is
5885 ** not possible to increase the size of a BLOB using this API.
5886 ** ^If offset iOffset is less than N bytes from the end of the BLOB,
5887 ** [SQLITE_ERROR] is returned and no data is written. ^If N is
5888 ** less than zero [SQLITE_ERROR] is returned and no data is written.
5889 ** The size of the BLOB (and hence the maximum value of N+iOffset)
5890 ** can be determined using the [sqlite3_blob_bytes()] interface.
5892 ** ^An attempt to write to an expired [BLOB handle] fails with an
5893 ** error code of [SQLITE_ABORT]. ^Writes to the BLOB that occurred
5894 ** before the [BLOB handle] expired are not rolled back by the
5895 ** expiration of the handle, though of course those changes might
5896 ** have been overwritten by the statement that expired the BLOB handle
5897 ** or by other independent statements.
5899 ** ^(On success, sqlite3_blob_write() returns SQLITE_OK.
5900 ** Otherwise, an [error code] or an [extended error code] is returned.)^
5902 ** This routine only works on a [BLOB handle] which has been created
5903 ** by a prior successful call to [sqlite3_blob_open()] and which has not
5904 ** been closed by [sqlite3_blob_close()]. Passing any other pointer in
5905 ** to this routine results in undefined and probably undesirable behavior.
5907 ** See also: [sqlite3_blob_read()].
5909 SQLITE_API int sqlite3_blob_write(sqlite3_blob *, const void *z, int n, int iOffset);
5912 ** CAPI3REF: Virtual File System Objects
5914 ** A virtual filesystem (VFS) is an [sqlite3_vfs] object
5915 ** that SQLite uses to interact
5916 ** with the underlying operating system. Most SQLite builds come with a
5917 ** single default VFS that is appropriate for the host computer.
5918 ** New VFSes can be registered and existing VFSes can be unregistered.
5919 ** The following interfaces are provided.
5921 ** ^The sqlite3_vfs_find() interface returns a pointer to a VFS given its name.
5922 ** ^Names are case sensitive.
5923 ** ^Names are zero-terminated UTF-8 strings.
5924 ** ^If there is no match, a NULL pointer is returned.
5925 ** ^If zVfsName is NULL then the default VFS is returned.
5927 ** ^New VFSes are registered with sqlite3_vfs_register().
5928 ** ^Each new VFS becomes the default VFS if the makeDflt flag is set.
5929 ** ^The same VFS can be registered multiple times without injury.
5930 ** ^To make an existing VFS into the default VFS, register it again
5931 ** with the makeDflt flag set. If two different VFSes with the
5932 ** same name are registered, the behavior is undefined. If a
5933 ** VFS is registered with a name that is NULL or an empty string,
5934 ** then the behavior is undefined.
5936 ** ^Unregister a VFS with the sqlite3_vfs_unregister() interface.
5937 ** ^(If the default VFS is unregistered, another VFS is chosen as
5938 ** the default. The choice for the new VFS is arbitrary.)^
5940 SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfsName);
5941 SQLITE_API int sqlite3_vfs_register(sqlite3_vfs*, int makeDflt);
5942 SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs*);
5945 ** CAPI3REF: Mutexes
5947 ** The SQLite core uses these routines for thread
5948 ** synchronization. Though they are intended for internal
5949 ** use by SQLite, code that links against SQLite is
5950 ** permitted to use any of these routines.
5952 ** The SQLite source code contains multiple implementations
5953 ** of these mutex routines. An appropriate implementation
5954 ** is selected automatically at compile-time. ^(The following
5955 ** implementations are available in the SQLite core:
5957 ** <ul>
5958 ** <li> SQLITE_MUTEX_OS2
5959 ** <li> SQLITE_MUTEX_PTHREADS
5960 ** <li> SQLITE_MUTEX_W32
5961 ** <li> SQLITE_MUTEX_NOOP
5962 ** </ul>)^
5964 ** ^The SQLITE_MUTEX_NOOP implementation is a set of routines
5965 ** that does no real locking and is appropriate for use in
5966 ** a single-threaded application. ^The SQLITE_MUTEX_OS2,
5967 ** SQLITE_MUTEX_PTHREADS, and SQLITE_MUTEX_W32 implementations
5968 ** are appropriate for use on OS/2, Unix, and Windows.
5970 ** ^(If SQLite is compiled with the SQLITE_MUTEX_APPDEF preprocessor
5971 ** macro defined (with "-DSQLITE_MUTEX_APPDEF=1"), then no mutex
5972 ** implementation is included with the library. In this case the
5973 ** application must supply a custom mutex implementation using the
5974 ** [SQLITE_CONFIG_MUTEX] option of the sqlite3_config() function
5975 ** before calling sqlite3_initialize() or any other public sqlite3_
5976 ** function that calls sqlite3_initialize().)^
5978 ** ^The sqlite3_mutex_alloc() routine allocates a new
5979 ** mutex and returns a pointer to it. ^If it returns NULL
5980 ** that means that a mutex could not be allocated. ^SQLite
5981 ** will unwind its stack and return an error. ^(The argument
5982 ** to sqlite3_mutex_alloc() is one of these integer constants:
5984 ** <ul>
5985 ** <li> SQLITE_MUTEX_FAST
5986 ** <li> SQLITE_MUTEX_RECURSIVE
5987 ** <li> SQLITE_MUTEX_STATIC_MASTER
5988 ** <li> SQLITE_MUTEX_STATIC_MEM
5989 ** <li> SQLITE_MUTEX_STATIC_MEM2
5990 ** <li> SQLITE_MUTEX_STATIC_PRNG
5991 ** <li> SQLITE_MUTEX_STATIC_LRU
5992 ** <li> SQLITE_MUTEX_STATIC_LRU2
5993 ** </ul>)^
5995 ** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
5996 ** cause sqlite3_mutex_alloc() to create
5997 ** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
5998 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
5999 ** The mutex implementation does not need to make a distinction
6000 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
6001 ** not want to. ^SQLite will only request a recursive mutex in
6002 ** cases where it really needs one. ^If a faster non-recursive mutex
6003 ** implementation is available on the host platform, the mutex subsystem
6004 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
6006 ** ^The other allowed parameters to sqlite3_mutex_alloc() (anything other
6007 ** than SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE) each return
6008 ** a pointer to a static preexisting mutex. ^Six static mutexes are
6009 ** used by the current version of SQLite. Future versions of SQLite
6010 ** may add additional static mutexes. Static mutexes are for internal
6011 ** use by SQLite only. Applications that use SQLite mutexes should
6012 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
6013 ** SQLITE_MUTEX_RECURSIVE.
6015 ** ^Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
6016 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
6017 ** returns a different mutex on every call. ^But for the static
6018 ** mutex types, the same mutex is returned on every call that has
6019 ** the same type number.
6021 ** ^The sqlite3_mutex_free() routine deallocates a previously
6022 ** allocated dynamic mutex. ^SQLite is careful to deallocate every
6023 ** dynamic mutex that it allocates. The dynamic mutexes must not be in
6024 ** use when they are deallocated. Attempting to deallocate a static
6025 ** mutex results in undefined behavior. ^SQLite never deallocates
6026 ** a static mutex.
6028 ** ^The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
6029 ** to enter a mutex. ^If another thread is already within the mutex,
6030 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
6031 ** SQLITE_BUSY. ^The sqlite3_mutex_try() interface returns [SQLITE_OK]
6032 ** upon successful entry. ^(Mutexes created using
6033 ** SQLITE_MUTEX_RECURSIVE can be entered multiple times by the same thread.
6034 ** In such cases the,
6035 ** mutex must be exited an equal number of times before another thread
6036 ** can enter.)^ ^(If the same thread tries to enter any other
6037 ** kind of mutex more than once, the behavior is undefined.
6038 ** SQLite will never exhibit
6039 ** such behavior in its own use of mutexes.)^
6041 ** ^(Some systems (for example, Windows 95) do not support the operation
6042 ** implemented by sqlite3_mutex_try(). On those systems, sqlite3_mutex_try()
6043 ** will always return SQLITE_BUSY. The SQLite core only ever uses
6044 ** sqlite3_mutex_try() as an optimization so this is acceptable behavior.)^
6046 ** ^The sqlite3_mutex_leave() routine exits a mutex that was
6047 ** previously entered by the same thread. ^(The behavior
6048 ** is undefined if the mutex is not currently entered by the
6049 ** calling thread or is not currently allocated. SQLite will
6050 ** never do either.)^
6052 ** ^If the argument to sqlite3_mutex_enter(), sqlite3_mutex_try(), or
6053 ** sqlite3_mutex_leave() is a NULL pointer, then all three routines
6054 ** behave as no-ops.
6056 ** See also: [sqlite3_mutex_held()] and [sqlite3_mutex_notheld()].
6058 SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int);
6059 SQLITE_API void sqlite3_mutex_free(sqlite3_mutex*);
6060 SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex*);
6061 SQLITE_API int sqlite3_mutex_try(sqlite3_mutex*);
6062 SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex*);
6065 ** CAPI3REF: Mutex Methods Object
6067 ** An instance of this structure defines the low-level routines
6068 ** used to allocate and use mutexes.
6070 ** Usually, the default mutex implementations provided by SQLite are
6071 ** sufficient, however the user has the option of substituting a custom
6072 ** implementation for specialized deployments or systems for which SQLite
6073 ** does not provide a suitable implementation. In this case, the user
6074 ** creates and populates an instance of this structure to pass
6075 ** to sqlite3_config() along with the [SQLITE_CONFIG_MUTEX] option.
6076 ** Additionally, an instance of this structure can be used as an
6077 ** output variable when querying the system for the current mutex
6078 ** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
6080 ** ^The xMutexInit method defined by this structure is invoked as
6081 ** part of system initialization by the sqlite3_initialize() function.
6082 ** ^The xMutexInit routine is called by SQLite exactly once for each
6083 ** effective call to [sqlite3_initialize()].
6085 ** ^The xMutexEnd method defined by this structure is invoked as
6086 ** part of system shutdown by the sqlite3_shutdown() function. The
6087 ** implementation of this method is expected to release all outstanding
6088 ** resources obtained by the mutex methods implementation, especially
6089 ** those obtained by the xMutexInit method. ^The xMutexEnd()
6090 ** interface is invoked exactly once for each call to [sqlite3_shutdown()].
6092 ** ^(The remaining seven methods defined by this structure (xMutexAlloc,
6093 ** xMutexFree, xMutexEnter, xMutexTry, xMutexLeave, xMutexHeld and
6094 ** xMutexNotheld) implement the following interfaces (respectively):
6096 ** <ul>
6097 ** <li> [sqlite3_mutex_alloc()] </li>
6098 ** <li> [sqlite3_mutex_free()] </li>
6099 ** <li> [sqlite3_mutex_enter()] </li>
6100 ** <li> [sqlite3_mutex_try()] </li>
6101 ** <li> [sqlite3_mutex_leave()] </li>
6102 ** <li> [sqlite3_mutex_held()] </li>
6103 ** <li> [sqlite3_mutex_notheld()] </li>
6104 ** </ul>)^
6106 ** The only difference is that the public sqlite3_XXX functions enumerated
6107 ** above silently ignore any invocations that pass a NULL pointer instead
6108 ** of a valid mutex handle. The implementations of the methods defined
6109 ** by this structure are not required to handle this case, the results
6110 ** of passing a NULL pointer instead of a valid mutex handle are undefined
6111 ** (i.e. it is acceptable to provide an implementation that segfaults if
6112 ** it is passed a NULL pointer).
6114 ** The xMutexInit() method must be threadsafe. ^It must be harmless to
6115 ** invoke xMutexInit() multiple times within the same process and without
6116 ** intervening calls to xMutexEnd(). Second and subsequent calls to
6117 ** xMutexInit() must be no-ops.
6119 ** ^xMutexInit() must not use SQLite memory allocation ([sqlite3_malloc()]
6120 ** and its associates). ^Similarly, xMutexAlloc() must not use SQLite memory
6121 ** allocation for a static mutex. ^However xMutexAlloc() may use SQLite
6122 ** memory allocation for a fast or recursive mutex.
6124 ** ^SQLite will invoke the xMutexEnd() method when [sqlite3_shutdown()] is
6125 ** called, but only if the prior call to xMutexInit returned SQLITE_OK.
6126 ** If xMutexInit fails in any way, it is expected to clean up after itself
6127 ** prior to returning.
6129 typedef struct sqlite3_mutex_methods sqlite3_mutex_methods;
6130 struct sqlite3_mutex_methods {
6131 int (*xMutexInit)(void);
6132 int (*xMutexEnd)(void);
6133 sqlite3_mutex *(*xMutexAlloc)(int);
6134 void (*xMutexFree)(sqlite3_mutex *);
6135 void (*xMutexEnter)(sqlite3_mutex *);
6136 int (*xMutexTry)(sqlite3_mutex *);
6137 void (*xMutexLeave)(sqlite3_mutex *);
6138 int (*xMutexHeld)(sqlite3_mutex *);
6139 int (*xMutexNotheld)(sqlite3_mutex *);
6143 ** CAPI3REF: Mutex Verification Routines
6145 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routines
6146 ** are intended for use inside assert() statements. ^The SQLite core
6147 ** never uses these routines except inside an assert() and applications
6148 ** are advised to follow the lead of the core. ^The SQLite core only
6149 ** provides implementations for these routines when it is compiled
6150 ** with the SQLITE_DEBUG flag. ^External mutex implementations
6151 ** are only required to provide these routines if SQLITE_DEBUG is
6152 ** defined and if NDEBUG is not defined.
6154 ** ^These routines should return true if the mutex in their argument
6155 ** is held or not held, respectively, by the calling thread.
6157 ** ^The implementation is not required to provide versions of these
6158 ** routines that actually work. If the implementation does not provide working
6159 ** versions of these routines, it should at least provide stubs that always
6160 ** return true so that one does not get spurious assertion failures.
6162 ** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
6163 ** the routine should return 1. This seems counter-intuitive since
6164 ** clearly the mutex cannot be held if it does not exist. But
6165 ** the reason the mutex does not exist is because the build is not
6166 ** using mutexes. And we do not want the assert() containing the
6167 ** call to sqlite3_mutex_held() to fail, so a non-zero return is
6168 ** the appropriate thing to do. ^The sqlite3_mutex_notheld()
6169 ** interface should also return 1 when given a NULL pointer.
6171 #ifndef NDEBUG
6172 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex*);
6173 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex*);
6174 #endif
6177 ** CAPI3REF: Mutex Types
6179 ** The [sqlite3_mutex_alloc()] interface takes a single argument
6180 ** which is one of these integer constants.
6182 ** The set of static mutexes may change from one SQLite release to the
6183 ** next. Applications that override the built-in mutex logic must be
6184 ** prepared to accommodate additional static mutexes.
6186 #define SQLITE_MUTEX_FAST 0
6187 #define SQLITE_MUTEX_RECURSIVE 1
6188 #define SQLITE_MUTEX_STATIC_MASTER 2
6189 #define SQLITE_MUTEX_STATIC_MEM 3 /* sqlite3_malloc() */
6190 #define SQLITE_MUTEX_STATIC_MEM2 4 /* NOT USED */
6191 #define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */
6192 #define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */
6193 #define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */
6194 #define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */
6195 #define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */
6198 ** CAPI3REF: Retrieve the mutex for a database connection
6200 ** ^This interface returns a pointer the [sqlite3_mutex] object that
6201 ** serializes access to the [database connection] given in the argument
6202 ** when the [threading mode] is Serialized.
6203 ** ^If the [threading mode] is Single-thread or Multi-thread then this
6204 ** routine returns a NULL pointer.
6206 SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3*);
6209 ** CAPI3REF: Low-Level Control Of Database Files
6211 ** ^The [sqlite3_file_control()] interface makes a direct call to the
6212 ** xFileControl method for the [sqlite3_io_methods] object associated
6213 ** with a particular database identified by the second argument. ^The
6214 ** name of the database is "main" for the main database or "temp" for the
6215 ** TEMP database, or the name that appears after the AS keyword for
6216 ** databases that are added using the [ATTACH] SQL command.
6217 ** ^A NULL pointer can be used in place of "main" to refer to the
6218 ** main database file.
6219 ** ^The third and fourth parameters to this routine
6220 ** are passed directly through to the second and third parameters of
6221 ** the xFileControl method. ^The return value of the xFileControl
6222 ** method becomes the return value of this routine.
6224 ** ^The SQLITE_FCNTL_FILE_POINTER value for the op parameter causes
6225 ** a pointer to the underlying [sqlite3_file] object to be written into
6226 ** the space pointed to by the 4th parameter. ^The SQLITE_FCNTL_FILE_POINTER
6227 ** case is a short-circuit path which does not actually invoke the
6228 ** underlying sqlite3_io_methods.xFileControl method.
6230 ** ^If the second parameter (zDbName) does not match the name of any
6231 ** open database file, then SQLITE_ERROR is returned. ^This error
6232 ** code is not remembered and will not be recalled by [sqlite3_errcode()]
6233 ** or [sqlite3_errmsg()]. The underlying xFileControl method might
6234 ** also return SQLITE_ERROR. There is no way to distinguish between
6235 ** an incorrect zDbName and an SQLITE_ERROR return from the underlying
6236 ** xFileControl method.
6238 ** See also: [SQLITE_FCNTL_LOCKSTATE]
6240 SQLITE_API int sqlite3_file_control(sqlite3*, const char *zDbName, int op, void*);
6243 ** CAPI3REF: Testing Interface
6245 ** ^The sqlite3_test_control() interface is used to read out internal
6246 ** state of SQLite and to inject faults into SQLite for testing
6247 ** purposes. ^The first parameter is an operation code that determines
6248 ** the number, meaning, and operation of all subsequent parameters.
6250 ** This interface is not for use by applications. It exists solely
6251 ** for verifying the correct operation of the SQLite library. Depending
6252 ** on how the SQLite library is compiled, this interface might not exist.
6254 ** The details of the operation codes, their meanings, the parameters
6255 ** they take, and what they do are all subject to change without notice.
6256 ** Unlike most of the SQLite API, this function is not guaranteed to
6257 ** operate consistently from one release to the next.
6259 SQLITE_API int sqlite3_test_control(int op, ...);
6262 ** CAPI3REF: Testing Interface Operation Codes
6264 ** These constants are the valid operation code parameters used
6265 ** as the first argument to [sqlite3_test_control()].
6267 ** These parameters and their meanings are subject to change
6268 ** without notice. These values are for testing purposes only.
6269 ** Applications should not use any of these parameters or the
6270 ** [sqlite3_test_control()] interface.
6272 #define SQLITE_TESTCTRL_FIRST 5
6273 #define SQLITE_TESTCTRL_PRNG_SAVE 5
6274 #define SQLITE_TESTCTRL_PRNG_RESTORE 6
6275 #define SQLITE_TESTCTRL_PRNG_RESET 7
6276 #define SQLITE_TESTCTRL_BITVEC_TEST 8
6277 #define SQLITE_TESTCTRL_FAULT_INSTALL 9
6278 #define SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS 10
6279 #define SQLITE_TESTCTRL_PENDING_BYTE 11
6280 #define SQLITE_TESTCTRL_ASSERT 12
6281 #define SQLITE_TESTCTRL_ALWAYS 13
6282 #define SQLITE_TESTCTRL_RESERVE 14
6283 #define SQLITE_TESTCTRL_OPTIMIZATIONS 15
6284 #define SQLITE_TESTCTRL_ISKEYWORD 16
6285 #define SQLITE_TESTCTRL_SCRATCHMALLOC 17
6286 #define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
6287 #define SQLITE_TESTCTRL_EXPLAIN_STMT 19
6288 #define SQLITE_TESTCTRL_LAST 19
6291 ** CAPI3REF: SQLite Runtime Status
6293 ** ^This interface is used to retrieve runtime status information
6294 ** about the performance of SQLite, and optionally to reset various
6295 ** highwater marks. ^The first argument is an integer code for
6296 ** the specific parameter to measure. ^(Recognized integer codes
6297 ** are of the form [status parameters | SQLITE_STATUS_...].)^
6298 ** ^The current value of the parameter is returned into *pCurrent.
6299 ** ^The highest recorded value is returned in *pHighwater. ^If the
6300 ** resetFlag is true, then the highest record value is reset after
6301 ** *pHighwater is written. ^(Some parameters do not record the highest
6302 ** value. For those parameters
6303 ** nothing is written into *pHighwater and the resetFlag is ignored.)^
6304 ** ^(Other parameters record only the highwater mark and not the current
6305 ** value. For these latter parameters nothing is written into *pCurrent.)^
6307 ** ^The sqlite3_status() routine returns SQLITE_OK on success and a
6308 ** non-zero [error code] on failure.
6310 ** This routine is threadsafe but is not atomic. This routine can be
6311 ** called while other threads are running the same or different SQLite
6312 ** interfaces. However the values returned in *pCurrent and
6313 ** *pHighwater reflect the status of SQLite at different points in time
6314 ** and it is possible that another thread might change the parameter
6315 ** in between the times when *pCurrent and *pHighwater are written.
6317 ** See also: [sqlite3_db_status()]
6319 SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag);
6323 ** CAPI3REF: Status Parameters
6324 ** KEYWORDS: {status parameters}
6326 ** These integer constants designate various run-time status parameters
6327 ** that can be returned by [sqlite3_status()].
6329 ** <dl>
6330 ** [[SQLITE_STATUS_MEMORY_USED]] ^(<dt>SQLITE_STATUS_MEMORY_USED</dt>
6331 ** <dd>This parameter is the current amount of memory checked out
6332 ** using [sqlite3_malloc()], either directly or indirectly. The
6333 ** figure includes calls made to [sqlite3_malloc()] by the application
6334 ** and internal memory usage by the SQLite library. Scratch memory
6335 ** controlled by [SQLITE_CONFIG_SCRATCH] and auxiliary page-cache
6336 ** memory controlled by [SQLITE_CONFIG_PAGECACHE] is not included in
6337 ** this parameter. The amount returned is the sum of the allocation
6338 ** sizes as reported by the xSize method in [sqlite3_mem_methods].</dd>)^
6340 ** [[SQLITE_STATUS_MALLOC_SIZE]] ^(<dt>SQLITE_STATUS_MALLOC_SIZE</dt>
6341 ** <dd>This parameter records the largest memory allocation request
6342 ** handed to [sqlite3_malloc()] or [sqlite3_realloc()] (or their
6343 ** internal equivalents). Only the value returned in the
6344 ** *pHighwater parameter to [sqlite3_status()] is of interest.
6345 ** The value written into the *pCurrent parameter is undefined.</dd>)^
6347 ** [[SQLITE_STATUS_MALLOC_COUNT]] ^(<dt>SQLITE_STATUS_MALLOC_COUNT</dt>
6348 ** <dd>This parameter records the number of separate memory allocations
6349 ** currently checked out.</dd>)^
6351 ** [[SQLITE_STATUS_PAGECACHE_USED]] ^(<dt>SQLITE_STATUS_PAGECACHE_USED</dt>
6352 ** <dd>This parameter returns the number of pages used out of the
6353 ** [pagecache memory allocator] that was configured using
6354 ** [SQLITE_CONFIG_PAGECACHE]. The
6355 ** value returned is in pages, not in bytes.</dd>)^
6357 ** [[SQLITE_STATUS_PAGECACHE_OVERFLOW]]
6358 ** ^(<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
6359 ** <dd>This parameter returns the number of bytes of page cache
6360 ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
6361 ** buffer and where forced to overflow to [sqlite3_malloc()]. The
6362 ** returned value includes allocations that overflowed because they
6363 ** where too large (they were larger than the "sz" parameter to
6364 ** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
6365 ** no space was left in the page cache.</dd>)^
6367 ** [[SQLITE_STATUS_PAGECACHE_SIZE]] ^(<dt>SQLITE_STATUS_PAGECACHE_SIZE</dt>
6368 ** <dd>This parameter records the largest memory allocation request
6369 ** handed to [pagecache memory allocator]. Only the value returned in the
6370 ** *pHighwater parameter to [sqlite3_status()] is of interest.
6371 ** The value written into the *pCurrent parameter is undefined.</dd>)^
6373 ** [[SQLITE_STATUS_SCRATCH_USED]] ^(<dt>SQLITE_STATUS_SCRATCH_USED</dt>
6374 ** <dd>This parameter returns the number of allocations used out of the
6375 ** [scratch memory allocator] configured using
6376 ** [SQLITE_CONFIG_SCRATCH]. The value returned is in allocations, not
6377 ** in bytes. Since a single thread may only have one scratch allocation
6378 ** outstanding at time, this parameter also reports the number of threads
6379 ** using scratch memory at the same time.</dd>)^
6381 ** [[SQLITE_STATUS_SCRATCH_OVERFLOW]] ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
6382 ** <dd>This parameter returns the number of bytes of scratch memory
6383 ** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
6384 ** buffer and where forced to overflow to [sqlite3_malloc()]. The values
6385 ** returned include overflows because the requested allocation was too
6386 ** larger (that is, because the requested allocation was larger than the
6387 ** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
6388 ** slots were available.
6389 ** </dd>)^
6391 ** [[SQLITE_STATUS_SCRATCH_SIZE]] ^(<dt>SQLITE_STATUS_SCRATCH_SIZE</dt>
6392 ** <dd>This parameter records the largest memory allocation request
6393 ** handed to [scratch memory allocator]. Only the value returned in the
6394 ** *pHighwater parameter to [sqlite3_status()] is of interest.
6395 ** The value written into the *pCurrent parameter is undefined.</dd>)^
6397 ** [[SQLITE_STATUS_PARSER_STACK]] ^(<dt>SQLITE_STATUS_PARSER_STACK</dt>
6398 ** <dd>This parameter records the deepest parser stack. It is only
6399 ** meaningful if SQLite is compiled with [YYTRACKMAXSTACKDEPTH].</dd>)^
6400 ** </dl>
6402 ** New status parameters may be added from time to time.
6404 #define SQLITE_STATUS_MEMORY_USED 0
6405 #define SQLITE_STATUS_PAGECACHE_USED 1
6406 #define SQLITE_STATUS_PAGECACHE_OVERFLOW 2
6407 #define SQLITE_STATUS_SCRATCH_USED 3
6408 #define SQLITE_STATUS_SCRATCH_OVERFLOW 4
6409 #define SQLITE_STATUS_MALLOC_SIZE 5
6410 #define SQLITE_STATUS_PARSER_STACK 6
6411 #define SQLITE_STATUS_PAGECACHE_SIZE 7
6412 #define SQLITE_STATUS_SCRATCH_SIZE 8
6413 #define SQLITE_STATUS_MALLOC_COUNT 9
6416 ** CAPI3REF: Database Connection Status
6418 ** ^This interface is used to retrieve runtime status information
6419 ** about a single [database connection]. ^The first argument is the
6420 ** database connection object to be interrogated. ^The second argument
6421 ** is an integer constant, taken from the set of
6422 ** [SQLITE_DBSTATUS options], that
6423 ** determines the parameter to interrogate. The set of
6424 ** [SQLITE_DBSTATUS options] is likely
6425 ** to grow in future releases of SQLite.
6427 ** ^The current value of the requested parameter is written into *pCur
6428 ** and the highest instantaneous value is written into *pHiwtr. ^If
6429 ** the resetFlg is true, then the highest instantaneous value is
6430 ** reset back down to the current value.
6432 ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a
6433 ** non-zero [error code] on failure.
6435 ** See also: [sqlite3_status()] and [sqlite3_stmt_status()].
6437 SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
6440 ** CAPI3REF: Status Parameters for database connections
6441 ** KEYWORDS: {SQLITE_DBSTATUS options}
6443 ** These constants are the available integer "verbs" that can be passed as
6444 ** the second argument to the [sqlite3_db_status()] interface.
6446 ** New verbs may be added in future releases of SQLite. Existing verbs
6447 ** might be discontinued. Applications should check the return code from
6448 ** [sqlite3_db_status()] to make sure that the call worked.
6449 ** The [sqlite3_db_status()] interface will return a non-zero error code
6450 ** if a discontinued or unsupported verb is invoked.
6452 ** <dl>
6453 ** [[SQLITE_DBSTATUS_LOOKASIDE_USED]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_USED</dt>
6454 ** <dd>This parameter returns the number of lookaside memory slots currently
6455 ** checked out.</dd>)^
6457 ** [[SQLITE_DBSTATUS_LOOKASIDE_HIT]] ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_HIT</dt>
6458 ** <dd>This parameter returns the number malloc attempts that were
6459 ** satisfied using lookaside memory. Only the high-water value is meaningful;
6460 ** the current value is always zero.)^
6462 ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE]]
6463 ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE</dt>
6464 ** <dd>This parameter returns the number malloc attempts that might have
6465 ** been satisfied using lookaside memory but failed due to the amount of
6466 ** memory requested being larger than the lookaside slot size.
6467 ** Only the high-water value is meaningful;
6468 ** the current value is always zero.)^
6470 ** [[SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL]]
6471 ** ^(<dt>SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL</dt>
6472 ** <dd>This parameter returns the number malloc attempts that might have
6473 ** been satisfied using lookaside memory but failed due to all lookaside
6474 ** memory already being in use.
6475 ** Only the high-water value is meaningful;
6476 ** the current value is always zero.)^
6478 ** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
6479 ** <dd>This parameter returns the approximate number of of bytes of heap
6480 ** memory used by all pager caches associated with the database connection.)^
6481 ** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
6483 ** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
6484 ** <dd>This parameter returns the approximate number of of bytes of heap
6485 ** memory used to store the schema for all databases associated
6486 ** with the connection - main, temp, and any [ATTACH]-ed databases.)^
6487 ** ^The full amount of memory used by the schemas is reported, even if the
6488 ** schema memory is shared with other database connections due to
6489 ** [shared cache mode] being enabled.
6490 ** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
6492 ** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
6493 ** <dd>This parameter returns the approximate number of of bytes of heap
6494 ** and lookaside memory used by all prepared statements associated with
6495 ** the database connection.)^
6496 ** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
6497 ** </dd>
6499 ** [[SQLITE_DBSTATUS_CACHE_HIT]] ^(<dt>SQLITE_DBSTATUS_CACHE_HIT</dt>
6500 ** <dd>This parameter returns the number of pager cache hits that have
6501 ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_HIT
6502 ** is always 0.
6503 ** </dd>
6505 ** [[SQLITE_DBSTATUS_CACHE_MISS]] ^(<dt>SQLITE_DBSTATUS_CACHE_MISS</dt>
6506 ** <dd>This parameter returns the number of pager cache misses that have
6507 ** occurred.)^ ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_MISS
6508 ** is always 0.
6509 ** </dd>
6510 ** </dl>
6512 #define SQLITE_DBSTATUS_LOOKASIDE_USED 0
6513 #define SQLITE_DBSTATUS_CACHE_USED 1
6514 #define SQLITE_DBSTATUS_SCHEMA_USED 2
6515 #define SQLITE_DBSTATUS_STMT_USED 3
6516 #define SQLITE_DBSTATUS_LOOKASIDE_HIT 4
6517 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE 5
6518 #define SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL 6
6519 #define SQLITE_DBSTATUS_CACHE_HIT 7
6520 #define SQLITE_DBSTATUS_CACHE_MISS 8
6521 #define SQLITE_DBSTATUS_MAX 8 /* Largest defined DBSTATUS */
6525 ** CAPI3REF: Prepared Statement Status
6527 ** ^(Each prepared statement maintains various
6528 ** [SQLITE_STMTSTATUS counters] that measure the number
6529 ** of times it has performed specific operations.)^ These counters can
6530 ** be used to monitor the performance characteristics of the prepared
6531 ** statements. For example, if the number of table steps greatly exceeds
6532 ** the number of table searches or result rows, that would tend to indicate
6533 ** that the prepared statement is using a full table scan rather than
6534 ** an index.
6536 ** ^(This interface is used to retrieve and reset counter values from
6537 ** a [prepared statement]. The first argument is the prepared statement
6538 ** object to be interrogated. The second argument
6539 ** is an integer code for a specific [SQLITE_STMTSTATUS counter]
6540 ** to be interrogated.)^
6541 ** ^The current value of the requested counter is returned.
6542 ** ^If the resetFlg is true, then the counter is reset to zero after this
6543 ** interface call returns.
6545 ** See also: [sqlite3_status()] and [sqlite3_db_status()].
6547 SQLITE_API int sqlite3_stmt_status(sqlite3_stmt*, int op,int resetFlg);
6550 ** CAPI3REF: Status Parameters for prepared statements
6551 ** KEYWORDS: {SQLITE_STMTSTATUS counter} {SQLITE_STMTSTATUS counters}
6553 ** These preprocessor macros define integer codes that name counter
6554 ** values associated with the [sqlite3_stmt_status()] interface.
6555 ** The meanings of the various counters are as follows:
6557 ** <dl>
6558 ** [[SQLITE_STMTSTATUS_FULLSCAN_STEP]] <dt>SQLITE_STMTSTATUS_FULLSCAN_STEP</dt>
6559 ** <dd>^This is the number of times that SQLite has stepped forward in
6560 ** a table as part of a full table scan. Large numbers for this counter
6561 ** may indicate opportunities for performance improvement through
6562 ** careful use of indices.</dd>
6564 ** [[SQLITE_STMTSTATUS_SORT]] <dt>SQLITE_STMTSTATUS_SORT</dt>
6565 ** <dd>^This is the number of sort operations that have occurred.
6566 ** A non-zero value in this counter may indicate an opportunity to
6567 ** improvement performance through careful use of indices.</dd>
6569 ** [[SQLITE_STMTSTATUS_AUTOINDEX]] <dt>SQLITE_STMTSTATUS_AUTOINDEX</dt>
6570 ** <dd>^This is the number of rows inserted into transient indices that
6571 ** were created automatically in order to help joins run faster.
6572 ** A non-zero value in this counter may indicate an opportunity to
6573 ** improvement performance by adding permanent indices that do not
6574 ** need to be reinitialized each time the statement is run.</dd>
6575 ** </dl>
6577 #define SQLITE_STMTSTATUS_FULLSCAN_STEP 1
6578 #define SQLITE_STMTSTATUS_SORT 2
6579 #define SQLITE_STMTSTATUS_AUTOINDEX 3
6582 ** CAPI3REF: Custom Page Cache Object
6584 ** The sqlite3_pcache type is opaque. It is implemented by
6585 ** the pluggable module. The SQLite core has no knowledge of
6586 ** its size or internal structure and never deals with the
6587 ** sqlite3_pcache object except by holding and passing pointers
6588 ** to the object.
6590 ** See [sqlite3_pcache_methods2] for additional information.
6592 typedef struct sqlite3_pcache sqlite3_pcache;
6595 ** CAPI3REF: Custom Page Cache Object
6597 ** The sqlite3_pcache_page object represents a single page in the
6598 ** page cache. The page cache will allocate instances of this
6599 ** object. Various methods of the page cache use pointers to instances
6600 ** of this object as parameters or as their return value.
6602 ** See [sqlite3_pcache_methods2] for additional information.
6604 typedef struct sqlite3_pcache_page sqlite3_pcache_page;
6605 struct sqlite3_pcache_page {
6606 void *pBuf; /* The content of the page */
6607 void *pExtra; /* Extra information associated with the page */
6611 ** CAPI3REF: Application Defined Page Cache.
6612 ** KEYWORDS: {page cache}
6614 ** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE2], ...) interface can
6615 ** register an alternative page cache implementation by passing in an
6616 ** instance of the sqlite3_pcache_methods2 structure.)^
6617 ** In many applications, most of the heap memory allocated by
6618 ** SQLite is used for the page cache.
6619 ** By implementing a
6620 ** custom page cache using this API, an application can better control
6621 ** the amount of memory consumed by SQLite, the way in which
6622 ** that memory is allocated and released, and the policies used to
6623 ** determine exactly which parts of a database file are cached and for
6624 ** how long.
6626 ** The alternative page cache mechanism is an
6627 ** extreme measure that is only needed by the most demanding applications.
6628 ** The built-in page cache is recommended for most uses.
6630 ** ^(The contents of the sqlite3_pcache_methods2 structure are copied to an
6631 ** internal buffer by SQLite within the call to [sqlite3_config]. Hence
6632 ** the application may discard the parameter after the call to
6633 ** [sqlite3_config()] returns.)^
6635 ** [[the xInit() page cache method]]
6636 ** ^(The xInit() method is called once for each effective
6637 ** call to [sqlite3_initialize()])^
6638 ** (usually only once during the lifetime of the process). ^(The xInit()
6639 ** method is passed a copy of the sqlite3_pcache_methods2.pArg value.)^
6640 ** The intent of the xInit() method is to set up global data structures
6641 ** required by the custom page cache implementation.
6642 ** ^(If the xInit() method is NULL, then the
6643 ** built-in default page cache is used instead of the application defined
6644 ** page cache.)^
6646 ** [[the xShutdown() page cache method]]
6647 ** ^The xShutdown() method is called by [sqlite3_shutdown()].
6648 ** It can be used to clean up
6649 ** any outstanding resources before process shutdown, if required.
6650 ** ^The xShutdown() method may be NULL.
6652 ** ^SQLite automatically serializes calls to the xInit method,
6653 ** so the xInit method need not be threadsafe. ^The
6654 ** xShutdown method is only called from [sqlite3_shutdown()] so it does
6655 ** not need to be threadsafe either. All other methods must be threadsafe
6656 ** in multithreaded applications.
6658 ** ^SQLite will never invoke xInit() more than once without an intervening
6659 ** call to xShutdown().
6661 ** [[the xCreate() page cache methods]]
6662 ** ^SQLite invokes the xCreate() method to construct a new cache instance.
6663 ** SQLite will typically create one cache instance for each open database file,
6664 ** though this is not guaranteed. ^The
6665 ** first parameter, szPage, is the size in bytes of the pages that must
6666 ** be allocated by the cache. ^szPage will always a power of two. ^The
6667 ** second parameter szExtra is a number of bytes of extra storage
6668 ** associated with each page cache entry. ^The szExtra parameter will
6669 ** a number less than 250. SQLite will use the
6670 ** extra szExtra bytes on each page to store metadata about the underlying
6671 ** database page on disk. The value passed into szExtra depends
6672 ** on the SQLite version, the target platform, and how SQLite was compiled.
6673 ** ^The third argument to xCreate(), bPurgeable, is true if the cache being
6674 ** created will be used to cache database pages of a file stored on disk, or
6675 ** false if it is used for an in-memory database. The cache implementation
6676 ** does not have to do anything special based with the value of bPurgeable;
6677 ** it is purely advisory. ^On a cache where bPurgeable is false, SQLite will
6678 ** never invoke xUnpin() except to deliberately delete a page.
6679 ** ^In other words, calls to xUnpin() on a cache with bPurgeable set to
6680 ** false will always have the "discard" flag set to true.
6681 ** ^Hence, a cache created with bPurgeable false will
6682 ** never contain any unpinned pages.
6684 ** [[the xCachesize() page cache method]]
6685 ** ^(The xCachesize() method may be called at any time by SQLite to set the
6686 ** suggested maximum cache-size (number of pages stored by) the cache
6687 ** instance passed as the first argument. This is the value configured using
6688 ** the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable
6689 ** parameter, the implementation is not required to do anything with this
6690 ** value; it is advisory only.
6692 ** [[the xPagecount() page cache methods]]
6693 ** The xPagecount() method must return the number of pages currently
6694 ** stored in the cache, both pinned and unpinned.
6696 ** [[the xFetch() page cache methods]]
6697 ** The xFetch() method locates a page in the cache and returns a pointer to
6698 ** an sqlite3_pcache_page object associated with that page, or a NULL pointer.
6699 ** The pBuf element of the returned sqlite3_pcache_page object will be a
6700 ** pointer to a buffer of szPage bytes used to store the content of a
6701 ** single database page. The pExtra element of sqlite3_pcache_page will be
6702 ** a pointer to the szExtra bytes of extra storage that SQLite has requested
6703 ** for each entry in the page cache.
6705 ** The page to be fetched is determined by the key. ^The minimum key value
6706 ** is 1. After it has been retrieved using xFetch, the page is considered
6707 ** to be "pinned".
6709 ** If the requested page is already in the page cache, then the page cache
6710 ** implementation must return a pointer to the page buffer with its content
6711 ** intact. If the requested page is not already in the cache, then the
6712 ** cache implementation should use the value of the createFlag
6713 ** parameter to help it determined what action to take:
6715 ** <table border=1 width=85% align=center>
6716 ** <tr><th> createFlag <th> Behaviour when page is not already in cache
6717 ** <tr><td> 0 <td> Do not allocate a new page. Return NULL.
6718 ** <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
6719 ** Otherwise return NULL.
6720 ** <tr><td> 2 <td> Make every effort to allocate a new page. Only return
6721 ** NULL if allocating a new page is effectively impossible.
6722 ** </table>
6724 ** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite
6725 ** will only use a createFlag of 2 after a prior call with a createFlag of 1
6726 ** failed.)^ In between the to xFetch() calls, SQLite may
6727 ** attempt to unpin one or more cache pages by spilling the content of
6728 ** pinned pages to disk and synching the operating system disk cache.
6730 ** [[the xUnpin() page cache method]]
6731 ** ^xUnpin() is called by SQLite with a pointer to a currently pinned page
6732 ** as its second argument. If the third parameter, discard, is non-zero,
6733 ** then the page must be evicted from the cache.
6734 ** ^If the discard parameter is
6735 ** zero, then the page may be discarded or retained at the discretion of
6736 ** page cache implementation. ^The page cache implementation
6737 ** may choose to evict unpinned pages at any time.
6739 ** The cache must not perform any reference counting. A single
6740 ** call to xUnpin() unpins the page regardless of the number of prior calls
6741 ** to xFetch().
6743 ** [[the xRekey() page cache methods]]
6744 ** The xRekey() method is used to change the key value associated with the
6745 ** page passed as the second argument. If the cache
6746 ** previously contains an entry associated with newKey, it must be
6747 ** discarded. ^Any prior cache entry associated with newKey is guaranteed not
6748 ** to be pinned.
6750 ** When SQLite calls the xTruncate() method, the cache must discard all
6751 ** existing cache entries with page numbers (keys) greater than or equal
6752 ** to the value of the iLimit parameter passed to xTruncate(). If any
6753 ** of these pages are pinned, they are implicitly unpinned, meaning that
6754 ** they can be safely discarded.
6756 ** [[the xDestroy() page cache method]]
6757 ** ^The xDestroy() method is used to delete a cache allocated by xCreate().
6758 ** All resources associated with the specified cache should be freed. ^After
6759 ** calling the xDestroy() method, SQLite considers the [sqlite3_pcache*]
6760 ** handle invalid, and will not use it with any other sqlite3_pcache_methods2
6761 ** functions.
6763 ** [[the xShrink() page cache method]]
6764 ** ^SQLite invokes the xShrink() method when it wants the page cache to
6765 ** free up as much of heap memory as possible. The page cache implementation
6766 ** is not obligated to free any memory, but well-behaved implementations should
6767 ** do their best.
6769 typedef struct sqlite3_pcache_methods2 sqlite3_pcache_methods2;
6770 struct sqlite3_pcache_methods2 {
6771 int iVersion;
6772 void *pArg;
6773 int (*xInit)(void*);
6774 void (*xShutdown)(void*);
6775 sqlite3_pcache *(*xCreate)(int szPage, int szExtra, int bPurgeable);
6776 void (*xCachesize)(sqlite3_pcache*, int nCachesize);
6777 int (*xPagecount)(sqlite3_pcache*);
6778 sqlite3_pcache_page *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
6779 void (*xUnpin)(sqlite3_pcache*, sqlite3_pcache_page*, int discard);
6780 void (*xRekey)(sqlite3_pcache*, sqlite3_pcache_page*,
6781 unsigned oldKey, unsigned newKey);
6782 void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
6783 void (*xDestroy)(sqlite3_pcache*);
6784 void (*xShrink)(sqlite3_pcache*);
6788 ** This is the obsolete pcache_methods object that has now been replaced
6789 ** by sqlite3_pcache_methods2. This object is not used by SQLite. It is
6790 ** retained in the header file for backwards compatibility only.
6792 typedef struct sqlite3_pcache_methods sqlite3_pcache_methods;
6793 struct sqlite3_pcache_methods {
6794 void *pArg;
6795 int (*xInit)(void*);
6796 void (*xShutdown)(void*);
6797 sqlite3_pcache *(*xCreate)(int szPage, int bPurgeable);
6798 void (*xCachesize)(sqlite3_pcache*, int nCachesize);
6799 int (*xPagecount)(sqlite3_pcache*);
6800 void *(*xFetch)(sqlite3_pcache*, unsigned key, int createFlag);
6801 void (*xUnpin)(sqlite3_pcache*, void*, int discard);
6802 void (*xRekey)(sqlite3_pcache*, void*, unsigned oldKey, unsigned newKey);
6803 void (*xTruncate)(sqlite3_pcache*, unsigned iLimit);
6804 void (*xDestroy)(sqlite3_pcache*);
6809 ** CAPI3REF: Online Backup Object
6811 ** The sqlite3_backup object records state information about an ongoing
6812 ** online backup operation. ^The sqlite3_backup object is created by
6813 ** a call to [sqlite3_backup_init()] and is destroyed by a call to
6814 ** [sqlite3_backup_finish()].
6816 ** See Also: [Using the SQLite Online Backup API]
6818 typedef struct sqlite3_backup sqlite3_backup;
6821 ** CAPI3REF: Online Backup API.
6823 ** The backup API copies the content of one database into another.
6824 ** It is useful either for creating backups of databases or
6825 ** for copying in-memory databases to or from persistent files.
6827 ** See Also: [Using the SQLite Online Backup API]
6829 ** ^SQLite holds a write transaction open on the destination database file
6830 ** for the duration of the backup operation.
6831 ** ^The source database is read-locked only while it is being read;
6832 ** it is not locked continuously for the entire backup operation.
6833 ** ^Thus, the backup may be performed on a live source database without
6834 ** preventing other database connections from
6835 ** reading or writing to the source database while the backup is underway.
6837 ** ^(To perform a backup operation:
6838 ** <ol>
6839 ** <li><b>sqlite3_backup_init()</b> is called once to initialize the
6840 ** backup,
6841 ** <li><b>sqlite3_backup_step()</b> is called one or more times to transfer
6842 ** the data between the two databases, and finally
6843 ** <li><b>sqlite3_backup_finish()</b> is called to release all resources
6844 ** associated with the backup operation.
6845 ** </ol>)^
6846 ** There should be exactly one call to sqlite3_backup_finish() for each
6847 ** successful call to sqlite3_backup_init().
6849 ** [[sqlite3_backup_init()]] <b>sqlite3_backup_init()</b>
6851 ** ^The D and N arguments to sqlite3_backup_init(D,N,S,M) are the
6852 ** [database connection] associated with the destination database
6853 ** and the database name, respectively.
6854 ** ^The database name is "main" for the main database, "temp" for the
6855 ** temporary database, or the name specified after the AS keyword in
6856 ** an [ATTACH] statement for an attached database.
6857 ** ^The S and M arguments passed to
6858 ** sqlite3_backup_init(D,N,S,M) identify the [database connection]
6859 ** and database name of the source database, respectively.
6860 ** ^The source and destination [database connections] (parameters S and D)
6861 ** must be different or else sqlite3_backup_init(D,N,S,M) will fail with
6862 ** an error.
6864 ** ^If an error occurs within sqlite3_backup_init(D,N,S,M), then NULL is
6865 ** returned and an error code and error message are stored in the
6866 ** destination [database connection] D.
6867 ** ^The error code and message for the failed call to sqlite3_backup_init()
6868 ** can be retrieved using the [sqlite3_errcode()], [sqlite3_errmsg()], and/or
6869 ** [sqlite3_errmsg16()] functions.
6870 ** ^A successful call to sqlite3_backup_init() returns a pointer to an
6871 ** [sqlite3_backup] object.
6872 ** ^The [sqlite3_backup] object may be used with the sqlite3_backup_step() and
6873 ** sqlite3_backup_finish() functions to perform the specified backup
6874 ** operation.
6876 ** [[sqlite3_backup_step()]] <b>sqlite3_backup_step()</b>
6878 ** ^Function sqlite3_backup_step(B,N) will copy up to N pages between
6879 ** the source and destination databases specified by [sqlite3_backup] object B.
6880 ** ^If N is negative, all remaining source pages are copied.
6881 ** ^If sqlite3_backup_step(B,N) successfully copies N pages and there
6882 ** are still more pages to be copied, then the function returns [SQLITE_OK].
6883 ** ^If sqlite3_backup_step(B,N) successfully finishes copying all pages
6884 ** from source to destination, then it returns [SQLITE_DONE].
6885 ** ^If an error occurs while running sqlite3_backup_step(B,N),
6886 ** then an [error code] is returned. ^As well as [SQLITE_OK] and
6887 ** [SQLITE_DONE], a call to sqlite3_backup_step() may return [SQLITE_READONLY],
6888 ** [SQLITE_NOMEM], [SQLITE_BUSY], [SQLITE_LOCKED], or an
6889 ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX] extended error code.
6891 ** ^(The sqlite3_backup_step() might return [SQLITE_READONLY] if
6892 ** <ol>
6893 ** <li> the destination database was opened read-only, or
6894 ** <li> the destination database is using write-ahead-log journaling
6895 ** and the destination and source page sizes differ, or
6896 ** <li> the destination database is an in-memory database and the
6897 ** destination and source page sizes differ.
6898 ** </ol>)^
6900 ** ^If sqlite3_backup_step() cannot obtain a required file-system lock, then
6901 ** the [sqlite3_busy_handler | busy-handler function]
6902 ** is invoked (if one is specified). ^If the
6903 ** busy-handler returns non-zero before the lock is available, then
6904 ** [SQLITE_BUSY] is returned to the caller. ^In this case the call to
6905 ** sqlite3_backup_step() can be retried later. ^If the source
6906 ** [database connection]
6907 ** is being used to write to the source database when sqlite3_backup_step()
6908 ** is called, then [SQLITE_LOCKED] is returned immediately. ^Again, in this
6909 ** case the call to sqlite3_backup_step() can be retried later on. ^(If
6910 ** [SQLITE_IOERR_ACCESS | SQLITE_IOERR_XXX], [SQLITE_NOMEM], or
6911 ** [SQLITE_READONLY] is returned, then
6912 ** there is no point in retrying the call to sqlite3_backup_step(). These
6913 ** errors are considered fatal.)^ The application must accept
6914 ** that the backup operation has failed and pass the backup operation handle
6915 ** to the sqlite3_backup_finish() to release associated resources.
6917 ** ^The first call to sqlite3_backup_step() obtains an exclusive lock
6918 ** on the destination file. ^The exclusive lock is not released until either
6919 ** sqlite3_backup_finish() is called or the backup operation is complete
6920 ** and sqlite3_backup_step() returns [SQLITE_DONE]. ^Every call to
6921 ** sqlite3_backup_step() obtains a [shared lock] on the source database that
6922 ** lasts for the duration of the sqlite3_backup_step() call.
6923 ** ^Because the source database is not locked between calls to
6924 ** sqlite3_backup_step(), the source database may be modified mid-way
6925 ** through the backup process. ^If the source database is modified by an
6926 ** external process or via a database connection other than the one being
6927 ** used by the backup operation, then the backup will be automatically
6928 ** restarted by the next call to sqlite3_backup_step(). ^If the source
6929 ** database is modified by the using the same database connection as is used
6930 ** by the backup operation, then the backup database is automatically
6931 ** updated at the same time.
6933 ** [[sqlite3_backup_finish()]] <b>sqlite3_backup_finish()</b>
6935 ** When sqlite3_backup_step() has returned [SQLITE_DONE], or when the
6936 ** application wishes to abandon the backup operation, the application
6937 ** should destroy the [sqlite3_backup] by passing it to sqlite3_backup_finish().
6938 ** ^The sqlite3_backup_finish() interfaces releases all
6939 ** resources associated with the [sqlite3_backup] object.
6940 ** ^If sqlite3_backup_step() has not yet returned [SQLITE_DONE], then any
6941 ** active write-transaction on the destination database is rolled back.
6942 ** The [sqlite3_backup] object is invalid
6943 ** and may not be used following a call to sqlite3_backup_finish().
6945 ** ^The value returned by sqlite3_backup_finish is [SQLITE_OK] if no
6946 ** sqlite3_backup_step() errors occurred, regardless or whether or not
6947 ** sqlite3_backup_step() completed.
6948 ** ^If an out-of-memory condition or IO error occurred during any prior
6949 ** sqlite3_backup_step() call on the same [sqlite3_backup] object, then
6950 ** sqlite3_backup_finish() returns the corresponding [error code].
6952 ** ^A return of [SQLITE_BUSY] or [SQLITE_LOCKED] from sqlite3_backup_step()
6953 ** is not a permanent error and does not affect the return value of
6954 ** sqlite3_backup_finish().
6956 ** [[sqlite3_backup__remaining()]] [[sqlite3_backup_pagecount()]]
6957 ** <b>sqlite3_backup_remaining() and sqlite3_backup_pagecount()</b>
6959 ** ^Each call to sqlite3_backup_step() sets two values inside
6960 ** the [sqlite3_backup] object: the number of pages still to be backed
6961 ** up and the total number of pages in the source database file.
6962 ** The sqlite3_backup_remaining() and sqlite3_backup_pagecount() interfaces
6963 ** retrieve these two values, respectively.
6965 ** ^The values returned by these functions are only updated by
6966 ** sqlite3_backup_step(). ^If the source database is modified during a backup
6967 ** operation, then the values are not updated to account for any extra
6968 ** pages that need to be updated or the size of the source database file
6969 ** changing.
6971 ** <b>Concurrent Usage of Database Handles</b>
6973 ** ^The source [database connection] may be used by the application for other
6974 ** purposes while a backup operation is underway or being initialized.
6975 ** ^If SQLite is compiled and configured to support threadsafe database
6976 ** connections, then the source database connection may be used concurrently
6977 ** from within other threads.
6979 ** However, the application must guarantee that the destination
6980 ** [database connection] is not passed to any other API (by any thread) after
6981 ** sqlite3_backup_init() is called and before the corresponding call to
6982 ** sqlite3_backup_finish(). SQLite does not currently check to see
6983 ** if the application incorrectly accesses the destination [database connection]
6984 ** and so no error code is reported, but the operations may malfunction
6985 ** nevertheless. Use of the destination database connection while a
6986 ** backup is in progress might also also cause a mutex deadlock.
6988 ** If running in [shared cache mode], the application must
6989 ** guarantee that the shared cache used by the destination database
6990 ** is not accessed while the backup is running. In practice this means
6991 ** that the application must guarantee that the disk file being
6992 ** backed up to is not accessed by any connection within the process,
6993 ** not just the specific connection that was passed to sqlite3_backup_init().
6995 ** The [sqlite3_backup] object itself is partially threadsafe. Multiple
6996 ** threads may safely make multiple concurrent calls to sqlite3_backup_step().
6997 ** However, the sqlite3_backup_remaining() and sqlite3_backup_pagecount()
6998 ** APIs are not strictly speaking threadsafe. If they are invoked at the
6999 ** same time as another thread is invoking sqlite3_backup_step() it is
7000 ** possible that they return invalid values.
7002 SQLITE_API sqlite3_backup *sqlite3_backup_init(
7003 sqlite3 *pDest, /* Destination database handle */
7004 const char *zDestName, /* Destination database name */
7005 sqlite3 *pSource, /* Source database handle */
7006 const char *zSourceName /* Source database name */
7008 SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage);
7009 SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p);
7010 SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p);
7011 SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p);
7014 ** CAPI3REF: Unlock Notification
7016 ** ^When running in shared-cache mode, a database operation may fail with
7017 ** an [SQLITE_LOCKED] error if the required locks on the shared-cache or
7018 ** individual tables within the shared-cache cannot be obtained. See
7019 ** [SQLite Shared-Cache Mode] for a description of shared-cache locking.
7020 ** ^This API may be used to register a callback that SQLite will invoke
7021 ** when the connection currently holding the required lock relinquishes it.
7022 ** ^This API is only available if the library was compiled with the
7023 ** [SQLITE_ENABLE_UNLOCK_NOTIFY] C-preprocessor symbol defined.
7025 ** See Also: [Using the SQLite Unlock Notification Feature].
7027 ** ^Shared-cache locks are released when a database connection concludes
7028 ** its current transaction, either by committing it or rolling it back.
7030 ** ^When a connection (known as the blocked connection) fails to obtain a
7031 ** shared-cache lock and SQLITE_LOCKED is returned to the caller, the
7032 ** identity of the database connection (the blocking connection) that
7033 ** has locked the required resource is stored internally. ^After an
7034 ** application receives an SQLITE_LOCKED error, it may call the
7035 ** sqlite3_unlock_notify() method with the blocked connection handle as
7036 ** the first argument to register for a callback that will be invoked
7037 ** when the blocking connections current transaction is concluded. ^The
7038 ** callback is invoked from within the [sqlite3_step] or [sqlite3_close]
7039 ** call that concludes the blocking connections transaction.
7041 ** ^(If sqlite3_unlock_notify() is called in a multi-threaded application,
7042 ** there is a chance that the blocking connection will have already
7043 ** concluded its transaction by the time sqlite3_unlock_notify() is invoked.
7044 ** If this happens, then the specified callback is invoked immediately,
7045 ** from within the call to sqlite3_unlock_notify().)^
7047 ** ^If the blocked connection is attempting to obtain a write-lock on a
7048 ** shared-cache table, and more than one other connection currently holds
7049 ** a read-lock on the same table, then SQLite arbitrarily selects one of
7050 ** the other connections to use as the blocking connection.
7052 ** ^(There may be at most one unlock-notify callback registered by a
7053 ** blocked connection. If sqlite3_unlock_notify() is called when the
7054 ** blocked connection already has a registered unlock-notify callback,
7055 ** then the new callback replaces the old.)^ ^If sqlite3_unlock_notify() is
7056 ** called with a NULL pointer as its second argument, then any existing
7057 ** unlock-notify callback is canceled. ^The blocked connections
7058 ** unlock-notify callback may also be canceled by closing the blocked
7059 ** connection using [sqlite3_close()].
7061 ** The unlock-notify callback is not reentrant. If an application invokes
7062 ** any sqlite3_xxx API functions from within an unlock-notify callback, a
7063 ** crash or deadlock may be the result.
7065 ** ^Unless deadlock is detected (see below), sqlite3_unlock_notify() always
7066 ** returns SQLITE_OK.
7068 ** <b>Callback Invocation Details</b>
7070 ** When an unlock-notify callback is registered, the application provides a
7071 ** single void* pointer that is passed to the callback when it is invoked.
7072 ** However, the signature of the callback function allows SQLite to pass
7073 ** it an array of void* context pointers. The first argument passed to
7074 ** an unlock-notify callback is a pointer to an array of void* pointers,
7075 ** and the second is the number of entries in the array.
7077 ** When a blocking connections transaction is concluded, there may be
7078 ** more than one blocked connection that has registered for an unlock-notify
7079 ** callback. ^If two or more such blocked connections have specified the
7080 ** same callback function, then instead of invoking the callback function
7081 ** multiple times, it is invoked once with the set of void* context pointers
7082 ** specified by the blocked connections bundled together into an array.
7083 ** This gives the application an opportunity to prioritize any actions
7084 ** related to the set of unblocked database connections.
7086 ** <b>Deadlock Detection</b>
7088 ** Assuming that after registering for an unlock-notify callback a
7089 ** database waits for the callback to be issued before taking any further
7090 ** action (a reasonable assumption), then using this API may cause the
7091 ** application to deadlock. For example, if connection X is waiting for
7092 ** connection Y's transaction to be concluded, and similarly connection
7093 ** Y is waiting on connection X's transaction, then neither connection
7094 ** will proceed and the system may remain deadlocked indefinitely.
7096 ** To avoid this scenario, the sqlite3_unlock_notify() performs deadlock
7097 ** detection. ^If a given call to sqlite3_unlock_notify() would put the
7098 ** system in a deadlocked state, then SQLITE_LOCKED is returned and no
7099 ** unlock-notify callback is registered. The system is said to be in
7100 ** a deadlocked state if connection A has registered for an unlock-notify
7101 ** callback on the conclusion of connection B's transaction, and connection
7102 ** B has itself registered for an unlock-notify callback when connection
7103 ** A's transaction is concluded. ^Indirect deadlock is also detected, so
7104 ** the system is also considered to be deadlocked if connection B has
7105 ** registered for an unlock-notify callback on the conclusion of connection
7106 ** C's transaction, where connection C is waiting on connection A. ^Any
7107 ** number of levels of indirection are allowed.
7109 ** <b>The "DROP TABLE" Exception</b>
7111 ** When a call to [sqlite3_step()] returns SQLITE_LOCKED, it is almost
7112 ** always appropriate to call sqlite3_unlock_notify(). There is however,
7113 ** one exception. When executing a "DROP TABLE" or "DROP INDEX" statement,
7114 ** SQLite checks if there are any currently executing SELECT statements
7115 ** that belong to the same connection. If there are, SQLITE_LOCKED is
7116 ** returned. In this case there is no "blocking connection", so invoking
7117 ** sqlite3_unlock_notify() results in the unlock-notify callback being
7118 ** invoked immediately. If the application then re-attempts the "DROP TABLE"
7119 ** or "DROP INDEX" query, an infinite loop might be the result.
7121 ** One way around this problem is to check the extended error code returned
7122 ** by an sqlite3_step() call. ^(If there is a blocking connection, then the
7123 ** extended error code is set to SQLITE_LOCKED_SHAREDCACHE. Otherwise, in
7124 ** the special "DROP TABLE/INDEX" case, the extended error code is just
7125 ** SQLITE_LOCKED.)^
7127 SQLITE_API int sqlite3_unlock_notify(
7128 sqlite3 *pBlocked, /* Waiting connection */
7129 void (*xNotify)(void **apArg, int nArg), /* Callback function to invoke */
7130 void *pNotifyArg /* Argument to pass to xNotify */
7135 ** CAPI3REF: String Comparison
7137 ** ^The [sqlite3_strnicmp()] API allows applications and extensions to
7138 ** compare the contents of two buffers containing UTF-8 strings in a
7139 ** case-independent fashion, using the same definition of case independence
7140 ** that SQLite uses internally when comparing identifiers.
7142 SQLITE_API int sqlite3_strnicmp(const char *, const char *, int);
7145 ** CAPI3REF: Error Logging Interface
7147 ** ^The [sqlite3_log()] interface writes a message into the error log
7148 ** established by the [SQLITE_CONFIG_LOG] option to [sqlite3_config()].
7149 ** ^If logging is enabled, the zFormat string and subsequent arguments are
7150 ** used with [sqlite3_snprintf()] to generate the final output string.
7152 ** The sqlite3_log() interface is intended for use by extensions such as
7153 ** virtual tables, collating functions, and SQL functions. While there is
7154 ** nothing to prevent an application from calling sqlite3_log(), doing so
7155 ** is considered bad form.
7157 ** The zFormat string must not be NULL.
7159 ** To avoid deadlocks and other threading problems, the sqlite3_log() routine
7160 ** will not use dynamically allocated memory. The log message is stored in
7161 ** a fixed-length buffer on the stack. If the log message is longer than
7162 ** a few hundred characters, it will be truncated to the length of the
7163 ** buffer.
7165 SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...);
7168 ** CAPI3REF: Write-Ahead Log Commit Hook
7170 ** ^The [sqlite3_wal_hook()] function is used to register a callback that
7171 ** will be invoked each time a database connection commits data to a
7172 ** [write-ahead log] (i.e. whenever a transaction is committed in
7173 ** [journal_mode | journal_mode=WAL mode]).
7175 ** ^The callback is invoked by SQLite after the commit has taken place and
7176 ** the associated write-lock on the database released, so the implementation
7177 ** may read, write or [checkpoint] the database as required.
7179 ** ^The first parameter passed to the callback function when it is invoked
7180 ** is a copy of the third parameter passed to sqlite3_wal_hook() when
7181 ** registering the callback. ^The second is a copy of the database handle.
7182 ** ^The third parameter is the name of the database that was written to -
7183 ** either "main" or the name of an [ATTACH]-ed database. ^The fourth parameter
7184 ** is the number of pages currently in the write-ahead log file,
7185 ** including those that were just committed.
7187 ** The callback function should normally return [SQLITE_OK]. ^If an error
7188 ** code is returned, that error will propagate back up through the
7189 ** SQLite code base to cause the statement that provoked the callback
7190 ** to report an error, though the commit will have still occurred. If the
7191 ** callback returns [SQLITE_ROW] or [SQLITE_DONE], or if it returns a value
7192 ** that does not correspond to any valid SQLite error code, the results
7193 ** are undefined.
7195 ** A single database handle may have at most a single write-ahead log callback
7196 ** registered at one time. ^Calling [sqlite3_wal_hook()] replaces any
7197 ** previously registered write-ahead log callback. ^Note that the
7198 ** [sqlite3_wal_autocheckpoint()] interface and the
7199 ** [wal_autocheckpoint pragma] both invoke [sqlite3_wal_hook()] and will
7200 ** those overwrite any prior [sqlite3_wal_hook()] settings.
7202 SQLITE_API void *sqlite3_wal_hook(
7203 sqlite3*,
7204 int(*)(void *,sqlite3*,const char*,int),
7205 void*
7209 ** CAPI3REF: Configure an auto-checkpoint
7211 ** ^The [sqlite3_wal_autocheckpoint(D,N)] is a wrapper around
7212 ** [sqlite3_wal_hook()] that causes any database on [database connection] D
7213 ** to automatically [checkpoint]
7214 ** after committing a transaction if there are N or
7215 ** more frames in the [write-ahead log] file. ^Passing zero or
7216 ** a negative value as the nFrame parameter disables automatic
7217 ** checkpoints entirely.
7219 ** ^The callback registered by this function replaces any existing callback
7220 ** registered using [sqlite3_wal_hook()]. ^Likewise, registering a callback
7221 ** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism
7222 ** configured by this function.
7224 ** ^The [wal_autocheckpoint pragma] can be used to invoke this interface
7225 ** from SQL.
7227 ** ^Every new [database connection] defaults to having the auto-checkpoint
7228 ** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT]
7229 ** pages. The use of this interface
7230 ** is only necessary if the default setting is found to be suboptimal
7231 ** for a particular application.
7233 SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int N);
7236 ** CAPI3REF: Checkpoint a database
7238 ** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X
7239 ** on [database connection] D to be [checkpointed]. ^If X is NULL or an
7240 ** empty string, then a checkpoint is run on all databases of
7241 ** connection D. ^If the database connection D is not in
7242 ** [WAL | write-ahead log mode] then this interface is a harmless no-op.
7244 ** ^The [wal_checkpoint pragma] can be used to invoke this interface
7245 ** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the
7246 ** [wal_autocheckpoint pragma] can be used to cause this interface to be
7247 ** run whenever the WAL reaches a certain size threshold.
7249 ** See also: [sqlite3_wal_checkpoint_v2()]
7251 SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb);
7254 ** CAPI3REF: Checkpoint a database
7256 ** Run a checkpoint operation on WAL database zDb attached to database
7257 ** handle db. The specific operation is determined by the value of the
7258 ** eMode parameter:
7260 ** <dl>
7261 ** <dt>SQLITE_CHECKPOINT_PASSIVE<dd>
7262 ** Checkpoint as many frames as possible without waiting for any database
7263 ** readers or writers to finish. Sync the db file if all frames in the log
7264 ** are checkpointed. This mode is the same as calling
7265 ** sqlite3_wal_checkpoint(). The busy-handler callback is never invoked.
7267 ** <dt>SQLITE_CHECKPOINT_FULL<dd>
7268 ** This mode blocks (calls the busy-handler callback) until there is no
7269 ** database writer and all readers are reading from the most recent database
7270 ** snapshot. It then checkpoints all frames in the log file and syncs the
7271 ** database file. This call blocks database writers while it is running,
7272 ** but not database readers.
7274 ** <dt>SQLITE_CHECKPOINT_RESTART<dd>
7275 ** This mode works the same way as SQLITE_CHECKPOINT_FULL, except after
7276 ** checkpointing the log file it blocks (calls the busy-handler callback)
7277 ** until all readers are reading from the database file only. This ensures
7278 ** that the next client to write to the database file restarts the log file
7279 ** from the beginning. This call blocks database writers while it is running,
7280 ** but not database readers.
7281 ** </dl>
7283 ** If pnLog is not NULL, then *pnLog is set to the total number of frames in
7284 ** the log file before returning. If pnCkpt is not NULL, then *pnCkpt is set to
7285 ** the total number of checkpointed frames (including any that were already
7286 ** checkpointed when this function is called). *pnLog and *pnCkpt may be
7287 ** populated even if sqlite3_wal_checkpoint_v2() returns other than SQLITE_OK.
7288 ** If no values are available because of an error, they are both set to -1
7289 ** before returning to communicate this to the caller.
7291 ** All calls obtain an exclusive "checkpoint" lock on the database file. If
7292 ** any other process is running a checkpoint operation at the same time, the
7293 ** lock cannot be obtained and SQLITE_BUSY is returned. Even if there is a
7294 ** busy-handler configured, it will not be invoked in this case.
7296 ** The SQLITE_CHECKPOINT_FULL and RESTART modes also obtain the exclusive
7297 ** "writer" lock on the database file. If the writer lock cannot be obtained
7298 ** immediately, and a busy-handler is configured, it is invoked and the writer
7299 ** lock retried until either the busy-handler returns 0 or the lock is
7300 ** successfully obtained. The busy-handler is also invoked while waiting for
7301 ** database readers as described above. If the busy-handler returns 0 before
7302 ** the writer lock is obtained or while waiting for database readers, the
7303 ** checkpoint operation proceeds from that point in the same way as
7304 ** SQLITE_CHECKPOINT_PASSIVE - checkpointing as many frames as possible
7305 ** without blocking any further. SQLITE_BUSY is returned in this case.
7307 ** If parameter zDb is NULL or points to a zero length string, then the
7308 ** specified operation is attempted on all WAL databases. In this case the
7309 ** values written to output parameters *pnLog and *pnCkpt are undefined. If
7310 ** an SQLITE_BUSY error is encountered when processing one or more of the
7311 ** attached WAL databases, the operation is still attempted on any remaining
7312 ** attached databases and SQLITE_BUSY is returned to the caller. If any other
7313 ** error occurs while processing an attached database, processing is abandoned
7314 ** and the error code returned to the caller immediately. If no error
7315 ** (SQLITE_BUSY or otherwise) is encountered while processing the attached
7316 ** databases, SQLITE_OK is returned.
7318 ** If database zDb is the name of an attached database that is not in WAL
7319 ** mode, SQLITE_OK is returned and both *pnLog and *pnCkpt set to -1. If
7320 ** zDb is not NULL (or a zero length string) and is not the name of any
7321 ** attached database, SQLITE_ERROR is returned to the caller.
7323 SQLITE_API int sqlite3_wal_checkpoint_v2(
7324 sqlite3 *db, /* Database handle */
7325 const char *zDb, /* Name of attached database (or NULL) */
7326 int eMode, /* SQLITE_CHECKPOINT_* value */
7327 int *pnLog, /* OUT: Size of WAL log in frames */
7328 int *pnCkpt /* OUT: Total number of frames checkpointed */
7332 ** CAPI3REF: Checkpoint operation parameters
7334 ** These constants can be used as the 3rd parameter to
7335 ** [sqlite3_wal_checkpoint_v2()]. See the [sqlite3_wal_checkpoint_v2()]
7336 ** documentation for additional information about the meaning and use of
7337 ** each of these values.
7339 #define SQLITE_CHECKPOINT_PASSIVE 0
7340 #define SQLITE_CHECKPOINT_FULL 1
7341 #define SQLITE_CHECKPOINT_RESTART 2
7344 ** CAPI3REF: Virtual Table Interface Configuration
7346 ** This function may be called by either the [xConnect] or [xCreate] method
7347 ** of a [virtual table] implementation to configure
7348 ** various facets of the virtual table interface.
7350 ** If this interface is invoked outside the context of an xConnect or
7351 ** xCreate virtual table method then the behavior is undefined.
7353 ** At present, there is only one option that may be configured using
7354 ** this function. (See [SQLITE_VTAB_CONSTRAINT_SUPPORT].) Further options
7355 ** may be added in the future.
7357 SQLITE_API int sqlite3_vtab_config(sqlite3*, int op, ...);
7360 ** CAPI3REF: Virtual Table Configuration Options
7362 ** These macros define the various options to the
7363 ** [sqlite3_vtab_config()] interface that [virtual table] implementations
7364 ** can use to customize and optimize their behavior.
7366 ** <dl>
7367 ** <dt>SQLITE_VTAB_CONSTRAINT_SUPPORT
7368 ** <dd>Calls of the form
7369 ** [sqlite3_vtab_config](db,SQLITE_VTAB_CONSTRAINT_SUPPORT,X) are supported,
7370 ** where X is an integer. If X is zero, then the [virtual table] whose
7371 ** [xCreate] or [xConnect] method invoked [sqlite3_vtab_config()] does not
7372 ** support constraints. In this configuration (which is the default) if
7373 ** a call to the [xUpdate] method returns [SQLITE_CONSTRAINT], then the entire
7374 ** statement is rolled back as if [ON CONFLICT | OR ABORT] had been
7375 ** specified as part of the users SQL statement, regardless of the actual
7376 ** ON CONFLICT mode specified.
7378 ** If X is non-zero, then the virtual table implementation guarantees
7379 ** that if [xUpdate] returns [SQLITE_CONSTRAINT], it will do so before
7380 ** any modifications to internal or persistent data structures have been made.
7381 ** If the [ON CONFLICT] mode is ABORT, FAIL, IGNORE or ROLLBACK, SQLite
7382 ** is able to roll back a statement or database transaction, and abandon
7383 ** or continue processing the current SQL statement as appropriate.
7384 ** If the ON CONFLICT mode is REPLACE and the [xUpdate] method returns
7385 ** [SQLITE_CONSTRAINT], SQLite handles this as if the ON CONFLICT mode
7386 ** had been ABORT.
7388 ** Virtual table implementations that are required to handle OR REPLACE
7389 ** must do so within the [xUpdate] method. If a call to the
7390 ** [sqlite3_vtab_on_conflict()] function indicates that the current ON
7391 ** CONFLICT policy is REPLACE, the virtual table implementation should
7392 ** silently replace the appropriate rows within the xUpdate callback and
7393 ** return SQLITE_OK. Or, if this is not possible, it may return
7394 ** SQLITE_CONSTRAINT, in which case SQLite falls back to OR ABORT
7395 ** constraint handling.
7396 ** </dl>
7398 #define SQLITE_VTAB_CONSTRAINT_SUPPORT 1
7401 ** CAPI3REF: Determine The Virtual Table Conflict Policy
7403 ** This function may only be called from within a call to the [xUpdate] method
7404 ** of a [virtual table] implementation for an INSERT or UPDATE operation. ^The
7405 ** value returned is one of [SQLITE_ROLLBACK], [SQLITE_IGNORE], [SQLITE_FAIL],
7406 ** [SQLITE_ABORT], or [SQLITE_REPLACE], according to the [ON CONFLICT] mode
7407 ** of the SQL statement that triggered the call to the [xUpdate] method of the
7408 ** [virtual table].
7410 SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
7413 ** CAPI3REF: Conflict resolution modes
7415 ** These constants are returned by [sqlite3_vtab_on_conflict()] to
7416 ** inform a [virtual table] implementation what the [ON CONFLICT] mode
7417 ** is for the SQL statement being evaluated.
7419 ** Note that the [SQLITE_IGNORE] constant is also used as a potential
7420 ** return value from the [sqlite3_set_authorizer()] callback and that
7421 ** [SQLITE_ABORT] is also a [result code].
7423 #define SQLITE_ROLLBACK 1
7424 /* #define SQLITE_IGNORE 2 // Also used by sqlite3_authorizer() callback */
7425 #define SQLITE_FAIL 3
7426 /* #define SQLITE_ABORT 4 // Also an error code */
7427 #define SQLITE_REPLACE 5
7432 ** Undo the hack that converts floating point types to integer for
7433 ** builds on processors without floating point support.
7435 #ifdef SQLITE_OMIT_FLOATING_POINT
7436 # undef double
7437 #endif
7439 #if 0
7440 } /* End of the 'extern "C"' block */
7441 #endif
7442 #endif
7445 ** 2010 August 30
7447 ** The author disclaims copyright to this source code. In place of
7448 ** a legal notice, here is a blessing:
7450 ** May you do good and not evil.
7451 ** May you find forgiveness for yourself and forgive others.
7452 ** May you share freely, never taking more than you give.
7454 *************************************************************************
7457 #ifndef _SQLITE3RTREE_H_
7458 #define _SQLITE3RTREE_H_
7461 #if 0
7462 extern "C" {
7463 #endif
7465 typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
7468 ** Register a geometry callback named zGeom that can be used as part of an
7469 ** R-Tree geometry query as follows:
7471 ** SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
7473 SQLITE_API int sqlite3_rtree_geometry_callback(
7474 sqlite3 *db,
7475 const char *zGeom,
7476 int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
7477 void *pContext
7482 ** A pointer to a structure of the following type is passed as the first
7483 ** argument to callbacks registered using rtree_geometry_callback().
7485 struct sqlite3_rtree_geometry {
7486 void *pContext; /* Copy of pContext passed to s_r_g_c() */
7487 int nParam; /* Size of array aParam[] */
7488 double *aParam; /* Parameters passed to SQL geom function */
7489 void *pUser; /* Callback implementation user data */
7490 void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */
7494 #if 0
7495 } /* end of the 'extern "C"' block */
7496 #endif
7498 #endif /* ifndef _SQLITE3RTREE_H_ */
7501 /************** End of sqlite3.h *********************************************/
7502 /************** Continuing where we left off in sqliteInt.h ******************/
7503 /************** Include hash.h in the middle of sqliteInt.h ******************/
7504 /************** Begin file hash.h ********************************************/
7506 ** 2001 September 22
7508 ** The author disclaims copyright to this source code. In place of
7509 ** a legal notice, here is a blessing:
7511 ** May you do good and not evil.
7512 ** May you find forgiveness for yourself and forgive others.
7513 ** May you share freely, never taking more than you give.
7515 *************************************************************************
7516 ** This is the header file for the generic hash-table implemenation
7517 ** used in SQLite.
7519 #ifndef _SQLITE_HASH_H_
7520 #define _SQLITE_HASH_H_
7522 /* Forward declarations of structures. */
7523 typedef struct Hash Hash;
7524 typedef struct HashElem HashElem;
7526 /* A complete hash table is an instance of the following structure.
7527 ** The internals of this structure are intended to be opaque -- client
7528 ** code should not attempt to access or modify the fields of this structure
7529 ** directly. Change this structure only by using the routines below.
7530 ** However, some of the "procedures" and "functions" for modifying and
7531 ** accessing this structure are really macros, so we can't really make
7532 ** this structure opaque.
7534 ** All elements of the hash table are on a single doubly-linked list.
7535 ** Hash.first points to the head of this list.
7537 ** There are Hash.htsize buckets. Each bucket points to a spot in
7538 ** the global doubly-linked list. The contents of the bucket are the
7539 ** element pointed to plus the next _ht.count-1 elements in the list.
7541 ** Hash.htsize and Hash.ht may be zero. In that case lookup is done
7542 ** by a linear search of the global list. For small tables, the
7543 ** Hash.ht table is never allocated because if there are few elements
7544 ** in the table, it is faster to do a linear search than to manage
7545 ** the hash table.
7547 struct Hash {
7548 unsigned int htsize; /* Number of buckets in the hash table */
7549 unsigned int count; /* Number of entries in this table */
7550 HashElem *first; /* The first element of the array */
7551 struct _ht { /* the hash table */
7552 int count; /* Number of entries with this hash */
7553 HashElem *chain; /* Pointer to first entry with this hash */
7554 } *ht;
7557 /* Each element in the hash table is an instance of the following
7558 ** structure. All elements are stored on a single doubly-linked list.
7560 ** Again, this structure is intended to be opaque, but it can't really
7561 ** be opaque because it is used by macros.
7563 struct HashElem {
7564 HashElem *next, *prev; /* Next and previous elements in the table */
7565 void *data; /* Data associated with this element */
7566 const char *pKey; int nKey; /* Key associated with this element */
7570 ** Access routines. To delete, insert a NULL pointer.
7572 SQLITE_PRIVATE void sqlite3HashInit(Hash*);
7573 SQLITE_PRIVATE void *sqlite3HashInsert(Hash*, const char *pKey, int nKey, void *pData);
7574 SQLITE_PRIVATE void *sqlite3HashFind(const Hash*, const char *pKey, int nKey);
7575 SQLITE_PRIVATE void sqlite3HashClear(Hash*);
7578 ** Macros for looping over all elements of a hash table. The idiom is
7579 ** like this:
7581 ** Hash h;
7582 ** HashElem *p;
7583 ** ...
7584 ** for(p=sqliteHashFirst(&h); p; p=sqliteHashNext(p)){
7585 ** SomeStructure *pData = sqliteHashData(p);
7586 ** // do something with pData
7587 ** }
7589 #define sqliteHashFirst(H) ((H)->first)
7590 #define sqliteHashNext(E) ((E)->next)
7591 #define sqliteHashData(E) ((E)->data)
7592 /* #define sqliteHashKey(E) ((E)->pKey) // NOT USED */
7593 /* #define sqliteHashKeysize(E) ((E)->nKey) // NOT USED */
7596 ** Number of entries in a hash table
7598 /* #define sqliteHashCount(H) ((H)->count) // NOT USED */
7600 #endif /* _SQLITE_HASH_H_ */
7602 /************** End of hash.h ************************************************/
7603 /************** Continuing where we left off in sqliteInt.h ******************/
7604 /************** Include parse.h in the middle of sqliteInt.h *****************/
7605 /************** Begin file parse.h *******************************************/
7606 #define TK_SEMI 1
7607 #define TK_EXPLAIN 2
7608 #define TK_QUERY 3
7609 #define TK_PLAN 4
7610 #define TK_BEGIN 5
7611 #define TK_TRANSACTION 6
7612 #define TK_DEFERRED 7
7613 #define TK_IMMEDIATE 8
7614 #define TK_EXCLUSIVE 9
7615 #define TK_COMMIT 10
7616 #define TK_END 11
7617 #define TK_ROLLBACK 12
7618 #define TK_SAVEPOINT 13
7619 #define TK_RELEASE 14
7620 #define TK_TO 15
7621 #define TK_TABLE 16
7622 #define TK_CREATE 17
7623 #define TK_IF 18
7624 #define TK_NOT 19
7625 #define TK_EXISTS 20
7626 #define TK_TEMP 21
7627 #define TK_LP 22
7628 #define TK_RP 23
7629 #define TK_AS 24
7630 #define TK_COMMA 25
7631 #define TK_ID 26
7632 #define TK_INDEXED 27
7633 #define TK_ABORT 28
7634 #define TK_ACTION 29
7635 #define TK_AFTER 30
7636 #define TK_ANALYZE 31
7637 #define TK_ASC 32
7638 #define TK_ATTACH 33
7639 #define TK_BEFORE 34
7640 #define TK_BY 35
7641 #define TK_CASCADE 36
7642 #define TK_CAST 37
7643 #define TK_COLUMNKW 38
7644 #define TK_CONFLICT 39
7645 #define TK_DATABASE 40
7646 #define TK_DESC 41
7647 #define TK_DETACH 42
7648 #define TK_EACH 43
7649 #define TK_FAIL 44
7650 #define TK_FOR 45
7651 #define TK_IGNORE 46
7652 #define TK_INITIALLY 47
7653 #define TK_INSTEAD 48
7654 #define TK_LIKE_KW 49
7655 #define TK_MATCH 50
7656 #define TK_NO 51
7657 #define TK_KEY 52
7658 #define TK_OF 53
7659 #define TK_OFFSET 54
7660 #define TK_PRAGMA 55
7661 #define TK_RAISE 56
7662 #define TK_REPLACE 57
7663 #define TK_RESTRICT 58
7664 #define TK_ROW 59
7665 #define TK_TRIGGER 60
7666 #define TK_VACUUM 61
7667 #define TK_VIEW 62
7668 #define TK_VIRTUAL 63
7669 #define TK_REINDEX 64
7670 #define TK_RENAME 65
7671 #define TK_CTIME_KW 66
7672 #define TK_ANY 67
7673 #define TK_OR 68
7674 #define TK_AND 69
7675 #define TK_IS 70
7676 #define TK_BETWEEN 71
7677 #define TK_IN 72
7678 #define TK_ISNULL 73
7679 #define TK_NOTNULL 74
7680 #define TK_NE 75
7681 #define TK_EQ 76
7682 #define TK_GT 77
7683 #define TK_LE 78
7684 #define TK_LT 79
7685 #define TK_GE 80
7686 #define TK_ESCAPE 81
7687 #define TK_BITAND 82
7688 #define TK_BITOR 83
7689 #define TK_LSHIFT 84
7690 #define TK_RSHIFT 85
7691 #define TK_PLUS 86
7692 #define TK_MINUS 87
7693 #define TK_STAR 88
7694 #define TK_SLASH 89
7695 #define TK_REM 90
7696 #define TK_CONCAT 91
7697 #define TK_COLLATE 92
7698 #define TK_BITNOT 93
7699 #define TK_STRING 94
7700 #define TK_JOIN_KW 95
7701 #define TK_CONSTRAINT 96
7702 #define TK_DEFAULT 97
7703 #define TK_NULL 98
7704 #define TK_PRIMARY 99
7705 #define TK_UNIQUE 100
7706 #define TK_CHECK 101
7707 #define TK_REFERENCES 102
7708 #define TK_AUTOINCR 103
7709 #define TK_ON 104
7710 #define TK_INSERT 105
7711 #define TK_DELETE 106
7712 #define TK_UPDATE 107
7713 #define TK_SET 108
7714 #define TK_DEFERRABLE 109
7715 #define TK_FOREIGN 110
7716 #define TK_DROP 111
7717 #define TK_UNION 112
7718 #define TK_ALL 113
7719 #define TK_EXCEPT 114
7720 #define TK_INTERSECT 115
7721 #define TK_SELECT 116
7722 #define TK_DISTINCT 117
7723 #define TK_DOT 118
7724 #define TK_FROM 119
7725 #define TK_JOIN 120
7726 #define TK_USING 121
7727 #define TK_ORDER 122
7728 #define TK_GROUP 123
7729 #define TK_HAVING 124
7730 #define TK_LIMIT 125
7731 #define TK_WHERE 126
7732 #define TK_INTO 127
7733 #define TK_VALUES 128
7734 #define TK_INTEGER 129
7735 #define TK_FLOAT 130
7736 #define TK_BLOB 131
7737 #define TK_REGISTER 132
7738 #define TK_VARIABLE 133
7739 #define TK_CASE 134
7740 #define TK_WHEN 135
7741 #define TK_THEN 136
7742 #define TK_ELSE 137
7743 #define TK_INDEX 138
7744 #define TK_ALTER 139
7745 #define TK_ADD 140
7746 #define TK_TO_TEXT 141
7747 #define TK_TO_BLOB 142
7748 #define TK_TO_NUMERIC 143
7749 #define TK_TO_INT 144
7750 #define TK_TO_REAL 145
7751 #define TK_ISNOT 146
7752 #define TK_END_OF_FILE 147
7753 #define TK_ILLEGAL 148
7754 #define TK_SPACE 149
7755 #define TK_UNCLOSED_STRING 150
7756 #define TK_FUNCTION 151
7757 #define TK_COLUMN 152
7758 #define TK_AGG_FUNCTION 153
7759 #define TK_AGG_COLUMN 154
7760 #define TK_CONST_FUNC 155
7761 #define TK_UMINUS 156
7762 #define TK_UPLUS 157
7764 /************** End of parse.h ***********************************************/
7765 /************** Continuing where we left off in sqliteInt.h ******************/
7766 #include <stdio.h>
7767 #include <stdlib.h>
7768 #include <string.h>
7769 #include <assert.h>
7770 #include <stddef.h>
7773 ** If compiling for a processor that lacks floating point support,
7774 ** substitute integer for floating-point
7776 #ifdef SQLITE_OMIT_FLOATING_POINT
7777 # define double sqlite_int64
7778 # define float sqlite_int64
7779 # define LONGDOUBLE_TYPE sqlite_int64
7780 # ifndef SQLITE_BIG_DBL
7781 # define SQLITE_BIG_DBL (((sqlite3_int64)1)<<50)
7782 # endif
7783 # define SQLITE_OMIT_DATETIME_FUNCS 1
7784 # define SQLITE_OMIT_TRACE 1
7785 # undef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
7786 # undef SQLITE_HAVE_ISNAN
7787 #else
7788 # ifdef __vax__
7789 # include <float.h>
7790 # define SQLITE_BIG_DBL DBL_MAX
7791 # define SQLITE_HUGE_DBL DBL_MAX
7792 # endif
7793 #endif
7794 #ifndef SQLITE_BIG_DBL
7795 # define SQLITE_BIG_DBL (1e99)
7796 #endif
7797 #ifndef SQLITE_HUGE_DBL
7798 # define SQLITE_HUGE_DBL (1.0e+308)
7799 #endif
7802 ** OMIT_TEMPDB is set to 1 if SQLITE_OMIT_TEMPDB is defined, or 0
7803 ** afterward. Having this macro allows us to cause the C compiler
7804 ** to omit code used by TEMP tables without messy #ifndef statements.
7806 #ifdef SQLITE_OMIT_TEMPDB
7807 #define OMIT_TEMPDB 1
7808 #else
7809 #define OMIT_TEMPDB 0
7810 #endif
7813 ** The "file format" number is an integer that is incremented whenever
7814 ** the VDBE-level file format changes. The following macros define the
7815 ** the default file format for new databases and the maximum file format
7816 ** that the library can read.
7818 #define SQLITE_MAX_FILE_FORMAT 4
7819 #ifndef SQLITE_DEFAULT_FILE_FORMAT
7820 # define SQLITE_DEFAULT_FILE_FORMAT 4
7821 #endif
7824 ** Determine whether triggers are recursive by default. This can be
7825 ** changed at run-time using a pragma.
7827 #ifndef SQLITE_DEFAULT_RECURSIVE_TRIGGERS
7828 # define SQLITE_DEFAULT_RECURSIVE_TRIGGERS 0
7829 #endif
7832 ** Provide a default value for SQLITE_TEMP_STORE in case it is not specified
7833 ** on the command-line
7835 #ifndef SQLITE_TEMP_STORE
7836 # define SQLITE_TEMP_STORE 1
7837 #endif
7840 ** GCC does not define the offsetof() macro so we'll have to do it
7841 ** ourselves.
7843 #ifndef offsetof
7844 #define offsetof(STRUCTURE,FIELD) ((int)((char*)&((STRUCTURE*)0)->FIELD))
7845 #endif
7848 ** Check to see if this machine uses EBCDIC. (Yes, believe it or
7849 ** not, there are still machines out there that use EBCDIC.)
7851 #if 'A' == '\301'
7852 # define SQLITE_EBCDIC 1
7853 #else
7854 # define SQLITE_ASCII 1
7855 #endif
7858 ** Integers of known sizes. These typedefs might change for architectures
7859 ** where the sizes very. Preprocessor macros are available so that the
7860 ** types can be conveniently redefined at compile-type. Like this:
7862 ** cc '-DUINTPTR_TYPE=long long int' ...
7864 #ifndef UINT32_TYPE
7865 # ifdef HAVE_UINT32_T
7866 # define UINT32_TYPE uint32_t
7867 # else
7868 # define UINT32_TYPE unsigned int
7869 # endif
7870 #endif
7871 #ifndef UINT16_TYPE
7872 # ifdef HAVE_UINT16_T
7873 # define UINT16_TYPE uint16_t
7874 # else
7875 # define UINT16_TYPE unsigned short int
7876 # endif
7877 #endif
7878 #ifndef INT16_TYPE
7879 # ifdef HAVE_INT16_T
7880 # define INT16_TYPE int16_t
7881 # else
7882 # define INT16_TYPE short int
7883 # endif
7884 #endif
7885 #ifndef UINT8_TYPE
7886 # ifdef HAVE_UINT8_T
7887 # define UINT8_TYPE uint8_t
7888 # else
7889 # define UINT8_TYPE unsigned char
7890 # endif
7891 #endif
7892 #ifndef INT8_TYPE
7893 # ifdef HAVE_INT8_T
7894 # define INT8_TYPE int8_t
7895 # else
7896 # define INT8_TYPE signed char
7897 # endif
7898 #endif
7899 #ifndef LONGDOUBLE_TYPE
7900 # define LONGDOUBLE_TYPE long double
7901 #endif
7902 typedef sqlite_int64 i64; /* 8-byte signed integer */
7903 typedef sqlite_uint64 u64; /* 8-byte unsigned integer */
7904 typedef UINT32_TYPE u32; /* 4-byte unsigned integer */
7905 typedef UINT16_TYPE u16; /* 2-byte unsigned integer */
7906 typedef INT16_TYPE i16; /* 2-byte signed integer */
7907 typedef UINT8_TYPE u8; /* 1-byte unsigned integer */
7908 typedef INT8_TYPE i8; /* 1-byte signed integer */
7911 ** SQLITE_MAX_U32 is a u64 constant that is the maximum u64 value
7912 ** that can be stored in a u32 without loss of data. The value
7913 ** is 0x00000000ffffffff. But because of quirks of some compilers, we
7914 ** have to specify the value in the less intuitive manner shown:
7916 #define SQLITE_MAX_U32 ((((u64)1)<<32)-1)
7919 ** The datatype used to store estimates of the number of rows in a
7920 ** table or index. This is an unsigned integer type. For 99.9% of
7921 ** the world, a 32-bit integer is sufficient. But a 64-bit integer
7922 ** can be used at compile-time if desired.
7924 #ifdef SQLITE_64BIT_STATS
7925 typedef u64 tRowcnt; /* 64-bit only if requested at compile-time */
7926 #else
7927 typedef u32 tRowcnt; /* 32-bit is the default */
7928 #endif
7931 ** Macros to determine whether the machine is big or little endian,
7932 ** evaluated at runtime.
7934 #ifdef SQLITE_AMALGAMATION
7935 SQLITE_PRIVATE const int sqlite3one = 1;
7936 #else
7937 SQLITE_PRIVATE const int sqlite3one;
7938 #endif
7939 #if defined(i386) || defined(__i386__) || defined(_M_IX86)\
7940 || defined(__x86_64) || defined(__x86_64__)
7941 # define SQLITE_BIGENDIAN 0
7942 # define SQLITE_LITTLEENDIAN 1
7943 # define SQLITE_UTF16NATIVE SQLITE_UTF16LE
7944 #else
7945 # define SQLITE_BIGENDIAN (*(char *)(&sqlite3one)==0)
7946 # define SQLITE_LITTLEENDIAN (*(char *)(&sqlite3one)==1)
7947 # define SQLITE_UTF16NATIVE (SQLITE_BIGENDIAN?SQLITE_UTF16BE:SQLITE_UTF16LE)
7948 #endif
7951 ** Constants for the largest and smallest possible 64-bit signed integers.
7952 ** These macros are designed to work correctly on both 32-bit and 64-bit
7953 ** compilers.
7955 #define LARGEST_INT64 (0xffffffff|(((i64)0x7fffffff)<<32))
7956 #define SMALLEST_INT64 (((i64)-1) - LARGEST_INT64)
7959 ** Round up a number to the next larger multiple of 8. This is used
7960 ** to force 8-byte alignment on 64-bit architectures.
7962 #define ROUND8(x) (((x)+7)&~7)
7965 ** Round down to the nearest multiple of 8
7967 #define ROUNDDOWN8(x) ((x)&~7)
7970 ** Assert that the pointer X is aligned to an 8-byte boundary. This
7971 ** macro is used only within assert() to verify that the code gets
7972 ** all alignment restrictions correct.
7974 ** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the
7975 ** underlying malloc() implemention might return us 4-byte aligned
7976 ** pointers. In that case, only verify 4-byte alignment.
7978 #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
7979 # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&3)==0)
7980 #else
7981 # define EIGHT_BYTE_ALIGNMENT(X) ((((char*)(X) - (char*)0)&7)==0)
7982 #endif
7986 ** An instance of the following structure is used to store the busy-handler
7987 ** callback for a given sqlite handle.
7989 ** The sqlite.busyHandler member of the sqlite struct contains the busy
7990 ** callback for the database handle. Each pager opened via the sqlite
7991 ** handle is passed a pointer to sqlite.busyHandler. The busy-handler
7992 ** callback is currently invoked only from within pager.c.
7994 typedef struct BusyHandler BusyHandler;
7995 struct BusyHandler {
7996 int (*xFunc)(void *,int); /* The busy callback */
7997 void *pArg; /* First arg to busy callback */
7998 int nBusy; /* Incremented with each busy call */
8002 ** Name of the master database table. The master database table
8003 ** is a special table that holds the names and attributes of all
8004 ** user tables and indices.
8006 #define MASTER_NAME "sqlite_master"
8007 #define TEMP_MASTER_NAME "sqlite_temp_master"
8010 ** The root-page of the master database table.
8012 #define MASTER_ROOT 1
8015 ** The name of the schema table.
8017 #define SCHEMA_TABLE(x) ((!OMIT_TEMPDB)&&(x==1)?TEMP_MASTER_NAME:MASTER_NAME)
8020 ** A convenience macro that returns the number of elements in
8021 ** an array.
8023 #define ArraySize(X) ((int)(sizeof(X)/sizeof(X[0])))
8026 ** The following value as a destructor means to use sqlite3DbFree().
8027 ** This is an internal extension to SQLITE_STATIC and SQLITE_TRANSIENT.
8029 #define SQLITE_DYNAMIC ((sqlite3_destructor_type)sqlite3DbFree)
8032 ** When SQLITE_OMIT_WSD is defined, it means that the target platform does
8033 ** not support Writable Static Data (WSD) such as global and static variables.
8034 ** All variables must either be on the stack or dynamically allocated from
8035 ** the heap. When WSD is unsupported, the variable declarations scattered
8036 ** throughout the SQLite code must become constants instead. The SQLITE_WSD
8037 ** macro is used for this purpose. And instead of referencing the variable
8038 ** directly, we use its constant as a key to lookup the run-time allocated
8039 ** buffer that holds real variable. The constant is also the initializer
8040 ** for the run-time allocated buffer.
8042 ** In the usual case where WSD is supported, the SQLITE_WSD and GLOBAL
8043 ** macros become no-ops and have zero performance impact.
8045 #ifdef SQLITE_OMIT_WSD
8046 #define SQLITE_WSD const
8047 #define GLOBAL(t,v) (*(t*)sqlite3_wsd_find((void*)&(v), sizeof(v)))
8048 #define sqlite3GlobalConfig GLOBAL(struct Sqlite3Config, sqlite3Config)
8049 SQLITE_API int sqlite3_wsd_init(int N, int J);
8050 SQLITE_API void *sqlite3_wsd_find(void *K, int L);
8051 #else
8052 #define SQLITE_WSD
8053 #define GLOBAL(t,v) v
8054 #define sqlite3GlobalConfig sqlite3Config
8055 #endif
8058 ** The following macros are used to suppress compiler warnings and to
8059 ** make it clear to human readers when a function parameter is deliberately
8060 ** left unused within the body of a function. This usually happens when
8061 ** a function is called via a function pointer. For example the
8062 ** implementation of an SQL aggregate step callback may not use the
8063 ** parameter indicating the number of arguments passed to the aggregate,
8064 ** if it knows that this is enforced elsewhere.
8066 ** When a function parameter is not used at all within the body of a function,
8067 ** it is generally named "NotUsed" or "NotUsed2" to make things even clearer.
8068 ** However, these macros may also be used to suppress warnings related to
8069 ** parameters that may or may not be used depending on compilation options.
8070 ** For example those parameters only used in assert() statements. In these
8071 ** cases the parameters are named as per the usual conventions.
8073 #define UNUSED_PARAMETER(x) (void)(x)
8074 #define UNUSED_PARAMETER2(x,y) UNUSED_PARAMETER(x),UNUSED_PARAMETER(y)
8077 ** Forward references to structures
8079 typedef struct AggInfo AggInfo;
8080 typedef struct AuthContext AuthContext;
8081 typedef struct AutoincInfo AutoincInfo;
8082 typedef struct Bitvec Bitvec;
8083 typedef struct CollSeq CollSeq;
8084 typedef struct Column Column;
8085 typedef struct Db Db;
8086 typedef struct Schema Schema;
8087 typedef struct Expr Expr;
8088 typedef struct ExprList ExprList;
8089 typedef struct ExprSpan ExprSpan;
8090 typedef struct FKey FKey;
8091 typedef struct FuncDestructor FuncDestructor;
8092 typedef struct FuncDef FuncDef;
8093 typedef struct FuncDefHash FuncDefHash;
8094 typedef struct IdList IdList;
8095 typedef struct Index Index;
8096 typedef struct IndexSample IndexSample;
8097 typedef struct KeyClass KeyClass;
8098 typedef struct KeyInfo KeyInfo;
8099 typedef struct Lookaside Lookaside;
8100 typedef struct LookasideSlot LookasideSlot;
8101 typedef struct Module Module;
8102 typedef struct NameContext NameContext;
8103 typedef struct Parse Parse;
8104 typedef struct RowSet RowSet;
8105 typedef struct Savepoint Savepoint;
8106 typedef struct Select Select;
8107 typedef struct SrcList SrcList;
8108 typedef struct StrAccum StrAccum;
8109 typedef struct Table Table;
8110 typedef struct TableLock TableLock;
8111 typedef struct Token Token;
8112 typedef struct Trigger Trigger;
8113 typedef struct TriggerPrg TriggerPrg;
8114 typedef struct TriggerStep TriggerStep;
8115 typedef struct UnpackedRecord UnpackedRecord;
8116 typedef struct VTable VTable;
8117 typedef struct VtabCtx VtabCtx;
8118 typedef struct Walker Walker;
8119 typedef struct WherePlan WherePlan;
8120 typedef struct WhereInfo WhereInfo;
8121 typedef struct WhereLevel WhereLevel;
8124 ** Defer sourcing vdbe.h and btree.h until after the "u8" and
8125 ** "BusyHandler" typedefs. vdbe.h also requires a few of the opaque
8126 ** pointer types (i.e. FuncDef) defined above.
8128 /************** Include btree.h in the middle of sqliteInt.h *****************/
8129 /************** Begin file btree.h *******************************************/
8131 ** 2001 September 15
8133 ** The author disclaims copyright to this source code. In place of
8134 ** a legal notice, here is a blessing:
8136 ** May you do good and not evil.
8137 ** May you find forgiveness for yourself and forgive others.
8138 ** May you share freely, never taking more than you give.
8140 *************************************************************************
8141 ** This header file defines the interface that the sqlite B-Tree file
8142 ** subsystem. See comments in the source code for a detailed description
8143 ** of what each interface routine does.
8145 #ifndef _BTREE_H_
8146 #define _BTREE_H_
8148 /* TODO: This definition is just included so other modules compile. It
8149 ** needs to be revisited.
8151 #define SQLITE_N_BTREE_META 10
8154 ** If defined as non-zero, auto-vacuum is enabled by default. Otherwise
8155 ** it must be turned on for each database using "PRAGMA auto_vacuum = 1".
8157 #ifndef SQLITE_DEFAULT_AUTOVACUUM
8158 #define SQLITE_DEFAULT_AUTOVACUUM 0
8159 #endif
8161 #define BTREE_AUTOVACUUM_NONE 0 /* Do not do auto-vacuum */
8162 #define BTREE_AUTOVACUUM_FULL 1 /* Do full auto-vacuum */
8163 #define BTREE_AUTOVACUUM_INCR 2 /* Incremental vacuum */
8166 ** Forward declarations of structure
8168 typedef struct Btree Btree;
8169 typedef struct BtCursor BtCursor;
8170 typedef struct BtShared BtShared;
8173 SQLITE_PRIVATE int sqlite3BtreeOpen(
8174 sqlite3_vfs *pVfs, /* VFS to use with this b-tree */
8175 const char *zFilename, /* Name of database file to open */
8176 sqlite3 *db, /* Associated database connection */
8177 Btree **ppBtree, /* Return open Btree* here */
8178 int flags, /* Flags */
8179 int vfsFlags /* Flags passed through to VFS open */
8182 /* The flags parameter to sqlite3BtreeOpen can be the bitwise or of the
8183 ** following values.
8185 ** NOTE: These values must match the corresponding PAGER_ values in
8186 ** pager.h.
8188 #define BTREE_OMIT_JOURNAL 1 /* Do not create or use a rollback journal */
8189 #define BTREE_NO_READLOCK 2 /* Omit readlocks on readonly files */
8190 #define BTREE_MEMORY 4 /* This is an in-memory DB */
8191 #define BTREE_SINGLE 8 /* The file contains at most 1 b-tree */
8192 #define BTREE_UNORDERED 16 /* Use of a hash implementation is OK */
8194 SQLITE_PRIVATE int sqlite3BtreeClose(Btree*);
8195 SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int);
8196 SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int);
8197 SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*);
8198 SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int nPagesize, int nReserve, int eFix);
8199 SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree*);
8200 SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree*,int);
8201 SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree*);
8202 SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree*,int);
8203 SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree*);
8204 SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *, int);
8205 SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *);
8206 SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int);
8207 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster);
8208 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int);
8209 SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*);
8210 SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*);
8211 SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree*,int);
8212 SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree*, int*, int flags);
8213 SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree*);
8214 SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree*);
8215 SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree*);
8216 SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *, int, void(*)(void *));
8217 SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *pBtree);
8218 SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *pBtree, int iTab, u8 isWriteLock);
8219 SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *, int, int);
8221 SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *);
8222 SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *);
8223 SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *, Btree *);
8225 SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *);
8227 /* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR
8228 ** of the flags shown below.
8230 ** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set.
8231 ** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data
8232 ** is stored in the leaves. (BTREE_INTKEY is used for SQL tables.) With
8233 ** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored
8234 ** anywhere - the key is the content. (BTREE_BLOBKEY is used for SQL
8235 ** indices.)
8237 #define BTREE_INTKEY 1 /* Table has only 64-bit signed integer keys */
8238 #define BTREE_BLOBKEY 2 /* Table has keys only - no data */
8240 SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*);
8241 SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*);
8242 SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int);
8244 SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue);
8245 SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value);
8248 ** The second parameter to sqlite3BtreeGetMeta or sqlite3BtreeUpdateMeta
8249 ** should be one of the following values. The integer values are assigned
8250 ** to constants so that the offset of the corresponding field in an
8251 ** SQLite database header may be found using the following formula:
8253 ** offset = 36 + (idx * 4)
8255 ** For example, the free-page-count field is located at byte offset 36 of
8256 ** the database file header. The incr-vacuum-flag field is located at
8257 ** byte offset 64 (== 36+4*7).
8259 #define BTREE_FREE_PAGE_COUNT 0
8260 #define BTREE_SCHEMA_VERSION 1
8261 #define BTREE_FILE_FORMAT 2
8262 #define BTREE_DEFAULT_CACHE_SIZE 3
8263 #define BTREE_LARGEST_ROOT_PAGE 4
8264 #define BTREE_TEXT_ENCODING 5
8265 #define BTREE_USER_VERSION 6
8266 #define BTREE_INCR_VACUUM 7
8268 SQLITE_PRIVATE int sqlite3BtreeCursor(
8269 Btree*, /* BTree containing table to open */
8270 int iTable, /* Index of root page */
8271 int wrFlag, /* 1 for writing. 0 for read-only */
8272 struct KeyInfo*, /* First argument to compare function */
8273 BtCursor *pCursor /* Space to write cursor structure */
8275 SQLITE_PRIVATE int sqlite3BtreeCursorSize(void);
8276 SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor*);
8278 SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor*);
8279 SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
8280 BtCursor*,
8281 UnpackedRecord *pUnKey,
8282 i64 intKey,
8283 int bias,
8284 int *pRes
8286 SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*, int*);
8287 SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*);
8288 SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey,
8289 const void *pData, int nData,
8290 int nZero, int bias, int seekResult);
8291 SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor*, int *pRes);
8292 SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor*, int *pRes);
8293 SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor*, int *pRes);
8294 SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor*);
8295 SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor*, int *pRes);
8296 SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor*, i64 *pSize);
8297 SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor*, u32 offset, u32 amt, void*);
8298 SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor*, int *pAmt);
8299 SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor*, int *pAmt);
8300 SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor*, u32 *pSize);
8301 SQLITE_PRIVATE int sqlite3BtreeData(BtCursor*, u32 offset, u32 amt, void*);
8302 SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor*, sqlite3_int64);
8303 SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor*);
8305 SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(Btree*, int *aRoot, int nRoot, int, int*);
8306 SQLITE_PRIVATE struct Pager *sqlite3BtreePager(Btree*);
8308 SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor*, u32 offset, u32 amt, void*);
8309 SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *);
8310 SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *);
8312 SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBt, int iVersion);
8314 #ifndef NDEBUG
8315 SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor*);
8316 #endif
8318 #ifndef SQLITE_OMIT_BTREECOUNT
8319 SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *, i64 *);
8320 #endif
8322 #ifdef SQLITE_TEST
8323 SQLITE_PRIVATE int sqlite3BtreeCursorInfo(BtCursor*, int*, int);
8324 SQLITE_PRIVATE void sqlite3BtreeCursorList(Btree*);
8325 #endif
8327 #ifndef SQLITE_OMIT_WAL
8328 SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree*, int, int *, int *);
8329 #endif
8332 ** If we are not using shared cache, then there is no need to
8333 ** use mutexes to access the BtShared structures. So make the
8334 ** Enter and Leave procedures no-ops.
8336 #ifndef SQLITE_OMIT_SHARED_CACHE
8337 SQLITE_PRIVATE void sqlite3BtreeEnter(Btree*);
8338 SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3*);
8339 #else
8340 # define sqlite3BtreeEnter(X)
8341 # define sqlite3BtreeEnterAll(X)
8342 #endif
8344 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE
8345 SQLITE_PRIVATE int sqlite3BtreeSharable(Btree*);
8346 SQLITE_PRIVATE void sqlite3BtreeLeave(Btree*);
8347 SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor*);
8348 SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor*);
8349 SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3*);
8350 #ifndef NDEBUG
8351 /* These routines are used inside assert() statements only. */
8352 SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree*);
8353 SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3*);
8354 SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3*,int,Schema*);
8355 #endif
8356 #else
8358 # define sqlite3BtreeSharable(X) 0
8359 # define sqlite3BtreeLeave(X)
8360 # define sqlite3BtreeEnterCursor(X)
8361 # define sqlite3BtreeLeaveCursor(X)
8362 # define sqlite3BtreeLeaveAll(X)
8364 # define sqlite3BtreeHoldsMutex(X) 1
8365 # define sqlite3BtreeHoldsAllMutexes(X) 1
8366 # define sqlite3SchemaMutexHeld(X,Y,Z) 1
8367 #endif
8370 #endif /* _BTREE_H_ */
8372 /************** End of btree.h ***********************************************/
8373 /************** Continuing where we left off in sqliteInt.h ******************/
8374 /************** Include vdbe.h in the middle of sqliteInt.h ******************/
8375 /************** Begin file vdbe.h ********************************************/
8377 ** 2001 September 15
8379 ** The author disclaims copyright to this source code. In place of
8380 ** a legal notice, here is a blessing:
8382 ** May you do good and not evil.
8383 ** May you find forgiveness for yourself and forgive others.
8384 ** May you share freely, never taking more than you give.
8386 *************************************************************************
8387 ** Header file for the Virtual DataBase Engine (VDBE)
8389 ** This header defines the interface to the virtual database engine
8390 ** or VDBE. The VDBE implements an abstract machine that runs a
8391 ** simple program to access and modify the underlying database.
8393 #ifndef _SQLITE_VDBE_H_
8394 #define _SQLITE_VDBE_H_
8395 /* #include <stdio.h> */
8398 ** A single VDBE is an opaque structure named "Vdbe". Only routines
8399 ** in the source file sqliteVdbe.c are allowed to see the insides
8400 ** of this structure.
8402 typedef struct Vdbe Vdbe;
8405 ** The names of the following types declared in vdbeInt.h are required
8406 ** for the VdbeOp definition.
8408 typedef struct VdbeFunc VdbeFunc;
8409 typedef struct Mem Mem;
8410 typedef struct SubProgram SubProgram;
8413 ** A single instruction of the virtual machine has an opcode
8414 ** and as many as three operands. The instruction is recorded
8415 ** as an instance of the following structure:
8417 struct VdbeOp {
8418 u8 opcode; /* What operation to perform */
8419 signed char p4type; /* One of the P4_xxx constants for p4 */
8420 u8 opflags; /* Mask of the OPFLG_* flags in opcodes.h */
8421 u8 p5; /* Fifth parameter is an unsigned character */
8422 int p1; /* First operand */
8423 int p2; /* Second parameter (often the jump destination) */
8424 int p3; /* The third parameter */
8425 union { /* fourth parameter */
8426 int i; /* Integer value if p4type==P4_INT32 */
8427 void *p; /* Generic pointer */
8428 char *z; /* Pointer to data for string (char array) types */
8429 i64 *pI64; /* Used when p4type is P4_INT64 */
8430 double *pReal; /* Used when p4type is P4_REAL */
8431 FuncDef *pFunc; /* Used when p4type is P4_FUNCDEF */
8432 VdbeFunc *pVdbeFunc; /* Used when p4type is P4_VDBEFUNC */
8433 CollSeq *pColl; /* Used when p4type is P4_COLLSEQ */
8434 Mem *pMem; /* Used when p4type is P4_MEM */
8435 VTable *pVtab; /* Used when p4type is P4_VTAB */
8436 KeyInfo *pKeyInfo; /* Used when p4type is P4_KEYINFO */
8437 int *ai; /* Used when p4type is P4_INTARRAY */
8438 SubProgram *pProgram; /* Used when p4type is P4_SUBPROGRAM */
8439 int (*xAdvance)(BtCursor *, int *);
8440 } p4;
8441 #ifdef SQLITE_DEBUG
8442 char *zComment; /* Comment to improve readability */
8443 #endif
8444 #ifdef VDBE_PROFILE
8445 int cnt; /* Number of times this instruction was executed */
8446 u64 cycles; /* Total time spent executing this instruction */
8447 #endif
8449 typedef struct VdbeOp VdbeOp;
8453 ** A sub-routine used to implement a trigger program.
8455 struct SubProgram {
8456 VdbeOp *aOp; /* Array of opcodes for sub-program */
8457 int nOp; /* Elements in aOp[] */
8458 int nMem; /* Number of memory cells required */
8459 int nCsr; /* Number of cursors required */
8460 int nOnce; /* Number of OP_Once instructions */
8461 void *token; /* id that may be used to recursive triggers */
8462 SubProgram *pNext; /* Next sub-program already visited */
8466 ** A smaller version of VdbeOp used for the VdbeAddOpList() function because
8467 ** it takes up less space.
8469 struct VdbeOpList {
8470 u8 opcode; /* What operation to perform */
8471 signed char p1; /* First operand */
8472 signed char p2; /* Second parameter (often the jump destination) */
8473 signed char p3; /* Third parameter */
8475 typedef struct VdbeOpList VdbeOpList;
8478 ** Allowed values of VdbeOp.p4type
8480 #define P4_NOTUSED 0 /* The P4 parameter is not used */
8481 #define P4_DYNAMIC (-1) /* Pointer to a string obtained from sqliteMalloc() */
8482 #define P4_STATIC (-2) /* Pointer to a static string */
8483 #define P4_COLLSEQ (-4) /* P4 is a pointer to a CollSeq structure */
8484 #define P4_FUNCDEF (-5) /* P4 is a pointer to a FuncDef structure */
8485 #define P4_KEYINFO (-6) /* P4 is a pointer to a KeyInfo structure */
8486 #define P4_VDBEFUNC (-7) /* P4 is a pointer to a VdbeFunc structure */
8487 #define P4_MEM (-8) /* P4 is a pointer to a Mem* structure */
8488 #define P4_TRANSIENT 0 /* P4 is a pointer to a transient string */
8489 #define P4_VTAB (-10) /* P4 is a pointer to an sqlite3_vtab structure */
8490 #define P4_MPRINTF (-11) /* P4 is a string obtained from sqlite3_mprintf() */
8491 #define P4_REAL (-12) /* P4 is a 64-bit floating point value */
8492 #define P4_INT64 (-13) /* P4 is a 64-bit signed integer */
8493 #define P4_INT32 (-14) /* P4 is a 32-bit signed integer */
8494 #define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */
8495 #define P4_SUBPROGRAM (-18) /* P4 is a pointer to a SubProgram structure */
8496 #define P4_ADVANCE (-19) /* P4 is a pointer to BtreeNext() or BtreePrev() */
8498 /* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure
8499 ** is made. That copy is freed when the Vdbe is finalized. But if the
8500 ** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used. It still
8501 ** gets freed when the Vdbe is finalized so it still should be obtained
8502 ** from a single sqliteMalloc(). But no copy is made and the calling
8503 ** function should *not* try to free the KeyInfo.
8505 #define P4_KEYINFO_HANDOFF (-16)
8506 #define P4_KEYINFO_STATIC (-17)
8509 ** The Vdbe.aColName array contains 5n Mem structures, where n is the
8510 ** number of columns of data returned by the statement.
8512 #define COLNAME_NAME 0
8513 #define COLNAME_DECLTYPE 1
8514 #define COLNAME_DATABASE 2
8515 #define COLNAME_TABLE 3
8516 #define COLNAME_COLUMN 4
8517 #ifdef SQLITE_ENABLE_COLUMN_METADATA
8518 # define COLNAME_N 5 /* Number of COLNAME_xxx symbols */
8519 #else
8520 # ifdef SQLITE_OMIT_DECLTYPE
8521 # define COLNAME_N 1 /* Store only the name */
8522 # else
8523 # define COLNAME_N 2 /* Store the name and decltype */
8524 # endif
8525 #endif
8528 ** The following macro converts a relative address in the p2 field
8529 ** of a VdbeOp structure into a negative number so that
8530 ** sqlite3VdbeAddOpList() knows that the address is relative. Calling
8531 ** the macro again restores the address.
8533 #define ADDR(X) (-1-(X))
8536 ** The makefile scans the vdbe.c source file and creates the "opcodes.h"
8537 ** header file that defines a number for each opcode used by the VDBE.
8539 /************** Include opcodes.h in the middle of vdbe.h ********************/
8540 /************** Begin file opcodes.h *****************************************/
8541 /* Automatically generated. Do not edit */
8542 /* See the mkopcodeh.awk script for details */
8543 #define OP_Goto 1
8544 #define OP_Gosub 2
8545 #define OP_Return 3
8546 #define OP_Yield 4
8547 #define OP_HaltIfNull 5
8548 #define OP_Halt 6
8549 #define OP_Integer 7
8550 #define OP_Int64 8
8551 #define OP_Real 130 /* same as TK_FLOAT */
8552 #define OP_String8 94 /* same as TK_STRING */
8553 #define OP_String 9
8554 #define OP_Null 10
8555 #define OP_Blob 11
8556 #define OP_Variable 12
8557 #define OP_Move 13
8558 #define OP_Copy 14
8559 #define OP_SCopy 15
8560 #define OP_ResultRow 16
8561 #define OP_Concat 91 /* same as TK_CONCAT */
8562 #define OP_Add 86 /* same as TK_PLUS */
8563 #define OP_Subtract 87 /* same as TK_MINUS */
8564 #define OP_Multiply 88 /* same as TK_STAR */
8565 #define OP_Divide 89 /* same as TK_SLASH */
8566 #define OP_Remainder 90 /* same as TK_REM */
8567 #define OP_CollSeq 17
8568 #define OP_Function 18
8569 #define OP_BitAnd 82 /* same as TK_BITAND */
8570 #define OP_BitOr 83 /* same as TK_BITOR */
8571 #define OP_ShiftLeft 84 /* same as TK_LSHIFT */
8572 #define OP_ShiftRight 85 /* same as TK_RSHIFT */
8573 #define OP_AddImm 20
8574 #define OP_MustBeInt 21
8575 #define OP_RealAffinity 22
8576 #define OP_ToText 141 /* same as TK_TO_TEXT */
8577 #define OP_ToBlob 142 /* same as TK_TO_BLOB */
8578 #define OP_ToNumeric 143 /* same as TK_TO_NUMERIC*/
8579 #define OP_ToInt 144 /* same as TK_TO_INT */
8580 #define OP_ToReal 145 /* same as TK_TO_REAL */
8581 #define OP_Eq 76 /* same as TK_EQ */
8582 #define OP_Ne 75 /* same as TK_NE */
8583 #define OP_Lt 79 /* same as TK_LT */
8584 #define OP_Le 78 /* same as TK_LE */
8585 #define OP_Gt 77 /* same as TK_GT */
8586 #define OP_Ge 80 /* same as TK_GE */
8587 #define OP_Permutation 23
8588 #define OP_Compare 24
8589 #define OP_Jump 25
8590 #define OP_And 69 /* same as TK_AND */
8591 #define OP_Or 68 /* same as TK_OR */
8592 #define OP_Not 19 /* same as TK_NOT */
8593 #define OP_BitNot 93 /* same as TK_BITNOT */
8594 #define OP_Once 26
8595 #define OP_If 27
8596 #define OP_IfNot 28
8597 #define OP_IsNull 73 /* same as TK_ISNULL */
8598 #define OP_NotNull 74 /* same as TK_NOTNULL */
8599 #define OP_Column 29
8600 #define OP_Affinity 30
8601 #define OP_MakeRecord 31
8602 #define OP_Count 32
8603 #define OP_Savepoint 33
8604 #define OP_AutoCommit 34
8605 #define OP_Transaction 35
8606 #define OP_ReadCookie 36
8607 #define OP_SetCookie 37
8608 #define OP_VerifyCookie 38
8609 #define OP_OpenRead 39
8610 #define OP_OpenWrite 40
8611 #define OP_OpenAutoindex 41
8612 #define OP_OpenEphemeral 42
8613 #define OP_SorterOpen 43
8614 #define OP_OpenPseudo 44
8615 #define OP_Close 45
8616 #define OP_SeekLt 46
8617 #define OP_SeekLe 47
8618 #define OP_SeekGe 48
8619 #define OP_SeekGt 49
8620 #define OP_Seek 50
8621 #define OP_NotFound 51
8622 #define OP_Found 52
8623 #define OP_IsUnique 53
8624 #define OP_NotExists 54
8625 #define OP_Sequence 55
8626 #define OP_NewRowid 56
8627 #define OP_Insert 57
8628 #define OP_InsertInt 58
8629 #define OP_Delete 59
8630 #define OP_ResetCount 60
8631 #define OP_SorterCompare 61
8632 #define OP_SorterData 62
8633 #define OP_RowKey 63
8634 #define OP_RowData 64
8635 #define OP_Rowid 65
8636 #define OP_NullRow 66
8637 #define OP_Last 67
8638 #define OP_SorterSort 70
8639 #define OP_Sort 71
8640 #define OP_Rewind 72
8641 #define OP_SorterNext 81
8642 #define OP_Prev 92
8643 #define OP_Next 95
8644 #define OP_SorterInsert 96
8645 #define OP_IdxInsert 97
8646 #define OP_IdxDelete 98
8647 #define OP_IdxRowid 99
8648 #define OP_IdxLT 100
8649 #define OP_IdxGE 101
8650 #define OP_Destroy 102
8651 #define OP_Clear 103
8652 #define OP_CreateIndex 104
8653 #define OP_CreateTable 105
8654 #define OP_ParseSchema 106
8655 #define OP_LoadAnalysis 107
8656 #define OP_DropTable 108
8657 #define OP_DropIndex 109
8658 #define OP_DropTrigger 110
8659 #define OP_IntegrityCk 111
8660 #define OP_RowSetAdd 112
8661 #define OP_RowSetRead 113
8662 #define OP_RowSetTest 114
8663 #define OP_Program 115
8664 #define OP_Param 116
8665 #define OP_FkCounter 117
8666 #define OP_FkIfZero 118
8667 #define OP_MemMax 119
8668 #define OP_IfPos 120
8669 #define OP_IfNeg 121
8670 #define OP_IfZero 122
8671 #define OP_AggStep 123
8672 #define OP_AggFinal 124
8673 #define OP_Checkpoint 125
8674 #define OP_JournalMode 126
8675 #define OP_Vacuum 127
8676 #define OP_IncrVacuum 128
8677 #define OP_Expire 129
8678 #define OP_TableLock 131
8679 #define OP_VBegin 132
8680 #define OP_VCreate 133
8681 #define OP_VDestroy 134
8682 #define OP_VOpen 135
8683 #define OP_VFilter 136
8684 #define OP_VColumn 137
8685 #define OP_VNext 138
8686 #define OP_VRename 139
8687 #define OP_VUpdate 140
8688 #define OP_Pagecount 146
8689 #define OP_MaxPgcnt 147
8690 #define OP_Trace 148
8691 #define OP_Noop 149
8692 #define OP_Explain 150
8695 /* Properties such as "out2" or "jump" that are specified in
8696 ** comments following the "case" for each opcode in the vdbe.c
8697 ** are encoded into bitvectors as follows:
8699 #define OPFLG_JUMP 0x0001 /* jump: P2 holds jmp target */
8700 #define OPFLG_OUT2_PRERELEASE 0x0002 /* out2-prerelease: */
8701 #define OPFLG_IN1 0x0004 /* in1: P1 is an input */
8702 #define OPFLG_IN2 0x0008 /* in2: P2 is an input */
8703 #define OPFLG_IN3 0x0010 /* in3: P3 is an input */
8704 #define OPFLG_OUT2 0x0020 /* out2: P2 is an output */
8705 #define OPFLG_OUT3 0x0040 /* out3: P3 is an output */
8706 #define OPFLG_INITIALIZER {\
8707 /* 0 */ 0x00, 0x01, 0x01, 0x04, 0x04, 0x10, 0x00, 0x02,\
8708 /* 8 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x24, 0x24,\
8709 /* 16 */ 0x00, 0x00, 0x00, 0x24, 0x04, 0x05, 0x04, 0x00,\
8710 /* 24 */ 0x00, 0x01, 0x01, 0x05, 0x05, 0x00, 0x00, 0x00,\
8711 /* 32 */ 0x02, 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00,\
8712 /* 40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,\
8713 /* 48 */ 0x11, 0x11, 0x08, 0x11, 0x11, 0x11, 0x11, 0x02,\
8714 /* 56 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
8715 /* 64 */ 0x00, 0x02, 0x00, 0x01, 0x4c, 0x4c, 0x01, 0x01,\
8716 /* 72 */ 0x01, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\
8717 /* 80 */ 0x15, 0x01, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\
8718 /* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x01,\
8719 /* 96 */ 0x08, 0x08, 0x00, 0x02, 0x01, 0x01, 0x02, 0x00,\
8720 /* 104 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
8721 /* 112 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01, 0x08,\
8722 /* 120 */ 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00,\
8723 /* 128 */ 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\
8724 /* 136 */ 0x01, 0x00, 0x01, 0x00, 0x00, 0x04, 0x04, 0x04,\
8725 /* 144 */ 0x04, 0x04, 0x02, 0x02, 0x00, 0x00, 0x00,}
8727 /************** End of opcodes.h *********************************************/
8728 /************** Continuing where we left off in vdbe.h ***********************/
8731 ** Prototypes for the VDBE interface. See comments on the implementation
8732 ** for a description of what each of these routines does.
8734 SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3*);
8735 SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe*,int);
8736 SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe*,int,int);
8737 SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe*,int,int,int);
8738 SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe*,int,int,int,int);
8739 SQLITE_PRIVATE int sqlite3VdbeAddOp4(Vdbe*,int,int,int,int,const char *zP4,int);
8740 SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int);
8741 SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
8742 SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*);
8743 SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, u32 addr, int P1);
8744 SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, u32 addr, int P2);
8745 SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, u32 addr, int P3);
8746 SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5);
8747 SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr);
8748 SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr);
8749 SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
8750 SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
8751 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe*, int);
8752 SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe*);
8753 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe*);
8754 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe*);
8755 SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3*,Vdbe*);
8756 SQLITE_PRIVATE void sqlite3VdbeMakeReady(Vdbe*,Parse*);
8757 SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe*);
8758 SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe*, int);
8759 SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe*);
8760 #ifdef SQLITE_DEBUG
8761 SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *, int);
8762 SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe*,FILE*);
8763 #endif
8764 SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe*);
8765 SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe*);
8766 SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe*);
8767 SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe*,int);
8768 SQLITE_PRIVATE int sqlite3VdbeSetColName(Vdbe*, int, int, const char *, void(*)(void*));
8769 SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe*);
8770 SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe*);
8771 SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe*, const char *z, int n, int);
8772 SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe*,Vdbe*);
8773 SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe*, int*, int*);
8774 SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe*, int, u8);
8775 SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe*, int);
8776 #ifndef SQLITE_OMIT_TRACE
8777 SQLITE_PRIVATE char *sqlite3VdbeExpandSql(Vdbe*, const char*);
8778 #endif
8780 SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*);
8781 SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*);
8782 SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo *, char *, int, char **);
8784 #ifndef SQLITE_OMIT_TRIGGER
8785 SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *, SubProgram *);
8786 #endif
8789 #ifndef NDEBUG
8790 SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe*, const char*, ...);
8791 # define VdbeComment(X) sqlite3VdbeComment X
8792 SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe*, const char*, ...);
8793 # define VdbeNoopComment(X) sqlite3VdbeNoopComment X
8794 #else
8795 # define VdbeComment(X)
8796 # define VdbeNoopComment(X)
8797 #endif
8799 #endif
8801 /************** End of vdbe.h ************************************************/
8802 /************** Continuing where we left off in sqliteInt.h ******************/
8803 /************** Include pager.h in the middle of sqliteInt.h *****************/
8804 /************** Begin file pager.h *******************************************/
8806 ** 2001 September 15
8808 ** The author disclaims copyright to this source code. In place of
8809 ** a legal notice, here is a blessing:
8811 ** May you do good and not evil.
8812 ** May you find forgiveness for yourself and forgive others.
8813 ** May you share freely, never taking more than you give.
8815 *************************************************************************
8816 ** This header file defines the interface that the sqlite page cache
8817 ** subsystem. The page cache subsystem reads and writes a file a page
8818 ** at a time and provides a journal for rollback.
8821 #ifndef _PAGER_H_
8822 #define _PAGER_H_
8825 ** Default maximum size for persistent journal files. A negative
8826 ** value means no limit. This value may be overridden using the
8827 ** sqlite3PagerJournalSizeLimit() API. See also "PRAGMA journal_size_limit".
8829 #ifndef SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT
8830 #define SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT -1
8831 #endif
8834 ** The type used to represent a page number. The first page in a file
8835 ** is called page 1. 0 is used to represent "not a page".
8837 typedef u32 Pgno;
8840 ** Each open file is managed by a separate instance of the "Pager" structure.
8842 typedef struct Pager Pager;
8845 ** Handle type for pages.
8847 typedef struct PgHdr DbPage;
8850 ** Page number PAGER_MJ_PGNO is never used in an SQLite database (it is
8851 ** reserved for working around a windows/posix incompatibility). It is
8852 ** used in the journal to signify that the remainder of the journal file
8853 ** is devoted to storing a master journal name - there are no more pages to
8854 ** roll back. See comments for function writeMasterJournal() in pager.c
8855 ** for details.
8857 #define PAGER_MJ_PGNO(x) ((Pgno)((PENDING_BYTE/((x)->pageSize))+1))
8860 ** Allowed values for the flags parameter to sqlite3PagerOpen().
8862 ** NOTE: These values must match the corresponding BTREE_ values in btree.h.
8864 #define PAGER_OMIT_JOURNAL 0x0001 /* Do not use a rollback journal */
8865 #define PAGER_NO_READLOCK 0x0002 /* Omit readlocks on readonly files */
8866 #define PAGER_MEMORY 0x0004 /* In-memory database */
8869 ** Valid values for the second argument to sqlite3PagerLockingMode().
8871 #define PAGER_LOCKINGMODE_QUERY -1
8872 #define PAGER_LOCKINGMODE_NORMAL 0
8873 #define PAGER_LOCKINGMODE_EXCLUSIVE 1
8876 ** Numeric constants that encode the journalmode.
8878 #define PAGER_JOURNALMODE_QUERY (-1) /* Query the value of journalmode */
8879 #define PAGER_JOURNALMODE_DELETE 0 /* Commit by deleting journal file */
8880 #define PAGER_JOURNALMODE_PERSIST 1 /* Commit by zeroing journal header */
8881 #define PAGER_JOURNALMODE_OFF 2 /* Journal omitted. */
8882 #define PAGER_JOURNALMODE_TRUNCATE 3 /* Commit by truncating journal */
8883 #define PAGER_JOURNALMODE_MEMORY 4 /* In-memory journal file */
8884 #define PAGER_JOURNALMODE_WAL 5 /* Use write-ahead logging */
8887 ** The remainder of this file contains the declarations of the functions
8888 ** that make up the Pager sub-system API. See source code comments for
8889 ** a detailed description of each routine.
8892 /* Open and close a Pager connection. */
8893 SQLITE_PRIVATE int sqlite3PagerOpen(
8894 sqlite3_vfs*,
8895 Pager **ppPager,
8896 const char*,
8897 int,
8898 int,
8899 int,
8900 void(*)(DbPage*)
8902 SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager);
8903 SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager*, int, unsigned char*);
8905 /* Functions used to configure a Pager object. */
8906 SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(Pager*, int(*)(void *), void *);
8907 SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager*, u32*, int);
8908 SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager*, int);
8909 SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager*, int);
8910 SQLITE_PRIVATE void sqlite3PagerShrink(Pager*);
8911 SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(Pager*,int,int,int);
8912 SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *, int);
8913 SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *, int);
8914 SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager*);
8915 SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager*);
8916 SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *, i64);
8917 SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager*);
8919 /* Functions used to obtain and release page references. */
8920 SQLITE_PRIVATE int sqlite3PagerAcquire(Pager *pPager, Pgno pgno, DbPage **ppPage, int clrFlag);
8921 #define sqlite3PagerGet(A,B,C) sqlite3PagerAcquire(A,B,C,0)
8922 SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno);
8923 SQLITE_PRIVATE void sqlite3PagerRef(DbPage*);
8924 SQLITE_PRIVATE void sqlite3PagerUnref(DbPage*);
8926 /* Operations on page references. */
8927 SQLITE_PRIVATE int sqlite3PagerWrite(DbPage*);
8928 SQLITE_PRIVATE void sqlite3PagerDontWrite(DbPage*);
8929 SQLITE_PRIVATE int sqlite3PagerMovepage(Pager*,DbPage*,Pgno,int);
8930 SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage*);
8931 SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *);
8932 SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *);
8934 /* Functions used to manage pager transactions and savepoints. */
8935 SQLITE_PRIVATE void sqlite3PagerPagecount(Pager*, int*);
8936 SQLITE_PRIVATE int sqlite3PagerBegin(Pager*, int exFlag, int);
8937 SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(Pager*,const char *zMaster, int);
8938 SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager*);
8939 SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager);
8940 SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager*);
8941 SQLITE_PRIVATE int sqlite3PagerRollback(Pager*);
8942 SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int n);
8943 SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint);
8944 SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager);
8946 SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int, int*, int*);
8947 SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager);
8948 SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager);
8949 SQLITE_PRIVATE int sqlite3PagerOpenWal(Pager *pPager, int *pisOpen);
8950 SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager);
8952 /* Functions used to query pager state and configuration. */
8953 SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager*);
8954 SQLITE_PRIVATE int sqlite3PagerRefcount(Pager*);
8955 SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager*);
8956 SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager*);
8957 SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager*);
8958 SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager*);
8959 SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*);
8960 SQLITE_PRIVATE int sqlite3PagerNosync(Pager*);
8961 SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*);
8962 SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*);
8963 SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *, int, int, int *);
8964 SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *);
8966 /* Functions used to truncate the database file. */
8967 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
8969 #if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
8970 SQLITE_PRIVATE void *sqlite3PagerCodec(DbPage *);
8971 #endif
8973 /* Functions to support testing and debugging. */
8974 #if !defined(NDEBUG) || defined(SQLITE_TEST)
8975 SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage*);
8976 SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage*);
8977 #endif
8978 #ifdef SQLITE_TEST
8979 SQLITE_PRIVATE int *sqlite3PagerStats(Pager*);
8980 SQLITE_PRIVATE void sqlite3PagerRefdump(Pager*);
8981 void disable_simulated_io_errors(void);
8982 void enable_simulated_io_errors(void);
8983 #else
8984 # define disable_simulated_io_errors()
8985 # define enable_simulated_io_errors()
8986 #endif
8988 #endif /* _PAGER_H_ */
8990 /************** End of pager.h ***********************************************/
8991 /************** Continuing where we left off in sqliteInt.h ******************/
8992 /************** Include pcache.h in the middle of sqliteInt.h ****************/
8993 /************** Begin file pcache.h ******************************************/
8995 ** 2008 August 05
8997 ** The author disclaims copyright to this source code. In place of
8998 ** a legal notice, here is a blessing:
9000 ** May you do good and not evil.
9001 ** May you find forgiveness for yourself and forgive others.
9002 ** May you share freely, never taking more than you give.
9004 *************************************************************************
9005 ** This header file defines the interface that the sqlite page cache
9006 ** subsystem.
9009 #ifndef _PCACHE_H_
9011 typedef struct PgHdr PgHdr;
9012 typedef struct PCache PCache;
9015 ** Every page in the cache is controlled by an instance of the following
9016 ** structure.
9018 struct PgHdr {
9019 sqlite3_pcache_page *pPage; /* Pcache object page handle */
9020 void *pData; /* Page data */
9021 void *pExtra; /* Extra content */
9022 PgHdr *pDirty; /* Transient list of dirty pages */
9023 Pgno pgno; /* Page number for this page */
9024 Pager *pPager; /* The pager this page is part of */
9025 #ifdef SQLITE_CHECK_PAGES
9026 u32 pageHash; /* Hash of page content */
9027 #endif
9028 u16 flags; /* PGHDR flags defined below */
9030 /**********************************************************************
9031 ** Elements above are public. All that follows is private to pcache.c
9032 ** and should not be accessed by other modules.
9034 i16 nRef; /* Number of users of this page */
9035 PCache *pCache; /* Cache that owns this page */
9037 PgHdr *pDirtyNext; /* Next element in list of dirty pages */
9038 PgHdr *pDirtyPrev; /* Previous element in list of dirty pages */
9041 /* Bit values for PgHdr.flags */
9042 #define PGHDR_DIRTY 0x002 /* Page has changed */
9043 #define PGHDR_NEED_SYNC 0x004 /* Fsync the rollback journal before
9044 ** writing this page to the database */
9045 #define PGHDR_NEED_READ 0x008 /* Content is unread */
9046 #define PGHDR_REUSE_UNLIKELY 0x010 /* A hint that reuse is unlikely */
9047 #define PGHDR_DONT_WRITE 0x020 /* Do not write content to disk */
9049 /* Initialize and shutdown the page cache subsystem */
9050 SQLITE_PRIVATE int sqlite3PcacheInitialize(void);
9051 SQLITE_PRIVATE void sqlite3PcacheShutdown(void);
9053 /* Page cache buffer management:
9054 ** These routines implement SQLITE_CONFIG_PAGECACHE.
9056 SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *, int sz, int n);
9058 /* Create a new pager cache.
9059 ** Under memory stress, invoke xStress to try to make pages clean.
9060 ** Only clean and unpinned pages can be reclaimed.
9062 SQLITE_PRIVATE void sqlite3PcacheOpen(
9063 int szPage, /* Size of every page */
9064 int szExtra, /* Extra space associated with each page */
9065 int bPurgeable, /* True if pages are on backing store */
9066 int (*xStress)(void*, PgHdr*), /* Call to try to make pages clean */
9067 void *pStress, /* Argument to xStress */
9068 PCache *pToInit /* Preallocated space for the PCache */
9071 /* Modify the page-size after the cache has been created. */
9072 SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *, int);
9074 /* Return the size in bytes of a PCache object. Used to preallocate
9075 ** storage space.
9077 SQLITE_PRIVATE int sqlite3PcacheSize(void);
9079 /* One release per successful fetch. Page is pinned until released.
9080 ** Reference counted.
9082 SQLITE_PRIVATE int sqlite3PcacheFetch(PCache*, Pgno, int createFlag, PgHdr**);
9083 SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr*);
9085 SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr*); /* Remove page from cache */
9086 SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr*); /* Make sure page is marked dirty */
9087 SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr*); /* Mark a single page as clean */
9088 SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache*); /* Mark all dirty list pages as clean */
9090 /* Change a page number. Used by incr-vacuum. */
9091 SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr*, Pgno);
9093 /* Remove all pages with pgno>x. Reset the cache if x==0 */
9094 SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache*, Pgno x);
9096 /* Get a list of all dirty pages in the cache, sorted by page number */
9097 SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache*);
9099 /* Reset and close the cache object */
9100 SQLITE_PRIVATE void sqlite3PcacheClose(PCache*);
9102 /* Clear flags from pages of the page cache */
9103 SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *);
9105 /* Discard the contents of the cache */
9106 SQLITE_PRIVATE void sqlite3PcacheClear(PCache*);
9108 /* Return the total number of outstanding page references */
9109 SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache*);
9111 /* Increment the reference count of an existing page */
9112 SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr*);
9114 SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr*);
9116 /* Return the total number of pages stored in the cache */
9117 SQLITE_PRIVATE int sqlite3PcachePagecount(PCache*);
9119 #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
9120 /* Iterate through all dirty pages currently stored in the cache. This
9121 ** interface is only available if SQLITE_CHECK_PAGES is defined when the
9122 ** library is built.
9124 SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *));
9125 #endif
9127 /* Set and get the suggested cache-size for the specified pager-cache.
9129 ** If no global maximum is configured, then the system attempts to limit
9130 ** the total number of pages cached by purgeable pager-caches to the sum
9131 ** of the suggested cache-sizes.
9133 SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *, int);
9134 #ifdef SQLITE_TEST
9135 SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *);
9136 #endif
9138 /* Free up as much memory as possible from the page cache */
9139 SQLITE_PRIVATE void sqlite3PcacheShrink(PCache*);
9141 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
9142 /* Try to return memory used by the pcache module to the main memory heap */
9143 SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int);
9144 #endif
9146 #ifdef SQLITE_TEST
9147 SQLITE_PRIVATE void sqlite3PcacheStats(int*,int*,int*,int*);
9148 #endif
9150 SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
9152 #endif /* _PCACHE_H_ */
9154 /************** End of pcache.h **********************************************/
9155 /************** Continuing where we left off in sqliteInt.h ******************/
9157 /************** Include os.h in the middle of sqliteInt.h ********************/
9158 /************** Begin file os.h **********************************************/
9160 ** 2001 September 16
9162 ** The author disclaims copyright to this source code. In place of
9163 ** a legal notice, here is a blessing:
9165 ** May you do good and not evil.
9166 ** May you find forgiveness for yourself and forgive others.
9167 ** May you share freely, never taking more than you give.
9169 ******************************************************************************
9171 ** This header file (together with is companion C source-code file
9172 ** "os.c") attempt to abstract the underlying operating system so that
9173 ** the SQLite library will work on both POSIX and windows systems.
9175 ** This header file is #include-ed by sqliteInt.h and thus ends up
9176 ** being included by every source file.
9178 #ifndef _SQLITE_OS_H_
9179 #define _SQLITE_OS_H_
9182 ** Figure out if we are dealing with Unix, Windows, or some other
9183 ** operating system. After the following block of preprocess macros,
9184 ** all of SQLITE_OS_UNIX, SQLITE_OS_WIN, SQLITE_OS_OS2, and SQLITE_OS_OTHER
9185 ** will defined to either 1 or 0. One of the four will be 1. The other
9186 ** three will be 0.
9188 #if defined(SQLITE_OS_OTHER)
9189 # if SQLITE_OS_OTHER==1
9190 # undef SQLITE_OS_UNIX
9191 # define SQLITE_OS_UNIX 0
9192 # undef SQLITE_OS_WIN
9193 # define SQLITE_OS_WIN 0
9194 # undef SQLITE_OS_OS2
9195 # define SQLITE_OS_OS2 0
9196 # else
9197 # undef SQLITE_OS_OTHER
9198 # endif
9199 #endif
9200 #if !defined(SQLITE_OS_UNIX) && !defined(SQLITE_OS_OTHER)
9201 # define SQLITE_OS_OTHER 0
9202 # ifndef SQLITE_OS_WIN
9203 # if defined(_WIN32) || defined(WIN32) || defined(__CYGWIN__) || defined(__MINGW32__) || defined(__BORLANDC__)
9204 # define SQLITE_OS_WIN 1
9205 # define SQLITE_OS_UNIX 0
9206 # define SQLITE_OS_OS2 0
9207 # elif defined(__EMX__) || defined(_OS2) || defined(OS2) || defined(_OS2_) || defined(__OS2__)
9208 # define SQLITE_OS_WIN 0
9209 # define SQLITE_OS_UNIX 0
9210 # define SQLITE_OS_OS2 1
9211 # else
9212 # define SQLITE_OS_WIN 0
9213 # define SQLITE_OS_UNIX 1
9214 # define SQLITE_OS_OS2 0
9215 # endif
9216 # else
9217 # define SQLITE_OS_UNIX 0
9218 # define SQLITE_OS_OS2 0
9219 # endif
9220 #else
9221 # ifndef SQLITE_OS_WIN
9222 # define SQLITE_OS_WIN 0
9223 # endif
9224 #endif
9227 ** Define the maximum size of a temporary filename
9229 #if SQLITE_OS_WIN
9230 # include <windows.h>
9231 # define SQLITE_TEMPNAME_SIZE (MAX_PATH+50)
9232 #elif SQLITE_OS_OS2
9233 # if (__GNUC__ > 3 || __GNUC__ == 3 && __GNUC_MINOR__ >= 3) && defined(OS2_HIGH_MEMORY)
9234 # include <os2safe.h> /* has to be included before os2.h for linking to work */
9235 # endif
9236 # define INCL_DOSDATETIME
9237 # define INCL_DOSFILEMGR
9238 # define INCL_DOSERRORS
9239 # define INCL_DOSMISC
9240 # define INCL_DOSPROCESS
9241 # define INCL_DOSMODULEMGR
9242 # define INCL_DOSSEMAPHORES
9243 # include <os2.h>
9244 # include <uconv.h>
9245 # define SQLITE_TEMPNAME_SIZE (CCHMAXPATHCOMP)
9246 #else
9247 # define SQLITE_TEMPNAME_SIZE 200
9248 #endif
9251 ** Determine if we are dealing with Windows NT.
9253 #if defined(_WIN32_WINNT)
9254 # define SQLITE_OS_WINNT 1
9255 #else
9256 # define SQLITE_OS_WINNT 0
9257 #endif
9260 ** Determine if we are dealing with WindowsCE - which has a much
9261 ** reduced API.
9263 #if defined(_WIN32_WCE)
9264 # define SQLITE_OS_WINCE 1
9265 #else
9266 # define SQLITE_OS_WINCE 0
9267 #endif
9269 /* If the SET_FULLSYNC macro is not defined above, then make it
9270 ** a no-op
9272 #ifndef SET_FULLSYNC
9273 # define SET_FULLSYNC(x,y)
9274 #endif
9277 ** The default size of a disk sector
9279 #ifndef SQLITE_DEFAULT_SECTOR_SIZE
9280 # define SQLITE_DEFAULT_SECTOR_SIZE 4096
9281 #endif
9284 ** Temporary files are named starting with this prefix followed by 16 random
9285 ** alphanumeric characters, and no file extension. They are stored in the
9286 ** OS's standard temporary file directory, and are deleted prior to exit.
9287 ** If sqlite is being embedded in another program, you may wish to change the
9288 ** prefix to reflect your program's name, so that if your program exits
9289 ** prematurely, old temporary files can be easily identified. This can be done
9290 ** using -DSQLITE_TEMP_FILE_PREFIX=myprefix_ on the compiler command line.
9292 ** 2006-10-31: The default prefix used to be "sqlite_". But then
9293 ** Mcafee started using SQLite in their anti-virus product and it
9294 ** started putting files with the "sqlite" name in the c:/temp folder.
9295 ** This annoyed many windows users. Those users would then do a
9296 ** Google search for "sqlite", find the telephone numbers of the
9297 ** developers and call to wake them up at night and complain.
9298 ** For this reason, the default name prefix is changed to be "sqlite"
9299 ** spelled backwards. So the temp files are still identified, but
9300 ** anybody smart enough to figure out the code is also likely smart
9301 ** enough to know that calling the developer will not help get rid
9302 ** of the file.
9304 #ifndef SQLITE_TEMP_FILE_PREFIX
9305 # define SQLITE_TEMP_FILE_PREFIX "etilqs_"
9306 #endif
9309 ** The following values may be passed as the second argument to
9310 ** sqlite3OsLock(). The various locks exhibit the following semantics:
9312 ** SHARED: Any number of processes may hold a SHARED lock simultaneously.
9313 ** RESERVED: A single process may hold a RESERVED lock on a file at
9314 ** any time. Other processes may hold and obtain new SHARED locks.
9315 ** PENDING: A single process may hold a PENDING lock on a file at
9316 ** any one time. Existing SHARED locks may persist, but no new
9317 ** SHARED locks may be obtained by other processes.
9318 ** EXCLUSIVE: An EXCLUSIVE lock precludes all other locks.
9320 ** PENDING_LOCK may not be passed directly to sqlite3OsLock(). Instead, a
9321 ** process that requests an EXCLUSIVE lock may actually obtain a PENDING
9322 ** lock. This can be upgraded to an EXCLUSIVE lock by a subsequent call to
9323 ** sqlite3OsLock().
9325 #define NO_LOCK 0
9326 #define SHARED_LOCK 1
9327 #define RESERVED_LOCK 2
9328 #define PENDING_LOCK 3
9329 #define EXCLUSIVE_LOCK 4
9332 ** File Locking Notes: (Mostly about windows but also some info for Unix)
9334 ** We cannot use LockFileEx() or UnlockFileEx() on Win95/98/ME because
9335 ** those functions are not available. So we use only LockFile() and
9336 ** UnlockFile().
9338 ** LockFile() prevents not just writing but also reading by other processes.
9339 ** A SHARED_LOCK is obtained by locking a single randomly-chosen
9340 ** byte out of a specific range of bytes. The lock byte is obtained at
9341 ** random so two separate readers can probably access the file at the
9342 ** same time, unless they are unlucky and choose the same lock byte.
9343 ** An EXCLUSIVE_LOCK is obtained by locking all bytes in the range.
9344 ** There can only be one writer. A RESERVED_LOCK is obtained by locking
9345 ** a single byte of the file that is designated as the reserved lock byte.
9346 ** A PENDING_LOCK is obtained by locking a designated byte different from
9347 ** the RESERVED_LOCK byte.
9349 ** On WinNT/2K/XP systems, LockFileEx() and UnlockFileEx() are available,
9350 ** which means we can use reader/writer locks. When reader/writer locks
9351 ** are used, the lock is placed on the same range of bytes that is used
9352 ** for probabilistic locking in Win95/98/ME. Hence, the locking scheme
9353 ** will support two or more Win95 readers or two or more WinNT readers.
9354 ** But a single Win95 reader will lock out all WinNT readers and a single
9355 ** WinNT reader will lock out all other Win95 readers.
9357 ** The following #defines specify the range of bytes used for locking.
9358 ** SHARED_SIZE is the number of bytes available in the pool from which
9359 ** a random byte is selected for a shared lock. The pool of bytes for
9360 ** shared locks begins at SHARED_FIRST.
9362 ** The same locking strategy and
9363 ** byte ranges are used for Unix. This leaves open the possiblity of having
9364 ** clients on win95, winNT, and unix all talking to the same shared file
9365 ** and all locking correctly. To do so would require that samba (or whatever
9366 ** tool is being used for file sharing) implements locks correctly between
9367 ** windows and unix. I'm guessing that isn't likely to happen, but by
9368 ** using the same locking range we are at least open to the possibility.
9370 ** Locking in windows is manditory. For this reason, we cannot store
9371 ** actual data in the bytes used for locking. The pager never allocates
9372 ** the pages involved in locking therefore. SHARED_SIZE is selected so
9373 ** that all locks will fit on a single page even at the minimum page size.
9374 ** PENDING_BYTE defines the beginning of the locks. By default PENDING_BYTE
9375 ** is set high so that we don't have to allocate an unused page except
9376 ** for very large databases. But one should test the page skipping logic
9377 ** by setting PENDING_BYTE low and running the entire regression suite.
9379 ** Changing the value of PENDING_BYTE results in a subtly incompatible
9380 ** file format. Depending on how it is changed, you might not notice
9381 ** the incompatibility right away, even running a full regression test.
9382 ** The default location of PENDING_BYTE is the first byte past the
9383 ** 1GB boundary.
9386 #ifdef SQLITE_OMIT_WSD
9387 # define PENDING_BYTE (0x40000000)
9388 #else
9389 # define PENDING_BYTE sqlite3PendingByte
9390 #endif
9391 #define RESERVED_BYTE (PENDING_BYTE+1)
9392 #define SHARED_FIRST (PENDING_BYTE+2)
9393 #define SHARED_SIZE 510
9396 ** Wrapper around OS specific sqlite3_os_init() function.
9398 SQLITE_PRIVATE int sqlite3OsInit(void);
9401 ** Functions for accessing sqlite3_file methods
9403 SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file*);
9404 SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file*, void*, int amt, i64 offset);
9405 SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file*, const void*, int amt, i64 offset);
9406 SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file*, i64 size);
9407 SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file*, int);
9408 SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file*, i64 *pSize);
9409 SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file*, int);
9410 SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file*, int);
9411 SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut);
9412 SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file*,int,void*);
9413 SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file*,int,void*);
9414 #define SQLITE_FCNTL_DB_UNCHANGED 0xca093fa0
9415 SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id);
9416 SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id);
9417 SQLITE_PRIVATE int sqlite3OsShmMap(sqlite3_file *,int,int,int,void volatile **);
9418 SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int, int, int);
9419 SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id);
9420 SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int);
9424 ** Functions for accessing sqlite3_vfs methods
9426 SQLITE_PRIVATE int sqlite3OsOpen(sqlite3_vfs *, const char *, sqlite3_file*, int, int *);
9427 SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *, const char *, int);
9428 SQLITE_PRIVATE int sqlite3OsAccess(sqlite3_vfs *, const char *, int, int *pResOut);
9429 SQLITE_PRIVATE int sqlite3OsFullPathname(sqlite3_vfs *, const char *, int, char *);
9430 #ifndef SQLITE_OMIT_LOAD_EXTENSION
9431 SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *, const char *);
9432 SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *, int, char *);
9433 SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *, void *, const char *))(void);
9434 SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *, void *);
9435 #endif /* SQLITE_OMIT_LOAD_EXTENSION */
9436 SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *, int, char *);
9437 SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *, int);
9438 SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *, sqlite3_int64*);
9441 ** Convenience functions for opening and closing files using
9442 ** sqlite3_malloc() to obtain space for the file-handle structure.
9444 SQLITE_PRIVATE int sqlite3OsOpenMalloc(sqlite3_vfs *, const char *, sqlite3_file **, int,int*);
9445 SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *);
9447 #endif /* _SQLITE_OS_H_ */
9449 /************** End of os.h **************************************************/
9450 /************** Continuing where we left off in sqliteInt.h ******************/
9451 /************** Include mutex.h in the middle of sqliteInt.h *****************/
9452 /************** Begin file mutex.h *******************************************/
9454 ** 2007 August 28
9456 ** The author disclaims copyright to this source code. In place of
9457 ** a legal notice, here is a blessing:
9459 ** May you do good and not evil.
9460 ** May you find forgiveness for yourself and forgive others.
9461 ** May you share freely, never taking more than you give.
9463 *************************************************************************
9465 ** This file contains the common header for all mutex implementations.
9466 ** The sqliteInt.h header #includes this file so that it is available
9467 ** to all source files. We break it out in an effort to keep the code
9468 ** better organized.
9470 ** NOTE: source files should *not* #include this header file directly.
9471 ** Source files should #include the sqliteInt.h file and let that file
9472 ** include this one indirectly.
9477 ** Figure out what version of the code to use. The choices are
9479 ** SQLITE_MUTEX_OMIT No mutex logic. Not even stubs. The
9480 ** mutexes implemention cannot be overridden
9481 ** at start-time.
9483 ** SQLITE_MUTEX_NOOP For single-threaded applications. No
9484 ** mutual exclusion is provided. But this
9485 ** implementation can be overridden at
9486 ** start-time.
9488 ** SQLITE_MUTEX_PTHREADS For multi-threaded applications on Unix.
9490 ** SQLITE_MUTEX_W32 For multi-threaded applications on Win32.
9492 ** SQLITE_MUTEX_OS2 For multi-threaded applications on OS/2.
9494 #if !SQLITE_THREADSAFE
9495 # define SQLITE_MUTEX_OMIT
9496 #endif
9497 #if SQLITE_THREADSAFE && !defined(SQLITE_MUTEX_NOOP)
9498 # if SQLITE_OS_UNIX
9499 # define SQLITE_MUTEX_PTHREADS
9500 # elif SQLITE_OS_WIN
9501 # define SQLITE_MUTEX_W32
9502 # elif SQLITE_OS_OS2
9503 # define SQLITE_MUTEX_OS2
9504 # else
9505 # define SQLITE_MUTEX_NOOP
9506 # endif
9507 #endif
9509 #ifdef SQLITE_MUTEX_OMIT
9511 ** If this is a no-op implementation, implement everything as macros.
9513 #define sqlite3_mutex_alloc(X) ((sqlite3_mutex*)8)
9514 #define sqlite3_mutex_free(X)
9515 #define sqlite3_mutex_enter(X)
9516 #define sqlite3_mutex_try(X) SQLITE_OK
9517 #define sqlite3_mutex_leave(X)
9518 #define sqlite3_mutex_held(X) ((void)(X),1)
9519 #define sqlite3_mutex_notheld(X) ((void)(X),1)
9520 #define sqlite3MutexAlloc(X) ((sqlite3_mutex*)8)
9521 #define sqlite3MutexInit() SQLITE_OK
9522 #define sqlite3MutexEnd()
9523 #define MUTEX_LOGIC(X)
9524 #else
9525 #define MUTEX_LOGIC(X) X
9526 #endif /* defined(SQLITE_MUTEX_OMIT) */
9528 /************** End of mutex.h ***********************************************/
9529 /************** Continuing where we left off in sqliteInt.h ******************/
9533 ** Each database file to be accessed by the system is an instance
9534 ** of the following structure. There are normally two of these structures
9535 ** in the sqlite.aDb[] array. aDb[0] is the main database file and
9536 ** aDb[1] is the database file used to hold temporary tables. Additional
9537 ** databases may be attached.
9539 struct Db {
9540 char *zName; /* Name of this database */
9541 Btree *pBt; /* The B*Tree structure for this database file */
9542 u8 inTrans; /* 0: not writable. 1: Transaction. 2: Checkpoint */
9543 u8 safety_level; /* How aggressive at syncing data to disk */
9544 Schema *pSchema; /* Pointer to database schema (possibly shared) */
9548 ** An instance of the following structure stores a database schema.
9550 ** Most Schema objects are associated with a Btree. The exception is
9551 ** the Schema for the TEMP databaes (sqlite3.aDb[1]) which is free-standing.
9552 ** In shared cache mode, a single Schema object can be shared by multiple
9553 ** Btrees that refer to the same underlying BtShared object.
9555 ** Schema objects are automatically deallocated when the last Btree that
9556 ** references them is destroyed. The TEMP Schema is manually freed by
9557 ** sqlite3_close().
9559 ** A thread must be holding a mutex on the corresponding Btree in order
9560 ** to access Schema content. This implies that the thread must also be
9561 ** holding a mutex on the sqlite3 connection pointer that owns the Btree.
9562 ** For a TEMP Schema, only the connection mutex is required.
9564 struct Schema {
9565 int schema_cookie; /* Database schema version number for this file */
9566 int iGeneration; /* Generation counter. Incremented with each change */
9567 Hash tblHash; /* All tables indexed by name */
9568 Hash idxHash; /* All (named) indices indexed by name */
9569 Hash trigHash; /* All triggers indexed by name */
9570 Hash fkeyHash; /* All foreign keys by referenced table name */
9571 Table *pSeqTab; /* The sqlite_sequence table used by AUTOINCREMENT */
9572 u8 file_format; /* Schema format version for this file */
9573 u8 enc; /* Text encoding used by this database */
9574 u16 flags; /* Flags associated with this schema */
9575 int cache_size; /* Number of pages to use in the cache */
9579 ** These macros can be used to test, set, or clear bits in the
9580 ** Db.pSchema->flags field.
9582 #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))==(P))
9583 #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))!=0)
9584 #define DbSetProperty(D,I,P) (D)->aDb[I].pSchema->flags|=(P)
9585 #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->flags&=~(P)
9588 ** Allowed values for the DB.pSchema->flags field.
9590 ** The DB_SchemaLoaded flag is set after the database schema has been
9591 ** read into internal hash tables.
9593 ** DB_UnresetViews means that one or more views have column names that
9594 ** have been filled out. If the schema changes, these column names might
9595 ** changes and so the view will need to be reset.
9597 #define DB_SchemaLoaded 0x0001 /* The schema has been loaded */
9598 #define DB_UnresetViews 0x0002 /* Some views have defined column names */
9599 #define DB_Empty 0x0004 /* The file is empty (length 0 bytes) */
9602 ** The number of different kinds of things that can be limited
9603 ** using the sqlite3_limit() interface.
9605 #define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1)
9608 ** Lookaside malloc is a set of fixed-size buffers that can be used
9609 ** to satisfy small transient memory allocation requests for objects
9610 ** associated with a particular database connection. The use of
9611 ** lookaside malloc provides a significant performance enhancement
9612 ** (approx 10%) by avoiding numerous malloc/free requests while parsing
9613 ** SQL statements.
9615 ** The Lookaside structure holds configuration information about the
9616 ** lookaside malloc subsystem. Each available memory allocation in
9617 ** the lookaside subsystem is stored on a linked list of LookasideSlot
9618 ** objects.
9620 ** Lookaside allocations are only allowed for objects that are associated
9621 ** with a particular database connection. Hence, schema information cannot
9622 ** be stored in lookaside because in shared cache mode the schema information
9623 ** is shared by multiple database connections. Therefore, while parsing
9624 ** schema information, the Lookaside.bEnabled flag is cleared so that
9625 ** lookaside allocations are not used to construct the schema objects.
9627 struct Lookaside {
9628 u16 sz; /* Size of each buffer in bytes */
9629 u8 bEnabled; /* False to disable new lookaside allocations */
9630 u8 bMalloced; /* True if pStart obtained from sqlite3_malloc() */
9631 int nOut; /* Number of buffers currently checked out */
9632 int mxOut; /* Highwater mark for nOut */
9633 int anStat[3]; /* 0: hits. 1: size misses. 2: full misses */
9634 LookasideSlot *pFree; /* List of available buffers */
9635 void *pStart; /* First byte of available memory space */
9636 void *pEnd; /* First byte past end of available space */
9638 struct LookasideSlot {
9639 LookasideSlot *pNext; /* Next buffer in the list of free buffers */
9643 ** A hash table for function definitions.
9645 ** Hash each FuncDef structure into one of the FuncDefHash.a[] slots.
9646 ** Collisions are on the FuncDef.pHash chain.
9648 struct FuncDefHash {
9649 FuncDef *a[23]; /* Hash table for functions */
9653 ** Each database connection is an instance of the following structure.
9655 ** The sqlite.lastRowid records the last insert rowid generated by an
9656 ** insert statement. Inserts on views do not affect its value. Each
9657 ** trigger has its own context, so that lastRowid can be updated inside
9658 ** triggers as usual. The previous value will be restored once the trigger
9659 ** exits. Upon entering a before or instead of trigger, lastRowid is no
9660 ** longer (since after version 2.8.12) reset to -1.
9662 ** The sqlite.nChange does not count changes within triggers and keeps no
9663 ** context. It is reset at start of sqlite3_exec.
9664 ** The sqlite.lsChange represents the number of changes made by the last
9665 ** insert, update, or delete statement. It remains constant throughout the
9666 ** length of a statement and is then updated by OP_SetCounts. It keeps a
9667 ** context stack just like lastRowid so that the count of changes
9668 ** within a trigger is not seen outside the trigger. Changes to views do not
9669 ** affect the value of lsChange.
9670 ** The sqlite.csChange keeps track of the number of current changes (since
9671 ** the last statement) and is used to update sqlite_lsChange.
9673 ** The member variables sqlite.errCode, sqlite.zErrMsg and sqlite.zErrMsg16
9674 ** store the most recent error code and, if applicable, string. The
9675 ** internal function sqlite3Error() is used to set these variables
9676 ** consistently.
9678 struct sqlite3 {
9679 sqlite3_vfs *pVfs; /* OS Interface */
9680 int nDb; /* Number of backends currently in use */
9681 Db *aDb; /* All backends */
9682 int flags; /* Miscellaneous flags. See below */
9683 unsigned int openFlags; /* Flags passed to sqlite3_vfs.xOpen() */
9684 int errCode; /* Most recent error code (SQLITE_*) */
9685 int errMask; /* & result codes with this before returning */
9686 u8 autoCommit; /* The auto-commit flag. */
9687 u8 temp_store; /* 1: file 2: memory 0: default */
9688 u8 mallocFailed; /* True if we have seen a malloc failure */
9689 u8 dfltLockMode; /* Default locking-mode for attached dbs */
9690 signed char nextAutovac; /* Autovac setting after VACUUM if >=0 */
9691 u8 suppressErr; /* Do not issue error messages if true */
9692 u8 vtabOnConflict; /* Value to return for s3_vtab_on_conflict() */
9693 int nextPagesize; /* Pagesize after VACUUM if >0 */
9694 int nTable; /* Number of tables in the database */
9695 CollSeq *pDfltColl; /* The default collating sequence (BINARY) */
9696 i64 lastRowid; /* ROWID of most recent insert (see above) */
9697 u32 magic; /* Magic number for detect library misuse */
9698 int nChange; /* Value returned by sqlite3_changes() */
9699 int nTotalChange; /* Value returned by sqlite3_total_changes() */
9700 sqlite3_mutex *mutex; /* Connection mutex */
9701 int aLimit[SQLITE_N_LIMIT]; /* Limits */
9702 struct sqlite3InitInfo { /* Information used during initialization */
9703 int iDb; /* When back is being initialized */
9704 int newTnum; /* Rootpage of table being initialized */
9705 u8 busy; /* TRUE if currently initializing */
9706 u8 orphanTrigger; /* Last statement is orphaned TEMP trigger */
9707 } init;
9708 int nExtension; /* Number of loaded extensions */
9709 void **aExtension; /* Array of shared library handles */
9710 struct Vdbe *pVdbe; /* List of active virtual machines */
9711 int activeVdbeCnt; /* Number of VDBEs currently executing */
9712 int writeVdbeCnt; /* Number of active VDBEs that are writing */
9713 int vdbeExecCnt; /* Number of nested calls to VdbeExec() */
9714 void (*xTrace)(void*,const char*); /* Trace function */
9715 void *pTraceArg; /* Argument to the trace function */
9716 void (*xProfile)(void*,const char*,u64); /* Profiling function */
9717 void *pProfileArg; /* Argument to profile function */
9718 void *pCommitArg; /* Argument to xCommitCallback() */
9719 int (*xCommitCallback)(void*); /* Invoked at every commit. */
9720 void *pRollbackArg; /* Argument to xRollbackCallback() */
9721 void (*xRollbackCallback)(void*); /* Invoked at every commit. */
9722 void *pUpdateArg;
9723 void (*xUpdateCallback)(void*,int, const char*,const char*,sqlite_int64);
9724 #ifndef SQLITE_OMIT_WAL
9725 int (*xWalCallback)(void *, sqlite3 *, const char *, int);
9726 void *pWalArg;
9727 #endif
9728 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*);
9729 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*);
9730 void *pCollNeededArg;
9731 sqlite3_value *pErr; /* Most recent error message */
9732 char *zErrMsg; /* Most recent error message (UTF-8 encoded) */
9733 char *zErrMsg16; /* Most recent error message (UTF-16 encoded) */
9734 union {
9735 volatile int isInterrupted; /* True if sqlite3_interrupt has been called */
9736 double notUsed1; /* Spacer */
9737 } u1;
9738 Lookaside lookaside; /* Lookaside malloc configuration */
9739 #ifndef SQLITE_OMIT_AUTHORIZATION
9740 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
9741 /* Access authorization function */
9742 void *pAuthArg; /* 1st argument to the access auth function */
9743 #endif
9744 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
9745 int (*xProgress)(void *); /* The progress callback */
9746 void *pProgressArg; /* Argument to the progress callback */
9747 int nProgressOps; /* Number of opcodes for progress callback */
9748 #endif
9749 #ifndef SQLITE_OMIT_VIRTUALTABLE
9750 Hash aModule; /* populated by sqlite3_create_module() */
9751 VtabCtx *pVtabCtx; /* Context for active vtab connect/create */
9752 VTable **aVTrans; /* Virtual tables with open transactions */
9753 int nVTrans; /* Allocated size of aVTrans */
9754 VTable *pDisconnect; /* Disconnect these in next sqlite3_prepare() */
9755 #endif
9756 FuncDefHash aFunc; /* Hash table of connection functions */
9757 Hash aCollSeq; /* All collating sequences */
9758 BusyHandler busyHandler; /* Busy callback */
9759 int busyTimeout; /* Busy handler timeout, in msec */
9760 Db aDbStatic[2]; /* Static space for the 2 default backends */
9761 Savepoint *pSavepoint; /* List of active savepoints */
9762 int nSavepoint; /* Number of non-transaction savepoints */
9763 int nStatement; /* Number of nested statement-transactions */
9764 u8 isTransactionSavepoint; /* True if the outermost savepoint is a TS */
9765 i64 nDeferredCons; /* Net deferred constraints this transaction. */
9766 int *pnBytesFreed; /* If not NULL, increment this in DbFree() */
9768 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
9769 /* The following variables are all protected by the STATIC_MASTER
9770 ** mutex, not by sqlite3.mutex. They are used by code in notify.c.
9772 ** When X.pUnlockConnection==Y, that means that X is waiting for Y to
9773 ** unlock so that it can proceed.
9775 ** When X.pBlockingConnection==Y, that means that something that X tried
9776 ** tried to do recently failed with an SQLITE_LOCKED error due to locks
9777 ** held by Y.
9779 sqlite3 *pBlockingConnection; /* Connection that caused SQLITE_LOCKED */
9780 sqlite3 *pUnlockConnection; /* Connection to watch for unlock */
9781 void *pUnlockArg; /* Argument to xUnlockNotify */
9782 void (*xUnlockNotify)(void **, int); /* Unlock notify callback */
9783 sqlite3 *pNextBlocked; /* Next in list of all blocked connections */
9784 #endif
9788 ** A macro to discover the encoding of a database.
9790 #define ENC(db) ((db)->aDb[0].pSchema->enc)
9793 ** Possible values for the sqlite3.flags.
9795 #define SQLITE_VdbeTrace 0x00000100 /* True to trace VDBE execution */
9796 #define SQLITE_InternChanges 0x00000200 /* Uncommitted Hash table changes */
9797 #define SQLITE_FullColNames 0x00000400 /* Show full column names on SELECT */
9798 #define SQLITE_ShortColNames 0x00000800 /* Show short columns names */
9799 #define SQLITE_CountRows 0x00001000 /* Count rows changed by INSERT, */
9800 /* DELETE, or UPDATE and return */
9801 /* the count using a callback. */
9802 #define SQLITE_NullCallback 0x00002000 /* Invoke the callback once if the */
9803 /* result set is empty */
9804 #define SQLITE_SqlTrace 0x00004000 /* Debug print SQL as it executes */
9805 #define SQLITE_VdbeListing 0x00008000 /* Debug listings of VDBE programs */
9806 #define SQLITE_WriteSchema 0x00010000 /* OK to update SQLITE_MASTER */
9807 #define SQLITE_NoReadlock 0x00020000 /* Readlocks are omitted when
9808 ** accessing read-only databases */
9809 #define SQLITE_IgnoreChecks 0x00040000 /* Do not enforce check constraints */
9810 #define SQLITE_ReadUncommitted 0x0080000 /* For shared-cache mode */
9811 #define SQLITE_LegacyFileFmt 0x00100000 /* Create new databases in format 1 */
9812 #define SQLITE_FullFSync 0x00200000 /* Use full fsync on the backend */
9813 #define SQLITE_CkptFullFSync 0x00400000 /* Use full fsync for checkpoint */
9814 #define SQLITE_RecoveryMode 0x00800000 /* Ignore schema errors */
9815 #define SQLITE_ReverseOrder 0x01000000 /* Reverse unordered SELECTs */
9816 #define SQLITE_RecTriggers 0x02000000 /* Enable recursive triggers */
9817 #define SQLITE_ForeignKeys 0x04000000 /* Enforce foreign key constraints */
9818 #define SQLITE_AutoIndex 0x08000000 /* Enable automatic indexes */
9819 #define SQLITE_PreferBuiltin 0x10000000 /* Preference to built-in funcs */
9820 #define SQLITE_LoadExtension 0x20000000 /* Enable load_extension */
9821 #define SQLITE_EnableTrigger 0x40000000 /* True to enable triggers */
9824 ** Bits of the sqlite3.flags field that are used by the
9825 ** sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS,...) interface.
9826 ** These must be the low-order bits of the flags field.
9828 #define SQLITE_QueryFlattener 0x01 /* Disable query flattening */
9829 #define SQLITE_ColumnCache 0x02 /* Disable the column cache */
9830 #define SQLITE_IndexSort 0x04 /* Disable indexes for sorting */
9831 #define SQLITE_IndexSearch 0x08 /* Disable indexes for searching */
9832 #define SQLITE_IndexCover 0x10 /* Disable index covering table */
9833 #define SQLITE_GroupByOrder 0x20 /* Disable GROUPBY cover of ORDERBY */
9834 #define SQLITE_FactorOutConst 0x40 /* Disable factoring out constants */
9835 #define SQLITE_IdxRealAsInt 0x80 /* Store REAL as INT in indices */
9836 #define SQLITE_DistinctOpt 0x80 /* DISTINCT using indexes */
9837 #define SQLITE_OptMask 0xff /* Mask of all disablable opts */
9840 ** Possible values for the sqlite.magic field.
9841 ** The numbers are obtained at random and have no special meaning, other
9842 ** than being distinct from one another.
9844 #define SQLITE_MAGIC_OPEN 0xa029a697 /* Database is open */
9845 #define SQLITE_MAGIC_CLOSED 0x9f3c2d33 /* Database is closed */
9846 #define SQLITE_MAGIC_SICK 0x4b771290 /* Error and awaiting close */
9847 #define SQLITE_MAGIC_BUSY 0xf03b7906 /* Database currently in use */
9848 #define SQLITE_MAGIC_ERROR 0xb5357930 /* An SQLITE_MISUSE error occurred */
9851 ** Each SQL function is defined by an instance of the following
9852 ** structure. A pointer to this structure is stored in the sqlite.aFunc
9853 ** hash table. When multiple functions have the same name, the hash table
9854 ** points to a linked list of these structures.
9856 struct FuncDef {
9857 i16 nArg; /* Number of arguments. -1 means unlimited */
9858 u8 iPrefEnc; /* Preferred text encoding (SQLITE_UTF8, 16LE, 16BE) */
9859 u8 flags; /* Some combination of SQLITE_FUNC_* */
9860 void *pUserData; /* User data parameter */
9861 FuncDef *pNext; /* Next function with same name */
9862 void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */
9863 void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */
9864 void (*xFinalize)(sqlite3_context*); /* Aggregate finalizer */
9865 char *zName; /* SQL name of the function. */
9866 FuncDef *pHash; /* Next with a different name but the same hash */
9867 FuncDestructor *pDestructor; /* Reference counted destructor function */
9871 ** This structure encapsulates a user-function destructor callback (as
9872 ** configured using create_function_v2()) and a reference counter. When
9873 ** create_function_v2() is called to create a function with a destructor,
9874 ** a single object of this type is allocated. FuncDestructor.nRef is set to
9875 ** the number of FuncDef objects created (either 1 or 3, depending on whether
9876 ** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor
9877 ** member of each of the new FuncDef objects is set to point to the allocated
9878 ** FuncDestructor.
9880 ** Thereafter, when one of the FuncDef objects is deleted, the reference
9881 ** count on this object is decremented. When it reaches 0, the destructor
9882 ** is invoked and the FuncDestructor structure freed.
9884 struct FuncDestructor {
9885 int nRef;
9886 void (*xDestroy)(void *);
9887 void *pUserData;
9891 ** Possible values for FuncDef.flags
9893 #define SQLITE_FUNC_LIKE 0x01 /* Candidate for the LIKE optimization */
9894 #define SQLITE_FUNC_CASE 0x02 /* Case-sensitive LIKE-type function */
9895 #define SQLITE_FUNC_EPHEM 0x04 /* Ephemeral. Delete with VDBE */
9896 #define SQLITE_FUNC_NEEDCOLL 0x08 /* sqlite3GetFuncCollSeq() might be called */
9897 #define SQLITE_FUNC_PRIVATE 0x10 /* Allowed for internal use only */
9898 #define SQLITE_FUNC_COUNT 0x20 /* Built-in count(*) aggregate */
9899 #define SQLITE_FUNC_COALESCE 0x40 /* Built-in coalesce() or ifnull() function */
9902 ** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
9903 ** used to create the initializers for the FuncDef structures.
9905 ** FUNCTION(zName, nArg, iArg, bNC, xFunc)
9906 ** Used to create a scalar function definition of a function zName
9907 ** implemented by C function xFunc that accepts nArg arguments. The
9908 ** value passed as iArg is cast to a (void*) and made available
9909 ** as the user-data (sqlite3_user_data()) for the function. If
9910 ** argument bNC is true, then the SQLITE_FUNC_NEEDCOLL flag is set.
9912 ** AGGREGATE(zName, nArg, iArg, bNC, xStep, xFinal)
9913 ** Used to create an aggregate function definition implemented by
9914 ** the C functions xStep and xFinal. The first four parameters
9915 ** are interpreted in the same way as the first 4 parameters to
9916 ** FUNCTION().
9918 ** LIKEFUNC(zName, nArg, pArg, flags)
9919 ** Used to create a scalar function definition of a function zName
9920 ** that accepts nArg arguments and is implemented by a call to C
9921 ** function likeFunc. Argument pArg is cast to a (void *) and made
9922 ** available as the function user-data (sqlite3_user_data()). The
9923 ** FuncDef.flags variable is set to the value passed as the flags
9924 ** parameter.
9926 #define FUNCTION(zName, nArg, iArg, bNC, xFunc) \
9927 {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
9928 SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
9929 #define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \
9930 {nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
9931 pArg, 0, xFunc, 0, 0, #zName, 0, 0}
9932 #define LIKEFUNC(zName, nArg, arg, flags) \
9933 {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0}
9934 #define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \
9935 {nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \
9936 SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
9939 ** All current savepoints are stored in a linked list starting at
9940 ** sqlite3.pSavepoint. The first element in the list is the most recently
9941 ** opened savepoint. Savepoints are added to the list by the vdbe
9942 ** OP_Savepoint instruction.
9944 struct Savepoint {
9945 char *zName; /* Savepoint name (nul-terminated) */
9946 i64 nDeferredCons; /* Number of deferred fk violations */
9947 Savepoint *pNext; /* Parent savepoint (if any) */
9951 ** The following are used as the second parameter to sqlite3Savepoint(),
9952 ** and as the P1 argument to the OP_Savepoint instruction.
9954 #define SAVEPOINT_BEGIN 0
9955 #define SAVEPOINT_RELEASE 1
9956 #define SAVEPOINT_ROLLBACK 2
9960 ** Each SQLite module (virtual table definition) is defined by an
9961 ** instance of the following structure, stored in the sqlite3.aModule
9962 ** hash table.
9964 struct Module {
9965 const sqlite3_module *pModule; /* Callback pointers */
9966 const char *zName; /* Name passed to create_module() */
9967 void *pAux; /* pAux passed to create_module() */
9968 void (*xDestroy)(void *); /* Module destructor function */
9972 ** information about each column of an SQL table is held in an instance
9973 ** of this structure.
9975 struct Column {
9976 char *zName; /* Name of this column */
9977 Expr *pDflt; /* Default value of this column */
9978 char *zDflt; /* Original text of the default value */
9979 char *zType; /* Data type for this column */
9980 char *zColl; /* Collating sequence. If NULL, use the default */
9981 u8 notNull; /* True if there is a NOT NULL constraint */
9982 u8 isPrimKey; /* True if this column is part of the PRIMARY KEY */
9983 char affinity; /* One of the SQLITE_AFF_... values */
9984 #ifndef SQLITE_OMIT_VIRTUALTABLE
9985 u8 isHidden; /* True if this column is 'hidden' */
9986 #endif
9990 ** A "Collating Sequence" is defined by an instance of the following
9991 ** structure. Conceptually, a collating sequence consists of a name and
9992 ** a comparison routine that defines the order of that sequence.
9994 ** There may two separate implementations of the collation function, one
9995 ** that processes text in UTF-8 encoding (CollSeq.xCmp) and another that
9996 ** processes text encoded in UTF-16 (CollSeq.xCmp16), using the machine
9997 ** native byte order. When a collation sequence is invoked, SQLite selects
9998 ** the version that will require the least expensive encoding
9999 ** translations, if any.
10001 ** The CollSeq.pUser member variable is an extra parameter that passed in
10002 ** as the first argument to the UTF-8 comparison function, xCmp.
10003 ** CollSeq.pUser16 is the equivalent for the UTF-16 comparison function,
10004 ** xCmp16.
10006 ** If both CollSeq.xCmp and CollSeq.xCmp16 are NULL, it means that the
10007 ** collating sequence is undefined. Indices built on an undefined
10008 ** collating sequence may not be read or written.
10010 struct CollSeq {
10011 char *zName; /* Name of the collating sequence, UTF-8 encoded */
10012 u8 enc; /* Text encoding handled by xCmp() */
10013 void *pUser; /* First argument to xCmp() */
10014 int (*xCmp)(void*,int, const void*, int, const void*);
10015 void (*xDel)(void*); /* Destructor for pUser */
10019 ** A sort order can be either ASC or DESC.
10021 #define SQLITE_SO_ASC 0 /* Sort in ascending order */
10022 #define SQLITE_SO_DESC 1 /* Sort in ascending order */
10025 ** Column affinity types.
10027 ** These used to have mnemonic name like 'i' for SQLITE_AFF_INTEGER and
10028 ** 't' for SQLITE_AFF_TEXT. But we can save a little space and improve
10029 ** the speed a little by numbering the values consecutively.
10031 ** But rather than start with 0 or 1, we begin with 'a'. That way,
10032 ** when multiple affinity types are concatenated into a string and
10033 ** used as the P4 operand, they will be more readable.
10035 ** Note also that the numeric types are grouped together so that testing
10036 ** for a numeric type is a single comparison.
10038 #define SQLITE_AFF_TEXT 'a'
10039 #define SQLITE_AFF_NONE 'b'
10040 #define SQLITE_AFF_NUMERIC 'c'
10041 #define SQLITE_AFF_INTEGER 'd'
10042 #define SQLITE_AFF_REAL 'e'
10044 #define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC)
10047 ** The SQLITE_AFF_MASK values masks off the significant bits of an
10048 ** affinity value.
10050 #define SQLITE_AFF_MASK 0x67
10053 ** Additional bit values that can be ORed with an affinity without
10054 ** changing the affinity.
10056 #define SQLITE_JUMPIFNULL 0x08 /* jumps if either operand is NULL */
10057 #define SQLITE_STOREP2 0x10 /* Store result in reg[P2] rather than jump */
10058 #define SQLITE_NULLEQ 0x80 /* NULL=NULL */
10061 ** An object of this type is created for each virtual table present in
10062 ** the database schema.
10064 ** If the database schema is shared, then there is one instance of this
10065 ** structure for each database connection (sqlite3*) that uses the shared
10066 ** schema. This is because each database connection requires its own unique
10067 ** instance of the sqlite3_vtab* handle used to access the virtual table
10068 ** implementation. sqlite3_vtab* handles can not be shared between
10069 ** database connections, even when the rest of the in-memory database
10070 ** schema is shared, as the implementation often stores the database
10071 ** connection handle passed to it via the xConnect() or xCreate() method
10072 ** during initialization internally. This database connection handle may
10073 ** then be used by the virtual table implementation to access real tables
10074 ** within the database. So that they appear as part of the callers
10075 ** transaction, these accesses need to be made via the same database
10076 ** connection as that used to execute SQL operations on the virtual table.
10078 ** All VTable objects that correspond to a single table in a shared
10079 ** database schema are initially stored in a linked-list pointed to by
10080 ** the Table.pVTable member variable of the corresponding Table object.
10081 ** When an sqlite3_prepare() operation is required to access the virtual
10082 ** table, it searches the list for the VTable that corresponds to the
10083 ** database connection doing the preparing so as to use the correct
10084 ** sqlite3_vtab* handle in the compiled query.
10086 ** When an in-memory Table object is deleted (for example when the
10087 ** schema is being reloaded for some reason), the VTable objects are not
10088 ** deleted and the sqlite3_vtab* handles are not xDisconnect()ed
10089 ** immediately. Instead, they are moved from the Table.pVTable list to
10090 ** another linked list headed by the sqlite3.pDisconnect member of the
10091 ** corresponding sqlite3 structure. They are then deleted/xDisconnected
10092 ** next time a statement is prepared using said sqlite3*. This is done
10093 ** to avoid deadlock issues involving multiple sqlite3.mutex mutexes.
10094 ** Refer to comments above function sqlite3VtabUnlockList() for an
10095 ** explanation as to why it is safe to add an entry to an sqlite3.pDisconnect
10096 ** list without holding the corresponding sqlite3.mutex mutex.
10098 ** The memory for objects of this type is always allocated by
10099 ** sqlite3DbMalloc(), using the connection handle stored in VTable.db as
10100 ** the first argument.
10102 struct VTable {
10103 sqlite3 *db; /* Database connection associated with this table */
10104 Module *pMod; /* Pointer to module implementation */
10105 sqlite3_vtab *pVtab; /* Pointer to vtab instance */
10106 int nRef; /* Number of pointers to this structure */
10107 u8 bConstraint; /* True if constraints are supported */
10108 int iSavepoint; /* Depth of the SAVEPOINT stack */
10109 VTable *pNext; /* Next in linked list (see above) */
10113 ** Each SQL table is represented in memory by an instance of the
10114 ** following structure.
10116 ** Table.zName is the name of the table. The case of the original
10117 ** CREATE TABLE statement is stored, but case is not significant for
10118 ** comparisons.
10120 ** Table.nCol is the number of columns in this table. Table.aCol is a
10121 ** pointer to an array of Column structures, one for each column.
10123 ** If the table has an INTEGER PRIMARY KEY, then Table.iPKey is the index of
10124 ** the column that is that key. Otherwise Table.iPKey is negative. Note
10125 ** that the datatype of the PRIMARY KEY must be INTEGER for this field to
10126 ** be set. An INTEGER PRIMARY KEY is used as the rowid for each row of
10127 ** the table. If a table has no INTEGER PRIMARY KEY, then a random rowid
10128 ** is generated for each row of the table. TF_HasPrimaryKey is set if
10129 ** the table has any PRIMARY KEY, INTEGER or otherwise.
10131 ** Table.tnum is the page number for the root BTree page of the table in the
10132 ** database file. If Table.iDb is the index of the database table backend
10133 ** in sqlite.aDb[]. 0 is for the main database and 1 is for the file that
10134 ** holds temporary tables and indices. If TF_Ephemeral is set
10135 ** then the table is stored in a file that is automatically deleted
10136 ** when the VDBE cursor to the table is closed. In this case Table.tnum
10137 ** refers VDBE cursor number that holds the table open, not to the root
10138 ** page number. Transient tables are used to hold the results of a
10139 ** sub-query that appears instead of a real table name in the FROM clause
10140 ** of a SELECT statement.
10142 struct Table {
10143 char *zName; /* Name of the table or view */
10144 int iPKey; /* If not negative, use aCol[iPKey] as the primary key */
10145 int nCol; /* Number of columns in this table */
10146 Column *aCol; /* Information about each column */
10147 Index *pIndex; /* List of SQL indexes on this table. */
10148 int tnum; /* Root BTree node for this table (see note above) */
10149 tRowcnt nRowEst; /* Estimated rows in table - from sqlite_stat1 table */
10150 Select *pSelect; /* NULL for tables. Points to definition if a view. */
10151 u16 nRef; /* Number of pointers to this Table */
10152 u8 tabFlags; /* Mask of TF_* values */
10153 u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */
10154 FKey *pFKey; /* Linked list of all foreign keys in this table */
10155 char *zColAff; /* String defining the affinity of each column */
10156 #ifndef SQLITE_OMIT_CHECK
10157 Expr *pCheck; /* The AND of all CHECK constraints */
10158 #endif
10159 #ifndef SQLITE_OMIT_ALTERTABLE
10160 int addColOffset; /* Offset in CREATE TABLE stmt to add a new column */
10161 #endif
10162 #ifndef SQLITE_OMIT_VIRTUALTABLE
10163 VTable *pVTable; /* List of VTable objects. */
10164 int nModuleArg; /* Number of arguments to the module */
10165 char **azModuleArg; /* Text of all module args. [0] is module name */
10166 #endif
10167 Trigger *pTrigger; /* List of triggers stored in pSchema */
10168 Schema *pSchema; /* Schema that contains this table */
10169 Table *pNextZombie; /* Next on the Parse.pZombieTab list */
10173 ** Allowed values for Tabe.tabFlags.
10175 #define TF_Readonly 0x01 /* Read-only system table */
10176 #define TF_Ephemeral 0x02 /* An ephemeral table */
10177 #define TF_HasPrimaryKey 0x04 /* Table has a primary key */
10178 #define TF_Autoincrement 0x08 /* Integer primary key is autoincrement */
10179 #define TF_Virtual 0x10 /* Is a virtual table */
10180 #define TF_NeedMetadata 0x20 /* aCol[].zType and aCol[].pColl missing */
10185 ** Test to see whether or not a table is a virtual table. This is
10186 ** done as a macro so that it will be optimized out when virtual
10187 ** table support is omitted from the build.
10189 #ifndef SQLITE_OMIT_VIRTUALTABLE
10190 # define IsVirtual(X) (((X)->tabFlags & TF_Virtual)!=0)
10191 # define IsHiddenColumn(X) ((X)->isHidden)
10192 #else
10193 # define IsVirtual(X) 0
10194 # define IsHiddenColumn(X) 0
10195 #endif
10198 ** Each foreign key constraint is an instance of the following structure.
10200 ** A foreign key is associated with two tables. The "from" table is
10201 ** the table that contains the REFERENCES clause that creates the foreign
10202 ** key. The "to" table is the table that is named in the REFERENCES clause.
10203 ** Consider this example:
10205 ** CREATE TABLE ex1(
10206 ** a INTEGER PRIMARY KEY,
10207 ** b INTEGER CONSTRAINT fk1 REFERENCES ex2(x)
10208 ** );
10210 ** For foreign key "fk1", the from-table is "ex1" and the to-table is "ex2".
10212 ** Each REFERENCES clause generates an instance of the following structure
10213 ** which is attached to the from-table. The to-table need not exist when
10214 ** the from-table is created. The existence of the to-table is not checked.
10216 struct FKey {
10217 Table *pFrom; /* Table containing the REFERENCES clause (aka: Child) */
10218 FKey *pNextFrom; /* Next foreign key in pFrom */
10219 char *zTo; /* Name of table that the key points to (aka: Parent) */
10220 FKey *pNextTo; /* Next foreign key on table named zTo */
10221 FKey *pPrevTo; /* Previous foreign key on table named zTo */
10222 int nCol; /* Number of columns in this key */
10223 /* EV: R-30323-21917 */
10224 u8 isDeferred; /* True if constraint checking is deferred till COMMIT */
10225 u8 aAction[2]; /* ON DELETE and ON UPDATE actions, respectively */
10226 Trigger *apTrigger[2]; /* Triggers for aAction[] actions */
10227 struct sColMap { /* Mapping of columns in pFrom to columns in zTo */
10228 int iFrom; /* Index of column in pFrom */
10229 char *zCol; /* Name of column in zTo. If 0 use PRIMARY KEY */
10230 } aCol[1]; /* One entry for each of nCol column s */
10234 ** SQLite supports many different ways to resolve a constraint
10235 ** error. ROLLBACK processing means that a constraint violation
10236 ** causes the operation in process to fail and for the current transaction
10237 ** to be rolled back. ABORT processing means the operation in process
10238 ** fails and any prior changes from that one operation are backed out,
10239 ** but the transaction is not rolled back. FAIL processing means that
10240 ** the operation in progress stops and returns an error code. But prior
10241 ** changes due to the same operation are not backed out and no rollback
10242 ** occurs. IGNORE means that the particular row that caused the constraint
10243 ** error is not inserted or updated. Processing continues and no error
10244 ** is returned. REPLACE means that preexisting database rows that caused
10245 ** a UNIQUE constraint violation are removed so that the new insert or
10246 ** update can proceed. Processing continues and no error is reported.
10248 ** RESTRICT, SETNULL, and CASCADE actions apply only to foreign keys.
10249 ** RESTRICT is the same as ABORT for IMMEDIATE foreign keys and the
10250 ** same as ROLLBACK for DEFERRED keys. SETNULL means that the foreign
10251 ** key is set to NULL. CASCADE means that a DELETE or UPDATE of the
10252 ** referenced table row is propagated into the row that holds the
10253 ** foreign key.
10255 ** The following symbolic values are used to record which type
10256 ** of action to take.
10258 #define OE_None 0 /* There is no constraint to check */
10259 #define OE_Rollback 1 /* Fail the operation and rollback the transaction */
10260 #define OE_Abort 2 /* Back out changes but do no rollback transaction */
10261 #define OE_Fail 3 /* Stop the operation but leave all prior changes */
10262 #define OE_Ignore 4 /* Ignore the error. Do not do the INSERT or UPDATE */
10263 #define OE_Replace 5 /* Delete existing record, then do INSERT or UPDATE */
10265 #define OE_Restrict 6 /* OE_Abort for IMMEDIATE, OE_Rollback for DEFERRED */
10266 #define OE_SetNull 7 /* Set the foreign key value to NULL */
10267 #define OE_SetDflt 8 /* Set the foreign key value to its default */
10268 #define OE_Cascade 9 /* Cascade the changes */
10270 #define OE_Default 99 /* Do whatever the default action is */
10274 ** An instance of the following structure is passed as the first
10275 ** argument to sqlite3VdbeKeyCompare and is used to control the
10276 ** comparison of the two index keys.
10278 struct KeyInfo {
10279 sqlite3 *db; /* The database connection */
10280 u8 enc; /* Text encoding - one of the SQLITE_UTF* values */
10281 u16 nField; /* Number of entries in aColl[] */
10282 u8 *aSortOrder; /* Sort order for each column. May be NULL */
10283 CollSeq *aColl[1]; /* Collating sequence for each term of the key */
10287 ** An instance of the following structure holds information about a
10288 ** single index record that has already been parsed out into individual
10289 ** values.
10291 ** A record is an object that contains one or more fields of data.
10292 ** Records are used to store the content of a table row and to store
10293 ** the key of an index. A blob encoding of a record is created by
10294 ** the OP_MakeRecord opcode of the VDBE and is disassembled by the
10295 ** OP_Column opcode.
10297 ** This structure holds a record that has already been disassembled
10298 ** into its constituent fields.
10300 struct UnpackedRecord {
10301 KeyInfo *pKeyInfo; /* Collation and sort-order information */
10302 u16 nField; /* Number of entries in apMem[] */
10303 u8 flags; /* Boolean settings. UNPACKED_... below */
10304 i64 rowid; /* Used by UNPACKED_PREFIX_SEARCH */
10305 Mem *aMem; /* Values */
10309 ** Allowed values of UnpackedRecord.flags
10311 #define UNPACKED_INCRKEY 0x01 /* Make this key an epsilon larger */
10312 #define UNPACKED_PREFIX_MATCH 0x02 /* A prefix match is considered OK */
10313 #define UNPACKED_PREFIX_SEARCH 0x04 /* Ignore final (rowid) field */
10316 ** Each SQL index is represented in memory by an
10317 ** instance of the following structure.
10319 ** The columns of the table that are to be indexed are described
10320 ** by the aiColumn[] field of this structure. For example, suppose
10321 ** we have the following table and index:
10323 ** CREATE TABLE Ex1(c1 int, c2 int, c3 text);
10324 ** CREATE INDEX Ex2 ON Ex1(c3,c1);
10326 ** In the Table structure describing Ex1, nCol==3 because there are
10327 ** three columns in the table. In the Index structure describing
10328 ** Ex2, nColumn==2 since 2 of the 3 columns of Ex1 are indexed.
10329 ** The value of aiColumn is {2, 0}. aiColumn[0]==2 because the
10330 ** first column to be indexed (c3) has an index of 2 in Ex1.aCol[].
10331 ** The second column to be indexed (c1) has an index of 0 in
10332 ** Ex1.aCol[], hence Ex2.aiColumn[1]==0.
10334 ** The Index.onError field determines whether or not the indexed columns
10335 ** must be unique and what to do if they are not. When Index.onError=OE_None,
10336 ** it means this is not a unique index. Otherwise it is a unique index
10337 ** and the value of Index.onError indicate the which conflict resolution
10338 ** algorithm to employ whenever an attempt is made to insert a non-unique
10339 ** element.
10341 struct Index {
10342 char *zName; /* Name of this index */
10343 int nColumn; /* Number of columns in the table used by this index */
10344 int *aiColumn; /* Which columns are used by this index. 1st is 0 */
10345 tRowcnt *aiRowEst; /* Result of ANALYZE: Est. rows selected by each column */
10346 Table *pTable; /* The SQL table being indexed */
10347 int tnum; /* Page containing root of this index in database file */
10348 u8 onError; /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
10349 u8 autoIndex; /* True if is automatically created (ex: by UNIQUE) */
10350 u8 bUnordered; /* Use this index for == or IN queries only */
10351 char *zColAff; /* String defining the affinity of each column */
10352 Index *pNext; /* The next index associated with the same table */
10353 Schema *pSchema; /* Schema containing this index */
10354 u8 *aSortOrder; /* Array of size Index.nColumn. True==DESC, False==ASC */
10355 char **azColl; /* Array of collation sequence names for index */
10356 #ifdef SQLITE_ENABLE_STAT3
10357 int nSample; /* Number of elements in aSample[] */
10358 tRowcnt avgEq; /* Average nEq value for key values not in aSample */
10359 IndexSample *aSample; /* Samples of the left-most key */
10360 #endif
10364 ** Each sample stored in the sqlite_stat3 table is represented in memory
10365 ** using a structure of this type. See documentation at the top of the
10366 ** analyze.c source file for additional information.
10368 struct IndexSample {
10369 union {
10370 char *z; /* Value if eType is SQLITE_TEXT or SQLITE_BLOB */
10371 double r; /* Value if eType is SQLITE_FLOAT */
10372 i64 i; /* Value if eType is SQLITE_INTEGER */
10373 } u;
10374 u8 eType; /* SQLITE_NULL, SQLITE_INTEGER ... etc. */
10375 int nByte; /* Size in byte of text or blob. */
10376 tRowcnt nEq; /* Est. number of rows where the key equals this sample */
10377 tRowcnt nLt; /* Est. number of rows where key is less than this sample */
10378 tRowcnt nDLt; /* Est. number of distinct keys less than this sample */
10382 ** Each token coming out of the lexer is an instance of
10383 ** this structure. Tokens are also used as part of an expression.
10385 ** Note if Token.z==0 then Token.dyn and Token.n are undefined and
10386 ** may contain random values. Do not make any assumptions about Token.dyn
10387 ** and Token.n when Token.z==0.
10389 struct Token {
10390 const char *z; /* Text of the token. Not NULL-terminated! */
10391 unsigned int n; /* Number of characters in this token */
10395 ** An instance of this structure contains information needed to generate
10396 ** code for a SELECT that contains aggregate functions.
10398 ** If Expr.op==TK_AGG_COLUMN or TK_AGG_FUNCTION then Expr.pAggInfo is a
10399 ** pointer to this structure. The Expr.iColumn field is the index in
10400 ** AggInfo.aCol[] or AggInfo.aFunc[] of information needed to generate
10401 ** code for that node.
10403 ** AggInfo.pGroupBy and AggInfo.aFunc.pExpr point to fields within the
10404 ** original Select structure that describes the SELECT statement. These
10405 ** fields do not need to be freed when deallocating the AggInfo structure.
10407 struct AggInfo {
10408 u8 directMode; /* Direct rendering mode means take data directly
10409 ** from source tables rather than from accumulators */
10410 u8 useSortingIdx; /* In direct mode, reference the sorting index rather
10411 ** than the source table */
10412 int sortingIdx; /* Cursor number of the sorting index */
10413 int sortingIdxPTab; /* Cursor number of pseudo-table */
10414 ExprList *pGroupBy; /* The group by clause */
10415 int nSortingColumn; /* Number of columns in the sorting index */
10416 struct AggInfo_col { /* For each column used in source tables */
10417 Table *pTab; /* Source table */
10418 int iTable; /* Cursor number of the source table */
10419 int iColumn; /* Column number within the source table */
10420 int iSorterColumn; /* Column number in the sorting index */
10421 int iMem; /* Memory location that acts as accumulator */
10422 Expr *pExpr; /* The original expression */
10423 } *aCol;
10424 int nColumn; /* Number of used entries in aCol[] */
10425 int nColumnAlloc; /* Number of slots allocated for aCol[] */
10426 int nAccumulator; /* Number of columns that show through to the output.
10427 ** Additional columns are used only as parameters to
10428 ** aggregate functions */
10429 struct AggInfo_func { /* For each aggregate function */
10430 Expr *pExpr; /* Expression encoding the function */
10431 FuncDef *pFunc; /* The aggregate function implementation */
10432 int iMem; /* Memory location that acts as accumulator */
10433 int iDistinct; /* Ephemeral table used to enforce DISTINCT */
10434 } *aFunc;
10435 int nFunc; /* Number of entries in aFunc[] */
10436 int nFuncAlloc; /* Number of slots allocated for aFunc[] */
10440 ** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
10441 ** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater
10442 ** than 32767 we have to make it 32-bit. 16-bit is preferred because
10443 ** it uses less memory in the Expr object, which is a big memory user
10444 ** in systems with lots of prepared statements. And few applications
10445 ** need more than about 10 or 20 variables. But some extreme users want
10446 ** to have prepared statements with over 32767 variables, and for them
10447 ** the option is available (at compile-time).
10449 #if SQLITE_MAX_VARIABLE_NUMBER<=32767
10450 typedef i16 ynVar;
10451 #else
10452 typedef int ynVar;
10453 #endif
10456 ** Each node of an expression in the parse tree is an instance
10457 ** of this structure.
10459 ** Expr.op is the opcode. The integer parser token codes are reused
10460 ** as opcodes here. For example, the parser defines TK_GE to be an integer
10461 ** code representing the ">=" operator. This same integer code is reused
10462 ** to represent the greater-than-or-equal-to operator in the expression
10463 ** tree.
10465 ** If the expression is an SQL literal (TK_INTEGER, TK_FLOAT, TK_BLOB,
10466 ** or TK_STRING), then Expr.token contains the text of the SQL literal. If
10467 ** the expression is a variable (TK_VARIABLE), then Expr.token contains the
10468 ** variable name. Finally, if the expression is an SQL function (TK_FUNCTION),
10469 ** then Expr.token contains the name of the function.
10471 ** Expr.pRight and Expr.pLeft are the left and right subexpressions of a
10472 ** binary operator. Either or both may be NULL.
10474 ** Expr.x.pList is a list of arguments if the expression is an SQL function,
10475 ** a CASE expression or an IN expression of the form "<lhs> IN (<y>, <z>...)".
10476 ** Expr.x.pSelect is used if the expression is a sub-select or an expression of
10477 ** the form "<lhs> IN (SELECT ...)". If the EP_xIsSelect bit is set in the
10478 ** Expr.flags mask, then Expr.x.pSelect is valid. Otherwise, Expr.x.pList is
10479 ** valid.
10481 ** An expression of the form ID or ID.ID refers to a column in a table.
10482 ** For such expressions, Expr.op is set to TK_COLUMN and Expr.iTable is
10483 ** the integer cursor number of a VDBE cursor pointing to that table and
10484 ** Expr.iColumn is the column number for the specific column. If the
10485 ** expression is used as a result in an aggregate SELECT, then the
10486 ** value is also stored in the Expr.iAgg column in the aggregate so that
10487 ** it can be accessed after all aggregates are computed.
10489 ** If the expression is an unbound variable marker (a question mark
10490 ** character '?' in the original SQL) then the Expr.iTable holds the index
10491 ** number for that variable.
10493 ** If the expression is a subquery then Expr.iColumn holds an integer
10494 ** register number containing the result of the subquery. If the
10495 ** subquery gives a constant result, then iTable is -1. If the subquery
10496 ** gives a different answer at different times during statement processing
10497 ** then iTable is the address of a subroutine that computes the subquery.
10499 ** If the Expr is of type OP_Column, and the table it is selecting from
10500 ** is a disk table or the "old.*" pseudo-table, then pTab points to the
10501 ** corresponding table definition.
10503 ** ALLOCATION NOTES:
10505 ** Expr objects can use a lot of memory space in database schema. To
10506 ** help reduce memory requirements, sometimes an Expr object will be
10507 ** truncated. And to reduce the number of memory allocations, sometimes
10508 ** two or more Expr objects will be stored in a single memory allocation,
10509 ** together with Expr.zToken strings.
10511 ** If the EP_Reduced and EP_TokenOnly flags are set when
10512 ** an Expr object is truncated. When EP_Reduced is set, then all
10513 ** the child Expr objects in the Expr.pLeft and Expr.pRight subtrees
10514 ** are contained within the same memory allocation. Note, however, that
10515 ** the subtrees in Expr.x.pList or Expr.x.pSelect are always separately
10516 ** allocated, regardless of whether or not EP_Reduced is set.
10518 struct Expr {
10519 u8 op; /* Operation performed by this node */
10520 char affinity; /* The affinity of the column or 0 if not a column */
10521 u16 flags; /* Various flags. EP_* See below */
10522 union {
10523 char *zToken; /* Token value. Zero terminated and dequoted */
10524 int iValue; /* Non-negative integer value if EP_IntValue */
10525 } u;
10527 /* If the EP_TokenOnly flag is set in the Expr.flags mask, then no
10528 ** space is allocated for the fields below this point. An attempt to
10529 ** access them will result in a segfault or malfunction.
10530 *********************************************************************/
10532 Expr *pLeft; /* Left subnode */
10533 Expr *pRight; /* Right subnode */
10534 union {
10535 ExprList *pList; /* Function arguments or in "<expr> IN (<expr-list)" */
10536 Select *pSelect; /* Used for sub-selects and "<expr> IN (<select>)" */
10537 } x;
10538 CollSeq *pColl; /* The collation type of the column or 0 */
10540 /* If the EP_Reduced flag is set in the Expr.flags mask, then no
10541 ** space is allocated for the fields below this point. An attempt to
10542 ** access them will result in a segfault or malfunction.
10543 *********************************************************************/
10545 int iTable; /* TK_COLUMN: cursor number of table holding column
10546 ** TK_REGISTER: register number
10547 ** TK_TRIGGER: 1 -> new, 0 -> old */
10548 ynVar iColumn; /* TK_COLUMN: column index. -1 for rowid.
10549 ** TK_VARIABLE: variable number (always >= 1). */
10550 i16 iAgg; /* Which entry in pAggInfo->aCol[] or ->aFunc[] */
10551 i16 iRightJoinTable; /* If EP_FromJoin, the right table of the join */
10552 u8 flags2; /* Second set of flags. EP2_... */
10553 u8 op2; /* If a TK_REGISTER, the original value of Expr.op */
10554 AggInfo *pAggInfo; /* Used by TK_AGG_COLUMN and TK_AGG_FUNCTION */
10555 Table *pTab; /* Table for TK_COLUMN expressions. */
10556 #if SQLITE_MAX_EXPR_DEPTH>0
10557 int nHeight; /* Height of the tree headed by this node */
10558 #endif
10562 ** The following are the meanings of bits in the Expr.flags field.
10564 #define EP_FromJoin 0x0001 /* Originated in ON or USING clause of a join */
10565 #define EP_Agg 0x0002 /* Contains one or more aggregate functions */
10566 #define EP_Resolved 0x0004 /* IDs have been resolved to COLUMNs */
10567 #define EP_Error 0x0008 /* Expression contains one or more errors */
10568 #define EP_Distinct 0x0010 /* Aggregate function with DISTINCT keyword */
10569 #define EP_VarSelect 0x0020 /* pSelect is correlated, not constant */
10570 #define EP_DblQuoted 0x0040 /* token.z was originally in "..." */
10571 #define EP_InfixFunc 0x0080 /* True for an infix function: LIKE, GLOB, etc */
10572 #define EP_ExpCollate 0x0100 /* Collating sequence specified explicitly */
10573 #define EP_FixedDest 0x0200 /* Result needed in a specific register */
10574 #define EP_IntValue 0x0400 /* Integer value contained in u.iValue */
10575 #define EP_xIsSelect 0x0800 /* x.pSelect is valid (otherwise x.pList is) */
10576 #define EP_Hint 0x1000 /* Optimizer hint. Not required for correctness */
10577 #define EP_Reduced 0x2000 /* Expr struct is EXPR_REDUCEDSIZE bytes only */
10578 #define EP_TokenOnly 0x4000 /* Expr struct is EXPR_TOKENONLYSIZE bytes only */
10579 #define EP_Static 0x8000 /* Held in memory not obtained from malloc() */
10582 ** The following are the meanings of bits in the Expr.flags2 field.
10584 #define EP2_MallocedToken 0x0001 /* Need to sqlite3DbFree() Expr.zToken */
10585 #define EP2_Irreducible 0x0002 /* Cannot EXPRDUP_REDUCE this Expr */
10588 ** The pseudo-routine sqlite3ExprSetIrreducible sets the EP2_Irreducible
10589 ** flag on an expression structure. This flag is used for VV&A only. The
10590 ** routine is implemented as a macro that only works when in debugging mode,
10591 ** so as not to burden production code.
10593 #ifdef SQLITE_DEBUG
10594 # define ExprSetIrreducible(X) (X)->flags2 |= EP2_Irreducible
10595 #else
10596 # define ExprSetIrreducible(X)
10597 #endif
10600 ** These macros can be used to test, set, or clear bits in the
10601 ** Expr.flags field.
10603 #define ExprHasProperty(E,P) (((E)->flags&(P))==(P))
10604 #define ExprHasAnyProperty(E,P) (((E)->flags&(P))!=0)
10605 #define ExprSetProperty(E,P) (E)->flags|=(P)
10606 #define ExprClearProperty(E,P) (E)->flags&=~(P)
10609 ** Macros to determine the number of bytes required by a normal Expr
10610 ** struct, an Expr struct with the EP_Reduced flag set in Expr.flags
10611 ** and an Expr struct with the EP_TokenOnly flag set.
10613 #define EXPR_FULLSIZE sizeof(Expr) /* Full size */
10614 #define EXPR_REDUCEDSIZE offsetof(Expr,iTable) /* Common features */
10615 #define EXPR_TOKENONLYSIZE offsetof(Expr,pLeft) /* Fewer features */
10618 ** Flags passed to the sqlite3ExprDup() function. See the header comment
10619 ** above sqlite3ExprDup() for details.
10621 #define EXPRDUP_REDUCE 0x0001 /* Used reduced-size Expr nodes */
10624 ** A list of expressions. Each expression may optionally have a
10625 ** name. An expr/name combination can be used in several ways, such
10626 ** as the list of "expr AS ID" fields following a "SELECT" or in the
10627 ** list of "ID = expr" items in an UPDATE. A list of expressions can
10628 ** also be used as the argument to a function, in which case the a.zName
10629 ** field is not used.
10631 struct ExprList {
10632 int nExpr; /* Number of expressions on the list */
10633 int nAlloc; /* Number of entries allocated below */
10634 int iECursor; /* VDBE Cursor associated with this ExprList */
10635 struct ExprList_item {
10636 Expr *pExpr; /* The list of expressions */
10637 char *zName; /* Token associated with this expression */
10638 char *zSpan; /* Original text of the expression */
10639 u8 sortOrder; /* 1 for DESC or 0 for ASC */
10640 u8 done; /* A flag to indicate when processing is finished */
10641 u16 iOrderByCol; /* For ORDER BY, column number in result set */
10642 u16 iAlias; /* Index into Parse.aAlias[] for zName */
10643 } *a; /* One entry for each expression */
10647 ** An instance of this structure is used by the parser to record both
10648 ** the parse tree for an expression and the span of input text for an
10649 ** expression.
10651 struct ExprSpan {
10652 Expr *pExpr; /* The expression parse tree */
10653 const char *zStart; /* First character of input text */
10654 const char *zEnd; /* One character past the end of input text */
10658 ** An instance of this structure can hold a simple list of identifiers,
10659 ** such as the list "a,b,c" in the following statements:
10661 ** INSERT INTO t(a,b,c) VALUES ...;
10662 ** CREATE INDEX idx ON t(a,b,c);
10663 ** CREATE TRIGGER trig BEFORE UPDATE ON t(a,b,c) ...;
10665 ** The IdList.a.idx field is used when the IdList represents the list of
10666 ** column names after a table name in an INSERT statement. In the statement
10668 ** INSERT INTO t(a,b,c) ...
10670 ** If "a" is the k-th column of table "t", then IdList.a[0].idx==k.
10672 struct IdList {
10673 struct IdList_item {
10674 char *zName; /* Name of the identifier */
10675 int idx; /* Index in some Table.aCol[] of a column named zName */
10676 } *a;
10677 int nId; /* Number of identifiers on the list */
10678 int nAlloc; /* Number of entries allocated for a[] below */
10682 ** The bitmask datatype defined below is used for various optimizations.
10684 ** Changing this from a 64-bit to a 32-bit type limits the number of
10685 ** tables in a join to 32 instead of 64. But it also reduces the size
10686 ** of the library by 738 bytes on ix86.
10688 typedef u64 Bitmask;
10691 ** The number of bits in a Bitmask. "BMS" means "BitMask Size".
10693 #define BMS ((int)(sizeof(Bitmask)*8))
10696 ** The following structure describes the FROM clause of a SELECT statement.
10697 ** Each table or subquery in the FROM clause is a separate element of
10698 ** the SrcList.a[] array.
10700 ** With the addition of multiple database support, the following structure
10701 ** can also be used to describe a particular table such as the table that
10702 ** is modified by an INSERT, DELETE, or UPDATE statement. In standard SQL,
10703 ** such a table must be a simple name: ID. But in SQLite, the table can
10704 ** now be identified by a database name, a dot, then the table name: ID.ID.
10706 ** The jointype starts out showing the join type between the current table
10707 ** and the next table on the list. The parser builds the list this way.
10708 ** But sqlite3SrcListShiftJoinType() later shifts the jointypes so that each
10709 ** jointype expresses the join between the table and the previous table.
10711 ** In the colUsed field, the high-order bit (bit 63) is set if the table
10712 ** contains more than 63 columns and the 64-th or later column is used.
10714 struct SrcList {
10715 i16 nSrc; /* Number of tables or subqueries in the FROM clause */
10716 i16 nAlloc; /* Number of entries allocated in a[] below */
10717 struct SrcList_item {
10718 char *zDatabase; /* Name of database holding this table */
10719 char *zName; /* Name of the table */
10720 char *zAlias; /* The "B" part of a "A AS B" phrase. zName is the "A" */
10721 Table *pTab; /* An SQL table corresponding to zName */
10722 Select *pSelect; /* A SELECT statement used in place of a table name */
10723 int addrFillSub; /* Address of subroutine to manifest a subquery */
10724 int regReturn; /* Register holding return address of addrFillSub */
10725 u8 jointype; /* Type of join between this able and the previous */
10726 u8 notIndexed; /* True if there is a NOT INDEXED clause */
10727 u8 isCorrelated; /* True if sub-query is correlated */
10728 #ifndef SQLITE_OMIT_EXPLAIN
10729 u8 iSelectId; /* If pSelect!=0, the id of the sub-select in EQP */
10730 #endif
10731 int iCursor; /* The VDBE cursor number used to access this table */
10732 Expr *pOn; /* The ON clause of a join */
10733 IdList *pUsing; /* The USING clause of a join */
10734 Bitmask colUsed; /* Bit N (1<<N) set if column N of pTab is used */
10735 char *zIndex; /* Identifier from "INDEXED BY <zIndex>" clause */
10736 Index *pIndex; /* Index structure corresponding to zIndex, if any */
10737 } a[1]; /* One entry for each identifier on the list */
10741 ** Permitted values of the SrcList.a.jointype field
10743 #define JT_INNER 0x0001 /* Any kind of inner or cross join */
10744 #define JT_CROSS 0x0002 /* Explicit use of the CROSS keyword */
10745 #define JT_NATURAL 0x0004 /* True for a "natural" join */
10746 #define JT_LEFT 0x0008 /* Left outer join */
10747 #define JT_RIGHT 0x0010 /* Right outer join */
10748 #define JT_OUTER 0x0020 /* The "OUTER" keyword is present */
10749 #define JT_ERROR 0x0040 /* unknown or unsupported join type */
10753 ** A WherePlan object holds information that describes a lookup
10754 ** strategy.
10756 ** This object is intended to be opaque outside of the where.c module.
10757 ** It is included here only so that that compiler will know how big it
10758 ** is. None of the fields in this object should be used outside of
10759 ** the where.c module.
10761 ** Within the union, pIdx is only used when wsFlags&WHERE_INDEXED is true.
10762 ** pTerm is only used when wsFlags&WHERE_MULTI_OR is true. And pVtabIdx
10763 ** is only used when wsFlags&WHERE_VIRTUALTABLE is true. It is never the
10764 ** case that more than one of these conditions is true.
10766 struct WherePlan {
10767 u32 wsFlags; /* WHERE_* flags that describe the strategy */
10768 u32 nEq; /* Number of == constraints */
10769 double nRow; /* Estimated number of rows (for EQP) */
10770 union {
10771 Index *pIdx; /* Index when WHERE_INDEXED is true */
10772 struct WhereTerm *pTerm; /* WHERE clause term for OR-search */
10773 sqlite3_index_info *pVtabIdx; /* Virtual table index to use */
10774 } u;
10778 ** For each nested loop in a WHERE clause implementation, the WhereInfo
10779 ** structure contains a single instance of this structure. This structure
10780 ** is intended to be private the the where.c module and should not be
10781 ** access or modified by other modules.
10783 ** The pIdxInfo field is used to help pick the best index on a
10784 ** virtual table. The pIdxInfo pointer contains indexing
10785 ** information for the i-th table in the FROM clause before reordering.
10786 ** All the pIdxInfo pointers are freed by whereInfoFree() in where.c.
10787 ** All other information in the i-th WhereLevel object for the i-th table
10788 ** after FROM clause ordering.
10790 struct WhereLevel {
10791 WherePlan plan; /* query plan for this element of the FROM clause */
10792 int iLeftJoin; /* Memory cell used to implement LEFT OUTER JOIN */
10793 int iTabCur; /* The VDBE cursor used to access the table */
10794 int iIdxCur; /* The VDBE cursor used to access pIdx */
10795 int addrBrk; /* Jump here to break out of the loop */
10796 int addrNxt; /* Jump here to start the next IN combination */
10797 int addrCont; /* Jump here to continue with the next loop cycle */
10798 int addrFirst; /* First instruction of interior of the loop */
10799 u8 iFrom; /* Which entry in the FROM clause */
10800 u8 op, p5; /* Opcode and P5 of the opcode that ends the loop */
10801 int p1, p2; /* Operands of the opcode used to ends the loop */
10802 union { /* Information that depends on plan.wsFlags */
10803 struct {
10804 int nIn; /* Number of entries in aInLoop[] */
10805 struct InLoop {
10806 int iCur; /* The VDBE cursor used by this IN operator */
10807 int addrInTop; /* Top of the IN loop */
10808 } *aInLoop; /* Information about each nested IN operator */
10809 } in; /* Used when plan.wsFlags&WHERE_IN_ABLE */
10810 } u;
10812 /* The following field is really not part of the current level. But
10813 ** we need a place to cache virtual table index information for each
10814 ** virtual table in the FROM clause and the WhereLevel structure is
10815 ** a convenient place since there is one WhereLevel for each FROM clause
10816 ** element.
10818 sqlite3_index_info *pIdxInfo; /* Index info for n-th source table */
10822 ** Flags appropriate for the wctrlFlags parameter of sqlite3WhereBegin()
10823 ** and the WhereInfo.wctrlFlags member.
10825 #define WHERE_ORDERBY_NORMAL 0x0000 /* No-op */
10826 #define WHERE_ORDERBY_MIN 0x0001 /* ORDER BY processing for min() func */
10827 #define WHERE_ORDERBY_MAX 0x0002 /* ORDER BY processing for max() func */
10828 #define WHERE_ONEPASS_DESIRED 0x0004 /* Want to do one-pass UPDATE/DELETE */
10829 #define WHERE_DUPLICATES_OK 0x0008 /* Ok to return a row more than once */
10830 #define WHERE_OMIT_OPEN_CLOSE 0x0010 /* Table cursors are already open */
10831 #define WHERE_FORCE_TABLE 0x0020 /* Do not use an index-only search */
10832 #define WHERE_ONETABLE_ONLY 0x0040 /* Only code the 1st table in pTabList */
10833 #define WHERE_AND_ONLY 0x0080 /* Don't use indices for OR terms */
10836 ** The WHERE clause processing routine has two halves. The
10837 ** first part does the start of the WHERE loop and the second
10838 ** half does the tail of the WHERE loop. An instance of
10839 ** this structure is returned by the first half and passed
10840 ** into the second half to give some continuity.
10842 struct WhereInfo {
10843 Parse *pParse; /* Parsing and code generating context */
10844 u16 wctrlFlags; /* Flags originally passed to sqlite3WhereBegin() */
10845 u8 okOnePass; /* Ok to use one-pass algorithm for UPDATE or DELETE */
10846 u8 untestedTerms; /* Not all WHERE terms resolved by outer loop */
10847 u8 eDistinct;
10848 SrcList *pTabList; /* List of tables in the join */
10849 int iTop; /* The very beginning of the WHERE loop */
10850 int iContinue; /* Jump here to continue with next record */
10851 int iBreak; /* Jump here to break out of the loop */
10852 int nLevel; /* Number of nested loop */
10853 struct WhereClause *pWC; /* Decomposition of the WHERE clause */
10854 double savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */
10855 double nRowOut; /* Estimated number of output rows */
10856 WhereLevel a[1]; /* Information about each nest loop in WHERE */
10859 #define WHERE_DISTINCT_UNIQUE 1
10860 #define WHERE_DISTINCT_ORDERED 2
10863 ** A NameContext defines a context in which to resolve table and column
10864 ** names. The context consists of a list of tables (the pSrcList) field and
10865 ** a list of named expression (pEList). The named expression list may
10866 ** be NULL. The pSrc corresponds to the FROM clause of a SELECT or
10867 ** to the table being operated on by INSERT, UPDATE, or DELETE. The
10868 ** pEList corresponds to the result set of a SELECT and is NULL for
10869 ** other statements.
10871 ** NameContexts can be nested. When resolving names, the inner-most
10872 ** context is searched first. If no match is found, the next outer
10873 ** context is checked. If there is still no match, the next context
10874 ** is checked. This process continues until either a match is found
10875 ** or all contexts are check. When a match is found, the nRef member of
10876 ** the context containing the match is incremented.
10878 ** Each subquery gets a new NameContext. The pNext field points to the
10879 ** NameContext in the parent query. Thus the process of scanning the
10880 ** NameContext list corresponds to searching through successively outer
10881 ** subqueries looking for a match.
10883 struct NameContext {
10884 Parse *pParse; /* The parser */
10885 SrcList *pSrcList; /* One or more tables used to resolve names */
10886 ExprList *pEList; /* Optional list of named expressions */
10887 int nRef; /* Number of names resolved by this context */
10888 int nErr; /* Number of errors encountered while resolving names */
10889 u8 allowAgg; /* Aggregate functions allowed here */
10890 u8 hasAgg; /* True if aggregates are seen */
10891 u8 isCheck; /* True if resolving names in a CHECK constraint */
10892 int nDepth; /* Depth of subquery recursion. 1 for no recursion */
10893 AggInfo *pAggInfo; /* Information about aggregates at this level */
10894 NameContext *pNext; /* Next outer name context. NULL for outermost */
10898 ** An instance of the following structure contains all information
10899 ** needed to generate code for a single SELECT statement.
10901 ** nLimit is set to -1 if there is no LIMIT clause. nOffset is set to 0.
10902 ** If there is a LIMIT clause, the parser sets nLimit to the value of the
10903 ** limit and nOffset to the value of the offset (or 0 if there is not
10904 ** offset). But later on, nLimit and nOffset become the memory locations
10905 ** in the VDBE that record the limit and offset counters.
10907 ** addrOpenEphm[] entries contain the address of OP_OpenEphemeral opcodes.
10908 ** These addresses must be stored so that we can go back and fill in
10909 ** the P4_KEYINFO and P2 parameters later. Neither the KeyInfo nor
10910 ** the number of columns in P2 can be computed at the same time
10911 ** as the OP_OpenEphm instruction is coded because not
10912 ** enough information about the compound query is known at that point.
10913 ** The KeyInfo for addrOpenTran[0] and [1] contains collating sequences
10914 ** for the result set. The KeyInfo for addrOpenTran[2] contains collating
10915 ** sequences for the ORDER BY clause.
10917 struct Select {
10918 ExprList *pEList; /* The fields of the result */
10919 u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
10920 char affinity; /* MakeRecord with this affinity for SRT_Set */
10921 u16 selFlags; /* Various SF_* values */
10922 SrcList *pSrc; /* The FROM clause */
10923 Expr *pWhere; /* The WHERE clause */
10924 ExprList *pGroupBy; /* The GROUP BY clause */
10925 Expr *pHaving; /* The HAVING clause */
10926 ExprList *pOrderBy; /* The ORDER BY clause */
10927 Select *pPrior; /* Prior select in a compound select statement */
10928 Select *pNext; /* Next select to the left in a compound */
10929 Select *pRightmost; /* Right-most select in a compound select statement */
10930 Expr *pLimit; /* LIMIT expression. NULL means not used. */
10931 Expr *pOffset; /* OFFSET expression. NULL means not used. */
10932 int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */
10933 int addrOpenEphm[3]; /* OP_OpenEphem opcodes related to this select */
10934 double nSelectRow; /* Estimated number of result rows */
10938 ** Allowed values for Select.selFlags. The "SF" prefix stands for
10939 ** "Select Flag".
10941 #define SF_Distinct 0x01 /* Output should be DISTINCT */
10942 #define SF_Resolved 0x02 /* Identifiers have been resolved */
10943 #define SF_Aggregate 0x04 /* Contains aggregate functions */
10944 #define SF_UsesEphemeral 0x08 /* Uses the OpenEphemeral opcode */
10945 #define SF_Expanded 0x10 /* sqlite3SelectExpand() called on this */
10946 #define SF_HasTypeInfo 0x20 /* FROM subqueries have Table metadata */
10947 #define SF_UseSorter 0x40 /* Sort using a sorter */
10951 ** The results of a select can be distributed in several ways. The
10952 ** "SRT" prefix means "SELECT Result Type".
10954 #define SRT_Union 1 /* Store result as keys in an index */
10955 #define SRT_Except 2 /* Remove result from a UNION index */
10956 #define SRT_Exists 3 /* Store 1 if the result is not empty */
10957 #define SRT_Discard 4 /* Do not save the results anywhere */
10959 /* The ORDER BY clause is ignored for all of the above */
10960 #define IgnorableOrderby(X) ((X->eDest)<=SRT_Discard)
10962 #define SRT_Output 5 /* Output each row of result */
10963 #define SRT_Mem 6 /* Store result in a memory cell */
10964 #define SRT_Set 7 /* Store results as keys in an index */
10965 #define SRT_Table 8 /* Store result as data with an automatic rowid */
10966 #define SRT_EphemTab 9 /* Create transient tab and store like SRT_Table */
10967 #define SRT_Coroutine 10 /* Generate a single row of result */
10970 ** A structure used to customize the behavior of sqlite3Select(). See
10971 ** comments above sqlite3Select() for details.
10973 typedef struct SelectDest SelectDest;
10974 struct SelectDest {
10975 u8 eDest; /* How to dispose of the results */
10976 u8 affinity; /* Affinity used when eDest==SRT_Set */
10977 int iParm; /* A parameter used by the eDest disposal method */
10978 int iMem; /* Base register where results are written */
10979 int nMem; /* Number of registers allocated */
10983 ** During code generation of statements that do inserts into AUTOINCREMENT
10984 ** tables, the following information is attached to the Table.u.autoInc.p
10985 ** pointer of each autoincrement table to record some side information that
10986 ** the code generator needs. We have to keep per-table autoincrement
10987 ** information in case inserts are down within triggers. Triggers do not
10988 ** normally coordinate their activities, but we do need to coordinate the
10989 ** loading and saving of autoincrement information.
10991 struct AutoincInfo {
10992 AutoincInfo *pNext; /* Next info block in a list of them all */
10993 Table *pTab; /* Table this info block refers to */
10994 int iDb; /* Index in sqlite3.aDb[] of database holding pTab */
10995 int regCtr; /* Memory register holding the rowid counter */
10999 ** Size of the column cache
11001 #ifndef SQLITE_N_COLCACHE
11002 # define SQLITE_N_COLCACHE 10
11003 #endif
11006 ** At least one instance of the following structure is created for each
11007 ** trigger that may be fired while parsing an INSERT, UPDATE or DELETE
11008 ** statement. All such objects are stored in the linked list headed at
11009 ** Parse.pTriggerPrg and deleted once statement compilation has been
11010 ** completed.
11012 ** A Vdbe sub-program that implements the body and WHEN clause of trigger
11013 ** TriggerPrg.pTrigger, assuming a default ON CONFLICT clause of
11014 ** TriggerPrg.orconf, is stored in the TriggerPrg.pProgram variable.
11015 ** The Parse.pTriggerPrg list never contains two entries with the same
11016 ** values for both pTrigger and orconf.
11018 ** The TriggerPrg.aColmask[0] variable is set to a mask of old.* columns
11019 ** accessed (or set to 0 for triggers fired as a result of INSERT
11020 ** statements). Similarly, the TriggerPrg.aColmask[1] variable is set to
11021 ** a mask of new.* columns used by the program.
11023 struct TriggerPrg {
11024 Trigger *pTrigger; /* Trigger this program was coded from */
11025 int orconf; /* Default ON CONFLICT policy */
11026 SubProgram *pProgram; /* Program implementing pTrigger/orconf */
11027 u32 aColmask[2]; /* Masks of old.*, new.* columns accessed */
11028 TriggerPrg *pNext; /* Next entry in Parse.pTriggerPrg list */
11032 ** The yDbMask datatype for the bitmask of all attached databases.
11034 #if SQLITE_MAX_ATTACHED>30
11035 typedef sqlite3_uint64 yDbMask;
11036 #else
11037 typedef unsigned int yDbMask;
11038 #endif
11041 ** An SQL parser context. A copy of this structure is passed through
11042 ** the parser and down into all the parser action routine in order to
11043 ** carry around information that is global to the entire parse.
11045 ** The structure is divided into two parts. When the parser and code
11046 ** generate call themselves recursively, the first part of the structure
11047 ** is constant but the second part is reset at the beginning and end of
11048 ** each recursion.
11050 ** The nTableLock and aTableLock variables are only used if the shared-cache
11051 ** feature is enabled (if sqlite3Tsd()->useSharedData is true). They are
11052 ** used to store the set of table-locks required by the statement being
11053 ** compiled. Function sqlite3TableLock() is used to add entries to the
11054 ** list.
11056 struct Parse {
11057 sqlite3 *db; /* The main database structure */
11058 int rc; /* Return code from execution */
11059 char *zErrMsg; /* An error message */
11060 Vdbe *pVdbe; /* An engine for executing database bytecode */
11061 u8 colNamesSet; /* TRUE after OP_ColumnName has been issued to pVdbe */
11062 u8 checkSchema; /* Causes schema cookie check after an error */
11063 u8 nested; /* Number of nested calls to the parser/code generator */
11064 u8 nTempReg; /* Number of temporary registers in aTempReg[] */
11065 u8 nTempInUse; /* Number of aTempReg[] currently checked out */
11066 int aTempReg[8]; /* Holding area for temporary registers */
11067 int nRangeReg; /* Size of the temporary register block */
11068 int iRangeReg; /* First register in temporary register block */
11069 int nErr; /* Number of errors seen */
11070 int nTab; /* Number of previously allocated VDBE cursors */
11071 int nMem; /* Number of memory cells used so far */
11072 int nSet; /* Number of sets used so far */
11073 int nOnce; /* Number of OP_Once instructions so far */
11074 int ckBase; /* Base register of data during check constraints */
11075 int iCacheLevel; /* ColCache valid when aColCache[].iLevel<=iCacheLevel */
11076 int iCacheCnt; /* Counter used to generate aColCache[].lru values */
11077 u8 nColCache; /* Number of entries in aColCache[] */
11078 u8 iColCache; /* Next entry in aColCache[] to replace */
11079 struct yColCache {
11080 int iTable; /* Table cursor number */
11081 int iColumn; /* Table column number */
11082 u8 tempReg; /* iReg is a temp register that needs to be freed */
11083 int iLevel; /* Nesting level */
11084 int iReg; /* Reg with value of this column. 0 means none. */
11085 int lru; /* Least recently used entry has the smallest value */
11086 } aColCache[SQLITE_N_COLCACHE]; /* One for each column cache entry */
11087 yDbMask writeMask; /* Start a write transaction on these databases */
11088 yDbMask cookieMask; /* Bitmask of schema verified databases */
11089 u8 isMultiWrite; /* True if statement may affect/insert multiple rows */
11090 u8 mayAbort; /* True if statement may throw an ABORT exception */
11091 int cookieGoto; /* Address of OP_Goto to cookie verifier subroutine */
11092 int cookieValue[SQLITE_MAX_ATTACHED+2]; /* Values of cookies to verify */
11093 #ifndef SQLITE_OMIT_SHARED_CACHE
11094 int nTableLock; /* Number of locks in aTableLock */
11095 TableLock *aTableLock; /* Required table locks for shared-cache mode */
11096 #endif
11097 int regRowid; /* Register holding rowid of CREATE TABLE entry */
11098 int regRoot; /* Register holding root page number for new objects */
11099 AutoincInfo *pAinc; /* Information about AUTOINCREMENT counters */
11100 int nMaxArg; /* Max args passed to user function by sub-program */
11102 /* Information used while coding trigger programs. */
11103 Parse *pToplevel; /* Parse structure for main program (or NULL) */
11104 Table *pTriggerTab; /* Table triggers are being coded for */
11105 u32 oldmask; /* Mask of old.* columns referenced */
11106 u32 newmask; /* Mask of new.* columns referenced */
11107 u8 eTriggerOp; /* TK_UPDATE, TK_INSERT or TK_DELETE */
11108 u8 eOrconf; /* Default ON CONFLICT policy for trigger steps */
11109 u8 disableTriggers; /* True to disable triggers */
11110 double nQueryLoop; /* Estimated number of iterations of a query */
11112 /* Above is constant between recursions. Below is reset before and after
11113 ** each recursion */
11115 int nVar; /* Number of '?' variables seen in the SQL so far */
11116 int nzVar; /* Number of available slots in azVar[] */
11117 char **azVar; /* Pointers to names of parameters */
11118 Vdbe *pReprepare; /* VM being reprepared (sqlite3Reprepare()) */
11119 int nAlias; /* Number of aliased result set columns */
11120 int *aAlias; /* Register used to hold aliased result */
11121 u8 explain; /* True if the EXPLAIN flag is found on the query */
11122 Token sNameToken; /* Token with unqualified schema object name */
11123 Token sLastToken; /* The last token parsed */
11124 const char *zTail; /* All SQL text past the last semicolon parsed */
11125 Table *pNewTable; /* A table being constructed by CREATE TABLE */
11126 Trigger *pNewTrigger; /* Trigger under construct by a CREATE TRIGGER */
11127 const char *zAuthContext; /* The 6th parameter to db->xAuth callbacks */
11128 #ifndef SQLITE_OMIT_VIRTUALTABLE
11129 Token sArg; /* Complete text of a module argument */
11130 u8 declareVtab; /* True if inside sqlite3_declare_vtab() */
11131 int nVtabLock; /* Number of virtual tables to lock */
11132 Table **apVtabLock; /* Pointer to virtual tables needing locking */
11133 #endif
11134 int nHeight; /* Expression tree height of current sub-select */
11135 Table *pZombieTab; /* List of Table objects to delete after code gen */
11136 TriggerPrg *pTriggerPrg; /* Linked list of coded triggers */
11138 #ifndef SQLITE_OMIT_EXPLAIN
11139 int iSelectId;
11140 int iNextSelectId;
11141 #endif
11144 #ifdef SQLITE_OMIT_VIRTUALTABLE
11145 #define IN_DECLARE_VTAB 0
11146 #else
11147 #define IN_DECLARE_VTAB (pParse->declareVtab)
11148 #endif
11151 ** An instance of the following structure can be declared on a stack and used
11152 ** to save the Parse.zAuthContext value so that it can be restored later.
11154 struct AuthContext {
11155 const char *zAuthContext; /* Put saved Parse.zAuthContext here */
11156 Parse *pParse; /* The Parse structure */
11160 ** Bitfield flags for P5 value in OP_Insert and OP_Delete
11162 #define OPFLAG_NCHANGE 0x01 /* Set to update db->nChange */
11163 #define OPFLAG_LASTROWID 0x02 /* Set to update db->lastRowid */
11164 #define OPFLAG_ISUPDATE 0x04 /* This OP_Insert is an sql UPDATE */
11165 #define OPFLAG_APPEND 0x08 /* This is likely to be an append */
11166 #define OPFLAG_USESEEKRESULT 0x10 /* Try to avoid a seek in BtreeInsert() */
11167 #define OPFLAG_CLEARCACHE 0x20 /* Clear pseudo-table cache in OP_Column */
11170 * Each trigger present in the database schema is stored as an instance of
11171 * struct Trigger.
11173 * Pointers to instances of struct Trigger are stored in two ways.
11174 * 1. In the "trigHash" hash table (part of the sqlite3* that represents the
11175 * database). This allows Trigger structures to be retrieved by name.
11176 * 2. All triggers associated with a single table form a linked list, using the
11177 * pNext member of struct Trigger. A pointer to the first element of the
11178 * linked list is stored as the "pTrigger" member of the associated
11179 * struct Table.
11181 * The "step_list" member points to the first element of a linked list
11182 * containing the SQL statements specified as the trigger program.
11184 struct Trigger {
11185 char *zName; /* The name of the trigger */
11186 char *table; /* The table or view to which the trigger applies */
11187 u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT */
11188 u8 tr_tm; /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
11189 Expr *pWhen; /* The WHEN clause of the expression (may be NULL) */
11190 IdList *pColumns; /* If this is an UPDATE OF <column-list> trigger,
11191 the <column-list> is stored here */
11192 Schema *pSchema; /* Schema containing the trigger */
11193 Schema *pTabSchema; /* Schema containing the table */
11194 TriggerStep *step_list; /* Link list of trigger program steps */
11195 Trigger *pNext; /* Next trigger associated with the table */
11199 ** A trigger is either a BEFORE or an AFTER trigger. The following constants
11200 ** determine which.
11202 ** If there are multiple triggers, you might of some BEFORE and some AFTER.
11203 ** In that cases, the constants below can be ORed together.
11205 #define TRIGGER_BEFORE 1
11206 #define TRIGGER_AFTER 2
11209 * An instance of struct TriggerStep is used to store a single SQL statement
11210 * that is a part of a trigger-program.
11212 * Instances of struct TriggerStep are stored in a singly linked list (linked
11213 * using the "pNext" member) referenced by the "step_list" member of the
11214 * associated struct Trigger instance. The first element of the linked list is
11215 * the first step of the trigger-program.
11217 * The "op" member indicates whether this is a "DELETE", "INSERT", "UPDATE" or
11218 * "SELECT" statement. The meanings of the other members is determined by the
11219 * value of "op" as follows:
11221 * (op == TK_INSERT)
11222 * orconf -> stores the ON CONFLICT algorithm
11223 * pSelect -> If this is an INSERT INTO ... SELECT ... statement, then
11224 * this stores a pointer to the SELECT statement. Otherwise NULL.
11225 * target -> A token holding the quoted name of the table to insert into.
11226 * pExprList -> If this is an INSERT INTO ... VALUES ... statement, then
11227 * this stores values to be inserted. Otherwise NULL.
11228 * pIdList -> If this is an INSERT INTO ... (<column-names>) VALUES ...
11229 * statement, then this stores the column-names to be
11230 * inserted into.
11232 * (op == TK_DELETE)
11233 * target -> A token holding the quoted name of the table to delete from.
11234 * pWhere -> The WHERE clause of the DELETE statement if one is specified.
11235 * Otherwise NULL.
11237 * (op == TK_UPDATE)
11238 * target -> A token holding the quoted name of the table to update rows of.
11239 * pWhere -> The WHERE clause of the UPDATE statement if one is specified.
11240 * Otherwise NULL.
11241 * pExprList -> A list of the columns to update and the expressions to update
11242 * them to. See sqlite3Update() documentation of "pChanges"
11243 * argument.
11246 struct TriggerStep {
11247 u8 op; /* One of TK_DELETE, TK_UPDATE, TK_INSERT, TK_SELECT */
11248 u8 orconf; /* OE_Rollback etc. */
11249 Trigger *pTrig; /* The trigger that this step is a part of */
11250 Select *pSelect; /* SELECT statment or RHS of INSERT INTO .. SELECT ... */
11251 Token target; /* Target table for DELETE, UPDATE, INSERT */
11252 Expr *pWhere; /* The WHERE clause for DELETE or UPDATE steps */
11253 ExprList *pExprList; /* SET clause for UPDATE. VALUES clause for INSERT */
11254 IdList *pIdList; /* Column names for INSERT */
11255 TriggerStep *pNext; /* Next in the link-list */
11256 TriggerStep *pLast; /* Last element in link-list. Valid for 1st elem only */
11260 ** The following structure contains information used by the sqliteFix...
11261 ** routines as they walk the parse tree to make database references
11262 ** explicit.
11264 typedef struct DbFixer DbFixer;
11265 struct DbFixer {
11266 Parse *pParse; /* The parsing context. Error messages written here */
11267 const char *zDb; /* Make sure all objects are contained in this database */
11268 const char *zType; /* Type of the container - used for error messages */
11269 const Token *pName; /* Name of the container - used for error messages */
11273 ** An objected used to accumulate the text of a string where we
11274 ** do not necessarily know how big the string will be in the end.
11276 struct StrAccum {
11277 sqlite3 *db; /* Optional database for lookaside. Can be NULL */
11278 char *zBase; /* A base allocation. Not from malloc. */
11279 char *zText; /* The string collected so far */
11280 int nChar; /* Length of the string so far */
11281 int nAlloc; /* Amount of space allocated in zText */
11282 int mxAlloc; /* Maximum allowed string length */
11283 u8 mallocFailed; /* Becomes true if any memory allocation fails */
11284 u8 useMalloc; /* 0: none, 1: sqlite3DbMalloc, 2: sqlite3_malloc */
11285 u8 tooBig; /* Becomes true if string size exceeds limits */
11289 ** A pointer to this structure is used to communicate information
11290 ** from sqlite3Init and OP_ParseSchema into the sqlite3InitCallback.
11292 typedef struct {
11293 sqlite3 *db; /* The database being initialized */
11294 int iDb; /* 0 for main database. 1 for TEMP, 2.. for ATTACHed */
11295 char **pzErrMsg; /* Error message stored here */
11296 int rc; /* Result code stored here */
11297 } InitData;
11300 ** Structure containing global configuration data for the SQLite library.
11302 ** This structure also contains some state information.
11304 struct Sqlite3Config {
11305 int bMemstat; /* True to enable memory status */
11306 int bCoreMutex; /* True to enable core mutexing */
11307 int bFullMutex; /* True to enable full mutexing */
11308 int bOpenUri; /* True to interpret filenames as URIs */
11309 int mxStrlen; /* Maximum string length */
11310 int szLookaside; /* Default lookaside buffer size */
11311 int nLookaside; /* Default lookaside buffer count */
11312 sqlite3_mem_methods m; /* Low-level memory allocation interface */
11313 sqlite3_mutex_methods mutex; /* Low-level mutex interface */
11314 sqlite3_pcache_methods2 pcache2; /* Low-level page-cache interface */
11315 void *pHeap; /* Heap storage space */
11316 int nHeap; /* Size of pHeap[] */
11317 int mnReq, mxReq; /* Min and max heap requests sizes */
11318 void *pScratch; /* Scratch memory */
11319 int szScratch; /* Size of each scratch buffer */
11320 int nScratch; /* Number of scratch buffers */
11321 void *pPage; /* Page cache memory */
11322 int szPage; /* Size of each page in pPage[] */
11323 int nPage; /* Number of pages in pPage[] */
11324 int mxParserStack; /* maximum depth of the parser stack */
11325 int sharedCacheEnabled; /* true if shared-cache mode enabled */
11326 /* The above might be initialized to non-zero. The following need to always
11327 ** initially be zero, however. */
11328 int isInit; /* True after initialization has finished */
11329 int inProgress; /* True while initialization in progress */
11330 int isMutexInit; /* True after mutexes are initialized */
11331 int isMallocInit; /* True after malloc is initialized */
11332 int isPCacheInit; /* True after malloc is initialized */
11333 sqlite3_mutex *pInitMutex; /* Mutex used by sqlite3_initialize() */
11334 int nRefInitMutex; /* Number of users of pInitMutex */
11335 void (*xLog)(void*,int,const char*); /* Function for logging */
11336 void *pLogArg; /* First argument to xLog() */
11337 int bLocaltimeFault; /* True to fail localtime() calls */
11341 ** Context pointer passed down through the tree-walk.
11343 struct Walker {
11344 int (*xExprCallback)(Walker*, Expr*); /* Callback for expressions */
11345 int (*xSelectCallback)(Walker*,Select*); /* Callback for SELECTs */
11346 Parse *pParse; /* Parser context. */
11347 union { /* Extra data for callback */
11348 NameContext *pNC; /* Naming context */
11349 int i; /* Integer value */
11350 } u;
11353 /* Forward declarations */
11354 SQLITE_PRIVATE int sqlite3WalkExpr(Walker*, Expr*);
11355 SQLITE_PRIVATE int sqlite3WalkExprList(Walker*, ExprList*);
11356 SQLITE_PRIVATE int sqlite3WalkSelect(Walker*, Select*);
11357 SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker*, Select*);
11358 SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker*, Select*);
11361 ** Return code from the parse-tree walking primitives and their
11362 ** callbacks.
11364 #define WRC_Continue 0 /* Continue down into children */
11365 #define WRC_Prune 1 /* Omit children but continue walking siblings */
11366 #define WRC_Abort 2 /* Abandon the tree walk */
11369 ** Assuming zIn points to the first byte of a UTF-8 character,
11370 ** advance zIn to point to the first byte of the next UTF-8 character.
11372 #define SQLITE_SKIP_UTF8(zIn) { \
11373 if( (*(zIn++))>=0xc0 ){ \
11374 while( (*zIn & 0xc0)==0x80 ){ zIn++; } \
11379 ** The SQLITE_*_BKPT macros are substitutes for the error codes with
11380 ** the same name but without the _BKPT suffix. These macros invoke
11381 ** routines that report the line-number on which the error originated
11382 ** using sqlite3_log(). The routines also provide a convenient place
11383 ** to set a debugger breakpoint.
11385 SQLITE_PRIVATE int sqlite3CorruptError(int);
11386 SQLITE_PRIVATE int sqlite3MisuseError(int);
11387 SQLITE_PRIVATE int sqlite3CantopenError(int);
11388 #define SQLITE_CORRUPT_BKPT sqlite3CorruptError(__LINE__)
11389 #define SQLITE_MISUSE_BKPT sqlite3MisuseError(__LINE__)
11390 #define SQLITE_CANTOPEN_BKPT sqlite3CantopenError(__LINE__)
11394 ** FTS4 is really an extension for FTS3. It is enabled using the
11395 ** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all
11396 ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
11398 #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
11399 # define SQLITE_ENABLE_FTS3
11400 #endif
11403 ** The ctype.h header is needed for non-ASCII systems. It is also
11404 ** needed by FTS3 when FTS3 is included in the amalgamation.
11406 #if !defined(SQLITE_ASCII) || \
11407 (defined(SQLITE_ENABLE_FTS3) && defined(SQLITE_AMALGAMATION))
11408 # include <ctype.h>
11409 #endif
11412 ** The following macros mimic the standard library functions toupper(),
11413 ** isspace(), isalnum(), isdigit() and isxdigit(), respectively. The
11414 ** sqlite versions only work for ASCII characters, regardless of locale.
11416 #ifdef SQLITE_ASCII
11417 # define sqlite3Toupper(x) ((x)&~(sqlite3CtypeMap[(unsigned char)(x)]&0x20))
11418 # define sqlite3Isspace(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x01)
11419 # define sqlite3Isalnum(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x06)
11420 # define sqlite3Isalpha(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x02)
11421 # define sqlite3Isdigit(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x04)
11422 # define sqlite3Isxdigit(x) (sqlite3CtypeMap[(unsigned char)(x)]&0x08)
11423 # define sqlite3Tolower(x) (sqlite3UpperToLower[(unsigned char)(x)])
11424 #else
11425 # define sqlite3Toupper(x) toupper((unsigned char)(x))
11426 # define sqlite3Isspace(x) isspace((unsigned char)(x))
11427 # define sqlite3Isalnum(x) isalnum((unsigned char)(x))
11428 # define sqlite3Isalpha(x) isalpha((unsigned char)(x))
11429 # define sqlite3Isdigit(x) isdigit((unsigned char)(x))
11430 # define sqlite3Isxdigit(x) isxdigit((unsigned char)(x))
11431 # define sqlite3Tolower(x) tolower((unsigned char)(x))
11432 #endif
11435 ** Internal function prototypes
11437 SQLITE_PRIVATE int sqlite3StrICmp(const char *, const char *);
11438 SQLITE_PRIVATE int sqlite3Strlen30(const char*);
11439 #define sqlite3StrNICmp sqlite3_strnicmp
11441 SQLITE_PRIVATE int sqlite3MallocInit(void);
11442 SQLITE_PRIVATE void sqlite3MallocEnd(void);
11443 SQLITE_PRIVATE void *sqlite3Malloc(int);
11444 SQLITE_PRIVATE void *sqlite3MallocZero(int);
11445 SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3*, int);
11446 SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, int);
11447 SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3*,const char*);
11448 SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, int);
11449 SQLITE_PRIVATE void *sqlite3Realloc(void*, int);
11450 SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, int);
11451 SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, int);
11452 SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
11453 SQLITE_PRIVATE int sqlite3MallocSize(void*);
11454 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, void*);
11455 SQLITE_PRIVATE void *sqlite3ScratchMalloc(int);
11456 SQLITE_PRIVATE void sqlite3ScratchFree(void*);
11457 SQLITE_PRIVATE void *sqlite3PageMalloc(int);
11458 SQLITE_PRIVATE void sqlite3PageFree(void*);
11459 SQLITE_PRIVATE void sqlite3MemSetDefault(void);
11460 SQLITE_PRIVATE void sqlite3BenignMallocHooks(void (*)(void), void (*)(void));
11461 SQLITE_PRIVATE int sqlite3HeapNearlyFull(void);
11464 ** On systems with ample stack space and that support alloca(), make
11465 ** use of alloca() to obtain space for large automatic objects. By default,
11466 ** obtain space from malloc().
11468 ** The alloca() routine never returns NULL. This will cause code paths
11469 ** that deal with sqlite3StackAlloc() failures to be unreachable.
11471 #ifdef SQLITE_USE_ALLOCA
11472 # define sqlite3StackAllocRaw(D,N) alloca(N)
11473 # define sqlite3StackAllocZero(D,N) memset(alloca(N), 0, N)
11474 # define sqlite3StackFree(D,P)
11475 #else
11476 # define sqlite3StackAllocRaw(D,N) sqlite3DbMallocRaw(D,N)
11477 # define sqlite3StackAllocZero(D,N) sqlite3DbMallocZero(D,N)
11478 # define sqlite3StackFree(D,P) sqlite3DbFree(D,P)
11479 #endif
11481 #ifdef SQLITE_ENABLE_MEMSYS3
11482 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void);
11483 #endif
11484 #ifdef SQLITE_ENABLE_MEMSYS5
11485 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void);
11486 #endif
11489 #ifndef SQLITE_MUTEX_OMIT
11490 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void);
11491 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void);
11492 SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int);
11493 SQLITE_PRIVATE int sqlite3MutexInit(void);
11494 SQLITE_PRIVATE int sqlite3MutexEnd(void);
11495 #endif
11497 SQLITE_PRIVATE int sqlite3StatusValue(int);
11498 SQLITE_PRIVATE void sqlite3StatusAdd(int, int);
11499 SQLITE_PRIVATE void sqlite3StatusSet(int, int);
11501 #ifndef SQLITE_OMIT_FLOATING_POINT
11502 SQLITE_PRIVATE int sqlite3IsNaN(double);
11503 #else
11504 # define sqlite3IsNaN(X) 0
11505 #endif
11507 SQLITE_PRIVATE void sqlite3VXPrintf(StrAccum*, int, const char*, va_list);
11508 #ifndef SQLITE_OMIT_TRACE
11509 SQLITE_PRIVATE void sqlite3XPrintf(StrAccum*, const char*, ...);
11510 #endif
11511 SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3*,const char*, ...);
11512 SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3*,const char*, va_list);
11513 SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3*,char*,const char*,...);
11514 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
11515 SQLITE_PRIVATE void sqlite3DebugPrintf(const char*, ...);
11516 #endif
11517 #if defined(SQLITE_TEST)
11518 SQLITE_PRIVATE void *sqlite3TestTextToPtr(const char*);
11519 #endif
11521 /* Output formatting for SQLITE_TESTCTRL_EXPLAIN */
11522 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
11523 SQLITE_PRIVATE void sqlite3ExplainBegin(Vdbe*);
11524 SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe*, const char*, ...);
11525 SQLITE_PRIVATE void sqlite3ExplainNL(Vdbe*);
11526 SQLITE_PRIVATE void sqlite3ExplainPush(Vdbe*);
11527 SQLITE_PRIVATE void sqlite3ExplainPop(Vdbe*);
11528 SQLITE_PRIVATE void sqlite3ExplainFinish(Vdbe*);
11529 SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe*, Select*);
11530 SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe*, Expr*);
11531 SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe*, ExprList*);
11532 SQLITE_PRIVATE const char *sqlite3VdbeExplanation(Vdbe*);
11533 #else
11534 # define sqlite3ExplainBegin(X)
11535 # define sqlite3ExplainSelect(A,B)
11536 # define sqlite3ExplainExpr(A,B)
11537 # define sqlite3ExplainExprList(A,B)
11538 # define sqlite3ExplainFinish(X)
11539 # define sqlite3VdbeExplanation(X) 0
11540 #endif
11543 SQLITE_PRIVATE void sqlite3SetString(char **, sqlite3*, const char*, ...);
11544 SQLITE_PRIVATE void sqlite3ErrorMsg(Parse*, const char*, ...);
11545 SQLITE_PRIVATE int sqlite3Dequote(char*);
11546 SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char*, int);
11547 SQLITE_PRIVATE int sqlite3RunParser(Parse*, const char*, char **);
11548 SQLITE_PRIVATE void sqlite3FinishCoding(Parse*);
11549 SQLITE_PRIVATE int sqlite3GetTempReg(Parse*);
11550 SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse*,int);
11551 SQLITE_PRIVATE int sqlite3GetTempRange(Parse*,int);
11552 SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse*,int,int);
11553 SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse*);
11554 SQLITE_PRIVATE Expr *sqlite3ExprAlloc(sqlite3*,int,const Token*,int);
11555 SQLITE_PRIVATE Expr *sqlite3Expr(sqlite3*,int,const char*);
11556 SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(sqlite3*,Expr*,Expr*,Expr*);
11557 SQLITE_PRIVATE Expr *sqlite3PExpr(Parse*, int, Expr*, Expr*, const Token*);
11558 SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3*,Expr*, Expr*);
11559 SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse*,ExprList*, Token*);
11560 SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse*, Expr*);
11561 SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3*, Expr*);
11562 SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(Parse*,ExprList*,Expr*);
11563 SQLITE_PRIVATE void sqlite3ExprListSetName(Parse*,ExprList*,Token*,int);
11564 SQLITE_PRIVATE void sqlite3ExprListSetSpan(Parse*,ExprList*,ExprSpan*);
11565 SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3*, ExprList*);
11566 SQLITE_PRIVATE int sqlite3Init(sqlite3*, char**);
11567 SQLITE_PRIVATE int sqlite3InitCallback(void*, int, char**, char**);
11568 SQLITE_PRIVATE void sqlite3Pragma(Parse*,Token*,Token*,Token*,int);
11569 SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3*, int);
11570 SQLITE_PRIVATE void sqlite3BeginParse(Parse*,int);
11571 SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3*);
11572 SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*);
11573 SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *, int);
11574 SQLITE_PRIVATE void sqlite3StartTable(Parse*,Token*,Token*,int,int,int,int);
11575 SQLITE_PRIVATE void sqlite3AddColumn(Parse*,Token*);
11576 SQLITE_PRIVATE void sqlite3AddNotNull(Parse*, int);
11577 SQLITE_PRIVATE void sqlite3AddPrimaryKey(Parse*, ExprList*, int, int, int);
11578 SQLITE_PRIVATE void sqlite3AddCheckConstraint(Parse*, Expr*);
11579 SQLITE_PRIVATE void sqlite3AddColumnType(Parse*,Token*);
11580 SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse*,ExprSpan*);
11581 SQLITE_PRIVATE void sqlite3AddCollateType(Parse*, Token*);
11582 SQLITE_PRIVATE void sqlite3EndTable(Parse*,Token*,Token*,Select*);
11583 SQLITE_PRIVATE int sqlite3ParseUri(const char*,const char*,unsigned int*,
11584 sqlite3_vfs**,char**,char **);
11585 SQLITE_PRIVATE int sqlite3CodeOnce(Parse *);
11587 SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32);
11588 SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec*, u32);
11589 SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec*, u32);
11590 SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec*, u32, void*);
11591 SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec*);
11592 SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec*);
11593 SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int,int*);
11595 SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3*, void*, unsigned int);
11596 SQLITE_PRIVATE void sqlite3RowSetClear(RowSet*);
11597 SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet*, i64);
11598 SQLITE_PRIVATE int sqlite3RowSetTest(RowSet*, u8 iBatch, i64);
11599 SQLITE_PRIVATE int sqlite3RowSetNext(RowSet*, i64*);
11601 SQLITE_PRIVATE void sqlite3CreateView(Parse*,Token*,Token*,Token*,Select*,int,int);
11603 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
11604 SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse*,Table*);
11605 #else
11606 # define sqlite3ViewGetColumnNames(A,B) 0
11607 #endif
11609 SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int);
11610 SQLITE_PRIVATE void sqlite3CodeDropTable(Parse*, Table*, int, int);
11611 SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*);
11612 #ifndef SQLITE_OMIT_AUTOINCREMENT
11613 SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse);
11614 SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse);
11615 #else
11616 # define sqlite3AutoincrementBegin(X)
11617 # define sqlite3AutoincrementEnd(X)
11618 #endif
11619 SQLITE_PRIVATE void sqlite3Insert(Parse*, SrcList*, ExprList*, Select*, IdList*, int);
11620 SQLITE_PRIVATE void *sqlite3ArrayAllocate(sqlite3*,void*,int,int,int*,int*,int*);
11621 SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3*, IdList*, Token*);
11622 SQLITE_PRIVATE int sqlite3IdListIndex(IdList*,const char*);
11623 SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(sqlite3*, SrcList*, int, int);
11624 SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(sqlite3*, SrcList*, Token*, Token*);
11625 SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(Parse*, SrcList*, Token*, Token*,
11626 Token*, Select*, Expr*, IdList*);
11627 SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *, SrcList *, Token *);
11628 SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *, struct SrcList_item *);
11629 SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList*);
11630 SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse*, SrcList*);
11631 SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3*, IdList*);
11632 SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3*, SrcList*);
11633 SQLITE_PRIVATE Index *sqlite3CreateIndex(Parse*,Token*,Token*,SrcList*,ExprList*,int,Token*,
11634 Token*, int, int);
11635 SQLITE_PRIVATE void sqlite3DropIndex(Parse*, SrcList*, int);
11636 SQLITE_PRIVATE int sqlite3Select(Parse*, Select*, SelectDest*);
11637 SQLITE_PRIVATE Select *sqlite3SelectNew(Parse*,ExprList*,SrcList*,Expr*,ExprList*,
11638 Expr*,ExprList*,int,Expr*,Expr*);
11639 SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3*, Select*);
11640 SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse*, SrcList*);
11641 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse*, Table*, int);
11642 SQLITE_PRIVATE void sqlite3OpenTable(Parse*, int iCur, int iDb, Table*, int);
11643 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
11644 SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *, char *);
11645 #endif
11646 SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
11647 SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
11648 SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**,ExprList*,u16);
11649 SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
11650 SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int);
11651 SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int);
11652 SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int);
11653 SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, int, int, int);
11654 SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse*, int, int, int);
11655 SQLITE_PRIVATE void sqlite3ExprCachePush(Parse*);
11656 SQLITE_PRIVATE void sqlite3ExprCachePop(Parse*, int);
11657 SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int);
11658 SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*);
11659 SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int);
11660 SQLITE_PRIVATE int sqlite3ExprCode(Parse*, Expr*, int);
11661 SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
11662 SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int);
11663 SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse*, Expr*, int);
11664 SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse*, Expr*);
11665 SQLITE_PRIVATE int sqlite3ExprCodeExprList(Parse*, ExprList*, int, int);
11666 SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse*, Expr*, int, int);
11667 SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse*, Expr*, int, int);
11668 SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3*,const char*, const char*);
11669 SQLITE_PRIVATE Table *sqlite3LocateTable(Parse*,int isView,const char*, const char*);
11670 SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3*,const char*, const char*);
11671 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3*,int,const char*);
11672 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3*,int,const char*);
11673 SQLITE_PRIVATE void sqlite3Vacuum(Parse*);
11674 SQLITE_PRIVATE int sqlite3RunVacuum(char**, sqlite3*);
11675 SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3*, Token*);
11676 SQLITE_PRIVATE int sqlite3ExprCompare(Expr*, Expr*);
11677 SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList*, ExprList*);
11678 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext*, Expr*);
11679 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext*,ExprList*);
11680 SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse*);
11681 SQLITE_PRIVATE void sqlite3PrngSaveState(void);
11682 SQLITE_PRIVATE void sqlite3PrngRestoreState(void);
11683 SQLITE_PRIVATE void sqlite3PrngResetState(void);
11684 SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3*);
11685 SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse*, int);
11686 SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse*, const char *zDb);
11687 SQLITE_PRIVATE void sqlite3BeginTransaction(Parse*, int);
11688 SQLITE_PRIVATE void sqlite3CommitTransaction(Parse*);
11689 SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse*);
11690 SQLITE_PRIVATE void sqlite3Savepoint(Parse*, int, Token*);
11691 SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
11692 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
11693 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
11694 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*);
11695 SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
11696 SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
11697 SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(Vdbe*, const Expr*, int, int);
11698 SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
11699 SQLITE_PRIVATE int sqlite3IsRowid(const char*);
11700 SQLITE_PRIVATE void sqlite3GenerateRowDelete(Parse*, Table*, int, int, int, Trigger *, int);
11701 SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(Parse*, Table*, int, int*);
11702 SQLITE_PRIVATE int sqlite3GenerateIndexKey(Parse*, Index*, int, int, int);
11703 SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(Parse*,Table*,int,int,
11704 int*,int,int,int,int,int*);
11705 SQLITE_PRIVATE void sqlite3CompleteInsertion(Parse*, Table*, int, int, int*, int, int, int);
11706 SQLITE_PRIVATE int sqlite3OpenTableAndIndices(Parse*, Table*, int, int);
11707 SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse*, int, int);
11708 SQLITE_PRIVATE void sqlite3MultiWrite(Parse*);
11709 SQLITE_PRIVATE void sqlite3MayAbort(Parse*);
11710 SQLITE_PRIVATE void sqlite3HaltConstraint(Parse*, int, char*, int);
11711 SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3*,Expr*,int);
11712 SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int);
11713 SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int);
11714 SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*);
11715 SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int);
11716 SQLITE_PRIVATE void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*);
11717 SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,int);
11718 SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3*);
11719 SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void);
11720 SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void);
11721 SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3*);
11722 SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3*);
11723 SQLITE_PRIVATE void sqlite3ChangeCookie(Parse*, int);
11725 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
11726 SQLITE_PRIVATE void sqlite3MaterializeView(Parse*, Table*, Expr*, int);
11727 #endif
11729 #ifndef SQLITE_OMIT_TRIGGER
11730 SQLITE_PRIVATE void sqlite3BeginTrigger(Parse*, Token*,Token*,int,int,IdList*,SrcList*,
11731 Expr*,int, int);
11732 SQLITE_PRIVATE void sqlite3FinishTrigger(Parse*, TriggerStep*, Token*);
11733 SQLITE_PRIVATE void sqlite3DropTrigger(Parse*, SrcList*, int);
11734 SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse*, Trigger*);
11735 SQLITE_PRIVATE Trigger *sqlite3TriggersExist(Parse *, Table*, int, ExprList*, int *pMask);
11736 SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *, Table *);
11737 SQLITE_PRIVATE void sqlite3CodeRowTrigger(Parse*, Trigger *, int, ExprList*, int, Table *,
11738 int, int, int);
11739 SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(Parse *, Trigger *, Table *, int, int, int);
11740 void sqliteViewTriggers(Parse*, Table*, Expr*, int, ExprList*);
11741 SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3*, TriggerStep*);
11742 SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3*,Select*);
11743 SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(sqlite3*,Token*, IdList*,
11744 ExprList*,Select*,u8);
11745 SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(sqlite3*,Token*,ExprList*, Expr*, u8);
11746 SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(sqlite3*,Token*, Expr*);
11747 SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3*, Trigger*);
11748 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3*,int,const char*);
11749 SQLITE_PRIVATE u32 sqlite3TriggerColmask(Parse*,Trigger*,ExprList*,int,int,Table*,int);
11750 # define sqlite3ParseToplevel(p) ((p)->pToplevel ? (p)->pToplevel : (p))
11751 #else
11752 # define sqlite3TriggersExist(B,C,D,E,F) 0
11753 # define sqlite3DeleteTrigger(A,B)
11754 # define sqlite3DropTriggerPtr(A,B)
11755 # define sqlite3UnlinkAndDeleteTrigger(A,B,C)
11756 # define sqlite3CodeRowTrigger(A,B,C,D,E,F,G,H,I)
11757 # define sqlite3CodeRowTriggerDirect(A,B,C,D,E,F)
11758 # define sqlite3TriggerList(X, Y) 0
11759 # define sqlite3ParseToplevel(p) p
11760 # define sqlite3TriggerColmask(A,B,C,D,E,F,G) 0
11761 #endif
11763 SQLITE_PRIVATE int sqlite3JoinType(Parse*, Token*, Token*, Token*);
11764 SQLITE_PRIVATE void sqlite3CreateForeignKey(Parse*, ExprList*, Token*, ExprList*, int);
11765 SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse*, int);
11766 #ifndef SQLITE_OMIT_AUTHORIZATION
11767 SQLITE_PRIVATE void sqlite3AuthRead(Parse*,Expr*,Schema*,SrcList*);
11768 SQLITE_PRIVATE int sqlite3AuthCheck(Parse*,int, const char*, const char*, const char*);
11769 SQLITE_PRIVATE void sqlite3AuthContextPush(Parse*, AuthContext*, const char*);
11770 SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext*);
11771 SQLITE_PRIVATE int sqlite3AuthReadCol(Parse*, const char *, const char *, int);
11772 #else
11773 # define sqlite3AuthRead(a,b,c,d)
11774 # define sqlite3AuthCheck(a,b,c,d,e) SQLITE_OK
11775 # define sqlite3AuthContextPush(a,b,c)
11776 # define sqlite3AuthContextPop(a) ((void)(a))
11777 #endif
11778 SQLITE_PRIVATE void sqlite3Attach(Parse*, Expr*, Expr*, Expr*);
11779 SQLITE_PRIVATE void sqlite3Detach(Parse*, Expr*);
11780 SQLITE_PRIVATE int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*);
11781 SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
11782 SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
11783 SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
11784 SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
11785 SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
11786 SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
11787 SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
11788 SQLITE_PRIVATE int sqlite3Atoi(const char*);
11789 SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar);
11790 SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte);
11791 SQLITE_PRIVATE u32 sqlite3Utf8Read(const u8*, const u8**);
11794 ** Routines to read and write variable-length integers. These used to
11795 ** be defined locally, but now we use the varint routines in the util.c
11796 ** file. Code should use the MACRO forms below, as the Varint32 versions
11797 ** are coded to assume the single byte case is already handled (which
11798 ** the MACRO form does).
11800 SQLITE_PRIVATE int sqlite3PutVarint(unsigned char*, u64);
11801 SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char*, u32);
11802 SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *, u64 *);
11803 SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *, u32 *);
11804 SQLITE_PRIVATE int sqlite3VarintLen(u64 v);
11807 ** The header of a record consists of a sequence variable-length integers.
11808 ** These integers are almost always small and are encoded as a single byte.
11809 ** The following macros take advantage this fact to provide a fast encode
11810 ** and decode of the integers in a record header. It is faster for the common
11811 ** case where the integer is a single byte. It is a little slower when the
11812 ** integer is two or more bytes. But overall it is faster.
11814 ** The following expressions are equivalent:
11816 ** x = sqlite3GetVarint32( A, &B );
11817 ** x = sqlite3PutVarint32( A, B );
11819 ** x = getVarint32( A, B );
11820 ** x = putVarint32( A, B );
11823 #define getVarint32(A,B) (u8)((*(A)<(u8)0x80) ? ((B) = (u32)*(A)),1 : sqlite3GetVarint32((A), (u32 *)&(B)))
11824 #define putVarint32(A,B) (u8)(((u32)(B)<(u32)0x80) ? (*(A) = (unsigned char)(B)),1 : sqlite3PutVarint32((A), (B)))
11825 #define getVarint sqlite3GetVarint
11826 #define putVarint sqlite3PutVarint
11829 SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
11830 SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *, Table *);
11831 SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2);
11832 SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
11833 SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr);
11834 SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
11835 SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...);
11836 SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
11837 SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
11838 SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
11839 SQLITE_PRIVATE const char *sqlite3ErrStr(int);
11840 SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
11841 SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
11842 SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char*zName);
11843 SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr);
11844 SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr*, CollSeq*);
11845 SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr*, Token*);
11846 SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *, CollSeq *);
11847 SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *, const char *);
11848 SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *, int);
11849 SQLITE_PRIVATE int sqlite3AddInt64(i64*,i64);
11850 SQLITE_PRIVATE int sqlite3SubInt64(i64*,i64);
11851 SQLITE_PRIVATE int sqlite3MulInt64(i64*,i64);
11852 SQLITE_PRIVATE int sqlite3AbsInt32(int);
11853 #ifdef SQLITE_ENABLE_8_3_NAMES
11854 SQLITE_PRIVATE void sqlite3FileSuffix3(const char*, char*);
11855 #else
11856 # define sqlite3FileSuffix3(X,Y)
11857 #endif
11858 SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z);
11860 SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8);
11861 SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8);
11862 SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8,
11863 void(*)(void*));
11864 SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value*);
11865 SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *);
11866 SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *, const void*, int, u8);
11867 #ifdef SQLITE_ENABLE_STAT3
11868 SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *, u8, char *, int, int *);
11869 #endif
11870 SQLITE_PRIVATE int sqlite3ValueFromExpr(sqlite3 *, Expr *, u8, u8, sqlite3_value **);
11871 SQLITE_PRIVATE void sqlite3ValueApplyAffinity(sqlite3_value *, u8, u8);
11872 #ifndef SQLITE_AMALGAMATION
11873 SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[];
11874 SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[];
11875 SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[];
11876 SQLITE_PRIVATE const Token sqlite3IntTokens[];
11877 SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config;
11878 SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
11879 #ifndef SQLITE_OMIT_WSD
11880 SQLITE_PRIVATE int sqlite3PendingByte;
11881 #endif
11882 #endif
11883 SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3*, int, int, int);
11884 SQLITE_PRIVATE void sqlite3Reindex(Parse*, Token*, Token*);
11885 SQLITE_PRIVATE void sqlite3AlterFunctions(void);
11886 SQLITE_PRIVATE void sqlite3AlterRenameTable(Parse*, SrcList*, Token*);
11887 SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *, int *);
11888 SQLITE_PRIVATE void sqlite3NestedParse(Parse*, const char*, ...);
11889 SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3*);
11890 SQLITE_PRIVATE int sqlite3CodeSubselect(Parse *, Expr *, int, int);
11891 SQLITE_PRIVATE void sqlite3SelectPrep(Parse*, Select*, NameContext*);
11892 SQLITE_PRIVATE int sqlite3ResolveExprNames(NameContext*, Expr*);
11893 SQLITE_PRIVATE void sqlite3ResolveSelectNames(Parse*, Select*, NameContext*);
11894 SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(Parse*, Select*, ExprList*, const char*);
11895 SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *, Table *, int, int);
11896 SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *, Token *);
11897 SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *, SrcList *);
11898 SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(sqlite3*, u8, CollSeq *, const char*);
11899 SQLITE_PRIVATE char sqlite3AffinityType(const char*);
11900 SQLITE_PRIVATE void sqlite3Analyze(Parse*, Token*, Token*);
11901 SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler*);
11902 SQLITE_PRIVATE int sqlite3FindDb(sqlite3*, Token*);
11903 SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *, const char *);
11904 SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3*,int iDB);
11905 SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3*,Index*);
11906 SQLITE_PRIVATE void sqlite3DefaultRowEst(Index*);
11907 SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3*, int);
11908 SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3*,Expr*,int*,char*);
11909 SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse*, int, int);
11910 SQLITE_PRIVATE void sqlite3SchemaClear(void *);
11911 SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *, Btree *);
11912 SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *);
11913 SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *);
11914 SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *,
11915 void (*)(sqlite3_context*,int,sqlite3_value **),
11916 void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*),
11917 FuncDestructor *pDestructor
11919 SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int);
11920 SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *);
11922 SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int);
11923 SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int);
11924 SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum*,int);
11925 SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*);
11926 SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum*);
11927 SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest*,int,int);
11928 SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *, SrcList *, int, int);
11930 SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *);
11931 SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *, Pgno, const u8 *);
11934 ** The interface to the LEMON-generated parser
11936 SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(size_t));
11937 SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*));
11938 SQLITE_PRIVATE void sqlite3Parser(void*, int, Token, Parse*);
11939 #ifdef YYTRACKMAXSTACKDEPTH
11940 SQLITE_PRIVATE int sqlite3ParserStackPeak(void*);
11941 #endif
11943 SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3*);
11944 #ifndef SQLITE_OMIT_LOAD_EXTENSION
11945 SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3*);
11946 #else
11947 # define sqlite3CloseExtensions(X)
11948 #endif
11950 #ifndef SQLITE_OMIT_SHARED_CACHE
11951 SQLITE_PRIVATE void sqlite3TableLock(Parse *, int, int, u8, const char *);
11952 #else
11953 #define sqlite3TableLock(v,w,x,y,z)
11954 #endif
11956 #ifdef SQLITE_TEST
11957 SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char*);
11958 #endif
11960 #ifdef SQLITE_OMIT_VIRTUALTABLE
11961 # define sqlite3VtabClear(Y)
11962 # define sqlite3VtabSync(X,Y) SQLITE_OK
11963 # define sqlite3VtabRollback(X)
11964 # define sqlite3VtabCommit(X)
11965 # define sqlite3VtabInSync(db) 0
11966 # define sqlite3VtabLock(X)
11967 # define sqlite3VtabUnlock(X)
11968 # define sqlite3VtabUnlockList(X)
11969 # define sqlite3VtabSavepoint(X, Y, Z) SQLITE_OK
11970 # define sqlite3GetVTable(X,Y) ((VTable*)0)
11971 #else
11972 SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table*);
11973 SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **);
11974 SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db);
11975 SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db);
11976 SQLITE_PRIVATE void sqlite3VtabLock(VTable *);
11977 SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *);
11978 SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3*);
11979 SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *, int, int);
11980 SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3*, Table*);
11981 # define sqlite3VtabInSync(db) ((db)->nVTrans>0 && (db)->aVTrans==0)
11982 #endif
11983 SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse*,Table*);
11984 SQLITE_PRIVATE void sqlite3VtabBeginParse(Parse*, Token*, Token*, Token*);
11985 SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse*, Token*);
11986 SQLITE_PRIVATE void sqlite3VtabArgInit(Parse*);
11987 SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse*, Token*);
11988 SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3*, int, const char *, char **);
11989 SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse*, Table*);
11990 SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3*, int, const char *);
11991 SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *, VTable *);
11992 SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(sqlite3 *,FuncDef*, int nArg, Expr*);
11993 SQLITE_PRIVATE void sqlite3InvalidFunction(sqlite3_context*,int,sqlite3_value**);
11994 SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe*, const char*, int);
11995 SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *, sqlite3_stmt *);
11996 SQLITE_PRIVATE int sqlite3Reprepare(Vdbe*);
11997 SQLITE_PRIVATE void sqlite3ExprListCheckLength(Parse*, ExprList*, const char*);
11998 SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(Parse *, Expr *, Expr *);
11999 SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3*);
12000 SQLITE_PRIVATE const char *sqlite3JournalModename(int);
12001 SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3*, int, int, int*, int*);
12002 SQLITE_PRIVATE int sqlite3WalDefaultHook(void*,sqlite3*,const char*,int);
12004 /* Declarations for functions in fkey.c. All of these are replaced by
12005 ** no-op macros if OMIT_FOREIGN_KEY is defined. In this case no foreign
12006 ** key functionality is available. If OMIT_TRIGGER is defined but
12007 ** OMIT_FOREIGN_KEY is not, only some of the functions are no-oped. In
12008 ** this case foreign keys are parsed, but no other functionality is
12009 ** provided (enforcement of FK constraints requires the triggers sub-system).
12011 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
12012 SQLITE_PRIVATE void sqlite3FkCheck(Parse*, Table*, int, int);
12013 SQLITE_PRIVATE void sqlite3FkDropTable(Parse*, SrcList *, Table*);
12014 SQLITE_PRIVATE void sqlite3FkActions(Parse*, Table*, ExprList*, int);
12015 SQLITE_PRIVATE int sqlite3FkRequired(Parse*, Table*, int*, int);
12016 SQLITE_PRIVATE u32 sqlite3FkOldmask(Parse*, Table*);
12017 SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *);
12018 #else
12019 #define sqlite3FkActions(a,b,c,d)
12020 #define sqlite3FkCheck(a,b,c,d)
12021 #define sqlite3FkDropTable(a,b,c)
12022 #define sqlite3FkOldmask(a,b) 0
12023 #define sqlite3FkRequired(a,b,c,d) 0
12024 #endif
12025 #ifndef SQLITE_OMIT_FOREIGN_KEY
12026 SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *, Table*);
12027 #else
12028 #define sqlite3FkDelete(a,b)
12029 #endif
12033 ** Available fault injectors. Should be numbered beginning with 0.
12035 #define SQLITE_FAULTINJECTOR_MALLOC 0
12036 #define SQLITE_FAULTINJECTOR_COUNT 1
12039 ** The interface to the code in fault.c used for identifying "benign"
12040 ** malloc failures. This is only present if SQLITE_OMIT_BUILTIN_TEST
12041 ** is not defined.
12043 #ifndef SQLITE_OMIT_BUILTIN_TEST
12044 SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void);
12045 SQLITE_PRIVATE void sqlite3EndBenignMalloc(void);
12046 #else
12047 #define sqlite3BeginBenignMalloc()
12048 #define sqlite3EndBenignMalloc()
12049 #endif
12051 #define IN_INDEX_ROWID 1
12052 #define IN_INDEX_EPH 2
12053 #define IN_INDEX_INDEX 3
12054 SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, int*);
12056 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
12057 SQLITE_PRIVATE int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
12058 SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *);
12059 SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *);
12060 #else
12061 #define sqlite3JournalSize(pVfs) ((pVfs)->szOsFile)
12062 #endif
12064 SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *);
12065 SQLITE_PRIVATE int sqlite3MemJournalSize(void);
12066 SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *);
12068 #if SQLITE_MAX_EXPR_DEPTH>0
12069 SQLITE_PRIVATE void sqlite3ExprSetHeight(Parse *pParse, Expr *p);
12070 SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *);
12071 SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse*, int);
12072 #else
12073 #define sqlite3ExprSetHeight(x,y)
12074 #define sqlite3SelectExprHeight(x) 0
12075 #define sqlite3ExprCheckHeight(x,y)
12076 #endif
12078 SQLITE_PRIVATE u32 sqlite3Get4byte(const u8*);
12079 SQLITE_PRIVATE void sqlite3Put4byte(u8*, u32);
12081 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
12082 SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *, sqlite3 *);
12083 SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db);
12084 SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db);
12085 #else
12086 #define sqlite3ConnectionBlocked(x,y)
12087 #define sqlite3ConnectionUnlocked(x)
12088 #define sqlite3ConnectionClosed(x)
12089 #endif
12091 #ifdef SQLITE_DEBUG
12092 SQLITE_PRIVATE void sqlite3ParserTrace(FILE*, char *);
12093 #endif
12096 ** If the SQLITE_ENABLE IOTRACE exists then the global variable
12097 ** sqlite3IoTrace is a pointer to a printf-like routine used to
12098 ** print I/O tracing messages.
12100 #ifdef SQLITE_ENABLE_IOTRACE
12101 # define IOTRACE(A) if( sqlite3IoTrace ){ sqlite3IoTrace A; }
12102 SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe*);
12103 SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*,...);
12104 #else
12105 # define IOTRACE(A)
12106 # define sqlite3VdbeIOTraceSql(X)
12107 #endif
12110 ** These routines are available for the mem2.c debugging memory allocator
12111 ** only. They are used to verify that different "types" of memory
12112 ** allocations are properly tracked by the system.
12114 ** sqlite3MemdebugSetType() sets the "type" of an allocation to one of
12115 ** the MEMTYPE_* macros defined below. The type must be a bitmask with
12116 ** a single bit set.
12118 ** sqlite3MemdebugHasType() returns true if any of the bits in its second
12119 ** argument match the type set by the previous sqlite3MemdebugSetType().
12120 ** sqlite3MemdebugHasType() is intended for use inside assert() statements.
12122 ** sqlite3MemdebugNoType() returns true if none of the bits in its second
12123 ** argument match the type set by the previous sqlite3MemdebugSetType().
12125 ** Perhaps the most important point is the difference between MEMTYPE_HEAP
12126 ** and MEMTYPE_LOOKASIDE. If an allocation is MEMTYPE_LOOKASIDE, that means
12127 ** it might have been allocated by lookaside, except the allocation was
12128 ** too large or lookaside was already full. It is important to verify
12129 ** that allocations that might have been satisfied by lookaside are not
12130 ** passed back to non-lookaside free() routines. Asserts such as the
12131 ** example above are placed on the non-lookaside free() routines to verify
12132 ** this constraint.
12134 ** All of this is no-op for a production build. It only comes into
12135 ** play when the SQLITE_MEMDEBUG compile-time option is used.
12137 #ifdef SQLITE_MEMDEBUG
12138 SQLITE_PRIVATE void sqlite3MemdebugSetType(void*,u8);
12139 SQLITE_PRIVATE int sqlite3MemdebugHasType(void*,u8);
12140 SQLITE_PRIVATE int sqlite3MemdebugNoType(void*,u8);
12141 #else
12142 # define sqlite3MemdebugSetType(X,Y) /* no-op */
12143 # define sqlite3MemdebugHasType(X,Y) 1
12144 # define sqlite3MemdebugNoType(X,Y) 1
12145 #endif
12146 #define MEMTYPE_HEAP 0x01 /* General heap allocations */
12147 #define MEMTYPE_LOOKASIDE 0x02 /* Might have been lookaside memory */
12148 #define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */
12149 #define MEMTYPE_PCACHE 0x08 /* Page cache allocations */
12150 #define MEMTYPE_DB 0x10 /* Uses sqlite3DbMalloc, not sqlite_malloc */
12152 #endif /* _SQLITEINT_H_ */
12154 /************** End of sqliteInt.h *******************************************/
12155 /************** Begin file global.c ******************************************/
12157 ** 2008 June 13
12159 ** The author disclaims copyright to this source code. In place of
12160 ** a legal notice, here is a blessing:
12162 ** May you do good and not evil.
12163 ** May you find forgiveness for yourself and forgive others.
12164 ** May you share freely, never taking more than you give.
12166 *************************************************************************
12168 ** This file contains definitions of global variables and contants.
12171 /* An array to map all upper-case characters into their corresponding
12172 ** lower-case character.
12174 ** SQLite only considers US-ASCII (or EBCDIC) characters. We do not
12175 ** handle case conversions for the UTF character set since the tables
12176 ** involved are nearly as big or bigger than SQLite itself.
12178 SQLITE_PRIVATE const unsigned char sqlite3UpperToLower[] = {
12179 #ifdef SQLITE_ASCII
12180 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
12181 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
12182 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
12183 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 97, 98, 99,100,101,102,103,
12184 104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,
12185 122, 91, 92, 93, 94, 95, 96, 97, 98, 99,100,101,102,103,104,105,106,107,
12186 108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,
12187 126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,
12188 144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,
12189 162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,
12190 180,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,
12191 198,199,200,201,202,203,204,205,206,207,208,209,210,211,212,213,214,215,
12192 216,217,218,219,220,221,222,223,224,225,226,227,228,229,230,231,232,233,
12193 234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,251,
12194 252,253,254,255
12195 #endif
12196 #ifdef SQLITE_EBCDIC
12197 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, /* 0x */
12198 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, /* 1x */
12199 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, /* 2x */
12200 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, /* 3x */
12201 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, /* 4x */
12202 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, /* 5x */
12203 96, 97, 66, 67, 68, 69, 70, 71, 72, 73,106,107,108,109,110,111, /* 6x */
12204 112, 81, 82, 83, 84, 85, 86, 87, 88, 89,122,123,124,125,126,127, /* 7x */
12205 128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143, /* 8x */
12206 144,145,146,147,148,149,150,151,152,153,154,155,156,157,156,159, /* 9x */
12207 160,161,162,163,164,165,166,167,168,169,170,171,140,141,142,175, /* Ax */
12208 176,177,178,179,180,181,182,183,184,185,186,187,188,189,190,191, /* Bx */
12209 192,129,130,131,132,133,134,135,136,137,202,203,204,205,206,207, /* Cx */
12210 208,145,146,147,148,149,150,151,152,153,218,219,220,221,222,223, /* Dx */
12211 224,225,162,163,164,165,166,167,168,169,232,203,204,205,206,207, /* Ex */
12212 239,240,241,242,243,244,245,246,247,248,249,219,220,221,222,255, /* Fx */
12213 #endif
12217 ** The following 256 byte lookup table is used to support SQLites built-in
12218 ** equivalents to the following standard library functions:
12220 ** isspace() 0x01
12221 ** isalpha() 0x02
12222 ** isdigit() 0x04
12223 ** isalnum() 0x06
12224 ** isxdigit() 0x08
12225 ** toupper() 0x20
12226 ** SQLite identifier character 0x40
12228 ** Bit 0x20 is set if the mapped character requires translation to upper
12229 ** case. i.e. if the character is a lower-case ASCII character.
12230 ** If x is a lower-case ASCII character, then its upper-case equivalent
12231 ** is (x - 0x20). Therefore toupper() can be implemented as:
12233 ** (x & ~(map[x]&0x20))
12235 ** Standard function tolower() is implemented using the sqlite3UpperToLower[]
12236 ** array. tolower() is used more often than toupper() by SQLite.
12238 ** Bit 0x40 is set if the character non-alphanumeric and can be used in an
12239 ** SQLite identifier. Identifiers are alphanumerics, "_", "$", and any
12240 ** non-ASCII UTF character. Hence the test for whether or not a character is
12241 ** part of an identifier is 0x46.
12243 ** SQLite's versions are identical to the standard versions assuming a
12244 ** locale of "C". They are implemented as macros in sqliteInt.h.
12246 #ifdef SQLITE_ASCII
12247 SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = {
12248 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 00..07 ........ */
12249 0x00, 0x01, 0x01, 0x01, 0x01, 0x01, 0x00, 0x00, /* 08..0f ........ */
12250 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 10..17 ........ */
12251 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 18..1f ........ */
12252 0x01, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, /* 20..27 !"#$%&' */
12253 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 28..2f ()*+,-./ */
12254 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, 0x0c, /* 30..37 01234567 */
12255 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 38..3f 89:;<=>? */
12257 0x00, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x0a, 0x02, /* 40..47 @ABCDEFG */
12258 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 48..4f HIJKLMNO */
12259 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, 0x02, /* 50..57 PQRSTUVW */
12260 0x02, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x40, /* 58..5f XYZ[\]^_ */
12261 0x00, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x2a, 0x22, /* 60..67 `abcdefg */
12262 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 68..6f hijklmno */
12263 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, /* 70..77 pqrstuvw */
12264 0x22, 0x22, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, /* 78..7f xyz{|}~. */
12266 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 80..87 ........ */
12267 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 88..8f ........ */
12268 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 90..97 ........ */
12269 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* 98..9f ........ */
12270 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a0..a7 ........ */
12271 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* a8..af ........ */
12272 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b0..b7 ........ */
12273 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* b8..bf ........ */
12275 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c0..c7 ........ */
12276 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* c8..cf ........ */
12277 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d0..d7 ........ */
12278 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* d8..df ........ */
12279 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e0..e7 ........ */
12280 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* e8..ef ........ */
12281 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, /* f0..f7 ........ */
12282 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40 /* f8..ff ........ */
12284 #endif
12286 #ifndef SQLITE_USE_URI
12287 # define SQLITE_USE_URI 0
12288 #endif
12291 ** The following singleton contains the global configuration for
12292 ** the SQLite library.
12294 SQLITE_PRIVATE SQLITE_WSD struct Sqlite3Config sqlite3Config = {
12295 SQLITE_DEFAULT_MEMSTATUS, /* bMemstat */
12296 1, /* bCoreMutex */
12297 SQLITE_THREADSAFE==1, /* bFullMutex */
12298 SQLITE_USE_URI, /* bOpenUri */
12299 0x7ffffffe, /* mxStrlen */
12300 128, /* szLookaside */
12301 500, /* nLookaside */
12302 {0,0,0,0,0,0,0,0}, /* m */
12303 {0,0,0,0,0,0,0,0,0}, /* mutex */
12304 {0,0,0,0,0,0,0,0,0,0,0,0,0},/* pcache2 */
12305 (void*)0, /* pHeap */
12306 0, /* nHeap */
12307 0, 0, /* mnHeap, mxHeap */
12308 (void*)0, /* pScratch */
12309 0, /* szScratch */
12310 0, /* nScratch */
12311 (void*)0, /* pPage */
12312 0, /* szPage */
12313 0, /* nPage */
12314 0, /* mxParserStack */
12315 0, /* sharedCacheEnabled */
12316 /* All the rest should always be initialized to zero */
12317 0, /* isInit */
12318 0, /* inProgress */
12319 0, /* isMutexInit */
12320 0, /* isMallocInit */
12321 0, /* isPCacheInit */
12322 0, /* pInitMutex */
12323 0, /* nRefInitMutex */
12324 0, /* xLog */
12325 0, /* pLogArg */
12326 0, /* bLocaltimeFault */
12331 ** Hash table for global functions - functions common to all
12332 ** database connections. After initialization, this table is
12333 ** read-only.
12335 SQLITE_PRIVATE SQLITE_WSD FuncDefHash sqlite3GlobalFunctions;
12338 ** Constant tokens for values 0 and 1.
12340 SQLITE_PRIVATE const Token sqlite3IntTokens[] = {
12341 { "0", 1 },
12342 { "1", 1 }
12347 ** The value of the "pending" byte must be 0x40000000 (1 byte past the
12348 ** 1-gibabyte boundary) in a compatible database. SQLite never uses
12349 ** the database page that contains the pending byte. It never attempts
12350 ** to read or write that page. The pending byte page is set assign
12351 ** for use by the VFS layers as space for managing file locks.
12353 ** During testing, it is often desirable to move the pending byte to
12354 ** a different position in the file. This allows code that has to
12355 ** deal with the pending byte to run on files that are much smaller
12356 ** than 1 GiB. The sqlite3_test_control() interface can be used to
12357 ** move the pending byte.
12359 ** IMPORTANT: Changing the pending byte to any value other than
12360 ** 0x40000000 results in an incompatible database file format!
12361 ** Changing the pending byte during operating results in undefined
12362 ** and dileterious behavior.
12364 #ifndef SQLITE_OMIT_WSD
12365 SQLITE_PRIVATE int sqlite3PendingByte = 0x40000000;
12366 #endif
12369 ** Properties of opcodes. The OPFLG_INITIALIZER macro is
12370 ** created by mkopcodeh.awk during compilation. Data is obtained
12371 ** from the comments following the "case OP_xxxx:" statements in
12372 ** the vdbe.c file.
12374 SQLITE_PRIVATE const unsigned char sqlite3OpcodeProperty[] = OPFLG_INITIALIZER;
12376 /************** End of global.c **********************************************/
12377 /************** Begin file ctime.c *******************************************/
12379 ** 2010 February 23
12381 ** The author disclaims copyright to this source code. In place of
12382 ** a legal notice, here is a blessing:
12384 ** May you do good and not evil.
12385 ** May you find forgiveness for yourself and forgive others.
12386 ** May you share freely, never taking more than you give.
12388 *************************************************************************
12390 ** This file implements routines used to report what compile-time options
12391 ** SQLite was built with.
12394 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
12398 ** An array of names of all compile-time options. This array should
12399 ** be sorted A-Z.
12401 ** This array looks large, but in a typical installation actually uses
12402 ** only a handful of compile-time options, so most times this array is usually
12403 ** rather short and uses little memory space.
12405 static const char * const azCompileOpt[] = {
12407 /* These macros are provided to "stringify" the value of the define
12408 ** for those options in which the value is meaningful. */
12409 #define CTIMEOPT_VAL_(opt) #opt
12410 #define CTIMEOPT_VAL(opt) CTIMEOPT_VAL_(opt)
12412 #ifdef SQLITE_32BIT_ROWID
12413 "32BIT_ROWID",
12414 #endif
12415 #ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
12416 "4_BYTE_ALIGNED_MALLOC",
12417 #endif
12418 #ifdef SQLITE_CASE_SENSITIVE_LIKE
12419 "CASE_SENSITIVE_LIKE",
12420 #endif
12421 #ifdef SQLITE_CHECK_PAGES
12422 "CHECK_PAGES",
12423 #endif
12424 #ifdef SQLITE_COVERAGE_TEST
12425 "COVERAGE_TEST",
12426 #endif
12427 #ifdef SQLITE_DEBUG
12428 "DEBUG",
12429 #endif
12430 #ifdef SQLITE_DEFAULT_LOCKING_MODE
12431 "DEFAULT_LOCKING_MODE=" CTIMEOPT_VAL(SQLITE_DEFAULT_LOCKING_MODE),
12432 #endif
12433 #ifdef SQLITE_DISABLE_DIRSYNC
12434 "DISABLE_DIRSYNC",
12435 #endif
12436 #ifdef SQLITE_DISABLE_LFS
12437 "DISABLE_LFS",
12438 #endif
12439 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
12440 "ENABLE_ATOMIC_WRITE",
12441 #endif
12442 #ifdef SQLITE_ENABLE_CEROD
12443 "ENABLE_CEROD",
12444 #endif
12445 #ifdef SQLITE_ENABLE_COLUMN_METADATA
12446 "ENABLE_COLUMN_METADATA",
12447 #endif
12448 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
12449 "ENABLE_EXPENSIVE_ASSERT",
12450 #endif
12451 #ifdef SQLITE_ENABLE_FTS1
12452 "ENABLE_FTS1",
12453 #endif
12454 #ifdef SQLITE_ENABLE_FTS2
12455 "ENABLE_FTS2",
12456 #endif
12457 #ifdef SQLITE_ENABLE_FTS3
12458 "ENABLE_FTS3",
12459 #endif
12460 #ifdef SQLITE_ENABLE_FTS3_PARENTHESIS
12461 "ENABLE_FTS3_PARENTHESIS",
12462 #endif
12463 #ifdef SQLITE_ENABLE_FTS4
12464 "ENABLE_FTS4",
12465 #endif
12466 #ifdef SQLITE_ENABLE_ICU
12467 "ENABLE_ICU",
12468 #endif
12469 #ifdef SQLITE_ENABLE_IOTRACE
12470 "ENABLE_IOTRACE",
12471 #endif
12472 #ifdef SQLITE_ENABLE_LOAD_EXTENSION
12473 "ENABLE_LOAD_EXTENSION",
12474 #endif
12475 #ifdef SQLITE_ENABLE_LOCKING_STYLE
12476 "ENABLE_LOCKING_STYLE=" CTIMEOPT_VAL(SQLITE_ENABLE_LOCKING_STYLE),
12477 #endif
12478 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
12479 "ENABLE_MEMORY_MANAGEMENT",
12480 #endif
12481 #ifdef SQLITE_ENABLE_MEMSYS3
12482 "ENABLE_MEMSYS3",
12483 #endif
12484 #ifdef SQLITE_ENABLE_MEMSYS5
12485 "ENABLE_MEMSYS5",
12486 #endif
12487 #ifdef SQLITE_ENABLE_OVERSIZE_CELL_CHECK
12488 "ENABLE_OVERSIZE_CELL_CHECK",
12489 #endif
12490 #ifdef SQLITE_ENABLE_RTREE
12491 "ENABLE_RTREE",
12492 #endif
12493 #ifdef SQLITE_ENABLE_STAT3
12494 "ENABLE_STAT3",
12495 #endif
12496 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
12497 "ENABLE_UNLOCK_NOTIFY",
12498 #endif
12499 #ifdef SQLITE_ENABLE_UPDATE_DELETE_LIMIT
12500 "ENABLE_UPDATE_DELETE_LIMIT",
12501 #endif
12502 #ifdef SQLITE_HAS_CODEC
12503 "HAS_CODEC",
12504 #endif
12505 #ifdef SQLITE_HAVE_ISNAN
12506 "HAVE_ISNAN",
12507 #endif
12508 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
12509 "HOMEGROWN_RECURSIVE_MUTEX",
12510 #endif
12511 #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
12512 "IGNORE_AFP_LOCK_ERRORS",
12513 #endif
12514 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
12515 "IGNORE_FLOCK_LOCK_ERRORS",
12516 #endif
12517 #ifdef SQLITE_INT64_TYPE
12518 "INT64_TYPE",
12519 #endif
12520 #ifdef SQLITE_LOCK_TRACE
12521 "LOCK_TRACE",
12522 #endif
12523 #ifdef SQLITE_MAX_SCHEMA_RETRY
12524 "MAX_SCHEMA_RETRY=" CTIMEOPT_VAL(SQLITE_MAX_SCHEMA_RETRY),
12525 #endif
12526 #ifdef SQLITE_MEMDEBUG
12527 "MEMDEBUG",
12528 #endif
12529 #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
12530 "MIXED_ENDIAN_64BIT_FLOAT",
12531 #endif
12532 #ifdef SQLITE_NO_SYNC
12533 "NO_SYNC",
12534 #endif
12535 #ifdef SQLITE_OMIT_ALTERTABLE
12536 "OMIT_ALTERTABLE",
12537 #endif
12538 #ifdef SQLITE_OMIT_ANALYZE
12539 "OMIT_ANALYZE",
12540 #endif
12541 #ifdef SQLITE_OMIT_ATTACH
12542 "OMIT_ATTACH",
12543 #endif
12544 #ifdef SQLITE_OMIT_AUTHORIZATION
12545 "OMIT_AUTHORIZATION",
12546 #endif
12547 #ifdef SQLITE_OMIT_AUTOINCREMENT
12548 "OMIT_AUTOINCREMENT",
12549 #endif
12550 #ifdef SQLITE_OMIT_AUTOINIT
12551 "OMIT_AUTOINIT",
12552 #endif
12553 #ifdef SQLITE_OMIT_AUTOMATIC_INDEX
12554 "OMIT_AUTOMATIC_INDEX",
12555 #endif
12556 #ifdef SQLITE_OMIT_AUTORESET
12557 "OMIT_AUTORESET",
12558 #endif
12559 #ifdef SQLITE_OMIT_AUTOVACUUM
12560 "OMIT_AUTOVACUUM",
12561 #endif
12562 #ifdef SQLITE_OMIT_BETWEEN_OPTIMIZATION
12563 "OMIT_BETWEEN_OPTIMIZATION",
12564 #endif
12565 #ifdef SQLITE_OMIT_BLOB_LITERAL
12566 "OMIT_BLOB_LITERAL",
12567 #endif
12568 #ifdef SQLITE_OMIT_BTREECOUNT
12569 "OMIT_BTREECOUNT",
12570 #endif
12571 #ifdef SQLITE_OMIT_BUILTIN_TEST
12572 "OMIT_BUILTIN_TEST",
12573 #endif
12574 #ifdef SQLITE_OMIT_CAST
12575 "OMIT_CAST",
12576 #endif
12577 #ifdef SQLITE_OMIT_CHECK
12578 "OMIT_CHECK",
12579 #endif
12580 /* // redundant
12581 ** #ifdef SQLITE_OMIT_COMPILEOPTION_DIAGS
12582 ** "OMIT_COMPILEOPTION_DIAGS",
12583 ** #endif
12585 #ifdef SQLITE_OMIT_COMPLETE
12586 "OMIT_COMPLETE",
12587 #endif
12588 #ifdef SQLITE_OMIT_COMPOUND_SELECT
12589 "OMIT_COMPOUND_SELECT",
12590 #endif
12591 #ifdef SQLITE_OMIT_DATETIME_FUNCS
12592 "OMIT_DATETIME_FUNCS",
12593 #endif
12594 #ifdef SQLITE_OMIT_DECLTYPE
12595 "OMIT_DECLTYPE",
12596 #endif
12597 #ifdef SQLITE_OMIT_DEPRECATED
12598 "OMIT_DEPRECATED",
12599 #endif
12600 #ifdef SQLITE_OMIT_DISKIO
12601 "OMIT_DISKIO",
12602 #endif
12603 #ifdef SQLITE_OMIT_EXPLAIN
12604 "OMIT_EXPLAIN",
12605 #endif
12606 #ifdef SQLITE_OMIT_FLAG_PRAGMAS
12607 "OMIT_FLAG_PRAGMAS",
12608 #endif
12609 #ifdef SQLITE_OMIT_FLOATING_POINT
12610 "OMIT_FLOATING_POINT",
12611 #endif
12612 #ifdef SQLITE_OMIT_FOREIGN_KEY
12613 "OMIT_FOREIGN_KEY",
12614 #endif
12615 #ifdef SQLITE_OMIT_GET_TABLE
12616 "OMIT_GET_TABLE",
12617 #endif
12618 #ifdef SQLITE_OMIT_INCRBLOB
12619 "OMIT_INCRBLOB",
12620 #endif
12621 #ifdef SQLITE_OMIT_INTEGRITY_CHECK
12622 "OMIT_INTEGRITY_CHECK",
12623 #endif
12624 #ifdef SQLITE_OMIT_LIKE_OPTIMIZATION
12625 "OMIT_LIKE_OPTIMIZATION",
12626 #endif
12627 #ifdef SQLITE_OMIT_LOAD_EXTENSION
12628 "OMIT_LOAD_EXTENSION",
12629 #endif
12630 #ifdef SQLITE_OMIT_LOCALTIME
12631 "OMIT_LOCALTIME",
12632 #endif
12633 #ifdef SQLITE_OMIT_LOOKASIDE
12634 "OMIT_LOOKASIDE",
12635 #endif
12636 #ifdef SQLITE_OMIT_MEMORYDB
12637 "OMIT_MEMORYDB",
12638 #endif
12639 #ifdef SQLITE_OMIT_MERGE_SORT
12640 "OMIT_MERGE_SORT",
12641 #endif
12642 #ifdef SQLITE_OMIT_OR_OPTIMIZATION
12643 "OMIT_OR_OPTIMIZATION",
12644 #endif
12645 #ifdef SQLITE_OMIT_PAGER_PRAGMAS
12646 "OMIT_PAGER_PRAGMAS",
12647 #endif
12648 #ifdef SQLITE_OMIT_PRAGMA
12649 "OMIT_PRAGMA",
12650 #endif
12651 #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
12652 "OMIT_PROGRESS_CALLBACK",
12653 #endif
12654 #ifdef SQLITE_OMIT_QUICKBALANCE
12655 "OMIT_QUICKBALANCE",
12656 #endif
12657 #ifdef SQLITE_OMIT_REINDEX
12658 "OMIT_REINDEX",
12659 #endif
12660 #ifdef SQLITE_OMIT_SCHEMA_PRAGMAS
12661 "OMIT_SCHEMA_PRAGMAS",
12662 #endif
12663 #ifdef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
12664 "OMIT_SCHEMA_VERSION_PRAGMAS",
12665 #endif
12666 #ifdef SQLITE_OMIT_SHARED_CACHE
12667 "OMIT_SHARED_CACHE",
12668 #endif
12669 #ifdef SQLITE_OMIT_SUBQUERY
12670 "OMIT_SUBQUERY",
12671 #endif
12672 #ifdef SQLITE_OMIT_TCL_VARIABLE
12673 "OMIT_TCL_VARIABLE",
12674 #endif
12675 #ifdef SQLITE_OMIT_TEMPDB
12676 "OMIT_TEMPDB",
12677 #endif
12678 #ifdef SQLITE_OMIT_TRACE
12679 "OMIT_TRACE",
12680 #endif
12681 #ifdef SQLITE_OMIT_TRIGGER
12682 "OMIT_TRIGGER",
12683 #endif
12684 #ifdef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
12685 "OMIT_TRUNCATE_OPTIMIZATION",
12686 #endif
12687 #ifdef SQLITE_OMIT_UTF16
12688 "OMIT_UTF16",
12689 #endif
12690 #ifdef SQLITE_OMIT_VACUUM
12691 "OMIT_VACUUM",
12692 #endif
12693 #ifdef SQLITE_OMIT_VIEW
12694 "OMIT_VIEW",
12695 #endif
12696 #ifdef SQLITE_OMIT_VIRTUALTABLE
12697 "OMIT_VIRTUALTABLE",
12698 #endif
12699 #ifdef SQLITE_OMIT_WAL
12700 "OMIT_WAL",
12701 #endif
12702 #ifdef SQLITE_OMIT_WSD
12703 "OMIT_WSD",
12704 #endif
12705 #ifdef SQLITE_OMIT_XFER_OPT
12706 "OMIT_XFER_OPT",
12707 #endif
12708 #ifdef SQLITE_PERFORMANCE_TRACE
12709 "PERFORMANCE_TRACE",
12710 #endif
12711 #ifdef SQLITE_PROXY_DEBUG
12712 "PROXY_DEBUG",
12713 #endif
12714 #ifdef SQLITE_SECURE_DELETE
12715 "SECURE_DELETE",
12716 #endif
12717 #ifdef SQLITE_SMALL_STACK
12718 "SMALL_STACK",
12719 #endif
12720 #ifdef SQLITE_SOUNDEX
12721 "SOUNDEX",
12722 #endif
12723 #ifdef SQLITE_TCL
12724 "TCL",
12725 #endif
12726 #ifdef SQLITE_TEMP_STORE
12727 "TEMP_STORE=" CTIMEOPT_VAL(SQLITE_TEMP_STORE),
12728 #endif
12729 #ifdef SQLITE_TEST
12730 "TEST",
12731 #endif
12732 #ifdef SQLITE_THREADSAFE
12733 "THREADSAFE=" CTIMEOPT_VAL(SQLITE_THREADSAFE),
12734 #endif
12735 #ifdef SQLITE_USE_ALLOCA
12736 "USE_ALLOCA",
12737 #endif
12738 #ifdef SQLITE_ZERO_MALLOC
12739 "ZERO_MALLOC"
12740 #endif
12744 ** Given the name of a compile-time option, return true if that option
12745 ** was used and false if not.
12747 ** The name can optionally begin with "SQLITE_" but the "SQLITE_" prefix
12748 ** is not required for a match.
12750 SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
12751 int i, n;
12752 if( sqlite3StrNICmp(zOptName, "SQLITE_", 7)==0 ) zOptName += 7;
12753 n = sqlite3Strlen30(zOptName);
12755 /* Since ArraySize(azCompileOpt) is normally in single digits, a
12756 ** linear search is adequate. No need for a binary search. */
12757 for(i=0; i<ArraySize(azCompileOpt); i++){
12758 if( (sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0)
12759 && ( (azCompileOpt[i][n]==0) || (azCompileOpt[i][n]=='=') ) ) return 1;
12761 return 0;
12765 ** Return the N-th compile-time option string. If N is out of range,
12766 ** return a NULL pointer.
12768 SQLITE_API const char *sqlite3_compileoption_get(int N){
12769 if( N>=0 && N<ArraySize(azCompileOpt) ){
12770 return azCompileOpt[N];
12772 return 0;
12775 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
12777 /************** End of ctime.c ***********************************************/
12778 /************** Begin file status.c ******************************************/
12780 ** 2008 June 18
12782 ** The author disclaims copyright to this source code. In place of
12783 ** a legal notice, here is a blessing:
12785 ** May you do good and not evil.
12786 ** May you find forgiveness for yourself and forgive others.
12787 ** May you share freely, never taking more than you give.
12789 *************************************************************************
12791 ** This module implements the sqlite3_status() interface and related
12792 ** functionality.
12794 /************** Include vdbeInt.h in the middle of status.c ******************/
12795 /************** Begin file vdbeInt.h *****************************************/
12797 ** 2003 September 6
12799 ** The author disclaims copyright to this source code. In place of
12800 ** a legal notice, here is a blessing:
12802 ** May you do good and not evil.
12803 ** May you find forgiveness for yourself and forgive others.
12804 ** May you share freely, never taking more than you give.
12806 *************************************************************************
12807 ** This is the header file for information that is private to the
12808 ** VDBE. This information used to all be at the top of the single
12809 ** source code file "vdbe.c". When that file became too big (over
12810 ** 6000 lines long) it was split up into several smaller files and
12811 ** this header information was factored out.
12813 #ifndef _VDBEINT_H_
12814 #define _VDBEINT_H_
12817 ** SQL is translated into a sequence of instructions to be
12818 ** executed by a virtual machine. Each instruction is an instance
12819 ** of the following structure.
12821 typedef struct VdbeOp Op;
12824 ** Boolean values
12826 typedef unsigned char Bool;
12828 /* Opaque type used by code in vdbesort.c */
12829 typedef struct VdbeSorter VdbeSorter;
12831 /* Opaque type used by the explainer */
12832 typedef struct Explain Explain;
12835 ** A cursor is a pointer into a single BTree within a database file.
12836 ** The cursor can seek to a BTree entry with a particular key, or
12837 ** loop over all entries of the Btree. You can also insert new BTree
12838 ** entries or retrieve the key or data from the entry that the cursor
12839 ** is currently pointing to.
12841 ** Every cursor that the virtual machine has open is represented by an
12842 ** instance of the following structure.
12844 struct VdbeCursor {
12845 BtCursor *pCursor; /* The cursor structure of the backend */
12846 Btree *pBt; /* Separate file holding temporary table */
12847 KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */
12848 int iDb; /* Index of cursor database in db->aDb[] (or -1) */
12849 int pseudoTableReg; /* Register holding pseudotable content. */
12850 int nField; /* Number of fields in the header */
12851 Bool zeroed; /* True if zeroed out and ready for reuse */
12852 Bool rowidIsValid; /* True if lastRowid is valid */
12853 Bool atFirst; /* True if pointing to first entry */
12854 Bool useRandomRowid; /* Generate new record numbers semi-randomly */
12855 Bool nullRow; /* True if pointing to a row with no data */
12856 Bool deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */
12857 Bool isTable; /* True if a table requiring integer keys */
12858 Bool isIndex; /* True if an index containing keys only - no data */
12859 Bool isOrdered; /* True if the underlying table is BTREE_UNORDERED */
12860 Bool isSorter; /* True if a new-style sorter */
12861 sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */
12862 const sqlite3_module *pModule; /* Module for cursor pVtabCursor */
12863 i64 seqCount; /* Sequence counter */
12864 i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */
12865 i64 lastRowid; /* Last rowid from a Next or NextIdx operation */
12866 VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */
12868 /* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or
12869 ** OP_IsUnique opcode on this cursor. */
12870 int seekResult;
12872 /* Cached information about the header for the data record that the
12873 ** cursor is currently pointing to. Only valid if cacheStatus matches
12874 ** Vdbe.cacheCtr. Vdbe.cacheCtr will never take on the value of
12875 ** CACHE_STALE and so setting cacheStatus=CACHE_STALE guarantees that
12876 ** the cache is out of date.
12878 ** aRow might point to (ephemeral) data for the current row, or it might
12879 ** be NULL.
12881 u32 cacheStatus; /* Cache is valid if this matches Vdbe.cacheCtr */
12882 int payloadSize; /* Total number of bytes in the record */
12883 u32 *aType; /* Type values for all entries in the record */
12884 u32 *aOffset; /* Cached offsets to the start of each columns data */
12885 u8 *aRow; /* Data for the current row, if all on one page */
12887 typedef struct VdbeCursor VdbeCursor;
12890 ** When a sub-program is executed (OP_Program), a structure of this type
12891 ** is allocated to store the current value of the program counter, as
12892 ** well as the current memory cell array and various other frame specific
12893 ** values stored in the Vdbe struct. When the sub-program is finished,
12894 ** these values are copied back to the Vdbe from the VdbeFrame structure,
12895 ** restoring the state of the VM to as it was before the sub-program
12896 ** began executing.
12898 ** The memory for a VdbeFrame object is allocated and managed by a memory
12899 ** cell in the parent (calling) frame. When the memory cell is deleted or
12900 ** overwritten, the VdbeFrame object is not freed immediately. Instead, it
12901 ** is linked into the Vdbe.pDelFrame list. The contents of the Vdbe.pDelFrame
12902 ** list is deleted when the VM is reset in VdbeHalt(). The reason for doing
12903 ** this instead of deleting the VdbeFrame immediately is to avoid recursive
12904 ** calls to sqlite3VdbeMemRelease() when the memory cells belonging to the
12905 ** child frame are released.
12907 ** The currently executing frame is stored in Vdbe.pFrame. Vdbe.pFrame is
12908 ** set to NULL if the currently executing frame is the main program.
12910 typedef struct VdbeFrame VdbeFrame;
12911 struct VdbeFrame {
12912 Vdbe *v; /* VM this frame belongs to */
12913 int pc; /* Program Counter in parent (calling) frame */
12914 Op *aOp; /* Program instructions for parent frame */
12915 int nOp; /* Size of aOp array */
12916 Mem *aMem; /* Array of memory cells for parent frame */
12917 int nMem; /* Number of entries in aMem */
12918 u8 *aOnceFlag; /* Array of OP_Once flags for parent frame */
12919 int nOnceFlag; /* Number of entries in aOnceFlag */
12920 VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
12921 u16 nCursor; /* Number of entries in apCsr */
12922 void *token; /* Copy of SubProgram.token */
12923 int nChildMem; /* Number of memory cells for child frame */
12924 int nChildCsr; /* Number of cursors for child frame */
12925 i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */
12926 int nChange; /* Statement changes (Vdbe.nChanges) */
12927 VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
12930 #define VdbeFrameMem(p) ((Mem *)&((u8 *)p)[ROUND8(sizeof(VdbeFrame))])
12933 ** A value for VdbeCursor.cacheValid that means the cache is always invalid.
12935 #define CACHE_STALE 0
12938 ** Internally, the vdbe manipulates nearly all SQL values as Mem
12939 ** structures. Each Mem struct may cache multiple representations (string,
12940 ** integer etc.) of the same value.
12942 struct Mem {
12943 sqlite3 *db; /* The associated database connection */
12944 char *z; /* String or BLOB value */
12945 double r; /* Real value */
12946 union {
12947 i64 i; /* Integer value used when MEM_Int is set in flags */
12948 int nZero; /* Used when bit MEM_Zero is set in flags */
12949 FuncDef *pDef; /* Used only when flags==MEM_Agg */
12950 RowSet *pRowSet; /* Used only when flags==MEM_RowSet */
12951 VdbeFrame *pFrame; /* Used when flags==MEM_Frame */
12952 } u;
12953 int n; /* Number of characters in string value, excluding '\0' */
12954 u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
12955 u8 type; /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */
12956 u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
12957 #ifdef SQLITE_DEBUG
12958 Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */
12959 void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */
12960 #endif
12961 void (*xDel)(void *); /* If not null, call this function to delete Mem.z */
12962 char *zMalloc; /* Dynamic buffer allocated by sqlite3_malloc() */
12965 /* One or more of the following flags are set to indicate the validOK
12966 ** representations of the value stored in the Mem struct.
12968 ** If the MEM_Null flag is set, then the value is an SQL NULL value.
12969 ** No other flags may be set in this case.
12971 ** If the MEM_Str flag is set then Mem.z points at a string representation.
12972 ** Usually this is encoded in the same unicode encoding as the main
12973 ** database (see below for exceptions). If the MEM_Term flag is also
12974 ** set, then the string is nul terminated. The MEM_Int and MEM_Real
12975 ** flags may coexist with the MEM_Str flag.
12977 #define MEM_Null 0x0001 /* Value is NULL */
12978 #define MEM_Str 0x0002 /* Value is a string */
12979 #define MEM_Int 0x0004 /* Value is an integer */
12980 #define MEM_Real 0x0008 /* Value is a real number */
12981 #define MEM_Blob 0x0010 /* Value is a BLOB */
12982 #define MEM_RowSet 0x0020 /* Value is a RowSet object */
12983 #define MEM_Frame 0x0040 /* Value is a VdbeFrame object */
12984 #define MEM_Invalid 0x0080 /* Value is undefined */
12985 #define MEM_TypeMask 0x00ff /* Mask of type bits */
12987 /* Whenever Mem contains a valid string or blob representation, one of
12988 ** the following flags must be set to determine the memory management
12989 ** policy for Mem.z. The MEM_Term flag tells us whether or not the
12990 ** string is \000 or \u0000 terminated
12992 #define MEM_Term 0x0200 /* String rep is nul terminated */
12993 #define MEM_Dyn 0x0400 /* Need to call sqliteFree() on Mem.z */
12994 #define MEM_Static 0x0800 /* Mem.z points to a static string */
12995 #define MEM_Ephem 0x1000 /* Mem.z points to an ephemeral string */
12996 #define MEM_Agg 0x2000 /* Mem.z points to an agg function context */
12997 #define MEM_Zero 0x4000 /* Mem.i contains count of 0s appended to blob */
12998 #ifdef SQLITE_OMIT_INCRBLOB
12999 #undef MEM_Zero
13000 #define MEM_Zero 0x0000
13001 #endif
13004 ** Clear any existing type flags from a Mem and replace them with f
13006 #define MemSetTypeFlag(p, f) \
13007 ((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
13010 ** Return true if a memory cell is not marked as invalid. This macro
13011 ** is for use inside assert() statements only.
13013 #ifdef SQLITE_DEBUG
13014 #define memIsValid(M) ((M)->flags & MEM_Invalid)==0
13015 #endif
13018 /* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains
13019 ** additional information about auxiliary information bound to arguments
13020 ** of the function. This is used to implement the sqlite3_get_auxdata()
13021 ** and sqlite3_set_auxdata() APIs. The "auxdata" is some auxiliary data
13022 ** that can be associated with a constant argument to a function. This
13023 ** allows functions such as "regexp" to compile their constant regular
13024 ** expression argument once and reused the compiled code for multiple
13025 ** invocations.
13027 struct VdbeFunc {
13028 FuncDef *pFunc; /* The definition of the function */
13029 int nAux; /* Number of entries allocated for apAux[] */
13030 struct AuxData {
13031 void *pAux; /* Aux data for the i-th argument */
13032 void (*xDelete)(void *); /* Destructor for the aux data */
13033 } apAux[1]; /* One slot for each function argument */
13037 ** The "context" argument for a installable function. A pointer to an
13038 ** instance of this structure is the first argument to the routines used
13039 ** implement the SQL functions.
13041 ** There is a typedef for this structure in sqlite.h. So all routines,
13042 ** even the public interface to SQLite, can use a pointer to this structure.
13043 ** But this file is the only place where the internal details of this
13044 ** structure are known.
13046 ** This structure is defined inside of vdbeInt.h because it uses substructures
13047 ** (Mem) which are only defined there.
13049 struct sqlite3_context {
13050 FuncDef *pFunc; /* Pointer to function information. MUST BE FIRST */
13051 VdbeFunc *pVdbeFunc; /* Auxilary data, if created. */
13052 Mem s; /* The return value is stored here */
13053 Mem *pMem; /* Memory cell used to store aggregate context */
13054 int isError; /* Error code returned by the function. */
13055 CollSeq *pColl; /* Collating sequence */
13059 ** An Explain object accumulates indented output which is helpful
13060 ** in describing recursive data structures.
13062 struct Explain {
13063 Vdbe *pVdbe; /* Attach the explanation to this Vdbe */
13064 StrAccum str; /* The string being accumulated */
13065 int nIndent; /* Number of elements in aIndent */
13066 u16 aIndent[100]; /* Levels of indentation */
13067 char zBase[100]; /* Initial space */
13071 ** An instance of the virtual machine. This structure contains the complete
13072 ** state of the virtual machine.
13074 ** The "sqlite3_stmt" structure pointer that is returned by sqlite3_prepare()
13075 ** is really a pointer to an instance of this structure.
13077 ** The Vdbe.inVtabMethod variable is set to non-zero for the duration of
13078 ** any virtual table method invocations made by the vdbe program. It is
13079 ** set to 2 for xDestroy method calls and 1 for all other methods. This
13080 ** variable is used for two purposes: to allow xDestroy methods to execute
13081 ** "DROP TABLE" statements and to prevent some nasty side effects of
13082 ** malloc failure when SQLite is invoked recursively by a virtual table
13083 ** method function.
13085 struct Vdbe {
13086 sqlite3 *db; /* The database connection that owns this statement */
13087 Op *aOp; /* Space to hold the virtual machine's program */
13088 Mem *aMem; /* The memory locations */
13089 Mem **apArg; /* Arguments to currently executing user function */
13090 Mem *aColName; /* Column names to return */
13091 Mem *pResultSet; /* Pointer to an array of results */
13092 int nMem; /* Number of memory locations currently allocated */
13093 int nOp; /* Number of instructions in the program */
13094 int nOpAlloc; /* Number of slots allocated for aOp[] */
13095 int nLabel; /* Number of labels used */
13096 int nLabelAlloc; /* Number of slots allocated in aLabel[] */
13097 int *aLabel; /* Space to hold the labels */
13098 u16 nResColumn; /* Number of columns in one row of the result set */
13099 u16 nCursor; /* Number of slots in apCsr[] */
13100 u32 magic; /* Magic number for sanity checking */
13101 char *zErrMsg; /* Error message written here */
13102 Vdbe *pPrev,*pNext; /* Linked list of VDBEs with the same Vdbe.db */
13103 VdbeCursor **apCsr; /* One element of this array for each open cursor */
13104 Mem *aVar; /* Values for the OP_Variable opcode. */
13105 char **azVar; /* Name of variables */
13106 ynVar nVar; /* Number of entries in aVar[] */
13107 ynVar nzVar; /* Number of entries in azVar[] */
13108 u32 cacheCtr; /* VdbeCursor row cache generation counter */
13109 int pc; /* The program counter */
13110 int rc; /* Value to return */
13111 u8 errorAction; /* Recovery action to do in case of an error */
13112 u8 explain; /* True if EXPLAIN present on SQL command */
13113 u8 changeCntOn; /* True to update the change-counter */
13114 u8 expired; /* True if the VM needs to be recompiled */
13115 u8 runOnlyOnce; /* Automatically expire on reset */
13116 u8 minWriteFileFormat; /* Minimum file format for writable database files */
13117 u8 inVtabMethod; /* See comments above */
13118 u8 usesStmtJournal; /* True if uses a statement journal */
13119 u8 readOnly; /* True for read-only statements */
13120 u8 isPrepareV2; /* True if prepared with prepare_v2() */
13121 int nChange; /* Number of db changes made since last reset */
13122 yDbMask btreeMask; /* Bitmask of db->aDb[] entries referenced */
13123 yDbMask lockMask; /* Subset of btreeMask that requires a lock */
13124 int iStatement; /* Statement number (or 0 if has not opened stmt) */
13125 int aCounter[3]; /* Counters used by sqlite3_stmt_status() */
13126 #ifndef SQLITE_OMIT_TRACE
13127 i64 startTime; /* Time when query started - used for profiling */
13128 #endif
13129 i64 nFkConstraint; /* Number of imm. FK constraints this VM */
13130 i64 nStmtDefCons; /* Number of def. constraints when stmt started */
13131 char *zSql; /* Text of the SQL statement that generated this */
13132 void *pFree; /* Free this when deleting the vdbe */
13133 #ifdef SQLITE_DEBUG
13134 FILE *trace; /* Write an execution trace here, if not NULL */
13135 #endif
13136 #ifdef SQLITE_ENABLE_TREE_EXPLAIN
13137 Explain *pExplain; /* The explainer */
13138 char *zExplain; /* Explanation of data structures */
13139 #endif
13140 VdbeFrame *pFrame; /* Parent frame */
13141 VdbeFrame *pDelFrame; /* List of frame objects to free on VM reset */
13142 int nFrame; /* Number of frames in pFrame list */
13143 u32 expmask; /* Binding to these vars invalidates VM */
13144 SubProgram *pProgram; /* Linked list of all sub-programs used by VM */
13145 int nOnceFlag; /* Size of array aOnceFlag[] */
13146 u8 *aOnceFlag; /* Flags for OP_Once */
13150 ** The following are allowed values for Vdbe.magic
13152 #define VDBE_MAGIC_INIT 0x26bceaa5 /* Building a VDBE program */
13153 #define VDBE_MAGIC_RUN 0xbdf20da3 /* VDBE is ready to execute */
13154 #define VDBE_MAGIC_HALT 0x519c2973 /* VDBE has completed execution */
13155 #define VDBE_MAGIC_DEAD 0xb606c3c8 /* The VDBE has been deallocated */
13158 ** Function prototypes
13160 SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*);
13161 void sqliteVdbePopStack(Vdbe*,int);
13162 SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor*);
13163 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
13164 SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*);
13165 #endif
13166 SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32);
13167 SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem*, int);
13168 SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(unsigned char*, int, Mem*, int);
13169 SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
13170 SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc*, int);
13172 int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
13173 SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*);
13174 SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *);
13175 SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*);
13176 SQLITE_PRIVATE int sqlite3VdbeExec(Vdbe*);
13177 SQLITE_PRIVATE int sqlite3VdbeList(Vdbe*);
13178 SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe*);
13179 SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *, int);
13180 SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem*);
13181 SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem*, const Mem*);
13182 SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem*, const Mem*, int);
13183 SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem*, Mem*);
13184 SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem*);
13185 SQLITE_PRIVATE int sqlite3VdbeMemSetStr(Mem*, const char*, int, u8, void(*)(void*));
13186 SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64);
13187 #ifdef SQLITE_OMIT_FLOATING_POINT
13188 # define sqlite3VdbeMemSetDouble sqlite3VdbeMemSetInt64
13189 #else
13190 SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem*, double);
13191 #endif
13192 SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*);
13193 SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int);
13194 SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*);
13195 SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*);
13196 SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, int);
13197 SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*);
13198 SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*);
13199 SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*);
13200 SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*);
13201 SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*);
13202 SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*);
13203 SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*);
13204 SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p);
13205 SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p);
13206 #define VdbeMemRelease(X) \
13207 if((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame)) \
13208 sqlite3VdbeMemReleaseExternal(X);
13209 SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
13210 SQLITE_PRIVATE const char *sqlite3OpcodeName(int);
13211 SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
13212 SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int);
13213 SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*);
13214 SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *);
13215 SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem);
13216 SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p);
13218 #ifdef SQLITE_OMIT_MERGE_SORT
13219 # define sqlite3VdbeSorterInit(Y,Z) SQLITE_OK
13220 # define sqlite3VdbeSorterWrite(X,Y,Z) SQLITE_OK
13221 # define sqlite3VdbeSorterClose(Y,Z)
13222 # define sqlite3VdbeSorterRowkey(Y,Z) SQLITE_OK
13223 # define sqlite3VdbeSorterRewind(X,Y,Z) SQLITE_OK
13224 # define sqlite3VdbeSorterNext(X,Y,Z) SQLITE_OK
13225 # define sqlite3VdbeSorterCompare(X,Y,Z) SQLITE_OK
13226 #else
13227 SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *, VdbeCursor *);
13228 SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *, VdbeCursor *);
13229 SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *, Mem *);
13230 SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, VdbeCursor *, int *);
13231 SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *, VdbeCursor *, int *);
13232 SQLITE_PRIVATE int sqlite3VdbeSorterWrite(sqlite3 *, VdbeCursor *, Mem *);
13233 SQLITE_PRIVATE int sqlite3VdbeSorterCompare(VdbeCursor *, Mem *, int *);
13234 #endif
13236 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
13237 SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe*);
13238 SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe*);
13239 #else
13240 # define sqlite3VdbeEnter(X)
13241 # define sqlite3VdbeLeave(X)
13242 #endif
13244 #ifdef SQLITE_DEBUG
13245 SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe*,Mem*);
13246 #endif
13248 #ifndef SQLITE_OMIT_FOREIGN_KEY
13249 SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int);
13250 #else
13251 # define sqlite3VdbeCheckFk(p,i) 0
13252 #endif
13254 SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem*, u8);
13255 #ifdef SQLITE_DEBUG
13256 SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe*);
13257 SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf);
13258 #endif
13259 SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem);
13261 #ifndef SQLITE_OMIT_INCRBLOB
13262 SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *);
13263 #define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
13264 #else
13265 #define sqlite3VdbeMemExpandBlob(x) SQLITE_OK
13266 #define ExpandBlob(P) SQLITE_OK
13267 #endif
13269 #endif /* !defined(_VDBEINT_H_) */
13271 /************** End of vdbeInt.h *********************************************/
13272 /************** Continuing where we left off in status.c *********************/
13275 ** Variables in which to record status information.
13277 typedef struct sqlite3StatType sqlite3StatType;
13278 static SQLITE_WSD struct sqlite3StatType {
13279 int nowValue[10]; /* Current value */
13280 int mxValue[10]; /* Maximum value */
13281 } sqlite3Stat = { {0,}, {0,} };
13284 /* The "wsdStat" macro will resolve to the status information
13285 ** state vector. If writable static data is unsupported on the target,
13286 ** we have to locate the state vector at run-time. In the more common
13287 ** case where writable static data is supported, wsdStat can refer directly
13288 ** to the "sqlite3Stat" state vector declared above.
13290 #ifdef SQLITE_OMIT_WSD
13291 # define wsdStatInit sqlite3StatType *x = &GLOBAL(sqlite3StatType,sqlite3Stat)
13292 # define wsdStat x[0]
13293 #else
13294 # define wsdStatInit
13295 # define wsdStat sqlite3Stat
13296 #endif
13299 ** Return the current value of a status parameter.
13301 SQLITE_PRIVATE int sqlite3StatusValue(int op){
13302 wsdStatInit;
13303 assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
13304 return wsdStat.nowValue[op];
13308 ** Add N to the value of a status record. It is assumed that the
13309 ** caller holds appropriate locks.
13311 SQLITE_PRIVATE void sqlite3StatusAdd(int op, int N){
13312 wsdStatInit;
13313 assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
13314 wsdStat.nowValue[op] += N;
13315 if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
13316 wsdStat.mxValue[op] = wsdStat.nowValue[op];
13321 ** Set the value of a status to X.
13323 SQLITE_PRIVATE void sqlite3StatusSet(int op, int X){
13324 wsdStatInit;
13325 assert( op>=0 && op<ArraySize(wsdStat.nowValue) );
13326 wsdStat.nowValue[op] = X;
13327 if( wsdStat.nowValue[op]>wsdStat.mxValue[op] ){
13328 wsdStat.mxValue[op] = wsdStat.nowValue[op];
13333 ** Query status information.
13335 ** This implementation assumes that reading or writing an aligned
13336 ** 32-bit integer is an atomic operation. If that assumption is not true,
13337 ** then this routine is not threadsafe.
13339 SQLITE_API int sqlite3_status(int op, int *pCurrent, int *pHighwater, int resetFlag){
13340 wsdStatInit;
13341 if( op<0 || op>=ArraySize(wsdStat.nowValue) ){
13342 return SQLITE_MISUSE_BKPT;
13344 *pCurrent = wsdStat.nowValue[op];
13345 *pHighwater = wsdStat.mxValue[op];
13346 if( resetFlag ){
13347 wsdStat.mxValue[op] = wsdStat.nowValue[op];
13349 return SQLITE_OK;
13353 ** Query status information for a single database connection
13355 SQLITE_API int sqlite3_db_status(
13356 sqlite3 *db, /* The database connection whose status is desired */
13357 int op, /* Status verb */
13358 int *pCurrent, /* Write current value here */
13359 int *pHighwater, /* Write high-water mark here */
13360 int resetFlag /* Reset high-water mark if true */
13362 int rc = SQLITE_OK; /* Return code */
13363 sqlite3_mutex_enter(db->mutex);
13364 switch( op ){
13365 case SQLITE_DBSTATUS_LOOKASIDE_USED: {
13366 *pCurrent = db->lookaside.nOut;
13367 *pHighwater = db->lookaside.mxOut;
13368 if( resetFlag ){
13369 db->lookaside.mxOut = db->lookaside.nOut;
13371 break;
13374 case SQLITE_DBSTATUS_LOOKASIDE_HIT:
13375 case SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE:
13376 case SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL: {
13377 testcase( op==SQLITE_DBSTATUS_LOOKASIDE_HIT );
13378 testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE );
13379 testcase( op==SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL );
13380 assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)>=0 );
13381 assert( (op-SQLITE_DBSTATUS_LOOKASIDE_HIT)<3 );
13382 *pCurrent = 0;
13383 *pHighwater = db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT];
13384 if( resetFlag ){
13385 db->lookaside.anStat[op - SQLITE_DBSTATUS_LOOKASIDE_HIT] = 0;
13387 break;
13391 ** Return an approximation for the amount of memory currently used
13392 ** by all pagers associated with the given database connection. The
13393 ** highwater mark is meaningless and is returned as zero.
13395 case SQLITE_DBSTATUS_CACHE_USED: {
13396 int totalUsed = 0;
13397 int i;
13398 sqlite3BtreeEnterAll(db);
13399 for(i=0; i<db->nDb; i++){
13400 Btree *pBt = db->aDb[i].pBt;
13401 if( pBt ){
13402 Pager *pPager = sqlite3BtreePager(pBt);
13403 totalUsed += sqlite3PagerMemUsed(pPager);
13406 sqlite3BtreeLeaveAll(db);
13407 *pCurrent = totalUsed;
13408 *pHighwater = 0;
13409 break;
13413 ** *pCurrent gets an accurate estimate of the amount of memory used
13414 ** to store the schema for all databases (main, temp, and any ATTACHed
13415 ** databases. *pHighwater is set to zero.
13417 case SQLITE_DBSTATUS_SCHEMA_USED: {
13418 int i; /* Used to iterate through schemas */
13419 int nByte = 0; /* Used to accumulate return value */
13421 sqlite3BtreeEnterAll(db);
13422 db->pnBytesFreed = &nByte;
13423 for(i=0; i<db->nDb; i++){
13424 Schema *pSchema = db->aDb[i].pSchema;
13425 if( ALWAYS(pSchema!=0) ){
13426 HashElem *p;
13428 nByte += sqlite3GlobalConfig.m.xRoundup(sizeof(HashElem)) * (
13429 pSchema->tblHash.count
13430 + pSchema->trigHash.count
13431 + pSchema->idxHash.count
13432 + pSchema->fkeyHash.count
13434 nByte += sqlite3MallocSize(pSchema->tblHash.ht);
13435 nByte += sqlite3MallocSize(pSchema->trigHash.ht);
13436 nByte += sqlite3MallocSize(pSchema->idxHash.ht);
13437 nByte += sqlite3MallocSize(pSchema->fkeyHash.ht);
13439 for(p=sqliteHashFirst(&pSchema->trigHash); p; p=sqliteHashNext(p)){
13440 sqlite3DeleteTrigger(db, (Trigger*)sqliteHashData(p));
13442 for(p=sqliteHashFirst(&pSchema->tblHash); p; p=sqliteHashNext(p)){
13443 sqlite3DeleteTable(db, (Table *)sqliteHashData(p));
13447 db->pnBytesFreed = 0;
13448 sqlite3BtreeLeaveAll(db);
13450 *pHighwater = 0;
13451 *pCurrent = nByte;
13452 break;
13456 ** *pCurrent gets an accurate estimate of the amount of memory used
13457 ** to store all prepared statements.
13458 ** *pHighwater is set to zero.
13460 case SQLITE_DBSTATUS_STMT_USED: {
13461 struct Vdbe *pVdbe; /* Used to iterate through VMs */
13462 int nByte = 0; /* Used to accumulate return value */
13464 db->pnBytesFreed = &nByte;
13465 for(pVdbe=db->pVdbe; pVdbe; pVdbe=pVdbe->pNext){
13466 sqlite3VdbeDeleteObject(db, pVdbe);
13468 db->pnBytesFreed = 0;
13470 *pHighwater = 0;
13471 *pCurrent = nByte;
13473 break;
13477 ** Set *pCurrent to the total cache hits or misses encountered by all
13478 ** pagers the database handle is connected to. *pHighwater is always set
13479 ** to zero.
13481 case SQLITE_DBSTATUS_CACHE_HIT:
13482 case SQLITE_DBSTATUS_CACHE_MISS: {
13483 int i;
13484 int nRet = 0;
13485 assert( SQLITE_DBSTATUS_CACHE_MISS==SQLITE_DBSTATUS_CACHE_HIT+1 );
13487 for(i=0; i<db->nDb; i++){
13488 if( db->aDb[i].pBt ){
13489 Pager *pPager = sqlite3BtreePager(db->aDb[i].pBt);
13490 sqlite3PagerCacheStat(pPager, op, resetFlag, &nRet);
13493 *pHighwater = 0;
13494 *pCurrent = nRet;
13495 break;
13498 default: {
13499 rc = SQLITE_ERROR;
13502 sqlite3_mutex_leave(db->mutex);
13503 return rc;
13506 /************** End of status.c **********************************************/
13507 /************** Begin file date.c ********************************************/
13509 ** 2003 October 31
13511 ** The author disclaims copyright to this source code. In place of
13512 ** a legal notice, here is a blessing:
13514 ** May you do good and not evil.
13515 ** May you find forgiveness for yourself and forgive others.
13516 ** May you share freely, never taking more than you give.
13518 *************************************************************************
13519 ** This file contains the C functions that implement date and time
13520 ** functions for SQLite.
13522 ** There is only one exported symbol in this file - the function
13523 ** sqlite3RegisterDateTimeFunctions() found at the bottom of the file.
13524 ** All other code has file scope.
13526 ** SQLite processes all times and dates as Julian Day numbers. The
13527 ** dates and times are stored as the number of days since noon
13528 ** in Greenwich on November 24, 4714 B.C. according to the Gregorian
13529 ** calendar system.
13531 ** 1970-01-01 00:00:00 is JD 2440587.5
13532 ** 2000-01-01 00:00:00 is JD 2451544.5
13534 ** This implemention requires years to be expressed as a 4-digit number
13535 ** which means that only dates between 0000-01-01 and 9999-12-31 can
13536 ** be represented, even though julian day numbers allow a much wider
13537 ** range of dates.
13539 ** The Gregorian calendar system is used for all dates and times,
13540 ** even those that predate the Gregorian calendar. Historians usually
13541 ** use the Julian calendar for dates prior to 1582-10-15 and for some
13542 ** dates afterwards, depending on locale. Beware of this difference.
13544 ** The conversion algorithms are implemented based on descriptions
13545 ** in the following text:
13547 ** Jean Meeus
13548 ** Astronomical Algorithms, 2nd Edition, 1998
13549 ** ISBM 0-943396-61-1
13550 ** Willmann-Bell, Inc
13551 ** Richmond, Virginia (USA)
13553 /* #include <stdlib.h> */
13554 /* #include <assert.h> */
13555 #include <time.h>
13557 #ifndef SQLITE_OMIT_DATETIME_FUNCS
13561 ** A structure for holding a single date and time.
13563 typedef struct DateTime DateTime;
13564 struct DateTime {
13565 sqlite3_int64 iJD; /* The julian day number times 86400000 */
13566 int Y, M, D; /* Year, month, and day */
13567 int h, m; /* Hour and minutes */
13568 int tz; /* Timezone offset in minutes */
13569 double s; /* Seconds */
13570 char validYMD; /* True (1) if Y,M,D are valid */
13571 char validHMS; /* True (1) if h,m,s are valid */
13572 char validJD; /* True (1) if iJD is valid */
13573 char validTZ; /* True (1) if tz is valid */
13578 ** Convert zDate into one or more integers. Additional arguments
13579 ** come in groups of 5 as follows:
13581 ** N number of digits in the integer
13582 ** min minimum allowed value of the integer
13583 ** max maximum allowed value of the integer
13584 ** nextC first character after the integer
13585 ** pVal where to write the integers value.
13587 ** Conversions continue until one with nextC==0 is encountered.
13588 ** The function returns the number of successful conversions.
13590 static int getDigits(const char *zDate, ...){
13591 va_list ap;
13592 int val;
13593 int N;
13594 int min;
13595 int max;
13596 int nextC;
13597 int *pVal;
13598 int cnt = 0;
13599 va_start(ap, zDate);
13601 N = va_arg(ap, int);
13602 min = va_arg(ap, int);
13603 max = va_arg(ap, int);
13604 nextC = va_arg(ap, int);
13605 pVal = va_arg(ap, int*);
13606 val = 0;
13607 while( N-- ){
13608 if( !sqlite3Isdigit(*zDate) ){
13609 goto end_getDigits;
13611 val = val*10 + *zDate - '0';
13612 zDate++;
13614 if( val<min || val>max || (nextC!=0 && nextC!=*zDate) ){
13615 goto end_getDigits;
13617 *pVal = val;
13618 zDate++;
13619 cnt++;
13620 }while( nextC );
13621 end_getDigits:
13622 va_end(ap);
13623 return cnt;
13627 ** Parse a timezone extension on the end of a date-time.
13628 ** The extension is of the form:
13630 ** (+/-)HH:MM
13632 ** Or the "zulu" notation:
13634 ** Z
13636 ** If the parse is successful, write the number of minutes
13637 ** of change in p->tz and return 0. If a parser error occurs,
13638 ** return non-zero.
13640 ** A missing specifier is not considered an error.
13642 static int parseTimezone(const char *zDate, DateTime *p){
13643 int sgn = 0;
13644 int nHr, nMn;
13645 int c;
13646 while( sqlite3Isspace(*zDate) ){ zDate++; }
13647 p->tz = 0;
13648 c = *zDate;
13649 if( c=='-' ){
13650 sgn = -1;
13651 }else if( c=='+' ){
13652 sgn = +1;
13653 }else if( c=='Z' || c=='z' ){
13654 zDate++;
13655 goto zulu_time;
13656 }else{
13657 return c!=0;
13659 zDate++;
13660 if( getDigits(zDate, 2, 0, 14, ':', &nHr, 2, 0, 59, 0, &nMn)!=2 ){
13661 return 1;
13663 zDate += 5;
13664 p->tz = sgn*(nMn + nHr*60);
13665 zulu_time:
13666 while( sqlite3Isspace(*zDate) ){ zDate++; }
13667 return *zDate!=0;
13671 ** Parse times of the form HH:MM or HH:MM:SS or HH:MM:SS.FFFF.
13672 ** The HH, MM, and SS must each be exactly 2 digits. The
13673 ** fractional seconds FFFF can be one or more digits.
13675 ** Return 1 if there is a parsing error and 0 on success.
13677 static int parseHhMmSs(const char *zDate, DateTime *p){
13678 int h, m, s;
13679 double ms = 0.0;
13680 if( getDigits(zDate, 2, 0, 24, ':', &h, 2, 0, 59, 0, &m)!=2 ){
13681 return 1;
13683 zDate += 5;
13684 if( *zDate==':' ){
13685 zDate++;
13686 if( getDigits(zDate, 2, 0, 59, 0, &s)!=1 ){
13687 return 1;
13689 zDate += 2;
13690 if( *zDate=='.' && sqlite3Isdigit(zDate[1]) ){
13691 double rScale = 1.0;
13692 zDate++;
13693 while( sqlite3Isdigit(*zDate) ){
13694 ms = ms*10.0 + *zDate - '0';
13695 rScale *= 10.0;
13696 zDate++;
13698 ms /= rScale;
13700 }else{
13701 s = 0;
13703 p->validJD = 0;
13704 p->validHMS = 1;
13705 p->h = h;
13706 p->m = m;
13707 p->s = s + ms;
13708 if( parseTimezone(zDate, p) ) return 1;
13709 p->validTZ = (p->tz!=0)?1:0;
13710 return 0;
13714 ** Convert from YYYY-MM-DD HH:MM:SS to julian day. We always assume
13715 ** that the YYYY-MM-DD is according to the Gregorian calendar.
13717 ** Reference: Meeus page 61
13719 static void computeJD(DateTime *p){
13720 int Y, M, D, A, B, X1, X2;
13722 if( p->validJD ) return;
13723 if( p->validYMD ){
13724 Y = p->Y;
13725 M = p->M;
13726 D = p->D;
13727 }else{
13728 Y = 2000; /* If no YMD specified, assume 2000-Jan-01 */
13729 M = 1;
13730 D = 1;
13732 if( M<=2 ){
13733 Y--;
13734 M += 12;
13736 A = Y/100;
13737 B = 2 - A + (A/4);
13738 X1 = 36525*(Y+4716)/100;
13739 X2 = 306001*(M+1)/10000;
13740 p->iJD = (sqlite3_int64)((X1 + X2 + D + B - 1524.5 ) * 86400000);
13741 p->validJD = 1;
13742 if( p->validHMS ){
13743 p->iJD += p->h*3600000 + p->m*60000 + (sqlite3_int64)(p->s*1000);
13744 if( p->validTZ ){
13745 p->iJD -= p->tz*60000;
13746 p->validYMD = 0;
13747 p->validHMS = 0;
13748 p->validTZ = 0;
13754 ** Parse dates of the form
13756 ** YYYY-MM-DD HH:MM:SS.FFF
13757 ** YYYY-MM-DD HH:MM:SS
13758 ** YYYY-MM-DD HH:MM
13759 ** YYYY-MM-DD
13761 ** Write the result into the DateTime structure and return 0
13762 ** on success and 1 if the input string is not a well-formed
13763 ** date.
13765 static int parseYyyyMmDd(const char *zDate, DateTime *p){
13766 int Y, M, D, neg;
13768 if( zDate[0]=='-' ){
13769 zDate++;
13770 neg = 1;
13771 }else{
13772 neg = 0;
13774 if( getDigits(zDate,4,0,9999,'-',&Y,2,1,12,'-',&M,2,1,31,0,&D)!=3 ){
13775 return 1;
13777 zDate += 10;
13778 while( sqlite3Isspace(*zDate) || 'T'==*(u8*)zDate ){ zDate++; }
13779 if( parseHhMmSs(zDate, p)==0 ){
13780 /* We got the time */
13781 }else if( *zDate==0 ){
13782 p->validHMS = 0;
13783 }else{
13784 return 1;
13786 p->validJD = 0;
13787 p->validYMD = 1;
13788 p->Y = neg ? -Y : Y;
13789 p->M = M;
13790 p->D = D;
13791 if( p->validTZ ){
13792 computeJD(p);
13794 return 0;
13798 ** Set the time to the current time reported by the VFS.
13800 ** Return the number of errors.
13802 static int setDateTimeToCurrent(sqlite3_context *context, DateTime *p){
13803 sqlite3 *db = sqlite3_context_db_handle(context);
13804 if( sqlite3OsCurrentTimeInt64(db->pVfs, &p->iJD)==SQLITE_OK ){
13805 p->validJD = 1;
13806 return 0;
13807 }else{
13808 return 1;
13813 ** Attempt to parse the given string into a Julian Day Number. Return
13814 ** the number of errors.
13816 ** The following are acceptable forms for the input string:
13818 ** YYYY-MM-DD HH:MM:SS.FFF +/-HH:MM
13819 ** DDDD.DD
13820 ** now
13822 ** In the first form, the +/-HH:MM is always optional. The fractional
13823 ** seconds extension (the ".FFF") is optional. The seconds portion
13824 ** (":SS.FFF") is option. The year and date can be omitted as long
13825 ** as there is a time string. The time string can be omitted as long
13826 ** as there is a year and date.
13828 static int parseDateOrTime(
13829 sqlite3_context *context,
13830 const char *zDate,
13831 DateTime *p
13833 double r;
13834 if( parseYyyyMmDd(zDate,p)==0 ){
13835 return 0;
13836 }else if( parseHhMmSs(zDate, p)==0 ){
13837 return 0;
13838 }else if( sqlite3StrICmp(zDate,"now")==0){
13839 return setDateTimeToCurrent(context, p);
13840 }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){
13841 p->iJD = (sqlite3_int64)(r*86400000.0 + 0.5);
13842 p->validJD = 1;
13843 return 0;
13845 return 1;
13849 ** Compute the Year, Month, and Day from the julian day number.
13851 static void computeYMD(DateTime *p){
13852 int Z, A, B, C, D, E, X1;
13853 if( p->validYMD ) return;
13854 if( !p->validJD ){
13855 p->Y = 2000;
13856 p->M = 1;
13857 p->D = 1;
13858 }else{
13859 Z = (int)((p->iJD + 43200000)/86400000);
13860 A = (int)((Z - 1867216.25)/36524.25);
13861 A = Z + 1 + A - (A/4);
13862 B = A + 1524;
13863 C = (int)((B - 122.1)/365.25);
13864 D = (36525*C)/100;
13865 E = (int)((B-D)/30.6001);
13866 X1 = (int)(30.6001*E);
13867 p->D = B - D - X1;
13868 p->M = E<14 ? E-1 : E-13;
13869 p->Y = p->M>2 ? C - 4716 : C - 4715;
13871 p->validYMD = 1;
13875 ** Compute the Hour, Minute, and Seconds from the julian day number.
13877 static void computeHMS(DateTime *p){
13878 int s;
13879 if( p->validHMS ) return;
13880 computeJD(p);
13881 s = (int)((p->iJD + 43200000) % 86400000);
13882 p->s = s/1000.0;
13883 s = (int)p->s;
13884 p->s -= s;
13885 p->h = s/3600;
13886 s -= p->h*3600;
13887 p->m = s/60;
13888 p->s += s - p->m*60;
13889 p->validHMS = 1;
13893 ** Compute both YMD and HMS
13895 static void computeYMD_HMS(DateTime *p){
13896 computeYMD(p);
13897 computeHMS(p);
13901 ** Clear the YMD and HMS and the TZ
13903 static void clearYMD_HMS_TZ(DateTime *p){
13904 p->validYMD = 0;
13905 p->validHMS = 0;
13906 p->validTZ = 0;
13910 ** On recent Windows platforms, the localtime_s() function is available
13911 ** as part of the "Secure CRT". It is essentially equivalent to
13912 ** localtime_r() available under most POSIX platforms, except that the
13913 ** order of the parameters is reversed.
13915 ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
13917 ** If the user has not indicated to use localtime_r() or localtime_s()
13918 ** already, check for an MSVC build environment that provides
13919 ** localtime_s().
13921 #if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \
13922 defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE)
13923 #define HAVE_LOCALTIME_S 1
13924 #endif
13926 #ifndef SQLITE_OMIT_LOCALTIME
13928 ** The following routine implements the rough equivalent of localtime_r()
13929 ** using whatever operating-system specific localtime facility that
13930 ** is available. This routine returns 0 on success and
13931 ** non-zero on any kind of error.
13933 ** If the sqlite3GlobalConfig.bLocaltimeFault variable is true then this
13934 ** routine will always fail.
13936 static int osLocaltime(time_t *t, struct tm *pTm){
13937 int rc;
13938 #if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \
13939 && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S)
13940 struct tm *pX;
13941 #if SQLITE_THREADSAFE>0
13942 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
13943 #endif
13944 sqlite3_mutex_enter(mutex);
13945 pX = localtime(t);
13946 #ifndef SQLITE_OMIT_BUILTIN_TEST
13947 if( sqlite3GlobalConfig.bLocaltimeFault ) pX = 0;
13948 #endif
13949 if( pX ) *pTm = *pX;
13950 sqlite3_mutex_leave(mutex);
13951 rc = pX==0;
13952 #else
13953 #ifndef SQLITE_OMIT_BUILTIN_TEST
13954 if( sqlite3GlobalConfig.bLocaltimeFault ) return 1;
13955 #endif
13956 #if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R
13957 rc = localtime_r(t, pTm)==0;
13958 #else
13959 rc = localtime_s(pTm, t);
13960 #endif /* HAVE_LOCALTIME_R */
13961 #endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */
13962 return rc;
13964 #endif /* SQLITE_OMIT_LOCALTIME */
13967 #ifndef SQLITE_OMIT_LOCALTIME
13969 ** Compute the difference (in milliseconds) between localtime and UTC
13970 ** (a.k.a. GMT) for the time value p where p is in UTC. If no error occurs,
13971 ** return this value and set *pRc to SQLITE_OK.
13973 ** Or, if an error does occur, set *pRc to SQLITE_ERROR. The returned value
13974 ** is undefined in this case.
13976 static sqlite3_int64 localtimeOffset(
13977 DateTime *p, /* Date at which to calculate offset */
13978 sqlite3_context *pCtx, /* Write error here if one occurs */
13979 int *pRc /* OUT: Error code. SQLITE_OK or ERROR */
13981 DateTime x, y;
13982 time_t t;
13983 struct tm sLocal;
13985 /* Initialize the contents of sLocal to avoid a compiler warning. */
13986 memset(&sLocal, 0, sizeof(sLocal));
13988 x = *p;
13989 computeYMD_HMS(&x);
13990 if( x.Y<1971 || x.Y>=2038 ){
13991 x.Y = 2000;
13992 x.M = 1;
13993 x.D = 1;
13994 x.h = 0;
13995 x.m = 0;
13996 x.s = 0.0;
13997 } else {
13998 int s = (int)(x.s + 0.5);
13999 x.s = s;
14001 x.tz = 0;
14002 x.validJD = 0;
14003 computeJD(&x);
14004 t = (time_t)(x.iJD/1000 - 21086676*(i64)10000);
14005 if( osLocaltime(&t, &sLocal) ){
14006 sqlite3_result_error(pCtx, "local time unavailable", -1);
14007 *pRc = SQLITE_ERROR;
14008 return 0;
14010 y.Y = sLocal.tm_year + 1900;
14011 y.M = sLocal.tm_mon + 1;
14012 y.D = sLocal.tm_mday;
14013 y.h = sLocal.tm_hour;
14014 y.m = sLocal.tm_min;
14015 y.s = sLocal.tm_sec;
14016 y.validYMD = 1;
14017 y.validHMS = 1;
14018 y.validJD = 0;
14019 y.validTZ = 0;
14020 computeJD(&y);
14021 *pRc = SQLITE_OK;
14022 return y.iJD - x.iJD;
14024 #endif /* SQLITE_OMIT_LOCALTIME */
14027 ** Process a modifier to a date-time stamp. The modifiers are
14028 ** as follows:
14030 ** NNN days
14031 ** NNN hours
14032 ** NNN minutes
14033 ** NNN.NNNN seconds
14034 ** NNN months
14035 ** NNN years
14036 ** start of month
14037 ** start of year
14038 ** start of week
14039 ** start of day
14040 ** weekday N
14041 ** unixepoch
14042 ** localtime
14043 ** utc
14045 ** Return 0 on success and 1 if there is any kind of error. If the error
14046 ** is in a system call (i.e. localtime()), then an error message is written
14047 ** to context pCtx. If the error is an unrecognized modifier, no error is
14048 ** written to pCtx.
14050 static int parseModifier(sqlite3_context *pCtx, const char *zMod, DateTime *p){
14051 int rc = 1;
14052 int n;
14053 double r;
14054 char *z, zBuf[30];
14055 z = zBuf;
14056 for(n=0; n<ArraySize(zBuf)-1 && zMod[n]; n++){
14057 z[n] = (char)sqlite3UpperToLower[(u8)zMod[n]];
14059 z[n] = 0;
14060 switch( z[0] ){
14061 #ifndef SQLITE_OMIT_LOCALTIME
14062 case 'l': {
14063 /* localtime
14065 ** Assuming the current time value is UTC (a.k.a. GMT), shift it to
14066 ** show local time.
14068 if( strcmp(z, "localtime")==0 ){
14069 computeJD(p);
14070 p->iJD += localtimeOffset(p, pCtx, &rc);
14071 clearYMD_HMS_TZ(p);
14073 break;
14075 #endif
14076 case 'u': {
14078 ** unixepoch
14080 ** Treat the current value of p->iJD as the number of
14081 ** seconds since 1970. Convert to a real julian day number.
14083 if( strcmp(z, "unixepoch")==0 && p->validJD ){
14084 p->iJD = (p->iJD + 43200)/86400 + 21086676*(i64)10000000;
14085 clearYMD_HMS_TZ(p);
14086 rc = 0;
14088 #ifndef SQLITE_OMIT_LOCALTIME
14089 else if( strcmp(z, "utc")==0 ){
14090 sqlite3_int64 c1;
14091 computeJD(p);
14092 c1 = localtimeOffset(p, pCtx, &rc);
14093 if( rc==SQLITE_OK ){
14094 p->iJD -= c1;
14095 clearYMD_HMS_TZ(p);
14096 p->iJD += c1 - localtimeOffset(p, pCtx, &rc);
14099 #endif
14100 break;
14102 case 'w': {
14104 ** weekday N
14106 ** Move the date to the same time on the next occurrence of
14107 ** weekday N where 0==Sunday, 1==Monday, and so forth. If the
14108 ** date is already on the appropriate weekday, this is a no-op.
14110 if( strncmp(z, "weekday ", 8)==0
14111 && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)
14112 && (n=(int)r)==r && n>=0 && r<7 ){
14113 sqlite3_int64 Z;
14114 computeYMD_HMS(p);
14115 p->validTZ = 0;
14116 p->validJD = 0;
14117 computeJD(p);
14118 Z = ((p->iJD + 129600000)/86400000) % 7;
14119 if( Z>n ) Z -= 7;
14120 p->iJD += (n - Z)*86400000;
14121 clearYMD_HMS_TZ(p);
14122 rc = 0;
14124 break;
14126 case 's': {
14128 ** start of TTTTT
14130 ** Move the date backwards to the beginning of the current day,
14131 ** or month or year.
14133 if( strncmp(z, "start of ", 9)!=0 ) break;
14134 z += 9;
14135 computeYMD(p);
14136 p->validHMS = 1;
14137 p->h = p->m = 0;
14138 p->s = 0.0;
14139 p->validTZ = 0;
14140 p->validJD = 0;
14141 if( strcmp(z,"month")==0 ){
14142 p->D = 1;
14143 rc = 0;
14144 }else if( strcmp(z,"year")==0 ){
14145 computeYMD(p);
14146 p->M = 1;
14147 p->D = 1;
14148 rc = 0;
14149 }else if( strcmp(z,"day")==0 ){
14150 rc = 0;
14152 break;
14154 case '+':
14155 case '-':
14156 case '0':
14157 case '1':
14158 case '2':
14159 case '3':
14160 case '4':
14161 case '5':
14162 case '6':
14163 case '7':
14164 case '8':
14165 case '9': {
14166 double rRounder;
14167 for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){}
14168 if( !sqlite3AtoF(z, &r, n, SQLITE_UTF8) ){
14169 rc = 1;
14170 break;
14172 if( z[n]==':' ){
14173 /* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the
14174 ** specified number of hours, minutes, seconds, and fractional seconds
14175 ** to the time. The ".FFF" may be omitted. The ":SS.FFF" may be
14176 ** omitted.
14178 const char *z2 = z;
14179 DateTime tx;
14180 sqlite3_int64 day;
14181 if( !sqlite3Isdigit(*z2) ) z2++;
14182 memset(&tx, 0, sizeof(tx));
14183 if( parseHhMmSs(z2, &tx) ) break;
14184 computeJD(&tx);
14185 tx.iJD -= 43200000;
14186 day = tx.iJD/86400000;
14187 tx.iJD -= day*86400000;
14188 if( z[0]=='-' ) tx.iJD = -tx.iJD;
14189 computeJD(p);
14190 clearYMD_HMS_TZ(p);
14191 p->iJD += tx.iJD;
14192 rc = 0;
14193 break;
14195 z += n;
14196 while( sqlite3Isspace(*z) ) z++;
14197 n = sqlite3Strlen30(z);
14198 if( n>10 || n<3 ) break;
14199 if( z[n-1]=='s' ){ z[n-1] = 0; n--; }
14200 computeJD(p);
14201 rc = 0;
14202 rRounder = r<0 ? -0.5 : +0.5;
14203 if( n==3 && strcmp(z,"day")==0 ){
14204 p->iJD += (sqlite3_int64)(r*86400000.0 + rRounder);
14205 }else if( n==4 && strcmp(z,"hour")==0 ){
14206 p->iJD += (sqlite3_int64)(r*(86400000.0/24.0) + rRounder);
14207 }else if( n==6 && strcmp(z,"minute")==0 ){
14208 p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0)) + rRounder);
14209 }else if( n==6 && strcmp(z,"second")==0 ){
14210 p->iJD += (sqlite3_int64)(r*(86400000.0/(24.0*60.0*60.0)) + rRounder);
14211 }else if( n==5 && strcmp(z,"month")==0 ){
14212 int x, y;
14213 computeYMD_HMS(p);
14214 p->M += (int)r;
14215 x = p->M>0 ? (p->M-1)/12 : (p->M-12)/12;
14216 p->Y += x;
14217 p->M -= x*12;
14218 p->validJD = 0;
14219 computeJD(p);
14220 y = (int)r;
14221 if( y!=r ){
14222 p->iJD += (sqlite3_int64)((r - y)*30.0*86400000.0 + rRounder);
14224 }else if( n==4 && strcmp(z,"year")==0 ){
14225 int y = (int)r;
14226 computeYMD_HMS(p);
14227 p->Y += y;
14228 p->validJD = 0;
14229 computeJD(p);
14230 if( y!=r ){
14231 p->iJD += (sqlite3_int64)((r - y)*365.0*86400000.0 + rRounder);
14233 }else{
14234 rc = 1;
14236 clearYMD_HMS_TZ(p);
14237 break;
14239 default: {
14240 break;
14243 return rc;
14247 ** Process time function arguments. argv[0] is a date-time stamp.
14248 ** argv[1] and following are modifiers. Parse them all and write
14249 ** the resulting time into the DateTime structure p. Return 0
14250 ** on success and 1 if there are any errors.
14252 ** If there are zero parameters (if even argv[0] is undefined)
14253 ** then assume a default value of "now" for argv[0].
14255 static int isDate(
14256 sqlite3_context *context,
14257 int argc,
14258 sqlite3_value **argv,
14259 DateTime *p
14261 int i;
14262 const unsigned char *z;
14263 int eType;
14264 memset(p, 0, sizeof(*p));
14265 if( argc==0 ){
14266 return setDateTimeToCurrent(context, p);
14268 if( (eType = sqlite3_value_type(argv[0]))==SQLITE_FLOAT
14269 || eType==SQLITE_INTEGER ){
14270 p->iJD = (sqlite3_int64)(sqlite3_value_double(argv[0])*86400000.0 + 0.5);
14271 p->validJD = 1;
14272 }else{
14273 z = sqlite3_value_text(argv[0]);
14274 if( !z || parseDateOrTime(context, (char*)z, p) ){
14275 return 1;
14278 for(i=1; i<argc; i++){
14279 z = sqlite3_value_text(argv[i]);
14280 if( z==0 || parseModifier(context, (char*)z, p) ) return 1;
14282 return 0;
14287 ** The following routines implement the various date and time functions
14288 ** of SQLite.
14292 ** julianday( TIMESTRING, MOD, MOD, ...)
14294 ** Return the julian day number of the date specified in the arguments
14296 static void juliandayFunc(
14297 sqlite3_context *context,
14298 int argc,
14299 sqlite3_value **argv
14301 DateTime x;
14302 if( isDate(context, argc, argv, &x)==0 ){
14303 computeJD(&x);
14304 sqlite3_result_double(context, x.iJD/86400000.0);
14309 ** datetime( TIMESTRING, MOD, MOD, ...)
14311 ** Return YYYY-MM-DD HH:MM:SS
14313 static void datetimeFunc(
14314 sqlite3_context *context,
14315 int argc,
14316 sqlite3_value **argv
14318 DateTime x;
14319 if( isDate(context, argc, argv, &x)==0 ){
14320 char zBuf[100];
14321 computeYMD_HMS(&x);
14322 sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d %02d:%02d:%02d",
14323 x.Y, x.M, x.D, x.h, x.m, (int)(x.s));
14324 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14329 ** time( TIMESTRING, MOD, MOD, ...)
14331 ** Return HH:MM:SS
14333 static void timeFunc(
14334 sqlite3_context *context,
14335 int argc,
14336 sqlite3_value **argv
14338 DateTime x;
14339 if( isDate(context, argc, argv, &x)==0 ){
14340 char zBuf[100];
14341 computeHMS(&x);
14342 sqlite3_snprintf(sizeof(zBuf), zBuf, "%02d:%02d:%02d", x.h, x.m, (int)x.s);
14343 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14348 ** date( TIMESTRING, MOD, MOD, ...)
14350 ** Return YYYY-MM-DD
14352 static void dateFunc(
14353 sqlite3_context *context,
14354 int argc,
14355 sqlite3_value **argv
14357 DateTime x;
14358 if( isDate(context, argc, argv, &x)==0 ){
14359 char zBuf[100];
14360 computeYMD(&x);
14361 sqlite3_snprintf(sizeof(zBuf), zBuf, "%04d-%02d-%02d", x.Y, x.M, x.D);
14362 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14367 ** strftime( FORMAT, TIMESTRING, MOD, MOD, ...)
14369 ** Return a string described by FORMAT. Conversions as follows:
14371 ** %d day of month
14372 ** %f ** fractional seconds SS.SSS
14373 ** %H hour 00-24
14374 ** %j day of year 000-366
14375 ** %J ** Julian day number
14376 ** %m month 01-12
14377 ** %M minute 00-59
14378 ** %s seconds since 1970-01-01
14379 ** %S seconds 00-59
14380 ** %w day of week 0-6 sunday==0
14381 ** %W week of year 00-53
14382 ** %Y year 0000-9999
14383 ** %% %
14385 static void strftimeFunc(
14386 sqlite3_context *context,
14387 int argc,
14388 sqlite3_value **argv
14390 DateTime x;
14391 u64 n;
14392 size_t i,j;
14393 char *z;
14394 sqlite3 *db;
14395 const char *zFmt = (const char*)sqlite3_value_text(argv[0]);
14396 char zBuf[100];
14397 if( zFmt==0 || isDate(context, argc-1, argv+1, &x) ) return;
14398 db = sqlite3_context_db_handle(context);
14399 for(i=0, n=1; zFmt[i]; i++, n++){
14400 if( zFmt[i]=='%' ){
14401 switch( zFmt[i+1] ){
14402 case 'd':
14403 case 'H':
14404 case 'm':
14405 case 'M':
14406 case 'S':
14407 case 'W':
14408 n++;
14409 /* fall thru */
14410 case 'w':
14411 case '%':
14412 break;
14413 case 'f':
14414 n += 8;
14415 break;
14416 case 'j':
14417 n += 3;
14418 break;
14419 case 'Y':
14420 n += 8;
14421 break;
14422 case 's':
14423 case 'J':
14424 n += 50;
14425 break;
14426 default:
14427 return; /* ERROR. return a NULL */
14429 i++;
14432 testcase( n==sizeof(zBuf)-1 );
14433 testcase( n==sizeof(zBuf) );
14434 testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
14435 testcase( n==(u64)db->aLimit[SQLITE_LIMIT_LENGTH] );
14436 if( n<sizeof(zBuf) ){
14437 z = zBuf;
14438 }else if( n>(u64)db->aLimit[SQLITE_LIMIT_LENGTH] ){
14439 sqlite3_result_error_toobig(context);
14440 return;
14441 }else{
14442 z = sqlite3DbMallocRaw(db, (int)n);
14443 if( z==0 ){
14444 sqlite3_result_error_nomem(context);
14445 return;
14448 computeJD(&x);
14449 computeYMD_HMS(&x);
14450 for(i=j=0; zFmt[i]; i++){
14451 if( zFmt[i]!='%' ){
14452 z[j++] = zFmt[i];
14453 }else{
14454 i++;
14455 switch( zFmt[i] ){
14456 case 'd': sqlite3_snprintf(3, &z[j],"%02d",x.D); j+=2; break;
14457 case 'f': {
14458 double s = x.s;
14459 if( s>59.999 ) s = 59.999;
14460 sqlite3_snprintf(7, &z[j],"%06.3f", s);
14461 j += sqlite3Strlen30(&z[j]);
14462 break;
14464 case 'H': sqlite3_snprintf(3, &z[j],"%02d",x.h); j+=2; break;
14465 case 'W': /* Fall thru */
14466 case 'j': {
14467 int nDay; /* Number of days since 1st day of year */
14468 DateTime y = x;
14469 y.validJD = 0;
14470 y.M = 1;
14471 y.D = 1;
14472 computeJD(&y);
14473 nDay = (int)((x.iJD-y.iJD+43200000)/86400000);
14474 if( zFmt[i]=='W' ){
14475 int wd; /* 0=Monday, 1=Tuesday, ... 6=Sunday */
14476 wd = (int)(((x.iJD+43200000)/86400000)%7);
14477 sqlite3_snprintf(3, &z[j],"%02d",(nDay+7-wd)/7);
14478 j += 2;
14479 }else{
14480 sqlite3_snprintf(4, &z[j],"%03d",nDay+1);
14481 j += 3;
14483 break;
14485 case 'J': {
14486 sqlite3_snprintf(20, &z[j],"%.16g",x.iJD/86400000.0);
14487 j+=sqlite3Strlen30(&z[j]);
14488 break;
14490 case 'm': sqlite3_snprintf(3, &z[j],"%02d",x.M); j+=2; break;
14491 case 'M': sqlite3_snprintf(3, &z[j],"%02d",x.m); j+=2; break;
14492 case 's': {
14493 sqlite3_snprintf(30,&z[j],"%lld",
14494 (i64)(x.iJD/1000 - 21086676*(i64)10000));
14495 j += sqlite3Strlen30(&z[j]);
14496 break;
14498 case 'S': sqlite3_snprintf(3,&z[j],"%02d",(int)x.s); j+=2; break;
14499 case 'w': {
14500 z[j++] = (char)(((x.iJD+129600000)/86400000) % 7) + '0';
14501 break;
14503 case 'Y': {
14504 sqlite3_snprintf(5,&z[j],"%04d",x.Y); j+=sqlite3Strlen30(&z[j]);
14505 break;
14507 default: z[j++] = '%'; break;
14511 z[j] = 0;
14512 sqlite3_result_text(context, z, -1,
14513 z==zBuf ? SQLITE_TRANSIENT : SQLITE_DYNAMIC);
14517 ** current_time()
14519 ** This function returns the same value as time('now').
14521 static void ctimeFunc(
14522 sqlite3_context *context,
14523 int NotUsed,
14524 sqlite3_value **NotUsed2
14526 UNUSED_PARAMETER2(NotUsed, NotUsed2);
14527 timeFunc(context, 0, 0);
14531 ** current_date()
14533 ** This function returns the same value as date('now').
14535 static void cdateFunc(
14536 sqlite3_context *context,
14537 int NotUsed,
14538 sqlite3_value **NotUsed2
14540 UNUSED_PARAMETER2(NotUsed, NotUsed2);
14541 dateFunc(context, 0, 0);
14545 ** current_timestamp()
14547 ** This function returns the same value as datetime('now').
14549 static void ctimestampFunc(
14550 sqlite3_context *context,
14551 int NotUsed,
14552 sqlite3_value **NotUsed2
14554 UNUSED_PARAMETER2(NotUsed, NotUsed2);
14555 datetimeFunc(context, 0, 0);
14557 #endif /* !defined(SQLITE_OMIT_DATETIME_FUNCS) */
14559 #ifdef SQLITE_OMIT_DATETIME_FUNCS
14561 ** If the library is compiled to omit the full-scale date and time
14562 ** handling (to get a smaller binary), the following minimal version
14563 ** of the functions current_time(), current_date() and current_timestamp()
14564 ** are included instead. This is to support column declarations that
14565 ** include "DEFAULT CURRENT_TIME" etc.
14567 ** This function uses the C-library functions time(), gmtime()
14568 ** and strftime(). The format string to pass to strftime() is supplied
14569 ** as the user-data for the function.
14571 static void currentTimeFunc(
14572 sqlite3_context *context,
14573 int argc,
14574 sqlite3_value **argv
14576 time_t t;
14577 char *zFormat = (char *)sqlite3_user_data(context);
14578 sqlite3 *db;
14579 sqlite3_int64 iT;
14580 struct tm *pTm;
14581 struct tm sNow;
14582 char zBuf[20];
14584 UNUSED_PARAMETER(argc);
14585 UNUSED_PARAMETER(argv);
14587 db = sqlite3_context_db_handle(context);
14588 if( sqlite3OsCurrentTimeInt64(db->pVfs, &iT) ) return;
14589 t = iT/1000 - 10000*(sqlite3_int64)21086676;
14590 #ifdef HAVE_GMTIME_R
14591 pTm = gmtime_r(&t, &sNow);
14592 #else
14593 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
14594 pTm = gmtime(&t);
14595 if( pTm ) memcpy(&sNow, pTm, sizeof(sNow));
14596 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
14597 #endif
14598 if( pTm ){
14599 strftime(zBuf, 20, zFormat, &sNow);
14600 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
14603 #endif
14606 ** This function registered all of the above C functions as SQL
14607 ** functions. This should be the only routine in this file with
14608 ** external linkage.
14610 SQLITE_PRIVATE void sqlite3RegisterDateTimeFunctions(void){
14611 static SQLITE_WSD FuncDef aDateTimeFuncs[] = {
14612 #ifndef SQLITE_OMIT_DATETIME_FUNCS
14613 FUNCTION(julianday, -1, 0, 0, juliandayFunc ),
14614 FUNCTION(date, -1, 0, 0, dateFunc ),
14615 FUNCTION(time, -1, 0, 0, timeFunc ),
14616 FUNCTION(datetime, -1, 0, 0, datetimeFunc ),
14617 FUNCTION(strftime, -1, 0, 0, strftimeFunc ),
14618 FUNCTION(current_time, 0, 0, 0, ctimeFunc ),
14619 FUNCTION(current_timestamp, 0, 0, 0, ctimestampFunc),
14620 FUNCTION(current_date, 0, 0, 0, cdateFunc ),
14621 #else
14622 STR_FUNCTION(current_time, 0, "%H:%M:%S", 0, currentTimeFunc),
14623 STR_FUNCTION(current_date, 0, "%Y-%m-%d", 0, currentTimeFunc),
14624 STR_FUNCTION(current_timestamp, 0, "%Y-%m-%d %H:%M:%S", 0, currentTimeFunc),
14625 #endif
14627 int i;
14628 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
14629 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aDateTimeFuncs);
14631 for(i=0; i<ArraySize(aDateTimeFuncs); i++){
14632 sqlite3FuncDefInsert(pHash, &aFunc[i]);
14636 /************** End of date.c ************************************************/
14637 /************** Begin file os.c **********************************************/
14639 ** 2005 November 29
14641 ** The author disclaims copyright to this source code. In place of
14642 ** a legal notice, here is a blessing:
14644 ** May you do good and not evil.
14645 ** May you find forgiveness for yourself and forgive others.
14646 ** May you share freely, never taking more than you give.
14648 ******************************************************************************
14650 ** This file contains OS interface code that is common to all
14651 ** architectures.
14653 #define _SQLITE_OS_C_ 1
14654 #undef _SQLITE_OS_C_
14657 ** The default SQLite sqlite3_vfs implementations do not allocate
14658 ** memory (actually, os_unix.c allocates a small amount of memory
14659 ** from within OsOpen()), but some third-party implementations may.
14660 ** So we test the effects of a malloc() failing and the sqlite3OsXXX()
14661 ** function returning SQLITE_IOERR_NOMEM using the DO_OS_MALLOC_TEST macro.
14663 ** The following functions are instrumented for malloc() failure
14664 ** testing:
14666 ** sqlite3OsRead()
14667 ** sqlite3OsWrite()
14668 ** sqlite3OsSync()
14669 ** sqlite3OsFileSize()
14670 ** sqlite3OsLock()
14671 ** sqlite3OsCheckReservedLock()
14672 ** sqlite3OsFileControl()
14673 ** sqlite3OsShmMap()
14674 ** sqlite3OsOpen()
14675 ** sqlite3OsDelete()
14676 ** sqlite3OsAccess()
14677 ** sqlite3OsFullPathname()
14680 #if defined(SQLITE_TEST)
14681 SQLITE_API int sqlite3_memdebug_vfs_oom_test = 1;
14682 #define DO_OS_MALLOC_TEST(x) \
14683 if (sqlite3_memdebug_vfs_oom_test && (!x || !sqlite3IsMemJournal(x))) { \
14684 void *pTstAlloc = sqlite3Malloc(10); \
14685 if (!pTstAlloc) return SQLITE_IOERR_NOMEM; \
14686 sqlite3_free(pTstAlloc); \
14688 #else
14689 #define DO_OS_MALLOC_TEST(x)
14690 #endif
14693 ** The following routines are convenience wrappers around methods
14694 ** of the sqlite3_file object. This is mostly just syntactic sugar. All
14695 ** of this would be completely automatic if SQLite were coded using
14696 ** C++ instead of plain old C.
14698 SQLITE_PRIVATE int sqlite3OsClose(sqlite3_file *pId){
14699 int rc = SQLITE_OK;
14700 if( pId->pMethods ){
14701 rc = pId->pMethods->xClose(pId);
14702 pId->pMethods = 0;
14704 return rc;
14706 SQLITE_PRIVATE int sqlite3OsRead(sqlite3_file *id, void *pBuf, int amt, i64 offset){
14707 DO_OS_MALLOC_TEST(id);
14708 return id->pMethods->xRead(id, pBuf, amt, offset);
14710 SQLITE_PRIVATE int sqlite3OsWrite(sqlite3_file *id, const void *pBuf, int amt, i64 offset){
14711 DO_OS_MALLOC_TEST(id);
14712 return id->pMethods->xWrite(id, pBuf, amt, offset);
14714 SQLITE_PRIVATE int sqlite3OsTruncate(sqlite3_file *id, i64 size){
14715 return id->pMethods->xTruncate(id, size);
14717 SQLITE_PRIVATE int sqlite3OsSync(sqlite3_file *id, int flags){
14718 DO_OS_MALLOC_TEST(id);
14719 return id->pMethods->xSync(id, flags);
14721 SQLITE_PRIVATE int sqlite3OsFileSize(sqlite3_file *id, i64 *pSize){
14722 DO_OS_MALLOC_TEST(id);
14723 return id->pMethods->xFileSize(id, pSize);
14725 SQLITE_PRIVATE int sqlite3OsLock(sqlite3_file *id, int lockType){
14726 DO_OS_MALLOC_TEST(id);
14727 return id->pMethods->xLock(id, lockType);
14729 SQLITE_PRIVATE int sqlite3OsUnlock(sqlite3_file *id, int lockType){
14730 return id->pMethods->xUnlock(id, lockType);
14732 SQLITE_PRIVATE int sqlite3OsCheckReservedLock(sqlite3_file *id, int *pResOut){
14733 DO_OS_MALLOC_TEST(id);
14734 return id->pMethods->xCheckReservedLock(id, pResOut);
14738 ** Use sqlite3OsFileControl() when we are doing something that might fail
14739 ** and we need to know about the failures. Use sqlite3OsFileControlHint()
14740 ** when simply tossing information over the wall to the VFS and we do not
14741 ** really care if the VFS receives and understands the information since it
14742 ** is only a hint and can be safely ignored. The sqlite3OsFileControlHint()
14743 ** routine has no return value since the return value would be meaningless.
14745 SQLITE_PRIVATE int sqlite3OsFileControl(sqlite3_file *id, int op, void *pArg){
14746 DO_OS_MALLOC_TEST(id);
14747 return id->pMethods->xFileControl(id, op, pArg);
14749 SQLITE_PRIVATE void sqlite3OsFileControlHint(sqlite3_file *id, int op, void *pArg){
14750 (void)id->pMethods->xFileControl(id, op, pArg);
14753 SQLITE_PRIVATE int sqlite3OsSectorSize(sqlite3_file *id){
14754 int (*xSectorSize)(sqlite3_file*) = id->pMethods->xSectorSize;
14755 return (xSectorSize ? xSectorSize(id) : SQLITE_DEFAULT_SECTOR_SIZE);
14757 SQLITE_PRIVATE int sqlite3OsDeviceCharacteristics(sqlite3_file *id){
14758 return id->pMethods->xDeviceCharacteristics(id);
14760 SQLITE_PRIVATE int sqlite3OsShmLock(sqlite3_file *id, int offset, int n, int flags){
14761 return id->pMethods->xShmLock(id, offset, n, flags);
14763 SQLITE_PRIVATE void sqlite3OsShmBarrier(sqlite3_file *id){
14764 id->pMethods->xShmBarrier(id);
14766 SQLITE_PRIVATE int sqlite3OsShmUnmap(sqlite3_file *id, int deleteFlag){
14767 return id->pMethods->xShmUnmap(id, deleteFlag);
14769 SQLITE_PRIVATE int sqlite3OsShmMap(
14770 sqlite3_file *id, /* Database file handle */
14771 int iPage,
14772 int pgsz,
14773 int bExtend, /* True to extend file if necessary */
14774 void volatile **pp /* OUT: Pointer to mapping */
14776 DO_OS_MALLOC_TEST(id);
14777 return id->pMethods->xShmMap(id, iPage, pgsz, bExtend, pp);
14781 ** The next group of routines are convenience wrappers around the
14782 ** VFS methods.
14784 SQLITE_PRIVATE int sqlite3OsOpen(
14785 sqlite3_vfs *pVfs,
14786 const char *zPath,
14787 sqlite3_file *pFile,
14788 int flags,
14789 int *pFlagsOut
14791 int rc;
14792 DO_OS_MALLOC_TEST(0);
14793 /* 0x87f7f is a mask of SQLITE_OPEN_ flags that are valid to be passed
14794 ** down into the VFS layer. Some SQLITE_OPEN_ flags (for example,
14795 ** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
14796 ** reaching the VFS. */
14797 rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f7f, pFlagsOut);
14798 assert( rc==SQLITE_OK || pFile->pMethods==0 );
14799 return rc;
14801 SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
14802 DO_OS_MALLOC_TEST(0);
14803 assert( dirSync==0 || dirSync==1 );
14804 return pVfs->xDelete(pVfs, zPath, dirSync);
14806 SQLITE_PRIVATE int sqlite3OsAccess(
14807 sqlite3_vfs *pVfs,
14808 const char *zPath,
14809 int flags,
14810 int *pResOut
14812 DO_OS_MALLOC_TEST(0);
14813 return pVfs->xAccess(pVfs, zPath, flags, pResOut);
14815 SQLITE_PRIVATE int sqlite3OsFullPathname(
14816 sqlite3_vfs *pVfs,
14817 const char *zPath,
14818 int nPathOut,
14819 char *zPathOut
14821 DO_OS_MALLOC_TEST(0);
14822 zPathOut[0] = 0;
14823 return pVfs->xFullPathname(pVfs, zPath, nPathOut, zPathOut);
14825 #ifndef SQLITE_OMIT_LOAD_EXTENSION
14826 SQLITE_PRIVATE void *sqlite3OsDlOpen(sqlite3_vfs *pVfs, const char *zPath){
14827 return pVfs->xDlOpen(pVfs, zPath);
14829 SQLITE_PRIVATE void sqlite3OsDlError(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
14830 pVfs->xDlError(pVfs, nByte, zBufOut);
14832 SQLITE_PRIVATE void (*sqlite3OsDlSym(sqlite3_vfs *pVfs, void *pHdle, const char *zSym))(void){
14833 return pVfs->xDlSym(pVfs, pHdle, zSym);
14835 SQLITE_PRIVATE void sqlite3OsDlClose(sqlite3_vfs *pVfs, void *pHandle){
14836 pVfs->xDlClose(pVfs, pHandle);
14838 #endif /* SQLITE_OMIT_LOAD_EXTENSION */
14839 SQLITE_PRIVATE int sqlite3OsRandomness(sqlite3_vfs *pVfs, int nByte, char *zBufOut){
14840 return pVfs->xRandomness(pVfs, nByte, zBufOut);
14842 SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){
14843 return pVfs->xSleep(pVfs, nMicro);
14845 SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){
14846 int rc;
14847 /* IMPLEMENTATION-OF: R-49045-42493 SQLite will use the xCurrentTimeInt64()
14848 ** method to get the current date and time if that method is available
14849 ** (if iVersion is 2 or greater and the function pointer is not NULL) and
14850 ** will fall back to xCurrentTime() if xCurrentTimeInt64() is
14851 ** unavailable.
14853 if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){
14854 rc = pVfs->xCurrentTimeInt64(pVfs, pTimeOut);
14855 }else{
14856 double r;
14857 rc = pVfs->xCurrentTime(pVfs, &r);
14858 *pTimeOut = (sqlite3_int64)(r*86400000.0);
14860 return rc;
14863 SQLITE_PRIVATE int sqlite3OsOpenMalloc(
14864 sqlite3_vfs *pVfs,
14865 const char *zFile,
14866 sqlite3_file **ppFile,
14867 int flags,
14868 int *pOutFlags
14870 int rc = SQLITE_NOMEM;
14871 sqlite3_file *pFile;
14872 pFile = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile);
14873 if( pFile ){
14874 rc = sqlite3OsOpen(pVfs, zFile, pFile, flags, pOutFlags);
14875 if( rc!=SQLITE_OK ){
14876 sqlite3_free(pFile);
14877 }else{
14878 *ppFile = pFile;
14881 return rc;
14883 SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *pFile){
14884 int rc = SQLITE_OK;
14885 assert( pFile );
14886 rc = sqlite3OsClose(pFile);
14887 sqlite3_free(pFile);
14888 return rc;
14892 ** This function is a wrapper around the OS specific implementation of
14893 ** sqlite3_os_init(). The purpose of the wrapper is to provide the
14894 ** ability to simulate a malloc failure, so that the handling of an
14895 ** error in sqlite3_os_init() by the upper layers can be tested.
14897 SQLITE_PRIVATE int sqlite3OsInit(void){
14898 void *p = sqlite3_malloc(10);
14899 if( p==0 ) return SQLITE_NOMEM;
14900 sqlite3_free(p);
14901 return sqlite3_os_init();
14905 ** The list of all registered VFS implementations.
14907 static sqlite3_vfs * SQLITE_WSD vfsList = 0;
14908 #define vfsList GLOBAL(sqlite3_vfs *, vfsList)
14911 ** Locate a VFS by name. If no name is given, simply return the
14912 ** first VFS on the list.
14914 SQLITE_API sqlite3_vfs *sqlite3_vfs_find(const char *zVfs){
14915 sqlite3_vfs *pVfs = 0;
14916 #if SQLITE_THREADSAFE
14917 sqlite3_mutex *mutex;
14918 #endif
14919 #ifndef SQLITE_OMIT_AUTOINIT
14920 int rc = sqlite3_initialize();
14921 if( rc ) return 0;
14922 #endif
14923 #if SQLITE_THREADSAFE
14924 mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
14925 #endif
14926 sqlite3_mutex_enter(mutex);
14927 for(pVfs = vfsList; pVfs; pVfs=pVfs->pNext){
14928 if( zVfs==0 ) break;
14929 if( strcmp(zVfs, pVfs->zName)==0 ) break;
14931 sqlite3_mutex_leave(mutex);
14932 return pVfs;
14936 ** Unlink a VFS from the linked list
14938 static void vfsUnlink(sqlite3_vfs *pVfs){
14939 assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) );
14940 if( pVfs==0 ){
14941 /* No-op */
14942 }else if( vfsList==pVfs ){
14943 vfsList = pVfs->pNext;
14944 }else if( vfsList ){
14945 sqlite3_vfs *p = vfsList;
14946 while( p->pNext && p->pNext!=pVfs ){
14947 p = p->pNext;
14949 if( p->pNext==pVfs ){
14950 p->pNext = pVfs->pNext;
14956 ** Register a VFS with the system. It is harmless to register the same
14957 ** VFS multiple times. The new VFS becomes the default if makeDflt is
14958 ** true.
14960 SQLITE_API int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){
14961 MUTEX_LOGIC(sqlite3_mutex *mutex;)
14962 #ifndef SQLITE_OMIT_AUTOINIT
14963 int rc = sqlite3_initialize();
14964 if( rc ) return rc;
14965 #endif
14966 MUTEX_LOGIC( mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
14967 sqlite3_mutex_enter(mutex);
14968 vfsUnlink(pVfs);
14969 if( makeDflt || vfsList==0 ){
14970 pVfs->pNext = vfsList;
14971 vfsList = pVfs;
14972 }else{
14973 pVfs->pNext = vfsList->pNext;
14974 vfsList->pNext = pVfs;
14976 assert(vfsList);
14977 sqlite3_mutex_leave(mutex);
14978 return SQLITE_OK;
14982 ** Unregister a VFS so that it is no longer accessible.
14984 SQLITE_API int sqlite3_vfs_unregister(sqlite3_vfs *pVfs){
14985 #if SQLITE_THREADSAFE
14986 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
14987 #endif
14988 sqlite3_mutex_enter(mutex);
14989 vfsUnlink(pVfs);
14990 sqlite3_mutex_leave(mutex);
14991 return SQLITE_OK;
14994 /************** End of os.c **************************************************/
14995 /************** Begin file fault.c *******************************************/
14997 ** 2008 Jan 22
14999 ** The author disclaims copyright to this source code. In place of
15000 ** a legal notice, here is a blessing:
15002 ** May you do good and not evil.
15003 ** May you find forgiveness for yourself and forgive others.
15004 ** May you share freely, never taking more than you give.
15006 *************************************************************************
15008 ** This file contains code to support the concept of "benign"
15009 ** malloc failures (when the xMalloc() or xRealloc() method of the
15010 ** sqlite3_mem_methods structure fails to allocate a block of memory
15011 ** and returns 0).
15013 ** Most malloc failures are non-benign. After they occur, SQLite
15014 ** abandons the current operation and returns an error code (usually
15015 ** SQLITE_NOMEM) to the user. However, sometimes a fault is not necessarily
15016 ** fatal. For example, if a malloc fails while resizing a hash table, this
15017 ** is completely recoverable simply by not carrying out the resize. The
15018 ** hash table will continue to function normally. So a malloc failure
15019 ** during a hash table resize is a benign fault.
15023 #ifndef SQLITE_OMIT_BUILTIN_TEST
15026 ** Global variables.
15028 typedef struct BenignMallocHooks BenignMallocHooks;
15029 static SQLITE_WSD struct BenignMallocHooks {
15030 void (*xBenignBegin)(void);
15031 void (*xBenignEnd)(void);
15032 } sqlite3Hooks = { 0, 0 };
15034 /* The "wsdHooks" macro will resolve to the appropriate BenignMallocHooks
15035 ** structure. If writable static data is unsupported on the target,
15036 ** we have to locate the state vector at run-time. In the more common
15037 ** case where writable static data is supported, wsdHooks can refer directly
15038 ** to the "sqlite3Hooks" state vector declared above.
15040 #ifdef SQLITE_OMIT_WSD
15041 # define wsdHooksInit \
15042 BenignMallocHooks *x = &GLOBAL(BenignMallocHooks,sqlite3Hooks)
15043 # define wsdHooks x[0]
15044 #else
15045 # define wsdHooksInit
15046 # define wsdHooks sqlite3Hooks
15047 #endif
15051 ** Register hooks to call when sqlite3BeginBenignMalloc() and
15052 ** sqlite3EndBenignMalloc() are called, respectively.
15054 SQLITE_PRIVATE void sqlite3BenignMallocHooks(
15055 void (*xBenignBegin)(void),
15056 void (*xBenignEnd)(void)
15058 wsdHooksInit;
15059 wsdHooks.xBenignBegin = xBenignBegin;
15060 wsdHooks.xBenignEnd = xBenignEnd;
15064 ** This (sqlite3EndBenignMalloc()) is called by SQLite code to indicate that
15065 ** subsequent malloc failures are benign. A call to sqlite3EndBenignMalloc()
15066 ** indicates that subsequent malloc failures are non-benign.
15068 SQLITE_PRIVATE void sqlite3BeginBenignMalloc(void){
15069 wsdHooksInit;
15070 if( wsdHooks.xBenignBegin ){
15071 wsdHooks.xBenignBegin();
15074 SQLITE_PRIVATE void sqlite3EndBenignMalloc(void){
15075 wsdHooksInit;
15076 if( wsdHooks.xBenignEnd ){
15077 wsdHooks.xBenignEnd();
15081 #endif /* #ifndef SQLITE_OMIT_BUILTIN_TEST */
15083 /************** End of fault.c ***********************************************/
15084 /************** Begin file mem0.c ********************************************/
15086 ** 2008 October 28
15088 ** The author disclaims copyright to this source code. In place of
15089 ** a legal notice, here is a blessing:
15091 ** May you do good and not evil.
15092 ** May you find forgiveness for yourself and forgive others.
15093 ** May you share freely, never taking more than you give.
15095 *************************************************************************
15097 ** This file contains a no-op memory allocation drivers for use when
15098 ** SQLITE_ZERO_MALLOC is defined. The allocation drivers implemented
15099 ** here always fail. SQLite will not operate with these drivers. These
15100 ** are merely placeholders. Real drivers must be substituted using
15101 ** sqlite3_config() before SQLite will operate.
15105 ** This version of the memory allocator is the default. It is
15106 ** used when no other memory allocator is specified using compile-time
15107 ** macros.
15109 #ifdef SQLITE_ZERO_MALLOC
15112 ** No-op versions of all memory allocation routines
15114 static void *sqlite3MemMalloc(int nByte){ return 0; }
15115 static void sqlite3MemFree(void *pPrior){ return; }
15116 static void *sqlite3MemRealloc(void *pPrior, int nByte){ return 0; }
15117 static int sqlite3MemSize(void *pPrior){ return 0; }
15118 static int sqlite3MemRoundup(int n){ return n; }
15119 static int sqlite3MemInit(void *NotUsed){ return SQLITE_OK; }
15120 static void sqlite3MemShutdown(void *NotUsed){ return; }
15123 ** This routine is the only routine in this file with external linkage.
15125 ** Populate the low-level memory allocation function pointers in
15126 ** sqlite3GlobalConfig.m with pointers to the routines in this file.
15128 SQLITE_PRIVATE void sqlite3MemSetDefault(void){
15129 static const sqlite3_mem_methods defaultMethods = {
15130 sqlite3MemMalloc,
15131 sqlite3MemFree,
15132 sqlite3MemRealloc,
15133 sqlite3MemSize,
15134 sqlite3MemRoundup,
15135 sqlite3MemInit,
15136 sqlite3MemShutdown,
15139 sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
15142 #endif /* SQLITE_ZERO_MALLOC */
15144 /************** End of mem0.c ************************************************/
15145 /************** Begin file mem1.c ********************************************/
15147 ** 2007 August 14
15149 ** The author disclaims copyright to this source code. In place of
15150 ** a legal notice, here is a blessing:
15152 ** May you do good and not evil.
15153 ** May you find forgiveness for yourself and forgive others.
15154 ** May you share freely, never taking more than you give.
15156 *************************************************************************
15158 ** This file contains low-level memory allocation drivers for when
15159 ** SQLite will use the standard C-library malloc/realloc/free interface
15160 ** to obtain the memory it needs.
15162 ** This file contains implementations of the low-level memory allocation
15163 ** routines specified in the sqlite3_mem_methods object.
15167 ** This version of the memory allocator is the default. It is
15168 ** used when no other memory allocator is specified using compile-time
15169 ** macros.
15171 #ifdef SQLITE_SYSTEM_MALLOC
15174 ** Windows systems have malloc_usable_size() but it is called _msize()
15176 #if !defined(HAVE_MALLOC_USABLE_SIZE) && SQLITE_OS_WIN
15177 # define HAVE_MALLOC_USABLE_SIZE 1
15178 # define malloc_usable_size _msize
15179 #endif
15181 #if defined(__APPLE__)
15184 ** Use the zone allocator available on apple products
15186 #include <sys/sysctl.h>
15187 #include <malloc/malloc.h>
15188 #include <libkern/OSAtomic.h>
15189 static malloc_zone_t* _sqliteZone_;
15190 #define SQLITE_MALLOC(x) malloc_zone_malloc(_sqliteZone_, (x))
15191 #define SQLITE_FREE(x) malloc_zone_free(_sqliteZone_, (x));
15192 #define SQLITE_REALLOC(x,y) malloc_zone_realloc(_sqliteZone_, (x), (y))
15193 #define SQLITE_MALLOCSIZE(x) \
15194 (_sqliteZone_ ? _sqliteZone_->size(_sqliteZone_,x) : malloc_size(x))
15196 #else /* if not __APPLE__ */
15199 ** Use standard C library malloc and free on non-Apple systems.
15201 #define SQLITE_MALLOC(x) malloc(x)
15202 #define SQLITE_FREE(x) free(x)
15203 #define SQLITE_REALLOC(x,y) realloc((x),(y))
15205 #ifdef HAVE_MALLOC_USABLE_SIZE
15206 #include <malloc.h>
15207 #define SQLITE_MALLOCSIZE(x) malloc_usable_size(x)
15208 #else
15209 #undef SQLITE_MALLOCSIZE
15210 #endif
15212 #endif /* __APPLE__ or not __APPLE__ */
15215 ** Like malloc(), but remember the size of the allocation
15216 ** so that we can find it later using sqlite3MemSize().
15218 ** For this low-level routine, we are guaranteed that nByte>0 because
15219 ** cases of nByte<=0 will be intercepted and dealt with by higher level
15220 ** routines.
15222 static void *sqlite3MemMalloc(int nByte){
15223 #ifdef SQLITE_MALLOCSIZE
15224 void *p = SQLITE_MALLOC( nByte );
15225 if( p==0 ){
15226 testcase( sqlite3GlobalConfig.xLog!=0 );
15227 sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte);
15229 return p;
15230 #else
15231 sqlite3_int64 *p;
15232 assert( nByte>0 );
15233 nByte = ROUND8(nByte);
15234 p = SQLITE_MALLOC( nByte+8 );
15235 if( p ){
15236 p[0] = nByte;
15237 p++;
15238 }else{
15239 testcase( sqlite3GlobalConfig.xLog!=0 );
15240 sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes of memory", nByte);
15242 return (void *)p;
15243 #endif
15247 ** Like free() but works for allocations obtained from sqlite3MemMalloc()
15248 ** or sqlite3MemRealloc().
15250 ** For this low-level routine, we already know that pPrior!=0 since
15251 ** cases where pPrior==0 will have been intecepted and dealt with
15252 ** by higher-level routines.
15254 static void sqlite3MemFree(void *pPrior){
15255 #ifdef SQLITE_MALLOCSIZE
15256 SQLITE_FREE(pPrior);
15257 #else
15258 sqlite3_int64 *p = (sqlite3_int64*)pPrior;
15259 assert( pPrior!=0 );
15260 p--;
15261 SQLITE_FREE(p);
15262 #endif
15266 ** Report the allocated size of a prior return from xMalloc()
15267 ** or xRealloc().
15269 static int sqlite3MemSize(void *pPrior){
15270 #ifdef SQLITE_MALLOCSIZE
15271 return pPrior ? (int)SQLITE_MALLOCSIZE(pPrior) : 0;
15272 #else
15273 sqlite3_int64 *p;
15274 if( pPrior==0 ) return 0;
15275 p = (sqlite3_int64*)pPrior;
15276 p--;
15277 return (int)p[0];
15278 #endif
15282 ** Like realloc(). Resize an allocation previously obtained from
15283 ** sqlite3MemMalloc().
15285 ** For this low-level interface, we know that pPrior!=0. Cases where
15286 ** pPrior==0 while have been intercepted by higher-level routine and
15287 ** redirected to xMalloc. Similarly, we know that nByte>0 becauses
15288 ** cases where nByte<=0 will have been intercepted by higher-level
15289 ** routines and redirected to xFree.
15291 static void *sqlite3MemRealloc(void *pPrior, int nByte){
15292 #ifdef SQLITE_MALLOCSIZE
15293 void *p = SQLITE_REALLOC(pPrior, nByte);
15294 if( p==0 ){
15295 testcase( sqlite3GlobalConfig.xLog!=0 );
15296 sqlite3_log(SQLITE_NOMEM,
15297 "failed memory resize %u to %u bytes",
15298 SQLITE_MALLOCSIZE(pPrior), nByte);
15300 return p;
15301 #else
15302 sqlite3_int64 *p = (sqlite3_int64*)pPrior;
15303 assert( pPrior!=0 && nByte>0 );
15304 assert( nByte==ROUND8(nByte) ); /* EV: R-46199-30249 */
15305 p--;
15306 p = SQLITE_REALLOC(p, nByte+8 );
15307 if( p ){
15308 p[0] = nByte;
15309 p++;
15310 }else{
15311 testcase( sqlite3GlobalConfig.xLog!=0 );
15312 sqlite3_log(SQLITE_NOMEM,
15313 "failed memory resize %u to %u bytes",
15314 sqlite3MemSize(pPrior), nByte);
15316 return (void*)p;
15317 #endif
15321 ** Round up a request size to the next valid allocation size.
15323 static int sqlite3MemRoundup(int n){
15324 return ROUND8(n);
15328 ** Initialize this module.
15330 static int sqlite3MemInit(void *NotUsed){
15331 #if defined(__APPLE__)
15332 int cpuCount;
15333 size_t len;
15334 if( _sqliteZone_ ){
15335 return SQLITE_OK;
15337 len = sizeof(cpuCount);
15338 /* One usually wants to use hw.acctivecpu for MT decisions, but not here */
15339 sysctlbyname("hw.ncpu", &cpuCount, &len, NULL, 0);
15340 if( cpuCount>1 ){
15341 /* defer MT decisions to system malloc */
15342 _sqliteZone_ = malloc_default_zone();
15343 }else{
15344 /* only 1 core, use our own zone to contention over global locks,
15345 ** e.g. we have our own dedicated locks */
15346 bool success;
15347 malloc_zone_t* newzone = malloc_create_zone(4096, 0);
15348 malloc_set_zone_name(newzone, "Sqlite_Heap");
15350 success = OSAtomicCompareAndSwapPtrBarrier(NULL, newzone,
15351 (void * volatile *)&_sqliteZone_);
15352 }while(!_sqliteZone_);
15353 if( !success ){
15354 /* somebody registered a zone first */
15355 malloc_destroy_zone(newzone);
15358 #endif
15359 UNUSED_PARAMETER(NotUsed);
15360 return SQLITE_OK;
15364 ** Deinitialize this module.
15366 static void sqlite3MemShutdown(void *NotUsed){
15367 UNUSED_PARAMETER(NotUsed);
15368 return;
15372 ** This routine is the only routine in this file with external linkage.
15374 ** Populate the low-level memory allocation function pointers in
15375 ** sqlite3GlobalConfig.m with pointers to the routines in this file.
15377 SQLITE_PRIVATE void sqlite3MemSetDefault(void){
15378 static const sqlite3_mem_methods defaultMethods = {
15379 sqlite3MemMalloc,
15380 sqlite3MemFree,
15381 sqlite3MemRealloc,
15382 sqlite3MemSize,
15383 sqlite3MemRoundup,
15384 sqlite3MemInit,
15385 sqlite3MemShutdown,
15388 sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
15391 #endif /* SQLITE_SYSTEM_MALLOC */
15393 /************** End of mem1.c ************************************************/
15394 /************** Begin file mem2.c ********************************************/
15396 ** 2007 August 15
15398 ** The author disclaims copyright to this source code. In place of
15399 ** a legal notice, here is a blessing:
15401 ** May you do good and not evil.
15402 ** May you find forgiveness for yourself and forgive others.
15403 ** May you share freely, never taking more than you give.
15405 *************************************************************************
15407 ** This file contains low-level memory allocation drivers for when
15408 ** SQLite will use the standard C-library malloc/realloc/free interface
15409 ** to obtain the memory it needs while adding lots of additional debugging
15410 ** information to each allocation in order to help detect and fix memory
15411 ** leaks and memory usage errors.
15413 ** This file contains implementations of the low-level memory allocation
15414 ** routines specified in the sqlite3_mem_methods object.
15418 ** This version of the memory allocator is used only if the
15419 ** SQLITE_MEMDEBUG macro is defined
15421 #ifdef SQLITE_MEMDEBUG
15424 ** The backtrace functionality is only available with GLIBC
15426 #ifdef __GLIBC__
15427 extern int backtrace(void**,int);
15428 extern void backtrace_symbols_fd(void*const*,int,int);
15429 #else
15430 # define backtrace(A,B) 1
15431 # define backtrace_symbols_fd(A,B,C)
15432 #endif
15433 /* #include <stdio.h> */
15436 ** Each memory allocation looks like this:
15438 ** ------------------------------------------------------------------------
15439 ** | Title | backtrace pointers | MemBlockHdr | allocation | EndGuard |
15440 ** ------------------------------------------------------------------------
15442 ** The application code sees only a pointer to the allocation. We have
15443 ** to back up from the allocation pointer to find the MemBlockHdr. The
15444 ** MemBlockHdr tells us the size of the allocation and the number of
15445 ** backtrace pointers. There is also a guard word at the end of the
15446 ** MemBlockHdr.
15448 struct MemBlockHdr {
15449 i64 iSize; /* Size of this allocation */
15450 struct MemBlockHdr *pNext, *pPrev; /* Linked list of all unfreed memory */
15451 char nBacktrace; /* Number of backtraces on this alloc */
15452 char nBacktraceSlots; /* Available backtrace slots */
15453 u8 nTitle; /* Bytes of title; includes '\0' */
15454 u8 eType; /* Allocation type code */
15455 int iForeGuard; /* Guard word for sanity */
15459 ** Guard words
15461 #define FOREGUARD 0x80F5E153
15462 #define REARGUARD 0xE4676B53
15465 ** Number of malloc size increments to track.
15467 #define NCSIZE 1000
15470 ** All of the static variables used by this module are collected
15471 ** into a single structure named "mem". This is to keep the
15472 ** static variables organized and to reduce namespace pollution
15473 ** when this module is combined with other in the amalgamation.
15475 static struct {
15478 ** Mutex to control access to the memory allocation subsystem.
15480 sqlite3_mutex *mutex;
15483 ** Head and tail of a linked list of all outstanding allocations
15485 struct MemBlockHdr *pFirst;
15486 struct MemBlockHdr *pLast;
15489 ** The number of levels of backtrace to save in new allocations.
15491 int nBacktrace;
15492 void (*xBacktrace)(int, int, void **);
15495 ** Title text to insert in front of each block
15497 int nTitle; /* Bytes of zTitle to save. Includes '\0' and padding */
15498 char zTitle[100]; /* The title text */
15501 ** sqlite3MallocDisallow() increments the following counter.
15502 ** sqlite3MallocAllow() decrements it.
15504 int disallow; /* Do not allow memory allocation */
15507 ** Gather statistics on the sizes of memory allocations.
15508 ** nAlloc[i] is the number of allocation attempts of i*8
15509 ** bytes. i==NCSIZE is the number of allocation attempts for
15510 ** sizes more than NCSIZE*8 bytes.
15512 int nAlloc[NCSIZE]; /* Total number of allocations */
15513 int nCurrent[NCSIZE]; /* Current number of allocations */
15514 int mxCurrent[NCSIZE]; /* Highwater mark for nCurrent */
15516 } mem;
15520 ** Adjust memory usage statistics
15522 static void adjustStats(int iSize, int increment){
15523 int i = ROUND8(iSize)/8;
15524 if( i>NCSIZE-1 ){
15525 i = NCSIZE - 1;
15527 if( increment>0 ){
15528 mem.nAlloc[i]++;
15529 mem.nCurrent[i]++;
15530 if( mem.nCurrent[i]>mem.mxCurrent[i] ){
15531 mem.mxCurrent[i] = mem.nCurrent[i];
15533 }else{
15534 mem.nCurrent[i]--;
15535 assert( mem.nCurrent[i]>=0 );
15540 ** Given an allocation, find the MemBlockHdr for that allocation.
15542 ** This routine checks the guards at either end of the allocation and
15543 ** if they are incorrect it asserts.
15545 static struct MemBlockHdr *sqlite3MemsysGetHeader(void *pAllocation){
15546 struct MemBlockHdr *p;
15547 int *pInt;
15548 u8 *pU8;
15549 int nReserve;
15551 p = (struct MemBlockHdr*)pAllocation;
15552 p--;
15553 assert( p->iForeGuard==(int)FOREGUARD );
15554 nReserve = ROUND8(p->iSize);
15555 pInt = (int*)pAllocation;
15556 pU8 = (u8*)pAllocation;
15557 assert( pInt[nReserve/sizeof(int)]==(int)REARGUARD );
15558 /* This checks any of the "extra" bytes allocated due
15559 ** to rounding up to an 8 byte boundary to ensure
15560 ** they haven't been overwritten.
15562 while( nReserve-- > p->iSize ) assert( pU8[nReserve]==0x65 );
15563 return p;
15567 ** Return the number of bytes currently allocated at address p.
15569 static int sqlite3MemSize(void *p){
15570 struct MemBlockHdr *pHdr;
15571 if( !p ){
15572 return 0;
15574 pHdr = sqlite3MemsysGetHeader(p);
15575 return pHdr->iSize;
15579 ** Initialize the memory allocation subsystem.
15581 static int sqlite3MemInit(void *NotUsed){
15582 UNUSED_PARAMETER(NotUsed);
15583 assert( (sizeof(struct MemBlockHdr)&7) == 0 );
15584 if( !sqlite3GlobalConfig.bMemstat ){
15585 /* If memory status is enabled, then the malloc.c wrapper will already
15586 ** hold the STATIC_MEM mutex when the routines here are invoked. */
15587 mem.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
15589 return SQLITE_OK;
15593 ** Deinitialize the memory allocation subsystem.
15595 static void sqlite3MemShutdown(void *NotUsed){
15596 UNUSED_PARAMETER(NotUsed);
15597 mem.mutex = 0;
15601 ** Round up a request size to the next valid allocation size.
15603 static int sqlite3MemRoundup(int n){
15604 return ROUND8(n);
15608 ** Fill a buffer with pseudo-random bytes. This is used to preset
15609 ** the content of a new memory allocation to unpredictable values and
15610 ** to clear the content of a freed allocation to unpredictable values.
15612 static void randomFill(char *pBuf, int nByte){
15613 unsigned int x, y, r;
15614 x = SQLITE_PTR_TO_INT(pBuf);
15615 y = nByte | 1;
15616 while( nByte >= 4 ){
15617 x = (x>>1) ^ (-(x&1) & 0xd0000001);
15618 y = y*1103515245 + 12345;
15619 r = x ^ y;
15620 *(int*)pBuf = r;
15621 pBuf += 4;
15622 nByte -= 4;
15624 while( nByte-- > 0 ){
15625 x = (x>>1) ^ (-(x&1) & 0xd0000001);
15626 y = y*1103515245 + 12345;
15627 r = x ^ y;
15628 *(pBuf++) = r & 0xff;
15633 ** Allocate nByte bytes of memory.
15635 static void *sqlite3MemMalloc(int nByte){
15636 struct MemBlockHdr *pHdr;
15637 void **pBt;
15638 char *z;
15639 int *pInt;
15640 void *p = 0;
15641 int totalSize;
15642 int nReserve;
15643 sqlite3_mutex_enter(mem.mutex);
15644 assert( mem.disallow==0 );
15645 nReserve = ROUND8(nByte);
15646 totalSize = nReserve + sizeof(*pHdr) + sizeof(int) +
15647 mem.nBacktrace*sizeof(void*) + mem.nTitle;
15648 p = malloc(totalSize);
15649 if( p ){
15650 z = p;
15651 pBt = (void**)&z[mem.nTitle];
15652 pHdr = (struct MemBlockHdr*)&pBt[mem.nBacktrace];
15653 pHdr->pNext = 0;
15654 pHdr->pPrev = mem.pLast;
15655 if( mem.pLast ){
15656 mem.pLast->pNext = pHdr;
15657 }else{
15658 mem.pFirst = pHdr;
15660 mem.pLast = pHdr;
15661 pHdr->iForeGuard = FOREGUARD;
15662 pHdr->eType = MEMTYPE_HEAP;
15663 pHdr->nBacktraceSlots = mem.nBacktrace;
15664 pHdr->nTitle = mem.nTitle;
15665 if( mem.nBacktrace ){
15666 void *aAddr[40];
15667 pHdr->nBacktrace = backtrace(aAddr, mem.nBacktrace+1)-1;
15668 memcpy(pBt, &aAddr[1], pHdr->nBacktrace*sizeof(void*));
15669 assert(pBt[0]);
15670 if( mem.xBacktrace ){
15671 mem.xBacktrace(nByte, pHdr->nBacktrace-1, &aAddr[1]);
15673 }else{
15674 pHdr->nBacktrace = 0;
15676 if( mem.nTitle ){
15677 memcpy(z, mem.zTitle, mem.nTitle);
15679 pHdr->iSize = nByte;
15680 adjustStats(nByte, +1);
15681 pInt = (int*)&pHdr[1];
15682 pInt[nReserve/sizeof(int)] = REARGUARD;
15683 randomFill((char*)pInt, nByte);
15684 memset(((char*)pInt)+nByte, 0x65, nReserve-nByte);
15685 p = (void*)pInt;
15687 sqlite3_mutex_leave(mem.mutex);
15688 return p;
15692 ** Free memory.
15694 static void sqlite3MemFree(void *pPrior){
15695 struct MemBlockHdr *pHdr;
15696 void **pBt;
15697 char *z;
15698 assert( sqlite3GlobalConfig.bMemstat || sqlite3GlobalConfig.bCoreMutex==0
15699 || mem.mutex!=0 );
15700 pHdr = sqlite3MemsysGetHeader(pPrior);
15701 pBt = (void**)pHdr;
15702 pBt -= pHdr->nBacktraceSlots;
15703 sqlite3_mutex_enter(mem.mutex);
15704 if( pHdr->pPrev ){
15705 assert( pHdr->pPrev->pNext==pHdr );
15706 pHdr->pPrev->pNext = pHdr->pNext;
15707 }else{
15708 assert( mem.pFirst==pHdr );
15709 mem.pFirst = pHdr->pNext;
15711 if( pHdr->pNext ){
15712 assert( pHdr->pNext->pPrev==pHdr );
15713 pHdr->pNext->pPrev = pHdr->pPrev;
15714 }else{
15715 assert( mem.pLast==pHdr );
15716 mem.pLast = pHdr->pPrev;
15718 z = (char*)pBt;
15719 z -= pHdr->nTitle;
15720 adjustStats(pHdr->iSize, -1);
15721 randomFill(z, sizeof(void*)*pHdr->nBacktraceSlots + sizeof(*pHdr) +
15722 pHdr->iSize + sizeof(int) + pHdr->nTitle);
15723 free(z);
15724 sqlite3_mutex_leave(mem.mutex);
15728 ** Change the size of an existing memory allocation.
15730 ** For this debugging implementation, we *always* make a copy of the
15731 ** allocation into a new place in memory. In this way, if the
15732 ** higher level code is using pointer to the old allocation, it is
15733 ** much more likely to break and we are much more liking to find
15734 ** the error.
15736 static void *sqlite3MemRealloc(void *pPrior, int nByte){
15737 struct MemBlockHdr *pOldHdr;
15738 void *pNew;
15739 assert( mem.disallow==0 );
15740 assert( (nByte & 7)==0 ); /* EV: R-46199-30249 */
15741 pOldHdr = sqlite3MemsysGetHeader(pPrior);
15742 pNew = sqlite3MemMalloc(nByte);
15743 if( pNew ){
15744 memcpy(pNew, pPrior, nByte<pOldHdr->iSize ? nByte : pOldHdr->iSize);
15745 if( nByte>pOldHdr->iSize ){
15746 randomFill(&((char*)pNew)[pOldHdr->iSize], nByte - pOldHdr->iSize);
15748 sqlite3MemFree(pPrior);
15750 return pNew;
15754 ** Populate the low-level memory allocation function pointers in
15755 ** sqlite3GlobalConfig.m with pointers to the routines in this file.
15757 SQLITE_PRIVATE void sqlite3MemSetDefault(void){
15758 static const sqlite3_mem_methods defaultMethods = {
15759 sqlite3MemMalloc,
15760 sqlite3MemFree,
15761 sqlite3MemRealloc,
15762 sqlite3MemSize,
15763 sqlite3MemRoundup,
15764 sqlite3MemInit,
15765 sqlite3MemShutdown,
15768 sqlite3_config(SQLITE_CONFIG_MALLOC, &defaultMethods);
15772 ** Set the "type" of an allocation.
15774 SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){
15775 if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
15776 struct MemBlockHdr *pHdr;
15777 pHdr = sqlite3MemsysGetHeader(p);
15778 assert( pHdr->iForeGuard==FOREGUARD );
15779 pHdr->eType = eType;
15784 ** Return TRUE if the mask of type in eType matches the type of the
15785 ** allocation p. Also return true if p==NULL.
15787 ** This routine is designed for use within an assert() statement, to
15788 ** verify the type of an allocation. For example:
15790 ** assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
15792 SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
15793 int rc = 1;
15794 if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
15795 struct MemBlockHdr *pHdr;
15796 pHdr = sqlite3MemsysGetHeader(p);
15797 assert( pHdr->iForeGuard==FOREGUARD ); /* Allocation is valid */
15798 if( (pHdr->eType&eType)==0 ){
15799 rc = 0;
15802 return rc;
15806 ** Return TRUE if the mask of type in eType matches no bits of the type of the
15807 ** allocation p. Also return true if p==NULL.
15809 ** This routine is designed for use within an assert() statement, to
15810 ** verify the type of an allocation. For example:
15812 ** assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
15814 SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){
15815 int rc = 1;
15816 if( p && sqlite3GlobalConfig.m.xMalloc==sqlite3MemMalloc ){
15817 struct MemBlockHdr *pHdr;
15818 pHdr = sqlite3MemsysGetHeader(p);
15819 assert( pHdr->iForeGuard==FOREGUARD ); /* Allocation is valid */
15820 if( (pHdr->eType&eType)!=0 ){
15821 rc = 0;
15824 return rc;
15828 ** Set the number of backtrace levels kept for each allocation.
15829 ** A value of zero turns off backtracing. The number is always rounded
15830 ** up to a multiple of 2.
15832 SQLITE_PRIVATE void sqlite3MemdebugBacktrace(int depth){
15833 if( depth<0 ){ depth = 0; }
15834 if( depth>20 ){ depth = 20; }
15835 depth = (depth+1)&0xfe;
15836 mem.nBacktrace = depth;
15839 SQLITE_PRIVATE void sqlite3MemdebugBacktraceCallback(void (*xBacktrace)(int, int, void **)){
15840 mem.xBacktrace = xBacktrace;
15844 ** Set the title string for subsequent allocations.
15846 SQLITE_PRIVATE void sqlite3MemdebugSettitle(const char *zTitle){
15847 unsigned int n = sqlite3Strlen30(zTitle) + 1;
15848 sqlite3_mutex_enter(mem.mutex);
15849 if( n>=sizeof(mem.zTitle) ) n = sizeof(mem.zTitle)-1;
15850 memcpy(mem.zTitle, zTitle, n);
15851 mem.zTitle[n] = 0;
15852 mem.nTitle = ROUND8(n);
15853 sqlite3_mutex_leave(mem.mutex);
15856 SQLITE_PRIVATE void sqlite3MemdebugSync(){
15857 struct MemBlockHdr *pHdr;
15858 for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
15859 void **pBt = (void**)pHdr;
15860 pBt -= pHdr->nBacktraceSlots;
15861 mem.xBacktrace(pHdr->iSize, pHdr->nBacktrace-1, &pBt[1]);
15866 ** Open the file indicated and write a log of all unfreed memory
15867 ** allocations into that log.
15869 SQLITE_PRIVATE void sqlite3MemdebugDump(const char *zFilename){
15870 FILE *out;
15871 struct MemBlockHdr *pHdr;
15872 void **pBt;
15873 int i;
15874 out = fopen(zFilename, "w");
15875 if( out==0 ){
15876 fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
15877 zFilename);
15878 return;
15880 for(pHdr=mem.pFirst; pHdr; pHdr=pHdr->pNext){
15881 char *z = (char*)pHdr;
15882 z -= pHdr->nBacktraceSlots*sizeof(void*) + pHdr->nTitle;
15883 fprintf(out, "**** %lld bytes at %p from %s ****\n",
15884 pHdr->iSize, &pHdr[1], pHdr->nTitle ? z : "???");
15885 if( pHdr->nBacktrace ){
15886 fflush(out);
15887 pBt = (void**)pHdr;
15888 pBt -= pHdr->nBacktraceSlots;
15889 backtrace_symbols_fd(pBt, pHdr->nBacktrace, fileno(out));
15890 fprintf(out, "\n");
15893 fprintf(out, "COUNTS:\n");
15894 for(i=0; i<NCSIZE-1; i++){
15895 if( mem.nAlloc[i] ){
15896 fprintf(out, " %5d: %10d %10d %10d\n",
15897 i*8, mem.nAlloc[i], mem.nCurrent[i], mem.mxCurrent[i]);
15900 if( mem.nAlloc[NCSIZE-1] ){
15901 fprintf(out, " %5d: %10d %10d %10d\n",
15902 NCSIZE*8-8, mem.nAlloc[NCSIZE-1],
15903 mem.nCurrent[NCSIZE-1], mem.mxCurrent[NCSIZE-1]);
15905 fclose(out);
15909 ** Return the number of times sqlite3MemMalloc() has been called.
15911 SQLITE_PRIVATE int sqlite3MemdebugMallocCount(){
15912 int i;
15913 int nTotal = 0;
15914 for(i=0; i<NCSIZE; i++){
15915 nTotal += mem.nAlloc[i];
15917 return nTotal;
15921 #endif /* SQLITE_MEMDEBUG */
15923 /************** End of mem2.c ************************************************/
15924 /************** Begin file mem3.c ********************************************/
15926 ** 2007 October 14
15928 ** The author disclaims copyright to this source code. In place of
15929 ** a legal notice, here is a blessing:
15931 ** May you do good and not evil.
15932 ** May you find forgiveness for yourself and forgive others.
15933 ** May you share freely, never taking more than you give.
15935 *************************************************************************
15936 ** This file contains the C functions that implement a memory
15937 ** allocation subsystem for use by SQLite.
15939 ** This version of the memory allocation subsystem omits all
15940 ** use of malloc(). The SQLite user supplies a block of memory
15941 ** before calling sqlite3_initialize() from which allocations
15942 ** are made and returned by the xMalloc() and xRealloc()
15943 ** implementations. Once sqlite3_initialize() has been called,
15944 ** the amount of memory available to SQLite is fixed and cannot
15945 ** be changed.
15947 ** This version of the memory allocation subsystem is included
15948 ** in the build only if SQLITE_ENABLE_MEMSYS3 is defined.
15952 ** This version of the memory allocator is only built into the library
15953 ** SQLITE_ENABLE_MEMSYS3 is defined. Defining this symbol does not
15954 ** mean that the library will use a memory-pool by default, just that
15955 ** it is available. The mempool allocator is activated by calling
15956 ** sqlite3_config().
15958 #ifdef SQLITE_ENABLE_MEMSYS3
15961 ** Maximum size (in Mem3Blocks) of a "small" chunk.
15963 #define MX_SMALL 10
15967 ** Number of freelist hash slots
15969 #define N_HASH 61
15972 ** A memory allocation (also called a "chunk") consists of two or
15973 ** more blocks where each block is 8 bytes. The first 8 bytes are
15974 ** a header that is not returned to the user.
15976 ** A chunk is two or more blocks that is either checked out or
15977 ** free. The first block has format u.hdr. u.hdr.size4x is 4 times the
15978 ** size of the allocation in blocks if the allocation is free.
15979 ** The u.hdr.size4x&1 bit is true if the chunk is checked out and
15980 ** false if the chunk is on the freelist. The u.hdr.size4x&2 bit
15981 ** is true if the previous chunk is checked out and false if the
15982 ** previous chunk is free. The u.hdr.prevSize field is the size of
15983 ** the previous chunk in blocks if the previous chunk is on the
15984 ** freelist. If the previous chunk is checked out, then
15985 ** u.hdr.prevSize can be part of the data for that chunk and should
15986 ** not be read or written.
15988 ** We often identify a chunk by its index in mem3.aPool[]. When
15989 ** this is done, the chunk index refers to the second block of
15990 ** the chunk. In this way, the first chunk has an index of 1.
15991 ** A chunk index of 0 means "no such chunk" and is the equivalent
15992 ** of a NULL pointer.
15994 ** The second block of free chunks is of the form u.list. The
15995 ** two fields form a double-linked list of chunks of related sizes.
15996 ** Pointers to the head of the list are stored in mem3.aiSmall[]
15997 ** for smaller chunks and mem3.aiHash[] for larger chunks.
15999 ** The second block of a chunk is user data if the chunk is checked
16000 ** out. If a chunk is checked out, the user data may extend into
16001 ** the u.hdr.prevSize value of the following chunk.
16003 typedef struct Mem3Block Mem3Block;
16004 struct Mem3Block {
16005 union {
16006 struct {
16007 u32 prevSize; /* Size of previous chunk in Mem3Block elements */
16008 u32 size4x; /* 4x the size of current chunk in Mem3Block elements */
16009 } hdr;
16010 struct {
16011 u32 next; /* Index in mem3.aPool[] of next free chunk */
16012 u32 prev; /* Index in mem3.aPool[] of previous free chunk */
16013 } list;
16014 } u;
16018 ** All of the static variables used by this module are collected
16019 ** into a single structure named "mem3". This is to keep the
16020 ** static variables organized and to reduce namespace pollution
16021 ** when this module is combined with other in the amalgamation.
16023 static SQLITE_WSD struct Mem3Global {
16025 ** Memory available for allocation. nPool is the size of the array
16026 ** (in Mem3Blocks) pointed to by aPool less 2.
16028 u32 nPool;
16029 Mem3Block *aPool;
16032 ** True if we are evaluating an out-of-memory callback.
16034 int alarmBusy;
16037 ** Mutex to control access to the memory allocation subsystem.
16039 sqlite3_mutex *mutex;
16042 ** The minimum amount of free space that we have seen.
16044 u32 mnMaster;
16047 ** iMaster is the index of the master chunk. Most new allocations
16048 ** occur off of this chunk. szMaster is the size (in Mem3Blocks)
16049 ** of the current master. iMaster is 0 if there is not master chunk.
16050 ** The master chunk is not in either the aiHash[] or aiSmall[].
16052 u32 iMaster;
16053 u32 szMaster;
16056 ** Array of lists of free blocks according to the block size
16057 ** for smaller chunks, or a hash on the block size for larger
16058 ** chunks.
16060 u32 aiSmall[MX_SMALL-1]; /* For sizes 2 through MX_SMALL, inclusive */
16061 u32 aiHash[N_HASH]; /* For sizes MX_SMALL+1 and larger */
16062 } mem3 = { 97535575 };
16064 #define mem3 GLOBAL(struct Mem3Global, mem3)
16067 ** Unlink the chunk at mem3.aPool[i] from list it is currently
16068 ** on. *pRoot is the list that i is a member of.
16070 static void memsys3UnlinkFromList(u32 i, u32 *pRoot){
16071 u32 next = mem3.aPool[i].u.list.next;
16072 u32 prev = mem3.aPool[i].u.list.prev;
16073 assert( sqlite3_mutex_held(mem3.mutex) );
16074 if( prev==0 ){
16075 *pRoot = next;
16076 }else{
16077 mem3.aPool[prev].u.list.next = next;
16079 if( next ){
16080 mem3.aPool[next].u.list.prev = prev;
16082 mem3.aPool[i].u.list.next = 0;
16083 mem3.aPool[i].u.list.prev = 0;
16087 ** Unlink the chunk at index i from
16088 ** whatever list is currently a member of.
16090 static void memsys3Unlink(u32 i){
16091 u32 size, hash;
16092 assert( sqlite3_mutex_held(mem3.mutex) );
16093 assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
16094 assert( i>=1 );
16095 size = mem3.aPool[i-1].u.hdr.size4x/4;
16096 assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
16097 assert( size>=2 );
16098 if( size <= MX_SMALL ){
16099 memsys3UnlinkFromList(i, &mem3.aiSmall[size-2]);
16100 }else{
16101 hash = size % N_HASH;
16102 memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
16107 ** Link the chunk at mem3.aPool[i] so that is on the list rooted
16108 ** at *pRoot.
16110 static void memsys3LinkIntoList(u32 i, u32 *pRoot){
16111 assert( sqlite3_mutex_held(mem3.mutex) );
16112 mem3.aPool[i].u.list.next = *pRoot;
16113 mem3.aPool[i].u.list.prev = 0;
16114 if( *pRoot ){
16115 mem3.aPool[*pRoot].u.list.prev = i;
16117 *pRoot = i;
16121 ** Link the chunk at index i into either the appropriate
16122 ** small chunk list, or into the large chunk hash table.
16124 static void memsys3Link(u32 i){
16125 u32 size, hash;
16126 assert( sqlite3_mutex_held(mem3.mutex) );
16127 assert( i>=1 );
16128 assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 );
16129 size = mem3.aPool[i-1].u.hdr.size4x/4;
16130 assert( size==mem3.aPool[i+size-1].u.hdr.prevSize );
16131 assert( size>=2 );
16132 if( size <= MX_SMALL ){
16133 memsys3LinkIntoList(i, &mem3.aiSmall[size-2]);
16134 }else{
16135 hash = size % N_HASH;
16136 memsys3LinkIntoList(i, &mem3.aiHash[hash]);
16141 ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
16142 ** will already be held (obtained by code in malloc.c) if
16143 ** sqlite3GlobalConfig.bMemStat is true.
16145 static void memsys3Enter(void){
16146 if( sqlite3GlobalConfig.bMemstat==0 && mem3.mutex==0 ){
16147 mem3.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
16149 sqlite3_mutex_enter(mem3.mutex);
16151 static void memsys3Leave(void){
16152 sqlite3_mutex_leave(mem3.mutex);
16156 ** Called when we are unable to satisfy an allocation of nBytes.
16158 static void memsys3OutOfMemory(int nByte){
16159 if( !mem3.alarmBusy ){
16160 mem3.alarmBusy = 1;
16161 assert( sqlite3_mutex_held(mem3.mutex) );
16162 sqlite3_mutex_leave(mem3.mutex);
16163 sqlite3_release_memory(nByte);
16164 sqlite3_mutex_enter(mem3.mutex);
16165 mem3.alarmBusy = 0;
16171 ** Chunk i is a free chunk that has been unlinked. Adjust its
16172 ** size parameters for check-out and return a pointer to the
16173 ** user portion of the chunk.
16175 static void *memsys3Checkout(u32 i, u32 nBlock){
16176 u32 x;
16177 assert( sqlite3_mutex_held(mem3.mutex) );
16178 assert( i>=1 );
16179 assert( mem3.aPool[i-1].u.hdr.size4x/4==nBlock );
16180 assert( mem3.aPool[i+nBlock-1].u.hdr.prevSize==nBlock );
16181 x = mem3.aPool[i-1].u.hdr.size4x;
16182 mem3.aPool[i-1].u.hdr.size4x = nBlock*4 | 1 | (x&2);
16183 mem3.aPool[i+nBlock-1].u.hdr.prevSize = nBlock;
16184 mem3.aPool[i+nBlock-1].u.hdr.size4x |= 2;
16185 return &mem3.aPool[i];
16189 ** Carve a piece off of the end of the mem3.iMaster free chunk.
16190 ** Return a pointer to the new allocation. Or, if the master chunk
16191 ** is not large enough, return 0.
16193 static void *memsys3FromMaster(u32 nBlock){
16194 assert( sqlite3_mutex_held(mem3.mutex) );
16195 assert( mem3.szMaster>=nBlock );
16196 if( nBlock>=mem3.szMaster-1 ){
16197 /* Use the entire master */
16198 void *p = memsys3Checkout(mem3.iMaster, mem3.szMaster);
16199 mem3.iMaster = 0;
16200 mem3.szMaster = 0;
16201 mem3.mnMaster = 0;
16202 return p;
16203 }else{
16204 /* Split the master block. Return the tail. */
16205 u32 newi, x;
16206 newi = mem3.iMaster + mem3.szMaster - nBlock;
16207 assert( newi > mem3.iMaster+1 );
16208 mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = nBlock;
16209 mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x |= 2;
16210 mem3.aPool[newi-1].u.hdr.size4x = nBlock*4 + 1;
16211 mem3.szMaster -= nBlock;
16212 mem3.aPool[newi-1].u.hdr.prevSize = mem3.szMaster;
16213 x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
16214 mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
16215 if( mem3.szMaster < mem3.mnMaster ){
16216 mem3.mnMaster = mem3.szMaster;
16218 return (void*)&mem3.aPool[newi];
16223 ** *pRoot is the head of a list of free chunks of the same size
16224 ** or same size hash. In other words, *pRoot is an entry in either
16225 ** mem3.aiSmall[] or mem3.aiHash[].
16227 ** This routine examines all entries on the given list and tries
16228 ** to coalesce each entries with adjacent free chunks.
16230 ** If it sees a chunk that is larger than mem3.iMaster, it replaces
16231 ** the current mem3.iMaster with the new larger chunk. In order for
16232 ** this mem3.iMaster replacement to work, the master chunk must be
16233 ** linked into the hash tables. That is not the normal state of
16234 ** affairs, of course. The calling routine must link the master
16235 ** chunk before invoking this routine, then must unlink the (possibly
16236 ** changed) master chunk once this routine has finished.
16238 static void memsys3Merge(u32 *pRoot){
16239 u32 iNext, prev, size, i, x;
16241 assert( sqlite3_mutex_held(mem3.mutex) );
16242 for(i=*pRoot; i>0; i=iNext){
16243 iNext = mem3.aPool[i].u.list.next;
16244 size = mem3.aPool[i-1].u.hdr.size4x;
16245 assert( (size&1)==0 );
16246 if( (size&2)==0 ){
16247 memsys3UnlinkFromList(i, pRoot);
16248 assert( i > mem3.aPool[i-1].u.hdr.prevSize );
16249 prev = i - mem3.aPool[i-1].u.hdr.prevSize;
16250 if( prev==iNext ){
16251 iNext = mem3.aPool[prev].u.list.next;
16253 memsys3Unlink(prev);
16254 size = i + size/4 - prev;
16255 x = mem3.aPool[prev-1].u.hdr.size4x & 2;
16256 mem3.aPool[prev-1].u.hdr.size4x = size*4 | x;
16257 mem3.aPool[prev+size-1].u.hdr.prevSize = size;
16258 memsys3Link(prev);
16259 i = prev;
16260 }else{
16261 size /= 4;
16263 if( size>mem3.szMaster ){
16264 mem3.iMaster = i;
16265 mem3.szMaster = size;
16271 ** Return a block of memory of at least nBytes in size.
16272 ** Return NULL if unable.
16274 ** This function assumes that the necessary mutexes, if any, are
16275 ** already held by the caller. Hence "Unsafe".
16277 static void *memsys3MallocUnsafe(int nByte){
16278 u32 i;
16279 u32 nBlock;
16280 u32 toFree;
16282 assert( sqlite3_mutex_held(mem3.mutex) );
16283 assert( sizeof(Mem3Block)==8 );
16284 if( nByte<=12 ){
16285 nBlock = 2;
16286 }else{
16287 nBlock = (nByte + 11)/8;
16289 assert( nBlock>=2 );
16291 /* STEP 1:
16292 ** Look for an entry of the correct size in either the small
16293 ** chunk table or in the large chunk hash table. This is
16294 ** successful most of the time (about 9 times out of 10).
16296 if( nBlock <= MX_SMALL ){
16297 i = mem3.aiSmall[nBlock-2];
16298 if( i>0 ){
16299 memsys3UnlinkFromList(i, &mem3.aiSmall[nBlock-2]);
16300 return memsys3Checkout(i, nBlock);
16302 }else{
16303 int hash = nBlock % N_HASH;
16304 for(i=mem3.aiHash[hash]; i>0; i=mem3.aPool[i].u.list.next){
16305 if( mem3.aPool[i-1].u.hdr.size4x/4==nBlock ){
16306 memsys3UnlinkFromList(i, &mem3.aiHash[hash]);
16307 return memsys3Checkout(i, nBlock);
16312 /* STEP 2:
16313 ** Try to satisfy the allocation by carving a piece off of the end
16314 ** of the master chunk. This step usually works if step 1 fails.
16316 if( mem3.szMaster>=nBlock ){
16317 return memsys3FromMaster(nBlock);
16321 /* STEP 3:
16322 ** Loop through the entire memory pool. Coalesce adjacent free
16323 ** chunks. Recompute the master chunk as the largest free chunk.
16324 ** Then try again to satisfy the allocation by carving a piece off
16325 ** of the end of the master chunk. This step happens very
16326 ** rarely (we hope!)
16328 for(toFree=nBlock*16; toFree<(mem3.nPool*16); toFree *= 2){
16329 memsys3OutOfMemory(toFree);
16330 if( mem3.iMaster ){
16331 memsys3Link(mem3.iMaster);
16332 mem3.iMaster = 0;
16333 mem3.szMaster = 0;
16335 for(i=0; i<N_HASH; i++){
16336 memsys3Merge(&mem3.aiHash[i]);
16338 for(i=0; i<MX_SMALL-1; i++){
16339 memsys3Merge(&mem3.aiSmall[i]);
16341 if( mem3.szMaster ){
16342 memsys3Unlink(mem3.iMaster);
16343 if( mem3.szMaster>=nBlock ){
16344 return memsys3FromMaster(nBlock);
16349 /* If none of the above worked, then we fail. */
16350 return 0;
16354 ** Free an outstanding memory allocation.
16356 ** This function assumes that the necessary mutexes, if any, are
16357 ** already held by the caller. Hence "Unsafe".
16359 static void memsys3FreeUnsafe(void *pOld){
16360 Mem3Block *p = (Mem3Block*)pOld;
16361 int i;
16362 u32 size, x;
16363 assert( sqlite3_mutex_held(mem3.mutex) );
16364 assert( p>mem3.aPool && p<&mem3.aPool[mem3.nPool] );
16365 i = p - mem3.aPool;
16366 assert( (mem3.aPool[i-1].u.hdr.size4x&1)==1 );
16367 size = mem3.aPool[i-1].u.hdr.size4x/4;
16368 assert( i+size<=mem3.nPool+1 );
16369 mem3.aPool[i-1].u.hdr.size4x &= ~1;
16370 mem3.aPool[i+size-1].u.hdr.prevSize = size;
16371 mem3.aPool[i+size-1].u.hdr.size4x &= ~2;
16372 memsys3Link(i);
16374 /* Try to expand the master using the newly freed chunk */
16375 if( mem3.iMaster ){
16376 while( (mem3.aPool[mem3.iMaster-1].u.hdr.size4x&2)==0 ){
16377 size = mem3.aPool[mem3.iMaster-1].u.hdr.prevSize;
16378 mem3.iMaster -= size;
16379 mem3.szMaster += size;
16380 memsys3Unlink(mem3.iMaster);
16381 x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
16382 mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
16383 mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
16385 x = mem3.aPool[mem3.iMaster-1].u.hdr.size4x & 2;
16386 while( (mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x&1)==0 ){
16387 memsys3Unlink(mem3.iMaster+mem3.szMaster);
16388 mem3.szMaster += mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.size4x/4;
16389 mem3.aPool[mem3.iMaster-1].u.hdr.size4x = mem3.szMaster*4 | x;
16390 mem3.aPool[mem3.iMaster+mem3.szMaster-1].u.hdr.prevSize = mem3.szMaster;
16396 ** Return the size of an outstanding allocation, in bytes. The
16397 ** size returned omits the 8-byte header overhead. This only
16398 ** works for chunks that are currently checked out.
16400 static int memsys3Size(void *p){
16401 Mem3Block *pBlock;
16402 if( p==0 ) return 0;
16403 pBlock = (Mem3Block*)p;
16404 assert( (pBlock[-1].u.hdr.size4x&1)!=0 );
16405 return (pBlock[-1].u.hdr.size4x&~3)*2 - 4;
16409 ** Round up a request size to the next valid allocation size.
16411 static int memsys3Roundup(int n){
16412 if( n<=12 ){
16413 return 12;
16414 }else{
16415 return ((n+11)&~7) - 4;
16420 ** Allocate nBytes of memory.
16422 static void *memsys3Malloc(int nBytes){
16423 sqlite3_int64 *p;
16424 assert( nBytes>0 ); /* malloc.c filters out 0 byte requests */
16425 memsys3Enter();
16426 p = memsys3MallocUnsafe(nBytes);
16427 memsys3Leave();
16428 return (void*)p;
16432 ** Free memory.
16434 static void memsys3Free(void *pPrior){
16435 assert( pPrior );
16436 memsys3Enter();
16437 memsys3FreeUnsafe(pPrior);
16438 memsys3Leave();
16442 ** Change the size of an existing memory allocation
16444 static void *memsys3Realloc(void *pPrior, int nBytes){
16445 int nOld;
16446 void *p;
16447 if( pPrior==0 ){
16448 return sqlite3_malloc(nBytes);
16450 if( nBytes<=0 ){
16451 sqlite3_free(pPrior);
16452 return 0;
16454 nOld = memsys3Size(pPrior);
16455 if( nBytes<=nOld && nBytes>=nOld-128 ){
16456 return pPrior;
16458 memsys3Enter();
16459 p = memsys3MallocUnsafe(nBytes);
16460 if( p ){
16461 if( nOld<nBytes ){
16462 memcpy(p, pPrior, nOld);
16463 }else{
16464 memcpy(p, pPrior, nBytes);
16466 memsys3FreeUnsafe(pPrior);
16468 memsys3Leave();
16469 return p;
16473 ** Initialize this module.
16475 static int memsys3Init(void *NotUsed){
16476 UNUSED_PARAMETER(NotUsed);
16477 if( !sqlite3GlobalConfig.pHeap ){
16478 return SQLITE_ERROR;
16481 /* Store a pointer to the memory block in global structure mem3. */
16482 assert( sizeof(Mem3Block)==8 );
16483 mem3.aPool = (Mem3Block *)sqlite3GlobalConfig.pHeap;
16484 mem3.nPool = (sqlite3GlobalConfig.nHeap / sizeof(Mem3Block)) - 2;
16486 /* Initialize the master block. */
16487 mem3.szMaster = mem3.nPool;
16488 mem3.mnMaster = mem3.szMaster;
16489 mem3.iMaster = 1;
16490 mem3.aPool[0].u.hdr.size4x = (mem3.szMaster<<2) + 2;
16491 mem3.aPool[mem3.nPool].u.hdr.prevSize = mem3.nPool;
16492 mem3.aPool[mem3.nPool].u.hdr.size4x = 1;
16494 return SQLITE_OK;
16498 ** Deinitialize this module.
16500 static void memsys3Shutdown(void *NotUsed){
16501 UNUSED_PARAMETER(NotUsed);
16502 mem3.mutex = 0;
16503 return;
16509 ** Open the file indicated and write a log of all unfreed memory
16510 ** allocations into that log.
16512 SQLITE_PRIVATE void sqlite3Memsys3Dump(const char *zFilename){
16513 #ifdef SQLITE_DEBUG
16514 FILE *out;
16515 u32 i, j;
16516 u32 size;
16517 if( zFilename==0 || zFilename[0]==0 ){
16518 out = stdout;
16519 }else{
16520 out = fopen(zFilename, "w");
16521 if( out==0 ){
16522 fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
16523 zFilename);
16524 return;
16527 memsys3Enter();
16528 fprintf(out, "CHUNKS:\n");
16529 for(i=1; i<=mem3.nPool; i+=size/4){
16530 size = mem3.aPool[i-1].u.hdr.size4x;
16531 if( size/4<=1 ){
16532 fprintf(out, "%p size error\n", &mem3.aPool[i]);
16533 assert( 0 );
16534 break;
16536 if( (size&1)==0 && mem3.aPool[i+size/4-1].u.hdr.prevSize!=size/4 ){
16537 fprintf(out, "%p tail size does not match\n", &mem3.aPool[i]);
16538 assert( 0 );
16539 break;
16541 if( ((mem3.aPool[i+size/4-1].u.hdr.size4x&2)>>1)!=(size&1) ){
16542 fprintf(out, "%p tail checkout bit is incorrect\n", &mem3.aPool[i]);
16543 assert( 0 );
16544 break;
16546 if( size&1 ){
16547 fprintf(out, "%p %6d bytes checked out\n", &mem3.aPool[i], (size/4)*8-8);
16548 }else{
16549 fprintf(out, "%p %6d bytes free%s\n", &mem3.aPool[i], (size/4)*8-8,
16550 i==mem3.iMaster ? " **master**" : "");
16553 for(i=0; i<MX_SMALL-1; i++){
16554 if( mem3.aiSmall[i]==0 ) continue;
16555 fprintf(out, "small(%2d):", i);
16556 for(j = mem3.aiSmall[i]; j>0; j=mem3.aPool[j].u.list.next){
16557 fprintf(out, " %p(%d)", &mem3.aPool[j],
16558 (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
16560 fprintf(out, "\n");
16562 for(i=0; i<N_HASH; i++){
16563 if( mem3.aiHash[i]==0 ) continue;
16564 fprintf(out, "hash(%2d):", i);
16565 for(j = mem3.aiHash[i]; j>0; j=mem3.aPool[j].u.list.next){
16566 fprintf(out, " %p(%d)", &mem3.aPool[j],
16567 (mem3.aPool[j-1].u.hdr.size4x/4)*8-8);
16569 fprintf(out, "\n");
16571 fprintf(out, "master=%d\n", mem3.iMaster);
16572 fprintf(out, "nowUsed=%d\n", mem3.nPool*8 - mem3.szMaster*8);
16573 fprintf(out, "mxUsed=%d\n", mem3.nPool*8 - mem3.mnMaster*8);
16574 sqlite3_mutex_leave(mem3.mutex);
16575 if( out==stdout ){
16576 fflush(stdout);
16577 }else{
16578 fclose(out);
16580 #else
16581 UNUSED_PARAMETER(zFilename);
16582 #endif
16586 ** This routine is the only routine in this file with external
16587 ** linkage.
16589 ** Populate the low-level memory allocation function pointers in
16590 ** sqlite3GlobalConfig.m with pointers to the routines in this file. The
16591 ** arguments specify the block of memory to manage.
16593 ** This routine is only called by sqlite3_config(), and therefore
16594 ** is not required to be threadsafe (it is not).
16596 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){
16597 static const sqlite3_mem_methods mempoolMethods = {
16598 memsys3Malloc,
16599 memsys3Free,
16600 memsys3Realloc,
16601 memsys3Size,
16602 memsys3Roundup,
16603 memsys3Init,
16604 memsys3Shutdown,
16607 return &mempoolMethods;
16610 #endif /* SQLITE_ENABLE_MEMSYS3 */
16612 /************** End of mem3.c ************************************************/
16613 /************** Begin file mem5.c ********************************************/
16615 ** 2007 October 14
16617 ** The author disclaims copyright to this source code. In place of
16618 ** a legal notice, here is a blessing:
16620 ** May you do good and not evil.
16621 ** May you find forgiveness for yourself and forgive others.
16622 ** May you share freely, never taking more than you give.
16624 *************************************************************************
16625 ** This file contains the C functions that implement a memory
16626 ** allocation subsystem for use by SQLite.
16628 ** This version of the memory allocation subsystem omits all
16629 ** use of malloc(). The application gives SQLite a block of memory
16630 ** before calling sqlite3_initialize() from which allocations
16631 ** are made and returned by the xMalloc() and xRealloc()
16632 ** implementations. Once sqlite3_initialize() has been called,
16633 ** the amount of memory available to SQLite is fixed and cannot
16634 ** be changed.
16636 ** This version of the memory allocation subsystem is included
16637 ** in the build only if SQLITE_ENABLE_MEMSYS5 is defined.
16639 ** This memory allocator uses the following algorithm:
16641 ** 1. All memory allocations sizes are rounded up to a power of 2.
16643 ** 2. If two adjacent free blocks are the halves of a larger block,
16644 ** then the two blocks are coalesed into the single larger block.
16646 ** 3. New memory is allocated from the first available free block.
16648 ** This algorithm is described in: J. M. Robson. "Bounds for Some Functions
16649 ** Concerning Dynamic Storage Allocation". Journal of the Association for
16650 ** Computing Machinery, Volume 21, Number 8, July 1974, pages 491-499.
16652 ** Let n be the size of the largest allocation divided by the minimum
16653 ** allocation size (after rounding all sizes up to a power of 2.) Let M
16654 ** be the maximum amount of memory ever outstanding at one time. Let
16655 ** N be the total amount of memory available for allocation. Robson
16656 ** proved that this memory allocator will never breakdown due to
16657 ** fragmentation as long as the following constraint holds:
16659 ** N >= M*(1 + log2(n)/2) - n + 1
16661 ** The sqlite3_status() logic tracks the maximum values of n and M so
16662 ** that an application can, at any time, verify this constraint.
16666 ** This version of the memory allocator is used only when
16667 ** SQLITE_ENABLE_MEMSYS5 is defined.
16669 #ifdef SQLITE_ENABLE_MEMSYS5
16672 ** A minimum allocation is an instance of the following structure.
16673 ** Larger allocations are an array of these structures where the
16674 ** size of the array is a power of 2.
16676 ** The size of this object must be a power of two. That fact is
16677 ** verified in memsys5Init().
16679 typedef struct Mem5Link Mem5Link;
16680 struct Mem5Link {
16681 int next; /* Index of next free chunk */
16682 int prev; /* Index of previous free chunk */
16686 ** Maximum size of any allocation is ((1<<LOGMAX)*mem5.szAtom). Since
16687 ** mem5.szAtom is always at least 8 and 32-bit integers are used,
16688 ** it is not actually possible to reach this limit.
16690 #define LOGMAX 30
16693 ** Masks used for mem5.aCtrl[] elements.
16695 #define CTRL_LOGSIZE 0x1f /* Log2 Size of this block */
16696 #define CTRL_FREE 0x20 /* True if not checked out */
16699 ** All of the static variables used by this module are collected
16700 ** into a single structure named "mem5". This is to keep the
16701 ** static variables organized and to reduce namespace pollution
16702 ** when this module is combined with other in the amalgamation.
16704 static SQLITE_WSD struct Mem5Global {
16706 ** Memory available for allocation
16708 int szAtom; /* Smallest possible allocation in bytes */
16709 int nBlock; /* Number of szAtom sized blocks in zPool */
16710 u8 *zPool; /* Memory available to be allocated */
16713 ** Mutex to control access to the memory allocation subsystem.
16715 sqlite3_mutex *mutex;
16718 ** Performance statistics
16720 u64 nAlloc; /* Total number of calls to malloc */
16721 u64 totalAlloc; /* Total of all malloc calls - includes internal frag */
16722 u64 totalExcess; /* Total internal fragmentation */
16723 u32 currentOut; /* Current checkout, including internal fragmentation */
16724 u32 currentCount; /* Current number of distinct checkouts */
16725 u32 maxOut; /* Maximum instantaneous currentOut */
16726 u32 maxCount; /* Maximum instantaneous currentCount */
16727 u32 maxRequest; /* Largest allocation (exclusive of internal frag) */
16730 ** Lists of free blocks. aiFreelist[0] is a list of free blocks of
16731 ** size mem5.szAtom. aiFreelist[1] holds blocks of size szAtom*2.
16732 ** and so forth.
16734 int aiFreelist[LOGMAX+1];
16737 ** Space for tracking which blocks are checked out and the size
16738 ** of each block. One byte per block.
16740 u8 *aCtrl;
16742 } mem5;
16745 ** Access the static variable through a macro for SQLITE_OMIT_WSD
16747 #define mem5 GLOBAL(struct Mem5Global, mem5)
16750 ** Assuming mem5.zPool is divided up into an array of Mem5Link
16751 ** structures, return a pointer to the idx-th such lik.
16753 #define MEM5LINK(idx) ((Mem5Link *)(&mem5.zPool[(idx)*mem5.szAtom]))
16756 ** Unlink the chunk at mem5.aPool[i] from list it is currently
16757 ** on. It should be found on mem5.aiFreelist[iLogsize].
16759 static void memsys5Unlink(int i, int iLogsize){
16760 int next, prev;
16761 assert( i>=0 && i<mem5.nBlock );
16762 assert( iLogsize>=0 && iLogsize<=LOGMAX );
16763 assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
16765 next = MEM5LINK(i)->next;
16766 prev = MEM5LINK(i)->prev;
16767 if( prev<0 ){
16768 mem5.aiFreelist[iLogsize] = next;
16769 }else{
16770 MEM5LINK(prev)->next = next;
16772 if( next>=0 ){
16773 MEM5LINK(next)->prev = prev;
16778 ** Link the chunk at mem5.aPool[i] so that is on the iLogsize
16779 ** free list.
16781 static void memsys5Link(int i, int iLogsize){
16782 int x;
16783 assert( sqlite3_mutex_held(mem5.mutex) );
16784 assert( i>=0 && i<mem5.nBlock );
16785 assert( iLogsize>=0 && iLogsize<=LOGMAX );
16786 assert( (mem5.aCtrl[i] & CTRL_LOGSIZE)==iLogsize );
16788 x = MEM5LINK(i)->next = mem5.aiFreelist[iLogsize];
16789 MEM5LINK(i)->prev = -1;
16790 if( x>=0 ){
16791 assert( x<mem5.nBlock );
16792 MEM5LINK(x)->prev = i;
16794 mem5.aiFreelist[iLogsize] = i;
16798 ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex
16799 ** will already be held (obtained by code in malloc.c) if
16800 ** sqlite3GlobalConfig.bMemStat is true.
16802 static void memsys5Enter(void){
16803 sqlite3_mutex_enter(mem5.mutex);
16805 static void memsys5Leave(void){
16806 sqlite3_mutex_leave(mem5.mutex);
16810 ** Return the size of an outstanding allocation, in bytes. The
16811 ** size returned omits the 8-byte header overhead. This only
16812 ** works for chunks that are currently checked out.
16814 static int memsys5Size(void *p){
16815 int iSize = 0;
16816 if( p ){
16817 int i = ((u8 *)p-mem5.zPool)/mem5.szAtom;
16818 assert( i>=0 && i<mem5.nBlock );
16819 iSize = mem5.szAtom * (1 << (mem5.aCtrl[i]&CTRL_LOGSIZE));
16821 return iSize;
16825 ** Find the first entry on the freelist iLogsize. Unlink that
16826 ** entry and return its index.
16828 static int memsys5UnlinkFirst(int iLogsize){
16829 int i;
16830 int iFirst;
16832 assert( iLogsize>=0 && iLogsize<=LOGMAX );
16833 i = iFirst = mem5.aiFreelist[iLogsize];
16834 assert( iFirst>=0 );
16835 while( i>0 ){
16836 if( i<iFirst ) iFirst = i;
16837 i = MEM5LINK(i)->next;
16839 memsys5Unlink(iFirst, iLogsize);
16840 return iFirst;
16844 ** Return a block of memory of at least nBytes in size.
16845 ** Return NULL if unable. Return NULL if nBytes==0.
16847 ** The caller guarantees that nByte positive.
16849 ** The caller has obtained a mutex prior to invoking this
16850 ** routine so there is never any chance that two or more
16851 ** threads can be in this routine at the same time.
16853 static void *memsys5MallocUnsafe(int nByte){
16854 int i; /* Index of a mem5.aPool[] slot */
16855 int iBin; /* Index into mem5.aiFreelist[] */
16856 int iFullSz; /* Size of allocation rounded up to power of 2 */
16857 int iLogsize; /* Log2 of iFullSz/POW2_MIN */
16859 /* nByte must be a positive */
16860 assert( nByte>0 );
16862 /* Keep track of the maximum allocation request. Even unfulfilled
16863 ** requests are counted */
16864 if( (u32)nByte>mem5.maxRequest ){
16865 mem5.maxRequest = nByte;
16868 /* Abort if the requested allocation size is larger than the largest
16869 ** power of two that we can represent using 32-bit signed integers.
16871 if( nByte > 0x40000000 ){
16872 return 0;
16875 /* Round nByte up to the next valid power of two */
16876 for(iFullSz=mem5.szAtom, iLogsize=0; iFullSz<nByte; iFullSz *= 2, iLogsize++){}
16878 /* Make sure mem5.aiFreelist[iLogsize] contains at least one free
16879 ** block. If not, then split a block of the next larger power of
16880 ** two in order to create a new free block of size iLogsize.
16882 for(iBin=iLogsize; mem5.aiFreelist[iBin]<0 && iBin<=LOGMAX; iBin++){}
16883 if( iBin>LOGMAX ){
16884 testcase( sqlite3GlobalConfig.xLog!=0 );
16885 sqlite3_log(SQLITE_NOMEM, "failed to allocate %u bytes", nByte);
16886 return 0;
16888 i = memsys5UnlinkFirst(iBin);
16889 while( iBin>iLogsize ){
16890 int newSize;
16892 iBin--;
16893 newSize = 1 << iBin;
16894 mem5.aCtrl[i+newSize] = CTRL_FREE | iBin;
16895 memsys5Link(i+newSize, iBin);
16897 mem5.aCtrl[i] = iLogsize;
16899 /* Update allocator performance statistics. */
16900 mem5.nAlloc++;
16901 mem5.totalAlloc += iFullSz;
16902 mem5.totalExcess += iFullSz - nByte;
16903 mem5.currentCount++;
16904 mem5.currentOut += iFullSz;
16905 if( mem5.maxCount<mem5.currentCount ) mem5.maxCount = mem5.currentCount;
16906 if( mem5.maxOut<mem5.currentOut ) mem5.maxOut = mem5.currentOut;
16908 /* Return a pointer to the allocated memory. */
16909 return (void*)&mem5.zPool[i*mem5.szAtom];
16913 ** Free an outstanding memory allocation.
16915 static void memsys5FreeUnsafe(void *pOld){
16916 u32 size, iLogsize;
16917 int iBlock;
16919 /* Set iBlock to the index of the block pointed to by pOld in
16920 ** the array of mem5.szAtom byte blocks pointed to by mem5.zPool.
16922 iBlock = ((u8 *)pOld-mem5.zPool)/mem5.szAtom;
16924 /* Check that the pointer pOld points to a valid, non-free block. */
16925 assert( iBlock>=0 && iBlock<mem5.nBlock );
16926 assert( ((u8 *)pOld-mem5.zPool)%mem5.szAtom==0 );
16927 assert( (mem5.aCtrl[iBlock] & CTRL_FREE)==0 );
16929 iLogsize = mem5.aCtrl[iBlock] & CTRL_LOGSIZE;
16930 size = 1<<iLogsize;
16931 assert( iBlock+size-1<(u32)mem5.nBlock );
16933 mem5.aCtrl[iBlock] |= CTRL_FREE;
16934 mem5.aCtrl[iBlock+size-1] |= CTRL_FREE;
16935 assert( mem5.currentCount>0 );
16936 assert( mem5.currentOut>=(size*mem5.szAtom) );
16937 mem5.currentCount--;
16938 mem5.currentOut -= size*mem5.szAtom;
16939 assert( mem5.currentOut>0 || mem5.currentCount==0 );
16940 assert( mem5.currentCount>0 || mem5.currentOut==0 );
16942 mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
16943 while( ALWAYS(iLogsize<LOGMAX) ){
16944 int iBuddy;
16945 if( (iBlock>>iLogsize) & 1 ){
16946 iBuddy = iBlock - size;
16947 }else{
16948 iBuddy = iBlock + size;
16950 assert( iBuddy>=0 );
16951 if( (iBuddy+(1<<iLogsize))>mem5.nBlock ) break;
16952 if( mem5.aCtrl[iBuddy]!=(CTRL_FREE | iLogsize) ) break;
16953 memsys5Unlink(iBuddy, iLogsize);
16954 iLogsize++;
16955 if( iBuddy<iBlock ){
16956 mem5.aCtrl[iBuddy] = CTRL_FREE | iLogsize;
16957 mem5.aCtrl[iBlock] = 0;
16958 iBlock = iBuddy;
16959 }else{
16960 mem5.aCtrl[iBlock] = CTRL_FREE | iLogsize;
16961 mem5.aCtrl[iBuddy] = 0;
16963 size *= 2;
16965 memsys5Link(iBlock, iLogsize);
16969 ** Allocate nBytes of memory
16971 static void *memsys5Malloc(int nBytes){
16972 sqlite3_int64 *p = 0;
16973 if( nBytes>0 ){
16974 memsys5Enter();
16975 p = memsys5MallocUnsafe(nBytes);
16976 memsys5Leave();
16978 return (void*)p;
16982 ** Free memory.
16984 ** The outer layer memory allocator prevents this routine from
16985 ** being called with pPrior==0.
16987 static void memsys5Free(void *pPrior){
16988 assert( pPrior!=0 );
16989 memsys5Enter();
16990 memsys5FreeUnsafe(pPrior);
16991 memsys5Leave();
16995 ** Change the size of an existing memory allocation.
16997 ** The outer layer memory allocator prevents this routine from
16998 ** being called with pPrior==0.
17000 ** nBytes is always a value obtained from a prior call to
17001 ** memsys5Round(). Hence nBytes is always a non-negative power
17002 ** of two. If nBytes==0 that means that an oversize allocation
17003 ** (an allocation larger than 0x40000000) was requested and this
17004 ** routine should return 0 without freeing pPrior.
17006 static void *memsys5Realloc(void *pPrior, int nBytes){
17007 int nOld;
17008 void *p;
17009 assert( pPrior!=0 );
17010 assert( (nBytes&(nBytes-1))==0 ); /* EV: R-46199-30249 */
17011 assert( nBytes>=0 );
17012 if( nBytes==0 ){
17013 return 0;
17015 nOld = memsys5Size(pPrior);
17016 if( nBytes<=nOld ){
17017 return pPrior;
17019 memsys5Enter();
17020 p = memsys5MallocUnsafe(nBytes);
17021 if( p ){
17022 memcpy(p, pPrior, nOld);
17023 memsys5FreeUnsafe(pPrior);
17025 memsys5Leave();
17026 return p;
17030 ** Round up a request size to the next valid allocation size. If
17031 ** the allocation is too large to be handled by this allocation system,
17032 ** return 0.
17034 ** All allocations must be a power of two and must be expressed by a
17035 ** 32-bit signed integer. Hence the largest allocation is 0x40000000
17036 ** or 1073741824 bytes.
17038 static int memsys5Roundup(int n){
17039 int iFullSz;
17040 if( n > 0x40000000 ) return 0;
17041 for(iFullSz=mem5.szAtom; iFullSz<n; iFullSz *= 2);
17042 return iFullSz;
17046 ** Return the ceiling of the logarithm base 2 of iValue.
17048 ** Examples: memsys5Log(1) -> 0
17049 ** memsys5Log(2) -> 1
17050 ** memsys5Log(4) -> 2
17051 ** memsys5Log(5) -> 3
17052 ** memsys5Log(8) -> 3
17053 ** memsys5Log(9) -> 4
17055 static int memsys5Log(int iValue){
17056 int iLog;
17057 for(iLog=0; (iLog<(int)((sizeof(int)*8)-1)) && (1<<iLog)<iValue; iLog++);
17058 return iLog;
17062 ** Initialize the memory allocator.
17064 ** This routine is not threadsafe. The caller must be holding a mutex
17065 ** to prevent multiple threads from entering at the same time.
17067 static int memsys5Init(void *NotUsed){
17068 int ii; /* Loop counter */
17069 int nByte; /* Number of bytes of memory available to this allocator */
17070 u8 *zByte; /* Memory usable by this allocator */
17071 int nMinLog; /* Log base 2 of minimum allocation size in bytes */
17072 int iOffset; /* An offset into mem5.aCtrl[] */
17074 UNUSED_PARAMETER(NotUsed);
17076 /* For the purposes of this routine, disable the mutex */
17077 mem5.mutex = 0;
17079 /* The size of a Mem5Link object must be a power of two. Verify that
17080 ** this is case.
17082 assert( (sizeof(Mem5Link)&(sizeof(Mem5Link)-1))==0 );
17084 nByte = sqlite3GlobalConfig.nHeap;
17085 zByte = (u8*)sqlite3GlobalConfig.pHeap;
17086 assert( zByte!=0 ); /* sqlite3_config() does not allow otherwise */
17088 /* boundaries on sqlite3GlobalConfig.mnReq are enforced in sqlite3_config() */
17089 nMinLog = memsys5Log(sqlite3GlobalConfig.mnReq);
17090 mem5.szAtom = (1<<nMinLog);
17091 while( (int)sizeof(Mem5Link)>mem5.szAtom ){
17092 mem5.szAtom = mem5.szAtom << 1;
17095 mem5.nBlock = (nByte / (mem5.szAtom+sizeof(u8)));
17096 mem5.zPool = zByte;
17097 mem5.aCtrl = (u8 *)&mem5.zPool[mem5.nBlock*mem5.szAtom];
17099 for(ii=0; ii<=LOGMAX; ii++){
17100 mem5.aiFreelist[ii] = -1;
17103 iOffset = 0;
17104 for(ii=LOGMAX; ii>=0; ii--){
17105 int nAlloc = (1<<ii);
17106 if( (iOffset+nAlloc)<=mem5.nBlock ){
17107 mem5.aCtrl[iOffset] = ii | CTRL_FREE;
17108 memsys5Link(iOffset, ii);
17109 iOffset += nAlloc;
17111 assert((iOffset+nAlloc)>mem5.nBlock);
17114 /* If a mutex is required for normal operation, allocate one */
17115 if( sqlite3GlobalConfig.bMemstat==0 ){
17116 mem5.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
17119 return SQLITE_OK;
17123 ** Deinitialize this module.
17125 static void memsys5Shutdown(void *NotUsed){
17126 UNUSED_PARAMETER(NotUsed);
17127 mem5.mutex = 0;
17128 return;
17131 #ifdef SQLITE_TEST
17133 ** Open the file indicated and write a log of all unfreed memory
17134 ** allocations into that log.
17136 SQLITE_PRIVATE void sqlite3Memsys5Dump(const char *zFilename){
17137 FILE *out;
17138 int i, j, n;
17139 int nMinLog;
17141 if( zFilename==0 || zFilename[0]==0 ){
17142 out = stdout;
17143 }else{
17144 out = fopen(zFilename, "w");
17145 if( out==0 ){
17146 fprintf(stderr, "** Unable to output memory debug output log: %s **\n",
17147 zFilename);
17148 return;
17151 memsys5Enter();
17152 nMinLog = memsys5Log(mem5.szAtom);
17153 for(i=0; i<=LOGMAX && i+nMinLog<32; i++){
17154 for(n=0, j=mem5.aiFreelist[i]; j>=0; j = MEM5LINK(j)->next, n++){}
17155 fprintf(out, "freelist items of size %d: %d\n", mem5.szAtom << i, n);
17157 fprintf(out, "mem5.nAlloc = %llu\n", mem5.nAlloc);
17158 fprintf(out, "mem5.totalAlloc = %llu\n", mem5.totalAlloc);
17159 fprintf(out, "mem5.totalExcess = %llu\n", mem5.totalExcess);
17160 fprintf(out, "mem5.currentOut = %u\n", mem5.currentOut);
17161 fprintf(out, "mem5.currentCount = %u\n", mem5.currentCount);
17162 fprintf(out, "mem5.maxOut = %u\n", mem5.maxOut);
17163 fprintf(out, "mem5.maxCount = %u\n", mem5.maxCount);
17164 fprintf(out, "mem5.maxRequest = %u\n", mem5.maxRequest);
17165 memsys5Leave();
17166 if( out==stdout ){
17167 fflush(stdout);
17168 }else{
17169 fclose(out);
17172 #endif
17175 ** This routine is the only routine in this file with external
17176 ** linkage. It returns a pointer to a static sqlite3_mem_methods
17177 ** struct populated with the memsys5 methods.
17179 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys5(void){
17180 static const sqlite3_mem_methods memsys5Methods = {
17181 memsys5Malloc,
17182 memsys5Free,
17183 memsys5Realloc,
17184 memsys5Size,
17185 memsys5Roundup,
17186 memsys5Init,
17187 memsys5Shutdown,
17190 return &memsys5Methods;
17193 #endif /* SQLITE_ENABLE_MEMSYS5 */
17195 /************** End of mem5.c ************************************************/
17196 /************** Begin file mutex.c *******************************************/
17198 ** 2007 August 14
17200 ** The author disclaims copyright to this source code. In place of
17201 ** a legal notice, here is a blessing:
17203 ** May you do good and not evil.
17204 ** May you find forgiveness for yourself and forgive others.
17205 ** May you share freely, never taking more than you give.
17207 *************************************************************************
17208 ** This file contains the C functions that implement mutexes.
17210 ** This file contains code that is common across all mutex implementations.
17213 #if defined(SQLITE_DEBUG) && !defined(SQLITE_MUTEX_OMIT)
17215 ** For debugging purposes, record when the mutex subsystem is initialized
17216 ** and uninitialized so that we can assert() if there is an attempt to
17217 ** allocate a mutex while the system is uninitialized.
17219 static SQLITE_WSD int mutexIsInit = 0;
17220 #endif /* SQLITE_DEBUG */
17223 #ifndef SQLITE_MUTEX_OMIT
17225 ** Initialize the mutex system.
17227 SQLITE_PRIVATE int sqlite3MutexInit(void){
17228 int rc = SQLITE_OK;
17229 if( !sqlite3GlobalConfig.mutex.xMutexAlloc ){
17230 /* If the xMutexAlloc method has not been set, then the user did not
17231 ** install a mutex implementation via sqlite3_config() prior to
17232 ** sqlite3_initialize() being called. This block copies pointers to
17233 ** the default implementation into the sqlite3GlobalConfig structure.
17235 sqlite3_mutex_methods const *pFrom;
17236 sqlite3_mutex_methods *pTo = &sqlite3GlobalConfig.mutex;
17238 if( sqlite3GlobalConfig.bCoreMutex ){
17239 pFrom = sqlite3DefaultMutex();
17240 }else{
17241 pFrom = sqlite3NoopMutex();
17243 memcpy(pTo, pFrom, offsetof(sqlite3_mutex_methods, xMutexAlloc));
17244 memcpy(&pTo->xMutexFree, &pFrom->xMutexFree,
17245 sizeof(*pTo) - offsetof(sqlite3_mutex_methods, xMutexFree));
17246 pTo->xMutexAlloc = pFrom->xMutexAlloc;
17248 rc = sqlite3GlobalConfig.mutex.xMutexInit();
17250 #ifdef SQLITE_DEBUG
17251 GLOBAL(int, mutexIsInit) = 1;
17252 #endif
17254 return rc;
17258 ** Shutdown the mutex system. This call frees resources allocated by
17259 ** sqlite3MutexInit().
17261 SQLITE_PRIVATE int sqlite3MutexEnd(void){
17262 int rc = SQLITE_OK;
17263 if( sqlite3GlobalConfig.mutex.xMutexEnd ){
17264 rc = sqlite3GlobalConfig.mutex.xMutexEnd();
17267 #ifdef SQLITE_DEBUG
17268 GLOBAL(int, mutexIsInit) = 0;
17269 #endif
17271 return rc;
17275 ** Retrieve a pointer to a static mutex or allocate a new dynamic one.
17277 SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
17278 #ifndef SQLITE_OMIT_AUTOINIT
17279 if( sqlite3_initialize() ) return 0;
17280 #endif
17281 return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
17284 SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
17285 if( !sqlite3GlobalConfig.bCoreMutex ){
17286 return 0;
17288 assert( GLOBAL(int, mutexIsInit) );
17289 return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
17293 ** Free a dynamic mutex.
17295 SQLITE_API void sqlite3_mutex_free(sqlite3_mutex *p){
17296 if( p ){
17297 sqlite3GlobalConfig.mutex.xMutexFree(p);
17302 ** Obtain the mutex p. If some other thread already has the mutex, block
17303 ** until it can be obtained.
17305 SQLITE_API void sqlite3_mutex_enter(sqlite3_mutex *p){
17306 if( p ){
17307 sqlite3GlobalConfig.mutex.xMutexEnter(p);
17312 ** Obtain the mutex p. If successful, return SQLITE_OK. Otherwise, if another
17313 ** thread holds the mutex and it cannot be obtained, return SQLITE_BUSY.
17315 SQLITE_API int sqlite3_mutex_try(sqlite3_mutex *p){
17316 int rc = SQLITE_OK;
17317 if( p ){
17318 return sqlite3GlobalConfig.mutex.xMutexTry(p);
17320 return rc;
17324 ** The sqlite3_mutex_leave() routine exits a mutex that was previously
17325 ** entered by the same thread. The behavior is undefined if the mutex
17326 ** is not currently entered. If a NULL pointer is passed as an argument
17327 ** this function is a no-op.
17329 SQLITE_API void sqlite3_mutex_leave(sqlite3_mutex *p){
17330 if( p ){
17331 sqlite3GlobalConfig.mutex.xMutexLeave(p);
17335 #ifndef NDEBUG
17337 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17338 ** intended for use inside assert() statements.
17340 SQLITE_API int sqlite3_mutex_held(sqlite3_mutex *p){
17341 return p==0 || sqlite3GlobalConfig.mutex.xMutexHeld(p);
17343 SQLITE_API int sqlite3_mutex_notheld(sqlite3_mutex *p){
17344 return p==0 || sqlite3GlobalConfig.mutex.xMutexNotheld(p);
17346 #endif
17348 #endif /* !defined(SQLITE_MUTEX_OMIT) */
17350 /************** End of mutex.c ***********************************************/
17351 /************** Begin file mutex_noop.c **************************************/
17353 ** 2008 October 07
17355 ** The author disclaims copyright to this source code. In place of
17356 ** a legal notice, here is a blessing:
17358 ** May you do good and not evil.
17359 ** May you find forgiveness for yourself and forgive others.
17360 ** May you share freely, never taking more than you give.
17362 *************************************************************************
17363 ** This file contains the C functions that implement mutexes.
17365 ** This implementation in this file does not provide any mutual
17366 ** exclusion and is thus suitable for use only in applications
17367 ** that use SQLite in a single thread. The routines defined
17368 ** here are place-holders. Applications can substitute working
17369 ** mutex routines at start-time using the
17371 ** sqlite3_config(SQLITE_CONFIG_MUTEX,...)
17373 ** interface.
17375 ** If compiled with SQLITE_DEBUG, then additional logic is inserted
17376 ** that does error checking on mutexes to make sure they are being
17377 ** called correctly.
17380 #ifndef SQLITE_MUTEX_OMIT
17382 #ifndef SQLITE_DEBUG
17384 ** Stub routines for all mutex methods.
17386 ** This routines provide no mutual exclusion or error checking.
17388 static int noopMutexInit(void){ return SQLITE_OK; }
17389 static int noopMutexEnd(void){ return SQLITE_OK; }
17390 static sqlite3_mutex *noopMutexAlloc(int id){
17391 UNUSED_PARAMETER(id);
17392 return (sqlite3_mutex*)8;
17394 static void noopMutexFree(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
17395 static void noopMutexEnter(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
17396 static int noopMutexTry(sqlite3_mutex *p){
17397 UNUSED_PARAMETER(p);
17398 return SQLITE_OK;
17400 static void noopMutexLeave(sqlite3_mutex *p){ UNUSED_PARAMETER(p); return; }
17402 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
17403 static const sqlite3_mutex_methods sMutex = {
17404 noopMutexInit,
17405 noopMutexEnd,
17406 noopMutexAlloc,
17407 noopMutexFree,
17408 noopMutexEnter,
17409 noopMutexTry,
17410 noopMutexLeave,
17416 return &sMutex;
17418 #endif /* !SQLITE_DEBUG */
17420 #ifdef SQLITE_DEBUG
17422 ** In this implementation, error checking is provided for testing
17423 ** and debugging purposes. The mutexes still do not provide any
17424 ** mutual exclusion.
17428 ** The mutex object
17430 typedef struct sqlite3_debug_mutex {
17431 int id; /* The mutex type */
17432 int cnt; /* Number of entries without a matching leave */
17433 } sqlite3_debug_mutex;
17436 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17437 ** intended for use inside assert() statements.
17439 static int debugMutexHeld(sqlite3_mutex *pX){
17440 sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17441 return p==0 || p->cnt>0;
17443 static int debugMutexNotheld(sqlite3_mutex *pX){
17444 sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17445 return p==0 || p->cnt==0;
17449 ** Initialize and deinitialize the mutex subsystem.
17451 static int debugMutexInit(void){ return SQLITE_OK; }
17452 static int debugMutexEnd(void){ return SQLITE_OK; }
17455 ** The sqlite3_mutex_alloc() routine allocates a new
17456 ** mutex and returns a pointer to it. If it returns NULL
17457 ** that means that a mutex could not be allocated.
17459 static sqlite3_mutex *debugMutexAlloc(int id){
17460 static sqlite3_debug_mutex aStatic[6];
17461 sqlite3_debug_mutex *pNew = 0;
17462 switch( id ){
17463 case SQLITE_MUTEX_FAST:
17464 case SQLITE_MUTEX_RECURSIVE: {
17465 pNew = sqlite3Malloc(sizeof(*pNew));
17466 if( pNew ){
17467 pNew->id = id;
17468 pNew->cnt = 0;
17470 break;
17472 default: {
17473 assert( id-2 >= 0 );
17474 assert( id-2 < (int)(sizeof(aStatic)/sizeof(aStatic[0])) );
17475 pNew = &aStatic[id-2];
17476 pNew->id = id;
17477 break;
17480 return (sqlite3_mutex*)pNew;
17484 ** This routine deallocates a previously allocated mutex.
17486 static void debugMutexFree(sqlite3_mutex *pX){
17487 sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17488 assert( p->cnt==0 );
17489 assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
17490 sqlite3_free(p);
17494 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
17495 ** to enter a mutex. If another thread is already within the mutex,
17496 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
17497 ** SQLITE_BUSY. The sqlite3_mutex_try() interface returns SQLITE_OK
17498 ** upon successful entry. Mutexes created using SQLITE_MUTEX_RECURSIVE can
17499 ** be entered multiple times by the same thread. In such cases the,
17500 ** mutex must be exited an equal number of times before another thread
17501 ** can enter. If the same thread tries to enter any other kind of mutex
17502 ** more than once, the behavior is undefined.
17504 static void debugMutexEnter(sqlite3_mutex *pX){
17505 sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17506 assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
17507 p->cnt++;
17509 static int debugMutexTry(sqlite3_mutex *pX){
17510 sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17511 assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
17512 p->cnt++;
17513 return SQLITE_OK;
17517 ** The sqlite3_mutex_leave() routine exits a mutex that was
17518 ** previously entered by the same thread. The behavior
17519 ** is undefined if the mutex is not currently entered or
17520 ** is not currently allocated. SQLite will never do either.
17522 static void debugMutexLeave(sqlite3_mutex *pX){
17523 sqlite3_debug_mutex *p = (sqlite3_debug_mutex*)pX;
17524 assert( debugMutexHeld(pX) );
17525 p->cnt--;
17526 assert( p->id==SQLITE_MUTEX_RECURSIVE || debugMutexNotheld(pX) );
17529 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3NoopMutex(void){
17530 static const sqlite3_mutex_methods sMutex = {
17531 debugMutexInit,
17532 debugMutexEnd,
17533 debugMutexAlloc,
17534 debugMutexFree,
17535 debugMutexEnter,
17536 debugMutexTry,
17537 debugMutexLeave,
17539 debugMutexHeld,
17540 debugMutexNotheld
17543 return &sMutex;
17545 #endif /* SQLITE_DEBUG */
17548 ** If compiled with SQLITE_MUTEX_NOOP, then the no-op mutex implementation
17549 ** is used regardless of the run-time threadsafety setting.
17551 #ifdef SQLITE_MUTEX_NOOP
17552 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
17553 return sqlite3NoopMutex();
17555 #endif /* defined(SQLITE_MUTEX_NOOP) */
17556 #endif /* !defined(SQLITE_MUTEX_OMIT) */
17558 /************** End of mutex_noop.c ******************************************/
17559 /************** Begin file mutex_os2.c ***************************************/
17561 ** 2007 August 28
17563 ** The author disclaims copyright to this source code. In place of
17564 ** a legal notice, here is a blessing:
17566 ** May you do good and not evil.
17567 ** May you find forgiveness for yourself and forgive others.
17568 ** May you share freely, never taking more than you give.
17570 *************************************************************************
17571 ** This file contains the C functions that implement mutexes for OS/2
17575 ** The code in this file is only used if SQLITE_MUTEX_OS2 is defined.
17576 ** See the mutex.h file for details.
17578 #ifdef SQLITE_MUTEX_OS2
17580 /********************** OS/2 Mutex Implementation **********************
17582 ** This implementation of mutexes is built using the OS/2 API.
17586 ** The mutex object
17587 ** Each recursive mutex is an instance of the following structure.
17589 struct sqlite3_mutex {
17590 HMTX mutex; /* Mutex controlling the lock */
17591 int id; /* Mutex type */
17592 #ifdef SQLITE_DEBUG
17593 int trace; /* True to trace changes */
17594 #endif
17597 #ifdef SQLITE_DEBUG
17598 #define SQLITE3_MUTEX_INITIALIZER { 0, 0, 0 }
17599 #else
17600 #define SQLITE3_MUTEX_INITIALIZER { 0, 0 }
17601 #endif
17604 ** Initialize and deinitialize the mutex subsystem.
17606 static int os2MutexInit(void){ return SQLITE_OK; }
17607 static int os2MutexEnd(void){ return SQLITE_OK; }
17610 ** The sqlite3_mutex_alloc() routine allocates a new
17611 ** mutex and returns a pointer to it. If it returns NULL
17612 ** that means that a mutex could not be allocated.
17613 ** SQLite will unwind its stack and return an error. The argument
17614 ** to sqlite3_mutex_alloc() is one of these integer constants:
17616 ** <ul>
17617 ** <li> SQLITE_MUTEX_FAST
17618 ** <li> SQLITE_MUTEX_RECURSIVE
17619 ** <li> SQLITE_MUTEX_STATIC_MASTER
17620 ** <li> SQLITE_MUTEX_STATIC_MEM
17621 ** <li> SQLITE_MUTEX_STATIC_MEM2
17622 ** <li> SQLITE_MUTEX_STATIC_PRNG
17623 ** <li> SQLITE_MUTEX_STATIC_LRU
17624 ** <li> SQLITE_MUTEX_STATIC_LRU2
17625 ** </ul>
17627 ** The first two constants cause sqlite3_mutex_alloc() to create
17628 ** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
17629 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
17630 ** The mutex implementation does not need to make a distinction
17631 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
17632 ** not want to. But SQLite will only request a recursive mutex in
17633 ** cases where it really needs one. If a faster non-recursive mutex
17634 ** implementation is available on the host platform, the mutex subsystem
17635 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
17637 ** The other allowed parameters to sqlite3_mutex_alloc() each return
17638 ** a pointer to a static preexisting mutex. Six static mutexes are
17639 ** used by the current version of SQLite. Future versions of SQLite
17640 ** may add additional static mutexes. Static mutexes are for internal
17641 ** use by SQLite only. Applications that use SQLite mutexes should
17642 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
17643 ** SQLITE_MUTEX_RECURSIVE.
17645 ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
17646 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
17647 ** returns a different mutex on every call. But for the static
17648 ** mutex types, the same mutex is returned on every call that has
17649 ** the same type number.
17651 static sqlite3_mutex *os2MutexAlloc(int iType){
17652 sqlite3_mutex *p = NULL;
17653 switch( iType ){
17654 case SQLITE_MUTEX_FAST:
17655 case SQLITE_MUTEX_RECURSIVE: {
17656 p = sqlite3MallocZero( sizeof(*p) );
17657 if( p ){
17658 p->id = iType;
17659 if( DosCreateMutexSem( 0, &p->mutex, 0, FALSE ) != NO_ERROR ){
17660 sqlite3_free( p );
17661 p = NULL;
17664 break;
17666 default: {
17667 static volatile int isInit = 0;
17668 static sqlite3_mutex staticMutexes[6] = {
17669 SQLITE3_MUTEX_INITIALIZER,
17670 SQLITE3_MUTEX_INITIALIZER,
17671 SQLITE3_MUTEX_INITIALIZER,
17672 SQLITE3_MUTEX_INITIALIZER,
17673 SQLITE3_MUTEX_INITIALIZER,
17674 SQLITE3_MUTEX_INITIALIZER,
17676 if ( !isInit ){
17677 APIRET rc;
17678 PTIB ptib;
17679 PPIB ppib;
17680 HMTX mutex;
17681 char name[32];
17682 DosGetInfoBlocks( &ptib, &ppib );
17683 sqlite3_snprintf( sizeof(name), name, "\\SEM32\\SQLITE%04x",
17684 ppib->pib_ulpid );
17685 while( !isInit ){
17686 mutex = 0;
17687 rc = DosCreateMutexSem( name, &mutex, 0, FALSE);
17688 if( rc == NO_ERROR ){
17689 unsigned int i;
17690 if( !isInit ){
17691 for( i = 0; i < sizeof(staticMutexes)/sizeof(staticMutexes[0]); i++ ){
17692 DosCreateMutexSem( 0, &staticMutexes[i].mutex, 0, FALSE );
17694 isInit = 1;
17696 DosCloseMutexSem( mutex );
17697 }else if( rc == ERROR_DUPLICATE_NAME ){
17698 DosSleep( 1 );
17699 }else{
17700 return p;
17704 assert( iType-2 >= 0 );
17705 assert( iType-2 < sizeof(staticMutexes)/sizeof(staticMutexes[0]) );
17706 p = &staticMutexes[iType-2];
17707 p->id = iType;
17708 break;
17711 return p;
17716 ** This routine deallocates a previously allocated mutex.
17717 ** SQLite is careful to deallocate every mutex that it allocates.
17719 static void os2MutexFree(sqlite3_mutex *p){
17720 #ifdef SQLITE_DEBUG
17721 TID tid;
17722 PID pid;
17723 ULONG ulCount;
17724 DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17725 assert( ulCount==0 );
17726 assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
17727 #endif
17728 DosCloseMutexSem( p->mutex );
17729 sqlite3_free( p );
17732 #ifdef SQLITE_DEBUG
17734 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17735 ** intended for use inside assert() statements.
17737 static int os2MutexHeld(sqlite3_mutex *p){
17738 TID tid;
17739 PID pid;
17740 ULONG ulCount;
17741 PTIB ptib;
17742 DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17743 if( ulCount==0 || ( ulCount>1 && p->id!=SQLITE_MUTEX_RECURSIVE ) )
17744 return 0;
17745 DosGetInfoBlocks(&ptib, NULL);
17746 return tid==ptib->tib_ptib2->tib2_ultid;
17748 static int os2MutexNotheld(sqlite3_mutex *p){
17749 TID tid;
17750 PID pid;
17751 ULONG ulCount;
17752 PTIB ptib;
17753 DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17754 if( ulCount==0 )
17755 return 1;
17756 DosGetInfoBlocks(&ptib, NULL);
17757 return tid!=ptib->tib_ptib2->tib2_ultid;
17759 static void os2MutexTrace(sqlite3_mutex *p, char *pAction){
17760 TID tid;
17761 PID pid;
17762 ULONG ulCount;
17763 DosQueryMutexSem(p->mutex, &pid, &tid, &ulCount);
17764 printf("%s mutex %p (%d) with nRef=%ld\n", pAction, (void*)p, p->trace, ulCount);
17766 #endif
17769 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
17770 ** to enter a mutex. If another thread is already within the mutex,
17771 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
17772 ** SQLITE_BUSY. The sqlite3_mutex_try() interface returns SQLITE_OK
17773 ** upon successful entry. Mutexes created using SQLITE_MUTEX_RECURSIVE can
17774 ** be entered multiple times by the same thread. In such cases the,
17775 ** mutex must be exited an equal number of times before another thread
17776 ** can enter. If the same thread tries to enter any other kind of mutex
17777 ** more than once, the behavior is undefined.
17779 static void os2MutexEnter(sqlite3_mutex *p){
17780 assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
17781 DosRequestMutexSem(p->mutex, SEM_INDEFINITE_WAIT);
17782 #ifdef SQLITE_DEBUG
17783 if( p->trace ) os2MutexTrace(p, "enter");
17784 #endif
17786 static int os2MutexTry(sqlite3_mutex *p){
17787 int rc = SQLITE_BUSY;
17788 assert( p->id==SQLITE_MUTEX_RECURSIVE || os2MutexNotheld(p) );
17789 if( DosRequestMutexSem(p->mutex, SEM_IMMEDIATE_RETURN) == NO_ERROR ) {
17790 rc = SQLITE_OK;
17791 #ifdef SQLITE_DEBUG
17792 if( p->trace ) os2MutexTrace(p, "try");
17793 #endif
17795 return rc;
17799 ** The sqlite3_mutex_leave() routine exits a mutex that was
17800 ** previously entered by the same thread. The behavior
17801 ** is undefined if the mutex is not currently entered or
17802 ** is not currently allocated. SQLite will never do either.
17804 static void os2MutexLeave(sqlite3_mutex *p){
17805 assert( os2MutexHeld(p) );
17806 DosReleaseMutexSem(p->mutex);
17807 #ifdef SQLITE_DEBUG
17808 if( p->trace ) os2MutexTrace(p, "leave");
17809 #endif
17812 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
17813 static const sqlite3_mutex_methods sMutex = {
17814 os2MutexInit,
17815 os2MutexEnd,
17816 os2MutexAlloc,
17817 os2MutexFree,
17818 os2MutexEnter,
17819 os2MutexTry,
17820 os2MutexLeave,
17821 #ifdef SQLITE_DEBUG
17822 os2MutexHeld,
17823 os2MutexNotheld
17824 #else
17827 #endif
17830 return &sMutex;
17832 #endif /* SQLITE_MUTEX_OS2 */
17834 /************** End of mutex_os2.c *******************************************/
17835 /************** Begin file mutex_unix.c **************************************/
17837 ** 2007 August 28
17839 ** The author disclaims copyright to this source code. In place of
17840 ** a legal notice, here is a blessing:
17842 ** May you do good and not evil.
17843 ** May you find forgiveness for yourself and forgive others.
17844 ** May you share freely, never taking more than you give.
17846 *************************************************************************
17847 ** This file contains the C functions that implement mutexes for pthreads
17851 ** The code in this file is only used if we are compiling threadsafe
17852 ** under unix with pthreads.
17854 ** Note that this implementation requires a version of pthreads that
17855 ** supports recursive mutexes.
17857 #ifdef SQLITE_MUTEX_PTHREADS
17859 #include <pthread.h>
17862 ** The sqlite3_mutex.id, sqlite3_mutex.nRef, and sqlite3_mutex.owner fields
17863 ** are necessary under two condidtions: (1) Debug builds and (2) using
17864 ** home-grown mutexes. Encapsulate these conditions into a single #define.
17866 #if defined(SQLITE_DEBUG) || defined(SQLITE_HOMEGROWN_RECURSIVE_MUTEX)
17867 # define SQLITE_MUTEX_NREF 1
17868 #else
17869 # define SQLITE_MUTEX_NREF 0
17870 #endif
17873 ** Each recursive mutex is an instance of the following structure.
17875 struct sqlite3_mutex {
17876 pthread_mutex_t mutex; /* Mutex controlling the lock */
17877 #if SQLITE_MUTEX_NREF
17878 int id; /* Mutex type */
17879 volatile int nRef; /* Number of entrances */
17880 volatile pthread_t owner; /* Thread that is within this mutex */
17881 int trace; /* True to trace changes */
17882 #endif
17884 #if SQLITE_MUTEX_NREF
17885 #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER, 0, 0, (pthread_t)0, 0 }
17886 #else
17887 #define SQLITE3_MUTEX_INITIALIZER { PTHREAD_MUTEX_INITIALIZER }
17888 #endif
17891 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
17892 ** intended for use only inside assert() statements. On some platforms,
17893 ** there might be race conditions that can cause these routines to
17894 ** deliver incorrect results. In particular, if pthread_equal() is
17895 ** not an atomic operation, then these routines might delivery
17896 ** incorrect results. On most platforms, pthread_equal() is a
17897 ** comparison of two integers and is therefore atomic. But we are
17898 ** told that HPUX is not such a platform. If so, then these routines
17899 ** will not always work correctly on HPUX.
17901 ** On those platforms where pthread_equal() is not atomic, SQLite
17902 ** should be compiled without -DSQLITE_DEBUG and with -DNDEBUG to
17903 ** make sure no assert() statements are evaluated and hence these
17904 ** routines are never called.
17906 #if !defined(NDEBUG) || defined(SQLITE_DEBUG)
17907 static int pthreadMutexHeld(sqlite3_mutex *p){
17908 return (p->nRef!=0 && pthread_equal(p->owner, pthread_self()));
17910 static int pthreadMutexNotheld(sqlite3_mutex *p){
17911 return p->nRef==0 || pthread_equal(p->owner, pthread_self())==0;
17913 #endif
17916 ** Initialize and deinitialize the mutex subsystem.
17918 static int pthreadMutexInit(void){ return SQLITE_OK; }
17919 static int pthreadMutexEnd(void){ return SQLITE_OK; }
17922 ** The sqlite3_mutex_alloc() routine allocates a new
17923 ** mutex and returns a pointer to it. If it returns NULL
17924 ** that means that a mutex could not be allocated. SQLite
17925 ** will unwind its stack and return an error. The argument
17926 ** to sqlite3_mutex_alloc() is one of these integer constants:
17928 ** <ul>
17929 ** <li> SQLITE_MUTEX_FAST
17930 ** <li> SQLITE_MUTEX_RECURSIVE
17931 ** <li> SQLITE_MUTEX_STATIC_MASTER
17932 ** <li> SQLITE_MUTEX_STATIC_MEM
17933 ** <li> SQLITE_MUTEX_STATIC_MEM2
17934 ** <li> SQLITE_MUTEX_STATIC_PRNG
17935 ** <li> SQLITE_MUTEX_STATIC_LRU
17936 ** <li> SQLITE_MUTEX_STATIC_PMEM
17937 ** </ul>
17939 ** The first two constants cause sqlite3_mutex_alloc() to create
17940 ** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
17941 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
17942 ** The mutex implementation does not need to make a distinction
17943 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
17944 ** not want to. But SQLite will only request a recursive mutex in
17945 ** cases where it really needs one. If a faster non-recursive mutex
17946 ** implementation is available on the host platform, the mutex subsystem
17947 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
17949 ** The other allowed parameters to sqlite3_mutex_alloc() each return
17950 ** a pointer to a static preexisting mutex. Six static mutexes are
17951 ** used by the current version of SQLite. Future versions of SQLite
17952 ** may add additional static mutexes. Static mutexes are for internal
17953 ** use by SQLite only. Applications that use SQLite mutexes should
17954 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
17955 ** SQLITE_MUTEX_RECURSIVE.
17957 ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
17958 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
17959 ** returns a different mutex on every call. But for the static
17960 ** mutex types, the same mutex is returned on every call that has
17961 ** the same type number.
17963 static sqlite3_mutex *pthreadMutexAlloc(int iType){
17964 static sqlite3_mutex staticMutexes[] = {
17965 SQLITE3_MUTEX_INITIALIZER,
17966 SQLITE3_MUTEX_INITIALIZER,
17967 SQLITE3_MUTEX_INITIALIZER,
17968 SQLITE3_MUTEX_INITIALIZER,
17969 SQLITE3_MUTEX_INITIALIZER,
17970 SQLITE3_MUTEX_INITIALIZER
17972 sqlite3_mutex *p;
17973 switch( iType ){
17974 case SQLITE_MUTEX_RECURSIVE: {
17975 p = sqlite3MallocZero( sizeof(*p) );
17976 if( p ){
17977 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
17978 /* If recursive mutexes are not available, we will have to
17979 ** build our own. See below. */
17980 pthread_mutex_init(&p->mutex, 0);
17981 #else
17982 /* Use a recursive mutex if it is available */
17983 pthread_mutexattr_t recursiveAttr;
17984 pthread_mutexattr_init(&recursiveAttr);
17985 pthread_mutexattr_settype(&recursiveAttr, PTHREAD_MUTEX_RECURSIVE);
17986 pthread_mutex_init(&p->mutex, &recursiveAttr);
17987 pthread_mutexattr_destroy(&recursiveAttr);
17988 #endif
17989 #if SQLITE_MUTEX_NREF
17990 p->id = iType;
17991 #endif
17993 break;
17995 case SQLITE_MUTEX_FAST: {
17996 p = sqlite3MallocZero( sizeof(*p) );
17997 if( p ){
17998 #if SQLITE_MUTEX_NREF
17999 p->id = iType;
18000 #endif
18001 pthread_mutex_init(&p->mutex, 0);
18003 break;
18005 default: {
18006 assert( iType-2 >= 0 );
18007 assert( iType-2 < ArraySize(staticMutexes) );
18008 p = &staticMutexes[iType-2];
18009 #if SQLITE_MUTEX_NREF
18010 p->id = iType;
18011 #endif
18012 break;
18015 return p;
18020 ** This routine deallocates a previously
18021 ** allocated mutex. SQLite is careful to deallocate every
18022 ** mutex that it allocates.
18024 static void pthreadMutexFree(sqlite3_mutex *p){
18025 assert( p->nRef==0 );
18026 assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
18027 pthread_mutex_destroy(&p->mutex);
18028 sqlite3_free(p);
18032 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
18033 ** to enter a mutex. If another thread is already within the mutex,
18034 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
18035 ** SQLITE_BUSY. The sqlite3_mutex_try() interface returns SQLITE_OK
18036 ** upon successful entry. Mutexes created using SQLITE_MUTEX_RECURSIVE can
18037 ** be entered multiple times by the same thread. In such cases the,
18038 ** mutex must be exited an equal number of times before another thread
18039 ** can enter. If the same thread tries to enter any other kind of mutex
18040 ** more than once, the behavior is undefined.
18042 static void pthreadMutexEnter(sqlite3_mutex *p){
18043 assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
18045 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
18046 /* If recursive mutexes are not available, then we have to grow
18047 ** our own. This implementation assumes that pthread_equal()
18048 ** is atomic - that it cannot be deceived into thinking self
18049 ** and p->owner are equal if p->owner changes between two values
18050 ** that are not equal to self while the comparison is taking place.
18051 ** This implementation also assumes a coherent cache - that
18052 ** separate processes cannot read different values from the same
18053 ** address at the same time. If either of these two conditions
18054 ** are not met, then the mutexes will fail and problems will result.
18057 pthread_t self = pthread_self();
18058 if( p->nRef>0 && pthread_equal(p->owner, self) ){
18059 p->nRef++;
18060 }else{
18061 pthread_mutex_lock(&p->mutex);
18062 assert( p->nRef==0 );
18063 p->owner = self;
18064 p->nRef = 1;
18067 #else
18068 /* Use the built-in recursive mutexes if they are available.
18070 pthread_mutex_lock(&p->mutex);
18071 #if SQLITE_MUTEX_NREF
18072 assert( p->nRef>0 || p->owner==0 );
18073 p->owner = pthread_self();
18074 p->nRef++;
18075 #endif
18076 #endif
18078 #ifdef SQLITE_DEBUG
18079 if( p->trace ){
18080 printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18082 #endif
18084 static int pthreadMutexTry(sqlite3_mutex *p){
18085 int rc;
18086 assert( p->id==SQLITE_MUTEX_RECURSIVE || pthreadMutexNotheld(p) );
18088 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
18089 /* If recursive mutexes are not available, then we have to grow
18090 ** our own. This implementation assumes that pthread_equal()
18091 ** is atomic - that it cannot be deceived into thinking self
18092 ** and p->owner are equal if p->owner changes between two values
18093 ** that are not equal to self while the comparison is taking place.
18094 ** This implementation also assumes a coherent cache - that
18095 ** separate processes cannot read different values from the same
18096 ** address at the same time. If either of these two conditions
18097 ** are not met, then the mutexes will fail and problems will result.
18100 pthread_t self = pthread_self();
18101 if( p->nRef>0 && pthread_equal(p->owner, self) ){
18102 p->nRef++;
18103 rc = SQLITE_OK;
18104 }else if( pthread_mutex_trylock(&p->mutex)==0 ){
18105 assert( p->nRef==0 );
18106 p->owner = self;
18107 p->nRef = 1;
18108 rc = SQLITE_OK;
18109 }else{
18110 rc = SQLITE_BUSY;
18113 #else
18114 /* Use the built-in recursive mutexes if they are available.
18116 if( pthread_mutex_trylock(&p->mutex)==0 ){
18117 #if SQLITE_MUTEX_NREF
18118 p->owner = pthread_self();
18119 p->nRef++;
18120 #endif
18121 rc = SQLITE_OK;
18122 }else{
18123 rc = SQLITE_BUSY;
18125 #endif
18127 #ifdef SQLITE_DEBUG
18128 if( rc==SQLITE_OK && p->trace ){
18129 printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18131 #endif
18132 return rc;
18136 ** The sqlite3_mutex_leave() routine exits a mutex that was
18137 ** previously entered by the same thread. The behavior
18138 ** is undefined if the mutex is not currently entered or
18139 ** is not currently allocated. SQLite will never do either.
18141 static void pthreadMutexLeave(sqlite3_mutex *p){
18142 assert( pthreadMutexHeld(p) );
18143 #if SQLITE_MUTEX_NREF
18144 p->nRef--;
18145 if( p->nRef==0 ) p->owner = 0;
18146 #endif
18147 assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
18149 #ifdef SQLITE_HOMEGROWN_RECURSIVE_MUTEX
18150 if( p->nRef==0 ){
18151 pthread_mutex_unlock(&p->mutex);
18153 #else
18154 pthread_mutex_unlock(&p->mutex);
18155 #endif
18157 #ifdef SQLITE_DEBUG
18158 if( p->trace ){
18159 printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18161 #endif
18164 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
18165 static const sqlite3_mutex_methods sMutex = {
18166 pthreadMutexInit,
18167 pthreadMutexEnd,
18168 pthreadMutexAlloc,
18169 pthreadMutexFree,
18170 pthreadMutexEnter,
18171 pthreadMutexTry,
18172 pthreadMutexLeave,
18173 #ifdef SQLITE_DEBUG
18174 pthreadMutexHeld,
18175 pthreadMutexNotheld
18176 #else
18179 #endif
18182 return &sMutex;
18185 #endif /* SQLITE_MUTEX_PTHREADS */
18187 /************** End of mutex_unix.c ******************************************/
18188 /************** Begin file mutex_w32.c ***************************************/
18190 ** 2007 August 14
18192 ** The author disclaims copyright to this source code. In place of
18193 ** a legal notice, here is a blessing:
18195 ** May you do good and not evil.
18196 ** May you find forgiveness for yourself and forgive others.
18197 ** May you share freely, never taking more than you give.
18199 *************************************************************************
18200 ** This file contains the C functions that implement mutexes for win32
18204 ** The code in this file is only used if we are compiling multithreaded
18205 ** on a win32 system.
18207 #ifdef SQLITE_MUTEX_W32
18210 ** Each recursive mutex is an instance of the following structure.
18212 struct sqlite3_mutex {
18213 CRITICAL_SECTION mutex; /* Mutex controlling the lock */
18214 int id; /* Mutex type */
18215 #ifdef SQLITE_DEBUG
18216 volatile int nRef; /* Number of enterances */
18217 volatile DWORD owner; /* Thread holding this mutex */
18218 int trace; /* True to trace changes */
18219 #endif
18221 #define SQLITE_W32_MUTEX_INITIALIZER { 0 }
18222 #ifdef SQLITE_DEBUG
18223 #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0, 0 }
18224 #else
18225 #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 }
18226 #endif
18229 ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
18230 ** or WinCE. Return false (zero) for Win95, Win98, or WinME.
18232 ** Here is an interesting observation: Win95, Win98, and WinME lack
18233 ** the LockFileEx() API. But we can still statically link against that
18234 ** API as long as we don't call it win running Win95/98/ME. A call to
18235 ** this routine is used to determine if the host is Win95/98/ME or
18236 ** WinNT/2K/XP so that we will know whether or not we can safely call
18237 ** the LockFileEx() API.
18239 ** mutexIsNT() is only used for the TryEnterCriticalSection() API call,
18240 ** which is only available if your application was compiled with
18241 ** _WIN32_WINNT defined to a value >= 0x0400. Currently, the only
18242 ** call to TryEnterCriticalSection() is #ifdef'ed out, so #ifdef
18243 ** this out as well.
18245 #if 0
18246 #if SQLITE_OS_WINCE
18247 # define mutexIsNT() (1)
18248 #else
18249 static int mutexIsNT(void){
18250 static int osType = 0;
18251 if( osType==0 ){
18252 OSVERSIONINFO sInfo;
18253 sInfo.dwOSVersionInfoSize = sizeof(sInfo);
18254 GetVersionEx(&sInfo);
18255 osType = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
18257 return osType==2;
18259 #endif /* SQLITE_OS_WINCE */
18260 #endif
18262 #ifdef SQLITE_DEBUG
18264 ** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
18265 ** intended for use only inside assert() statements.
18267 static int winMutexHeld(sqlite3_mutex *p){
18268 return p->nRef!=0 && p->owner==GetCurrentThreadId();
18270 static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){
18271 return p->nRef==0 || p->owner!=tid;
18273 static int winMutexNotheld(sqlite3_mutex *p){
18274 DWORD tid = GetCurrentThreadId();
18275 return winMutexNotheld2(p, tid);
18277 #endif
18281 ** Initialize and deinitialize the mutex subsystem.
18283 static sqlite3_mutex winMutex_staticMutexes[6] = {
18284 SQLITE3_MUTEX_INITIALIZER,
18285 SQLITE3_MUTEX_INITIALIZER,
18286 SQLITE3_MUTEX_INITIALIZER,
18287 SQLITE3_MUTEX_INITIALIZER,
18288 SQLITE3_MUTEX_INITIALIZER,
18289 SQLITE3_MUTEX_INITIALIZER
18291 static int winMutex_isInit = 0;
18292 /* As winMutexInit() and winMutexEnd() are called as part
18293 ** of the sqlite3_initialize and sqlite3_shutdown()
18294 ** processing, the "interlocked" magic is probably not
18295 ** strictly necessary.
18297 static long winMutex_lock = 0;
18299 static int winMutexInit(void){
18300 /* The first to increment to 1 does actual initialization */
18301 if( InterlockedCompareExchange(&winMutex_lock, 1, 0)==0 ){
18302 int i;
18303 for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
18304 InitializeCriticalSection(&winMutex_staticMutexes[i].mutex);
18306 winMutex_isInit = 1;
18307 }else{
18308 /* Someone else is in the process of initing the static mutexes */
18309 while( !winMutex_isInit ){
18310 Sleep(1);
18313 return SQLITE_OK;
18316 static int winMutexEnd(void){
18317 /* The first to decrement to 0 does actual shutdown
18318 ** (which should be the last to shutdown.) */
18319 if( InterlockedCompareExchange(&winMutex_lock, 0, 1)==1 ){
18320 if( winMutex_isInit==1 ){
18321 int i;
18322 for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
18323 DeleteCriticalSection(&winMutex_staticMutexes[i].mutex);
18325 winMutex_isInit = 0;
18328 return SQLITE_OK;
18332 ** The sqlite3_mutex_alloc() routine allocates a new
18333 ** mutex and returns a pointer to it. If it returns NULL
18334 ** that means that a mutex could not be allocated. SQLite
18335 ** will unwind its stack and return an error. The argument
18336 ** to sqlite3_mutex_alloc() is one of these integer constants:
18338 ** <ul>
18339 ** <li> SQLITE_MUTEX_FAST
18340 ** <li> SQLITE_MUTEX_RECURSIVE
18341 ** <li> SQLITE_MUTEX_STATIC_MASTER
18342 ** <li> SQLITE_MUTEX_STATIC_MEM
18343 ** <li> SQLITE_MUTEX_STATIC_MEM2
18344 ** <li> SQLITE_MUTEX_STATIC_PRNG
18345 ** <li> SQLITE_MUTEX_STATIC_LRU
18346 ** <li> SQLITE_MUTEX_STATIC_PMEM
18347 ** </ul>
18349 ** The first two constants cause sqlite3_mutex_alloc() to create
18350 ** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
18351 ** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
18352 ** The mutex implementation does not need to make a distinction
18353 ** between SQLITE_MUTEX_RECURSIVE and SQLITE_MUTEX_FAST if it does
18354 ** not want to. But SQLite will only request a recursive mutex in
18355 ** cases where it really needs one. If a faster non-recursive mutex
18356 ** implementation is available on the host platform, the mutex subsystem
18357 ** might return such a mutex in response to SQLITE_MUTEX_FAST.
18359 ** The other allowed parameters to sqlite3_mutex_alloc() each return
18360 ** a pointer to a static preexisting mutex. Six static mutexes are
18361 ** used by the current version of SQLite. Future versions of SQLite
18362 ** may add additional static mutexes. Static mutexes are for internal
18363 ** use by SQLite only. Applications that use SQLite mutexes should
18364 ** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
18365 ** SQLITE_MUTEX_RECURSIVE.
18367 ** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
18368 ** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
18369 ** returns a different mutex on every call. But for the static
18370 ** mutex types, the same mutex is returned on every call that has
18371 ** the same type number.
18373 static sqlite3_mutex *winMutexAlloc(int iType){
18374 sqlite3_mutex *p;
18376 switch( iType ){
18377 case SQLITE_MUTEX_FAST:
18378 case SQLITE_MUTEX_RECURSIVE: {
18379 p = sqlite3MallocZero( sizeof(*p) );
18380 if( p ){
18381 #ifdef SQLITE_DEBUG
18382 p->id = iType;
18383 #endif
18384 InitializeCriticalSection(&p->mutex);
18386 break;
18388 default: {
18389 assert( winMutex_isInit==1 );
18390 assert( iType-2 >= 0 );
18391 assert( iType-2 < ArraySize(winMutex_staticMutexes) );
18392 p = &winMutex_staticMutexes[iType-2];
18393 #ifdef SQLITE_DEBUG
18394 p->id = iType;
18395 #endif
18396 break;
18399 return p;
18404 ** This routine deallocates a previously
18405 ** allocated mutex. SQLite is careful to deallocate every
18406 ** mutex that it allocates.
18408 static void winMutexFree(sqlite3_mutex *p){
18409 assert( p );
18410 assert( p->nRef==0 && p->owner==0 );
18411 assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
18412 DeleteCriticalSection(&p->mutex);
18413 sqlite3_free(p);
18417 ** The sqlite3_mutex_enter() and sqlite3_mutex_try() routines attempt
18418 ** to enter a mutex. If another thread is already within the mutex,
18419 ** sqlite3_mutex_enter() will block and sqlite3_mutex_try() will return
18420 ** SQLITE_BUSY. The sqlite3_mutex_try() interface returns SQLITE_OK
18421 ** upon successful entry. Mutexes created using SQLITE_MUTEX_RECURSIVE can
18422 ** be entered multiple times by the same thread. In such cases the,
18423 ** mutex must be exited an equal number of times before another thread
18424 ** can enter. If the same thread tries to enter any other kind of mutex
18425 ** more than once, the behavior is undefined.
18427 static void winMutexEnter(sqlite3_mutex *p){
18428 #ifdef SQLITE_DEBUG
18429 DWORD tid = GetCurrentThreadId();
18430 assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
18431 #endif
18432 EnterCriticalSection(&p->mutex);
18433 #ifdef SQLITE_DEBUG
18434 assert( p->nRef>0 || p->owner==0 );
18435 p->owner = tid;
18436 p->nRef++;
18437 if( p->trace ){
18438 printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18440 #endif
18442 static int winMutexTry(sqlite3_mutex *p){
18443 #ifndef NDEBUG
18444 DWORD tid = GetCurrentThreadId();
18445 #endif
18446 int rc = SQLITE_BUSY;
18447 assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
18449 ** The sqlite3_mutex_try() routine is very rarely used, and when it
18450 ** is used it is merely an optimization. So it is OK for it to always
18451 ** fail.
18453 ** The TryEnterCriticalSection() interface is only available on WinNT.
18454 ** And some windows compilers complain if you try to use it without
18455 ** first doing some #defines that prevent SQLite from building on Win98.
18456 ** For that reason, we will omit this optimization for now. See
18457 ** ticket #2685.
18459 #if 0
18460 if( mutexIsNT() && TryEnterCriticalSection(&p->mutex) ){
18461 p->owner = tid;
18462 p->nRef++;
18463 rc = SQLITE_OK;
18465 #else
18466 UNUSED_PARAMETER(p);
18467 #endif
18468 #ifdef SQLITE_DEBUG
18469 if( rc==SQLITE_OK && p->trace ){
18470 printf("try mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18472 #endif
18473 return rc;
18477 ** The sqlite3_mutex_leave() routine exits a mutex that was
18478 ** previously entered by the same thread. The behavior
18479 ** is undefined if the mutex is not currently entered or
18480 ** is not currently allocated. SQLite will never do either.
18482 static void winMutexLeave(sqlite3_mutex *p){
18483 #ifndef NDEBUG
18484 DWORD tid = GetCurrentThreadId();
18485 assert( p->nRef>0 );
18486 assert( p->owner==tid );
18487 p->nRef--;
18488 if( p->nRef==0 ) p->owner = 0;
18489 assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
18490 #endif
18491 LeaveCriticalSection(&p->mutex);
18492 #ifdef SQLITE_DEBUG
18493 if( p->trace ){
18494 printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
18496 #endif
18499 SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
18500 static const sqlite3_mutex_methods sMutex = {
18501 winMutexInit,
18502 winMutexEnd,
18503 winMutexAlloc,
18504 winMutexFree,
18505 winMutexEnter,
18506 winMutexTry,
18507 winMutexLeave,
18508 #ifdef SQLITE_DEBUG
18509 winMutexHeld,
18510 winMutexNotheld
18511 #else
18514 #endif
18517 return &sMutex;
18519 #endif /* SQLITE_MUTEX_W32 */
18521 /************** End of mutex_w32.c *******************************************/
18522 /************** Begin file malloc.c ******************************************/
18524 ** 2001 September 15
18526 ** The author disclaims copyright to this source code. In place of
18527 ** a legal notice, here is a blessing:
18529 ** May you do good and not evil.
18530 ** May you find forgiveness for yourself and forgive others.
18531 ** May you share freely, never taking more than you give.
18533 *************************************************************************
18535 ** Memory allocation functions used throughout sqlite.
18537 /* #include <stdarg.h> */
18540 ** Attempt to release up to n bytes of non-essential memory currently
18541 ** held by SQLite. An example of non-essential memory is memory used to
18542 ** cache database pages that are not currently in use.
18544 SQLITE_API int sqlite3_release_memory(int n){
18545 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
18546 return sqlite3PcacheReleaseMemory(n);
18547 #else
18548 /* IMPLEMENTATION-OF: R-34391-24921 The sqlite3_release_memory() routine
18549 ** is a no-op returning zero if SQLite is not compiled with
18550 ** SQLITE_ENABLE_MEMORY_MANAGEMENT. */
18551 UNUSED_PARAMETER(n);
18552 return 0;
18553 #endif
18557 ** An instance of the following object records the location of
18558 ** each unused scratch buffer.
18560 typedef struct ScratchFreeslot {
18561 struct ScratchFreeslot *pNext; /* Next unused scratch buffer */
18562 } ScratchFreeslot;
18565 ** State information local to the memory allocation subsystem.
18567 static SQLITE_WSD struct Mem0Global {
18568 sqlite3_mutex *mutex; /* Mutex to serialize access */
18571 ** The alarm callback and its arguments. The mem0.mutex lock will
18572 ** be held while the callback is running. Recursive calls into
18573 ** the memory subsystem are allowed, but no new callbacks will be
18574 ** issued.
18576 sqlite3_int64 alarmThreshold;
18577 void (*alarmCallback)(void*, sqlite3_int64,int);
18578 void *alarmArg;
18581 ** Pointers to the end of sqlite3GlobalConfig.pScratch memory
18582 ** (so that a range test can be used to determine if an allocation
18583 ** being freed came from pScratch) and a pointer to the list of
18584 ** unused scratch allocations.
18586 void *pScratchEnd;
18587 ScratchFreeslot *pScratchFree;
18588 u32 nScratchFree;
18591 ** True if heap is nearly "full" where "full" is defined by the
18592 ** sqlite3_soft_heap_limit() setting.
18594 int nearlyFull;
18595 } mem0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
18597 #define mem0 GLOBAL(struct Mem0Global, mem0)
18600 ** This routine runs when the memory allocator sees that the
18601 ** total memory allocation is about to exceed the soft heap
18602 ** limit.
18604 static void softHeapLimitEnforcer(
18605 void *NotUsed,
18606 sqlite3_int64 NotUsed2,
18607 int allocSize
18609 UNUSED_PARAMETER2(NotUsed, NotUsed2);
18610 sqlite3_release_memory(allocSize);
18614 ** Change the alarm callback
18616 static int sqlite3MemoryAlarm(
18617 void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
18618 void *pArg,
18619 sqlite3_int64 iThreshold
18621 int nUsed;
18622 sqlite3_mutex_enter(mem0.mutex);
18623 mem0.alarmCallback = xCallback;
18624 mem0.alarmArg = pArg;
18625 mem0.alarmThreshold = iThreshold;
18626 nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
18627 mem0.nearlyFull = (iThreshold>0 && iThreshold<=nUsed);
18628 sqlite3_mutex_leave(mem0.mutex);
18629 return SQLITE_OK;
18632 #ifndef SQLITE_OMIT_DEPRECATED
18634 ** Deprecated external interface. Internal/core SQLite code
18635 ** should call sqlite3MemoryAlarm.
18637 SQLITE_API int sqlite3_memory_alarm(
18638 void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
18639 void *pArg,
18640 sqlite3_int64 iThreshold
18642 return sqlite3MemoryAlarm(xCallback, pArg, iThreshold);
18644 #endif
18647 ** Set the soft heap-size limit for the library. Passing a zero or
18648 ** negative value indicates no limit.
18650 SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){
18651 sqlite3_int64 priorLimit;
18652 sqlite3_int64 excess;
18653 #ifndef SQLITE_OMIT_AUTOINIT
18654 int rc = sqlite3_initialize();
18655 if( rc ) return -1;
18656 #endif
18657 sqlite3_mutex_enter(mem0.mutex);
18658 priorLimit = mem0.alarmThreshold;
18659 sqlite3_mutex_leave(mem0.mutex);
18660 if( n<0 ) return priorLimit;
18661 if( n>0 ){
18662 sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, n);
18663 }else{
18664 sqlite3MemoryAlarm(0, 0, 0);
18666 excess = sqlite3_memory_used() - n;
18667 if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff));
18668 return priorLimit;
18670 SQLITE_API void sqlite3_soft_heap_limit(int n){
18671 if( n<0 ) n = 0;
18672 sqlite3_soft_heap_limit64(n);
18676 ** Initialize the memory allocation subsystem.
18678 SQLITE_PRIVATE int sqlite3MallocInit(void){
18679 if( sqlite3GlobalConfig.m.xMalloc==0 ){
18680 sqlite3MemSetDefault();
18682 memset(&mem0, 0, sizeof(mem0));
18683 if( sqlite3GlobalConfig.bCoreMutex ){
18684 mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
18686 if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100
18687 && sqlite3GlobalConfig.nScratch>0 ){
18688 int i, n, sz;
18689 ScratchFreeslot *pSlot;
18690 sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);
18691 sqlite3GlobalConfig.szScratch = sz;
18692 pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;
18693 n = sqlite3GlobalConfig.nScratch;
18694 mem0.pScratchFree = pSlot;
18695 mem0.nScratchFree = n;
18696 for(i=0; i<n-1; i++){
18697 pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
18698 pSlot = pSlot->pNext;
18700 pSlot->pNext = 0;
18701 mem0.pScratchEnd = (void*)&pSlot[1];
18702 }else{
18703 mem0.pScratchEnd = 0;
18704 sqlite3GlobalConfig.pScratch = 0;
18705 sqlite3GlobalConfig.szScratch = 0;
18706 sqlite3GlobalConfig.nScratch = 0;
18708 if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
18709 || sqlite3GlobalConfig.nPage<1 ){
18710 sqlite3GlobalConfig.pPage = 0;
18711 sqlite3GlobalConfig.szPage = 0;
18712 sqlite3GlobalConfig.nPage = 0;
18714 return sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
18718 ** Return true if the heap is currently under memory pressure - in other
18719 ** words if the amount of heap used is close to the limit set by
18720 ** sqlite3_soft_heap_limit().
18722 SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){
18723 return mem0.nearlyFull;
18727 ** Deinitialize the memory allocation subsystem.
18729 SQLITE_PRIVATE void sqlite3MallocEnd(void){
18730 if( sqlite3GlobalConfig.m.xShutdown ){
18731 sqlite3GlobalConfig.m.xShutdown(sqlite3GlobalConfig.m.pAppData);
18733 memset(&mem0, 0, sizeof(mem0));
18737 ** Return the amount of memory currently checked out.
18739 SQLITE_API sqlite3_int64 sqlite3_memory_used(void){
18740 int n, mx;
18741 sqlite3_int64 res;
18742 sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0);
18743 res = (sqlite3_int64)n; /* Work around bug in Borland C. Ticket #3216 */
18744 return res;
18748 ** Return the maximum amount of memory that has ever been
18749 ** checked out since either the beginning of this process
18750 ** or since the most recent reset.
18752 SQLITE_API sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
18753 int n, mx;
18754 sqlite3_int64 res;
18755 sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
18756 res = (sqlite3_int64)mx; /* Work around bug in Borland C. Ticket #3216 */
18757 return res;
18761 ** Trigger the alarm
18763 static void sqlite3MallocAlarm(int nByte){
18764 void (*xCallback)(void*,sqlite3_int64,int);
18765 sqlite3_int64 nowUsed;
18766 void *pArg;
18767 if( mem0.alarmCallback==0 ) return;
18768 xCallback = mem0.alarmCallback;
18769 nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
18770 pArg = mem0.alarmArg;
18771 mem0.alarmCallback = 0;
18772 sqlite3_mutex_leave(mem0.mutex);
18773 xCallback(pArg, nowUsed, nByte);
18774 sqlite3_mutex_enter(mem0.mutex);
18775 mem0.alarmCallback = xCallback;
18776 mem0.alarmArg = pArg;
18780 ** Do a memory allocation with statistics and alarms. Assume the
18781 ** lock is already held.
18783 static int mallocWithAlarm(int n, void **pp){
18784 int nFull;
18785 void *p;
18786 assert( sqlite3_mutex_held(mem0.mutex) );
18787 nFull = sqlite3GlobalConfig.m.xRoundup(n);
18788 sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
18789 if( mem0.alarmCallback!=0 ){
18790 int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
18791 if( nUsed >= mem0.alarmThreshold - nFull ){
18792 mem0.nearlyFull = 1;
18793 sqlite3MallocAlarm(nFull);
18794 }else{
18795 mem0.nearlyFull = 0;
18798 p = sqlite3GlobalConfig.m.xMalloc(nFull);
18799 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
18800 if( p==0 && mem0.alarmCallback ){
18801 sqlite3MallocAlarm(nFull);
18802 p = sqlite3GlobalConfig.m.xMalloc(nFull);
18804 #endif
18805 if( p ){
18806 nFull = sqlite3MallocSize(p);
18807 sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
18808 sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, 1);
18810 *pp = p;
18811 return nFull;
18815 ** Allocate memory. This routine is like sqlite3_malloc() except that it
18816 ** assumes the memory subsystem has already been initialized.
18818 SQLITE_PRIVATE void *sqlite3Malloc(int n){
18819 void *p;
18820 if( n<=0 /* IMP: R-65312-04917 */
18821 || n>=0x7fffff00
18823 /* A memory allocation of a number of bytes which is near the maximum
18824 ** signed integer value might cause an integer overflow inside of the
18825 ** xMalloc(). Hence we limit the maximum size to 0x7fffff00, giving
18826 ** 255 bytes of overhead. SQLite itself will never use anything near
18827 ** this amount. The only way to reach the limit is with sqlite3_malloc() */
18828 p = 0;
18829 }else if( sqlite3GlobalConfig.bMemstat ){
18830 sqlite3_mutex_enter(mem0.mutex);
18831 mallocWithAlarm(n, &p);
18832 sqlite3_mutex_leave(mem0.mutex);
18833 }else{
18834 p = sqlite3GlobalConfig.m.xMalloc(n);
18836 assert( EIGHT_BYTE_ALIGNMENT(p) ); /* IMP: R-04675-44850 */
18837 return p;
18841 ** This version of the memory allocation is for use by the application.
18842 ** First make sure the memory subsystem is initialized, then do the
18843 ** allocation.
18845 SQLITE_API void *sqlite3_malloc(int n){
18846 #ifndef SQLITE_OMIT_AUTOINIT
18847 if( sqlite3_initialize() ) return 0;
18848 #endif
18849 return sqlite3Malloc(n);
18853 ** Each thread may only have a single outstanding allocation from
18854 ** xScratchMalloc(). We verify this constraint in the single-threaded
18855 ** case by setting scratchAllocOut to 1 when an allocation
18856 ** is outstanding clearing it when the allocation is freed.
18858 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18859 static int scratchAllocOut = 0;
18860 #endif
18864 ** Allocate memory that is to be used and released right away.
18865 ** This routine is similar to alloca() in that it is not intended
18866 ** for situations where the memory might be held long-term. This
18867 ** routine is intended to get memory to old large transient data
18868 ** structures that would not normally fit on the stack of an
18869 ** embedded processor.
18871 SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
18872 void *p;
18873 assert( n>0 );
18875 sqlite3_mutex_enter(mem0.mutex);
18876 if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
18877 p = mem0.pScratchFree;
18878 mem0.pScratchFree = mem0.pScratchFree->pNext;
18879 mem0.nScratchFree--;
18880 sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
18881 sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
18882 sqlite3_mutex_leave(mem0.mutex);
18883 }else{
18884 if( sqlite3GlobalConfig.bMemstat ){
18885 sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
18886 n = mallocWithAlarm(n, &p);
18887 if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
18888 sqlite3_mutex_leave(mem0.mutex);
18889 }else{
18890 sqlite3_mutex_leave(mem0.mutex);
18891 p = sqlite3GlobalConfig.m.xMalloc(n);
18893 sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
18895 assert( sqlite3_mutex_notheld(mem0.mutex) );
18898 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18899 /* Verify that no more than two scratch allocations per thread
18900 ** are outstanding at one time. (This is only checked in the
18901 ** single-threaded case since checking in the multi-threaded case
18902 ** would be much more complicated.) */
18903 assert( scratchAllocOut<=1 );
18904 if( p ) scratchAllocOut++;
18905 #endif
18907 return p;
18909 SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
18910 if( p ){
18912 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
18913 /* Verify that no more than two scratch allocation per thread
18914 ** is outstanding at one time. (This is only checked in the
18915 ** single-threaded case since checking in the multi-threaded case
18916 ** would be much more complicated.) */
18917 assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
18918 scratchAllocOut--;
18919 #endif
18921 if( p>=sqlite3GlobalConfig.pScratch && p<mem0.pScratchEnd ){
18922 /* Release memory from the SQLITE_CONFIG_SCRATCH allocation */
18923 ScratchFreeslot *pSlot;
18924 pSlot = (ScratchFreeslot*)p;
18925 sqlite3_mutex_enter(mem0.mutex);
18926 pSlot->pNext = mem0.pScratchFree;
18927 mem0.pScratchFree = pSlot;
18928 mem0.nScratchFree++;
18929 assert( mem0.nScratchFree <= (u32)sqlite3GlobalConfig.nScratch );
18930 sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
18931 sqlite3_mutex_leave(mem0.mutex);
18932 }else{
18933 /* Release memory back to the heap */
18934 assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
18935 assert( sqlite3MemdebugNoType(p, ~MEMTYPE_SCRATCH) );
18936 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
18937 if( sqlite3GlobalConfig.bMemstat ){
18938 int iSize = sqlite3MallocSize(p);
18939 sqlite3_mutex_enter(mem0.mutex);
18940 sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
18941 sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
18942 sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
18943 sqlite3GlobalConfig.m.xFree(p);
18944 sqlite3_mutex_leave(mem0.mutex);
18945 }else{
18946 sqlite3GlobalConfig.m.xFree(p);
18953 ** TRUE if p is a lookaside memory allocation from db
18955 #ifndef SQLITE_OMIT_LOOKASIDE
18956 static int isLookaside(sqlite3 *db, void *p){
18957 return p && p>=db->lookaside.pStart && p<db->lookaside.pEnd;
18959 #else
18960 #define isLookaside(A,B) 0
18961 #endif
18964 ** Return the size of a memory allocation previously obtained from
18965 ** sqlite3Malloc() or sqlite3_malloc().
18967 SQLITE_PRIVATE int sqlite3MallocSize(void *p){
18968 assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
18969 assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
18970 return sqlite3GlobalConfig.m.xSize(p);
18972 SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
18973 assert( db==0 || sqlite3_mutex_held(db->mutex) );
18974 if( db && isLookaside(db, p) ){
18975 return db->lookaside.sz;
18976 }else{
18977 assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
18978 assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
18979 assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
18980 return sqlite3GlobalConfig.m.xSize(p);
18985 ** Free memory previously obtained from sqlite3Malloc().
18987 SQLITE_API void sqlite3_free(void *p){
18988 if( p==0 ) return; /* IMP: R-49053-54554 */
18989 assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
18990 assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
18991 if( sqlite3GlobalConfig.bMemstat ){
18992 sqlite3_mutex_enter(mem0.mutex);
18993 sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
18994 sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, -1);
18995 sqlite3GlobalConfig.m.xFree(p);
18996 sqlite3_mutex_leave(mem0.mutex);
18997 }else{
18998 sqlite3GlobalConfig.m.xFree(p);
19003 ** Free memory that might be associated with a particular database
19004 ** connection.
19006 SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
19007 assert( db==0 || sqlite3_mutex_held(db->mutex) );
19008 if( db ){
19009 if( db->pnBytesFreed ){
19010 *db->pnBytesFreed += sqlite3DbMallocSize(db, p);
19011 return;
19013 if( isLookaside(db, p) ){
19014 LookasideSlot *pBuf = (LookasideSlot*)p;
19015 pBuf->pNext = db->lookaside.pFree;
19016 db->lookaside.pFree = pBuf;
19017 db->lookaside.nOut--;
19018 return;
19021 assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
19022 assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
19023 assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
19024 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
19025 sqlite3_free(p);
19029 ** Change the size of an existing memory allocation
19031 SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
19032 int nOld, nNew, nDiff;
19033 void *pNew;
19034 if( pOld==0 ){
19035 return sqlite3Malloc(nBytes); /* IMP: R-28354-25769 */
19037 if( nBytes<=0 ){
19038 sqlite3_free(pOld); /* IMP: R-31593-10574 */
19039 return 0;
19041 if( nBytes>=0x7fffff00 ){
19042 /* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */
19043 return 0;
19045 nOld = sqlite3MallocSize(pOld);
19046 /* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second
19047 ** argument to xRealloc is always a value returned by a prior call to
19048 ** xRoundup. */
19049 nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);
19050 if( nOld==nNew ){
19051 pNew = pOld;
19052 }else if( sqlite3GlobalConfig.bMemstat ){
19053 sqlite3_mutex_enter(mem0.mutex);
19054 sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
19055 nDiff = nNew - nOld;
19056 if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED) >=
19057 mem0.alarmThreshold-nDiff ){
19058 sqlite3MallocAlarm(nDiff);
19060 assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );
19061 assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) );
19062 pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
19063 if( pNew==0 && mem0.alarmCallback ){
19064 sqlite3MallocAlarm(nBytes);
19065 pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
19067 if( pNew ){
19068 nNew = sqlite3MallocSize(pNew);
19069 sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
19071 sqlite3_mutex_leave(mem0.mutex);
19072 }else{
19073 pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
19075 assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-04675-44850 */
19076 return pNew;
19080 ** The public interface to sqlite3Realloc. Make sure that the memory
19081 ** subsystem is initialized prior to invoking sqliteRealloc.
19083 SQLITE_API void *sqlite3_realloc(void *pOld, int n){
19084 #ifndef SQLITE_OMIT_AUTOINIT
19085 if( sqlite3_initialize() ) return 0;
19086 #endif
19087 return sqlite3Realloc(pOld, n);
19092 ** Allocate and zero memory.
19094 SQLITE_PRIVATE void *sqlite3MallocZero(int n){
19095 void *p = sqlite3Malloc(n);
19096 if( p ){
19097 memset(p, 0, n);
19099 return p;
19103 ** Allocate and zero memory. If the allocation fails, make
19104 ** the mallocFailed flag in the connection pointer.
19106 SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, int n){
19107 void *p = sqlite3DbMallocRaw(db, n);
19108 if( p ){
19109 memset(p, 0, n);
19111 return p;
19115 ** Allocate and zero memory. If the allocation fails, make
19116 ** the mallocFailed flag in the connection pointer.
19118 ** If db!=0 and db->mallocFailed is true (indicating a prior malloc
19119 ** failure on the same database connection) then always return 0.
19120 ** Hence for a particular database connection, once malloc starts
19121 ** failing, it fails consistently until mallocFailed is reset.
19122 ** This is an important assumption. There are many places in the
19123 ** code that do things like this:
19125 ** int *a = (int*)sqlite3DbMallocRaw(db, 100);
19126 ** int *b = (int*)sqlite3DbMallocRaw(db, 200);
19127 ** if( b ) a[10] = 9;
19129 ** In other words, if a subsequent malloc (ex: "b") worked, it is assumed
19130 ** that all prior mallocs (ex: "a") worked too.
19132 SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){
19133 void *p;
19134 assert( db==0 || sqlite3_mutex_held(db->mutex) );
19135 assert( db==0 || db->pnBytesFreed==0 );
19136 #ifndef SQLITE_OMIT_LOOKASIDE
19137 if( db ){
19138 LookasideSlot *pBuf;
19139 if( db->mallocFailed ){
19140 return 0;
19142 if( db->lookaside.bEnabled ){
19143 if( n>db->lookaside.sz ){
19144 db->lookaside.anStat[1]++;
19145 }else if( (pBuf = db->lookaside.pFree)==0 ){
19146 db->lookaside.anStat[2]++;
19147 }else{
19148 db->lookaside.pFree = pBuf->pNext;
19149 db->lookaside.nOut++;
19150 db->lookaside.anStat[0]++;
19151 if( db->lookaside.nOut>db->lookaside.mxOut ){
19152 db->lookaside.mxOut = db->lookaside.nOut;
19154 return (void*)pBuf;
19158 #else
19159 if( db && db->mallocFailed ){
19160 return 0;
19162 #endif
19163 p = sqlite3Malloc(n);
19164 if( !p && db ){
19165 db->mallocFailed = 1;
19167 sqlite3MemdebugSetType(p, MEMTYPE_DB |
19168 ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
19169 return p;
19173 ** Resize the block of memory pointed to by p to n bytes. If the
19174 ** resize fails, set the mallocFailed flag in the connection object.
19176 SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
19177 void *pNew = 0;
19178 assert( db!=0 );
19179 assert( sqlite3_mutex_held(db->mutex) );
19180 if( db->mallocFailed==0 ){
19181 if( p==0 ){
19182 return sqlite3DbMallocRaw(db, n);
19184 if( isLookaside(db, p) ){
19185 if( n<=db->lookaside.sz ){
19186 return p;
19188 pNew = sqlite3DbMallocRaw(db, n);
19189 if( pNew ){
19190 memcpy(pNew, p, db->lookaside.sz);
19191 sqlite3DbFree(db, p);
19193 }else{
19194 assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
19195 assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
19196 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
19197 pNew = sqlite3_realloc(p, n);
19198 if( !pNew ){
19199 sqlite3MemdebugSetType(p, MEMTYPE_DB|MEMTYPE_HEAP);
19200 db->mallocFailed = 1;
19202 sqlite3MemdebugSetType(pNew, MEMTYPE_DB |
19203 (db->lookaside.bEnabled ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
19206 return pNew;
19210 ** Attempt to reallocate p. If the reallocation fails, then free p
19211 ** and set the mallocFailed flag in the database connection.
19213 SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
19214 void *pNew;
19215 pNew = sqlite3DbRealloc(db, p, n);
19216 if( !pNew ){
19217 sqlite3DbFree(db, p);
19219 return pNew;
19223 ** Make a copy of a string in memory obtained from sqliteMalloc(). These
19224 ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
19225 ** is because when memory debugging is turned on, these two functions are
19226 ** called via macros that record the current file and line number in the
19227 ** ThreadData structure.
19229 SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){
19230 char *zNew;
19231 size_t n;
19232 if( z==0 ){
19233 return 0;
19235 n = sqlite3Strlen30(z) + 1;
19236 assert( (n&0x7fffffff)==n );
19237 zNew = sqlite3DbMallocRaw(db, (int)n);
19238 if( zNew ){
19239 memcpy(zNew, z, n);
19241 return zNew;
19243 SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
19244 char *zNew;
19245 if( z==0 ){
19246 return 0;
19248 assert( (n&0x7fffffff)==n );
19249 zNew = sqlite3DbMallocRaw(db, n+1);
19250 if( zNew ){
19251 memcpy(zNew, z, n);
19252 zNew[n] = 0;
19254 return zNew;
19258 ** Create a string from the zFromat argument and the va_list that follows.
19259 ** Store the string in memory obtained from sqliteMalloc() and make *pz
19260 ** point to that string.
19262 SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat, ...){
19263 va_list ap;
19264 char *z;
19266 va_start(ap, zFormat);
19267 z = sqlite3VMPrintf(db, zFormat, ap);
19268 va_end(ap);
19269 sqlite3DbFree(db, *pz);
19270 *pz = z;
19275 ** This function must be called before exiting any API function (i.e.
19276 ** returning control to the user) that has called sqlite3_malloc or
19277 ** sqlite3_realloc.
19279 ** The returned value is normally a copy of the second argument to this
19280 ** function. However, if a malloc() failure has occurred since the previous
19281 ** invocation SQLITE_NOMEM is returned instead.
19283 ** If the first argument, db, is not NULL and a malloc() error has occurred,
19284 ** then the connection error-code (the value returned by sqlite3_errcode())
19285 ** is set to SQLITE_NOMEM.
19287 SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
19288 /* If the db handle is not NULL, then we must hold the connection handle
19289 ** mutex here. Otherwise the read (and possible write) of db->mallocFailed
19290 ** is unsafe, as is the call to sqlite3Error().
19292 assert( !db || sqlite3_mutex_held(db->mutex) );
19293 if( db && (db->mallocFailed || rc==SQLITE_IOERR_NOMEM) ){
19294 sqlite3Error(db, SQLITE_NOMEM, 0);
19295 db->mallocFailed = 0;
19296 rc = SQLITE_NOMEM;
19298 return rc & (db ? db->errMask : 0xff);
19301 /************** End of malloc.c **********************************************/
19302 /************** Begin file printf.c ******************************************/
19304 ** The "printf" code that follows dates from the 1980's. It is in
19305 ** the public domain. The original comments are included here for
19306 ** completeness. They are very out-of-date but might be useful as
19307 ** an historical reference. Most of the "enhancements" have been backed
19308 ** out so that the functionality is now the same as standard printf().
19310 **************************************************************************
19312 ** This file contains code for a set of "printf"-like routines. These
19313 ** routines format strings much like the printf() from the standard C
19314 ** library, though the implementation here has enhancements to support
19315 ** SQLlite.
19319 ** Conversion types fall into various categories as defined by the
19320 ** following enumeration.
19322 #define etRADIX 1 /* Integer types. %d, %x, %o, and so forth */
19323 #define etFLOAT 2 /* Floating point. %f */
19324 #define etEXP 3 /* Exponentional notation. %e and %E */
19325 #define etGENERIC 4 /* Floating or exponential, depending on exponent. %g */
19326 #define etSIZE 5 /* Return number of characters processed so far. %n */
19327 #define etSTRING 6 /* Strings. %s */
19328 #define etDYNSTRING 7 /* Dynamically allocated strings. %z */
19329 #define etPERCENT 8 /* Percent symbol. %% */
19330 #define etCHARX 9 /* Characters. %c */
19331 /* The rest are extensions, not normally found in printf() */
19332 #define etSQLESCAPE 10 /* Strings with '\'' doubled. %q */
19333 #define etSQLESCAPE2 11 /* Strings with '\'' doubled and enclosed in '',
19334 NULL pointers replaced by SQL NULL. %Q */
19335 #define etTOKEN 12 /* a pointer to a Token structure */
19336 #define etSRCLIST 13 /* a pointer to a SrcList */
19337 #define etPOINTER 14 /* The %p conversion */
19338 #define etSQLESCAPE3 15 /* %w -> Strings with '\"' doubled */
19339 #define etORDINAL 16 /* %r -> 1st, 2nd, 3rd, 4th, etc. English only */
19341 #define etINVALID 0 /* Any unrecognized conversion type */
19345 ** An "etByte" is an 8-bit unsigned value.
19347 typedef unsigned char etByte;
19350 ** Each builtin conversion character (ex: the 'd' in "%d") is described
19351 ** by an instance of the following structure
19353 typedef struct et_info { /* Information about each format field */
19354 char fmttype; /* The format field code letter */
19355 etByte base; /* The base for radix conversion */
19356 etByte flags; /* One or more of FLAG_ constants below */
19357 etByte type; /* Conversion paradigm */
19358 etByte charset; /* Offset into aDigits[] of the digits string */
19359 etByte prefix; /* Offset into aPrefix[] of the prefix string */
19360 } et_info;
19363 ** Allowed values for et_info.flags
19365 #define FLAG_SIGNED 1 /* True if the value to convert is signed */
19366 #define FLAG_INTERN 2 /* True if for internal use only */
19367 #define FLAG_STRING 4 /* Allow infinity precision */
19371 ** The following table is searched linearly, so it is good to put the
19372 ** most frequently used conversion types first.
19374 static const char aDigits[] = "0123456789ABCDEF0123456789abcdef";
19375 static const char aPrefix[] = "-x0\000X0";
19376 static const et_info fmtinfo[] = {
19377 { 'd', 10, 1, etRADIX, 0, 0 },
19378 { 's', 0, 4, etSTRING, 0, 0 },
19379 { 'g', 0, 1, etGENERIC, 30, 0 },
19380 { 'z', 0, 4, etDYNSTRING, 0, 0 },
19381 { 'q', 0, 4, etSQLESCAPE, 0, 0 },
19382 { 'Q', 0, 4, etSQLESCAPE2, 0, 0 },
19383 { 'w', 0, 4, etSQLESCAPE3, 0, 0 },
19384 { 'c', 0, 0, etCHARX, 0, 0 },
19385 { 'o', 8, 0, etRADIX, 0, 2 },
19386 { 'u', 10, 0, etRADIX, 0, 0 },
19387 { 'x', 16, 0, etRADIX, 16, 1 },
19388 { 'X', 16, 0, etRADIX, 0, 4 },
19389 #ifndef SQLITE_OMIT_FLOATING_POINT
19390 { 'f', 0, 1, etFLOAT, 0, 0 },
19391 { 'e', 0, 1, etEXP, 30, 0 },
19392 { 'E', 0, 1, etEXP, 14, 0 },
19393 { 'G', 0, 1, etGENERIC, 14, 0 },
19394 #endif
19395 { 'i', 10, 1, etRADIX, 0, 0 },
19396 { 'n', 0, 0, etSIZE, 0, 0 },
19397 { '%', 0, 0, etPERCENT, 0, 0 },
19398 { 'p', 16, 0, etPOINTER, 0, 1 },
19400 /* All the rest have the FLAG_INTERN bit set and are thus for internal
19401 ** use only */
19402 { 'T', 0, 2, etTOKEN, 0, 0 },
19403 { 'S', 0, 2, etSRCLIST, 0, 0 },
19404 { 'r', 10, 3, etORDINAL, 0, 0 },
19408 ** If SQLITE_OMIT_FLOATING_POINT is defined, then none of the floating point
19409 ** conversions will work.
19411 #ifndef SQLITE_OMIT_FLOATING_POINT
19413 ** "*val" is a double such that 0.1 <= *val < 10.0
19414 ** Return the ascii code for the leading digit of *val, then
19415 ** multiply "*val" by 10.0 to renormalize.
19417 ** Example:
19418 ** input: *val = 3.14159
19419 ** output: *val = 1.4159 function return = '3'
19421 ** The counter *cnt is incremented each time. After counter exceeds
19422 ** 16 (the number of significant digits in a 64-bit float) '0' is
19423 ** always returned.
19425 static char et_getdigit(LONGDOUBLE_TYPE *val, int *cnt){
19426 int digit;
19427 LONGDOUBLE_TYPE d;
19428 if( (*cnt)++ >= 16 ) return '0';
19429 digit = (int)*val;
19430 d = digit;
19431 digit += '0';
19432 *val = (*val - d)*10.0;
19433 return (char)digit;
19435 #endif /* SQLITE_OMIT_FLOATING_POINT */
19438 ** Append N space characters to the given string buffer.
19440 SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum *pAccum, int N){
19441 static const char zSpaces[] = " ";
19442 while( N>=(int)sizeof(zSpaces)-1 ){
19443 sqlite3StrAccumAppend(pAccum, zSpaces, sizeof(zSpaces)-1);
19444 N -= sizeof(zSpaces)-1;
19446 if( N>0 ){
19447 sqlite3StrAccumAppend(pAccum, zSpaces, N);
19452 ** On machines with a small stack size, you can redefine the
19453 ** SQLITE_PRINT_BUF_SIZE to be something smaller, if desired.
19455 #ifndef SQLITE_PRINT_BUF_SIZE
19456 # define SQLITE_PRINT_BUF_SIZE 70
19457 #endif
19458 #define etBUFSIZE SQLITE_PRINT_BUF_SIZE /* Size of the output buffer */
19461 ** Render a string given by "fmt" into the StrAccum object.
19463 SQLITE_PRIVATE void sqlite3VXPrintf(
19464 StrAccum *pAccum, /* Accumulate results here */
19465 int useExtended, /* Allow extended %-conversions */
19466 const char *fmt, /* Format string */
19467 va_list ap /* arguments */
19469 int c; /* Next character in the format string */
19470 char *bufpt; /* Pointer to the conversion buffer */
19471 int precision; /* Precision of the current field */
19472 int length; /* Length of the field */
19473 int idx; /* A general purpose loop counter */
19474 int width; /* Width of the current field */
19475 etByte flag_leftjustify; /* True if "-" flag is present */
19476 etByte flag_plussign; /* True if "+" flag is present */
19477 etByte flag_blanksign; /* True if " " flag is present */
19478 etByte flag_alternateform; /* True if "#" flag is present */
19479 etByte flag_altform2; /* True if "!" flag is present */
19480 etByte flag_zeropad; /* True if field width constant starts with zero */
19481 etByte flag_long; /* True if "l" flag is present */
19482 etByte flag_longlong; /* True if the "ll" flag is present */
19483 etByte done; /* Loop termination flag */
19484 etByte xtype = 0; /* Conversion paradigm */
19485 char prefix; /* Prefix character. "+" or "-" or " " or '\0'. */
19486 sqlite_uint64 longvalue; /* Value for integer types */
19487 LONGDOUBLE_TYPE realvalue; /* Value for real types */
19488 const et_info *infop; /* Pointer to the appropriate info structure */
19489 char *zOut; /* Rendering buffer */
19490 int nOut; /* Size of the rendering buffer */
19491 char *zExtra; /* Malloced memory used by some conversion */
19492 #ifndef SQLITE_OMIT_FLOATING_POINT
19493 int exp, e2; /* exponent of real numbers */
19494 int nsd; /* Number of significant digits returned */
19495 double rounder; /* Used for rounding floating point values */
19496 etByte flag_dp; /* True if decimal point should be shown */
19497 etByte flag_rtz; /* True if trailing zeros should be removed */
19498 #endif
19499 char buf[etBUFSIZE]; /* Conversion buffer */
19501 bufpt = 0;
19502 for(; (c=(*fmt))!=0; ++fmt){
19503 if( c!='%' ){
19504 int amt;
19505 bufpt = (char *)fmt;
19506 amt = 1;
19507 while( (c=(*++fmt))!='%' && c!=0 ) amt++;
19508 sqlite3StrAccumAppend(pAccum, bufpt, amt);
19509 if( c==0 ) break;
19511 if( (c=(*++fmt))==0 ){
19512 sqlite3StrAccumAppend(pAccum, "%", 1);
19513 break;
19515 /* Find out what flags are present */
19516 flag_leftjustify = flag_plussign = flag_blanksign =
19517 flag_alternateform = flag_altform2 = flag_zeropad = 0;
19518 done = 0;
19520 switch( c ){
19521 case '-': flag_leftjustify = 1; break;
19522 case '+': flag_plussign = 1; break;
19523 case ' ': flag_blanksign = 1; break;
19524 case '#': flag_alternateform = 1; break;
19525 case '!': flag_altform2 = 1; break;
19526 case '0': flag_zeropad = 1; break;
19527 default: done = 1; break;
19529 }while( !done && (c=(*++fmt))!=0 );
19530 /* Get the field width */
19531 width = 0;
19532 if( c=='*' ){
19533 width = va_arg(ap,int);
19534 if( width<0 ){
19535 flag_leftjustify = 1;
19536 width = -width;
19538 c = *++fmt;
19539 }else{
19540 while( c>='0' && c<='9' ){
19541 width = width*10 + c - '0';
19542 c = *++fmt;
19545 /* Get the precision */
19546 if( c=='.' ){
19547 precision = 0;
19548 c = *++fmt;
19549 if( c=='*' ){
19550 precision = va_arg(ap,int);
19551 if( precision<0 ) precision = -precision;
19552 c = *++fmt;
19553 }else{
19554 while( c>='0' && c<='9' ){
19555 precision = precision*10 + c - '0';
19556 c = *++fmt;
19559 }else{
19560 precision = -1;
19562 /* Get the conversion type modifier */
19563 if( c=='l' ){
19564 flag_long = 1;
19565 c = *++fmt;
19566 if( c=='l' ){
19567 flag_longlong = 1;
19568 c = *++fmt;
19569 }else{
19570 flag_longlong = 0;
19572 }else{
19573 flag_long = flag_longlong = 0;
19575 /* Fetch the info entry for the field */
19576 infop = &fmtinfo[0];
19577 xtype = etINVALID;
19578 for(idx=0; idx<ArraySize(fmtinfo); idx++){
19579 if( c==fmtinfo[idx].fmttype ){
19580 infop = &fmtinfo[idx];
19581 if( useExtended || (infop->flags & FLAG_INTERN)==0 ){
19582 xtype = infop->type;
19583 }else{
19584 return;
19586 break;
19589 zExtra = 0;
19592 ** At this point, variables are initialized as follows:
19594 ** flag_alternateform TRUE if a '#' is present.
19595 ** flag_altform2 TRUE if a '!' is present.
19596 ** flag_plussign TRUE if a '+' is present.
19597 ** flag_leftjustify TRUE if a '-' is present or if the
19598 ** field width was negative.
19599 ** flag_zeropad TRUE if the width began with 0.
19600 ** flag_long TRUE if the letter 'l' (ell) prefixed
19601 ** the conversion character.
19602 ** flag_longlong TRUE if the letter 'll' (ell ell) prefixed
19603 ** the conversion character.
19604 ** flag_blanksign TRUE if a ' ' is present.
19605 ** width The specified field width. This is
19606 ** always non-negative. Zero is the default.
19607 ** precision The specified precision. The default
19608 ** is -1.
19609 ** xtype The class of the conversion.
19610 ** infop Pointer to the appropriate info struct.
19612 switch( xtype ){
19613 case etPOINTER:
19614 flag_longlong = sizeof(char*)==sizeof(i64);
19615 flag_long = sizeof(char*)==sizeof(long int);
19616 /* Fall through into the next case */
19617 case etORDINAL:
19618 case etRADIX:
19619 if( infop->flags & FLAG_SIGNED ){
19620 i64 v;
19621 if( flag_longlong ){
19622 v = va_arg(ap,i64);
19623 }else if( flag_long ){
19624 v = va_arg(ap,long int);
19625 }else{
19626 v = va_arg(ap,int);
19628 if( v<0 ){
19629 if( v==SMALLEST_INT64 ){
19630 longvalue = ((u64)1)<<63;
19631 }else{
19632 longvalue = -v;
19634 prefix = '-';
19635 }else{
19636 longvalue = v;
19637 if( flag_plussign ) prefix = '+';
19638 else if( flag_blanksign ) prefix = ' ';
19639 else prefix = 0;
19641 }else{
19642 if( flag_longlong ){
19643 longvalue = va_arg(ap,u64);
19644 }else if( flag_long ){
19645 longvalue = va_arg(ap,unsigned long int);
19646 }else{
19647 longvalue = va_arg(ap,unsigned int);
19649 prefix = 0;
19651 if( longvalue==0 ) flag_alternateform = 0;
19652 if( flag_zeropad && precision<width-(prefix!=0) ){
19653 precision = width-(prefix!=0);
19655 if( precision<etBUFSIZE-10 ){
19656 nOut = etBUFSIZE;
19657 zOut = buf;
19658 }else{
19659 nOut = precision + 10;
19660 zOut = zExtra = sqlite3Malloc( nOut );
19661 if( zOut==0 ){
19662 pAccum->mallocFailed = 1;
19663 return;
19666 bufpt = &zOut[nOut-1];
19667 if( xtype==etORDINAL ){
19668 static const char zOrd[] = "thstndrd";
19669 int x = (int)(longvalue % 10);
19670 if( x>=4 || (longvalue/10)%10==1 ){
19671 x = 0;
19673 *(--bufpt) = zOrd[x*2+1];
19674 *(--bufpt) = zOrd[x*2];
19677 register const char *cset; /* Use registers for speed */
19678 register int base;
19679 cset = &aDigits[infop->charset];
19680 base = infop->base;
19681 do{ /* Convert to ascii */
19682 *(--bufpt) = cset[longvalue%base];
19683 longvalue = longvalue/base;
19684 }while( longvalue>0 );
19686 length = (int)(&zOut[nOut-1]-bufpt);
19687 for(idx=precision-length; idx>0; idx--){
19688 *(--bufpt) = '0'; /* Zero pad */
19690 if( prefix ) *(--bufpt) = prefix; /* Add sign */
19691 if( flag_alternateform && infop->prefix ){ /* Add "0" or "0x" */
19692 const char *pre;
19693 char x;
19694 pre = &aPrefix[infop->prefix];
19695 for(; (x=(*pre))!=0; pre++) *(--bufpt) = x;
19697 length = (int)(&zOut[nOut-1]-bufpt);
19698 break;
19699 case etFLOAT:
19700 case etEXP:
19701 case etGENERIC:
19702 realvalue = va_arg(ap,double);
19703 #ifdef SQLITE_OMIT_FLOATING_POINT
19704 length = 0;
19705 #else
19706 if( precision<0 ) precision = 6; /* Set default precision */
19707 if( realvalue<0.0 ){
19708 realvalue = -realvalue;
19709 prefix = '-';
19710 }else{
19711 if( flag_plussign ) prefix = '+';
19712 else if( flag_blanksign ) prefix = ' ';
19713 else prefix = 0;
19715 if( xtype==etGENERIC && precision>0 ) precision--;
19716 #if 0
19717 /* Rounding works like BSD when the constant 0.4999 is used. Wierd! */
19718 for(idx=precision, rounder=0.4999; idx>0; idx--, rounder*=0.1);
19719 #else
19720 /* It makes more sense to use 0.5 */
19721 for(idx=precision, rounder=0.5; idx>0; idx--, rounder*=0.1){}
19722 #endif
19723 if( xtype==etFLOAT ) realvalue += rounder;
19724 /* Normalize realvalue to within 10.0 > realvalue >= 1.0 */
19725 exp = 0;
19726 if( sqlite3IsNaN((double)realvalue) ){
19727 bufpt = "NaN";
19728 length = 3;
19729 break;
19731 if( realvalue>0.0 ){
19732 while( realvalue>=1e32 && exp<=350 ){ realvalue *= 1e-32; exp+=32; }
19733 while( realvalue>=1e8 && exp<=350 ){ realvalue *= 1e-8; exp+=8; }
19734 while( realvalue>=10.0 && exp<=350 ){ realvalue *= 0.1; exp++; }
19735 while( realvalue<1e-8 ){ realvalue *= 1e8; exp-=8; }
19736 while( realvalue<1.0 ){ realvalue *= 10.0; exp--; }
19737 if( exp>350 ){
19738 if( prefix=='-' ){
19739 bufpt = "-Inf";
19740 }else if( prefix=='+' ){
19741 bufpt = "+Inf";
19742 }else{
19743 bufpt = "Inf";
19745 length = sqlite3Strlen30(bufpt);
19746 break;
19749 bufpt = buf;
19751 ** If the field type is etGENERIC, then convert to either etEXP
19752 ** or etFLOAT, as appropriate.
19754 if( xtype!=etFLOAT ){
19755 realvalue += rounder;
19756 if( realvalue>=10.0 ){ realvalue *= 0.1; exp++; }
19758 if( xtype==etGENERIC ){
19759 flag_rtz = !flag_alternateform;
19760 if( exp<-4 || exp>precision ){
19761 xtype = etEXP;
19762 }else{
19763 precision = precision - exp;
19764 xtype = etFLOAT;
19766 }else{
19767 flag_rtz = 0;
19769 if( xtype==etEXP ){
19770 e2 = 0;
19771 }else{
19772 e2 = exp;
19774 if( e2+precision+width > etBUFSIZE - 15 ){
19775 bufpt = zExtra = sqlite3Malloc( e2+precision+width+15 );
19776 if( bufpt==0 ){
19777 pAccum->mallocFailed = 1;
19778 return;
19781 zOut = bufpt;
19782 nsd = 0;
19783 flag_dp = (precision>0 ?1:0) | flag_alternateform | flag_altform2;
19784 /* The sign in front of the number */
19785 if( prefix ){
19786 *(bufpt++) = prefix;
19788 /* Digits prior to the decimal point */
19789 if( e2<0 ){
19790 *(bufpt++) = '0';
19791 }else{
19792 for(; e2>=0; e2--){
19793 *(bufpt++) = et_getdigit(&realvalue,&nsd);
19796 /* The decimal point */
19797 if( flag_dp ){
19798 *(bufpt++) = '.';
19800 /* "0" digits after the decimal point but before the first
19801 ** significant digit of the number */
19802 for(e2++; e2<0; precision--, e2++){
19803 assert( precision>0 );
19804 *(bufpt++) = '0';
19806 /* Significant digits after the decimal point */
19807 while( (precision--)>0 ){
19808 *(bufpt++) = et_getdigit(&realvalue,&nsd);
19810 /* Remove trailing zeros and the "." if no digits follow the "." */
19811 if( flag_rtz && flag_dp ){
19812 while( bufpt[-1]=='0' ) *(--bufpt) = 0;
19813 assert( bufpt>zOut );
19814 if( bufpt[-1]=='.' ){
19815 if( flag_altform2 ){
19816 *(bufpt++) = '0';
19817 }else{
19818 *(--bufpt) = 0;
19822 /* Add the "eNNN" suffix */
19823 if( xtype==etEXP ){
19824 *(bufpt++) = aDigits[infop->charset];
19825 if( exp<0 ){
19826 *(bufpt++) = '-'; exp = -exp;
19827 }else{
19828 *(bufpt++) = '+';
19830 if( exp>=100 ){
19831 *(bufpt++) = (char)((exp/100)+'0'); /* 100's digit */
19832 exp %= 100;
19834 *(bufpt++) = (char)(exp/10+'0'); /* 10's digit */
19835 *(bufpt++) = (char)(exp%10+'0'); /* 1's digit */
19837 *bufpt = 0;
19839 /* The converted number is in buf[] and zero terminated. Output it.
19840 ** Note that the number is in the usual order, not reversed as with
19841 ** integer conversions. */
19842 length = (int)(bufpt-zOut);
19843 bufpt = zOut;
19845 /* Special case: Add leading zeros if the flag_zeropad flag is
19846 ** set and we are not left justified */
19847 if( flag_zeropad && !flag_leftjustify && length < width){
19848 int i;
19849 int nPad = width - length;
19850 for(i=width; i>=nPad; i--){
19851 bufpt[i] = bufpt[i-nPad];
19853 i = prefix!=0;
19854 while( nPad-- ) bufpt[i++] = '0';
19855 length = width;
19857 #endif /* !defined(SQLITE_OMIT_FLOATING_POINT) */
19858 break;
19859 case etSIZE:
19860 *(va_arg(ap,int*)) = pAccum->nChar;
19861 length = width = 0;
19862 break;
19863 case etPERCENT:
19864 buf[0] = '%';
19865 bufpt = buf;
19866 length = 1;
19867 break;
19868 case etCHARX:
19869 c = va_arg(ap,int);
19870 buf[0] = (char)c;
19871 if( precision>=0 ){
19872 for(idx=1; idx<precision; idx++) buf[idx] = (char)c;
19873 length = precision;
19874 }else{
19875 length =1;
19877 bufpt = buf;
19878 break;
19879 case etSTRING:
19880 case etDYNSTRING:
19881 bufpt = va_arg(ap,char*);
19882 if( bufpt==0 ){
19883 bufpt = "";
19884 }else if( xtype==etDYNSTRING ){
19885 zExtra = bufpt;
19887 if( precision>=0 ){
19888 for(length=0; length<precision && bufpt[length]; length++){}
19889 }else{
19890 length = sqlite3Strlen30(bufpt);
19892 break;
19893 case etSQLESCAPE:
19894 case etSQLESCAPE2:
19895 case etSQLESCAPE3: {
19896 int i, j, k, n, isnull;
19897 int needQuote;
19898 char ch;
19899 char q = ((xtype==etSQLESCAPE3)?'"':'\''); /* Quote character */
19900 char *escarg = va_arg(ap,char*);
19901 isnull = escarg==0;
19902 if( isnull ) escarg = (xtype==etSQLESCAPE2 ? "NULL" : "(NULL)");
19903 k = precision;
19904 for(i=n=0; k!=0 && (ch=escarg[i])!=0; i++, k--){
19905 if( ch==q ) n++;
19907 needQuote = !isnull && xtype==etSQLESCAPE2;
19908 n += i + 1 + needQuote*2;
19909 if( n>etBUFSIZE ){
19910 bufpt = zExtra = sqlite3Malloc( n );
19911 if( bufpt==0 ){
19912 pAccum->mallocFailed = 1;
19913 return;
19915 }else{
19916 bufpt = buf;
19918 j = 0;
19919 if( needQuote ) bufpt[j++] = q;
19920 k = i;
19921 for(i=0; i<k; i++){
19922 bufpt[j++] = ch = escarg[i];
19923 if( ch==q ) bufpt[j++] = ch;
19925 if( needQuote ) bufpt[j++] = q;
19926 bufpt[j] = 0;
19927 length = j;
19928 /* The precision in %q and %Q means how many input characters to
19929 ** consume, not the length of the output...
19930 ** if( precision>=0 && precision<length ) length = precision; */
19931 break;
19933 case etTOKEN: {
19934 Token *pToken = va_arg(ap, Token*);
19935 if( pToken ){
19936 sqlite3StrAccumAppend(pAccum, (const char*)pToken->z, pToken->n);
19938 length = width = 0;
19939 break;
19941 case etSRCLIST: {
19942 SrcList *pSrc = va_arg(ap, SrcList*);
19943 int k = va_arg(ap, int);
19944 struct SrcList_item *pItem = &pSrc->a[k];
19945 assert( k>=0 && k<pSrc->nSrc );
19946 if( pItem->zDatabase ){
19947 sqlite3StrAccumAppend(pAccum, pItem->zDatabase, -1);
19948 sqlite3StrAccumAppend(pAccum, ".", 1);
19950 sqlite3StrAccumAppend(pAccum, pItem->zName, -1);
19951 length = width = 0;
19952 break;
19954 default: {
19955 assert( xtype==etINVALID );
19956 return;
19958 }/* End switch over the format type */
19960 ** The text of the conversion is pointed to by "bufpt" and is
19961 ** "length" characters long. The field width is "width". Do
19962 ** the output.
19964 if( !flag_leftjustify ){
19965 register int nspace;
19966 nspace = width-length;
19967 if( nspace>0 ){
19968 sqlite3AppendSpace(pAccum, nspace);
19971 if( length>0 ){
19972 sqlite3StrAccumAppend(pAccum, bufpt, length);
19974 if( flag_leftjustify ){
19975 register int nspace;
19976 nspace = width-length;
19977 if( nspace>0 ){
19978 sqlite3AppendSpace(pAccum, nspace);
19981 sqlite3_free(zExtra);
19982 }/* End for loop over the format string */
19983 } /* End of function */
19986 ** Append N bytes of text from z to the StrAccum object.
19988 SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){
19989 assert( z!=0 || N==0 );
19990 if( p->tooBig | p->mallocFailed ){
19991 testcase(p->tooBig);
19992 testcase(p->mallocFailed);
19993 return;
19995 assert( p->zText!=0 || p->nChar==0 );
19996 if( N<0 ){
19997 N = sqlite3Strlen30(z);
19999 if( N==0 || NEVER(z==0) ){
20000 return;
20002 if( p->nChar+N >= p->nAlloc ){
20003 char *zNew;
20004 if( !p->useMalloc ){
20005 p->tooBig = 1;
20006 N = p->nAlloc - p->nChar - 1;
20007 if( N<=0 ){
20008 return;
20010 }else{
20011 char *zOld = (p->zText==p->zBase ? 0 : p->zText);
20012 i64 szNew = p->nChar;
20013 szNew += N + 1;
20014 if( szNew > p->mxAlloc ){
20015 sqlite3StrAccumReset(p);
20016 p->tooBig = 1;
20017 return;
20018 }else{
20019 p->nAlloc = (int)szNew;
20021 if( p->useMalloc==1 ){
20022 zNew = sqlite3DbRealloc(p->db, zOld, p->nAlloc);
20023 }else{
20024 zNew = sqlite3_realloc(zOld, p->nAlloc);
20026 if( zNew ){
20027 if( zOld==0 && p->nChar>0 ) memcpy(zNew, p->zText, p->nChar);
20028 p->zText = zNew;
20029 }else{
20030 p->mallocFailed = 1;
20031 sqlite3StrAccumReset(p);
20032 return;
20036 assert( p->zText );
20037 memcpy(&p->zText[p->nChar], z, N);
20038 p->nChar += N;
20042 ** Finish off a string by making sure it is zero-terminated.
20043 ** Return a pointer to the resulting string. Return a NULL
20044 ** pointer if any kind of error was encountered.
20046 SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum *p){
20047 if( p->zText ){
20048 p->zText[p->nChar] = 0;
20049 if( p->useMalloc && p->zText==p->zBase ){
20050 if( p->useMalloc==1 ){
20051 p->zText = sqlite3DbMallocRaw(p->db, p->nChar+1 );
20052 }else{
20053 p->zText = sqlite3_malloc(p->nChar+1);
20055 if( p->zText ){
20056 memcpy(p->zText, p->zBase, p->nChar+1);
20057 }else{
20058 p->mallocFailed = 1;
20062 return p->zText;
20066 ** Reset an StrAccum string. Reclaim all malloced memory.
20068 SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum *p){
20069 if( p->zText!=p->zBase ){
20070 if( p->useMalloc==1 ){
20071 sqlite3DbFree(p->db, p->zText);
20072 }else{
20073 sqlite3_free(p->zText);
20076 p->zText = 0;
20080 ** Initialize a string accumulator
20082 SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum *p, char *zBase, int n, int mx){
20083 p->zText = p->zBase = zBase;
20084 p->db = 0;
20085 p->nChar = 0;
20086 p->nAlloc = n;
20087 p->mxAlloc = mx;
20088 p->useMalloc = 1;
20089 p->tooBig = 0;
20090 p->mallocFailed = 0;
20094 ** Print into memory obtained from sqliteMalloc(). Use the internal
20095 ** %-conversion extensions.
20097 SQLITE_PRIVATE char *sqlite3VMPrintf(sqlite3 *db, const char *zFormat, va_list ap){
20098 char *z;
20099 char zBase[SQLITE_PRINT_BUF_SIZE];
20100 StrAccum acc;
20101 assert( db!=0 );
20102 sqlite3StrAccumInit(&acc, zBase, sizeof(zBase),
20103 db->aLimit[SQLITE_LIMIT_LENGTH]);
20104 acc.db = db;
20105 sqlite3VXPrintf(&acc, 1, zFormat, ap);
20106 z = sqlite3StrAccumFinish(&acc);
20107 if( acc.mallocFailed ){
20108 db->mallocFailed = 1;
20110 return z;
20114 ** Print into memory obtained from sqliteMalloc(). Use the internal
20115 ** %-conversion extensions.
20117 SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){
20118 va_list ap;
20119 char *z;
20120 va_start(ap, zFormat);
20121 z = sqlite3VMPrintf(db, zFormat, ap);
20122 va_end(ap);
20123 return z;
20127 ** Like sqlite3MPrintf(), but call sqlite3DbFree() on zStr after formatting
20128 ** the string and before returnning. This routine is intended to be used
20129 ** to modify an existing string. For example:
20131 ** x = sqlite3MPrintf(db, x, "prefix %s suffix", x);
20134 SQLITE_PRIVATE char *sqlite3MAppendf(sqlite3 *db, char *zStr, const char *zFormat, ...){
20135 va_list ap;
20136 char *z;
20137 va_start(ap, zFormat);
20138 z = sqlite3VMPrintf(db, zFormat, ap);
20139 va_end(ap);
20140 sqlite3DbFree(db, zStr);
20141 return z;
20145 ** Print into memory obtained from sqlite3_malloc(). Omit the internal
20146 ** %-conversion extensions.
20148 SQLITE_API char *sqlite3_vmprintf(const char *zFormat, va_list ap){
20149 char *z;
20150 char zBase[SQLITE_PRINT_BUF_SIZE];
20151 StrAccum acc;
20152 #ifndef SQLITE_OMIT_AUTOINIT
20153 if( sqlite3_initialize() ) return 0;
20154 #endif
20155 sqlite3StrAccumInit(&acc, zBase, sizeof(zBase), SQLITE_MAX_LENGTH);
20156 acc.useMalloc = 2;
20157 sqlite3VXPrintf(&acc, 0, zFormat, ap);
20158 z = sqlite3StrAccumFinish(&acc);
20159 return z;
20163 ** Print into memory obtained from sqlite3_malloc()(). Omit the internal
20164 ** %-conversion extensions.
20166 SQLITE_API char *sqlite3_mprintf(const char *zFormat, ...){
20167 va_list ap;
20168 char *z;
20169 #ifndef SQLITE_OMIT_AUTOINIT
20170 if( sqlite3_initialize() ) return 0;
20171 #endif
20172 va_start(ap, zFormat);
20173 z = sqlite3_vmprintf(zFormat, ap);
20174 va_end(ap);
20175 return z;
20179 ** sqlite3_snprintf() works like snprintf() except that it ignores the
20180 ** current locale settings. This is important for SQLite because we
20181 ** are not able to use a "," as the decimal point in place of "." as
20182 ** specified by some locales.
20184 ** Oops: The first two arguments of sqlite3_snprintf() are backwards
20185 ** from the snprintf() standard. Unfortunately, it is too late to change
20186 ** this without breaking compatibility, so we just have to live with the
20187 ** mistake.
20189 ** sqlite3_vsnprintf() is the varargs version.
20191 SQLITE_API char *sqlite3_vsnprintf(int n, char *zBuf, const char *zFormat, va_list ap){
20192 StrAccum acc;
20193 if( n<=0 ) return zBuf;
20194 sqlite3StrAccumInit(&acc, zBuf, n, 0);
20195 acc.useMalloc = 0;
20196 sqlite3VXPrintf(&acc, 0, zFormat, ap);
20197 return sqlite3StrAccumFinish(&acc);
20199 SQLITE_API char *sqlite3_snprintf(int n, char *zBuf, const char *zFormat, ...){
20200 char *z;
20201 va_list ap;
20202 va_start(ap,zFormat);
20203 z = sqlite3_vsnprintf(n, zBuf, zFormat, ap);
20204 va_end(ap);
20205 return z;
20209 ** This is the routine that actually formats the sqlite3_log() message.
20210 ** We house it in a separate routine from sqlite3_log() to avoid using
20211 ** stack space on small-stack systems when logging is disabled.
20213 ** sqlite3_log() must render into a static buffer. It cannot dynamically
20214 ** allocate memory because it might be called while the memory allocator
20215 ** mutex is held.
20217 static void renderLogMsg(int iErrCode, const char *zFormat, va_list ap){
20218 StrAccum acc; /* String accumulator */
20219 char zMsg[SQLITE_PRINT_BUF_SIZE*3]; /* Complete log message */
20221 sqlite3StrAccumInit(&acc, zMsg, sizeof(zMsg), 0);
20222 acc.useMalloc = 0;
20223 sqlite3VXPrintf(&acc, 0, zFormat, ap);
20224 sqlite3GlobalConfig.xLog(sqlite3GlobalConfig.pLogArg, iErrCode,
20225 sqlite3StrAccumFinish(&acc));
20229 ** Format and write a message to the log if logging is enabled.
20231 SQLITE_API void sqlite3_log(int iErrCode, const char *zFormat, ...){
20232 va_list ap; /* Vararg list */
20233 if( sqlite3GlobalConfig.xLog ){
20234 va_start(ap, zFormat);
20235 renderLogMsg(iErrCode, zFormat, ap);
20236 va_end(ap);
20240 #if defined(SQLITE_DEBUG)
20242 ** A version of printf() that understands %lld. Used for debugging.
20243 ** The printf() built into some versions of windows does not understand %lld
20244 ** and segfaults if you give it a long long int.
20246 SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
20247 va_list ap;
20248 StrAccum acc;
20249 char zBuf[500];
20250 sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf), 0);
20251 acc.useMalloc = 0;
20252 va_start(ap,zFormat);
20253 sqlite3VXPrintf(&acc, 0, zFormat, ap);
20254 va_end(ap);
20255 sqlite3StrAccumFinish(&acc);
20256 fprintf(stdout,"%s", zBuf);
20257 fflush(stdout);
20259 #endif
20261 #ifndef SQLITE_OMIT_TRACE
20263 ** variable-argument wrapper around sqlite3VXPrintf().
20265 SQLITE_PRIVATE void sqlite3XPrintf(StrAccum *p, const char *zFormat, ...){
20266 va_list ap;
20267 va_start(ap,zFormat);
20268 sqlite3VXPrintf(p, 1, zFormat, ap);
20269 va_end(ap);
20271 #endif
20273 /************** End of printf.c **********************************************/
20274 /************** Begin file random.c ******************************************/
20276 ** 2001 September 15
20278 ** The author disclaims copyright to this source code. In place of
20279 ** a legal notice, here is a blessing:
20281 ** May you do good and not evil.
20282 ** May you find forgiveness for yourself and forgive others.
20283 ** May you share freely, never taking more than you give.
20285 *************************************************************************
20286 ** This file contains code to implement a pseudo-random number
20287 ** generator (PRNG) for SQLite.
20289 ** Random numbers are used by some of the database backends in order
20290 ** to generate random integer keys for tables or random filenames.
20294 /* All threads share a single random number generator.
20295 ** This structure is the current state of the generator.
20297 static SQLITE_WSD struct sqlite3PrngType {
20298 unsigned char isInit; /* True if initialized */
20299 unsigned char i, j; /* State variables */
20300 unsigned char s[256]; /* State variables */
20301 } sqlite3Prng;
20304 ** Get a single 8-bit random value from the RC4 PRNG. The Mutex
20305 ** must be held while executing this routine.
20307 ** Why not just use a library random generator like lrand48() for this?
20308 ** Because the OP_NewRowid opcode in the VDBE depends on having a very
20309 ** good source of random numbers. The lrand48() library function may
20310 ** well be good enough. But maybe not. Or maybe lrand48() has some
20311 ** subtle problems on some systems that could cause problems. It is hard
20312 ** to know. To minimize the risk of problems due to bad lrand48()
20313 ** implementations, SQLite uses this random number generator based
20314 ** on RC4, which we know works very well.
20316 ** (Later): Actually, OP_NewRowid does not depend on a good source of
20317 ** randomness any more. But we will leave this code in all the same.
20319 static u8 randomByte(void){
20320 unsigned char t;
20323 /* The "wsdPrng" macro will resolve to the pseudo-random number generator
20324 ** state vector. If writable static data is unsupported on the target,
20325 ** we have to locate the state vector at run-time. In the more common
20326 ** case where writable static data is supported, wsdPrng can refer directly
20327 ** to the "sqlite3Prng" state vector declared above.
20329 #ifdef SQLITE_OMIT_WSD
20330 struct sqlite3PrngType *p = &GLOBAL(struct sqlite3PrngType, sqlite3Prng);
20331 # define wsdPrng p[0]
20332 #else
20333 # define wsdPrng sqlite3Prng
20334 #endif
20337 /* Initialize the state of the random number generator once,
20338 ** the first time this routine is called. The seed value does
20339 ** not need to contain a lot of randomness since we are not
20340 ** trying to do secure encryption or anything like that...
20342 ** Nothing in this file or anywhere else in SQLite does any kind of
20343 ** encryption. The RC4 algorithm is being used as a PRNG (pseudo-random
20344 ** number generator) not as an encryption device.
20346 if( !wsdPrng.isInit ){
20347 int i;
20348 char k[256];
20349 wsdPrng.j = 0;
20350 wsdPrng.i = 0;
20351 sqlite3OsRandomness(sqlite3_vfs_find(0), 256, k);
20352 for(i=0; i<256; i++){
20353 wsdPrng.s[i] = (u8)i;
20355 for(i=0; i<256; i++){
20356 wsdPrng.j += wsdPrng.s[i] + k[i];
20357 t = wsdPrng.s[wsdPrng.j];
20358 wsdPrng.s[wsdPrng.j] = wsdPrng.s[i];
20359 wsdPrng.s[i] = t;
20361 wsdPrng.isInit = 1;
20364 /* Generate and return single random byte
20366 wsdPrng.i++;
20367 t = wsdPrng.s[wsdPrng.i];
20368 wsdPrng.j += t;
20369 wsdPrng.s[wsdPrng.i] = wsdPrng.s[wsdPrng.j];
20370 wsdPrng.s[wsdPrng.j] = t;
20371 t += wsdPrng.s[wsdPrng.i];
20372 return wsdPrng.s[t];
20376 ** Return N random bytes.
20378 SQLITE_API void sqlite3_randomness(int N, void *pBuf){
20379 unsigned char *zBuf = pBuf;
20380 #if SQLITE_THREADSAFE
20381 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_PRNG);
20382 #endif
20383 sqlite3_mutex_enter(mutex);
20384 while( N-- ){
20385 *(zBuf++) = randomByte();
20387 sqlite3_mutex_leave(mutex);
20390 #ifndef SQLITE_OMIT_BUILTIN_TEST
20392 ** For testing purposes, we sometimes want to preserve the state of
20393 ** PRNG and restore the PRNG to its saved state at a later time, or
20394 ** to reset the PRNG to its initial state. These routines accomplish
20395 ** those tasks.
20397 ** The sqlite3_test_control() interface calls these routines to
20398 ** control the PRNG.
20400 static SQLITE_WSD struct sqlite3PrngType sqlite3SavedPrng;
20401 SQLITE_PRIVATE void sqlite3PrngSaveState(void){
20402 memcpy(
20403 &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
20404 &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
20405 sizeof(sqlite3Prng)
20408 SQLITE_PRIVATE void sqlite3PrngRestoreState(void){
20409 memcpy(
20410 &GLOBAL(struct sqlite3PrngType, sqlite3Prng),
20411 &GLOBAL(struct sqlite3PrngType, sqlite3SavedPrng),
20412 sizeof(sqlite3Prng)
20415 SQLITE_PRIVATE void sqlite3PrngResetState(void){
20416 GLOBAL(struct sqlite3PrngType, sqlite3Prng).isInit = 0;
20418 #endif /* SQLITE_OMIT_BUILTIN_TEST */
20420 /************** End of random.c **********************************************/
20421 /************** Begin file utf.c *********************************************/
20423 ** 2004 April 13
20425 ** The author disclaims copyright to this source code. In place of
20426 ** a legal notice, here is a blessing:
20428 ** May you do good and not evil.
20429 ** May you find forgiveness for yourself and forgive others.
20430 ** May you share freely, never taking more than you give.
20432 *************************************************************************
20433 ** This file contains routines used to translate between UTF-8,
20434 ** UTF-16, UTF-16BE, and UTF-16LE.
20436 ** Notes on UTF-8:
20438 ** Byte-0 Byte-1 Byte-2 Byte-3 Value
20439 ** 0xxxxxxx 00000000 00000000 0xxxxxxx
20440 ** 110yyyyy 10xxxxxx 00000000 00000yyy yyxxxxxx
20441 ** 1110zzzz 10yyyyyy 10xxxxxx 00000000 zzzzyyyy yyxxxxxx
20442 ** 11110uuu 10uuzzzz 10yyyyyy 10xxxxxx 000uuuuu zzzzyyyy yyxxxxxx
20445 ** Notes on UTF-16: (with wwww+1==uuuuu)
20447 ** Word-0 Word-1 Value
20448 ** 110110ww wwzzzzyy 110111yy yyxxxxxx 000uuuuu zzzzyyyy yyxxxxxx
20449 ** zzzzyyyy yyxxxxxx 00000000 zzzzyyyy yyxxxxxx
20452 ** BOM or Byte Order Mark:
20453 ** 0xff 0xfe little-endian utf-16 follows
20454 ** 0xfe 0xff big-endian utf-16 follows
20457 /* #include <assert.h> */
20459 #ifndef SQLITE_AMALGAMATION
20461 ** The following constant value is used by the SQLITE_BIGENDIAN and
20462 ** SQLITE_LITTLEENDIAN macros.
20464 SQLITE_PRIVATE const int sqlite3one = 1;
20465 #endif /* SQLITE_AMALGAMATION */
20468 ** This lookup table is used to help decode the first byte of
20469 ** a multi-byte UTF8 character.
20471 static const unsigned char sqlite3Utf8Trans1[] = {
20472 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
20473 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
20474 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
20475 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
20476 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
20477 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
20478 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
20479 0x00, 0x01, 0x02, 0x03, 0x00, 0x01, 0x00, 0x00,
20483 #define WRITE_UTF8(zOut, c) { \
20484 if( c<0x00080 ){ \
20485 *zOut++ = (u8)(c&0xFF); \
20487 else if( c<0x00800 ){ \
20488 *zOut++ = 0xC0 + (u8)((c>>6)&0x1F); \
20489 *zOut++ = 0x80 + (u8)(c & 0x3F); \
20491 else if( c<0x10000 ){ \
20492 *zOut++ = 0xE0 + (u8)((c>>12)&0x0F); \
20493 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \
20494 *zOut++ = 0x80 + (u8)(c & 0x3F); \
20495 }else{ \
20496 *zOut++ = 0xF0 + (u8)((c>>18) & 0x07); \
20497 *zOut++ = 0x80 + (u8)((c>>12) & 0x3F); \
20498 *zOut++ = 0x80 + (u8)((c>>6) & 0x3F); \
20499 *zOut++ = 0x80 + (u8)(c & 0x3F); \
20503 #define WRITE_UTF16LE(zOut, c) { \
20504 if( c<=0xFFFF ){ \
20505 *zOut++ = (u8)(c&0x00FF); \
20506 *zOut++ = (u8)((c>>8)&0x00FF); \
20507 }else{ \
20508 *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \
20509 *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \
20510 *zOut++ = (u8)(c&0x00FF); \
20511 *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \
20515 #define WRITE_UTF16BE(zOut, c) { \
20516 if( c<=0xFFFF ){ \
20517 *zOut++ = (u8)((c>>8)&0x00FF); \
20518 *zOut++ = (u8)(c&0x00FF); \
20519 }else{ \
20520 *zOut++ = (u8)(0x00D8 + (((c-0x10000)>>18)&0x03)); \
20521 *zOut++ = (u8)(((c>>10)&0x003F) + (((c-0x10000)>>10)&0x00C0)); \
20522 *zOut++ = (u8)(0x00DC + ((c>>8)&0x03)); \
20523 *zOut++ = (u8)(c&0x00FF); \
20527 #define READ_UTF16LE(zIn, TERM, c){ \
20528 c = (*zIn++); \
20529 c += ((*zIn++)<<8); \
20530 if( c>=0xD800 && c<0xE000 && TERM ){ \
20531 int c2 = (*zIn++); \
20532 c2 += ((*zIn++)<<8); \
20533 c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10); \
20537 #define READ_UTF16BE(zIn, TERM, c){ \
20538 c = ((*zIn++)<<8); \
20539 c += (*zIn++); \
20540 if( c>=0xD800 && c<0xE000 && TERM ){ \
20541 int c2 = ((*zIn++)<<8); \
20542 c2 += (*zIn++); \
20543 c = (c2&0x03FF) + ((c&0x003F)<<10) + (((c&0x03C0)+0x0040)<<10); \
20548 ** Translate a single UTF-8 character. Return the unicode value.
20550 ** During translation, assume that the byte that zTerm points
20551 ** is a 0x00.
20553 ** Write a pointer to the next unread byte back into *pzNext.
20555 ** Notes On Invalid UTF-8:
20557 ** * This routine never allows a 7-bit character (0x00 through 0x7f) to
20558 ** be encoded as a multi-byte character. Any multi-byte character that
20559 ** attempts to encode a value between 0x00 and 0x7f is rendered as 0xfffd.
20561 ** * This routine never allows a UTF16 surrogate value to be encoded.
20562 ** If a multi-byte character attempts to encode a value between
20563 ** 0xd800 and 0xe000 then it is rendered as 0xfffd.
20565 ** * Bytes in the range of 0x80 through 0xbf which occur as the first
20566 ** byte of a character are interpreted as single-byte characters
20567 ** and rendered as themselves even though they are technically
20568 ** invalid characters.
20570 ** * This routine accepts an infinite number of different UTF8 encodings
20571 ** for unicode values 0x80 and greater. It do not change over-length
20572 ** encodings to 0xfffd as some systems recommend.
20574 #define READ_UTF8(zIn, zTerm, c) \
20575 c = *(zIn++); \
20576 if( c>=0xc0 ){ \
20577 c = sqlite3Utf8Trans1[c-0xc0]; \
20578 while( zIn!=zTerm && (*zIn & 0xc0)==0x80 ){ \
20579 c = (c<<6) + (0x3f & *(zIn++)); \
20581 if( c<0x80 \
20582 || (c&0xFFFFF800)==0xD800 \
20583 || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; } \
20585 SQLITE_PRIVATE u32 sqlite3Utf8Read(
20586 const unsigned char *zIn, /* First byte of UTF-8 character */
20587 const unsigned char **pzNext /* Write first byte past UTF-8 char here */
20589 unsigned int c;
20591 /* Same as READ_UTF8() above but without the zTerm parameter.
20592 ** For this routine, we assume the UTF8 string is always zero-terminated.
20594 c = *(zIn++);
20595 if( c>=0xc0 ){
20596 c = sqlite3Utf8Trans1[c-0xc0];
20597 while( (*zIn & 0xc0)==0x80 ){
20598 c = (c<<6) + (0x3f & *(zIn++));
20600 if( c<0x80
20601 || (c&0xFFFFF800)==0xD800
20602 || (c&0xFFFFFFFE)==0xFFFE ){ c = 0xFFFD; }
20604 *pzNext = zIn;
20605 return c;
20612 ** If the TRANSLATE_TRACE macro is defined, the value of each Mem is
20613 ** printed on stderr on the way into and out of sqlite3VdbeMemTranslate().
20615 /* #define TRANSLATE_TRACE 1 */
20617 #ifndef SQLITE_OMIT_UTF16
20619 ** This routine transforms the internal text encoding used by pMem to
20620 ** desiredEnc. It is an error if the string is already of the desired
20621 ** encoding, or if *pMem does not contain a string value.
20623 SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
20624 int len; /* Maximum length of output string in bytes */
20625 unsigned char *zOut; /* Output buffer */
20626 unsigned char *zIn; /* Input iterator */
20627 unsigned char *zTerm; /* End of input */
20628 unsigned char *z; /* Output iterator */
20629 unsigned int c;
20631 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
20632 assert( pMem->flags&MEM_Str );
20633 assert( pMem->enc!=desiredEnc );
20634 assert( pMem->enc!=0 );
20635 assert( pMem->n>=0 );
20637 #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
20639 char zBuf[100];
20640 sqlite3VdbeMemPrettyPrint(pMem, zBuf);
20641 fprintf(stderr, "INPUT: %s\n", zBuf);
20643 #endif
20645 /* If the translation is between UTF-16 little and big endian, then
20646 ** all that is required is to swap the byte order. This case is handled
20647 ** differently from the others.
20649 if( pMem->enc!=SQLITE_UTF8 && desiredEnc!=SQLITE_UTF8 ){
20650 u8 temp;
20651 int rc;
20652 rc = sqlite3VdbeMemMakeWriteable(pMem);
20653 if( rc!=SQLITE_OK ){
20654 assert( rc==SQLITE_NOMEM );
20655 return SQLITE_NOMEM;
20657 zIn = (u8*)pMem->z;
20658 zTerm = &zIn[pMem->n&~1];
20659 while( zIn<zTerm ){
20660 temp = *zIn;
20661 *zIn = *(zIn+1);
20662 zIn++;
20663 *zIn++ = temp;
20665 pMem->enc = desiredEnc;
20666 goto translate_out;
20669 /* Set len to the maximum number of bytes required in the output buffer. */
20670 if( desiredEnc==SQLITE_UTF8 ){
20671 /* When converting from UTF-16, the maximum growth results from
20672 ** translating a 2-byte character to a 4-byte UTF-8 character.
20673 ** A single byte is required for the output string
20674 ** nul-terminator.
20676 pMem->n &= ~1;
20677 len = pMem->n * 2 + 1;
20678 }else{
20679 /* When converting from UTF-8 to UTF-16 the maximum growth is caused
20680 ** when a 1-byte UTF-8 character is translated into a 2-byte UTF-16
20681 ** character. Two bytes are required in the output buffer for the
20682 ** nul-terminator.
20684 len = pMem->n * 2 + 2;
20687 /* Set zIn to point at the start of the input buffer and zTerm to point 1
20688 ** byte past the end.
20690 ** Variable zOut is set to point at the output buffer, space obtained
20691 ** from sqlite3_malloc().
20693 zIn = (u8*)pMem->z;
20694 zTerm = &zIn[pMem->n];
20695 zOut = sqlite3DbMallocRaw(pMem->db, len);
20696 if( !zOut ){
20697 return SQLITE_NOMEM;
20699 z = zOut;
20701 if( pMem->enc==SQLITE_UTF8 ){
20702 if( desiredEnc==SQLITE_UTF16LE ){
20703 /* UTF-8 -> UTF-16 Little-endian */
20704 while( zIn<zTerm ){
20705 /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
20706 READ_UTF8(zIn, zTerm, c);
20707 WRITE_UTF16LE(z, c);
20709 }else{
20710 assert( desiredEnc==SQLITE_UTF16BE );
20711 /* UTF-8 -> UTF-16 Big-endian */
20712 while( zIn<zTerm ){
20713 /* c = sqlite3Utf8Read(zIn, zTerm, (const u8**)&zIn); */
20714 READ_UTF8(zIn, zTerm, c);
20715 WRITE_UTF16BE(z, c);
20718 pMem->n = (int)(z - zOut);
20719 *z++ = 0;
20720 }else{
20721 assert( desiredEnc==SQLITE_UTF8 );
20722 if( pMem->enc==SQLITE_UTF16LE ){
20723 /* UTF-16 Little-endian -> UTF-8 */
20724 while( zIn<zTerm ){
20725 READ_UTF16LE(zIn, zIn<zTerm, c);
20726 WRITE_UTF8(z, c);
20728 }else{
20729 /* UTF-16 Big-endian -> UTF-8 */
20730 while( zIn<zTerm ){
20731 READ_UTF16BE(zIn, zIn<zTerm, c);
20732 WRITE_UTF8(z, c);
20735 pMem->n = (int)(z - zOut);
20737 *z = 0;
20738 assert( (pMem->n+(desiredEnc==SQLITE_UTF8?1:2))<=len );
20740 sqlite3VdbeMemRelease(pMem);
20741 pMem->flags &= ~(MEM_Static|MEM_Dyn|MEM_Ephem);
20742 pMem->enc = desiredEnc;
20743 pMem->flags |= (MEM_Term|MEM_Dyn);
20744 pMem->z = (char*)zOut;
20745 pMem->zMalloc = pMem->z;
20747 translate_out:
20748 #if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
20750 char zBuf[100];
20751 sqlite3VdbeMemPrettyPrint(pMem, zBuf);
20752 fprintf(stderr, "OUTPUT: %s\n", zBuf);
20754 #endif
20755 return SQLITE_OK;
20759 ** This routine checks for a byte-order mark at the beginning of the
20760 ** UTF-16 string stored in *pMem. If one is present, it is removed and
20761 ** the encoding of the Mem adjusted. This routine does not do any
20762 ** byte-swapping, it just sets Mem.enc appropriately.
20764 ** The allocation (static, dynamic etc.) and encoding of the Mem may be
20765 ** changed by this function.
20767 SQLITE_PRIVATE int sqlite3VdbeMemHandleBom(Mem *pMem){
20768 int rc = SQLITE_OK;
20769 u8 bom = 0;
20771 assert( pMem->n>=0 );
20772 if( pMem->n>1 ){
20773 u8 b1 = *(u8 *)pMem->z;
20774 u8 b2 = *(((u8 *)pMem->z) + 1);
20775 if( b1==0xFE && b2==0xFF ){
20776 bom = SQLITE_UTF16BE;
20778 if( b1==0xFF && b2==0xFE ){
20779 bom = SQLITE_UTF16LE;
20783 if( bom ){
20784 rc = sqlite3VdbeMemMakeWriteable(pMem);
20785 if( rc==SQLITE_OK ){
20786 pMem->n -= 2;
20787 memmove(pMem->z, &pMem->z[2], pMem->n);
20788 pMem->z[pMem->n] = '\0';
20789 pMem->z[pMem->n+1] = '\0';
20790 pMem->flags |= MEM_Term;
20791 pMem->enc = bom;
20794 return rc;
20796 #endif /* SQLITE_OMIT_UTF16 */
20799 ** pZ is a UTF-8 encoded unicode string. If nByte is less than zero,
20800 ** return the number of unicode characters in pZ up to (but not including)
20801 ** the first 0x00 byte. If nByte is not less than zero, return the
20802 ** number of unicode characters in the first nByte of pZ (or up to
20803 ** the first 0x00, whichever comes first).
20805 SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *zIn, int nByte){
20806 int r = 0;
20807 const u8 *z = (const u8*)zIn;
20808 const u8 *zTerm;
20809 if( nByte>=0 ){
20810 zTerm = &z[nByte];
20811 }else{
20812 zTerm = (const u8*)(-1);
20814 assert( z<=zTerm );
20815 while( *z!=0 && z<zTerm ){
20816 SQLITE_SKIP_UTF8(z);
20817 r++;
20819 return r;
20822 /* This test function is not currently used by the automated test-suite.
20823 ** Hence it is only available in debug builds.
20825 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
20827 ** Translate UTF-8 to UTF-8.
20829 ** This has the effect of making sure that the string is well-formed
20830 ** UTF-8. Miscoded characters are removed.
20832 ** The translation is done in-place and aborted if the output
20833 ** overruns the input.
20835 SQLITE_PRIVATE int sqlite3Utf8To8(unsigned char *zIn){
20836 unsigned char *zOut = zIn;
20837 unsigned char *zStart = zIn;
20838 u32 c;
20840 while( zIn[0] && zOut<=zIn ){
20841 c = sqlite3Utf8Read(zIn, (const u8**)&zIn);
20842 if( c!=0xfffd ){
20843 WRITE_UTF8(zOut, c);
20846 *zOut = 0;
20847 return (int)(zOut - zStart);
20849 #endif
20851 #ifndef SQLITE_OMIT_UTF16
20853 ** Convert a UTF-16 string in the native encoding into a UTF-8 string.
20854 ** Memory to hold the UTF-8 string is obtained from sqlite3_malloc and must
20855 ** be freed by the calling function.
20857 ** NULL is returned if there is an allocation error.
20859 SQLITE_PRIVATE char *sqlite3Utf16to8(sqlite3 *db, const void *z, int nByte, u8 enc){
20860 Mem m;
20861 memset(&m, 0, sizeof(m));
20862 m.db = db;
20863 sqlite3VdbeMemSetStr(&m, z, nByte, enc, SQLITE_STATIC);
20864 sqlite3VdbeChangeEncoding(&m, SQLITE_UTF8);
20865 if( db->mallocFailed ){
20866 sqlite3VdbeMemRelease(&m);
20867 m.z = 0;
20869 assert( (m.flags & MEM_Term)!=0 || db->mallocFailed );
20870 assert( (m.flags & MEM_Str)!=0 || db->mallocFailed );
20871 assert( (m.flags & MEM_Dyn)!=0 || db->mallocFailed );
20872 assert( m.z || db->mallocFailed );
20873 return m.z;
20877 ** Convert a UTF-8 string to the UTF-16 encoding specified by parameter
20878 ** enc. A pointer to the new string is returned, and the value of *pnOut
20879 ** is set to the length of the returned string in bytes. The call should
20880 ** arrange to call sqlite3DbFree() on the returned pointer when it is
20881 ** no longer required.
20883 ** If a malloc failure occurs, NULL is returned and the db.mallocFailed
20884 ** flag set.
20886 #ifdef SQLITE_ENABLE_STAT3
20887 SQLITE_PRIVATE char *sqlite3Utf8to16(sqlite3 *db, u8 enc, char *z, int n, int *pnOut){
20888 Mem m;
20889 memset(&m, 0, sizeof(m));
20890 m.db = db;
20891 sqlite3VdbeMemSetStr(&m, z, n, SQLITE_UTF8, SQLITE_STATIC);
20892 if( sqlite3VdbeMemTranslate(&m, enc) ){
20893 assert( db->mallocFailed );
20894 return 0;
20896 assert( m.z==m.zMalloc );
20897 *pnOut = m.n;
20898 return m.z;
20900 #endif
20903 ** zIn is a UTF-16 encoded unicode string at least nChar characters long.
20904 ** Return the number of bytes in the first nChar unicode characters
20905 ** in pZ. nChar must be non-negative.
20907 SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *zIn, int nChar){
20908 int c;
20909 unsigned char const *z = zIn;
20910 int n = 0;
20912 if( SQLITE_UTF16NATIVE==SQLITE_UTF16BE ){
20913 while( n<nChar ){
20914 READ_UTF16BE(z, 1, c);
20915 n++;
20917 }else{
20918 while( n<nChar ){
20919 READ_UTF16LE(z, 1, c);
20920 n++;
20923 return (int)(z-(unsigned char const *)zIn);
20926 #if defined(SQLITE_TEST)
20928 ** This routine is called from the TCL test function "translate_selftest".
20929 ** It checks that the primitives for serializing and deserializing
20930 ** characters in each encoding are inverses of each other.
20932 SQLITE_PRIVATE void sqlite3UtfSelfTest(void){
20933 unsigned int i, t;
20934 unsigned char zBuf[20];
20935 unsigned char *z;
20936 int n;
20937 unsigned int c;
20939 for(i=0; i<0x00110000; i++){
20940 z = zBuf;
20941 WRITE_UTF8(z, i);
20942 n = (int)(z-zBuf);
20943 assert( n>0 && n<=4 );
20944 z[0] = 0;
20945 z = zBuf;
20946 c = sqlite3Utf8Read(z, (const u8**)&z);
20947 t = i;
20948 if( i>=0xD800 && i<=0xDFFF ) t = 0xFFFD;
20949 if( (i&0xFFFFFFFE)==0xFFFE ) t = 0xFFFD;
20950 assert( c==t );
20951 assert( (z-zBuf)==n );
20953 for(i=0; i<0x00110000; i++){
20954 if( i>=0xD800 && i<0xE000 ) continue;
20955 z = zBuf;
20956 WRITE_UTF16LE(z, i);
20957 n = (int)(z-zBuf);
20958 assert( n>0 && n<=4 );
20959 z[0] = 0;
20960 z = zBuf;
20961 READ_UTF16LE(z, 1, c);
20962 assert( c==i );
20963 assert( (z-zBuf)==n );
20965 for(i=0; i<0x00110000; i++){
20966 if( i>=0xD800 && i<0xE000 ) continue;
20967 z = zBuf;
20968 WRITE_UTF16BE(z, i);
20969 n = (int)(z-zBuf);
20970 assert( n>0 && n<=4 );
20971 z[0] = 0;
20972 z = zBuf;
20973 READ_UTF16BE(z, 1, c);
20974 assert( c==i );
20975 assert( (z-zBuf)==n );
20978 #endif /* SQLITE_TEST */
20979 #endif /* SQLITE_OMIT_UTF16 */
20981 /************** End of utf.c *************************************************/
20982 /************** Begin file util.c ********************************************/
20984 ** 2001 September 15
20986 ** The author disclaims copyright to this source code. In place of
20987 ** a legal notice, here is a blessing:
20989 ** May you do good and not evil.
20990 ** May you find forgiveness for yourself and forgive others.
20991 ** May you share freely, never taking more than you give.
20993 *************************************************************************
20994 ** Utility functions used throughout sqlite.
20996 ** This file contains functions for allocating memory, comparing
20997 ** strings, and stuff like that.
21000 /* #include <stdarg.h> */
21001 #ifdef SQLITE_HAVE_ISNAN
21002 # include <math.h>
21003 #endif
21006 ** Routine needed to support the testcase() macro.
21008 #ifdef SQLITE_COVERAGE_TEST
21009 SQLITE_PRIVATE void sqlite3Coverage(int x){
21010 static unsigned dummy = 0;
21011 dummy += (unsigned)x;
21013 #endif
21015 #ifndef SQLITE_OMIT_FLOATING_POINT
21017 ** Return true if the floating point value is Not a Number (NaN).
21019 ** Use the math library isnan() function if compiled with SQLITE_HAVE_ISNAN.
21020 ** Otherwise, we have our own implementation that works on most systems.
21022 SQLITE_PRIVATE int sqlite3IsNaN(double x){
21023 int rc; /* The value return */
21024 #if !defined(SQLITE_HAVE_ISNAN)
21026 ** Systems that support the isnan() library function should probably
21027 ** make use of it by compiling with -DSQLITE_HAVE_ISNAN. But we have
21028 ** found that many systems do not have a working isnan() function so
21029 ** this implementation is provided as an alternative.
21031 ** This NaN test sometimes fails if compiled on GCC with -ffast-math.
21032 ** On the other hand, the use of -ffast-math comes with the following
21033 ** warning:
21035 ** This option [-ffast-math] should never be turned on by any
21036 ** -O option since it can result in incorrect output for programs
21037 ** which depend on an exact implementation of IEEE or ISO
21038 ** rules/specifications for math functions.
21040 ** Under MSVC, this NaN test may fail if compiled with a floating-
21041 ** point precision mode other than /fp:precise. From the MSDN
21042 ** documentation:
21044 ** The compiler [with /fp:precise] will properly handle comparisons
21045 ** involving NaN. For example, x != x evaluates to true if x is NaN
21046 ** ...
21048 #ifdef __FAST_MATH__
21049 # error SQLite will not work correctly with the -ffast-math option of GCC.
21050 #endif
21051 volatile double y = x;
21052 volatile double z = y;
21053 rc = (y!=z);
21054 #else /* if defined(SQLITE_HAVE_ISNAN) */
21055 rc = isnan(x);
21056 #endif /* SQLITE_HAVE_ISNAN */
21057 testcase( rc );
21058 return rc;
21060 #endif /* SQLITE_OMIT_FLOATING_POINT */
21063 ** Compute a string length that is limited to what can be stored in
21064 ** lower 30 bits of a 32-bit signed integer.
21066 ** The value returned will never be negative. Nor will it ever be greater
21067 ** than the actual length of the string. For very long strings (greater
21068 ** than 1GiB) the value returned might be less than the true string length.
21070 SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
21071 const char *z2 = z;
21072 if( z==0 ) return 0;
21073 while( *z2 ){ z2++; }
21074 return 0x3fffffff & (int)(z2 - z);
21078 ** Set the most recent error code and error string for the sqlite
21079 ** handle "db". The error code is set to "err_code".
21081 ** If it is not NULL, string zFormat specifies the format of the
21082 ** error string in the style of the printf functions: The following
21083 ** format characters are allowed:
21085 ** %s Insert a string
21086 ** %z A string that should be freed after use
21087 ** %d Insert an integer
21088 ** %T Insert a token
21089 ** %S Insert the first element of a SrcList
21091 ** zFormat and any string tokens that follow it are assumed to be
21092 ** encoded in UTF-8.
21094 ** To clear the most recent error for sqlite handle "db", sqlite3Error
21095 ** should be called with err_code set to SQLITE_OK and zFormat set
21096 ** to NULL.
21098 SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
21099 if( db && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){
21100 db->errCode = err_code;
21101 if( zFormat ){
21102 char *z;
21103 va_list ap;
21104 va_start(ap, zFormat);
21105 z = sqlite3VMPrintf(db, zFormat, ap);
21106 va_end(ap);
21107 sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
21108 }else{
21109 sqlite3ValueSetStr(db->pErr, 0, 0, SQLITE_UTF8, SQLITE_STATIC);
21115 ** Add an error message to pParse->zErrMsg and increment pParse->nErr.
21116 ** The following formatting characters are allowed:
21118 ** %s Insert a string
21119 ** %z A string that should be freed after use
21120 ** %d Insert an integer
21121 ** %T Insert a token
21122 ** %S Insert the first element of a SrcList
21124 ** This function should be used to report any error that occurs whilst
21125 ** compiling an SQL statement (i.e. within sqlite3_prepare()). The
21126 ** last thing the sqlite3_prepare() function does is copy the error
21127 ** stored by this function into the database handle using sqlite3Error().
21128 ** Function sqlite3Error() should be used during statement execution
21129 ** (sqlite3_step() etc.).
21131 SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
21132 char *zMsg;
21133 va_list ap;
21134 sqlite3 *db = pParse->db;
21135 va_start(ap, zFormat);
21136 zMsg = sqlite3VMPrintf(db, zFormat, ap);
21137 va_end(ap);
21138 if( db->suppressErr ){
21139 sqlite3DbFree(db, zMsg);
21140 }else{
21141 pParse->nErr++;
21142 sqlite3DbFree(db, pParse->zErrMsg);
21143 pParse->zErrMsg = zMsg;
21144 pParse->rc = SQLITE_ERROR;
21149 ** Convert an SQL-style quoted string into a normal string by removing
21150 ** the quote characters. The conversion is done in-place. If the
21151 ** input does not begin with a quote character, then this routine
21152 ** is a no-op.
21154 ** The input string must be zero-terminated. A new zero-terminator
21155 ** is added to the dequoted string.
21157 ** The return value is -1 if no dequoting occurs or the length of the
21158 ** dequoted string, exclusive of the zero terminator, if dequoting does
21159 ** occur.
21161 ** 2002-Feb-14: This routine is extended to remove MS-Access style
21162 ** brackets from around identifers. For example: "[a-b-c]" becomes
21163 ** "a-b-c".
21165 SQLITE_PRIVATE int sqlite3Dequote(char *z){
21166 char quote;
21167 int i, j;
21168 if( z==0 ) return -1;
21169 quote = z[0];
21170 switch( quote ){
21171 case '\'': break;
21172 case '"': break;
21173 case '`': break; /* For MySQL compatibility */
21174 case '[': quote = ']'; break; /* For MS SqlServer compatibility */
21175 default: return -1;
21177 for(i=1, j=0; ALWAYS(z[i]); i++){
21178 if( z[i]==quote ){
21179 if( z[i+1]==quote ){
21180 z[j++] = quote;
21181 i++;
21182 }else{
21183 break;
21185 }else{
21186 z[j++] = z[i];
21189 z[j] = 0;
21190 return j;
21193 /* Convenient short-hand */
21194 #define UpperToLower sqlite3UpperToLower
21197 ** Some systems have stricmp(). Others have strcasecmp(). Because
21198 ** there is no consistency, we will define our own.
21200 ** IMPLEMENTATION-OF: R-20522-24639 The sqlite3_strnicmp() API allows
21201 ** applications and extensions to compare the contents of two buffers
21202 ** containing UTF-8 strings in a case-independent fashion, using the same
21203 ** definition of case independence that SQLite uses internally when
21204 ** comparing identifiers.
21206 SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){
21207 register unsigned char *a, *b;
21208 a = (unsigned char *)zLeft;
21209 b = (unsigned char *)zRight;
21210 while( *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
21211 return UpperToLower[*a] - UpperToLower[*b];
21213 SQLITE_API int sqlite3_strnicmp(const char *zLeft, const char *zRight, int N){
21214 register unsigned char *a, *b;
21215 a = (unsigned char *)zLeft;
21216 b = (unsigned char *)zRight;
21217 while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
21218 return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
21222 ** The string z[] is an text representation of a real number.
21223 ** Convert this string to a double and write it into *pResult.
21225 ** The string z[] is length bytes in length (bytes, not characters) and
21226 ** uses the encoding enc. The string is not necessarily zero-terminated.
21228 ** Return TRUE if the result is a valid real number (or integer) and FALSE
21229 ** if the string is empty or contains extraneous text. Valid numbers
21230 ** are in one of these formats:
21232 ** [+-]digits[E[+-]digits]
21233 ** [+-]digits.[digits][E[+-]digits]
21234 ** [+-].digits[E[+-]digits]
21236 ** Leading and trailing whitespace is ignored for the purpose of determining
21237 ** validity.
21239 ** If some prefix of the input string is a valid number, this routine
21240 ** returns FALSE but it still converts the prefix and writes the result
21241 ** into *pResult.
21243 SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){
21244 #ifndef SQLITE_OMIT_FLOATING_POINT
21245 int incr = (enc==SQLITE_UTF8?1:2);
21246 const char *zEnd = z + length;
21247 /* sign * significand * (10 ^ (esign * exponent)) */
21248 int sign = 1; /* sign of significand */
21249 i64 s = 0; /* significand */
21250 int d = 0; /* adjust exponent for shifting decimal point */
21251 int esign = 1; /* sign of exponent */
21252 int e = 0; /* exponent */
21253 int eValid = 1; /* True exponent is either not used or is well-formed */
21254 double result;
21255 int nDigits = 0;
21257 *pResult = 0.0; /* Default return value, in case of an error */
21259 if( enc==SQLITE_UTF16BE ) z++;
21261 /* skip leading spaces */
21262 while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
21263 if( z>=zEnd ) return 0;
21265 /* get sign of significand */
21266 if( *z=='-' ){
21267 sign = -1;
21268 z+=incr;
21269 }else if( *z=='+' ){
21270 z+=incr;
21273 /* skip leading zeroes */
21274 while( z<zEnd && z[0]=='0' ) z+=incr, nDigits++;
21276 /* copy max significant digits to significand */
21277 while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
21278 s = s*10 + (*z - '0');
21279 z+=incr, nDigits++;
21282 /* skip non-significant significand digits
21283 ** (increase exponent by d to shift decimal left) */
21284 while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++, d++;
21285 if( z>=zEnd ) goto do_atof_calc;
21287 /* if decimal point is present */
21288 if( *z=='.' ){
21289 z+=incr;
21290 /* copy digits from after decimal to significand
21291 ** (decrease exponent by d to shift decimal right) */
21292 while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
21293 s = s*10 + (*z - '0');
21294 z+=incr, nDigits++, d--;
21296 /* skip non-significant digits */
21297 while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++;
21299 if( z>=zEnd ) goto do_atof_calc;
21301 /* if exponent is present */
21302 if( *z=='e' || *z=='E' ){
21303 z+=incr;
21304 eValid = 0;
21305 if( z>=zEnd ) goto do_atof_calc;
21306 /* get sign of exponent */
21307 if( *z=='-' ){
21308 esign = -1;
21309 z+=incr;
21310 }else if( *z=='+' ){
21311 z+=incr;
21313 /* copy digits to exponent */
21314 while( z<zEnd && sqlite3Isdigit(*z) ){
21315 e = e<10000 ? (e*10 + (*z - '0')) : 10000;
21316 z+=incr;
21317 eValid = 1;
21321 /* skip trailing spaces */
21322 if( nDigits && eValid ){
21323 while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
21326 do_atof_calc:
21327 /* adjust exponent by d, and update sign */
21328 e = (e*esign) + d;
21329 if( e<0 ) {
21330 esign = -1;
21331 e *= -1;
21332 } else {
21333 esign = 1;
21336 /* if 0 significand */
21337 if( !s ) {
21338 /* In the IEEE 754 standard, zero is signed.
21339 ** Add the sign if we've seen at least one digit */
21340 result = (sign<0 && nDigits) ? -(double)0 : (double)0;
21341 } else {
21342 /* attempt to reduce exponent */
21343 if( esign>0 ){
21344 while( s<(LARGEST_INT64/10) && e>0 ) e--,s*=10;
21345 }else{
21346 while( !(s%10) && e>0 ) e--,s/=10;
21349 /* adjust the sign of significand */
21350 s = sign<0 ? -s : s;
21352 /* if exponent, scale significand as appropriate
21353 ** and store in result. */
21354 if( e ){
21355 double scale = 1.0;
21356 #ifndef __vax__
21357 /* attempt to handle extremely small/large numbers better */
21358 if( e>307 && e<342 ){
21359 while( e%308 ) { scale *= 1.0e+1; e -= 1; }
21360 if( esign<0 ){
21361 result = s / scale;
21362 result /= SQLITE_HUGE_DBL;
21363 }else{
21364 result = s * scale;
21365 result *= SQLITE_HUGE_DBL;
21367 }else if( e>=342 ){
21368 if( esign<0 ){
21369 result = 0.0*s;
21370 }else{
21371 result = 1e308*1e308*s; /* Infinity */
21373 }else
21374 #endif
21376 /* 1.0e+22 is the largest power of 10 than can be
21377 ** represented exactly. */
21378 while( e%22 ) { scale *= 1.0e+1; e -= 1; }
21379 while( e>0 ) { scale *= 1.0e+22; e -= 22; }
21380 if( esign<0 ){
21381 result = s / scale;
21382 }else{
21383 result = s * scale;
21386 } else {
21387 result = (double)s;
21391 /* store the result */
21392 *pResult = result;
21394 /* return true if number and no extra non-whitespace chracters after */
21395 return z>=zEnd && nDigits>0 && eValid;
21396 #else
21397 return !sqlite3Atoi64(z, pResult, length, enc);
21398 #endif /* SQLITE_OMIT_FLOATING_POINT */
21402 ** Compare the 19-character string zNum against the text representation
21403 ** value 2^63: 9223372036854775808. Return negative, zero, or positive
21404 ** if zNum is less than, equal to, or greater than the string.
21405 ** Note that zNum must contain exactly 19 characters.
21407 ** Unlike memcmp() this routine is guaranteed to return the difference
21408 ** in the values of the last digit if the only difference is in the
21409 ** last digit. So, for example,
21411 ** compare2pow63("9223372036854775800", 1)
21413 ** will return -8.
21415 static int compare2pow63(const char *zNum, int incr){
21416 int c = 0;
21417 int i;
21418 /* 012345678901234567 */
21419 const char *pow63 = "922337203685477580";
21420 for(i=0; c==0 && i<18; i++){
21421 c = (zNum[i*incr]-pow63[i])*10;
21423 if( c==0 ){
21424 c = zNum[18*incr] - '8';
21425 testcase( c==(-1) );
21426 testcase( c==0 );
21427 testcase( c==(+1) );
21429 return c;
21434 ** Convert zNum to a 64-bit signed integer.
21436 ** If the zNum value is representable as a 64-bit twos-complement
21437 ** integer, then write that value into *pNum and return 0.
21439 ** If zNum is exactly 9223372036854665808, return 2. This special
21440 ** case is broken out because while 9223372036854665808 cannot be a
21441 ** signed 64-bit integer, its negative -9223372036854665808 can be.
21443 ** If zNum is too big for a 64-bit integer and is not
21444 ** 9223372036854665808 then return 1.
21446 ** length is the number of bytes in the string (bytes, not characters).
21447 ** The string is not necessarily zero-terminated. The encoding is
21448 ** given by enc.
21450 SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){
21451 int incr = (enc==SQLITE_UTF8?1:2);
21452 u64 u = 0;
21453 int neg = 0; /* assume positive */
21454 int i;
21455 int c = 0;
21456 const char *zStart;
21457 const char *zEnd = zNum + length;
21458 if( enc==SQLITE_UTF16BE ) zNum++;
21459 while( zNum<zEnd && sqlite3Isspace(*zNum) ) zNum+=incr;
21460 if( zNum<zEnd ){
21461 if( *zNum=='-' ){
21462 neg = 1;
21463 zNum+=incr;
21464 }else if( *zNum=='+' ){
21465 zNum+=incr;
21468 zStart = zNum;
21469 while( zNum<zEnd && zNum[0]=='0' ){ zNum+=incr; } /* Skip leading zeros. */
21470 for(i=0; &zNum[i]<zEnd && (c=zNum[i])>='0' && c<='9'; i+=incr){
21471 u = u*10 + c - '0';
21473 if( u>LARGEST_INT64 ){
21474 *pNum = SMALLEST_INT64;
21475 }else if( neg ){
21476 *pNum = -(i64)u;
21477 }else{
21478 *pNum = (i64)u;
21480 testcase( i==18 );
21481 testcase( i==19 );
21482 testcase( i==20 );
21483 if( (c!=0 && &zNum[i]<zEnd) || (i==0 && zStart==zNum) || i>19*incr ){
21484 /* zNum is empty or contains non-numeric text or is longer
21485 ** than 19 digits (thus guaranteeing that it is too large) */
21486 return 1;
21487 }else if( i<19*incr ){
21488 /* Less than 19 digits, so we know that it fits in 64 bits */
21489 assert( u<=LARGEST_INT64 );
21490 return 0;
21491 }else{
21492 /* zNum is a 19-digit numbers. Compare it against 9223372036854775808. */
21493 c = compare2pow63(zNum, incr);
21494 if( c<0 ){
21495 /* zNum is less than 9223372036854775808 so it fits */
21496 assert( u<=LARGEST_INT64 );
21497 return 0;
21498 }else if( c>0 ){
21499 /* zNum is greater than 9223372036854775808 so it overflows */
21500 return 1;
21501 }else{
21502 /* zNum is exactly 9223372036854775808. Fits if negative. The
21503 ** special case 2 overflow if positive */
21504 assert( u-1==LARGEST_INT64 );
21505 assert( (*pNum)==SMALLEST_INT64 );
21506 return neg ? 0 : 2;
21512 ** If zNum represents an integer that will fit in 32-bits, then set
21513 ** *pValue to that integer and return true. Otherwise return false.
21515 ** Any non-numeric characters that following zNum are ignored.
21516 ** This is different from sqlite3Atoi64() which requires the
21517 ** input number to be zero-terminated.
21519 SQLITE_PRIVATE int sqlite3GetInt32(const char *zNum, int *pValue){
21520 sqlite_int64 v = 0;
21521 int i, c;
21522 int neg = 0;
21523 if( zNum[0]=='-' ){
21524 neg = 1;
21525 zNum++;
21526 }else if( zNum[0]=='+' ){
21527 zNum++;
21529 while( zNum[0]=='0' ) zNum++;
21530 for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
21531 v = v*10 + c;
21534 /* The longest decimal representation of a 32 bit integer is 10 digits:
21536 ** 1234567890
21537 ** 2^31 -> 2147483648
21539 testcase( i==10 );
21540 if( i>10 ){
21541 return 0;
21543 testcase( v-neg==2147483647 );
21544 if( v-neg>2147483647 ){
21545 return 0;
21547 if( neg ){
21548 v = -v;
21550 *pValue = (int)v;
21551 return 1;
21555 ** Return a 32-bit integer value extracted from a string. If the
21556 ** string is not an integer, just return 0.
21558 SQLITE_PRIVATE int sqlite3Atoi(const char *z){
21559 int x = 0;
21560 if( z ) sqlite3GetInt32(z, &x);
21561 return x;
21565 ** The variable-length integer encoding is as follows:
21567 ** KEY:
21568 ** A = 0xxxxxxx 7 bits of data and one flag bit
21569 ** B = 1xxxxxxx 7 bits of data and one flag bit
21570 ** C = xxxxxxxx 8 bits of data
21572 ** 7 bits - A
21573 ** 14 bits - BA
21574 ** 21 bits - BBA
21575 ** 28 bits - BBBA
21576 ** 35 bits - BBBBA
21577 ** 42 bits - BBBBBA
21578 ** 49 bits - BBBBBBA
21579 ** 56 bits - BBBBBBBA
21580 ** 64 bits - BBBBBBBBC
21584 ** Write a 64-bit variable-length integer to memory starting at p[0].
21585 ** The length of data write will be between 1 and 9 bytes. The number
21586 ** of bytes written is returned.
21588 ** A variable-length integer consists of the lower 7 bits of each byte
21589 ** for all bytes that have the 8th bit set and one byte with the 8th
21590 ** bit clear. Except, if we get to the 9th byte, it stores the full
21591 ** 8 bits and is the last byte.
21593 SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
21594 int i, j, n;
21595 u8 buf[10];
21596 if( v & (((u64)0xff000000)<<32) ){
21597 p[8] = (u8)v;
21598 v >>= 8;
21599 for(i=7; i>=0; i--){
21600 p[i] = (u8)((v & 0x7f) | 0x80);
21601 v >>= 7;
21603 return 9;
21605 n = 0;
21607 buf[n++] = (u8)((v & 0x7f) | 0x80);
21608 v >>= 7;
21609 }while( v!=0 );
21610 buf[0] &= 0x7f;
21611 assert( n<=9 );
21612 for(i=0, j=n-1; j>=0; j--, i++){
21613 p[i] = buf[j];
21615 return n;
21619 ** This routine is a faster version of sqlite3PutVarint() that only
21620 ** works for 32-bit positive integers and which is optimized for
21621 ** the common case of small integers. A MACRO version, putVarint32,
21622 ** is provided which inlines the single-byte case. All code should use
21623 ** the MACRO version as this function assumes the single-byte case has
21624 ** already been handled.
21626 SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char *p, u32 v){
21627 #ifndef putVarint32
21628 if( (v & ~0x7f)==0 ){
21629 p[0] = v;
21630 return 1;
21632 #endif
21633 if( (v & ~0x3fff)==0 ){
21634 p[0] = (u8)((v>>7) | 0x80);
21635 p[1] = (u8)(v & 0x7f);
21636 return 2;
21638 return sqlite3PutVarint(p, v);
21642 ** Bitmasks used by sqlite3GetVarint(). These precomputed constants
21643 ** are defined here rather than simply putting the constant expressions
21644 ** inline in order to work around bugs in the RVT compiler.
21646 ** SLOT_2_0 A mask for (0x7f<<14) | 0x7f
21648 ** SLOT_4_2_0 A mask for (0x7f<<28) | SLOT_2_0
21650 #define SLOT_2_0 0x001fc07f
21651 #define SLOT_4_2_0 0xf01fc07f
21655 ** Read a 64-bit variable-length integer from memory starting at p[0].
21656 ** Return the number of bytes read. The value is stored in *v.
21658 SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *p, u64 *v){
21659 u32 a,b,s;
21661 a = *p;
21662 /* a: p0 (unmasked) */
21663 if (!(a&0x80))
21665 *v = a;
21666 return 1;
21669 p++;
21670 b = *p;
21671 /* b: p1 (unmasked) */
21672 if (!(b&0x80))
21674 a &= 0x7f;
21675 a = a<<7;
21676 a |= b;
21677 *v = a;
21678 return 2;
21681 /* Verify that constants are precomputed correctly */
21682 assert( SLOT_2_0 == ((0x7f<<14) | (0x7f)) );
21683 assert( SLOT_4_2_0 == ((0xfU<<28) | (0x7f<<14) | (0x7f)) );
21685 p++;
21686 a = a<<14;
21687 a |= *p;
21688 /* a: p0<<14 | p2 (unmasked) */
21689 if (!(a&0x80))
21691 a &= SLOT_2_0;
21692 b &= 0x7f;
21693 b = b<<7;
21694 a |= b;
21695 *v = a;
21696 return 3;
21699 /* CSE1 from below */
21700 a &= SLOT_2_0;
21701 p++;
21702 b = b<<14;
21703 b |= *p;
21704 /* b: p1<<14 | p3 (unmasked) */
21705 if (!(b&0x80))
21707 b &= SLOT_2_0;
21708 /* moved CSE1 up */
21709 /* a &= (0x7f<<14)|(0x7f); */
21710 a = a<<7;
21711 a |= b;
21712 *v = a;
21713 return 4;
21716 /* a: p0<<14 | p2 (masked) */
21717 /* b: p1<<14 | p3 (unmasked) */
21718 /* 1:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
21719 /* moved CSE1 up */
21720 /* a &= (0x7f<<14)|(0x7f); */
21721 b &= SLOT_2_0;
21722 s = a;
21723 /* s: p0<<14 | p2 (masked) */
21725 p++;
21726 a = a<<14;
21727 a |= *p;
21728 /* a: p0<<28 | p2<<14 | p4 (unmasked) */
21729 if (!(a&0x80))
21731 /* we can skip these cause they were (effectively) done above in calc'ing s */
21732 /* a &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
21733 /* b &= (0x7f<<14)|(0x7f); */
21734 b = b<<7;
21735 a |= b;
21736 s = s>>18;
21737 *v = ((u64)s)<<32 | a;
21738 return 5;
21741 /* 2:save off p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
21742 s = s<<7;
21743 s |= b;
21744 /* s: p0<<21 | p1<<14 | p2<<7 | p3 (masked) */
21746 p++;
21747 b = b<<14;
21748 b |= *p;
21749 /* b: p1<<28 | p3<<14 | p5 (unmasked) */
21750 if (!(b&0x80))
21752 /* we can skip this cause it was (effectively) done above in calc'ing s */
21753 /* b &= (0x7f<<28)|(0x7f<<14)|(0x7f); */
21754 a &= SLOT_2_0;
21755 a = a<<7;
21756 a |= b;
21757 s = s>>18;
21758 *v = ((u64)s)<<32 | a;
21759 return 6;
21762 p++;
21763 a = a<<14;
21764 a |= *p;
21765 /* a: p2<<28 | p4<<14 | p6 (unmasked) */
21766 if (!(a&0x80))
21768 a &= SLOT_4_2_0;
21769 b &= SLOT_2_0;
21770 b = b<<7;
21771 a |= b;
21772 s = s>>11;
21773 *v = ((u64)s)<<32 | a;
21774 return 7;
21777 /* CSE2 from below */
21778 a &= SLOT_2_0;
21779 p++;
21780 b = b<<14;
21781 b |= *p;
21782 /* b: p3<<28 | p5<<14 | p7 (unmasked) */
21783 if (!(b&0x80))
21785 b &= SLOT_4_2_0;
21786 /* moved CSE2 up */
21787 /* a &= (0x7f<<14)|(0x7f); */
21788 a = a<<7;
21789 a |= b;
21790 s = s>>4;
21791 *v = ((u64)s)<<32 | a;
21792 return 8;
21795 p++;
21796 a = a<<15;
21797 a |= *p;
21798 /* a: p4<<29 | p6<<15 | p8 (unmasked) */
21800 /* moved CSE2 up */
21801 /* a &= (0x7f<<29)|(0x7f<<15)|(0xff); */
21802 b &= SLOT_2_0;
21803 b = b<<8;
21804 a |= b;
21806 s = s<<4;
21807 b = p[-4];
21808 b &= 0x7f;
21809 b = b>>3;
21810 s |= b;
21812 *v = ((u64)s)<<32 | a;
21814 return 9;
21818 ** Read a 32-bit variable-length integer from memory starting at p[0].
21819 ** Return the number of bytes read. The value is stored in *v.
21821 ** If the varint stored in p[0] is larger than can fit in a 32-bit unsigned
21822 ** integer, then set *v to 0xffffffff.
21824 ** A MACRO version, getVarint32, is provided which inlines the
21825 ** single-byte case. All code should use the MACRO version as
21826 ** this function assumes the single-byte case has already been handled.
21828 SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *p, u32 *v){
21829 u32 a,b;
21831 /* The 1-byte case. Overwhelmingly the most common. Handled inline
21832 ** by the getVarin32() macro */
21833 a = *p;
21834 /* a: p0 (unmasked) */
21835 #ifndef getVarint32
21836 if (!(a&0x80))
21838 /* Values between 0 and 127 */
21839 *v = a;
21840 return 1;
21842 #endif
21844 /* The 2-byte case */
21845 p++;
21846 b = *p;
21847 /* b: p1 (unmasked) */
21848 if (!(b&0x80))
21850 /* Values between 128 and 16383 */
21851 a &= 0x7f;
21852 a = a<<7;
21853 *v = a | b;
21854 return 2;
21857 /* The 3-byte case */
21858 p++;
21859 a = a<<14;
21860 a |= *p;
21861 /* a: p0<<14 | p2 (unmasked) */
21862 if (!(a&0x80))
21864 /* Values between 16384 and 2097151 */
21865 a &= (0x7f<<14)|(0x7f);
21866 b &= 0x7f;
21867 b = b<<7;
21868 *v = a | b;
21869 return 3;
21872 /* A 32-bit varint is used to store size information in btrees.
21873 ** Objects are rarely larger than 2MiB limit of a 3-byte varint.
21874 ** A 3-byte varint is sufficient, for example, to record the size
21875 ** of a 1048569-byte BLOB or string.
21877 ** We only unroll the first 1-, 2-, and 3- byte cases. The very
21878 ** rare larger cases can be handled by the slower 64-bit varint
21879 ** routine.
21881 #if 1
21883 u64 v64;
21884 u8 n;
21886 p -= 2;
21887 n = sqlite3GetVarint(p, &v64);
21888 assert( n>3 && n<=9 );
21889 if( (v64 & SQLITE_MAX_U32)!=v64 ){
21890 *v = 0xffffffff;
21891 }else{
21892 *v = (u32)v64;
21894 return n;
21897 #else
21898 /* For following code (kept for historical record only) shows an
21899 ** unrolling for the 3- and 4-byte varint cases. This code is
21900 ** slightly faster, but it is also larger and much harder to test.
21902 p++;
21903 b = b<<14;
21904 b |= *p;
21905 /* b: p1<<14 | p3 (unmasked) */
21906 if (!(b&0x80))
21908 /* Values between 2097152 and 268435455 */
21909 b &= (0x7f<<14)|(0x7f);
21910 a &= (0x7f<<14)|(0x7f);
21911 a = a<<7;
21912 *v = a | b;
21913 return 4;
21916 p++;
21917 a = a<<14;
21918 a |= *p;
21919 /* a: p0<<28 | p2<<14 | p4 (unmasked) */
21920 if (!(a&0x80))
21922 /* Values between 268435456 and 34359738367 */
21923 a &= SLOT_4_2_0;
21924 b &= SLOT_4_2_0;
21925 b = b<<7;
21926 *v = a | b;
21927 return 5;
21930 /* We can only reach this point when reading a corrupt database
21931 ** file. In that case we are not in any hurry. Use the (relatively
21932 ** slow) general-purpose sqlite3GetVarint() routine to extract the
21933 ** value. */
21935 u64 v64;
21936 u8 n;
21938 p -= 4;
21939 n = sqlite3GetVarint(p, &v64);
21940 assert( n>5 && n<=9 );
21941 *v = (u32)v64;
21942 return n;
21944 #endif
21948 ** Return the number of bytes that will be needed to store the given
21949 ** 64-bit integer.
21951 SQLITE_PRIVATE int sqlite3VarintLen(u64 v){
21952 int i = 0;
21954 i++;
21955 v >>= 7;
21956 }while( v!=0 && ALWAYS(i<9) );
21957 return i;
21962 ** Read or write a four-byte big-endian integer value.
21964 SQLITE_PRIVATE u32 sqlite3Get4byte(const u8 *p){
21965 return (p[0]<<24) | (p[1]<<16) | (p[2]<<8) | p[3];
21967 SQLITE_PRIVATE void sqlite3Put4byte(unsigned char *p, u32 v){
21968 p[0] = (u8)(v>>24);
21969 p[1] = (u8)(v>>16);
21970 p[2] = (u8)(v>>8);
21971 p[3] = (u8)v;
21977 ** Translate a single byte of Hex into an integer.
21978 ** This routine only works if h really is a valid hexadecimal
21979 ** character: 0..9a..fA..F
21981 SQLITE_PRIVATE u8 sqlite3HexToInt(int h){
21982 assert( (h>='0' && h<='9') || (h>='a' && h<='f') || (h>='A' && h<='F') );
21983 #ifdef SQLITE_ASCII
21984 h += 9*(1&(h>>6));
21985 #endif
21986 #ifdef SQLITE_EBCDIC
21987 h += 9*(1&~(h>>4));
21988 #endif
21989 return (u8)(h & 0xf);
21992 #if !defined(SQLITE_OMIT_BLOB_LITERAL) || defined(SQLITE_HAS_CODEC)
21994 ** Convert a BLOB literal of the form "x'hhhhhh'" into its binary
21995 ** value. Return a pointer to its binary value. Space to hold the
21996 ** binary value has been obtained from malloc and must be freed by
21997 ** the calling routine.
21999 SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3 *db, const char *z, int n){
22000 char *zBlob;
22001 int i;
22003 zBlob = (char *)sqlite3DbMallocRaw(db, n/2 + 1);
22004 n--;
22005 if( zBlob ){
22006 for(i=0; i<n; i+=2){
22007 zBlob[i/2] = (sqlite3HexToInt(z[i])<<4) | sqlite3HexToInt(z[i+1]);
22009 zBlob[i/2] = 0;
22011 return zBlob;
22013 #endif /* !SQLITE_OMIT_BLOB_LITERAL || SQLITE_HAS_CODEC */
22016 ** Log an error that is an API call on a connection pointer that should
22017 ** not have been used. The "type" of connection pointer is given as the
22018 ** argument. The zType is a word like "NULL" or "closed" or "invalid".
22020 static void logBadConnection(const char *zType){
22021 sqlite3_log(SQLITE_MISUSE,
22022 "API call with %s database connection pointer",
22023 zType
22028 ** Check to make sure we have a valid db pointer. This test is not
22029 ** foolproof but it does provide some measure of protection against
22030 ** misuse of the interface such as passing in db pointers that are
22031 ** NULL or which have been previously closed. If this routine returns
22032 ** 1 it means that the db pointer is valid and 0 if it should not be
22033 ** dereferenced for any reason. The calling function should invoke
22034 ** SQLITE_MISUSE immediately.
22036 ** sqlite3SafetyCheckOk() requires that the db pointer be valid for
22037 ** use. sqlite3SafetyCheckSickOrOk() allows a db pointer that failed to
22038 ** open properly and is not fit for general use but which can be
22039 ** used as an argument to sqlite3_errmsg() or sqlite3_close().
22041 SQLITE_PRIVATE int sqlite3SafetyCheckOk(sqlite3 *db){
22042 u32 magic;
22043 if( db==0 ){
22044 logBadConnection("NULL");
22045 return 0;
22047 magic = db->magic;
22048 if( magic!=SQLITE_MAGIC_OPEN ){
22049 if( sqlite3SafetyCheckSickOrOk(db) ){
22050 testcase( sqlite3GlobalConfig.xLog!=0 );
22051 logBadConnection("unopened");
22053 return 0;
22054 }else{
22055 return 1;
22058 SQLITE_PRIVATE int sqlite3SafetyCheckSickOrOk(sqlite3 *db){
22059 u32 magic;
22060 magic = db->magic;
22061 if( magic!=SQLITE_MAGIC_SICK &&
22062 magic!=SQLITE_MAGIC_OPEN &&
22063 magic!=SQLITE_MAGIC_BUSY ){
22064 testcase( sqlite3GlobalConfig.xLog!=0 );
22065 logBadConnection("invalid");
22066 return 0;
22067 }else{
22068 return 1;
22073 ** Attempt to add, substract, or multiply the 64-bit signed value iB against
22074 ** the other 64-bit signed integer at *pA and store the result in *pA.
22075 ** Return 0 on success. Or if the operation would have resulted in an
22076 ** overflow, leave *pA unchanged and return 1.
22078 SQLITE_PRIVATE int sqlite3AddInt64(i64 *pA, i64 iB){
22079 i64 iA = *pA;
22080 testcase( iA==0 ); testcase( iA==1 );
22081 testcase( iB==-1 ); testcase( iB==0 );
22082 if( iB>=0 ){
22083 testcase( iA>0 && LARGEST_INT64 - iA == iB );
22084 testcase( iA>0 && LARGEST_INT64 - iA == iB - 1 );
22085 if( iA>0 && LARGEST_INT64 - iA < iB ) return 1;
22086 *pA += iB;
22087 }else{
22088 testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 1 );
22089 testcase( iA<0 && -(iA + LARGEST_INT64) == iB + 2 );
22090 if( iA<0 && -(iA + LARGEST_INT64) > iB + 1 ) return 1;
22091 *pA += iB;
22093 return 0;
22095 SQLITE_PRIVATE int sqlite3SubInt64(i64 *pA, i64 iB){
22096 testcase( iB==SMALLEST_INT64+1 );
22097 if( iB==SMALLEST_INT64 ){
22098 testcase( (*pA)==(-1) ); testcase( (*pA)==0 );
22099 if( (*pA)>=0 ) return 1;
22100 *pA -= iB;
22101 return 0;
22102 }else{
22103 return sqlite3AddInt64(pA, -iB);
22106 #define TWOPOWER32 (((i64)1)<<32)
22107 #define TWOPOWER31 (((i64)1)<<31)
22108 SQLITE_PRIVATE int sqlite3MulInt64(i64 *pA, i64 iB){
22109 i64 iA = *pA;
22110 i64 iA1, iA0, iB1, iB0, r;
22112 iA1 = iA/TWOPOWER32;
22113 iA0 = iA % TWOPOWER32;
22114 iB1 = iB/TWOPOWER32;
22115 iB0 = iB % TWOPOWER32;
22116 if( iA1*iB1 != 0 ) return 1;
22117 assert( iA1*iB0==0 || iA0*iB1==0 );
22118 r = iA1*iB0 + iA0*iB1;
22119 testcase( r==(-TWOPOWER31)-1 );
22120 testcase( r==(-TWOPOWER31) );
22121 testcase( r==TWOPOWER31 );
22122 testcase( r==TWOPOWER31-1 );
22123 if( r<(-TWOPOWER31) || r>=TWOPOWER31 ) return 1;
22124 r *= TWOPOWER32;
22125 if( sqlite3AddInt64(&r, iA0*iB0) ) return 1;
22126 *pA = r;
22127 return 0;
22131 ** Compute the absolute value of a 32-bit signed integer, of possible. Or
22132 ** if the integer has a value of -2147483648, return +2147483647
22134 SQLITE_PRIVATE int sqlite3AbsInt32(int x){
22135 if( x>=0 ) return x;
22136 if( x==(int)0x80000000 ) return 0x7fffffff;
22137 return -x;
22140 #ifdef SQLITE_ENABLE_8_3_NAMES
22142 ** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database
22143 ** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and
22144 ** if filename in z[] has a suffix (a.k.a. "extension") that is longer than
22145 ** three characters, then shorten the suffix on z[] to be the last three
22146 ** characters of the original suffix.
22148 ** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always
22149 ** do the suffix shortening regardless of URI parameter.
22151 ** Examples:
22153 ** test.db-journal => test.nal
22154 ** test.db-wal => test.wal
22155 ** test.db-shm => test.shm
22156 ** test.db-mj7f3319fa => test.9fa
22158 SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
22159 #if SQLITE_ENABLE_8_3_NAMES<2
22160 if( sqlite3_uri_boolean(zBaseFilename, "8_3_names", 0) )
22161 #endif
22163 int i, sz;
22164 sz = sqlite3Strlen30(z);
22165 for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){}
22166 if( z[i]=='.' && ALWAYS(sz>i+4) ) memmove(&z[i+1], &z[sz-3], 4);
22169 #endif
22171 /************** End of util.c ************************************************/
22172 /************** Begin file hash.c ********************************************/
22174 ** 2001 September 22
22176 ** The author disclaims copyright to this source code. In place of
22177 ** a legal notice, here is a blessing:
22179 ** May you do good and not evil.
22180 ** May you find forgiveness for yourself and forgive others.
22181 ** May you share freely, never taking more than you give.
22183 *************************************************************************
22184 ** This is the implementation of generic hash-tables
22185 ** used in SQLite.
22187 /* #include <assert.h> */
22189 /* Turn bulk memory into a hash table object by initializing the
22190 ** fields of the Hash structure.
22192 ** "pNew" is a pointer to the hash table that is to be initialized.
22194 SQLITE_PRIVATE void sqlite3HashInit(Hash *pNew){
22195 assert( pNew!=0 );
22196 pNew->first = 0;
22197 pNew->count = 0;
22198 pNew->htsize = 0;
22199 pNew->ht = 0;
22202 /* Remove all entries from a hash table. Reclaim all memory.
22203 ** Call this routine to delete a hash table or to reset a hash table
22204 ** to the empty state.
22206 SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){
22207 HashElem *elem; /* For looping over all elements of the table */
22209 assert( pH!=0 );
22210 elem = pH->first;
22211 pH->first = 0;
22212 sqlite3_free(pH->ht);
22213 pH->ht = 0;
22214 pH->htsize = 0;
22215 while( elem ){
22216 HashElem *next_elem = elem->next;
22217 sqlite3_free(elem);
22218 elem = next_elem;
22220 pH->count = 0;
22224 ** The hashing function.
22226 static unsigned int strHash(const char *z, int nKey){
22227 int h = 0;
22228 assert( nKey>=0 );
22229 while( nKey > 0 ){
22230 h = (h<<3) ^ h ^ sqlite3UpperToLower[(unsigned char)*z++];
22231 nKey--;
22233 return h;
22237 /* Link pNew element into the hash table pH. If pEntry!=0 then also
22238 ** insert pNew into the pEntry hash bucket.
22240 static void insertElement(
22241 Hash *pH, /* The complete hash table */
22242 struct _ht *pEntry, /* The entry into which pNew is inserted */
22243 HashElem *pNew /* The element to be inserted */
22245 HashElem *pHead; /* First element already in pEntry */
22246 if( pEntry ){
22247 pHead = pEntry->count ? pEntry->chain : 0;
22248 pEntry->count++;
22249 pEntry->chain = pNew;
22250 }else{
22251 pHead = 0;
22253 if( pHead ){
22254 pNew->next = pHead;
22255 pNew->prev = pHead->prev;
22256 if( pHead->prev ){ pHead->prev->next = pNew; }
22257 else { pH->first = pNew; }
22258 pHead->prev = pNew;
22259 }else{
22260 pNew->next = pH->first;
22261 if( pH->first ){ pH->first->prev = pNew; }
22262 pNew->prev = 0;
22263 pH->first = pNew;
22268 /* Resize the hash table so that it cantains "new_size" buckets.
22270 ** The hash table might fail to resize if sqlite3_malloc() fails or
22271 ** if the new size is the same as the prior size.
22272 ** Return TRUE if the resize occurs and false if not.
22274 static int rehash(Hash *pH, unsigned int new_size){
22275 struct _ht *new_ht; /* The new hash table */
22276 HashElem *elem, *next_elem; /* For looping over existing elements */
22278 #if SQLITE_MALLOC_SOFT_LIMIT>0
22279 if( new_size*sizeof(struct _ht)>SQLITE_MALLOC_SOFT_LIMIT ){
22280 new_size = SQLITE_MALLOC_SOFT_LIMIT/sizeof(struct _ht);
22282 if( new_size==pH->htsize ) return 0;
22283 #endif
22285 /* The inability to allocates space for a larger hash table is
22286 ** a performance hit but it is not a fatal error. So mark the
22287 ** allocation as a benign.
22289 sqlite3BeginBenignMalloc();
22290 new_ht = (struct _ht *)sqlite3Malloc( new_size*sizeof(struct _ht) );
22291 sqlite3EndBenignMalloc();
22293 if( new_ht==0 ) return 0;
22294 sqlite3_free(pH->ht);
22295 pH->ht = new_ht;
22296 pH->htsize = new_size = sqlite3MallocSize(new_ht)/sizeof(struct _ht);
22297 memset(new_ht, 0, new_size*sizeof(struct _ht));
22298 for(elem=pH->first, pH->first=0; elem; elem = next_elem){
22299 unsigned int h = strHash(elem->pKey, elem->nKey) % new_size;
22300 next_elem = elem->next;
22301 insertElement(pH, &new_ht[h], elem);
22303 return 1;
22306 /* This function (for internal use only) locates an element in an
22307 ** hash table that matches the given key. The hash for this key has
22308 ** already been computed and is passed as the 4th parameter.
22310 static HashElem *findElementGivenHash(
22311 const Hash *pH, /* The pH to be searched */
22312 const char *pKey, /* The key we are searching for */
22313 int nKey, /* Bytes in key (not counting zero terminator) */
22314 unsigned int h /* The hash for this key. */
22316 HashElem *elem; /* Used to loop thru the element list */
22317 int count; /* Number of elements left to test */
22319 if( pH->ht ){
22320 struct _ht *pEntry = &pH->ht[h];
22321 elem = pEntry->chain;
22322 count = pEntry->count;
22323 }else{
22324 elem = pH->first;
22325 count = pH->count;
22327 while( count-- && ALWAYS(elem) ){
22328 if( elem->nKey==nKey && sqlite3StrNICmp(elem->pKey,pKey,nKey)==0 ){
22329 return elem;
22331 elem = elem->next;
22333 return 0;
22336 /* Remove a single entry from the hash table given a pointer to that
22337 ** element and a hash on the element's key.
22339 static void removeElementGivenHash(
22340 Hash *pH, /* The pH containing "elem" */
22341 HashElem* elem, /* The element to be removed from the pH */
22342 unsigned int h /* Hash value for the element */
22344 struct _ht *pEntry;
22345 if( elem->prev ){
22346 elem->prev->next = elem->next;
22347 }else{
22348 pH->first = elem->next;
22350 if( elem->next ){
22351 elem->next->prev = elem->prev;
22353 if( pH->ht ){
22354 pEntry = &pH->ht[h];
22355 if( pEntry->chain==elem ){
22356 pEntry->chain = elem->next;
22358 pEntry->count--;
22359 assert( pEntry->count>=0 );
22361 sqlite3_free( elem );
22362 pH->count--;
22363 if( pH->count<=0 ){
22364 assert( pH->first==0 );
22365 assert( pH->count==0 );
22366 sqlite3HashClear(pH);
22370 /* Attempt to locate an element of the hash table pH with a key
22371 ** that matches pKey,nKey. Return the data for this element if it is
22372 ** found, or NULL if there is no match.
22374 SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey, int nKey){
22375 HashElem *elem; /* The element that matches key */
22376 unsigned int h; /* A hash on key */
22378 assert( pH!=0 );
22379 assert( pKey!=0 );
22380 assert( nKey>=0 );
22381 if( pH->ht ){
22382 h = strHash(pKey, nKey) % pH->htsize;
22383 }else{
22384 h = 0;
22386 elem = findElementGivenHash(pH, pKey, nKey, h);
22387 return elem ? elem->data : 0;
22390 /* Insert an element into the hash table pH. The key is pKey,nKey
22391 ** and the data is "data".
22393 ** If no element exists with a matching key, then a new
22394 ** element is created and NULL is returned.
22396 ** If another element already exists with the same key, then the
22397 ** new data replaces the old data and the old data is returned.
22398 ** The key is not copied in this instance. If a malloc fails, then
22399 ** the new data is returned and the hash table is unchanged.
22401 ** If the "data" parameter to this function is NULL, then the
22402 ** element corresponding to "key" is removed from the hash table.
22404 SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, void *data){
22405 unsigned int h; /* the hash of the key modulo hash table size */
22406 HashElem *elem; /* Used to loop thru the element list */
22407 HashElem *new_elem; /* New element added to the pH */
22409 assert( pH!=0 );
22410 assert( pKey!=0 );
22411 assert( nKey>=0 );
22412 if( pH->htsize ){
22413 h = strHash(pKey, nKey) % pH->htsize;
22414 }else{
22415 h = 0;
22417 elem = findElementGivenHash(pH,pKey,nKey,h);
22418 if( elem ){
22419 void *old_data = elem->data;
22420 if( data==0 ){
22421 removeElementGivenHash(pH,elem,h);
22422 }else{
22423 elem->data = data;
22424 elem->pKey = pKey;
22425 assert(nKey==elem->nKey);
22427 return old_data;
22429 if( data==0 ) return 0;
22430 new_elem = (HashElem*)sqlite3Malloc( sizeof(HashElem) );
22431 if( new_elem==0 ) return data;
22432 new_elem->pKey = pKey;
22433 new_elem->nKey = nKey;
22434 new_elem->data = data;
22435 pH->count++;
22436 if( pH->count>=10 && pH->count > 2*pH->htsize ){
22437 if( rehash(pH, pH->count*2) ){
22438 assert( pH->htsize>0 );
22439 h = strHash(pKey, nKey) % pH->htsize;
22442 if( pH->ht ){
22443 insertElement(pH, &pH->ht[h], new_elem);
22444 }else{
22445 insertElement(pH, 0, new_elem);
22447 return 0;
22450 /************** End of hash.c ************************************************/
22451 /************** Begin file opcodes.c *****************************************/
22452 /* Automatically generated. Do not edit */
22453 /* See the mkopcodec.awk script for details. */
22454 #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
22455 SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
22456 static const char *const azName[] = { "?",
22457 /* 1 */ "Goto",
22458 /* 2 */ "Gosub",
22459 /* 3 */ "Return",
22460 /* 4 */ "Yield",
22461 /* 5 */ "HaltIfNull",
22462 /* 6 */ "Halt",
22463 /* 7 */ "Integer",
22464 /* 8 */ "Int64",
22465 /* 9 */ "String",
22466 /* 10 */ "Null",
22467 /* 11 */ "Blob",
22468 /* 12 */ "Variable",
22469 /* 13 */ "Move",
22470 /* 14 */ "Copy",
22471 /* 15 */ "SCopy",
22472 /* 16 */ "ResultRow",
22473 /* 17 */ "CollSeq",
22474 /* 18 */ "Function",
22475 /* 19 */ "Not",
22476 /* 20 */ "AddImm",
22477 /* 21 */ "MustBeInt",
22478 /* 22 */ "RealAffinity",
22479 /* 23 */ "Permutation",
22480 /* 24 */ "Compare",
22481 /* 25 */ "Jump",
22482 /* 26 */ "Once",
22483 /* 27 */ "If",
22484 /* 28 */ "IfNot",
22485 /* 29 */ "Column",
22486 /* 30 */ "Affinity",
22487 /* 31 */ "MakeRecord",
22488 /* 32 */ "Count",
22489 /* 33 */ "Savepoint",
22490 /* 34 */ "AutoCommit",
22491 /* 35 */ "Transaction",
22492 /* 36 */ "ReadCookie",
22493 /* 37 */ "SetCookie",
22494 /* 38 */ "VerifyCookie",
22495 /* 39 */ "OpenRead",
22496 /* 40 */ "OpenWrite",
22497 /* 41 */ "OpenAutoindex",
22498 /* 42 */ "OpenEphemeral",
22499 /* 43 */ "SorterOpen",
22500 /* 44 */ "OpenPseudo",
22501 /* 45 */ "Close",
22502 /* 46 */ "SeekLt",
22503 /* 47 */ "SeekLe",
22504 /* 48 */ "SeekGe",
22505 /* 49 */ "SeekGt",
22506 /* 50 */ "Seek",
22507 /* 51 */ "NotFound",
22508 /* 52 */ "Found",
22509 /* 53 */ "IsUnique",
22510 /* 54 */ "NotExists",
22511 /* 55 */ "Sequence",
22512 /* 56 */ "NewRowid",
22513 /* 57 */ "Insert",
22514 /* 58 */ "InsertInt",
22515 /* 59 */ "Delete",
22516 /* 60 */ "ResetCount",
22517 /* 61 */ "SorterCompare",
22518 /* 62 */ "SorterData",
22519 /* 63 */ "RowKey",
22520 /* 64 */ "RowData",
22521 /* 65 */ "Rowid",
22522 /* 66 */ "NullRow",
22523 /* 67 */ "Last",
22524 /* 68 */ "Or",
22525 /* 69 */ "And",
22526 /* 70 */ "SorterSort",
22527 /* 71 */ "Sort",
22528 /* 72 */ "Rewind",
22529 /* 73 */ "IsNull",
22530 /* 74 */ "NotNull",
22531 /* 75 */ "Ne",
22532 /* 76 */ "Eq",
22533 /* 77 */ "Gt",
22534 /* 78 */ "Le",
22535 /* 79 */ "Lt",
22536 /* 80 */ "Ge",
22537 /* 81 */ "SorterNext",
22538 /* 82 */ "BitAnd",
22539 /* 83 */ "BitOr",
22540 /* 84 */ "ShiftLeft",
22541 /* 85 */ "ShiftRight",
22542 /* 86 */ "Add",
22543 /* 87 */ "Subtract",
22544 /* 88 */ "Multiply",
22545 /* 89 */ "Divide",
22546 /* 90 */ "Remainder",
22547 /* 91 */ "Concat",
22548 /* 92 */ "Prev",
22549 /* 93 */ "BitNot",
22550 /* 94 */ "String8",
22551 /* 95 */ "Next",
22552 /* 96 */ "SorterInsert",
22553 /* 97 */ "IdxInsert",
22554 /* 98 */ "IdxDelete",
22555 /* 99 */ "IdxRowid",
22556 /* 100 */ "IdxLT",
22557 /* 101 */ "IdxGE",
22558 /* 102 */ "Destroy",
22559 /* 103 */ "Clear",
22560 /* 104 */ "CreateIndex",
22561 /* 105 */ "CreateTable",
22562 /* 106 */ "ParseSchema",
22563 /* 107 */ "LoadAnalysis",
22564 /* 108 */ "DropTable",
22565 /* 109 */ "DropIndex",
22566 /* 110 */ "DropTrigger",
22567 /* 111 */ "IntegrityCk",
22568 /* 112 */ "RowSetAdd",
22569 /* 113 */ "RowSetRead",
22570 /* 114 */ "RowSetTest",
22571 /* 115 */ "Program",
22572 /* 116 */ "Param",
22573 /* 117 */ "FkCounter",
22574 /* 118 */ "FkIfZero",
22575 /* 119 */ "MemMax",
22576 /* 120 */ "IfPos",
22577 /* 121 */ "IfNeg",
22578 /* 122 */ "IfZero",
22579 /* 123 */ "AggStep",
22580 /* 124 */ "AggFinal",
22581 /* 125 */ "Checkpoint",
22582 /* 126 */ "JournalMode",
22583 /* 127 */ "Vacuum",
22584 /* 128 */ "IncrVacuum",
22585 /* 129 */ "Expire",
22586 /* 130 */ "Real",
22587 /* 131 */ "TableLock",
22588 /* 132 */ "VBegin",
22589 /* 133 */ "VCreate",
22590 /* 134 */ "VDestroy",
22591 /* 135 */ "VOpen",
22592 /* 136 */ "VFilter",
22593 /* 137 */ "VColumn",
22594 /* 138 */ "VNext",
22595 /* 139 */ "VRename",
22596 /* 140 */ "VUpdate",
22597 /* 141 */ "ToText",
22598 /* 142 */ "ToBlob",
22599 /* 143 */ "ToNumeric",
22600 /* 144 */ "ToInt",
22601 /* 145 */ "ToReal",
22602 /* 146 */ "Pagecount",
22603 /* 147 */ "MaxPgcnt",
22604 /* 148 */ "Trace",
22605 /* 149 */ "Noop",
22606 /* 150 */ "Explain",
22608 return azName[i];
22610 #endif
22612 /************** End of opcodes.c *********************************************/
22613 /************** Begin file os_os2.c ******************************************/
22615 ** 2006 Feb 14
22617 ** The author disclaims copyright to this source code. In place of
22618 ** a legal notice, here is a blessing:
22620 ** May you do good and not evil.
22621 ** May you find forgiveness for yourself and forgive others.
22622 ** May you share freely, never taking more than you give.
22624 ******************************************************************************
22626 ** This file contains code that is specific to OS/2.
22630 #if SQLITE_OS_OS2
22633 ** A Note About Memory Allocation:
22635 ** This driver uses malloc()/free() directly rather than going through
22636 ** the SQLite-wrappers sqlite3_malloc()/sqlite3_free(). Those wrappers
22637 ** are designed for use on embedded systems where memory is scarce and
22638 ** malloc failures happen frequently. OS/2 does not typically run on
22639 ** embedded systems, and when it does the developers normally have bigger
22640 ** problems to worry about than running out of memory. So there is not
22641 ** a compelling need to use the wrappers.
22643 ** But there is a good reason to not use the wrappers. If we use the
22644 ** wrappers then we will get simulated malloc() failures within this
22645 ** driver. And that causes all kinds of problems for our tests. We
22646 ** could enhance SQLite to deal with simulated malloc failures within
22647 ** the OS driver, but the code to deal with those failure would not
22648 ** be exercised on Linux (which does not need to malloc() in the driver)
22649 ** and so we would have difficulty writing coverage tests for that
22650 ** code. Better to leave the code out, we think.
22652 ** The point of this discussion is as follows: When creating a new
22653 ** OS layer for an embedded system, if you use this file as an example,
22654 ** avoid the use of malloc()/free(). Those routines work ok on OS/2
22655 ** desktops but not so well in embedded systems.
22659 ** Macros used to determine whether or not to use threads.
22661 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE
22662 # define SQLITE_OS2_THREADS 1
22663 #endif
22666 ** Include code that is common to all os_*.c files
22668 /************** Include os_common.h in the middle of os_os2.c ****************/
22669 /************** Begin file os_common.h ***************************************/
22671 ** 2004 May 22
22673 ** The author disclaims copyright to this source code. In place of
22674 ** a legal notice, here is a blessing:
22676 ** May you do good and not evil.
22677 ** May you find forgiveness for yourself and forgive others.
22678 ** May you share freely, never taking more than you give.
22680 ******************************************************************************
22682 ** This file contains macros and a little bit of code that is common to
22683 ** all of the platform-specific files (os_*.c) and is #included into those
22684 ** files.
22686 ** This file should be #included by the os_*.c files only. It is not a
22687 ** general purpose header file.
22689 #ifndef _OS_COMMON_H_
22690 #define _OS_COMMON_H_
22693 ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
22694 ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
22695 ** switch. The following code should catch this problem at compile-time.
22697 #ifdef MEMORY_DEBUG
22698 # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
22699 #endif
22701 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
22702 # ifndef SQLITE_DEBUG_OS_TRACE
22703 # define SQLITE_DEBUG_OS_TRACE 0
22704 # endif
22705 int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
22706 # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
22707 #else
22708 # define OSTRACE(X)
22709 #endif
22712 ** Macros for performance tracing. Normally turned off. Only works
22713 ** on i486 hardware.
22715 #ifdef SQLITE_PERFORMANCE_TRACE
22718 ** hwtime.h contains inline assembler code for implementing
22719 ** high-performance timing routines.
22721 /************** Include hwtime.h in the middle of os_common.h ****************/
22722 /************** Begin file hwtime.h ******************************************/
22724 ** 2008 May 27
22726 ** The author disclaims copyright to this source code. In place of
22727 ** a legal notice, here is a blessing:
22729 ** May you do good and not evil.
22730 ** May you find forgiveness for yourself and forgive others.
22731 ** May you share freely, never taking more than you give.
22733 ******************************************************************************
22735 ** This file contains inline asm code for retrieving "high-performance"
22736 ** counters for x86 class CPUs.
22738 #ifndef _HWTIME_H_
22739 #define _HWTIME_H_
22742 ** The following routine only works on pentium-class (or newer) processors.
22743 ** It uses the RDTSC opcode to read the cycle count value out of the
22744 ** processor and returns that value. This can be used for high-res
22745 ** profiling.
22747 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
22748 (defined(i386) || defined(__i386__) || defined(_M_IX86))
22750 #if defined(__GNUC__)
22752 __inline__ sqlite_uint64 sqlite3Hwtime(void){
22753 unsigned int lo, hi;
22754 __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
22755 return (sqlite_uint64)hi << 32 | lo;
22758 #elif defined(_MSC_VER)
22760 __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
22761 __asm {
22762 rdtsc
22763 ret ; return value at EDX:EAX
22767 #endif
22769 #elif (defined(__GNUC__) && defined(__x86_64__))
22771 __inline__ sqlite_uint64 sqlite3Hwtime(void){
22772 unsigned long val;
22773 __asm__ __volatile__ ("rdtsc" : "=A" (val));
22774 return val;
22777 #elif (defined(__GNUC__) && defined(__ppc__))
22779 __inline__ sqlite_uint64 sqlite3Hwtime(void){
22780 unsigned long long retval;
22781 unsigned long junk;
22782 __asm__ __volatile__ ("\n\
22783 1: mftbu %1\n\
22784 mftb %L0\n\
22785 mftbu %0\n\
22786 cmpw %0,%1\n\
22787 bne 1b"
22788 : "=r" (retval), "=r" (junk));
22789 return retval;
22792 #else
22794 #error Need implementation of sqlite3Hwtime() for your platform.
22797 ** To compile without implementing sqlite3Hwtime() for your platform,
22798 ** you can remove the above #error and use the following
22799 ** stub function. You will lose timing support for many
22800 ** of the debugging and testing utilities, but it should at
22801 ** least compile and run.
22803 SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
22805 #endif
22807 #endif /* !defined(_HWTIME_H_) */
22809 /************** End of hwtime.h **********************************************/
22810 /************** Continuing where we left off in os_common.h ******************/
22812 static sqlite_uint64 g_start;
22813 static sqlite_uint64 g_elapsed;
22814 #define TIMER_START g_start=sqlite3Hwtime()
22815 #define TIMER_END g_elapsed=sqlite3Hwtime()-g_start
22816 #define TIMER_ELAPSED g_elapsed
22817 #else
22818 #define TIMER_START
22819 #define TIMER_END
22820 #define TIMER_ELAPSED ((sqlite_uint64)0)
22821 #endif
22824 ** If we compile with the SQLITE_TEST macro set, then the following block
22825 ** of code will give us the ability to simulate a disk I/O error. This
22826 ** is used for testing the I/O recovery logic.
22828 #ifdef SQLITE_TEST
22829 SQLITE_API int sqlite3_io_error_hit = 0; /* Total number of I/O Errors */
22830 SQLITE_API int sqlite3_io_error_hardhit = 0; /* Number of non-benign errors */
22831 SQLITE_API int sqlite3_io_error_pending = 0; /* Count down to first I/O error */
22832 SQLITE_API int sqlite3_io_error_persist = 0; /* True if I/O errors persist */
22833 SQLITE_API int sqlite3_io_error_benign = 0; /* True if errors are benign */
22834 SQLITE_API int sqlite3_diskfull_pending = 0;
22835 SQLITE_API int sqlite3_diskfull = 0;
22836 #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
22837 #define SimulateIOError(CODE) \
22838 if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
22839 || sqlite3_io_error_pending-- == 1 ) \
22840 { local_ioerr(); CODE; }
22841 static void local_ioerr(){
22842 IOTRACE(("IOERR\n"));
22843 sqlite3_io_error_hit++;
22844 if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
22846 #define SimulateDiskfullError(CODE) \
22847 if( sqlite3_diskfull_pending ){ \
22848 if( sqlite3_diskfull_pending == 1 ){ \
22849 local_ioerr(); \
22850 sqlite3_diskfull = 1; \
22851 sqlite3_io_error_hit = 1; \
22852 CODE; \
22853 }else{ \
22854 sqlite3_diskfull_pending--; \
22857 #else
22858 #define SimulateIOErrorBenign(X)
22859 #define SimulateIOError(A)
22860 #define SimulateDiskfullError(A)
22861 #endif
22864 ** When testing, keep a count of the number of open files.
22866 #ifdef SQLITE_TEST
22867 SQLITE_API int sqlite3_open_file_count = 0;
22868 #define OpenCounter(X) sqlite3_open_file_count+=(X)
22869 #else
22870 #define OpenCounter(X)
22871 #endif
22873 #endif /* !defined(_OS_COMMON_H_) */
22875 /************** End of os_common.h *******************************************/
22876 /************** Continuing where we left off in os_os2.c *********************/
22878 /* Forward references */
22879 typedef struct os2File os2File; /* The file structure */
22880 typedef struct os2ShmNode os2ShmNode; /* A shared descritive memory node */
22881 typedef struct os2ShmLink os2ShmLink; /* A connection to shared-memory */
22884 ** The os2File structure is subclass of sqlite3_file specific for the OS/2
22885 ** protability layer.
22887 struct os2File {
22888 const sqlite3_io_methods *pMethod; /* Always the first entry */
22889 HFILE h; /* Handle for accessing the file */
22890 int flags; /* Flags provided to os2Open() */
22891 int locktype; /* Type of lock currently held on this file */
22892 int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */
22893 char *zFullPathCp; /* Full path name of this file */
22894 os2ShmLink *pShmLink; /* Instance of shared memory on this file */
22897 #define LOCK_TIMEOUT 10L /* the default locking timeout */
22900 ** Missing from some versions of the OS/2 toolkit -
22901 ** used to allocate from high memory if possible
22903 #ifndef OBJ_ANY
22904 # define OBJ_ANY 0x00000400
22905 #endif
22907 /*****************************************************************************
22908 ** The next group of routines implement the I/O methods specified
22909 ** by the sqlite3_io_methods object.
22910 ******************************************************************************/
22913 ** Close a file.
22915 static int os2Close( sqlite3_file *id ){
22916 APIRET rc;
22917 os2File *pFile = (os2File*)id;
22919 assert( id!=0 );
22920 OSTRACE(( "CLOSE %d (%s)\n", pFile->h, pFile->zFullPathCp ));
22922 rc = DosClose( pFile->h );
22924 if( pFile->flags & SQLITE_OPEN_DELETEONCLOSE )
22925 DosForceDelete( (PSZ)pFile->zFullPathCp );
22927 free( pFile->zFullPathCp );
22928 pFile->zFullPathCp = NULL;
22929 pFile->locktype = NO_LOCK;
22930 pFile->h = (HFILE)-1;
22931 pFile->flags = 0;
22933 OpenCounter( -1 );
22934 return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
22938 ** Read data from a file into a buffer. Return SQLITE_OK if all
22939 ** bytes were read successfully and SQLITE_IOERR if anything goes
22940 ** wrong.
22942 static int os2Read(
22943 sqlite3_file *id, /* File to read from */
22944 void *pBuf, /* Write content into this buffer */
22945 int amt, /* Number of bytes to read */
22946 sqlite3_int64 offset /* Begin reading at this offset */
22948 ULONG fileLocation = 0L;
22949 ULONG got;
22950 os2File *pFile = (os2File*)id;
22951 assert( id!=0 );
22952 SimulateIOError( return SQLITE_IOERR_READ );
22953 OSTRACE(( "READ %d lock=%d\n", pFile->h, pFile->locktype ));
22954 if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
22955 return SQLITE_IOERR;
22957 if( DosRead( pFile->h, pBuf, amt, &got ) != NO_ERROR ){
22958 return SQLITE_IOERR_READ;
22960 if( got == (ULONG)amt )
22961 return SQLITE_OK;
22962 else {
22963 /* Unread portions of the input buffer must be zero-filled */
22964 memset(&((char*)pBuf)[got], 0, amt-got);
22965 return SQLITE_IOERR_SHORT_READ;
22970 ** Write data from a buffer into a file. Return SQLITE_OK on success
22971 ** or some other error code on failure.
22973 static int os2Write(
22974 sqlite3_file *id, /* File to write into */
22975 const void *pBuf, /* The bytes to be written */
22976 int amt, /* Number of bytes to write */
22977 sqlite3_int64 offset /* Offset into the file to begin writing at */
22979 ULONG fileLocation = 0L;
22980 APIRET rc = NO_ERROR;
22981 ULONG wrote;
22982 os2File *pFile = (os2File*)id;
22983 assert( id!=0 );
22984 SimulateIOError( return SQLITE_IOERR_WRITE );
22985 SimulateDiskfullError( return SQLITE_FULL );
22986 OSTRACE(( "WRITE %d lock=%d\n", pFile->h, pFile->locktype ));
22987 if( DosSetFilePtr(pFile->h, offset, FILE_BEGIN, &fileLocation) != NO_ERROR ){
22988 return SQLITE_IOERR;
22990 assert( amt>0 );
22991 while( amt > 0 &&
22992 ( rc = DosWrite( pFile->h, (PVOID)pBuf, amt, &wrote ) ) == NO_ERROR &&
22993 wrote > 0
22995 amt -= wrote;
22996 pBuf = &((char*)pBuf)[wrote];
22999 return ( rc != NO_ERROR || amt > (int)wrote ) ? SQLITE_FULL : SQLITE_OK;
23003 ** Truncate an open file to a specified size
23005 static int os2Truncate( sqlite3_file *id, i64 nByte ){
23006 APIRET rc;
23007 os2File *pFile = (os2File*)id;
23008 assert( id!=0 );
23009 OSTRACE(( "TRUNCATE %d %lld\n", pFile->h, nByte ));
23010 SimulateIOError( return SQLITE_IOERR_TRUNCATE );
23012 /* If the user has configured a chunk-size for this file, truncate the
23013 ** file so that it consists of an integer number of chunks (i.e. the
23014 ** actual file size after the operation may be larger than the requested
23015 ** size).
23017 if( pFile->szChunk ){
23018 nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
23021 rc = DosSetFileSize( pFile->h, nByte );
23022 return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR_TRUNCATE;
23025 #ifdef SQLITE_TEST
23027 ** Count the number of fullsyncs and normal syncs. This is used to test
23028 ** that syncs and fullsyncs are occuring at the right times.
23030 SQLITE_API int sqlite3_sync_count = 0;
23031 SQLITE_API int sqlite3_fullsync_count = 0;
23032 #endif
23035 ** Make sure all writes to a particular file are committed to disk.
23037 static int os2Sync( sqlite3_file *id, int flags ){
23038 os2File *pFile = (os2File*)id;
23039 OSTRACE(( "SYNC %d lock=%d\n", pFile->h, pFile->locktype ));
23040 #ifdef SQLITE_TEST
23041 if( flags & SQLITE_SYNC_FULL){
23042 sqlite3_fullsync_count++;
23044 sqlite3_sync_count++;
23045 #endif
23046 /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
23047 ** no-op
23049 #ifdef SQLITE_NO_SYNC
23050 UNUSED_PARAMETER(pFile);
23051 return SQLITE_OK;
23052 #else
23053 return DosResetBuffer( pFile->h ) == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
23054 #endif
23058 ** Determine the current size of a file in bytes
23060 static int os2FileSize( sqlite3_file *id, sqlite3_int64 *pSize ){
23061 APIRET rc = NO_ERROR;
23062 FILESTATUS3 fsts3FileInfo;
23063 memset(&fsts3FileInfo, 0, sizeof(fsts3FileInfo));
23064 assert( id!=0 );
23065 SimulateIOError( return SQLITE_IOERR_FSTAT );
23066 rc = DosQueryFileInfo( ((os2File*)id)->h, FIL_STANDARD, &fsts3FileInfo, sizeof(FILESTATUS3) );
23067 if( rc == NO_ERROR ){
23068 *pSize = fsts3FileInfo.cbFile;
23069 return SQLITE_OK;
23070 }else{
23071 return SQLITE_IOERR_FSTAT;
23076 ** Acquire a reader lock.
23078 static int getReadLock( os2File *pFile ){
23079 FILELOCK LockArea,
23080 UnlockArea;
23081 APIRET res;
23082 memset(&LockArea, 0, sizeof(LockArea));
23083 memset(&UnlockArea, 0, sizeof(UnlockArea));
23084 LockArea.lOffset = SHARED_FIRST;
23085 LockArea.lRange = SHARED_SIZE;
23086 UnlockArea.lOffset = 0L;
23087 UnlockArea.lRange = 0L;
23088 res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
23089 OSTRACE(( "GETREADLOCK %d res=%d\n", pFile->h, res ));
23090 return res;
23094 ** Undo a readlock
23096 static int unlockReadLock( os2File *id ){
23097 FILELOCK LockArea,
23098 UnlockArea;
23099 APIRET res;
23100 memset(&LockArea, 0, sizeof(LockArea));
23101 memset(&UnlockArea, 0, sizeof(UnlockArea));
23102 LockArea.lOffset = 0L;
23103 LockArea.lRange = 0L;
23104 UnlockArea.lOffset = SHARED_FIRST;
23105 UnlockArea.lRange = SHARED_SIZE;
23106 res = DosSetFileLocks( id->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 1L );
23107 OSTRACE(( "UNLOCK-READLOCK file handle=%d res=%d?\n", id->h, res ));
23108 return res;
23112 ** Lock the file with the lock specified by parameter locktype - one
23113 ** of the following:
23115 ** (1) SHARED_LOCK
23116 ** (2) RESERVED_LOCK
23117 ** (3) PENDING_LOCK
23118 ** (4) EXCLUSIVE_LOCK
23120 ** Sometimes when requesting one lock state, additional lock states
23121 ** are inserted in between. The locking might fail on one of the later
23122 ** transitions leaving the lock state different from what it started but
23123 ** still short of its goal. The following chart shows the allowed
23124 ** transitions and the inserted intermediate states:
23126 ** UNLOCKED -> SHARED
23127 ** SHARED -> RESERVED
23128 ** SHARED -> (PENDING) -> EXCLUSIVE
23129 ** RESERVED -> (PENDING) -> EXCLUSIVE
23130 ** PENDING -> EXCLUSIVE
23132 ** This routine will only increase a lock. The os2Unlock() routine
23133 ** erases all locks at once and returns us immediately to locking level 0.
23134 ** It is not possible to lower the locking level one step at a time. You
23135 ** must go straight to locking level 0.
23137 static int os2Lock( sqlite3_file *id, int locktype ){
23138 int rc = SQLITE_OK; /* Return code from subroutines */
23139 APIRET res = NO_ERROR; /* Result of an OS/2 lock call */
23140 int newLocktype; /* Set pFile->locktype to this value before exiting */
23141 int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
23142 FILELOCK LockArea,
23143 UnlockArea;
23144 os2File *pFile = (os2File*)id;
23145 memset(&LockArea, 0, sizeof(LockArea));
23146 memset(&UnlockArea, 0, sizeof(UnlockArea));
23147 assert( pFile!=0 );
23148 OSTRACE(( "LOCK %d %d was %d\n", pFile->h, locktype, pFile->locktype ));
23150 /* If there is already a lock of this type or more restrictive on the
23151 ** os2File, do nothing. Don't use the end_lock: exit path, as
23152 ** sqlite3_mutex_enter() hasn't been called yet.
23154 if( pFile->locktype>=locktype ){
23155 OSTRACE(( "LOCK %d %d ok (already held)\n", pFile->h, locktype ));
23156 return SQLITE_OK;
23159 /* Make sure the locking sequence is correct
23161 assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
23162 assert( locktype!=PENDING_LOCK );
23163 assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
23165 /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
23166 ** a SHARED lock. If we are acquiring a SHARED lock, the acquisition of
23167 ** the PENDING_LOCK byte is temporary.
23169 newLocktype = pFile->locktype;
23170 if( pFile->locktype==NO_LOCK
23171 || (locktype==EXCLUSIVE_LOCK && pFile->locktype==RESERVED_LOCK)
23173 LockArea.lOffset = PENDING_BYTE;
23174 LockArea.lRange = 1L;
23175 UnlockArea.lOffset = 0L;
23176 UnlockArea.lRange = 0L;
23178 /* wait longer than LOCK_TIMEOUT here not to have to try multiple times */
23179 res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, 100L, 0L );
23180 if( res == NO_ERROR ){
23181 gotPendingLock = 1;
23182 OSTRACE(( "LOCK %d pending lock boolean set. res=%d\n", pFile->h, res ));
23186 /* Acquire a shared lock
23188 if( locktype==SHARED_LOCK && res == NO_ERROR ){
23189 assert( pFile->locktype==NO_LOCK );
23190 res = getReadLock(pFile);
23191 if( res == NO_ERROR ){
23192 newLocktype = SHARED_LOCK;
23194 OSTRACE(( "LOCK %d acquire shared lock. res=%d\n", pFile->h, res ));
23197 /* Acquire a RESERVED lock
23199 if( locktype==RESERVED_LOCK && res == NO_ERROR ){
23200 assert( pFile->locktype==SHARED_LOCK );
23201 LockArea.lOffset = RESERVED_BYTE;
23202 LockArea.lRange = 1L;
23203 UnlockArea.lOffset = 0L;
23204 UnlockArea.lRange = 0L;
23205 res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23206 if( res == NO_ERROR ){
23207 newLocktype = RESERVED_LOCK;
23209 OSTRACE(( "LOCK %d acquire reserved lock. res=%d\n", pFile->h, res ));
23212 /* Acquire a PENDING lock
23214 if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
23215 newLocktype = PENDING_LOCK;
23216 gotPendingLock = 0;
23217 OSTRACE(( "LOCK %d acquire pending lock. pending lock boolean unset.\n",
23218 pFile->h ));
23221 /* Acquire an EXCLUSIVE lock
23223 if( locktype==EXCLUSIVE_LOCK && res == NO_ERROR ){
23224 assert( pFile->locktype>=SHARED_LOCK );
23225 res = unlockReadLock(pFile);
23226 OSTRACE(( "unreadlock = %d\n", res ));
23227 LockArea.lOffset = SHARED_FIRST;
23228 LockArea.lRange = SHARED_SIZE;
23229 UnlockArea.lOffset = 0L;
23230 UnlockArea.lRange = 0L;
23231 res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23232 if( res == NO_ERROR ){
23233 newLocktype = EXCLUSIVE_LOCK;
23234 }else{
23235 OSTRACE(( "OS/2 error-code = %d\n", res ));
23236 getReadLock(pFile);
23238 OSTRACE(( "LOCK %d acquire exclusive lock. res=%d\n", pFile->h, res ));
23241 /* If we are holding a PENDING lock that ought to be released, then
23242 ** release it now.
23244 if( gotPendingLock && locktype==SHARED_LOCK ){
23245 int r;
23246 LockArea.lOffset = 0L;
23247 LockArea.lRange = 0L;
23248 UnlockArea.lOffset = PENDING_BYTE;
23249 UnlockArea.lRange = 1L;
23250 r = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23251 OSTRACE(( "LOCK %d unlocking pending/is shared. r=%d\n", pFile->h, r ));
23254 /* Update the state of the lock has held in the file descriptor then
23255 ** return the appropriate result code.
23257 if( res == NO_ERROR ){
23258 rc = SQLITE_OK;
23259 }else{
23260 OSTRACE(( "LOCK FAILED %d trying for %d but got %d\n", pFile->h,
23261 locktype, newLocktype ));
23262 rc = SQLITE_BUSY;
23264 pFile->locktype = newLocktype;
23265 OSTRACE(( "LOCK %d now %d\n", pFile->h, pFile->locktype ));
23266 return rc;
23270 ** This routine checks if there is a RESERVED lock held on the specified
23271 ** file by this or any other process. If such a lock is held, return
23272 ** non-zero, otherwise zero.
23274 static int os2CheckReservedLock( sqlite3_file *id, int *pOut ){
23275 int r = 0;
23276 os2File *pFile = (os2File*)id;
23277 assert( pFile!=0 );
23278 if( pFile->locktype>=RESERVED_LOCK ){
23279 r = 1;
23280 OSTRACE(( "TEST WR-LOCK %d %d (local)\n", pFile->h, r ));
23281 }else{
23282 FILELOCK LockArea,
23283 UnlockArea;
23284 APIRET rc = NO_ERROR;
23285 memset(&LockArea, 0, sizeof(LockArea));
23286 memset(&UnlockArea, 0, sizeof(UnlockArea));
23287 LockArea.lOffset = RESERVED_BYTE;
23288 LockArea.lRange = 1L;
23289 UnlockArea.lOffset = 0L;
23290 UnlockArea.lRange = 0L;
23291 rc = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23292 OSTRACE(( "TEST WR-LOCK %d lock reserved byte rc=%d\n", pFile->h, rc ));
23293 if( rc == NO_ERROR ){
23294 APIRET rcu = NO_ERROR; /* return code for unlocking */
23295 LockArea.lOffset = 0L;
23296 LockArea.lRange = 0L;
23297 UnlockArea.lOffset = RESERVED_BYTE;
23298 UnlockArea.lRange = 1L;
23299 rcu = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23300 OSTRACE(( "TEST WR-LOCK %d unlock reserved byte r=%d\n", pFile->h, rcu ));
23302 r = !(rc == NO_ERROR);
23303 OSTRACE(( "TEST WR-LOCK %d %d (remote)\n", pFile->h, r ));
23305 *pOut = r;
23306 return SQLITE_OK;
23310 ** Lower the locking level on file descriptor id to locktype. locktype
23311 ** must be either NO_LOCK or SHARED_LOCK.
23313 ** If the locking level of the file descriptor is already at or below
23314 ** the requested locking level, this routine is a no-op.
23316 ** It is not possible for this routine to fail if the second argument
23317 ** is NO_LOCK. If the second argument is SHARED_LOCK then this routine
23318 ** might return SQLITE_IOERR;
23320 static int os2Unlock( sqlite3_file *id, int locktype ){
23321 int type;
23322 os2File *pFile = (os2File*)id;
23323 APIRET rc = SQLITE_OK;
23324 APIRET res = NO_ERROR;
23325 FILELOCK LockArea,
23326 UnlockArea;
23327 memset(&LockArea, 0, sizeof(LockArea));
23328 memset(&UnlockArea, 0, sizeof(UnlockArea));
23329 assert( pFile!=0 );
23330 assert( locktype<=SHARED_LOCK );
23331 OSTRACE(( "UNLOCK %d to %d was %d\n", pFile->h, locktype, pFile->locktype ));
23332 type = pFile->locktype;
23333 if( type>=EXCLUSIVE_LOCK ){
23334 LockArea.lOffset = 0L;
23335 LockArea.lRange = 0L;
23336 UnlockArea.lOffset = SHARED_FIRST;
23337 UnlockArea.lRange = SHARED_SIZE;
23338 res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23339 OSTRACE(( "UNLOCK %d exclusive lock res=%d\n", pFile->h, res ));
23340 if( locktype==SHARED_LOCK && getReadLock(pFile) != NO_ERROR ){
23341 /* This should never happen. We should always be able to
23342 ** reacquire the read lock */
23343 OSTRACE(( "UNLOCK %d to %d getReadLock() failed\n", pFile->h, locktype ));
23344 rc = SQLITE_IOERR_UNLOCK;
23347 if( type>=RESERVED_LOCK ){
23348 LockArea.lOffset = 0L;
23349 LockArea.lRange = 0L;
23350 UnlockArea.lOffset = RESERVED_BYTE;
23351 UnlockArea.lRange = 1L;
23352 res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23353 OSTRACE(( "UNLOCK %d reserved res=%d\n", pFile->h, res ));
23355 if( locktype==NO_LOCK && type>=SHARED_LOCK ){
23356 res = unlockReadLock(pFile);
23357 OSTRACE(( "UNLOCK %d is %d want %d res=%d\n",
23358 pFile->h, type, locktype, res ));
23360 if( type>=PENDING_LOCK ){
23361 LockArea.lOffset = 0L;
23362 LockArea.lRange = 0L;
23363 UnlockArea.lOffset = PENDING_BYTE;
23364 UnlockArea.lRange = 1L;
23365 res = DosSetFileLocks( pFile->h, &UnlockArea, &LockArea, LOCK_TIMEOUT, 0L );
23366 OSTRACE(( "UNLOCK %d pending res=%d\n", pFile->h, res ));
23368 pFile->locktype = locktype;
23369 OSTRACE(( "UNLOCK %d now %d\n", pFile->h, pFile->locktype ));
23370 return rc;
23374 ** Control and query of the open file handle.
23376 static int os2FileControl(sqlite3_file *id, int op, void *pArg){
23377 switch( op ){
23378 case SQLITE_FCNTL_LOCKSTATE: {
23379 *(int*)pArg = ((os2File*)id)->locktype;
23380 OSTRACE(( "FCNTL_LOCKSTATE %d lock=%d\n",
23381 ((os2File*)id)->h, ((os2File*)id)->locktype ));
23382 return SQLITE_OK;
23384 case SQLITE_FCNTL_CHUNK_SIZE: {
23385 ((os2File*)id)->szChunk = *(int*)pArg;
23386 return SQLITE_OK;
23388 case SQLITE_FCNTL_SIZE_HINT: {
23389 sqlite3_int64 sz = *(sqlite3_int64*)pArg;
23390 SimulateIOErrorBenign(1);
23391 os2Truncate(id, sz);
23392 SimulateIOErrorBenign(0);
23393 return SQLITE_OK;
23395 case SQLITE_FCNTL_SYNC_OMITTED: {
23396 return SQLITE_OK;
23399 return SQLITE_NOTFOUND;
23403 ** Return the sector size in bytes of the underlying block device for
23404 ** the specified file. This is almost always 512 bytes, but may be
23405 ** larger for some devices.
23407 ** SQLite code assumes this function cannot fail. It also assumes that
23408 ** if two files are created in the same file-system directory (i.e.
23409 ** a database and its journal file) that the sector size will be the
23410 ** same for both.
23412 static int os2SectorSize(sqlite3_file *id){
23413 UNUSED_PARAMETER(id);
23414 return SQLITE_DEFAULT_SECTOR_SIZE;
23418 ** Return a vector of device characteristics.
23420 static int os2DeviceCharacteristics(sqlite3_file *id){
23421 UNUSED_PARAMETER(id);
23422 return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;
23427 ** Character set conversion objects used by conversion routines.
23429 static UconvObject ucUtf8 = NULL; /* convert between UTF-8 and UCS-2 */
23430 static UconvObject uclCp = NULL; /* convert between local codepage and UCS-2 */
23433 ** Helper function to initialize the conversion objects from and to UTF-8.
23435 static void initUconvObjects( void ){
23436 if( UniCreateUconvObject( UTF_8, &ucUtf8 ) != ULS_SUCCESS )
23437 ucUtf8 = NULL;
23438 if ( UniCreateUconvObject( (UniChar *)L"@path=yes", &uclCp ) != ULS_SUCCESS )
23439 uclCp = NULL;
23443 ** Helper function to free the conversion objects from and to UTF-8.
23445 static void freeUconvObjects( void ){
23446 if ( ucUtf8 )
23447 UniFreeUconvObject( ucUtf8 );
23448 if ( uclCp )
23449 UniFreeUconvObject( uclCp );
23450 ucUtf8 = NULL;
23451 uclCp = NULL;
23455 ** Helper function to convert UTF-8 filenames to local OS/2 codepage.
23456 ** The two-step process: first convert the incoming UTF-8 string
23457 ** into UCS-2 and then from UCS-2 to the current codepage.
23458 ** The returned char pointer has to be freed.
23460 static char *convertUtf8PathToCp( const char *in ){
23461 UniChar tempPath[CCHMAXPATH];
23462 char *out = (char *)calloc( CCHMAXPATH, 1 );
23464 if( !out )
23465 return NULL;
23467 if( !ucUtf8 || !uclCp )
23468 initUconvObjects();
23470 /* determine string for the conversion of UTF-8 which is CP1208 */
23471 if( UniStrToUcs( ucUtf8, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
23472 return out; /* if conversion fails, return the empty string */
23474 /* conversion for current codepage which can be used for paths */
23475 UniStrFromUcs( uclCp, out, tempPath, CCHMAXPATH );
23477 return out;
23481 ** Helper function to convert filenames from local codepage to UTF-8.
23482 ** The two-step process: first convert the incoming codepage-specific
23483 ** string into UCS-2 and then from UCS-2 to the codepage of UTF-8.
23484 ** The returned char pointer has to be freed.
23486 ** This function is non-static to be able to use this in shell.c and
23487 ** similar applications that take command line arguments.
23489 char *convertCpPathToUtf8( const char *in ){
23490 UniChar tempPath[CCHMAXPATH];
23491 char *out = (char *)calloc( CCHMAXPATH, 1 );
23493 if( !out )
23494 return NULL;
23496 if( !ucUtf8 || !uclCp )
23497 initUconvObjects();
23499 /* conversion for current codepage which can be used for paths */
23500 if( UniStrToUcs( uclCp, tempPath, (char *)in, CCHMAXPATH ) != ULS_SUCCESS )
23501 return out; /* if conversion fails, return the empty string */
23503 /* determine string for the conversion of UTF-8 which is CP1208 */
23504 UniStrFromUcs( ucUtf8, out, tempPath, CCHMAXPATH );
23506 return out;
23510 #ifndef SQLITE_OMIT_WAL
23513 ** Use main database file for interprocess locking. If un-defined
23514 ** a separate file is created for this purpose. The file will be
23515 ** used only to set file locks. There will be no data written to it.
23517 #define SQLITE_OS2_NO_WAL_LOCK_FILE
23519 #if 0
23520 static void _ERR_TRACE( const char *fmt, ... ) {
23521 va_list ap;
23522 va_start(ap, fmt);
23523 vfprintf(stderr, fmt, ap);
23524 fflush(stderr);
23526 #define ERR_TRACE(rc, msg) \
23527 if( (rc) != SQLITE_OK ) _ERR_TRACE msg;
23528 #else
23529 #define ERR_TRACE(rc, msg)
23530 #endif
23533 ** Helper functions to obtain and relinquish the global mutex. The
23534 ** global mutex is used to protect os2ShmNodeList.
23536 ** Function os2ShmMutexHeld() is used to assert() that the global mutex
23537 ** is held when required. This function is only used as part of assert()
23538 ** statements. e.g.
23540 ** os2ShmEnterMutex()
23541 ** assert( os2ShmMutexHeld() );
23542 ** os2ShmLeaveMutex()
23544 static void os2ShmEnterMutex(void){
23545 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
23547 static void os2ShmLeaveMutex(void){
23548 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
23550 #ifdef SQLITE_DEBUG
23551 static int os2ShmMutexHeld(void) {
23552 return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
23554 int GetCurrentProcessId(void) {
23555 PPIB pib;
23556 DosGetInfoBlocks(NULL, &pib);
23557 return (int)pib->pib_ulpid;
23559 #endif
23562 ** Object used to represent a the shared memory area for a single log file.
23563 ** When multiple threads all reference the same log-summary, each thread has
23564 ** its own os2File object, but they all point to a single instance of this
23565 ** object. In other words, each log-summary is opened only once per process.
23567 ** os2ShmMutexHeld() must be true when creating or destroying
23568 ** this object or while reading or writing the following fields:
23570 ** nRef
23571 ** pNext
23573 ** The following fields are read-only after the object is created:
23575 ** szRegion
23576 ** hLockFile
23577 ** shmBaseName
23579 ** Either os2ShmNode.mutex must be held or os2ShmNode.nRef==0 and
23580 ** os2ShmMutexHeld() is true when reading or writing any other field
23581 ** in this structure.
23584 struct os2ShmNode {
23585 sqlite3_mutex *mutex; /* Mutex to access this object */
23586 os2ShmNode *pNext; /* Next in list of all os2ShmNode objects */
23588 int szRegion; /* Size of shared-memory regions */
23590 int nRegion; /* Size of array apRegion */
23591 void **apRegion; /* Array of pointers to shared-memory regions */
23593 int nRef; /* Number of os2ShmLink objects pointing to this */
23594 os2ShmLink *pFirst; /* First os2ShmLink object pointing to this */
23596 HFILE hLockFile; /* File used for inter-process memory locking */
23597 char shmBaseName[1]; /* Name of the memory object !!! must last !!! */
23602 ** Structure used internally by this VFS to record the state of an
23603 ** open shared memory connection.
23605 ** The following fields are initialized when this object is created and
23606 ** are read-only thereafter:
23608 ** os2Shm.pShmNode
23609 ** os2Shm.id
23611 ** All other fields are read/write. The os2Shm.pShmNode->mutex must be held
23612 ** while accessing any read/write fields.
23614 struct os2ShmLink {
23615 os2ShmNode *pShmNode; /* The underlying os2ShmNode object */
23616 os2ShmLink *pNext; /* Next os2Shm with the same os2ShmNode */
23617 u32 sharedMask; /* Mask of shared locks held */
23618 u32 exclMask; /* Mask of exclusive locks held */
23619 #ifdef SQLITE_DEBUG
23620 u8 id; /* Id of this connection with its os2ShmNode */
23621 #endif
23626 ** A global list of all os2ShmNode objects.
23628 ** The os2ShmMutexHeld() must be true while reading or writing this list.
23630 static os2ShmNode *os2ShmNodeList = NULL;
23633 ** Constants used for locking
23635 #ifdef SQLITE_OS2_NO_WAL_LOCK_FILE
23636 #define OS2_SHM_BASE (PENDING_BYTE + 0x10000) /* first lock byte */
23637 #else
23638 #define OS2_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */
23639 #endif
23641 #define OS2_SHM_DMS (OS2_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */
23644 ** Apply advisory locks for all n bytes beginning at ofst.
23646 #define _SHM_UNLCK 1 /* no lock */
23647 #define _SHM_RDLCK 2 /* shared lock, no wait */
23648 #define _SHM_WRLCK 3 /* exlusive lock, no wait */
23649 #define _SHM_WRLCK_WAIT 4 /* exclusive lock, wait */
23650 static int os2ShmSystemLock(
23651 os2ShmNode *pNode, /* Apply locks to this open shared-memory segment */
23652 int lockType, /* _SHM_UNLCK, _SHM_RDLCK, _SHM_WRLCK or _SHM_WRLCK_WAIT */
23653 int ofst, /* Offset to first byte to be locked/unlocked */
23654 int nByte /* Number of bytes to lock or unlock */
23656 APIRET rc;
23657 FILELOCK area;
23658 ULONG mode, timeout;
23660 /* Access to the os2ShmNode object is serialized by the caller */
23661 assert( sqlite3_mutex_held(pNode->mutex) || pNode->nRef==0 );
23663 mode = 1; /* shared lock */
23664 timeout = 0; /* no wait */
23665 area.lOffset = ofst;
23666 area.lRange = nByte;
23668 switch( lockType ) {
23669 case _SHM_WRLCK_WAIT:
23670 timeout = (ULONG)-1; /* wait forever */
23671 case _SHM_WRLCK:
23672 mode = 0; /* exclusive lock */
23673 case _SHM_RDLCK:
23674 rc = DosSetFileLocks(pNode->hLockFile,
23675 NULL, &area, timeout, mode);
23676 break;
23677 /* case _SHM_UNLCK: */
23678 default:
23679 rc = DosSetFileLocks(pNode->hLockFile,
23680 &area, NULL, 0, 0);
23681 break;
23684 OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n",
23685 pNode->hLockFile,
23686 rc==SQLITE_OK ? "ok" : "failed",
23687 lockType==_SHM_UNLCK ? "Unlock" : "Lock",
23688 rc));
23690 ERR_TRACE(rc, ("os2ShmSystemLock: %d %s\n", rc, pNode->shmBaseName))
23692 return ( rc == 0 ) ? SQLITE_OK : SQLITE_BUSY;
23696 ** Find an os2ShmNode in global list or allocate a new one, if not found.
23698 ** This is not a VFS shared-memory method; it is a utility function called
23699 ** by VFS shared-memory methods.
23701 static int os2OpenSharedMemory( os2File *fd, int szRegion ) {
23702 os2ShmLink *pLink;
23703 os2ShmNode *pNode;
23704 int cbShmName, rc = SQLITE_OK;
23705 char shmName[CCHMAXPATH + 30];
23706 #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
23707 ULONG action;
23708 #endif
23710 /* We need some additional space at the end to append the region number */
23711 cbShmName = sprintf(shmName, "\\SHAREMEM\\%s", fd->zFullPathCp );
23712 if( cbShmName >= CCHMAXPATH-8 )
23713 return SQLITE_IOERR_SHMOPEN;
23715 /* Replace colon in file name to form a valid shared memory name */
23716 shmName[10+1] = '!';
23718 /* Allocate link object (we free it later in case of failure) */
23719 pLink = sqlite3_malloc( sizeof(*pLink) );
23720 if( !pLink )
23721 return SQLITE_NOMEM;
23723 /* Access node list */
23724 os2ShmEnterMutex();
23726 /* Find node by it's shared memory base name */
23727 for( pNode = os2ShmNodeList;
23728 pNode && stricmp(shmName, pNode->shmBaseName) != 0;
23729 pNode = pNode->pNext ) ;
23731 /* Not found: allocate a new node */
23732 if( !pNode ) {
23733 pNode = sqlite3_malloc( sizeof(*pNode) + cbShmName );
23734 if( pNode ) {
23735 memset(pNode, 0, sizeof(*pNode) );
23736 pNode->szRegion = szRegion;
23737 pNode->hLockFile = (HFILE)-1;
23738 strcpy(pNode->shmBaseName, shmName);
23740 #ifdef SQLITE_OS2_NO_WAL_LOCK_FILE
23741 if( DosDupHandle(fd->h, &pNode->hLockFile) != 0 ) {
23742 #else
23743 sprintf(shmName, "%s-lck", fd->zFullPathCp);
23744 if( DosOpen((PSZ)shmName, &pNode->hLockFile, &action, 0, FILE_NORMAL,
23745 OPEN_ACTION_OPEN_IF_EXISTS | OPEN_ACTION_CREATE_IF_NEW,
23746 OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE |
23747 OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR,
23748 NULL) != 0 ) {
23749 #endif
23750 sqlite3_free(pNode);
23751 rc = SQLITE_IOERR;
23752 } else {
23753 pNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
23754 if( !pNode->mutex ) {
23755 sqlite3_free(pNode);
23756 rc = SQLITE_NOMEM;
23759 } else {
23760 rc = SQLITE_NOMEM;
23763 if( rc == SQLITE_OK ) {
23764 pNode->pNext = os2ShmNodeList;
23765 os2ShmNodeList = pNode;
23766 } else {
23767 pNode = NULL;
23769 } else if( pNode->szRegion != szRegion ) {
23770 rc = SQLITE_IOERR_SHMSIZE;
23771 pNode = NULL;
23774 if( pNode ) {
23775 sqlite3_mutex_enter(pNode->mutex);
23777 memset(pLink, 0, sizeof(*pLink));
23779 pLink->pShmNode = pNode;
23780 pLink->pNext = pNode->pFirst;
23781 pNode->pFirst = pLink;
23782 pNode->nRef++;
23784 fd->pShmLink = pLink;
23786 sqlite3_mutex_leave(pNode->mutex);
23788 } else {
23789 /* Error occured. Free our link object. */
23790 sqlite3_free(pLink);
23793 os2ShmLeaveMutex();
23795 ERR_TRACE(rc, ("os2OpenSharedMemory: %d %s\n", rc, fd->zFullPathCp))
23797 return rc;
23801 ** Purge the os2ShmNodeList list of all entries with nRef==0.
23803 ** This is not a VFS shared-memory method; it is a utility function called
23804 ** by VFS shared-memory methods.
23806 static void os2PurgeShmNodes( int deleteFlag ) {
23807 os2ShmNode *pNode;
23808 os2ShmNode **ppNode;
23810 os2ShmEnterMutex();
23812 ppNode = &os2ShmNodeList;
23814 while( *ppNode ) {
23815 pNode = *ppNode;
23817 if( pNode->nRef == 0 ) {
23818 *ppNode = pNode->pNext;
23820 if( pNode->apRegion ) {
23821 /* Prevent other processes from resizing the shared memory */
23822 os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
23824 while( pNode->nRegion-- ) {
23825 #ifdef SQLITE_DEBUG
23826 int rc =
23827 #endif
23828 DosFreeMem(pNode->apRegion[pNode->nRegion]);
23830 OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
23831 (int)GetCurrentProcessId(), pNode->nRegion,
23832 rc == 0 ? "ok" : "failed"));
23835 /* Allow other processes to resize the shared memory */
23836 os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
23838 sqlite3_free(pNode->apRegion);
23841 DosClose(pNode->hLockFile);
23843 #ifndef SQLITE_OS2_NO_WAL_LOCK_FILE
23844 if( deleteFlag ) {
23845 char fileName[CCHMAXPATH];
23846 /* Skip "\\SHAREMEM\\" */
23847 sprintf(fileName, "%s-lck", pNode->shmBaseName + 10);
23848 /* restore colon */
23849 fileName[1] = ':';
23851 DosForceDelete(fileName);
23853 #endif
23855 sqlite3_mutex_free(pNode->mutex);
23857 sqlite3_free(pNode);
23859 } else {
23860 ppNode = &pNode->pNext;
23864 os2ShmLeaveMutex();
23868 ** This function is called to obtain a pointer to region iRegion of the
23869 ** shared-memory associated with the database file id. Shared-memory regions
23870 ** are numbered starting from zero. Each shared-memory region is szRegion
23871 ** bytes in size.
23873 ** If an error occurs, an error code is returned and *pp is set to NULL.
23875 ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
23876 ** region has not been allocated (by any client, including one running in a
23877 ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
23878 ** bExtend is non-zero and the requested shared-memory region has not yet
23879 ** been allocated, it is allocated by this function.
23881 ** If the shared-memory region has already been allocated or is allocated by
23882 ** this call as described above, then it is mapped into this processes
23883 ** address space (if it is not already), *pp is set to point to the mapped
23884 ** memory and SQLITE_OK returned.
23886 static int os2ShmMap(
23887 sqlite3_file *id, /* Handle open on database file */
23888 int iRegion, /* Region to retrieve */
23889 int szRegion, /* Size of regions */
23890 int bExtend, /* True to extend block if necessary */
23891 void volatile **pp /* OUT: Mapped memory */
23893 PVOID pvTemp;
23894 void **apRegion;
23895 os2ShmNode *pNode;
23896 int n, rc = SQLITE_OK;
23897 char shmName[CCHMAXPATH];
23898 os2File *pFile = (os2File*)id;
23900 *pp = NULL;
23902 if( !pFile->pShmLink )
23903 rc = os2OpenSharedMemory( pFile, szRegion );
23905 if( rc == SQLITE_OK ) {
23906 pNode = pFile->pShmLink->pShmNode ;
23908 sqlite3_mutex_enter(pNode->mutex);
23910 assert( szRegion==pNode->szRegion );
23912 /* Unmapped region ? */
23913 if( iRegion >= pNode->nRegion ) {
23914 /* Prevent other processes from resizing the shared memory */
23915 os2ShmSystemLock(pNode, _SHM_WRLCK_WAIT, OS2_SHM_DMS, 1);
23917 apRegion = sqlite3_realloc(
23918 pNode->apRegion, (iRegion + 1) * sizeof(apRegion[0]));
23920 if( apRegion ) {
23921 pNode->apRegion = apRegion;
23923 while( pNode->nRegion <= iRegion ) {
23924 sprintf(shmName, "%s-%u",
23925 pNode->shmBaseName, pNode->nRegion);
23927 if( DosGetNamedSharedMem(&pvTemp, (PSZ)shmName,
23928 PAG_READ | PAG_WRITE) != NO_ERROR ) {
23929 if( !bExtend )
23930 break;
23932 if( DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
23933 PAG_READ | PAG_WRITE | PAG_COMMIT | OBJ_ANY) != NO_ERROR &&
23934 DosAllocSharedMem(&pvTemp, (PSZ)shmName, szRegion,
23935 PAG_READ | PAG_WRITE | PAG_COMMIT) != NO_ERROR ) {
23936 rc = SQLITE_NOMEM;
23937 break;
23941 apRegion[pNode->nRegion++] = pvTemp;
23944 /* zero out remaining entries */
23945 for( n = pNode->nRegion; n <= iRegion; n++ )
23946 pNode->apRegion[n] = NULL;
23948 /* Return this region (maybe zero) */
23949 *pp = pNode->apRegion[iRegion];
23950 } else {
23951 rc = SQLITE_NOMEM;
23954 /* Allow other processes to resize the shared memory */
23955 os2ShmSystemLock(pNode, _SHM_UNLCK, OS2_SHM_DMS, 1);
23957 } else {
23958 /* Region has been mapped previously */
23959 *pp = pNode->apRegion[iRegion];
23962 sqlite3_mutex_leave(pNode->mutex);
23965 ERR_TRACE(rc, ("os2ShmMap: %s iRgn = %d, szRgn = %d, bExt = %d : %d\n",
23966 pFile->zFullPathCp, iRegion, szRegion, bExtend, rc))
23968 return rc;
23972 ** Close a connection to shared-memory. Delete the underlying
23973 ** storage if deleteFlag is true.
23975 ** If there is no shared memory associated with the connection then this
23976 ** routine is a harmless no-op.
23978 static int os2ShmUnmap(
23979 sqlite3_file *id, /* The underlying database file */
23980 int deleteFlag /* Delete shared-memory if true */
23982 os2File *pFile = (os2File*)id;
23983 os2ShmLink *pLink = pFile->pShmLink;
23985 if( pLink ) {
23986 int nRef = -1;
23987 os2ShmLink **ppLink;
23988 os2ShmNode *pNode = pLink->pShmNode;
23990 sqlite3_mutex_enter(pNode->mutex);
23992 for( ppLink = &pNode->pFirst;
23993 *ppLink && *ppLink != pLink;
23994 ppLink = &(*ppLink)->pNext ) ;
23996 assert(*ppLink);
23998 if( *ppLink ) {
23999 *ppLink = pLink->pNext;
24000 nRef = --pNode->nRef;
24001 } else {
24002 ERR_TRACE(1, ("os2ShmUnmap: link not found ! %s\n",
24003 pNode->shmBaseName))
24006 pFile->pShmLink = NULL;
24007 sqlite3_free(pLink);
24009 sqlite3_mutex_leave(pNode->mutex);
24011 if( nRef == 0 )
24012 os2PurgeShmNodes( deleteFlag );
24015 return SQLITE_OK;
24019 ** Change the lock state for a shared-memory segment.
24021 ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
24022 ** different here than in posix. In xShmLock(), one can go from unlocked
24023 ** to shared and back or from unlocked to exclusive and back. But one may
24024 ** not go from shared to exclusive or from exclusive to shared.
24026 static int os2ShmLock(
24027 sqlite3_file *id, /* Database file holding the shared memory */
24028 int ofst, /* First lock to acquire or release */
24029 int n, /* Number of locks to acquire or release */
24030 int flags /* What to do with the lock */
24032 u32 mask; /* Mask of locks to take or release */
24033 int rc = SQLITE_OK; /* Result code */
24034 os2File *pFile = (os2File*)id;
24035 os2ShmLink *p = pFile->pShmLink; /* The shared memory being locked */
24036 os2ShmLink *pX; /* For looping over all siblings */
24037 os2ShmNode *pShmNode = p->pShmNode; /* Our node */
24039 assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
24040 assert( n>=1 );
24041 assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
24042 || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
24043 || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
24044 || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
24045 assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
24047 mask = (u32)((1U<<(ofst+n)) - (1U<<ofst));
24048 assert( n>1 || mask==(1<<ofst) );
24051 sqlite3_mutex_enter(pShmNode->mutex);
24053 if( flags & SQLITE_SHM_UNLOCK ){
24054 u32 allMask = 0; /* Mask of locks held by siblings */
24056 /* See if any siblings hold this same lock */
24057 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
24058 if( pX==p ) continue;
24059 assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
24060 allMask |= pX->sharedMask;
24063 /* Unlock the system-level locks */
24064 if( (mask & allMask)==0 ){
24065 rc = os2ShmSystemLock(pShmNode, _SHM_UNLCK, ofst+OS2_SHM_BASE, n);
24066 }else{
24067 rc = SQLITE_OK;
24070 /* Undo the local locks */
24071 if( rc==SQLITE_OK ){
24072 p->exclMask &= ~mask;
24073 p->sharedMask &= ~mask;
24075 }else if( flags & SQLITE_SHM_SHARED ){
24076 u32 allShared = 0; /* Union of locks held by connections other than "p" */
24078 /* Find out which shared locks are already held by sibling connections.
24079 ** If any sibling already holds an exclusive lock, go ahead and return
24080 ** SQLITE_BUSY.
24082 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
24083 if( (pX->exclMask & mask)!=0 ){
24084 rc = SQLITE_BUSY;
24085 break;
24087 allShared |= pX->sharedMask;
24090 /* Get shared locks at the system level, if necessary */
24091 if( rc==SQLITE_OK ){
24092 if( (allShared & mask)==0 ){
24093 rc = os2ShmSystemLock(pShmNode, _SHM_RDLCK, ofst+OS2_SHM_BASE, n);
24094 }else{
24095 rc = SQLITE_OK;
24099 /* Get the local shared locks */
24100 if( rc==SQLITE_OK ){
24101 p->sharedMask |= mask;
24103 }else{
24104 /* Make sure no sibling connections hold locks that will block this
24105 ** lock. If any do, return SQLITE_BUSY right away.
24107 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
24108 if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
24109 rc = SQLITE_BUSY;
24110 break;
24114 /* Get the exclusive locks at the system level. Then if successful
24115 ** also mark the local connection as being locked.
24117 if( rc==SQLITE_OK ){
24118 rc = os2ShmSystemLock(pShmNode, _SHM_WRLCK, ofst+OS2_SHM_BASE, n);
24119 if( rc==SQLITE_OK ){
24120 assert( (p->sharedMask & mask)==0 );
24121 p->exclMask |= mask;
24126 sqlite3_mutex_leave(pShmNode->mutex);
24128 OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
24129 p->id, (int)GetCurrentProcessId(), p->sharedMask, p->exclMask,
24130 rc ? "failed" : "ok"));
24132 ERR_TRACE(rc, ("os2ShmLock: ofst = %d, n = %d, flags = 0x%x -> %d \n",
24133 ofst, n, flags, rc))
24135 return rc;
24139 ** Implement a memory barrier or memory fence on shared memory.
24141 ** All loads and stores begun before the barrier must complete before
24142 ** any load or store begun after the barrier.
24144 static void os2ShmBarrier(
24145 sqlite3_file *id /* Database file holding the shared memory */
24147 UNUSED_PARAMETER(id);
24148 os2ShmEnterMutex();
24149 os2ShmLeaveMutex();
24152 #else
24153 # define os2ShmMap 0
24154 # define os2ShmLock 0
24155 # define os2ShmBarrier 0
24156 # define os2ShmUnmap 0
24157 #endif /* #ifndef SQLITE_OMIT_WAL */
24161 ** This vector defines all the methods that can operate on an
24162 ** sqlite3_file for os2.
24164 static const sqlite3_io_methods os2IoMethod = {
24165 2, /* iVersion */
24166 os2Close, /* xClose */
24167 os2Read, /* xRead */
24168 os2Write, /* xWrite */
24169 os2Truncate, /* xTruncate */
24170 os2Sync, /* xSync */
24171 os2FileSize, /* xFileSize */
24172 os2Lock, /* xLock */
24173 os2Unlock, /* xUnlock */
24174 os2CheckReservedLock, /* xCheckReservedLock */
24175 os2FileControl, /* xFileControl */
24176 os2SectorSize, /* xSectorSize */
24177 os2DeviceCharacteristics, /* xDeviceCharacteristics */
24178 os2ShmMap, /* xShmMap */
24179 os2ShmLock, /* xShmLock */
24180 os2ShmBarrier, /* xShmBarrier */
24181 os2ShmUnmap /* xShmUnmap */
24185 /***************************************************************************
24186 ** Here ends the I/O methods that form the sqlite3_io_methods object.
24188 ** The next block of code implements the VFS methods.
24189 ****************************************************************************/
24192 ** Create a temporary file name in zBuf. zBuf must be big enough to
24193 ** hold at pVfs->mxPathname characters.
24195 static int getTempname(int nBuf, char *zBuf ){
24196 static const char zChars[] =
24197 "abcdefghijklmnopqrstuvwxyz"
24198 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
24199 "0123456789";
24200 int i, j;
24201 PSZ zTempPathCp;
24202 char zTempPath[CCHMAXPATH];
24203 ULONG ulDriveNum, ulDriveMap;
24205 /* It's odd to simulate an io-error here, but really this is just
24206 ** using the io-error infrastructure to test that SQLite handles this
24207 ** function failing.
24209 SimulateIOError( return SQLITE_IOERR );
24211 if( sqlite3_temp_directory ) {
24212 sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", sqlite3_temp_directory);
24213 } else if( DosScanEnv( (PSZ)"TEMP", &zTempPathCp ) == NO_ERROR ||
24214 DosScanEnv( (PSZ)"TMP", &zTempPathCp ) == NO_ERROR ||
24215 DosScanEnv( (PSZ)"TMPDIR", &zTempPathCp ) == NO_ERROR ) {
24216 char *zTempPathUTF = convertCpPathToUtf8( (char *)zTempPathCp );
24217 sqlite3_snprintf(CCHMAXPATH-30, zTempPath, "%s", zTempPathUTF);
24218 free( zTempPathUTF );
24219 } else if( DosQueryCurrentDisk( &ulDriveNum, &ulDriveMap ) == NO_ERROR ) {
24220 zTempPath[0] = (char)('A' + ulDriveNum - 1);
24221 zTempPath[1] = ':';
24222 zTempPath[2] = '\0';
24223 } else {
24224 zTempPath[0] = '\0';
24227 /* Strip off a trailing slashes or backslashes, otherwise we would get *
24228 * multiple (back)slashes which causes DosOpen() to fail. *
24229 * Trailing spaces are not allowed, either. */
24230 j = sqlite3Strlen30(zTempPath);
24231 while( j > 0 && ( zTempPath[j-1] == '\\' || zTempPath[j-1] == '/' ||
24232 zTempPath[j-1] == ' ' ) ){
24233 j--;
24235 zTempPath[j] = '\0';
24237 /* We use 20 bytes to randomize the name */
24238 sqlite3_snprintf(nBuf-22, zBuf,
24239 "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
24240 j = sqlite3Strlen30(zBuf);
24241 sqlite3_randomness( 20, &zBuf[j] );
24242 for( i = 0; i < 20; i++, j++ ){
24243 zBuf[j] = zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
24245 zBuf[j] = 0;
24247 OSTRACE(( "TEMP FILENAME: %s\n", zBuf ));
24248 return SQLITE_OK;
24253 ** Turn a relative pathname into a full pathname. Write the full
24254 ** pathname into zFull[]. zFull[] will be at least pVfs->mxPathname
24255 ** bytes in size.
24257 static int os2FullPathname(
24258 sqlite3_vfs *pVfs, /* Pointer to vfs object */
24259 const char *zRelative, /* Possibly relative input path */
24260 int nFull, /* Size of output buffer in bytes */
24261 char *zFull /* Output buffer */
24263 char *zRelativeCp = convertUtf8PathToCp( zRelative );
24264 char zFullCp[CCHMAXPATH] = "\0";
24265 char *zFullUTF;
24266 APIRET rc = DosQueryPathInfo( (PSZ)zRelativeCp, FIL_QUERYFULLNAME,
24267 zFullCp, CCHMAXPATH );
24268 free( zRelativeCp );
24269 zFullUTF = convertCpPathToUtf8( zFullCp );
24270 sqlite3_snprintf( nFull, zFull, zFullUTF );
24271 free( zFullUTF );
24272 return rc == NO_ERROR ? SQLITE_OK : SQLITE_IOERR;
24277 ** Open a file.
24279 static int os2Open(
24280 sqlite3_vfs *pVfs, /* Not used */
24281 const char *zName, /* Name of the file (UTF-8) */
24282 sqlite3_file *id, /* Write the SQLite file handle here */
24283 int flags, /* Open mode flags */
24284 int *pOutFlags /* Status return flags */
24286 HFILE h;
24287 ULONG ulOpenFlags = 0;
24288 ULONG ulOpenMode = 0;
24289 ULONG ulAction = 0;
24290 ULONG rc;
24291 os2File *pFile = (os2File*)id;
24292 const char *zUtf8Name = zName;
24293 char *zNameCp;
24294 char zTmpname[CCHMAXPATH];
24296 int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE);
24297 int isCreate = (flags & SQLITE_OPEN_CREATE);
24298 int isReadWrite = (flags & SQLITE_OPEN_READWRITE);
24299 #ifndef NDEBUG
24300 int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE);
24301 int isReadonly = (flags & SQLITE_OPEN_READONLY);
24302 int eType = (flags & 0xFFFFFF00);
24303 int isOpenJournal = (isCreate && (
24304 eType==SQLITE_OPEN_MASTER_JOURNAL
24305 || eType==SQLITE_OPEN_MAIN_JOURNAL
24306 || eType==SQLITE_OPEN_WAL
24308 #endif
24310 UNUSED_PARAMETER(pVfs);
24311 assert( id!=0 );
24313 /* Check the following statements are true:
24315 ** (a) Exactly one of the READWRITE and READONLY flags must be set, and
24316 ** (b) if CREATE is set, then READWRITE must also be set, and
24317 ** (c) if EXCLUSIVE is set, then CREATE must also be set.
24318 ** (d) if DELETEONCLOSE is set, then CREATE must also be set.
24320 assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
24321 assert(isCreate==0 || isReadWrite);
24322 assert(isExclusive==0 || isCreate);
24323 assert(isDelete==0 || isCreate);
24325 /* The main DB, main journal, WAL file and master journal are never
24326 ** automatically deleted. Nor are they ever temporary files. */
24327 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
24328 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
24329 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
24330 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
24332 /* Assert that the upper layer has set one of the "file-type" flags. */
24333 assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB
24334 || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
24335 || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
24336 || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
24339 memset( pFile, 0, sizeof(*pFile) );
24340 pFile->h = (HFILE)-1;
24342 /* If the second argument to this function is NULL, generate a
24343 ** temporary file name to use
24345 if( !zUtf8Name ){
24346 assert(isDelete && !isOpenJournal);
24347 rc = getTempname(CCHMAXPATH, zTmpname);
24348 if( rc!=SQLITE_OK ){
24349 return rc;
24351 zUtf8Name = zTmpname;
24354 if( isReadWrite ){
24355 ulOpenMode |= OPEN_ACCESS_READWRITE;
24356 }else{
24357 ulOpenMode |= OPEN_ACCESS_READONLY;
24360 /* Open in random access mode for possibly better speed. Allow full
24361 ** sharing because file locks will provide exclusive access when needed.
24362 ** The handle should not be inherited by child processes and we don't
24363 ** want popups from the critical error handler.
24365 ulOpenMode |= OPEN_FLAGS_RANDOM | OPEN_SHARE_DENYNONE |
24366 OPEN_FLAGS_NOINHERIT | OPEN_FLAGS_FAIL_ON_ERROR;
24368 /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is
24369 ** created. SQLite doesn't use it to indicate "exclusive access"
24370 ** as it is usually understood.
24372 if( isExclusive ){
24373 /* Creates a new file, only if it does not already exist. */
24374 /* If the file exists, it fails. */
24375 ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_FAIL_IF_EXISTS;
24376 }else if( isCreate ){
24377 /* Open existing file, or create if it doesn't exist */
24378 ulOpenFlags |= OPEN_ACTION_CREATE_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
24379 }else{
24380 /* Opens a file, only if it exists. */
24381 ulOpenFlags |= OPEN_ACTION_FAIL_IF_NEW | OPEN_ACTION_OPEN_IF_EXISTS;
24384 zNameCp = convertUtf8PathToCp( zUtf8Name );
24385 rc = DosOpen( (PSZ)zNameCp,
24387 &ulAction,
24389 FILE_NORMAL,
24390 ulOpenFlags,
24391 ulOpenMode,
24392 (PEAOP2)NULL );
24393 free( zNameCp );
24395 if( rc != NO_ERROR ){
24396 OSTRACE(( "OPEN Invalid handle rc=%d: zName=%s, ulAction=%#lx, ulFlags=%#lx, ulMode=%#lx\n",
24397 rc, zUtf8Name, ulAction, ulOpenFlags, ulOpenMode ));
24399 if( isReadWrite ){
24400 return os2Open( pVfs, zName, id,
24401 ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
24402 pOutFlags );
24403 }else{
24404 return SQLITE_CANTOPEN;
24408 if( pOutFlags ){
24409 *pOutFlags = isReadWrite ? SQLITE_OPEN_READWRITE : SQLITE_OPEN_READONLY;
24412 os2FullPathname( pVfs, zUtf8Name, sizeof( zTmpname ), zTmpname );
24413 pFile->zFullPathCp = convertUtf8PathToCp( zTmpname );
24414 pFile->pMethod = &os2IoMethod;
24415 pFile->flags = flags;
24416 pFile->h = h;
24418 OpenCounter(+1);
24419 OSTRACE(( "OPEN %d pOutFlags=%d\n", pFile->h, pOutFlags ));
24420 return SQLITE_OK;
24424 ** Delete the named file.
24426 static int os2Delete(
24427 sqlite3_vfs *pVfs, /* Not used on os2 */
24428 const char *zFilename, /* Name of file to delete */
24429 int syncDir /* Not used on os2 */
24431 APIRET rc;
24432 char *zFilenameCp;
24433 SimulateIOError( return SQLITE_IOERR_DELETE );
24434 zFilenameCp = convertUtf8PathToCp( zFilename );
24435 rc = DosDelete( (PSZ)zFilenameCp );
24436 free( zFilenameCp );
24437 OSTRACE(( "DELETE \"%s\"\n", zFilename ));
24438 return (rc == NO_ERROR ||
24439 rc == ERROR_FILE_NOT_FOUND ||
24440 rc == ERROR_PATH_NOT_FOUND ) ? SQLITE_OK : SQLITE_IOERR_DELETE;
24444 ** Check the existance and status of a file.
24446 static int os2Access(
24447 sqlite3_vfs *pVfs, /* Not used on os2 */
24448 const char *zFilename, /* Name of file to check */
24449 int flags, /* Type of test to make on this file */
24450 int *pOut /* Write results here */
24452 APIRET rc;
24453 FILESTATUS3 fsts3ConfigInfo;
24454 char *zFilenameCp;
24456 UNUSED_PARAMETER(pVfs);
24457 SimulateIOError( return SQLITE_IOERR_ACCESS; );
24459 zFilenameCp = convertUtf8PathToCp( zFilename );
24460 rc = DosQueryPathInfo( (PSZ)zFilenameCp, FIL_STANDARD,
24461 &fsts3ConfigInfo, sizeof(FILESTATUS3) );
24462 free( zFilenameCp );
24463 OSTRACE(( "ACCESS fsts3ConfigInfo.attrFile=%d flags=%d rc=%d\n",
24464 fsts3ConfigInfo.attrFile, flags, rc ));
24466 switch( flags ){
24467 case SQLITE_ACCESS_EXISTS:
24468 /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
24469 ** as if it does not exist.
24471 if( fsts3ConfigInfo.cbFile == 0 )
24472 rc = ERROR_FILE_NOT_FOUND;
24473 break;
24474 case SQLITE_ACCESS_READ:
24475 break;
24476 case SQLITE_ACCESS_READWRITE:
24477 if( fsts3ConfigInfo.attrFile & FILE_READONLY )
24478 rc = ERROR_ACCESS_DENIED;
24479 break;
24480 default:
24481 rc = ERROR_FILE_NOT_FOUND;
24482 assert( !"Invalid flags argument" );
24485 *pOut = (rc == NO_ERROR);
24486 OSTRACE(( "ACCESS %s flags %d: rc=%d\n", zFilename, flags, *pOut ));
24488 return SQLITE_OK;
24492 #ifndef SQLITE_OMIT_LOAD_EXTENSION
24494 ** Interfaces for opening a shared library, finding entry points
24495 ** within the shared library, and closing the shared library.
24498 ** Interfaces for opening a shared library, finding entry points
24499 ** within the shared library, and closing the shared library.
24501 static void *os2DlOpen(sqlite3_vfs *pVfs, const char *zFilename){
24502 HMODULE hmod;
24503 APIRET rc;
24504 char *zFilenameCp = convertUtf8PathToCp(zFilename);
24505 rc = DosLoadModule(NULL, 0, (PSZ)zFilenameCp, &hmod);
24506 free(zFilenameCp);
24507 return rc != NO_ERROR ? 0 : (void*)hmod;
24510 ** A no-op since the error code is returned on the DosLoadModule call.
24511 ** os2Dlopen returns zero if DosLoadModule is not successful.
24513 static void os2DlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
24514 /* no-op */
24516 static void (*os2DlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
24517 PFN pfn;
24518 APIRET rc;
24519 rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)zSymbol, &pfn);
24520 if( rc != NO_ERROR ){
24521 /* if the symbol itself was not found, search again for the same
24522 * symbol with an extra underscore, that might be needed depending
24523 * on the calling convention */
24524 char _zSymbol[256] = "_";
24525 strncat(_zSymbol, zSymbol, 254);
24526 rc = DosQueryProcAddr((HMODULE)pHandle, 0L, (PSZ)_zSymbol, &pfn);
24528 return rc != NO_ERROR ? 0 : (void(*)(void))pfn;
24530 static void os2DlClose(sqlite3_vfs *pVfs, void *pHandle){
24531 DosFreeModule((HMODULE)pHandle);
24533 #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
24534 #define os2DlOpen 0
24535 #define os2DlError 0
24536 #define os2DlSym 0
24537 #define os2DlClose 0
24538 #endif
24542 ** Write up to nBuf bytes of randomness into zBuf.
24544 static int os2Randomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf ){
24545 int n = 0;
24546 #if defined(SQLITE_TEST)
24547 n = nBuf;
24548 memset(zBuf, 0, nBuf);
24549 #else
24550 int i;
24551 PPIB ppib;
24552 PTIB ptib;
24553 DATETIME dt;
24554 static unsigned c = 0;
24555 /* Ordered by variation probability */
24556 static ULONG svIdx[6] = { QSV_MS_COUNT, QSV_TIME_LOW,
24557 QSV_MAXPRMEM, QSV_MAXSHMEM,
24558 QSV_TOTAVAILMEM, QSV_TOTRESMEM };
24560 /* 8 bytes; timezone and weekday don't increase the randomness much */
24561 if( (int)sizeof(dt)-3 <= nBuf - n ){
24562 c += 0x0100;
24563 DosGetDateTime(&dt);
24564 dt.year = (USHORT)((dt.year - 1900) | c);
24565 memcpy(&zBuf[n], &dt, sizeof(dt)-3);
24566 n += sizeof(dt)-3;
24569 /* 4 bytes; PIDs and TIDs are 16 bit internally, so combine them */
24570 if( (int)sizeof(ULONG) <= nBuf - n ){
24571 DosGetInfoBlocks(&ptib, &ppib);
24572 *(PULONG)&zBuf[n] = MAKELONG(ppib->pib_ulpid,
24573 ptib->tib_ptib2->tib2_ultid);
24574 n += sizeof(ULONG);
24577 /* Up to 6 * 4 bytes; variables depend on the system state */
24578 for( i = 0; i < 6 && (int)sizeof(ULONG) <= nBuf - n; i++ ){
24579 DosQuerySysInfo(svIdx[i], svIdx[i],
24580 (PULONG)&zBuf[n], sizeof(ULONG));
24581 n += sizeof(ULONG);
24583 #endif
24585 return n;
24589 ** Sleep for a little while. Return the amount of time slept.
24590 ** The argument is the number of microseconds we want to sleep.
24591 ** The return value is the number of microseconds of sleep actually
24592 ** requested from the underlying operating system, a number which
24593 ** might be greater than or equal to the argument, but not less
24594 ** than the argument.
24596 static int os2Sleep( sqlite3_vfs *pVfs, int microsec ){
24597 DosSleep( (microsec/1000) );
24598 return microsec;
24602 ** The following variable, if set to a non-zero value, becomes the result
24603 ** returned from sqlite3OsCurrentTime(). This is used for testing.
24605 #ifdef SQLITE_TEST
24606 SQLITE_API int sqlite3_current_time = 0;
24607 #endif
24610 ** Find the current time (in Universal Coordinated Time). Write into *piNow
24611 ** the current time and date as a Julian Day number times 86_400_000. In
24612 ** other words, write into *piNow the number of milliseconds since the Julian
24613 ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
24614 ** proleptic Gregorian calendar.
24616 ** On success, return 0. Return 1 if the time and date cannot be found.
24618 static int os2CurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
24619 #ifdef SQLITE_TEST
24620 static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
24621 #endif
24622 int year, month, datepart, timepart;
24624 DATETIME dt;
24625 DosGetDateTime( &dt );
24627 year = dt.year;
24628 month = dt.month;
24630 /* Calculations from http://www.astro.keele.ac.uk/~rno/Astronomy/hjd.html
24631 ** http://www.astro.keele.ac.uk/~rno/Astronomy/hjd-0.1.c
24632 ** Calculate the Julian days
24634 datepart = (int)dt.day - 32076 +
24635 1461*(year + 4800 + (month - 14)/12)/4 +
24636 367*(month - 2 - (month - 14)/12*12)/12 -
24637 3*((year + 4900 + (month - 14)/12)/100)/4;
24639 /* Time in milliseconds, hours to noon added */
24640 timepart = 12*3600*1000 + dt.hundredths*10 + dt.seconds*1000 +
24641 ((int)dt.minutes + dt.timezone)*60*1000 + dt.hours*3600*1000;
24643 *piNow = (sqlite3_int64)datepart*86400*1000 + timepart;
24645 #ifdef SQLITE_TEST
24646 if( sqlite3_current_time ){
24647 *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
24649 #endif
24651 UNUSED_PARAMETER(pVfs);
24652 return 0;
24656 ** Find the current time (in Universal Coordinated Time). Write the
24657 ** current time and date as a Julian Day number into *prNow and
24658 ** return 0. Return 1 if the time and date cannot be found.
24660 static int os2CurrentTime( sqlite3_vfs *pVfs, double *prNow ){
24661 int rc;
24662 sqlite3_int64 i;
24663 rc = os2CurrentTimeInt64(pVfs, &i);
24664 if( !rc ){
24665 *prNow = i/86400000.0;
24667 return rc;
24671 ** The idea is that this function works like a combination of
24672 ** GetLastError() and FormatMessage() on windows (or errno and
24673 ** strerror_r() on unix). After an error is returned by an OS
24674 ** function, SQLite calls this function with zBuf pointing to
24675 ** a buffer of nBuf bytes. The OS layer should populate the
24676 ** buffer with a nul-terminated UTF-8 encoded error message
24677 ** describing the last IO error to have occurred within the calling
24678 ** thread.
24680 ** If the error message is too large for the supplied buffer,
24681 ** it should be truncated. The return value of xGetLastError
24682 ** is zero if the error message fits in the buffer, or non-zero
24683 ** otherwise (if the message was truncated). If non-zero is returned,
24684 ** then it is not necessary to include the nul-terminator character
24685 ** in the output buffer.
24687 ** Not supplying an error message will have no adverse effect
24688 ** on SQLite. It is fine to have an implementation that never
24689 ** returns an error message:
24691 ** int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
24692 ** assert(zBuf[0]=='\0');
24693 ** return 0;
24694 ** }
24696 ** However if an error message is supplied, it will be incorporated
24697 ** by sqlite into the error message available to the user using
24698 ** sqlite3_errmsg(), possibly making IO errors easier to debug.
24700 static int os2GetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
24701 assert(zBuf[0]=='\0');
24702 return 0;
24706 ** Initialize and deinitialize the operating system interface.
24708 SQLITE_API int sqlite3_os_init(void){
24709 static sqlite3_vfs os2Vfs = {
24710 3, /* iVersion */
24711 sizeof(os2File), /* szOsFile */
24712 CCHMAXPATH, /* mxPathname */
24713 0, /* pNext */
24714 "os2", /* zName */
24715 0, /* pAppData */
24717 os2Open, /* xOpen */
24718 os2Delete, /* xDelete */
24719 os2Access, /* xAccess */
24720 os2FullPathname, /* xFullPathname */
24721 os2DlOpen, /* xDlOpen */
24722 os2DlError, /* xDlError */
24723 os2DlSym, /* xDlSym */
24724 os2DlClose, /* xDlClose */
24725 os2Randomness, /* xRandomness */
24726 os2Sleep, /* xSleep */
24727 os2CurrentTime, /* xCurrentTime */
24728 os2GetLastError, /* xGetLastError */
24729 os2CurrentTimeInt64, /* xCurrentTimeInt64 */
24730 0, /* xSetSystemCall */
24731 0, /* xGetSystemCall */
24732 0 /* xNextSystemCall */
24734 sqlite3_vfs_register(&os2Vfs, 1);
24735 initUconvObjects();
24736 /* sqlite3OSTrace = 1; */
24737 return SQLITE_OK;
24739 SQLITE_API int sqlite3_os_end(void){
24740 freeUconvObjects();
24741 return SQLITE_OK;
24744 #endif /* SQLITE_OS_OS2 */
24746 /************** End of os_os2.c **********************************************/
24747 /************** Begin file os_unix.c *****************************************/
24749 ** 2004 May 22
24751 ** The author disclaims copyright to this source code. In place of
24752 ** a legal notice, here is a blessing:
24754 ** May you do good and not evil.
24755 ** May you find forgiveness for yourself and forgive others.
24756 ** May you share freely, never taking more than you give.
24758 ******************************************************************************
24760 ** This file contains the VFS implementation for unix-like operating systems
24761 ** include Linux, MacOSX, *BSD, QNX, VxWorks, AIX, HPUX, and others.
24763 ** There are actually several different VFS implementations in this file.
24764 ** The differences are in the way that file locking is done. The default
24765 ** implementation uses Posix Advisory Locks. Alternative implementations
24766 ** use flock(), dot-files, various proprietary locking schemas, or simply
24767 ** skip locking all together.
24769 ** This source file is organized into divisions where the logic for various
24770 ** subfunctions is contained within the appropriate division. PLEASE
24771 ** KEEP THE STRUCTURE OF THIS FILE INTACT. New code should be placed
24772 ** in the correct division and should be clearly labeled.
24774 ** The layout of divisions is as follows:
24776 ** * General-purpose declarations and utility functions.
24777 ** * Unique file ID logic used by VxWorks.
24778 ** * Various locking primitive implementations (all except proxy locking):
24779 ** + for Posix Advisory Locks
24780 ** + for no-op locks
24781 ** + for dot-file locks
24782 ** + for flock() locking
24783 ** + for named semaphore locks (VxWorks only)
24784 ** + for AFP filesystem locks (MacOSX only)
24785 ** * sqlite3_file methods not associated with locking.
24786 ** * Definitions of sqlite3_io_methods objects for all locking
24787 ** methods plus "finder" functions for each locking method.
24788 ** * sqlite3_vfs method implementations.
24789 ** * Locking primitives for the proxy uber-locking-method. (MacOSX only)
24790 ** * Definitions of sqlite3_vfs objects for all locking methods
24791 ** plus implementations of sqlite3_os_init() and sqlite3_os_end().
24793 #if SQLITE_OS_UNIX /* This file is used on unix only */
24796 ** There are various methods for file locking used for concurrency
24797 ** control:
24799 ** 1. POSIX locking (the default),
24800 ** 2. No locking,
24801 ** 3. Dot-file locking,
24802 ** 4. flock() locking,
24803 ** 5. AFP locking (OSX only),
24804 ** 6. Named POSIX semaphores (VXWorks only),
24805 ** 7. proxy locking. (OSX only)
24807 ** Styles 4, 5, and 7 are only available of SQLITE_ENABLE_LOCKING_STYLE
24808 ** is defined to 1. The SQLITE_ENABLE_LOCKING_STYLE also enables automatic
24809 ** selection of the appropriate locking style based on the filesystem
24810 ** where the database is located.
24812 #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
24813 # if defined(__APPLE__)
24814 # define SQLITE_ENABLE_LOCKING_STYLE 1
24815 # else
24816 # define SQLITE_ENABLE_LOCKING_STYLE 0
24817 # endif
24818 #endif
24821 ** Define the OS_VXWORKS pre-processor macro to 1 if building on
24822 ** vxworks, or 0 otherwise.
24824 #ifndef OS_VXWORKS
24825 # if defined(__RTP__) || defined(_WRS_KERNEL)
24826 # define OS_VXWORKS 1
24827 # else
24828 # define OS_VXWORKS 0
24829 # endif
24830 #endif
24833 ** These #defines should enable >2GB file support on Posix if the
24834 ** underlying operating system supports it. If the OS lacks
24835 ** large file support, these should be no-ops.
24837 ** Large file support can be disabled using the -DSQLITE_DISABLE_LFS switch
24838 ** on the compiler command line. This is necessary if you are compiling
24839 ** on a recent machine (ex: RedHat 7.2) but you want your code to work
24840 ** on an older machine (ex: RedHat 6.0). If you compile on RedHat 7.2
24841 ** without this option, LFS is enable. But LFS does not exist in the kernel
24842 ** in RedHat 6.0, so the code won't work. Hence, for maximum binary
24843 ** portability you should omit LFS.
24845 ** The previous paragraph was written in 2005. (This paragraph is written
24846 ** on 2008-11-28.) These days, all Linux kernels support large files, so
24847 ** you should probably leave LFS enabled. But some embedded platforms might
24848 ** lack LFS in which case the SQLITE_DISABLE_LFS macro might still be useful.
24850 #ifndef SQLITE_DISABLE_LFS
24851 # define _LARGE_FILE 1
24852 # ifndef _FILE_OFFSET_BITS
24853 # define _FILE_OFFSET_BITS 64
24854 # endif
24855 # define _LARGEFILE_SOURCE 1
24856 #endif
24859 ** standard include files.
24861 #include <sys/types.h>
24862 #include <sys/stat.h>
24863 #include <fcntl.h>
24864 #include <unistd.h>
24865 /* #include <time.h> */
24866 #include <sys/time.h>
24867 #include <errno.h>
24868 #ifndef SQLITE_OMIT_WAL
24869 #include <sys/mman.h>
24870 #endif
24873 #if SQLITE_ENABLE_LOCKING_STYLE
24874 # include <sys/ioctl.h>
24875 # if OS_VXWORKS
24876 # include <semaphore.h>
24877 # include <limits.h>
24878 # else
24879 # include <sys/file.h>
24880 # include <sys/param.h>
24881 # endif
24882 #endif /* SQLITE_ENABLE_LOCKING_STYLE */
24884 #if defined(__APPLE__) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
24885 # include <sys/mount.h>
24886 #endif
24888 #ifdef HAVE_UTIME
24889 # include <utime.h>
24890 #endif
24893 ** Allowed values of unixFile.fsFlags
24895 #define SQLITE_FSFLAGS_IS_MSDOS 0x1
24898 ** If we are to be thread-safe, include the pthreads header and define
24899 ** the SQLITE_UNIX_THREADS macro.
24901 #if SQLITE_THREADSAFE
24902 /* # include <pthread.h> */
24903 # define SQLITE_UNIX_THREADS 1
24904 #endif
24907 ** Default permissions when creating a new file
24909 #ifndef SQLITE_DEFAULT_FILE_PERMISSIONS
24910 # define SQLITE_DEFAULT_FILE_PERMISSIONS 0644
24911 #endif
24914 ** Default permissions when creating auto proxy dir
24916 #ifndef SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
24917 # define SQLITE_DEFAULT_PROXYDIR_PERMISSIONS 0755
24918 #endif
24921 ** Maximum supported path-length.
24923 #define MAX_PATHNAME 512
24926 ** Only set the lastErrno if the error code is a real error and not
24927 ** a normal expected return code of SQLITE_BUSY or SQLITE_OK
24929 #define IS_LOCK_ERROR(x) ((x != SQLITE_OK) && (x != SQLITE_BUSY))
24931 /* Forward references */
24932 typedef struct unixShm unixShm; /* Connection shared memory */
24933 typedef struct unixShmNode unixShmNode; /* Shared memory instance */
24934 typedef struct unixInodeInfo unixInodeInfo; /* An i-node */
24935 typedef struct UnixUnusedFd UnixUnusedFd; /* An unused file descriptor */
24938 ** Sometimes, after a file handle is closed by SQLite, the file descriptor
24939 ** cannot be closed immediately. In these cases, instances of the following
24940 ** structure are used to store the file descriptor while waiting for an
24941 ** opportunity to either close or reuse it.
24943 struct UnixUnusedFd {
24944 int fd; /* File descriptor to close */
24945 int flags; /* Flags this file descriptor was opened with */
24946 UnixUnusedFd *pNext; /* Next unused file descriptor on same file */
24950 ** The unixFile structure is subclass of sqlite3_file specific to the unix
24951 ** VFS implementations.
24953 typedef struct unixFile unixFile;
24954 struct unixFile {
24955 sqlite3_io_methods const *pMethod; /* Always the first entry */
24956 sqlite3_vfs *pVfs; /* The VFS that created this unixFile */
24957 unixInodeInfo *pInode; /* Info about locks on this inode */
24958 int h; /* The file descriptor */
24959 unsigned char eFileLock; /* The type of lock held on this fd */
24960 unsigned char ctrlFlags; /* Behavioral bits. UNIXFILE_* flags */
24961 int lastErrno; /* The unix errno from last I/O error */
24962 void *lockingContext; /* Locking style specific state */
24963 UnixUnusedFd *pUnused; /* Pre-allocated UnixUnusedFd */
24964 const char *zPath; /* Name of the file */
24965 unixShm *pShm; /* Shared memory segment information */
24966 int szChunk; /* Configured by FCNTL_CHUNK_SIZE */
24967 #if SQLITE_ENABLE_LOCKING_STYLE
24968 int openFlags; /* The flags specified at open() */
24969 #endif
24970 #if SQLITE_ENABLE_LOCKING_STYLE || defined(__APPLE__)
24971 unsigned fsFlags; /* cached details from statfs() */
24972 #endif
24973 #if OS_VXWORKS
24974 struct vxworksFileId *pId; /* Unique file ID */
24975 #endif
24976 #ifndef NDEBUG
24977 /* The next group of variables are used to track whether or not the
24978 ** transaction counter in bytes 24-27 of database files are updated
24979 ** whenever any part of the database changes. An assertion fault will
24980 ** occur if a file is updated without also updating the transaction
24981 ** counter. This test is made to avoid new problems similar to the
24982 ** one described by ticket #3584.
24984 unsigned char transCntrChng; /* True if the transaction counter changed */
24985 unsigned char dbUpdate; /* True if any part of database file changed */
24986 unsigned char inNormalWrite; /* True if in a normal write operation */
24987 #endif
24988 #ifdef SQLITE_TEST
24989 /* In test mode, increase the size of this structure a bit so that
24990 ** it is larger than the struct CrashFile defined in test6.c.
24992 char aPadding[32];
24993 #endif
24997 ** Allowed values for the unixFile.ctrlFlags bitmask:
24999 #define UNIXFILE_EXCL 0x01 /* Connections from one process only */
25000 #define UNIXFILE_RDONLY 0x02 /* Connection is read only */
25001 #define UNIXFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */
25002 #ifndef SQLITE_DISABLE_DIRSYNC
25003 # define UNIXFILE_DIRSYNC 0x08 /* Directory sync needed */
25004 #else
25005 # define UNIXFILE_DIRSYNC 0x00
25006 #endif
25007 #define UNIXFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */
25008 #define UNIXFILE_DELETE 0x20 /* Delete on close */
25009 #define UNIXFILE_URI 0x40 /* Filename might have query parameters */
25010 #define UNIXFILE_NOLOCK 0x80 /* Do no file locking */
25013 ** Include code that is common to all os_*.c files
25015 /************** Include os_common.h in the middle of os_unix.c ***************/
25016 /************** Begin file os_common.h ***************************************/
25018 ** 2004 May 22
25020 ** The author disclaims copyright to this source code. In place of
25021 ** a legal notice, here is a blessing:
25023 ** May you do good and not evil.
25024 ** May you find forgiveness for yourself and forgive others.
25025 ** May you share freely, never taking more than you give.
25027 ******************************************************************************
25029 ** This file contains macros and a little bit of code that is common to
25030 ** all of the platform-specific files (os_*.c) and is #included into those
25031 ** files.
25033 ** This file should be #included by the os_*.c files only. It is not a
25034 ** general purpose header file.
25036 #ifndef _OS_COMMON_H_
25037 #define _OS_COMMON_H_
25040 ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
25041 ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
25042 ** switch. The following code should catch this problem at compile-time.
25044 #ifdef MEMORY_DEBUG
25045 # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
25046 #endif
25048 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
25049 # ifndef SQLITE_DEBUG_OS_TRACE
25050 # define SQLITE_DEBUG_OS_TRACE 0
25051 # endif
25052 int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
25053 # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
25054 #else
25055 # define OSTRACE(X)
25056 #endif
25059 ** Macros for performance tracing. Normally turned off. Only works
25060 ** on i486 hardware.
25062 #ifdef SQLITE_PERFORMANCE_TRACE
25065 ** hwtime.h contains inline assembler code for implementing
25066 ** high-performance timing routines.
25068 /************** Include hwtime.h in the middle of os_common.h ****************/
25069 /************** Begin file hwtime.h ******************************************/
25071 ** 2008 May 27
25073 ** The author disclaims copyright to this source code. In place of
25074 ** a legal notice, here is a blessing:
25076 ** May you do good and not evil.
25077 ** May you find forgiveness for yourself and forgive others.
25078 ** May you share freely, never taking more than you give.
25080 ******************************************************************************
25082 ** This file contains inline asm code for retrieving "high-performance"
25083 ** counters for x86 class CPUs.
25085 #ifndef _HWTIME_H_
25086 #define _HWTIME_H_
25089 ** The following routine only works on pentium-class (or newer) processors.
25090 ** It uses the RDTSC opcode to read the cycle count value out of the
25091 ** processor and returns that value. This can be used for high-res
25092 ** profiling.
25094 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
25095 (defined(i386) || defined(__i386__) || defined(_M_IX86))
25097 #if defined(__GNUC__)
25099 __inline__ sqlite_uint64 sqlite3Hwtime(void){
25100 unsigned int lo, hi;
25101 __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
25102 return (sqlite_uint64)hi << 32 | lo;
25105 #elif defined(_MSC_VER)
25107 __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
25108 __asm {
25109 rdtsc
25110 ret ; return value at EDX:EAX
25114 #endif
25116 #elif (defined(__GNUC__) && defined(__x86_64__))
25118 __inline__ sqlite_uint64 sqlite3Hwtime(void){
25119 unsigned long val;
25120 __asm__ __volatile__ ("rdtsc" : "=A" (val));
25121 return val;
25124 #elif (defined(__GNUC__) && defined(__ppc__))
25126 __inline__ sqlite_uint64 sqlite3Hwtime(void){
25127 unsigned long long retval;
25128 unsigned long junk;
25129 __asm__ __volatile__ ("\n\
25130 1: mftbu %1\n\
25131 mftb %L0\n\
25132 mftbu %0\n\
25133 cmpw %0,%1\n\
25134 bne 1b"
25135 : "=r" (retval), "=r" (junk));
25136 return retval;
25139 #else
25141 #error Need implementation of sqlite3Hwtime() for your platform.
25144 ** To compile without implementing sqlite3Hwtime() for your platform,
25145 ** you can remove the above #error and use the following
25146 ** stub function. You will lose timing support for many
25147 ** of the debugging and testing utilities, but it should at
25148 ** least compile and run.
25150 SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
25152 #endif
25154 #endif /* !defined(_HWTIME_H_) */
25156 /************** End of hwtime.h **********************************************/
25157 /************** Continuing where we left off in os_common.h ******************/
25159 static sqlite_uint64 g_start;
25160 static sqlite_uint64 g_elapsed;
25161 #define TIMER_START g_start=sqlite3Hwtime()
25162 #define TIMER_END g_elapsed=sqlite3Hwtime()-g_start
25163 #define TIMER_ELAPSED g_elapsed
25164 #else
25165 #define TIMER_START
25166 #define TIMER_END
25167 #define TIMER_ELAPSED ((sqlite_uint64)0)
25168 #endif
25171 ** If we compile with the SQLITE_TEST macro set, then the following block
25172 ** of code will give us the ability to simulate a disk I/O error. This
25173 ** is used for testing the I/O recovery logic.
25175 #ifdef SQLITE_TEST
25176 SQLITE_API int sqlite3_io_error_hit = 0; /* Total number of I/O Errors */
25177 SQLITE_API int sqlite3_io_error_hardhit = 0; /* Number of non-benign errors */
25178 SQLITE_API int sqlite3_io_error_pending = 0; /* Count down to first I/O error */
25179 SQLITE_API int sqlite3_io_error_persist = 0; /* True if I/O errors persist */
25180 SQLITE_API int sqlite3_io_error_benign = 0; /* True if errors are benign */
25181 SQLITE_API int sqlite3_diskfull_pending = 0;
25182 SQLITE_API int sqlite3_diskfull = 0;
25183 #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
25184 #define SimulateIOError(CODE) \
25185 if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
25186 || sqlite3_io_error_pending-- == 1 ) \
25187 { local_ioerr(); CODE; }
25188 static void local_ioerr(){
25189 IOTRACE(("IOERR\n"));
25190 sqlite3_io_error_hit++;
25191 if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
25193 #define SimulateDiskfullError(CODE) \
25194 if( sqlite3_diskfull_pending ){ \
25195 if( sqlite3_diskfull_pending == 1 ){ \
25196 local_ioerr(); \
25197 sqlite3_diskfull = 1; \
25198 sqlite3_io_error_hit = 1; \
25199 CODE; \
25200 }else{ \
25201 sqlite3_diskfull_pending--; \
25204 #else
25205 #define SimulateIOErrorBenign(X)
25206 #define SimulateIOError(A)
25207 #define SimulateDiskfullError(A)
25208 #endif
25211 ** When testing, keep a count of the number of open files.
25213 #ifdef SQLITE_TEST
25214 SQLITE_API int sqlite3_open_file_count = 0;
25215 #define OpenCounter(X) sqlite3_open_file_count+=(X)
25216 #else
25217 #define OpenCounter(X)
25218 #endif
25220 #endif /* !defined(_OS_COMMON_H_) */
25222 /************** End of os_common.h *******************************************/
25223 /************** Continuing where we left off in os_unix.c ********************/
25226 ** Define various macros that are missing from some systems.
25228 #ifndef O_LARGEFILE
25229 # define O_LARGEFILE 0
25230 #endif
25231 #ifdef SQLITE_DISABLE_LFS
25232 # undef O_LARGEFILE
25233 # define O_LARGEFILE 0
25234 #endif
25235 #ifndef O_NOFOLLOW
25236 # define O_NOFOLLOW 0
25237 #endif
25238 #ifndef O_BINARY
25239 # define O_BINARY 0
25240 #endif
25243 ** The threadid macro resolves to the thread-id or to 0. Used for
25244 ** testing and debugging only.
25246 #if SQLITE_THREADSAFE
25247 #define threadid pthread_self()
25248 #else
25249 #define threadid 0
25250 #endif
25253 ** Different Unix systems declare open() in different ways. Same use
25254 ** open(const char*,int,mode_t). Others use open(const char*,int,...).
25255 ** The difference is important when using a pointer to the function.
25257 ** The safest way to deal with the problem is to always use this wrapper
25258 ** which always has the same well-defined interface.
25260 static int posixOpen(const char *zFile, int flags, int mode){
25261 return open(zFile, flags, mode);
25264 /* Forward reference */
25265 static int openDirectory(const char*, int*);
25268 ** Many system calls are accessed through pointer-to-functions so that
25269 ** they may be overridden at runtime to facilitate fault injection during
25270 ** testing and sandboxing. The following array holds the names and pointers
25271 ** to all overrideable system calls.
25273 static struct unix_syscall {
25274 const char *zName; /* Name of the sytem call */
25275 sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
25276 sqlite3_syscall_ptr pDefault; /* Default value */
25277 } aSyscall[] = {
25278 { "open", (sqlite3_syscall_ptr)posixOpen, 0 },
25279 #define osOpen ((int(*)(const char*,int,int))aSyscall[0].pCurrent)
25281 { "close", (sqlite3_syscall_ptr)close, 0 },
25282 #define osClose ((int(*)(int))aSyscall[1].pCurrent)
25284 { "access", (sqlite3_syscall_ptr)access, 0 },
25285 #define osAccess ((int(*)(const char*,int))aSyscall[2].pCurrent)
25287 { "getcwd", (sqlite3_syscall_ptr)getcwd, 0 },
25288 #define osGetcwd ((char*(*)(char*,size_t))aSyscall[3].pCurrent)
25290 { "stat", (sqlite3_syscall_ptr)stat, 0 },
25291 #define osStat ((int(*)(const char*,struct stat*))aSyscall[4].pCurrent)
25294 ** The DJGPP compiler environment looks mostly like Unix, but it
25295 ** lacks the fcntl() system call. So redefine fcntl() to be something
25296 ** that always succeeds. This means that locking does not occur under
25297 ** DJGPP. But it is DOS - what did you expect?
25299 #ifdef __DJGPP__
25300 { "fstat", 0, 0 },
25301 #define osFstat(a,b,c) 0
25302 #else
25303 { "fstat", (sqlite3_syscall_ptr)fstat, 0 },
25304 #define osFstat ((int(*)(int,struct stat*))aSyscall[5].pCurrent)
25305 #endif
25307 { "ftruncate", (sqlite3_syscall_ptr)ftruncate, 0 },
25308 #define osFtruncate ((int(*)(int,off_t))aSyscall[6].pCurrent)
25310 { "fcntl", (sqlite3_syscall_ptr)fcntl, 0 },
25311 #define osFcntl ((int(*)(int,int,...))aSyscall[7].pCurrent)
25313 { "read", (sqlite3_syscall_ptr)read, 0 },
25314 #define osRead ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent)
25316 #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
25317 { "pread", (sqlite3_syscall_ptr)pread, 0 },
25318 #else
25319 { "pread", (sqlite3_syscall_ptr)0, 0 },
25320 #endif
25321 #define osPread ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent)
25323 #if defined(USE_PREAD64)
25324 { "pread64", (sqlite3_syscall_ptr)pread64, 0 },
25325 #else
25326 { "pread64", (sqlite3_syscall_ptr)0, 0 },
25327 #endif
25328 #define osPread64 ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
25330 { "write", (sqlite3_syscall_ptr)write, 0 },
25331 #define osWrite ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
25333 #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
25334 { "pwrite", (sqlite3_syscall_ptr)pwrite, 0 },
25335 #else
25336 { "pwrite", (sqlite3_syscall_ptr)0, 0 },
25337 #endif
25338 #define osPwrite ((ssize_t(*)(int,const void*,size_t,off_t))\
25339 aSyscall[12].pCurrent)
25341 #if defined(USE_PREAD64)
25342 { "pwrite64", (sqlite3_syscall_ptr)pwrite64, 0 },
25343 #else
25344 { "pwrite64", (sqlite3_syscall_ptr)0, 0 },
25345 #endif
25346 #define osPwrite64 ((ssize_t(*)(int,const void*,size_t,off_t))\
25347 aSyscall[13].pCurrent)
25349 #if SQLITE_ENABLE_LOCKING_STYLE
25350 { "fchmod", (sqlite3_syscall_ptr)fchmod, 0 },
25351 #else
25352 { "fchmod", (sqlite3_syscall_ptr)0, 0 },
25353 #endif
25354 #define osFchmod ((int(*)(int,mode_t))aSyscall[14].pCurrent)
25356 #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
25357 { "fallocate", (sqlite3_syscall_ptr)posix_fallocate, 0 },
25358 #else
25359 { "fallocate", (sqlite3_syscall_ptr)0, 0 },
25360 #endif
25361 #define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent)
25363 { "unlink", (sqlite3_syscall_ptr)unlink, 0 },
25364 #define osUnlink ((int(*)(const char*))aSyscall[16].pCurrent)
25366 { "openDirectory", (sqlite3_syscall_ptr)openDirectory, 0 },
25367 #define osOpenDirectory ((int(*)(const char*,int*))aSyscall[17].pCurrent)
25369 { "mkdir", (sqlite3_syscall_ptr)mkdir, 0 },
25370 #define osMkdir ((int(*)(const char*,mode_t))aSyscall[18].pCurrent)
25372 { "rmdir", (sqlite3_syscall_ptr)rmdir, 0 },
25373 #define osRmdir ((int(*)(const char*))aSyscall[19].pCurrent)
25375 }; /* End of the overrideable system calls */
25378 ** This is the xSetSystemCall() method of sqlite3_vfs for all of the
25379 ** "unix" VFSes. Return SQLITE_OK opon successfully updating the
25380 ** system call pointer, or SQLITE_NOTFOUND if there is no configurable
25381 ** system call named zName.
25383 static int unixSetSystemCall(
25384 sqlite3_vfs *pNotUsed, /* The VFS pointer. Not used */
25385 const char *zName, /* Name of system call to override */
25386 sqlite3_syscall_ptr pNewFunc /* Pointer to new system call value */
25388 unsigned int i;
25389 int rc = SQLITE_NOTFOUND;
25391 UNUSED_PARAMETER(pNotUsed);
25392 if( zName==0 ){
25393 /* If no zName is given, restore all system calls to their default
25394 ** settings and return NULL
25396 rc = SQLITE_OK;
25397 for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
25398 if( aSyscall[i].pDefault ){
25399 aSyscall[i].pCurrent = aSyscall[i].pDefault;
25402 }else{
25403 /* If zName is specified, operate on only the one system call
25404 ** specified.
25406 for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
25407 if( strcmp(zName, aSyscall[i].zName)==0 ){
25408 if( aSyscall[i].pDefault==0 ){
25409 aSyscall[i].pDefault = aSyscall[i].pCurrent;
25411 rc = SQLITE_OK;
25412 if( pNewFunc==0 ) pNewFunc = aSyscall[i].pDefault;
25413 aSyscall[i].pCurrent = pNewFunc;
25414 break;
25418 return rc;
25422 ** Return the value of a system call. Return NULL if zName is not a
25423 ** recognized system call name. NULL is also returned if the system call
25424 ** is currently undefined.
25426 static sqlite3_syscall_ptr unixGetSystemCall(
25427 sqlite3_vfs *pNotUsed,
25428 const char *zName
25430 unsigned int i;
25432 UNUSED_PARAMETER(pNotUsed);
25433 for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
25434 if( strcmp(zName, aSyscall[i].zName)==0 ) return aSyscall[i].pCurrent;
25436 return 0;
25440 ** Return the name of the first system call after zName. If zName==NULL
25441 ** then return the name of the first system call. Return NULL if zName
25442 ** is the last system call or if zName is not the name of a valid
25443 ** system call.
25445 static const char *unixNextSystemCall(sqlite3_vfs *p, const char *zName){
25446 int i = -1;
25448 UNUSED_PARAMETER(p);
25449 if( zName ){
25450 for(i=0; i<ArraySize(aSyscall)-1; i++){
25451 if( strcmp(zName, aSyscall[i].zName)==0 ) break;
25454 for(i++; i<ArraySize(aSyscall); i++){
25455 if( aSyscall[i].pCurrent!=0 ) return aSyscall[i].zName;
25457 return 0;
25461 ** Retry open() calls that fail due to EINTR
25463 static int robust_open(const char *z, int f, int m){
25464 int rc;
25465 do{ rc = osOpen(z,f,m); }while( rc<0 && errno==EINTR );
25466 return rc;
25470 ** Helper functions to obtain and relinquish the global mutex. The
25471 ** global mutex is used to protect the unixInodeInfo and
25472 ** vxworksFileId objects used by this file, all of which may be
25473 ** shared by multiple threads.
25475 ** Function unixMutexHeld() is used to assert() that the global mutex
25476 ** is held when required. This function is only used as part of assert()
25477 ** statements. e.g.
25479 ** unixEnterMutex()
25480 ** assert( unixMutexHeld() );
25481 ** unixEnterLeave()
25483 static void unixEnterMutex(void){
25484 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
25486 static void unixLeaveMutex(void){
25487 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
25489 #ifdef SQLITE_DEBUG
25490 static int unixMutexHeld(void) {
25491 return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
25493 #endif
25496 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
25498 ** Helper function for printing out trace information from debugging
25499 ** binaries. This returns the string represetation of the supplied
25500 ** integer lock-type.
25502 static const char *azFileLock(int eFileLock){
25503 switch( eFileLock ){
25504 case NO_LOCK: return "NONE";
25505 case SHARED_LOCK: return "SHARED";
25506 case RESERVED_LOCK: return "RESERVED";
25507 case PENDING_LOCK: return "PENDING";
25508 case EXCLUSIVE_LOCK: return "EXCLUSIVE";
25510 return "ERROR";
25512 #endif
25514 #ifdef SQLITE_LOCK_TRACE
25516 ** Print out information about all locking operations.
25518 ** This routine is used for troubleshooting locks on multithreaded
25519 ** platforms. Enable by compiling with the -DSQLITE_LOCK_TRACE
25520 ** command-line option on the compiler. This code is normally
25521 ** turned off.
25523 static int lockTrace(int fd, int op, struct flock *p){
25524 char *zOpName, *zType;
25525 int s;
25526 int savedErrno;
25527 if( op==F_GETLK ){
25528 zOpName = "GETLK";
25529 }else if( op==F_SETLK ){
25530 zOpName = "SETLK";
25531 }else{
25532 s = osFcntl(fd, op, p);
25533 sqlite3DebugPrintf("fcntl unknown %d %d %d\n", fd, op, s);
25534 return s;
25536 if( p->l_type==F_RDLCK ){
25537 zType = "RDLCK";
25538 }else if( p->l_type==F_WRLCK ){
25539 zType = "WRLCK";
25540 }else if( p->l_type==F_UNLCK ){
25541 zType = "UNLCK";
25542 }else{
25543 assert( 0 );
25545 assert( p->l_whence==SEEK_SET );
25546 s = osFcntl(fd, op, p);
25547 savedErrno = errno;
25548 sqlite3DebugPrintf("fcntl %d %d %s %s %d %d %d %d\n",
25549 threadid, fd, zOpName, zType, (int)p->l_start, (int)p->l_len,
25550 (int)p->l_pid, s);
25551 if( s==(-1) && op==F_SETLK && (p->l_type==F_RDLCK || p->l_type==F_WRLCK) ){
25552 struct flock l2;
25553 l2 = *p;
25554 osFcntl(fd, F_GETLK, &l2);
25555 if( l2.l_type==F_RDLCK ){
25556 zType = "RDLCK";
25557 }else if( l2.l_type==F_WRLCK ){
25558 zType = "WRLCK";
25559 }else if( l2.l_type==F_UNLCK ){
25560 zType = "UNLCK";
25561 }else{
25562 assert( 0 );
25564 sqlite3DebugPrintf("fcntl-failure-reason: %s %d %d %d\n",
25565 zType, (int)l2.l_start, (int)l2.l_len, (int)l2.l_pid);
25567 errno = savedErrno;
25568 return s;
25570 #undef osFcntl
25571 #define osFcntl lockTrace
25572 #endif /* SQLITE_LOCK_TRACE */
25575 ** Retry ftruncate() calls that fail due to EINTR
25577 static int robust_ftruncate(int h, sqlite3_int64 sz){
25578 int rc;
25579 do{ rc = osFtruncate(h,sz); }while( rc<0 && errno==EINTR );
25580 return rc;
25584 ** This routine translates a standard POSIX errno code into something
25585 ** useful to the clients of the sqlite3 functions. Specifically, it is
25586 ** intended to translate a variety of "try again" errors into SQLITE_BUSY
25587 ** and a variety of "please close the file descriptor NOW" errors into
25588 ** SQLITE_IOERR
25590 ** Errors during initialization of locks, or file system support for locks,
25591 ** should handle ENOLCK, ENOTSUP, EOPNOTSUPP separately.
25593 static int sqliteErrorFromPosixError(int posixError, int sqliteIOErr) {
25594 switch (posixError) {
25595 #if 0
25596 /* At one point this code was not commented out. In theory, this branch
25597 ** should never be hit, as this function should only be called after
25598 ** a locking-related function (i.e. fcntl()) has returned non-zero with
25599 ** the value of errno as the first argument. Since a system call has failed,
25600 ** errno should be non-zero.
25602 ** Despite this, if errno really is zero, we still don't want to return
25603 ** SQLITE_OK. The system call failed, and *some* SQLite error should be
25604 ** propagated back to the caller. Commenting this branch out means errno==0
25605 ** will be handled by the "default:" case below.
25607 case 0:
25608 return SQLITE_OK;
25609 #endif
25611 case EAGAIN:
25612 case ETIMEDOUT:
25613 case EBUSY:
25614 case EINTR:
25615 case ENOLCK:
25616 /* random NFS retry error, unless during file system support
25617 * introspection, in which it actually means what it says */
25618 return SQLITE_BUSY;
25620 case EACCES:
25621 /* EACCES is like EAGAIN during locking operations, but not any other time*/
25622 if( (sqliteIOErr == SQLITE_IOERR_LOCK) ||
25623 (sqliteIOErr == SQLITE_IOERR_UNLOCK) ||
25624 (sqliteIOErr == SQLITE_IOERR_RDLOCK) ||
25625 (sqliteIOErr == SQLITE_IOERR_CHECKRESERVEDLOCK) ){
25626 return SQLITE_BUSY;
25628 /* else fall through */
25629 case EPERM:
25630 return SQLITE_PERM;
25632 /* EDEADLK is only possible if a call to fcntl(F_SETLKW) is made. And
25633 ** this module never makes such a call. And the code in SQLite itself
25634 ** asserts that SQLITE_IOERR_BLOCKED is never returned. For these reasons
25635 ** this case is also commented out. If the system does set errno to EDEADLK,
25636 ** the default SQLITE_IOERR_XXX code will be returned. */
25637 #if 0
25638 case EDEADLK:
25639 return SQLITE_IOERR_BLOCKED;
25640 #endif
25642 #if EOPNOTSUPP!=ENOTSUP
25643 case EOPNOTSUPP:
25644 /* something went terribly awry, unless during file system support
25645 * introspection, in which it actually means what it says */
25646 #endif
25647 #ifdef ENOTSUP
25648 case ENOTSUP:
25649 /* invalid fd, unless during file system support introspection, in which
25650 * it actually means what it says */
25651 #endif
25652 case EIO:
25653 case EBADF:
25654 case EINVAL:
25655 case ENOTCONN:
25656 case ENODEV:
25657 case ENXIO:
25658 case ENOENT:
25659 #ifdef ESTALE /* ESTALE is not defined on Interix systems */
25660 case ESTALE:
25661 #endif
25662 case ENOSYS:
25663 /* these should force the client to close the file and reconnect */
25665 default:
25666 return sqliteIOErr;
25672 /******************************************************************************
25673 ****************** Begin Unique File ID Utility Used By VxWorks ***************
25675 ** On most versions of unix, we can get a unique ID for a file by concatenating
25676 ** the device number and the inode number. But this does not work on VxWorks.
25677 ** On VxWorks, a unique file id must be based on the canonical filename.
25679 ** A pointer to an instance of the following structure can be used as a
25680 ** unique file ID in VxWorks. Each instance of this structure contains
25681 ** a copy of the canonical filename. There is also a reference count.
25682 ** The structure is reclaimed when the number of pointers to it drops to
25683 ** zero.
25685 ** There are never very many files open at one time and lookups are not
25686 ** a performance-critical path, so it is sufficient to put these
25687 ** structures on a linked list.
25689 struct vxworksFileId {
25690 struct vxworksFileId *pNext; /* Next in a list of them all */
25691 int nRef; /* Number of references to this one */
25692 int nName; /* Length of the zCanonicalName[] string */
25693 char *zCanonicalName; /* Canonical filename */
25696 #if OS_VXWORKS
25698 ** All unique filenames are held on a linked list headed by this
25699 ** variable:
25701 static struct vxworksFileId *vxworksFileList = 0;
25704 ** Simplify a filename into its canonical form
25705 ** by making the following changes:
25707 ** * removing any trailing and duplicate /
25708 ** * convert /./ into just /
25709 ** * convert /A/../ where A is any simple name into just /
25711 ** Changes are made in-place. Return the new name length.
25713 ** The original filename is in z[0..n-1]. Return the number of
25714 ** characters in the simplified name.
25716 static int vxworksSimplifyName(char *z, int n){
25717 int i, j;
25718 while( n>1 && z[n-1]=='/' ){ n--; }
25719 for(i=j=0; i<n; i++){
25720 if( z[i]=='/' ){
25721 if( z[i+1]=='/' ) continue;
25722 if( z[i+1]=='.' && i+2<n && z[i+2]=='/' ){
25723 i += 1;
25724 continue;
25726 if( z[i+1]=='.' && i+3<n && z[i+2]=='.' && z[i+3]=='/' ){
25727 while( j>0 && z[j-1]!='/' ){ j--; }
25728 if( j>0 ){ j--; }
25729 i += 2;
25730 continue;
25733 z[j++] = z[i];
25735 z[j] = 0;
25736 return j;
25740 ** Find a unique file ID for the given absolute pathname. Return
25741 ** a pointer to the vxworksFileId object. This pointer is the unique
25742 ** file ID.
25744 ** The nRef field of the vxworksFileId object is incremented before
25745 ** the object is returned. A new vxworksFileId object is created
25746 ** and added to the global list if necessary.
25748 ** If a memory allocation error occurs, return NULL.
25750 static struct vxworksFileId *vxworksFindFileId(const char *zAbsoluteName){
25751 struct vxworksFileId *pNew; /* search key and new file ID */
25752 struct vxworksFileId *pCandidate; /* For looping over existing file IDs */
25753 int n; /* Length of zAbsoluteName string */
25755 assert( zAbsoluteName[0]=='/' );
25756 n = (int)strlen(zAbsoluteName);
25757 pNew = sqlite3_malloc( sizeof(*pNew) + (n+1) );
25758 if( pNew==0 ) return 0;
25759 pNew->zCanonicalName = (char*)&pNew[1];
25760 memcpy(pNew->zCanonicalName, zAbsoluteName, n+1);
25761 n = vxworksSimplifyName(pNew->zCanonicalName, n);
25763 /* Search for an existing entry that matching the canonical name.
25764 ** If found, increment the reference count and return a pointer to
25765 ** the existing file ID.
25767 unixEnterMutex();
25768 for(pCandidate=vxworksFileList; pCandidate; pCandidate=pCandidate->pNext){
25769 if( pCandidate->nName==n
25770 && memcmp(pCandidate->zCanonicalName, pNew->zCanonicalName, n)==0
25772 sqlite3_free(pNew);
25773 pCandidate->nRef++;
25774 unixLeaveMutex();
25775 return pCandidate;
25779 /* No match was found. We will make a new file ID */
25780 pNew->nRef = 1;
25781 pNew->nName = n;
25782 pNew->pNext = vxworksFileList;
25783 vxworksFileList = pNew;
25784 unixLeaveMutex();
25785 return pNew;
25789 ** Decrement the reference count on a vxworksFileId object. Free
25790 ** the object when the reference count reaches zero.
25792 static void vxworksReleaseFileId(struct vxworksFileId *pId){
25793 unixEnterMutex();
25794 assert( pId->nRef>0 );
25795 pId->nRef--;
25796 if( pId->nRef==0 ){
25797 struct vxworksFileId **pp;
25798 for(pp=&vxworksFileList; *pp && *pp!=pId; pp = &((*pp)->pNext)){}
25799 assert( *pp==pId );
25800 *pp = pId->pNext;
25801 sqlite3_free(pId);
25803 unixLeaveMutex();
25805 #endif /* OS_VXWORKS */
25806 /*************** End of Unique File ID Utility Used By VxWorks ****************
25807 ******************************************************************************/
25810 /******************************************************************************
25811 *************************** Posix Advisory Locking ****************************
25813 ** POSIX advisory locks are broken by design. ANSI STD 1003.1 (1996)
25814 ** section 6.5.2.2 lines 483 through 490 specify that when a process
25815 ** sets or clears a lock, that operation overrides any prior locks set
25816 ** by the same process. It does not explicitly say so, but this implies
25817 ** that it overrides locks set by the same process using a different
25818 ** file descriptor. Consider this test case:
25820 ** int fd1 = open("./file1", O_RDWR|O_CREAT, 0644);
25821 ** int fd2 = open("./file2", O_RDWR|O_CREAT, 0644);
25823 ** Suppose ./file1 and ./file2 are really the same file (because
25824 ** one is a hard or symbolic link to the other) then if you set
25825 ** an exclusive lock on fd1, then try to get an exclusive lock
25826 ** on fd2, it works. I would have expected the second lock to
25827 ** fail since there was already a lock on the file due to fd1.
25828 ** But not so. Since both locks came from the same process, the
25829 ** second overrides the first, even though they were on different
25830 ** file descriptors opened on different file names.
25832 ** This means that we cannot use POSIX locks to synchronize file access
25833 ** among competing threads of the same process. POSIX locks will work fine
25834 ** to synchronize access for threads in separate processes, but not
25835 ** threads within the same process.
25837 ** To work around the problem, SQLite has to manage file locks internally
25838 ** on its own. Whenever a new database is opened, we have to find the
25839 ** specific inode of the database file (the inode is determined by the
25840 ** st_dev and st_ino fields of the stat structure that fstat() fills in)
25841 ** and check for locks already existing on that inode. When locks are
25842 ** created or removed, we have to look at our own internal record of the
25843 ** locks to see if another thread has previously set a lock on that same
25844 ** inode.
25846 ** (Aside: The use of inode numbers as unique IDs does not work on VxWorks.
25847 ** For VxWorks, we have to use the alternative unique ID system based on
25848 ** canonical filename and implemented in the previous division.)
25850 ** The sqlite3_file structure for POSIX is no longer just an integer file
25851 ** descriptor. It is now a structure that holds the integer file
25852 ** descriptor and a pointer to a structure that describes the internal
25853 ** locks on the corresponding inode. There is one locking structure
25854 ** per inode, so if the same inode is opened twice, both unixFile structures
25855 ** point to the same locking structure. The locking structure keeps
25856 ** a reference count (so we will know when to delete it) and a "cnt"
25857 ** field that tells us its internal lock status. cnt==0 means the
25858 ** file is unlocked. cnt==-1 means the file has an exclusive lock.
25859 ** cnt>0 means there are cnt shared locks on the file.
25861 ** Any attempt to lock or unlock a file first checks the locking
25862 ** structure. The fcntl() system call is only invoked to set a
25863 ** POSIX lock if the internal lock structure transitions between
25864 ** a locked and an unlocked state.
25866 ** But wait: there are yet more problems with POSIX advisory locks.
25868 ** If you close a file descriptor that points to a file that has locks,
25869 ** all locks on that file that are owned by the current process are
25870 ** released. To work around this problem, each unixInodeInfo object
25871 ** maintains a count of the number of pending locks on tha inode.
25872 ** When an attempt is made to close an unixFile, if there are
25873 ** other unixFile open on the same inode that are holding locks, the call
25874 ** to close() the file descriptor is deferred until all of the locks clear.
25875 ** The unixInodeInfo structure keeps a list of file descriptors that need to
25876 ** be closed and that list is walked (and cleared) when the last lock
25877 ** clears.
25879 ** Yet another problem: LinuxThreads do not play well with posix locks.
25881 ** Many older versions of linux use the LinuxThreads library which is
25882 ** not posix compliant. Under LinuxThreads, a lock created by thread
25883 ** A cannot be modified or overridden by a different thread B.
25884 ** Only thread A can modify the lock. Locking behavior is correct
25885 ** if the appliation uses the newer Native Posix Thread Library (NPTL)
25886 ** on linux - with NPTL a lock created by thread A can override locks
25887 ** in thread B. But there is no way to know at compile-time which
25888 ** threading library is being used. So there is no way to know at
25889 ** compile-time whether or not thread A can override locks on thread B.
25890 ** One has to do a run-time check to discover the behavior of the
25891 ** current process.
25893 ** SQLite used to support LinuxThreads. But support for LinuxThreads
25894 ** was dropped beginning with version 3.7.0. SQLite will still work with
25895 ** LinuxThreads provided that (1) there is no more than one connection
25896 ** per database file in the same process and (2) database connections
25897 ** do not move across threads.
25901 ** An instance of the following structure serves as the key used
25902 ** to locate a particular unixInodeInfo object.
25904 struct unixFileId {
25905 dev_t dev; /* Device number */
25906 #if OS_VXWORKS
25907 struct vxworksFileId *pId; /* Unique file ID for vxworks. */
25908 #else
25909 ino_t ino; /* Inode number */
25910 #endif
25914 ** An instance of the following structure is allocated for each open
25915 ** inode. Or, on LinuxThreads, there is one of these structures for
25916 ** each inode opened by each thread.
25918 ** A single inode can have multiple file descriptors, so each unixFile
25919 ** structure contains a pointer to an instance of this object and this
25920 ** object keeps a count of the number of unixFile pointing to it.
25922 struct unixInodeInfo {
25923 struct unixFileId fileId; /* The lookup key */
25924 int nShared; /* Number of SHARED locks held */
25925 unsigned char eFileLock; /* One of SHARED_LOCK, RESERVED_LOCK etc. */
25926 unsigned char bProcessLock; /* An exclusive process lock is held */
25927 int nRef; /* Number of pointers to this structure */
25928 unixShmNode *pShmNode; /* Shared memory associated with this inode */
25929 int nLock; /* Number of outstanding file locks */
25930 UnixUnusedFd *pUnused; /* Unused file descriptors to close */
25931 unixInodeInfo *pNext; /* List of all unixInodeInfo objects */
25932 unixInodeInfo *pPrev; /* .... doubly linked */
25933 #if SQLITE_ENABLE_LOCKING_STYLE
25934 unsigned long long sharedByte; /* for AFP simulated shared lock */
25935 #endif
25936 #if OS_VXWORKS
25937 sem_t *pSem; /* Named POSIX semaphore */
25938 char aSemName[MAX_PATHNAME+2]; /* Name of that semaphore */
25939 #endif
25943 ** A lists of all unixInodeInfo objects.
25945 static unixInodeInfo *inodeList = 0;
25949 ** This function - unixLogError_x(), is only ever called via the macro
25950 ** unixLogError().
25952 ** It is invoked after an error occurs in an OS function and errno has been
25953 ** set. It logs a message using sqlite3_log() containing the current value of
25954 ** errno and, if possible, the human-readable equivalent from strerror() or
25955 ** strerror_r().
25957 ** The first argument passed to the macro should be the error code that
25958 ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN).
25959 ** The two subsequent arguments should be the name of the OS function that
25960 ** failed (e.g. "unlink", "open") and the the associated file-system path,
25961 ** if any.
25963 #define unixLogError(a,b,c) unixLogErrorAtLine(a,b,c,__LINE__)
25964 static int unixLogErrorAtLine(
25965 int errcode, /* SQLite error code */
25966 const char *zFunc, /* Name of OS function that failed */
25967 const char *zPath, /* File path associated with error */
25968 int iLine /* Source line number where error occurred */
25970 char *zErr; /* Message from strerror() or equivalent */
25971 int iErrno = errno; /* Saved syscall error number */
25973 /* If this is not a threadsafe build (SQLITE_THREADSAFE==0), then use
25974 ** the strerror() function to obtain the human-readable error message
25975 ** equivalent to errno. Otherwise, use strerror_r().
25977 #if SQLITE_THREADSAFE && defined(HAVE_STRERROR_R)
25978 char aErr[80];
25979 memset(aErr, 0, sizeof(aErr));
25980 zErr = aErr;
25982 /* If STRERROR_R_CHAR_P (set by autoconf scripts) or __USE_GNU is defined,
25983 ** assume that the system provides the the GNU version of strerror_r() that
25984 ** returns a pointer to a buffer containing the error message. That pointer
25985 ** may point to aErr[], or it may point to some static storage somewhere.
25986 ** Otherwise, assume that the system provides the POSIX version of
25987 ** strerror_r(), which always writes an error message into aErr[].
25989 ** If the code incorrectly assumes that it is the POSIX version that is
25990 ** available, the error message will often be an empty string. Not a
25991 ** huge problem. Incorrectly concluding that the GNU version is available
25992 ** could lead to a segfault though.
25994 #if defined(STRERROR_R_CHAR_P) || defined(__USE_GNU)
25995 zErr =
25996 # endif
25997 strerror_r(iErrno, aErr, sizeof(aErr)-1);
25999 #elif SQLITE_THREADSAFE
26000 /* This is a threadsafe build, but strerror_r() is not available. */
26001 zErr = "";
26002 #else
26003 /* Non-threadsafe build, use strerror(). */
26004 zErr = strerror(iErrno);
26005 #endif
26007 assert( errcode!=SQLITE_OK );
26008 if( zPath==0 ) zPath = "";
26009 sqlite3_log(errcode,
26010 "os_unix.c:%d: (%d) %s(%s) - %s",
26011 iLine, iErrno, zFunc, zPath, zErr
26014 return errcode;
26018 ** Close a file descriptor.
26020 ** We assume that close() almost always works, since it is only in a
26021 ** very sick application or on a very sick platform that it might fail.
26022 ** If it does fail, simply leak the file descriptor, but do log the
26023 ** error.
26025 ** Note that it is not safe to retry close() after EINTR since the
26026 ** file descriptor might have already been reused by another thread.
26027 ** So we don't even try to recover from an EINTR. Just log the error
26028 ** and move on.
26030 static void robust_close(unixFile *pFile, int h, int lineno){
26031 if( osClose(h) ){
26032 unixLogErrorAtLine(SQLITE_IOERR_CLOSE, "close",
26033 pFile ? pFile->zPath : 0, lineno);
26038 ** Close all file descriptors accumuated in the unixInodeInfo->pUnused list.
26040 static void closePendingFds(unixFile *pFile){
26041 unixInodeInfo *pInode = pFile->pInode;
26042 UnixUnusedFd *p;
26043 UnixUnusedFd *pNext;
26044 for(p=pInode->pUnused; p; p=pNext){
26045 pNext = p->pNext;
26046 robust_close(pFile, p->fd, __LINE__);
26047 sqlite3_free(p);
26049 pInode->pUnused = 0;
26053 ** Release a unixInodeInfo structure previously allocated by findInodeInfo().
26055 ** The mutex entered using the unixEnterMutex() function must be held
26056 ** when this function is called.
26058 static void releaseInodeInfo(unixFile *pFile){
26059 unixInodeInfo *pInode = pFile->pInode;
26060 assert( unixMutexHeld() );
26061 if( ALWAYS(pInode) ){
26062 pInode->nRef--;
26063 if( pInode->nRef==0 ){
26064 assert( pInode->pShmNode==0 );
26065 closePendingFds(pFile);
26066 if( pInode->pPrev ){
26067 assert( pInode->pPrev->pNext==pInode );
26068 pInode->pPrev->pNext = pInode->pNext;
26069 }else{
26070 assert( inodeList==pInode );
26071 inodeList = pInode->pNext;
26073 if( pInode->pNext ){
26074 assert( pInode->pNext->pPrev==pInode );
26075 pInode->pNext->pPrev = pInode->pPrev;
26077 sqlite3_free(pInode);
26083 ** Given a file descriptor, locate the unixInodeInfo object that
26084 ** describes that file descriptor. Create a new one if necessary. The
26085 ** return value might be uninitialized if an error occurs.
26087 ** The mutex entered using the unixEnterMutex() function must be held
26088 ** when this function is called.
26090 ** Return an appropriate error code.
26092 static int findInodeInfo(
26093 unixFile *pFile, /* Unix file with file desc used in the key */
26094 unixInodeInfo **ppInode /* Return the unixInodeInfo object here */
26096 int rc; /* System call return code */
26097 int fd; /* The file descriptor for pFile */
26098 struct unixFileId fileId; /* Lookup key for the unixInodeInfo */
26099 struct stat statbuf; /* Low-level file information */
26100 unixInodeInfo *pInode = 0; /* Candidate unixInodeInfo object */
26102 assert( unixMutexHeld() );
26104 /* Get low-level information about the file that we can used to
26105 ** create a unique name for the file.
26107 fd = pFile->h;
26108 rc = osFstat(fd, &statbuf);
26109 if( rc!=0 ){
26110 pFile->lastErrno = errno;
26111 #ifdef EOVERFLOW
26112 if( pFile->lastErrno==EOVERFLOW ) return SQLITE_NOLFS;
26113 #endif
26114 return SQLITE_IOERR;
26117 #ifdef __APPLE__
26118 /* On OS X on an msdos filesystem, the inode number is reported
26119 ** incorrectly for zero-size files. See ticket #3260. To work
26120 ** around this problem (we consider it a bug in OS X, not SQLite)
26121 ** we always increase the file size to 1 by writing a single byte
26122 ** prior to accessing the inode number. The one byte written is
26123 ** an ASCII 'S' character which also happens to be the first byte
26124 ** in the header of every SQLite database. In this way, if there
26125 ** is a race condition such that another thread has already populated
26126 ** the first page of the database, no damage is done.
26128 if( statbuf.st_size==0 && (pFile->fsFlags & SQLITE_FSFLAGS_IS_MSDOS)!=0 ){
26129 do{ rc = osWrite(fd, "S", 1); }while( rc<0 && errno==EINTR );
26130 if( rc!=1 ){
26131 pFile->lastErrno = errno;
26132 return SQLITE_IOERR;
26134 rc = osFstat(fd, &statbuf);
26135 if( rc!=0 ){
26136 pFile->lastErrno = errno;
26137 return SQLITE_IOERR;
26140 #endif
26142 memset(&fileId, 0, sizeof(fileId));
26143 fileId.dev = statbuf.st_dev;
26144 #if OS_VXWORKS
26145 fileId.pId = pFile->pId;
26146 #else
26147 fileId.ino = statbuf.st_ino;
26148 #endif
26149 pInode = inodeList;
26150 while( pInode && memcmp(&fileId, &pInode->fileId, sizeof(fileId)) ){
26151 pInode = pInode->pNext;
26153 if( pInode==0 ){
26154 pInode = sqlite3_malloc( sizeof(*pInode) );
26155 if( pInode==0 ){
26156 return SQLITE_NOMEM;
26158 memset(pInode, 0, sizeof(*pInode));
26159 memcpy(&pInode->fileId, &fileId, sizeof(fileId));
26160 pInode->nRef = 1;
26161 pInode->pNext = inodeList;
26162 pInode->pPrev = 0;
26163 if( inodeList ) inodeList->pPrev = pInode;
26164 inodeList = pInode;
26165 }else{
26166 pInode->nRef++;
26168 *ppInode = pInode;
26169 return SQLITE_OK;
26174 ** This routine checks if there is a RESERVED lock held on the specified
26175 ** file by this or any other process. If such a lock is held, set *pResOut
26176 ** to a non-zero value otherwise *pResOut is set to zero. The return value
26177 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26179 static int unixCheckReservedLock(sqlite3_file *id, int *pResOut){
26180 int rc = SQLITE_OK;
26181 int reserved = 0;
26182 unixFile *pFile = (unixFile*)id;
26184 SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26186 assert( pFile );
26187 unixEnterMutex(); /* Because pFile->pInode is shared across threads */
26189 /* Check if a thread in this process holds such a lock */
26190 if( pFile->pInode->eFileLock>SHARED_LOCK ){
26191 reserved = 1;
26194 /* Otherwise see if some other process holds it.
26196 #ifndef __DJGPP__
26197 if( !reserved && !pFile->pInode->bProcessLock ){
26198 struct flock lock;
26199 lock.l_whence = SEEK_SET;
26200 lock.l_start = RESERVED_BYTE;
26201 lock.l_len = 1;
26202 lock.l_type = F_WRLCK;
26203 if( osFcntl(pFile->h, F_GETLK, &lock) ){
26204 rc = SQLITE_IOERR_CHECKRESERVEDLOCK;
26205 pFile->lastErrno = errno;
26206 } else if( lock.l_type!=F_UNLCK ){
26207 reserved = 1;
26210 #endif
26212 unixLeaveMutex();
26213 OSTRACE(("TEST WR-LOCK %d %d %d (unix)\n", pFile->h, rc, reserved));
26215 *pResOut = reserved;
26216 return rc;
26220 ** Attempt to set a system-lock on the file pFile. The lock is
26221 ** described by pLock.
26223 ** If the pFile was opened read/write from unix-excl, then the only lock
26224 ** ever obtained is an exclusive lock, and it is obtained exactly once
26225 ** the first time any lock is attempted. All subsequent system locking
26226 ** operations become no-ops. Locking operations still happen internally,
26227 ** in order to coordinate access between separate database connections
26228 ** within this process, but all of that is handled in memory and the
26229 ** operating system does not participate.
26231 ** This function is a pass-through to fcntl(F_SETLK) if pFile is using
26232 ** any VFS other than "unix-excl" or if pFile is opened on "unix-excl"
26233 ** and is read-only.
26235 ** Zero is returned if the call completes successfully, or -1 if a call
26236 ** to fcntl() fails. In this case, errno is set appropriately (by fcntl()).
26238 static int unixFileLock(unixFile *pFile, struct flock *pLock){
26239 int rc;
26240 unixInodeInfo *pInode = pFile->pInode;
26241 assert( unixMutexHeld() );
26242 assert( pInode!=0 );
26243 if( ((pFile->ctrlFlags & UNIXFILE_EXCL)!=0 || pInode->bProcessLock)
26244 && ((pFile->ctrlFlags & UNIXFILE_RDONLY)==0)
26246 if( pInode->bProcessLock==0 ){
26247 struct flock lock;
26248 assert( pInode->nLock==0 );
26249 lock.l_whence = SEEK_SET;
26250 lock.l_start = SHARED_FIRST;
26251 lock.l_len = SHARED_SIZE;
26252 lock.l_type = F_WRLCK;
26253 rc = osFcntl(pFile->h, F_SETLK, &lock);
26254 if( rc<0 ) return rc;
26255 pInode->bProcessLock = 1;
26256 pInode->nLock++;
26257 }else{
26258 rc = 0;
26260 }else{
26261 rc = osFcntl(pFile->h, F_SETLK, pLock);
26263 return rc;
26267 ** Lock the file with the lock specified by parameter eFileLock - one
26268 ** of the following:
26270 ** (1) SHARED_LOCK
26271 ** (2) RESERVED_LOCK
26272 ** (3) PENDING_LOCK
26273 ** (4) EXCLUSIVE_LOCK
26275 ** Sometimes when requesting one lock state, additional lock states
26276 ** are inserted in between. The locking might fail on one of the later
26277 ** transitions leaving the lock state different from what it started but
26278 ** still short of its goal. The following chart shows the allowed
26279 ** transitions and the inserted intermediate states:
26281 ** UNLOCKED -> SHARED
26282 ** SHARED -> RESERVED
26283 ** SHARED -> (PENDING) -> EXCLUSIVE
26284 ** RESERVED -> (PENDING) -> EXCLUSIVE
26285 ** PENDING -> EXCLUSIVE
26287 ** This routine will only increase a lock. Use the sqlite3OsUnlock()
26288 ** routine to lower a locking level.
26290 static int unixLock(sqlite3_file *id, int eFileLock){
26291 /* The following describes the implementation of the various locks and
26292 ** lock transitions in terms of the POSIX advisory shared and exclusive
26293 ** lock primitives (called read-locks and write-locks below, to avoid
26294 ** confusion with SQLite lock names). The algorithms are complicated
26295 ** slightly in order to be compatible with windows systems simultaneously
26296 ** accessing the same database file, in case that is ever required.
26298 ** Symbols defined in os.h indentify the 'pending byte' and the 'reserved
26299 ** byte', each single bytes at well known offsets, and the 'shared byte
26300 ** range', a range of 510 bytes at a well known offset.
26302 ** To obtain a SHARED lock, a read-lock is obtained on the 'pending
26303 ** byte'. If this is successful, a random byte from the 'shared byte
26304 ** range' is read-locked and the lock on the 'pending byte' released.
26306 ** A process may only obtain a RESERVED lock after it has a SHARED lock.
26307 ** A RESERVED lock is implemented by grabbing a write-lock on the
26308 ** 'reserved byte'.
26310 ** A process may only obtain a PENDING lock after it has obtained a
26311 ** SHARED lock. A PENDING lock is implemented by obtaining a write-lock
26312 ** on the 'pending byte'. This ensures that no new SHARED locks can be
26313 ** obtained, but existing SHARED locks are allowed to persist. A process
26314 ** does not have to obtain a RESERVED lock on the way to a PENDING lock.
26315 ** This property is used by the algorithm for rolling back a journal file
26316 ** after a crash.
26318 ** An EXCLUSIVE lock, obtained after a PENDING lock is held, is
26319 ** implemented by obtaining a write-lock on the entire 'shared byte
26320 ** range'. Since all other locks require a read-lock on one of the bytes
26321 ** within this range, this ensures that no other locks are held on the
26322 ** database.
26324 ** The reason a single byte cannot be used instead of the 'shared byte
26325 ** range' is that some versions of windows do not support read-locks. By
26326 ** locking a random byte from a range, concurrent SHARED locks may exist
26327 ** even if the locking primitive used is always a write-lock.
26329 int rc = SQLITE_OK;
26330 unixFile *pFile = (unixFile*)id;
26331 unixInodeInfo *pInode;
26332 struct flock lock;
26333 int tErrno = 0;
26335 assert( pFile );
26336 OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (unix)\n", pFile->h,
26337 azFileLock(eFileLock), azFileLock(pFile->eFileLock),
26338 azFileLock(pFile->pInode->eFileLock), pFile->pInode->nShared , getpid()));
26340 /* If there is already a lock of this type or more restrictive on the
26341 ** unixFile, do nothing. Don't use the end_lock: exit path, as
26342 ** unixEnterMutex() hasn't been called yet.
26344 if( pFile->eFileLock>=eFileLock ){
26345 OSTRACE(("LOCK %d %s ok (already held) (unix)\n", pFile->h,
26346 azFileLock(eFileLock)));
26347 return SQLITE_OK;
26350 /* Make sure the locking sequence is correct.
26351 ** (1) We never move from unlocked to anything higher than shared lock.
26352 ** (2) SQLite never explicitly requests a pendig lock.
26353 ** (3) A shared lock is always held when a reserve lock is requested.
26355 assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
26356 assert( eFileLock!=PENDING_LOCK );
26357 assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
26359 /* This mutex is needed because pFile->pInode is shared across threads
26361 unixEnterMutex();
26362 pInode = pFile->pInode;
26364 /* If some thread using this PID has a lock via a different unixFile*
26365 ** handle that precludes the requested lock, return BUSY.
26367 if( (pFile->eFileLock!=pInode->eFileLock &&
26368 (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
26370 rc = SQLITE_BUSY;
26371 goto end_lock;
26374 /* If a SHARED lock is requested, and some thread using this PID already
26375 ** has a SHARED or RESERVED lock, then increment reference counts and
26376 ** return SQLITE_OK.
26378 if( eFileLock==SHARED_LOCK &&
26379 (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
26380 assert( eFileLock==SHARED_LOCK );
26381 assert( pFile->eFileLock==0 );
26382 assert( pInode->nShared>0 );
26383 pFile->eFileLock = SHARED_LOCK;
26384 pInode->nShared++;
26385 pInode->nLock++;
26386 goto end_lock;
26390 /* A PENDING lock is needed before acquiring a SHARED lock and before
26391 ** acquiring an EXCLUSIVE lock. For the SHARED lock, the PENDING will
26392 ** be released.
26394 lock.l_len = 1L;
26395 lock.l_whence = SEEK_SET;
26396 if( eFileLock==SHARED_LOCK
26397 || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
26399 lock.l_type = (eFileLock==SHARED_LOCK?F_RDLCK:F_WRLCK);
26400 lock.l_start = PENDING_BYTE;
26401 if( unixFileLock(pFile, &lock) ){
26402 tErrno = errno;
26403 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26404 if( rc!=SQLITE_BUSY ){
26405 pFile->lastErrno = tErrno;
26407 goto end_lock;
26412 /* If control gets to this point, then actually go ahead and make
26413 ** operating system calls for the specified lock.
26415 if( eFileLock==SHARED_LOCK ){
26416 assert( pInode->nShared==0 );
26417 assert( pInode->eFileLock==0 );
26418 assert( rc==SQLITE_OK );
26420 /* Now get the read-lock */
26421 lock.l_start = SHARED_FIRST;
26422 lock.l_len = SHARED_SIZE;
26423 if( unixFileLock(pFile, &lock) ){
26424 tErrno = errno;
26425 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26428 /* Drop the temporary PENDING lock */
26429 lock.l_start = PENDING_BYTE;
26430 lock.l_len = 1L;
26431 lock.l_type = F_UNLCK;
26432 if( unixFileLock(pFile, &lock) && rc==SQLITE_OK ){
26433 /* This could happen with a network mount */
26434 tErrno = errno;
26435 rc = SQLITE_IOERR_UNLOCK;
26438 if( rc ){
26439 if( rc!=SQLITE_BUSY ){
26440 pFile->lastErrno = tErrno;
26442 goto end_lock;
26443 }else{
26444 pFile->eFileLock = SHARED_LOCK;
26445 pInode->nLock++;
26446 pInode->nShared = 1;
26448 }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
26449 /* We are trying for an exclusive lock but another thread in this
26450 ** same process is still holding a shared lock. */
26451 rc = SQLITE_BUSY;
26452 }else{
26453 /* The request was for a RESERVED or EXCLUSIVE lock. It is
26454 ** assumed that there is a SHARED or greater lock on the file
26455 ** already.
26457 assert( 0!=pFile->eFileLock );
26458 lock.l_type = F_WRLCK;
26460 assert( eFileLock==RESERVED_LOCK || eFileLock==EXCLUSIVE_LOCK );
26461 if( eFileLock==RESERVED_LOCK ){
26462 lock.l_start = RESERVED_BYTE;
26463 lock.l_len = 1L;
26464 }else{
26465 lock.l_start = SHARED_FIRST;
26466 lock.l_len = SHARED_SIZE;
26469 if( unixFileLock(pFile, &lock) ){
26470 tErrno = errno;
26471 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26472 if( rc!=SQLITE_BUSY ){
26473 pFile->lastErrno = tErrno;
26479 #ifndef NDEBUG
26480 /* Set up the transaction-counter change checking flags when
26481 ** transitioning from a SHARED to a RESERVED lock. The change
26482 ** from SHARED to RESERVED marks the beginning of a normal
26483 ** write operation (not a hot journal rollback).
26485 if( rc==SQLITE_OK
26486 && pFile->eFileLock<=SHARED_LOCK
26487 && eFileLock==RESERVED_LOCK
26489 pFile->transCntrChng = 0;
26490 pFile->dbUpdate = 0;
26491 pFile->inNormalWrite = 1;
26493 #endif
26496 if( rc==SQLITE_OK ){
26497 pFile->eFileLock = eFileLock;
26498 pInode->eFileLock = eFileLock;
26499 }else if( eFileLock==EXCLUSIVE_LOCK ){
26500 pFile->eFileLock = PENDING_LOCK;
26501 pInode->eFileLock = PENDING_LOCK;
26504 end_lock:
26505 unixLeaveMutex();
26506 OSTRACE(("LOCK %d %s %s (unix)\n", pFile->h, azFileLock(eFileLock),
26507 rc==SQLITE_OK ? "ok" : "failed"));
26508 return rc;
26512 ** Add the file descriptor used by file handle pFile to the corresponding
26513 ** pUnused list.
26515 static void setPendingFd(unixFile *pFile){
26516 unixInodeInfo *pInode = pFile->pInode;
26517 UnixUnusedFd *p = pFile->pUnused;
26518 p->pNext = pInode->pUnused;
26519 pInode->pUnused = p;
26520 pFile->h = -1;
26521 pFile->pUnused = 0;
26525 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
26526 ** must be either NO_LOCK or SHARED_LOCK.
26528 ** If the locking level of the file descriptor is already at or below
26529 ** the requested locking level, this routine is a no-op.
26531 ** If handleNFSUnlock is true, then on downgrading an EXCLUSIVE_LOCK to SHARED
26532 ** the byte range is divided into 2 parts and the first part is unlocked then
26533 ** set to a read lock, then the other part is simply unlocked. This works
26534 ** around a bug in BSD NFS lockd (also seen on MacOSX 10.3+) that fails to
26535 ** remove the write lock on a region when a read lock is set.
26537 static int posixUnlock(sqlite3_file *id, int eFileLock, int handleNFSUnlock){
26538 unixFile *pFile = (unixFile*)id;
26539 unixInodeInfo *pInode;
26540 struct flock lock;
26541 int rc = SQLITE_OK;
26543 assert( pFile );
26544 OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (unix)\n", pFile->h, eFileLock,
26545 pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
26546 getpid()));
26548 assert( eFileLock<=SHARED_LOCK );
26549 if( pFile->eFileLock<=eFileLock ){
26550 return SQLITE_OK;
26552 unixEnterMutex();
26553 pInode = pFile->pInode;
26554 assert( pInode->nShared!=0 );
26555 if( pFile->eFileLock>SHARED_LOCK ){
26556 assert( pInode->eFileLock==pFile->eFileLock );
26558 #ifndef NDEBUG
26559 /* When reducing a lock such that other processes can start
26560 ** reading the database file again, make sure that the
26561 ** transaction counter was updated if any part of the database
26562 ** file changed. If the transaction counter is not updated,
26563 ** other connections to the same file might not realize that
26564 ** the file has changed and hence might not know to flush their
26565 ** cache. The use of a stale cache can lead to database corruption.
26567 pFile->inNormalWrite = 0;
26568 #endif
26570 /* downgrading to a shared lock on NFS involves clearing the write lock
26571 ** before establishing the readlock - to avoid a race condition we downgrade
26572 ** the lock in 2 blocks, so that part of the range will be covered by a
26573 ** write lock until the rest is covered by a read lock:
26574 ** 1: [WWWWW]
26575 ** 2: [....W]
26576 ** 3: [RRRRW]
26577 ** 4: [RRRR.]
26579 if( eFileLock==SHARED_LOCK ){
26581 #if !defined(__APPLE__) || !SQLITE_ENABLE_LOCKING_STYLE
26582 (void)handleNFSUnlock;
26583 assert( handleNFSUnlock==0 );
26584 #endif
26585 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
26586 if( handleNFSUnlock ){
26587 int tErrno; /* Error code from system call errors */
26588 off_t divSize = SHARED_SIZE - 1;
26590 lock.l_type = F_UNLCK;
26591 lock.l_whence = SEEK_SET;
26592 lock.l_start = SHARED_FIRST;
26593 lock.l_len = divSize;
26594 if( unixFileLock(pFile, &lock)==(-1) ){
26595 tErrno = errno;
26596 rc = SQLITE_IOERR_UNLOCK;
26597 if( IS_LOCK_ERROR(rc) ){
26598 pFile->lastErrno = tErrno;
26600 goto end_unlock;
26602 lock.l_type = F_RDLCK;
26603 lock.l_whence = SEEK_SET;
26604 lock.l_start = SHARED_FIRST;
26605 lock.l_len = divSize;
26606 if( unixFileLock(pFile, &lock)==(-1) ){
26607 tErrno = errno;
26608 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_RDLOCK);
26609 if( IS_LOCK_ERROR(rc) ){
26610 pFile->lastErrno = tErrno;
26612 goto end_unlock;
26614 lock.l_type = F_UNLCK;
26615 lock.l_whence = SEEK_SET;
26616 lock.l_start = SHARED_FIRST+divSize;
26617 lock.l_len = SHARED_SIZE-divSize;
26618 if( unixFileLock(pFile, &lock)==(-1) ){
26619 tErrno = errno;
26620 rc = SQLITE_IOERR_UNLOCK;
26621 if( IS_LOCK_ERROR(rc) ){
26622 pFile->lastErrno = tErrno;
26624 goto end_unlock;
26626 }else
26627 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
26629 lock.l_type = F_RDLCK;
26630 lock.l_whence = SEEK_SET;
26631 lock.l_start = SHARED_FIRST;
26632 lock.l_len = SHARED_SIZE;
26633 if( unixFileLock(pFile, &lock) ){
26634 /* In theory, the call to unixFileLock() cannot fail because another
26635 ** process is holding an incompatible lock. If it does, this
26636 ** indicates that the other process is not following the locking
26637 ** protocol. If this happens, return SQLITE_IOERR_RDLOCK. Returning
26638 ** SQLITE_BUSY would confuse the upper layer (in practice it causes
26639 ** an assert to fail). */
26640 rc = SQLITE_IOERR_RDLOCK;
26641 pFile->lastErrno = errno;
26642 goto end_unlock;
26646 lock.l_type = F_UNLCK;
26647 lock.l_whence = SEEK_SET;
26648 lock.l_start = PENDING_BYTE;
26649 lock.l_len = 2L; assert( PENDING_BYTE+1==RESERVED_BYTE );
26650 if( unixFileLock(pFile, &lock)==0 ){
26651 pInode->eFileLock = SHARED_LOCK;
26652 }else{
26653 rc = SQLITE_IOERR_UNLOCK;
26654 pFile->lastErrno = errno;
26655 goto end_unlock;
26658 if( eFileLock==NO_LOCK ){
26659 /* Decrement the shared lock counter. Release the lock using an
26660 ** OS call only when all threads in this same process have released
26661 ** the lock.
26663 pInode->nShared--;
26664 if( pInode->nShared==0 ){
26665 lock.l_type = F_UNLCK;
26666 lock.l_whence = SEEK_SET;
26667 lock.l_start = lock.l_len = 0L;
26668 if( unixFileLock(pFile, &lock)==0 ){
26669 pInode->eFileLock = NO_LOCK;
26670 }else{
26671 rc = SQLITE_IOERR_UNLOCK;
26672 pFile->lastErrno = errno;
26673 pInode->eFileLock = NO_LOCK;
26674 pFile->eFileLock = NO_LOCK;
26678 /* Decrement the count of locks against this same file. When the
26679 ** count reaches zero, close any other file descriptors whose close
26680 ** was deferred because of outstanding locks.
26682 pInode->nLock--;
26683 assert( pInode->nLock>=0 );
26684 if( pInode->nLock==0 ){
26685 closePendingFds(pFile);
26689 end_unlock:
26690 unixLeaveMutex();
26691 if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
26692 return rc;
26696 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
26697 ** must be either NO_LOCK or SHARED_LOCK.
26699 ** If the locking level of the file descriptor is already at or below
26700 ** the requested locking level, this routine is a no-op.
26702 static int unixUnlock(sqlite3_file *id, int eFileLock){
26703 return posixUnlock(id, eFileLock, 0);
26707 ** This function performs the parts of the "close file" operation
26708 ** common to all locking schemes. It closes the directory and file
26709 ** handles, if they are valid, and sets all fields of the unixFile
26710 ** structure to 0.
26712 ** It is *not* necessary to hold the mutex when this routine is called,
26713 ** even on VxWorks. A mutex will be acquired on VxWorks by the
26714 ** vxworksReleaseFileId() routine.
26716 static int closeUnixFile(sqlite3_file *id){
26717 unixFile *pFile = (unixFile*)id;
26718 if( pFile->h>=0 ){
26719 robust_close(pFile, pFile->h, __LINE__);
26720 pFile->h = -1;
26722 #if OS_VXWORKS
26723 if( pFile->pId ){
26724 if( pFile->ctrlFlags & UNIXFILE_DELETE ){
26725 osUnlink(pFile->pId->zCanonicalName);
26727 vxworksReleaseFileId(pFile->pId);
26728 pFile->pId = 0;
26730 #endif
26731 OSTRACE(("CLOSE %-3d\n", pFile->h));
26732 OpenCounter(-1);
26733 sqlite3_free(pFile->pUnused);
26734 memset(pFile, 0, sizeof(unixFile));
26735 return SQLITE_OK;
26739 ** Close a file.
26741 static int unixClose(sqlite3_file *id){
26742 int rc = SQLITE_OK;
26743 unixFile *pFile = (unixFile *)id;
26744 unixUnlock(id, NO_LOCK);
26745 unixEnterMutex();
26747 /* unixFile.pInode is always valid here. Otherwise, a different close
26748 ** routine (e.g. nolockClose()) would be called instead.
26750 assert( pFile->pInode->nLock>0 || pFile->pInode->bProcessLock==0 );
26751 if( ALWAYS(pFile->pInode) && pFile->pInode->nLock ){
26752 /* If there are outstanding locks, do not actually close the file just
26753 ** yet because that would clear those locks. Instead, add the file
26754 ** descriptor to pInode->pUnused list. It will be automatically closed
26755 ** when the last lock is cleared.
26757 setPendingFd(pFile);
26759 releaseInodeInfo(pFile);
26760 rc = closeUnixFile(id);
26761 unixLeaveMutex();
26762 return rc;
26765 /************** End of the posix advisory lock implementation *****************
26766 ******************************************************************************/
26768 /******************************************************************************
26769 ****************************** No-op Locking **********************************
26771 ** Of the various locking implementations available, this is by far the
26772 ** simplest: locking is ignored. No attempt is made to lock the database
26773 ** file for reading or writing.
26775 ** This locking mode is appropriate for use on read-only databases
26776 ** (ex: databases that are burned into CD-ROM, for example.) It can
26777 ** also be used if the application employs some external mechanism to
26778 ** prevent simultaneous access of the same database by two or more
26779 ** database connections. But there is a serious risk of database
26780 ** corruption if this locking mode is used in situations where multiple
26781 ** database connections are accessing the same database file at the same
26782 ** time and one or more of those connections are writing.
26785 static int nolockCheckReservedLock(sqlite3_file *NotUsed, int *pResOut){
26786 UNUSED_PARAMETER(NotUsed);
26787 *pResOut = 0;
26788 return SQLITE_OK;
26790 static int nolockLock(sqlite3_file *NotUsed, int NotUsed2){
26791 UNUSED_PARAMETER2(NotUsed, NotUsed2);
26792 return SQLITE_OK;
26794 static int nolockUnlock(sqlite3_file *NotUsed, int NotUsed2){
26795 UNUSED_PARAMETER2(NotUsed, NotUsed2);
26796 return SQLITE_OK;
26800 ** Close the file.
26802 static int nolockClose(sqlite3_file *id) {
26803 return closeUnixFile(id);
26806 /******************* End of the no-op lock implementation *********************
26807 ******************************************************************************/
26809 /******************************************************************************
26810 ************************* Begin dot-file Locking ******************************
26812 ** The dotfile locking implementation uses the existance of separate lock
26813 ** files (really a directory) to control access to the database. This works
26814 ** on just about every filesystem imaginable. But there are serious downsides:
26816 ** (1) There is zero concurrency. A single reader blocks all other
26817 ** connections from reading or writing the database.
26819 ** (2) An application crash or power loss can leave stale lock files
26820 ** sitting around that need to be cleared manually.
26822 ** Nevertheless, a dotlock is an appropriate locking mode for use if no
26823 ** other locking strategy is available.
26825 ** Dotfile locking works by creating a subdirectory in the same directory as
26826 ** the database and with the same name but with a ".lock" extension added.
26827 ** The existance of a lock directory implies an EXCLUSIVE lock. All other
26828 ** lock types (SHARED, RESERVED, PENDING) are mapped into EXCLUSIVE.
26832 ** The file suffix added to the data base filename in order to create the
26833 ** lock directory.
26835 #define DOTLOCK_SUFFIX ".lock"
26838 ** This routine checks if there is a RESERVED lock held on the specified
26839 ** file by this or any other process. If such a lock is held, set *pResOut
26840 ** to a non-zero value otherwise *pResOut is set to zero. The return value
26841 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
26843 ** In dotfile locking, either a lock exists or it does not. So in this
26844 ** variation of CheckReservedLock(), *pResOut is set to true if any lock
26845 ** is held on the file and false if the file is unlocked.
26847 static int dotlockCheckReservedLock(sqlite3_file *id, int *pResOut) {
26848 int rc = SQLITE_OK;
26849 int reserved = 0;
26850 unixFile *pFile = (unixFile*)id;
26852 SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26854 assert( pFile );
26856 /* Check if a thread in this process holds such a lock */
26857 if( pFile->eFileLock>SHARED_LOCK ){
26858 /* Either this connection or some other connection in the same process
26859 ** holds a lock on the file. No need to check further. */
26860 reserved = 1;
26861 }else{
26862 /* The lock is held if and only if the lockfile exists */
26863 const char *zLockFile = (const char*)pFile->lockingContext;
26864 reserved = osAccess(zLockFile, 0)==0;
26866 OSTRACE(("TEST WR-LOCK %d %d %d (dotlock)\n", pFile->h, rc, reserved));
26867 *pResOut = reserved;
26868 return rc;
26872 ** Lock the file with the lock specified by parameter eFileLock - one
26873 ** of the following:
26875 ** (1) SHARED_LOCK
26876 ** (2) RESERVED_LOCK
26877 ** (3) PENDING_LOCK
26878 ** (4) EXCLUSIVE_LOCK
26880 ** Sometimes when requesting one lock state, additional lock states
26881 ** are inserted in between. The locking might fail on one of the later
26882 ** transitions leaving the lock state different from what it started but
26883 ** still short of its goal. The following chart shows the allowed
26884 ** transitions and the inserted intermediate states:
26886 ** UNLOCKED -> SHARED
26887 ** SHARED -> RESERVED
26888 ** SHARED -> (PENDING) -> EXCLUSIVE
26889 ** RESERVED -> (PENDING) -> EXCLUSIVE
26890 ** PENDING -> EXCLUSIVE
26892 ** This routine will only increase a lock. Use the sqlite3OsUnlock()
26893 ** routine to lower a locking level.
26895 ** With dotfile locking, we really only support state (4): EXCLUSIVE.
26896 ** But we track the other locking levels internally.
26898 static int dotlockLock(sqlite3_file *id, int eFileLock) {
26899 unixFile *pFile = (unixFile*)id;
26900 char *zLockFile = (char *)pFile->lockingContext;
26901 int rc = SQLITE_OK;
26904 /* If we have any lock, then the lock file already exists. All we have
26905 ** to do is adjust our internal record of the lock level.
26907 if( pFile->eFileLock > NO_LOCK ){
26908 pFile->eFileLock = eFileLock;
26909 /* Always update the timestamp on the old file */
26910 #ifdef HAVE_UTIME
26911 utime(zLockFile, NULL);
26912 #else
26913 utimes(zLockFile, NULL);
26914 #endif
26915 return SQLITE_OK;
26918 /* grab an exclusive lock */
26919 rc = osMkdir(zLockFile, 0777);
26920 if( rc<0 ){
26921 /* failed to open/create the lock directory */
26922 int tErrno = errno;
26923 if( EEXIST == tErrno ){
26924 rc = SQLITE_BUSY;
26925 } else {
26926 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
26927 if( IS_LOCK_ERROR(rc) ){
26928 pFile->lastErrno = tErrno;
26931 return rc;
26934 /* got it, set the type and return ok */
26935 pFile->eFileLock = eFileLock;
26936 return rc;
26940 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
26941 ** must be either NO_LOCK or SHARED_LOCK.
26943 ** If the locking level of the file descriptor is already at or below
26944 ** the requested locking level, this routine is a no-op.
26946 ** When the locking level reaches NO_LOCK, delete the lock file.
26948 static int dotlockUnlock(sqlite3_file *id, int eFileLock) {
26949 unixFile *pFile = (unixFile*)id;
26950 char *zLockFile = (char *)pFile->lockingContext;
26951 int rc;
26953 assert( pFile );
26954 OSTRACE(("UNLOCK %d %d was %d pid=%d (dotlock)\n", pFile->h, eFileLock,
26955 pFile->eFileLock, getpid()));
26956 assert( eFileLock<=SHARED_LOCK );
26958 /* no-op if possible */
26959 if( pFile->eFileLock==eFileLock ){
26960 return SQLITE_OK;
26963 /* To downgrade to shared, simply update our internal notion of the
26964 ** lock state. No need to mess with the file on disk.
26966 if( eFileLock==SHARED_LOCK ){
26967 pFile->eFileLock = SHARED_LOCK;
26968 return SQLITE_OK;
26971 /* To fully unlock the database, delete the lock file */
26972 assert( eFileLock==NO_LOCK );
26973 rc = osRmdir(zLockFile);
26974 if( rc<0 && errno==ENOTDIR ) rc = osUnlink(zLockFile);
26975 if( rc<0 ){
26976 int tErrno = errno;
26977 rc = 0;
26978 if( ENOENT != tErrno ){
26979 rc = SQLITE_IOERR_UNLOCK;
26981 if( IS_LOCK_ERROR(rc) ){
26982 pFile->lastErrno = tErrno;
26984 return rc;
26986 pFile->eFileLock = NO_LOCK;
26987 return SQLITE_OK;
26991 ** Close a file. Make sure the lock has been released before closing.
26993 static int dotlockClose(sqlite3_file *id) {
26994 int rc;
26995 if( id ){
26996 unixFile *pFile = (unixFile*)id;
26997 dotlockUnlock(id, NO_LOCK);
26998 sqlite3_free(pFile->lockingContext);
27000 rc = closeUnixFile(id);
27001 return rc;
27003 /****************** End of the dot-file lock implementation *******************
27004 ******************************************************************************/
27006 /******************************************************************************
27007 ************************** Begin flock Locking ********************************
27009 ** Use the flock() system call to do file locking.
27011 ** flock() locking is like dot-file locking in that the various
27012 ** fine-grain locking levels supported by SQLite are collapsed into
27013 ** a single exclusive lock. In other words, SHARED, RESERVED, and
27014 ** PENDING locks are the same thing as an EXCLUSIVE lock. SQLite
27015 ** still works when you do this, but concurrency is reduced since
27016 ** only a single process can be reading the database at a time.
27018 ** Omit this section if SQLITE_ENABLE_LOCKING_STYLE is turned off or if
27019 ** compiling for VXWORKS.
27021 #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
27024 ** Retry flock() calls that fail with EINTR
27026 #ifdef EINTR
27027 static int robust_flock(int fd, int op){
27028 int rc;
27029 do{ rc = flock(fd,op); }while( rc<0 && errno==EINTR );
27030 return rc;
27032 #else
27033 # define robust_flock(a,b) flock(a,b)
27034 #endif
27038 ** This routine checks if there is a RESERVED lock held on the specified
27039 ** file by this or any other process. If such a lock is held, set *pResOut
27040 ** to a non-zero value otherwise *pResOut is set to zero. The return value
27041 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
27043 static int flockCheckReservedLock(sqlite3_file *id, int *pResOut){
27044 int rc = SQLITE_OK;
27045 int reserved = 0;
27046 unixFile *pFile = (unixFile*)id;
27048 SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
27050 assert( pFile );
27052 /* Check if a thread in this process holds such a lock */
27053 if( pFile->eFileLock>SHARED_LOCK ){
27054 reserved = 1;
27057 /* Otherwise see if some other process holds it. */
27058 if( !reserved ){
27059 /* attempt to get the lock */
27060 int lrc = robust_flock(pFile->h, LOCK_EX | LOCK_NB);
27061 if( !lrc ){
27062 /* got the lock, unlock it */
27063 lrc = robust_flock(pFile->h, LOCK_UN);
27064 if ( lrc ) {
27065 int tErrno = errno;
27066 /* unlock failed with an error */
27067 lrc = SQLITE_IOERR_UNLOCK;
27068 if( IS_LOCK_ERROR(lrc) ){
27069 pFile->lastErrno = tErrno;
27070 rc = lrc;
27073 } else {
27074 int tErrno = errno;
27075 reserved = 1;
27076 /* someone else might have it reserved */
27077 lrc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
27078 if( IS_LOCK_ERROR(lrc) ){
27079 pFile->lastErrno = tErrno;
27080 rc = lrc;
27084 OSTRACE(("TEST WR-LOCK %d %d %d (flock)\n", pFile->h, rc, reserved));
27086 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
27087 if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
27088 rc = SQLITE_OK;
27089 reserved=1;
27091 #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
27092 *pResOut = reserved;
27093 return rc;
27097 ** Lock the file with the lock specified by parameter eFileLock - one
27098 ** of the following:
27100 ** (1) SHARED_LOCK
27101 ** (2) RESERVED_LOCK
27102 ** (3) PENDING_LOCK
27103 ** (4) EXCLUSIVE_LOCK
27105 ** Sometimes when requesting one lock state, additional lock states
27106 ** are inserted in between. The locking might fail on one of the later
27107 ** transitions leaving the lock state different from what it started but
27108 ** still short of its goal. The following chart shows the allowed
27109 ** transitions and the inserted intermediate states:
27111 ** UNLOCKED -> SHARED
27112 ** SHARED -> RESERVED
27113 ** SHARED -> (PENDING) -> EXCLUSIVE
27114 ** RESERVED -> (PENDING) -> EXCLUSIVE
27115 ** PENDING -> EXCLUSIVE
27117 ** flock() only really support EXCLUSIVE locks. We track intermediate
27118 ** lock states in the sqlite3_file structure, but all locks SHARED or
27119 ** above are really EXCLUSIVE locks and exclude all other processes from
27120 ** access the file.
27122 ** This routine will only increase a lock. Use the sqlite3OsUnlock()
27123 ** routine to lower a locking level.
27125 static int flockLock(sqlite3_file *id, int eFileLock) {
27126 int rc = SQLITE_OK;
27127 unixFile *pFile = (unixFile*)id;
27129 assert( pFile );
27131 /* if we already have a lock, it is exclusive.
27132 ** Just adjust level and punt on outta here. */
27133 if (pFile->eFileLock > NO_LOCK) {
27134 pFile->eFileLock = eFileLock;
27135 return SQLITE_OK;
27138 /* grab an exclusive lock */
27140 if (robust_flock(pFile->h, LOCK_EX | LOCK_NB)) {
27141 int tErrno = errno;
27142 /* didn't get, must be busy */
27143 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_LOCK);
27144 if( IS_LOCK_ERROR(rc) ){
27145 pFile->lastErrno = tErrno;
27147 } else {
27148 /* got it, set the type and return ok */
27149 pFile->eFileLock = eFileLock;
27151 OSTRACE(("LOCK %d %s %s (flock)\n", pFile->h, azFileLock(eFileLock),
27152 rc==SQLITE_OK ? "ok" : "failed"));
27153 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
27154 if( (rc & SQLITE_IOERR) == SQLITE_IOERR ){
27155 rc = SQLITE_BUSY;
27157 #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
27158 return rc;
27163 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
27164 ** must be either NO_LOCK or SHARED_LOCK.
27166 ** If the locking level of the file descriptor is already at or below
27167 ** the requested locking level, this routine is a no-op.
27169 static int flockUnlock(sqlite3_file *id, int eFileLock) {
27170 unixFile *pFile = (unixFile*)id;
27172 assert( pFile );
27173 OSTRACE(("UNLOCK %d %d was %d pid=%d (flock)\n", pFile->h, eFileLock,
27174 pFile->eFileLock, getpid()));
27175 assert( eFileLock<=SHARED_LOCK );
27177 /* no-op if possible */
27178 if( pFile->eFileLock==eFileLock ){
27179 return SQLITE_OK;
27182 /* shared can just be set because we always have an exclusive */
27183 if (eFileLock==SHARED_LOCK) {
27184 pFile->eFileLock = eFileLock;
27185 return SQLITE_OK;
27188 /* no, really, unlock. */
27189 if( robust_flock(pFile->h, LOCK_UN) ){
27190 #ifdef SQLITE_IGNORE_FLOCK_LOCK_ERRORS
27191 return SQLITE_OK;
27192 #endif /* SQLITE_IGNORE_FLOCK_LOCK_ERRORS */
27193 return SQLITE_IOERR_UNLOCK;
27194 }else{
27195 pFile->eFileLock = NO_LOCK;
27196 return SQLITE_OK;
27201 ** Close a file.
27203 static int flockClose(sqlite3_file *id) {
27204 if( id ){
27205 flockUnlock(id, NO_LOCK);
27207 return closeUnixFile(id);
27210 #endif /* SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORK */
27212 /******************* End of the flock lock implementation *********************
27213 ******************************************************************************/
27215 /******************************************************************************
27216 ************************ Begin Named Semaphore Locking ************************
27218 ** Named semaphore locking is only supported on VxWorks.
27220 ** Semaphore locking is like dot-lock and flock in that it really only
27221 ** supports EXCLUSIVE locking. Only a single process can read or write
27222 ** the database file at a time. This reduces potential concurrency, but
27223 ** makes the lock implementation much easier.
27225 #if OS_VXWORKS
27228 ** This routine checks if there is a RESERVED lock held on the specified
27229 ** file by this or any other process. If such a lock is held, set *pResOut
27230 ** to a non-zero value otherwise *pResOut is set to zero. The return value
27231 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
27233 static int semCheckReservedLock(sqlite3_file *id, int *pResOut) {
27234 int rc = SQLITE_OK;
27235 int reserved = 0;
27236 unixFile *pFile = (unixFile*)id;
27238 SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
27240 assert( pFile );
27242 /* Check if a thread in this process holds such a lock */
27243 if( pFile->eFileLock>SHARED_LOCK ){
27244 reserved = 1;
27247 /* Otherwise see if some other process holds it. */
27248 if( !reserved ){
27249 sem_t *pSem = pFile->pInode->pSem;
27250 struct stat statBuf;
27252 if( sem_trywait(pSem)==-1 ){
27253 int tErrno = errno;
27254 if( EAGAIN != tErrno ){
27255 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK);
27256 pFile->lastErrno = tErrno;
27257 } else {
27258 /* someone else has the lock when we are in NO_LOCK */
27259 reserved = (pFile->eFileLock < SHARED_LOCK);
27261 }else{
27262 /* we could have it if we want it */
27263 sem_post(pSem);
27266 OSTRACE(("TEST WR-LOCK %d %d %d (sem)\n", pFile->h, rc, reserved));
27268 *pResOut = reserved;
27269 return rc;
27273 ** Lock the file with the lock specified by parameter eFileLock - one
27274 ** of the following:
27276 ** (1) SHARED_LOCK
27277 ** (2) RESERVED_LOCK
27278 ** (3) PENDING_LOCK
27279 ** (4) EXCLUSIVE_LOCK
27281 ** Sometimes when requesting one lock state, additional lock states
27282 ** are inserted in between. The locking might fail on one of the later
27283 ** transitions leaving the lock state different from what it started but
27284 ** still short of its goal. The following chart shows the allowed
27285 ** transitions and the inserted intermediate states:
27287 ** UNLOCKED -> SHARED
27288 ** SHARED -> RESERVED
27289 ** SHARED -> (PENDING) -> EXCLUSIVE
27290 ** RESERVED -> (PENDING) -> EXCLUSIVE
27291 ** PENDING -> EXCLUSIVE
27293 ** Semaphore locks only really support EXCLUSIVE locks. We track intermediate
27294 ** lock states in the sqlite3_file structure, but all locks SHARED or
27295 ** above are really EXCLUSIVE locks and exclude all other processes from
27296 ** access the file.
27298 ** This routine will only increase a lock. Use the sqlite3OsUnlock()
27299 ** routine to lower a locking level.
27301 static int semLock(sqlite3_file *id, int eFileLock) {
27302 unixFile *pFile = (unixFile*)id;
27303 int fd;
27304 sem_t *pSem = pFile->pInode->pSem;
27305 int rc = SQLITE_OK;
27307 /* if we already have a lock, it is exclusive.
27308 ** Just adjust level and punt on outta here. */
27309 if (pFile->eFileLock > NO_LOCK) {
27310 pFile->eFileLock = eFileLock;
27311 rc = SQLITE_OK;
27312 goto sem_end_lock;
27315 /* lock semaphore now but bail out when already locked. */
27316 if( sem_trywait(pSem)==-1 ){
27317 rc = SQLITE_BUSY;
27318 goto sem_end_lock;
27321 /* got it, set the type and return ok */
27322 pFile->eFileLock = eFileLock;
27324 sem_end_lock:
27325 return rc;
27329 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
27330 ** must be either NO_LOCK or SHARED_LOCK.
27332 ** If the locking level of the file descriptor is already at or below
27333 ** the requested locking level, this routine is a no-op.
27335 static int semUnlock(sqlite3_file *id, int eFileLock) {
27336 unixFile *pFile = (unixFile*)id;
27337 sem_t *pSem = pFile->pInode->pSem;
27339 assert( pFile );
27340 assert( pSem );
27341 OSTRACE(("UNLOCK %d %d was %d pid=%d (sem)\n", pFile->h, eFileLock,
27342 pFile->eFileLock, getpid()));
27343 assert( eFileLock<=SHARED_LOCK );
27345 /* no-op if possible */
27346 if( pFile->eFileLock==eFileLock ){
27347 return SQLITE_OK;
27350 /* shared can just be set because we always have an exclusive */
27351 if (eFileLock==SHARED_LOCK) {
27352 pFile->eFileLock = eFileLock;
27353 return SQLITE_OK;
27356 /* no, really unlock. */
27357 if ( sem_post(pSem)==-1 ) {
27358 int rc, tErrno = errno;
27359 rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_UNLOCK);
27360 if( IS_LOCK_ERROR(rc) ){
27361 pFile->lastErrno = tErrno;
27363 return rc;
27365 pFile->eFileLock = NO_LOCK;
27366 return SQLITE_OK;
27370 ** Close a file.
27372 static int semClose(sqlite3_file *id) {
27373 if( id ){
27374 unixFile *pFile = (unixFile*)id;
27375 semUnlock(id, NO_LOCK);
27376 assert( pFile );
27377 unixEnterMutex();
27378 releaseInodeInfo(pFile);
27379 unixLeaveMutex();
27380 closeUnixFile(id);
27382 return SQLITE_OK;
27385 #endif /* OS_VXWORKS */
27387 ** Named semaphore locking is only available on VxWorks.
27389 *************** End of the named semaphore lock implementation ****************
27390 ******************************************************************************/
27393 /******************************************************************************
27394 *************************** Begin AFP Locking *********************************
27396 ** AFP is the Apple Filing Protocol. AFP is a network filesystem found
27397 ** on Apple Macintosh computers - both OS9 and OSX.
27399 ** Third-party implementations of AFP are available. But this code here
27400 ** only works on OSX.
27403 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
27405 ** The afpLockingContext structure contains all afp lock specific state
27407 typedef struct afpLockingContext afpLockingContext;
27408 struct afpLockingContext {
27409 int reserved;
27410 const char *dbPath; /* Name of the open file */
27413 struct ByteRangeLockPB2
27415 unsigned long long offset; /* offset to first byte to lock */
27416 unsigned long long length; /* nbr of bytes to lock */
27417 unsigned long long retRangeStart; /* nbr of 1st byte locked if successful */
27418 unsigned char unLockFlag; /* 1 = unlock, 0 = lock */
27419 unsigned char startEndFlag; /* 1=rel to end of fork, 0=rel to start */
27420 int fd; /* file desc to assoc this lock with */
27423 #define afpfsByteRangeLock2FSCTL _IOWR('z', 23, struct ByteRangeLockPB2)
27426 ** This is a utility for setting or clearing a bit-range lock on an
27427 ** AFP filesystem.
27429 ** Return SQLITE_OK on success, SQLITE_BUSY on failure.
27431 static int afpSetLock(
27432 const char *path, /* Name of the file to be locked or unlocked */
27433 unixFile *pFile, /* Open file descriptor on path */
27434 unsigned long long offset, /* First byte to be locked */
27435 unsigned long long length, /* Number of bytes to lock */
27436 int setLockFlag /* True to set lock. False to clear lock */
27438 struct ByteRangeLockPB2 pb;
27439 int err;
27441 pb.unLockFlag = setLockFlag ? 0 : 1;
27442 pb.startEndFlag = 0;
27443 pb.offset = offset;
27444 pb.length = length;
27445 pb.fd = pFile->h;
27447 OSTRACE(("AFPSETLOCK [%s] for %d%s in range %llx:%llx\n",
27448 (setLockFlag?"ON":"OFF"), pFile->h, (pb.fd==-1?"[testval-1]":""),
27449 offset, length));
27450 err = fsctl(path, afpfsByteRangeLock2FSCTL, &pb, 0);
27451 if ( err==-1 ) {
27452 int rc;
27453 int tErrno = errno;
27454 OSTRACE(("AFPSETLOCK failed to fsctl() '%s' %d %s\n",
27455 path, tErrno, strerror(tErrno)));
27456 #ifdef SQLITE_IGNORE_AFP_LOCK_ERRORS
27457 rc = SQLITE_BUSY;
27458 #else
27459 rc = sqliteErrorFromPosixError(tErrno,
27460 setLockFlag ? SQLITE_IOERR_LOCK : SQLITE_IOERR_UNLOCK);
27461 #endif /* SQLITE_IGNORE_AFP_LOCK_ERRORS */
27462 if( IS_LOCK_ERROR(rc) ){
27463 pFile->lastErrno = tErrno;
27465 return rc;
27466 } else {
27467 return SQLITE_OK;
27472 ** This routine checks if there is a RESERVED lock held on the specified
27473 ** file by this or any other process. If such a lock is held, set *pResOut
27474 ** to a non-zero value otherwise *pResOut is set to zero. The return value
27475 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
27477 static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){
27478 int rc = SQLITE_OK;
27479 int reserved = 0;
27480 unixFile *pFile = (unixFile*)id;
27481 afpLockingContext *context;
27483 SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
27485 assert( pFile );
27486 context = (afpLockingContext *) pFile->lockingContext;
27487 if( context->reserved ){
27488 *pResOut = 1;
27489 return SQLITE_OK;
27491 unixEnterMutex(); /* Because pFile->pInode is shared across threads */
27493 /* Check if a thread in this process holds such a lock */
27494 if( pFile->pInode->eFileLock>SHARED_LOCK ){
27495 reserved = 1;
27498 /* Otherwise see if some other process holds it.
27500 if( !reserved ){
27501 /* lock the RESERVED byte */
27502 int lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);
27503 if( SQLITE_OK==lrc ){
27504 /* if we succeeded in taking the reserved lock, unlock it to restore
27505 ** the original state */
27506 lrc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
27507 } else {
27508 /* if we failed to get the lock then someone else must have it */
27509 reserved = 1;
27511 if( IS_LOCK_ERROR(lrc) ){
27512 rc=lrc;
27516 unixLeaveMutex();
27517 OSTRACE(("TEST WR-LOCK %d %d %d (afp)\n", pFile->h, rc, reserved));
27519 *pResOut = reserved;
27520 return rc;
27524 ** Lock the file with the lock specified by parameter eFileLock - one
27525 ** of the following:
27527 ** (1) SHARED_LOCK
27528 ** (2) RESERVED_LOCK
27529 ** (3) PENDING_LOCK
27530 ** (4) EXCLUSIVE_LOCK
27532 ** Sometimes when requesting one lock state, additional lock states
27533 ** are inserted in between. The locking might fail on one of the later
27534 ** transitions leaving the lock state different from what it started but
27535 ** still short of its goal. The following chart shows the allowed
27536 ** transitions and the inserted intermediate states:
27538 ** UNLOCKED -> SHARED
27539 ** SHARED -> RESERVED
27540 ** SHARED -> (PENDING) -> EXCLUSIVE
27541 ** RESERVED -> (PENDING) -> EXCLUSIVE
27542 ** PENDING -> EXCLUSIVE
27544 ** This routine will only increase a lock. Use the sqlite3OsUnlock()
27545 ** routine to lower a locking level.
27547 static int afpLock(sqlite3_file *id, int eFileLock){
27548 int rc = SQLITE_OK;
27549 unixFile *pFile = (unixFile*)id;
27550 unixInodeInfo *pInode = pFile->pInode;
27551 afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
27553 assert( pFile );
27554 OSTRACE(("LOCK %d %s was %s(%s,%d) pid=%d (afp)\n", pFile->h,
27555 azFileLock(eFileLock), azFileLock(pFile->eFileLock),
27556 azFileLock(pInode->eFileLock), pInode->nShared , getpid()));
27558 /* If there is already a lock of this type or more restrictive on the
27559 ** unixFile, do nothing. Don't use the afp_end_lock: exit path, as
27560 ** unixEnterMutex() hasn't been called yet.
27562 if( pFile->eFileLock>=eFileLock ){
27563 OSTRACE(("LOCK %d %s ok (already held) (afp)\n", pFile->h,
27564 azFileLock(eFileLock)));
27565 return SQLITE_OK;
27568 /* Make sure the locking sequence is correct
27569 ** (1) We never move from unlocked to anything higher than shared lock.
27570 ** (2) SQLite never explicitly requests a pendig lock.
27571 ** (3) A shared lock is always held when a reserve lock is requested.
27573 assert( pFile->eFileLock!=NO_LOCK || eFileLock==SHARED_LOCK );
27574 assert( eFileLock!=PENDING_LOCK );
27575 assert( eFileLock!=RESERVED_LOCK || pFile->eFileLock==SHARED_LOCK );
27577 /* This mutex is needed because pFile->pInode is shared across threads
27579 unixEnterMutex();
27580 pInode = pFile->pInode;
27582 /* If some thread using this PID has a lock via a different unixFile*
27583 ** handle that precludes the requested lock, return BUSY.
27585 if( (pFile->eFileLock!=pInode->eFileLock &&
27586 (pInode->eFileLock>=PENDING_LOCK || eFileLock>SHARED_LOCK))
27588 rc = SQLITE_BUSY;
27589 goto afp_end_lock;
27592 /* If a SHARED lock is requested, and some thread using this PID already
27593 ** has a SHARED or RESERVED lock, then increment reference counts and
27594 ** return SQLITE_OK.
27596 if( eFileLock==SHARED_LOCK &&
27597 (pInode->eFileLock==SHARED_LOCK || pInode->eFileLock==RESERVED_LOCK) ){
27598 assert( eFileLock==SHARED_LOCK );
27599 assert( pFile->eFileLock==0 );
27600 assert( pInode->nShared>0 );
27601 pFile->eFileLock = SHARED_LOCK;
27602 pInode->nShared++;
27603 pInode->nLock++;
27604 goto afp_end_lock;
27607 /* A PENDING lock is needed before acquiring a SHARED lock and before
27608 ** acquiring an EXCLUSIVE lock. For the SHARED lock, the PENDING will
27609 ** be released.
27611 if( eFileLock==SHARED_LOCK
27612 || (eFileLock==EXCLUSIVE_LOCK && pFile->eFileLock<PENDING_LOCK)
27614 int failed;
27615 failed = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 1);
27616 if (failed) {
27617 rc = failed;
27618 goto afp_end_lock;
27622 /* If control gets to this point, then actually go ahead and make
27623 ** operating system calls for the specified lock.
27625 if( eFileLock==SHARED_LOCK ){
27626 int lrc1, lrc2, lrc1Errno = 0;
27627 long lk, mask;
27629 assert( pInode->nShared==0 );
27630 assert( pInode->eFileLock==0 );
27632 mask = (sizeof(long)==8) ? LARGEST_INT64 : 0x7fffffff;
27633 /* Now get the read-lock SHARED_LOCK */
27634 /* note that the quality of the randomness doesn't matter that much */
27635 lk = random();
27636 pInode->sharedByte = (lk & mask)%(SHARED_SIZE - 1);
27637 lrc1 = afpSetLock(context->dbPath, pFile,
27638 SHARED_FIRST+pInode->sharedByte, 1, 1);
27639 if( IS_LOCK_ERROR(lrc1) ){
27640 lrc1Errno = pFile->lastErrno;
27642 /* Drop the temporary PENDING lock */
27643 lrc2 = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
27645 if( IS_LOCK_ERROR(lrc1) ) {
27646 pFile->lastErrno = lrc1Errno;
27647 rc = lrc1;
27648 goto afp_end_lock;
27649 } else if( IS_LOCK_ERROR(lrc2) ){
27650 rc = lrc2;
27651 goto afp_end_lock;
27652 } else if( lrc1 != SQLITE_OK ) {
27653 rc = lrc1;
27654 } else {
27655 pFile->eFileLock = SHARED_LOCK;
27656 pInode->nLock++;
27657 pInode->nShared = 1;
27659 }else if( eFileLock==EXCLUSIVE_LOCK && pInode->nShared>1 ){
27660 /* We are trying for an exclusive lock but another thread in this
27661 ** same process is still holding a shared lock. */
27662 rc = SQLITE_BUSY;
27663 }else{
27664 /* The request was for a RESERVED or EXCLUSIVE lock. It is
27665 ** assumed that there is a SHARED or greater lock on the file
27666 ** already.
27668 int failed = 0;
27669 assert( 0!=pFile->eFileLock );
27670 if (eFileLock >= RESERVED_LOCK && pFile->eFileLock < RESERVED_LOCK) {
27671 /* Acquire a RESERVED lock */
27672 failed = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1,1);
27673 if( !failed ){
27674 context->reserved = 1;
27677 if (!failed && eFileLock == EXCLUSIVE_LOCK) {
27678 /* Acquire an EXCLUSIVE lock */
27680 /* Remove the shared lock before trying the range. we'll need to
27681 ** reestablish the shared lock if we can't get the afpUnlock
27683 if( !(failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST +
27684 pInode->sharedByte, 1, 0)) ){
27685 int failed2 = SQLITE_OK;
27686 /* now attemmpt to get the exclusive lock range */
27687 failed = afpSetLock(context->dbPath, pFile, SHARED_FIRST,
27688 SHARED_SIZE, 1);
27689 if( failed && (failed2 = afpSetLock(context->dbPath, pFile,
27690 SHARED_FIRST + pInode->sharedByte, 1, 1)) ){
27691 /* Can't reestablish the shared lock. Sqlite can't deal, this is
27692 ** a critical I/O error
27694 rc = ((failed & SQLITE_IOERR) == SQLITE_IOERR) ? failed2 :
27695 SQLITE_IOERR_LOCK;
27696 goto afp_end_lock;
27698 }else{
27699 rc = failed;
27702 if( failed ){
27703 rc = failed;
27707 if( rc==SQLITE_OK ){
27708 pFile->eFileLock = eFileLock;
27709 pInode->eFileLock = eFileLock;
27710 }else if( eFileLock==EXCLUSIVE_LOCK ){
27711 pFile->eFileLock = PENDING_LOCK;
27712 pInode->eFileLock = PENDING_LOCK;
27715 afp_end_lock:
27716 unixLeaveMutex();
27717 OSTRACE(("LOCK %d %s %s (afp)\n", pFile->h, azFileLock(eFileLock),
27718 rc==SQLITE_OK ? "ok" : "failed"));
27719 return rc;
27723 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
27724 ** must be either NO_LOCK or SHARED_LOCK.
27726 ** If the locking level of the file descriptor is already at or below
27727 ** the requested locking level, this routine is a no-op.
27729 static int afpUnlock(sqlite3_file *id, int eFileLock) {
27730 int rc = SQLITE_OK;
27731 unixFile *pFile = (unixFile*)id;
27732 unixInodeInfo *pInode;
27733 afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
27734 int skipShared = 0;
27735 #ifdef SQLITE_TEST
27736 int h = pFile->h;
27737 #endif
27739 assert( pFile );
27740 OSTRACE(("UNLOCK %d %d was %d(%d,%d) pid=%d (afp)\n", pFile->h, eFileLock,
27741 pFile->eFileLock, pFile->pInode->eFileLock, pFile->pInode->nShared,
27742 getpid()));
27744 assert( eFileLock<=SHARED_LOCK );
27745 if( pFile->eFileLock<=eFileLock ){
27746 return SQLITE_OK;
27748 unixEnterMutex();
27749 pInode = pFile->pInode;
27750 assert( pInode->nShared!=0 );
27751 if( pFile->eFileLock>SHARED_LOCK ){
27752 assert( pInode->eFileLock==pFile->eFileLock );
27753 SimulateIOErrorBenign(1);
27754 SimulateIOError( h=(-1) )
27755 SimulateIOErrorBenign(0);
27757 #ifndef NDEBUG
27758 /* When reducing a lock such that other processes can start
27759 ** reading the database file again, make sure that the
27760 ** transaction counter was updated if any part of the database
27761 ** file changed. If the transaction counter is not updated,
27762 ** other connections to the same file might not realize that
27763 ** the file has changed and hence might not know to flush their
27764 ** cache. The use of a stale cache can lead to database corruption.
27766 assert( pFile->inNormalWrite==0
27767 || pFile->dbUpdate==0
27768 || pFile->transCntrChng==1 );
27769 pFile->inNormalWrite = 0;
27770 #endif
27772 if( pFile->eFileLock==EXCLUSIVE_LOCK ){
27773 rc = afpSetLock(context->dbPath, pFile, SHARED_FIRST, SHARED_SIZE, 0);
27774 if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1) ){
27775 /* only re-establish the shared lock if necessary */
27776 int sharedLockByte = SHARED_FIRST+pInode->sharedByte;
27777 rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 1);
27778 } else {
27779 skipShared = 1;
27782 if( rc==SQLITE_OK && pFile->eFileLock>=PENDING_LOCK ){
27783 rc = afpSetLock(context->dbPath, pFile, PENDING_BYTE, 1, 0);
27785 if( rc==SQLITE_OK && pFile->eFileLock>=RESERVED_LOCK && context->reserved ){
27786 rc = afpSetLock(context->dbPath, pFile, RESERVED_BYTE, 1, 0);
27787 if( !rc ){
27788 context->reserved = 0;
27791 if( rc==SQLITE_OK && (eFileLock==SHARED_LOCK || pInode->nShared>1)){
27792 pInode->eFileLock = SHARED_LOCK;
27795 if( rc==SQLITE_OK && eFileLock==NO_LOCK ){
27797 /* Decrement the shared lock counter. Release the lock using an
27798 ** OS call only when all threads in this same process have released
27799 ** the lock.
27801 unsigned long long sharedLockByte = SHARED_FIRST+pInode->sharedByte;
27802 pInode->nShared--;
27803 if( pInode->nShared==0 ){
27804 SimulateIOErrorBenign(1);
27805 SimulateIOError( h=(-1) )
27806 SimulateIOErrorBenign(0);
27807 if( !skipShared ){
27808 rc = afpSetLock(context->dbPath, pFile, sharedLockByte, 1, 0);
27810 if( !rc ){
27811 pInode->eFileLock = NO_LOCK;
27812 pFile->eFileLock = NO_LOCK;
27815 if( rc==SQLITE_OK ){
27816 pInode->nLock--;
27817 assert( pInode->nLock>=0 );
27818 if( pInode->nLock==0 ){
27819 closePendingFds(pFile);
27824 unixLeaveMutex();
27825 if( rc==SQLITE_OK ) pFile->eFileLock = eFileLock;
27826 return rc;
27830 ** Close a file & cleanup AFP specific locking context
27832 static int afpClose(sqlite3_file *id) {
27833 int rc = SQLITE_OK;
27834 if( id ){
27835 unixFile *pFile = (unixFile*)id;
27836 afpUnlock(id, NO_LOCK);
27837 unixEnterMutex();
27838 if( pFile->pInode && pFile->pInode->nLock ){
27839 /* If there are outstanding locks, do not actually close the file just
27840 ** yet because that would clear those locks. Instead, add the file
27841 ** descriptor to pInode->aPending. It will be automatically closed when
27842 ** the last lock is cleared.
27844 setPendingFd(pFile);
27846 releaseInodeInfo(pFile);
27847 sqlite3_free(pFile->lockingContext);
27848 rc = closeUnixFile(id);
27849 unixLeaveMutex();
27851 return rc;
27854 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
27856 ** The code above is the AFP lock implementation. The code is specific
27857 ** to MacOSX and does not work on other unix platforms. No alternative
27858 ** is available. If you don't compile for a mac, then the "unix-afp"
27859 ** VFS is not available.
27861 ********************* End of the AFP lock implementation **********************
27862 ******************************************************************************/
27864 /******************************************************************************
27865 *************************** Begin NFS Locking ********************************/
27867 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
27869 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
27870 ** must be either NO_LOCK or SHARED_LOCK.
27872 ** If the locking level of the file descriptor is already at or below
27873 ** the requested locking level, this routine is a no-op.
27875 static int nfsUnlock(sqlite3_file *id, int eFileLock){
27876 return posixUnlock(id, eFileLock, 1);
27879 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
27881 ** The code above is the NFS lock implementation. The code is specific
27882 ** to MacOSX and does not work on other unix platforms. No alternative
27883 ** is available.
27885 ********************* End of the NFS lock implementation **********************
27886 ******************************************************************************/
27888 /******************************************************************************
27889 **************** Non-locking sqlite3_file methods *****************************
27891 ** The next division contains implementations for all methods of the
27892 ** sqlite3_file object other than the locking methods. The locking
27893 ** methods were defined in divisions above (one locking method per
27894 ** division). Those methods that are common to all locking modes
27895 ** are gather together into this division.
27899 ** Seek to the offset passed as the second argument, then read cnt
27900 ** bytes into pBuf. Return the number of bytes actually read.
27902 ** NB: If you define USE_PREAD or USE_PREAD64, then it might also
27903 ** be necessary to define _XOPEN_SOURCE to be 500. This varies from
27904 ** one system to another. Since SQLite does not define USE_PREAD
27905 ** any any form by default, we will not attempt to define _XOPEN_SOURCE.
27906 ** See tickets #2741 and #2681.
27908 ** To avoid stomping the errno value on a failed read the lastErrno value
27909 ** is set before returning.
27911 static int seekAndRead(unixFile *id, sqlite3_int64 offset, void *pBuf, int cnt){
27912 int got;
27913 int prior = 0;
27914 #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
27915 i64 newOffset;
27916 #endif
27917 TIMER_START;
27919 #if defined(USE_PREAD)
27920 got = osPread(id->h, pBuf, cnt, offset);
27921 SimulateIOError( got = -1 );
27922 #elif defined(USE_PREAD64)
27923 got = osPread64(id->h, pBuf, cnt, offset);
27924 SimulateIOError( got = -1 );
27925 #else
27926 newOffset = lseek(id->h, offset, SEEK_SET);
27927 SimulateIOError( newOffset-- );
27928 if( newOffset!=offset ){
27929 if( newOffset == -1 ){
27930 ((unixFile*)id)->lastErrno = errno;
27931 }else{
27932 ((unixFile*)id)->lastErrno = 0;
27934 return -1;
27936 got = osRead(id->h, pBuf, cnt);
27937 #endif
27938 if( got==cnt ) break;
27939 if( got<0 ){
27940 if( errno==EINTR ){ got = 1; continue; }
27941 prior = 0;
27942 ((unixFile*)id)->lastErrno = errno;
27943 break;
27944 }else if( got>0 ){
27945 cnt -= got;
27946 offset += got;
27947 prior += got;
27948 pBuf = (void*)(got + (char*)pBuf);
27950 }while( got>0 );
27951 TIMER_END;
27952 OSTRACE(("READ %-3d %5d %7lld %llu\n",
27953 id->h, got+prior, offset-prior, TIMER_ELAPSED));
27954 return got+prior;
27958 ** Read data from a file into a buffer. Return SQLITE_OK if all
27959 ** bytes were read successfully and SQLITE_IOERR if anything goes
27960 ** wrong.
27962 static int unixRead(
27963 sqlite3_file *id,
27964 void *pBuf,
27965 int amt,
27966 sqlite3_int64 offset
27968 unixFile *pFile = (unixFile *)id;
27969 int got;
27970 assert( id );
27972 /* If this is a database file (not a journal, master-journal or temp
27973 ** file), the bytes in the locking range should never be read or written. */
27974 #if 0
27975 assert( pFile->pUnused==0
27976 || offset>=PENDING_BYTE+512
27977 || offset+amt<=PENDING_BYTE
27979 #endif
27981 got = seekAndRead(pFile, offset, pBuf, amt);
27982 if( got==amt ){
27983 return SQLITE_OK;
27984 }else if( got<0 ){
27985 /* lastErrno set by seekAndRead */
27986 return SQLITE_IOERR_READ;
27987 }else{
27988 pFile->lastErrno = 0; /* not a system error */
27989 /* Unread parts of the buffer must be zero-filled */
27990 memset(&((char*)pBuf)[got], 0, amt-got);
27991 return SQLITE_IOERR_SHORT_READ;
27996 ** Seek to the offset in id->offset then read cnt bytes into pBuf.
27997 ** Return the number of bytes actually read. Update the offset.
27999 ** To avoid stomping the errno value on a failed write the lastErrno value
28000 ** is set before returning.
28002 static int seekAndWrite(unixFile *id, i64 offset, const void *pBuf, int cnt){
28003 int got;
28004 #if (!defined(USE_PREAD) && !defined(USE_PREAD64))
28005 i64 newOffset;
28006 #endif
28007 TIMER_START;
28008 #if defined(USE_PREAD)
28009 do{ got = osPwrite(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR );
28010 #elif defined(USE_PREAD64)
28011 do{ got = osPwrite64(id->h, pBuf, cnt, offset);}while( got<0 && errno==EINTR);
28012 #else
28014 newOffset = lseek(id->h, offset, SEEK_SET);
28015 SimulateIOError( newOffset-- );
28016 if( newOffset!=offset ){
28017 if( newOffset == -1 ){
28018 ((unixFile*)id)->lastErrno = errno;
28019 }else{
28020 ((unixFile*)id)->lastErrno = 0;
28022 return -1;
28024 got = osWrite(id->h, pBuf, cnt);
28025 }while( got<0 && errno==EINTR );
28026 #endif
28027 TIMER_END;
28028 if( got<0 ){
28029 ((unixFile*)id)->lastErrno = errno;
28032 OSTRACE(("WRITE %-3d %5d %7lld %llu\n", id->h, got, offset, TIMER_ELAPSED));
28033 return got;
28038 ** Write data from a buffer into a file. Return SQLITE_OK on success
28039 ** or some other error code on failure.
28041 static int unixWrite(
28042 sqlite3_file *id,
28043 const void *pBuf,
28044 int amt,
28045 sqlite3_int64 offset
28047 unixFile *pFile = (unixFile*)id;
28048 int wrote = 0;
28049 assert( id );
28050 assert( amt>0 );
28052 /* If this is a database file (not a journal, master-journal or temp
28053 ** file), the bytes in the locking range should never be read or written. */
28054 #if 0
28055 assert( pFile->pUnused==0
28056 || offset>=PENDING_BYTE+512
28057 || offset+amt<=PENDING_BYTE
28059 #endif
28061 #ifndef NDEBUG
28062 /* If we are doing a normal write to a database file (as opposed to
28063 ** doing a hot-journal rollback or a write to some file other than a
28064 ** normal database file) then record the fact that the database
28065 ** has changed. If the transaction counter is modified, record that
28066 ** fact too.
28068 if( pFile->inNormalWrite ){
28069 pFile->dbUpdate = 1; /* The database has been modified */
28070 if( offset<=24 && offset+amt>=27 ){
28071 int rc;
28072 char oldCntr[4];
28073 SimulateIOErrorBenign(1);
28074 rc = seekAndRead(pFile, 24, oldCntr, 4);
28075 SimulateIOErrorBenign(0);
28076 if( rc!=4 || memcmp(oldCntr, &((char*)pBuf)[24-offset], 4)!=0 ){
28077 pFile->transCntrChng = 1; /* The transaction counter has changed */
28081 #endif
28083 while( amt>0 && (wrote = seekAndWrite(pFile, offset, pBuf, amt))>0 ){
28084 amt -= wrote;
28085 offset += wrote;
28086 pBuf = &((char*)pBuf)[wrote];
28088 SimulateIOError(( wrote=(-1), amt=1 ));
28089 SimulateDiskfullError(( wrote=0, amt=1 ));
28091 if( amt>0 ){
28092 if( wrote<0 && pFile->lastErrno!=ENOSPC ){
28093 /* lastErrno set by seekAndWrite */
28094 return SQLITE_IOERR_WRITE;
28095 }else{
28096 pFile->lastErrno = 0; /* not a system error */
28097 return SQLITE_FULL;
28101 return SQLITE_OK;
28104 #ifdef SQLITE_TEST
28106 ** Count the number of fullsyncs and normal syncs. This is used to test
28107 ** that syncs and fullsyncs are occurring at the right times.
28109 SQLITE_API int sqlite3_sync_count = 0;
28110 SQLITE_API int sqlite3_fullsync_count = 0;
28111 #endif
28114 ** We do not trust systems to provide a working fdatasync(). Some do.
28115 ** Others do no. To be safe, we will stick with the (slightly slower)
28116 ** fsync(). If you know that your system does support fdatasync() correctly,
28117 ** then simply compile with -Dfdatasync=fdatasync
28119 #if !defined(fdatasync)
28120 # define fdatasync fsync
28121 #endif
28124 ** Define HAVE_FULLFSYNC to 0 or 1 depending on whether or not
28125 ** the F_FULLFSYNC macro is defined. F_FULLFSYNC is currently
28126 ** only available on Mac OS X. But that could change.
28128 #ifdef F_FULLFSYNC
28129 # define HAVE_FULLFSYNC 1
28130 #else
28131 # define HAVE_FULLFSYNC 0
28132 #endif
28136 ** The fsync() system call does not work as advertised on many
28137 ** unix systems. The following procedure is an attempt to make
28138 ** it work better.
28140 ** The SQLITE_NO_SYNC macro disables all fsync()s. This is useful
28141 ** for testing when we want to run through the test suite quickly.
28142 ** You are strongly advised *not* to deploy with SQLITE_NO_SYNC
28143 ** enabled, however, since with SQLITE_NO_SYNC enabled, an OS crash
28144 ** or power failure will likely corrupt the database file.
28146 ** SQLite sets the dataOnly flag if the size of the file is unchanged.
28147 ** The idea behind dataOnly is that it should only write the file content
28148 ** to disk, not the inode. We only set dataOnly if the file size is
28149 ** unchanged since the file size is part of the inode. However,
28150 ** Ted Ts'o tells us that fdatasync() will also write the inode if the
28151 ** file size has changed. The only real difference between fdatasync()
28152 ** and fsync(), Ted tells us, is that fdatasync() will not flush the
28153 ** inode if the mtime or owner or other inode attributes have changed.
28154 ** We only care about the file size, not the other file attributes, so
28155 ** as far as SQLite is concerned, an fdatasync() is always adequate.
28156 ** So, we always use fdatasync() if it is available, regardless of
28157 ** the value of the dataOnly flag.
28159 static int full_fsync(int fd, int fullSync, int dataOnly){
28160 int rc;
28162 /* The following "ifdef/elif/else/" block has the same structure as
28163 ** the one below. It is replicated here solely to avoid cluttering
28164 ** up the real code with the UNUSED_PARAMETER() macros.
28166 #ifdef SQLITE_NO_SYNC
28167 UNUSED_PARAMETER(fd);
28168 UNUSED_PARAMETER(fullSync);
28169 UNUSED_PARAMETER(dataOnly);
28170 #elif HAVE_FULLFSYNC
28171 UNUSED_PARAMETER(dataOnly);
28172 #else
28173 UNUSED_PARAMETER(fullSync);
28174 UNUSED_PARAMETER(dataOnly);
28175 #endif
28177 /* Record the number of times that we do a normal fsync() and
28178 ** FULLSYNC. This is used during testing to verify that this procedure
28179 ** gets called with the correct arguments.
28181 #ifdef SQLITE_TEST
28182 if( fullSync ) sqlite3_fullsync_count++;
28183 sqlite3_sync_count++;
28184 #endif
28186 /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
28187 ** no-op
28189 #ifdef SQLITE_NO_SYNC
28190 rc = SQLITE_OK;
28191 #elif HAVE_FULLFSYNC
28192 if( fullSync ){
28193 rc = osFcntl(fd, F_FULLFSYNC, 0);
28194 }else{
28195 rc = 1;
28197 /* If the FULLFSYNC failed, fall back to attempting an fsync().
28198 ** It shouldn't be possible for fullfsync to fail on the local
28199 ** file system (on OSX), so failure indicates that FULLFSYNC
28200 ** isn't supported for this file system. So, attempt an fsync
28201 ** and (for now) ignore the overhead of a superfluous fcntl call.
28202 ** It'd be better to detect fullfsync support once and avoid
28203 ** the fcntl call every time sync is called.
28205 if( rc ) rc = fsync(fd);
28207 #elif defined(__APPLE__)
28208 /* fdatasync() on HFS+ doesn't yet flush the file size if it changed correctly
28209 ** so currently we default to the macro that redefines fdatasync to fsync
28211 rc = fsync(fd);
28212 #else
28213 rc = fdatasync(fd);
28214 #if OS_VXWORKS
28215 if( rc==-1 && errno==ENOTSUP ){
28216 rc = fsync(fd);
28218 #endif /* OS_VXWORKS */
28219 #endif /* ifdef SQLITE_NO_SYNC elif HAVE_FULLFSYNC */
28221 if( OS_VXWORKS && rc!= -1 ){
28222 rc = 0;
28224 return rc;
28228 ** Open a file descriptor to the directory containing file zFilename.
28229 ** If successful, *pFd is set to the opened file descriptor and
28230 ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
28231 ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
28232 ** value.
28234 ** The directory file descriptor is used for only one thing - to
28235 ** fsync() a directory to make sure file creation and deletion events
28236 ** are flushed to disk. Such fsyncs are not needed on newer
28237 ** journaling filesystems, but are required on older filesystems.
28239 ** This routine can be overridden using the xSetSysCall interface.
28240 ** The ability to override this routine was added in support of the
28241 ** chromium sandbox. Opening a directory is a security risk (we are
28242 ** told) so making it overrideable allows the chromium sandbox to
28243 ** replace this routine with a harmless no-op. To make this routine
28244 ** a no-op, replace it with a stub that returns SQLITE_OK but leaves
28245 ** *pFd set to a negative number.
28247 ** If SQLITE_OK is returned, the caller is responsible for closing
28248 ** the file descriptor *pFd using close().
28250 static int openDirectory(const char *zFilename, int *pFd){
28251 int ii;
28252 int fd = -1;
28253 char zDirname[MAX_PATHNAME+1];
28255 sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
28256 for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
28257 if( ii>0 ){
28258 zDirname[ii] = '\0';
28259 fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
28260 if( fd>=0 ){
28261 #ifdef FD_CLOEXEC
28262 osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
28263 #endif
28264 OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
28267 *pFd = fd;
28268 return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
28272 ** Make sure all writes to a particular file are committed to disk.
28274 ** If dataOnly==0 then both the file itself and its metadata (file
28275 ** size, access time, etc) are synced. If dataOnly!=0 then only the
28276 ** file data is synced.
28278 ** Under Unix, also make sure that the directory entry for the file
28279 ** has been created by fsync-ing the directory that contains the file.
28280 ** If we do not do this and we encounter a power failure, the directory
28281 ** entry for the journal might not exist after we reboot. The next
28282 ** SQLite to access the file will not know that the journal exists (because
28283 ** the directory entry for the journal was never created) and the transaction
28284 ** will not roll back - possibly leading to database corruption.
28286 static int unixSync(sqlite3_file *id, int flags){
28287 int rc;
28288 unixFile *pFile = (unixFile*)id;
28290 int isDataOnly = (flags&SQLITE_SYNC_DATAONLY);
28291 int isFullsync = (flags&0x0F)==SQLITE_SYNC_FULL;
28293 /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
28294 assert((flags&0x0F)==SQLITE_SYNC_NORMAL
28295 || (flags&0x0F)==SQLITE_SYNC_FULL
28298 /* Unix cannot, but some systems may return SQLITE_FULL from here. This
28299 ** line is to test that doing so does not cause any problems.
28301 SimulateDiskfullError( return SQLITE_FULL );
28303 assert( pFile );
28304 OSTRACE(("SYNC %-3d\n", pFile->h));
28305 rc = full_fsync(pFile->h, isFullsync, isDataOnly);
28306 SimulateIOError( rc=1 );
28307 if( rc ){
28308 pFile->lastErrno = errno;
28309 return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath);
28312 /* Also fsync the directory containing the file if the DIRSYNC flag
28313 ** is set. This is a one-time occurrance. Many systems (examples: AIX)
28314 ** are unable to fsync a directory, so ignore errors on the fsync.
28316 if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){
28317 int dirfd;
28318 OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath,
28319 HAVE_FULLFSYNC, isFullsync));
28320 rc = osOpenDirectory(pFile->zPath, &dirfd);
28321 if( rc==SQLITE_OK && dirfd>=0 ){
28322 full_fsync(dirfd, 0, 0);
28323 robust_close(pFile, dirfd, __LINE__);
28324 }else if( rc==SQLITE_CANTOPEN ){
28325 rc = SQLITE_OK;
28327 pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC;
28329 return rc;
28333 ** Truncate an open file to a specified size
28335 static int unixTruncate(sqlite3_file *id, i64 nByte){
28336 unixFile *pFile = (unixFile *)id;
28337 int rc;
28338 assert( pFile );
28339 SimulateIOError( return SQLITE_IOERR_TRUNCATE );
28341 /* If the user has configured a chunk-size for this file, truncate the
28342 ** file so that it consists of an integer number of chunks (i.e. the
28343 ** actual file size after the operation may be larger than the requested
28344 ** size).
28346 if( pFile->szChunk ){
28347 nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
28350 rc = robust_ftruncate(pFile->h, (off_t)nByte);
28351 if( rc ){
28352 pFile->lastErrno = errno;
28353 return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
28354 }else{
28355 #ifndef NDEBUG
28356 /* If we are doing a normal write to a database file (as opposed to
28357 ** doing a hot-journal rollback or a write to some file other than a
28358 ** normal database file) and we truncate the file to zero length,
28359 ** that effectively updates the change counter. This might happen
28360 ** when restoring a database using the backup API from a zero-length
28361 ** source.
28363 if( pFile->inNormalWrite && nByte==0 ){
28364 pFile->transCntrChng = 1;
28366 #endif
28368 return SQLITE_OK;
28373 ** Determine the current size of a file in bytes
28375 static int unixFileSize(sqlite3_file *id, i64 *pSize){
28376 int rc;
28377 struct stat buf;
28378 assert( id );
28379 rc = osFstat(((unixFile*)id)->h, &buf);
28380 SimulateIOError( rc=1 );
28381 if( rc!=0 ){
28382 ((unixFile*)id)->lastErrno = errno;
28383 return SQLITE_IOERR_FSTAT;
28385 *pSize = buf.st_size;
28387 /* When opening a zero-size database, the findInodeInfo() procedure
28388 ** writes a single byte into that file in order to work around a bug
28389 ** in the OS-X msdos filesystem. In order to avoid problems with upper
28390 ** layers, we need to report this file size as zero even though it is
28391 ** really 1. Ticket #3260.
28393 if( *pSize==1 ) *pSize = 0;
28396 return SQLITE_OK;
28399 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
28401 ** Handler for proxy-locking file-control verbs. Defined below in the
28402 ** proxying locking division.
28404 static int proxyFileControl(sqlite3_file*,int,void*);
28405 #endif
28408 ** This function is called to handle the SQLITE_FCNTL_SIZE_HINT
28409 ** file-control operation. Enlarge the database to nBytes in size
28410 ** (rounded up to the next chunk-size). If the database is already
28411 ** nBytes or larger, this routine is a no-op.
28413 static int fcntlSizeHint(unixFile *pFile, i64 nByte){
28414 if( pFile->szChunk>0 ){
28415 i64 nSize; /* Required file size */
28416 struct stat buf; /* Used to hold return values of fstat() */
28418 if( osFstat(pFile->h, &buf) ) return SQLITE_IOERR_FSTAT;
28420 nSize = ((nByte+pFile->szChunk-1) / pFile->szChunk) * pFile->szChunk;
28421 if( nSize>(i64)buf.st_size ){
28423 #if defined(HAVE_POSIX_FALLOCATE) && HAVE_POSIX_FALLOCATE
28424 /* The code below is handling the return value of osFallocate()
28425 ** correctly. posix_fallocate() is defined to "returns zero on success,
28426 ** or an error number on failure". See the manpage for details. */
28427 int err;
28429 err = osFallocate(pFile->h, buf.st_size, nSize-buf.st_size);
28430 }while( err==EINTR );
28431 if( err ) return SQLITE_IOERR_WRITE;
28432 #else
28433 /* If the OS does not have posix_fallocate(), fake it. First use
28434 ** ftruncate() to set the file size, then write a single byte to
28435 ** the last byte in each block within the extended region. This
28436 ** is the same technique used by glibc to implement posix_fallocate()
28437 ** on systems that do not have a real fallocate() system call.
28439 int nBlk = buf.st_blksize; /* File-system block size */
28440 i64 iWrite; /* Next offset to write to */
28442 if( robust_ftruncate(pFile->h, nSize) ){
28443 pFile->lastErrno = errno;
28444 return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
28446 iWrite = ((buf.st_size + 2*nBlk - 1)/nBlk)*nBlk-1;
28447 while( iWrite<nSize ){
28448 int nWrite = seekAndWrite(pFile, iWrite, "", 1);
28449 if( nWrite!=1 ) return SQLITE_IOERR_WRITE;
28450 iWrite += nBlk;
28452 #endif
28456 return SQLITE_OK;
28460 ** If *pArg is inititially negative then this is a query. Set *pArg to
28461 ** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set.
28463 ** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags.
28465 static void unixModeBit(unixFile *pFile, unsigned char mask, int *pArg){
28466 if( *pArg<0 ){
28467 *pArg = (pFile->ctrlFlags & mask)!=0;
28468 }else if( (*pArg)==0 ){
28469 pFile->ctrlFlags &= ~mask;
28470 }else{
28471 pFile->ctrlFlags |= mask;
28476 ** Information and control of an open file handle.
28478 static int unixFileControl(sqlite3_file *id, int op, void *pArg){
28479 unixFile *pFile = (unixFile*)id;
28480 switch( op ){
28481 case SQLITE_FCNTL_LOCKSTATE: {
28482 *(int*)pArg = pFile->eFileLock;
28483 return SQLITE_OK;
28485 case SQLITE_LAST_ERRNO: {
28486 *(int*)pArg = pFile->lastErrno;
28487 return SQLITE_OK;
28489 case SQLITE_FCNTL_CHUNK_SIZE: {
28490 pFile->szChunk = *(int *)pArg;
28491 return SQLITE_OK;
28493 case SQLITE_FCNTL_SIZE_HINT: {
28494 int rc;
28495 SimulateIOErrorBenign(1);
28496 rc = fcntlSizeHint(pFile, *(i64 *)pArg);
28497 SimulateIOErrorBenign(0);
28498 return rc;
28500 case SQLITE_FCNTL_PERSIST_WAL: {
28501 unixModeBit(pFile, UNIXFILE_PERSIST_WAL, (int*)pArg);
28502 return SQLITE_OK;
28504 case SQLITE_FCNTL_POWERSAFE_OVERWRITE: {
28505 unixModeBit(pFile, UNIXFILE_PSOW, (int*)pArg);
28506 return SQLITE_OK;
28508 case SQLITE_FCNTL_VFSNAME: {
28509 *(char**)pArg = sqlite3_mprintf("%s", pFile->pVfs->zName);
28510 return SQLITE_OK;
28512 #ifndef NDEBUG
28513 /* The pager calls this method to signal that it has done
28514 ** a rollback and that the database is therefore unchanged and
28515 ** it hence it is OK for the transaction change counter to be
28516 ** unchanged.
28518 case SQLITE_FCNTL_DB_UNCHANGED: {
28519 ((unixFile*)id)->dbUpdate = 0;
28520 return SQLITE_OK;
28522 #endif
28523 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
28524 case SQLITE_SET_LOCKPROXYFILE:
28525 case SQLITE_GET_LOCKPROXYFILE: {
28526 return proxyFileControl(id,op,pArg);
28528 #endif /* SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__) */
28530 return SQLITE_NOTFOUND;
28534 ** Return the sector size in bytes of the underlying block device for
28535 ** the specified file. This is almost always 512 bytes, but may be
28536 ** larger for some devices.
28538 ** SQLite code assumes this function cannot fail. It also assumes that
28539 ** if two files are created in the same file-system directory (i.e.
28540 ** a database and its journal file) that the sector size will be the
28541 ** same for both.
28543 static int unixSectorSize(sqlite3_file *pFile){
28544 (void)pFile;
28545 return SQLITE_DEFAULT_SECTOR_SIZE;
28549 ** Return the device characteristics for the file.
28551 ** This VFS is set up to return SQLITE_IOCAP_POWERSAFE_OVERWRITE by default.
28552 ** However, that choice is contraversial since technically the underlying
28553 ** file system does not always provide powersafe overwrites. (In other
28554 ** words, after a power-loss event, parts of the file that were never
28555 ** written might end up being altered.) However, non-PSOW behavior is very,
28556 ** very rare. And asserting PSOW makes a large reduction in the amount
28557 ** of required I/O for journaling, since a lot of padding is eliminated.
28558 ** Hence, while POWERSAFE_OVERWRITE is on by default, there is a file-control
28559 ** available to turn it off and URI query parameter available to turn it off.
28561 static int unixDeviceCharacteristics(sqlite3_file *id){
28562 unixFile *p = (unixFile*)id;
28563 if( p->ctrlFlags & UNIXFILE_PSOW ){
28564 return SQLITE_IOCAP_POWERSAFE_OVERWRITE;
28565 }else{
28566 return 0;
28570 #ifndef SQLITE_OMIT_WAL
28574 ** Object used to represent an shared memory buffer.
28576 ** When multiple threads all reference the same wal-index, each thread
28577 ** has its own unixShm object, but they all point to a single instance
28578 ** of this unixShmNode object. In other words, each wal-index is opened
28579 ** only once per process.
28581 ** Each unixShmNode object is connected to a single unixInodeInfo object.
28582 ** We could coalesce this object into unixInodeInfo, but that would mean
28583 ** every open file that does not use shared memory (in other words, most
28584 ** open files) would have to carry around this extra information. So
28585 ** the unixInodeInfo object contains a pointer to this unixShmNode object
28586 ** and the unixShmNode object is created only when needed.
28588 ** unixMutexHeld() must be true when creating or destroying
28589 ** this object or while reading or writing the following fields:
28591 ** nRef
28593 ** The following fields are read-only after the object is created:
28595 ** fid
28596 ** zFilename
28598 ** Either unixShmNode.mutex must be held or unixShmNode.nRef==0 and
28599 ** unixMutexHeld() is true when reading or writing any other field
28600 ** in this structure.
28602 struct unixShmNode {
28603 unixInodeInfo *pInode; /* unixInodeInfo that owns this SHM node */
28604 sqlite3_mutex *mutex; /* Mutex to access this object */
28605 char *zFilename; /* Name of the mmapped file */
28606 int h; /* Open file descriptor */
28607 int szRegion; /* Size of shared-memory regions */
28608 u16 nRegion; /* Size of array apRegion */
28609 u8 isReadonly; /* True if read-only */
28610 char **apRegion; /* Array of mapped shared-memory regions */
28611 int nRef; /* Number of unixShm objects pointing to this */
28612 unixShm *pFirst; /* All unixShm objects pointing to this */
28613 #ifdef SQLITE_DEBUG
28614 u8 exclMask; /* Mask of exclusive locks held */
28615 u8 sharedMask; /* Mask of shared locks held */
28616 u8 nextShmId; /* Next available unixShm.id value */
28617 #endif
28621 ** Structure used internally by this VFS to record the state of an
28622 ** open shared memory connection.
28624 ** The following fields are initialized when this object is created and
28625 ** are read-only thereafter:
28627 ** unixShm.pFile
28628 ** unixShm.id
28630 ** All other fields are read/write. The unixShm.pFile->mutex must be held
28631 ** while accessing any read/write fields.
28633 struct unixShm {
28634 unixShmNode *pShmNode; /* The underlying unixShmNode object */
28635 unixShm *pNext; /* Next unixShm with the same unixShmNode */
28636 u8 hasMutex; /* True if holding the unixShmNode mutex */
28637 u8 id; /* Id of this connection within its unixShmNode */
28638 u16 sharedMask; /* Mask of shared locks held */
28639 u16 exclMask; /* Mask of exclusive locks held */
28643 ** Constants used for locking
28645 #define UNIX_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */
28646 #define UNIX_SHM_DMS (UNIX_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */
28649 ** Apply posix advisory locks for all bytes from ofst through ofst+n-1.
28651 ** Locks block if the mask is exactly UNIX_SHM_C and are non-blocking
28652 ** otherwise.
28654 static int unixShmSystemLock(
28655 unixShmNode *pShmNode, /* Apply locks to this open shared-memory segment */
28656 int lockType, /* F_UNLCK, F_RDLCK, or F_WRLCK */
28657 int ofst, /* First byte of the locking range */
28658 int n /* Number of bytes to lock */
28660 struct flock f; /* The posix advisory locking structure */
28661 int rc = SQLITE_OK; /* Result code form fcntl() */
28663 /* Access to the unixShmNode object is serialized by the caller */
28664 assert( sqlite3_mutex_held(pShmNode->mutex) || pShmNode->nRef==0 );
28666 /* Shared locks never span more than one byte */
28667 assert( n==1 || lockType!=F_RDLCK );
28669 /* Locks are within range */
28670 assert( n>=1 && n<SQLITE_SHM_NLOCK );
28672 if( pShmNode->h>=0 ){
28673 /* Initialize the locking parameters */
28674 memset(&f, 0, sizeof(f));
28675 f.l_type = lockType;
28676 f.l_whence = SEEK_SET;
28677 f.l_start = ofst;
28678 f.l_len = n;
28680 rc = osFcntl(pShmNode->h, F_SETLK, &f);
28681 rc = (rc!=(-1)) ? SQLITE_OK : SQLITE_BUSY;
28684 /* Update the global lock state and do debug tracing */
28685 #ifdef SQLITE_DEBUG
28686 { u16 mask;
28687 OSTRACE(("SHM-LOCK "));
28688 mask = (1<<(ofst+n)) - (1<<ofst);
28689 if( rc==SQLITE_OK ){
28690 if( lockType==F_UNLCK ){
28691 OSTRACE(("unlock %d ok", ofst));
28692 pShmNode->exclMask &= ~mask;
28693 pShmNode->sharedMask &= ~mask;
28694 }else if( lockType==F_RDLCK ){
28695 OSTRACE(("read-lock %d ok", ofst));
28696 pShmNode->exclMask &= ~mask;
28697 pShmNode->sharedMask |= mask;
28698 }else{
28699 assert( lockType==F_WRLCK );
28700 OSTRACE(("write-lock %d ok", ofst));
28701 pShmNode->exclMask |= mask;
28702 pShmNode->sharedMask &= ~mask;
28704 }else{
28705 if( lockType==F_UNLCK ){
28706 OSTRACE(("unlock %d failed", ofst));
28707 }else if( lockType==F_RDLCK ){
28708 OSTRACE(("read-lock failed"));
28709 }else{
28710 assert( lockType==F_WRLCK );
28711 OSTRACE(("write-lock %d failed", ofst));
28714 OSTRACE((" - afterwards %03x,%03x\n",
28715 pShmNode->sharedMask, pShmNode->exclMask));
28717 #endif
28719 return rc;
28724 ** Purge the unixShmNodeList list of all entries with unixShmNode.nRef==0.
28726 ** This is not a VFS shared-memory method; it is a utility function called
28727 ** by VFS shared-memory methods.
28729 static void unixShmPurge(unixFile *pFd){
28730 unixShmNode *p = pFd->pInode->pShmNode;
28731 assert( unixMutexHeld() );
28732 if( p && p->nRef==0 ){
28733 int i;
28734 assert( p->pInode==pFd->pInode );
28735 sqlite3_mutex_free(p->mutex);
28736 for(i=0; i<p->nRegion; i++){
28737 if( p->h>=0 ){
28738 munmap(p->apRegion[i], p->szRegion);
28739 }else{
28740 sqlite3_free(p->apRegion[i]);
28743 sqlite3_free(p->apRegion);
28744 if( p->h>=0 ){
28745 robust_close(pFd, p->h, __LINE__);
28746 p->h = -1;
28748 p->pInode->pShmNode = 0;
28749 sqlite3_free(p);
28754 ** Open a shared-memory area associated with open database file pDbFd.
28755 ** This particular implementation uses mmapped files.
28757 ** The file used to implement shared-memory is in the same directory
28758 ** as the open database file and has the same name as the open database
28759 ** file with the "-shm" suffix added. For example, if the database file
28760 ** is "/home/user1/config.db" then the file that is created and mmapped
28761 ** for shared memory will be called "/home/user1/config.db-shm".
28763 ** Another approach to is to use files in /dev/shm or /dev/tmp or an
28764 ** some other tmpfs mount. But if a file in a different directory
28765 ** from the database file is used, then differing access permissions
28766 ** or a chroot() might cause two different processes on the same
28767 ** database to end up using different files for shared memory -
28768 ** meaning that their memory would not really be shared - resulting
28769 ** in database corruption. Nevertheless, this tmpfs file usage
28770 ** can be enabled at compile-time using -DSQLITE_SHM_DIRECTORY="/dev/shm"
28771 ** or the equivalent. The use of the SQLITE_SHM_DIRECTORY compile-time
28772 ** option results in an incompatible build of SQLite; builds of SQLite
28773 ** that with differing SQLITE_SHM_DIRECTORY settings attempt to use the
28774 ** same database file at the same time, database corruption will likely
28775 ** result. The SQLITE_SHM_DIRECTORY compile-time option is considered
28776 ** "unsupported" and may go away in a future SQLite release.
28778 ** When opening a new shared-memory file, if no other instances of that
28779 ** file are currently open, in this process or in other processes, then
28780 ** the file must be truncated to zero length or have its header cleared.
28782 ** If the original database file (pDbFd) is using the "unix-excl" VFS
28783 ** that means that an exclusive lock is held on the database file and
28784 ** that no other processes are able to read or write the database. In
28785 ** that case, we do not really need shared memory. No shared memory
28786 ** file is created. The shared memory will be simulated with heap memory.
28788 static int unixOpenSharedMemory(unixFile *pDbFd){
28789 struct unixShm *p = 0; /* The connection to be opened */
28790 struct unixShmNode *pShmNode; /* The underlying mmapped file */
28791 int rc; /* Result code */
28792 unixInodeInfo *pInode; /* The inode of fd */
28793 char *zShmFilename; /* Name of the file used for SHM */
28794 int nShmFilename; /* Size of the SHM filename in bytes */
28796 /* Allocate space for the new unixShm object. */
28797 p = sqlite3_malloc( sizeof(*p) );
28798 if( p==0 ) return SQLITE_NOMEM;
28799 memset(p, 0, sizeof(*p));
28800 assert( pDbFd->pShm==0 );
28802 /* Check to see if a unixShmNode object already exists. Reuse an existing
28803 ** one if present. Create a new one if necessary.
28805 unixEnterMutex();
28806 pInode = pDbFd->pInode;
28807 pShmNode = pInode->pShmNode;
28808 if( pShmNode==0 ){
28809 struct stat sStat; /* fstat() info for database file */
28811 /* Call fstat() to figure out the permissions on the database file. If
28812 ** a new *-shm file is created, an attempt will be made to create it
28813 ** with the same permissions. The actual permissions the file is created
28814 ** with are subject to the current umask setting.
28816 if( osFstat(pDbFd->h, &sStat) && pInode->bProcessLock==0 ){
28817 rc = SQLITE_IOERR_FSTAT;
28818 goto shm_open_err;
28821 #ifdef SQLITE_SHM_DIRECTORY
28822 nShmFilename = sizeof(SQLITE_SHM_DIRECTORY) + 31;
28823 #else
28824 nShmFilename = 6 + (int)strlen(pDbFd->zPath);
28825 #endif
28826 pShmNode = sqlite3_malloc( sizeof(*pShmNode) + nShmFilename );
28827 if( pShmNode==0 ){
28828 rc = SQLITE_NOMEM;
28829 goto shm_open_err;
28831 memset(pShmNode, 0, sizeof(*pShmNode)+nShmFilename);
28832 zShmFilename = pShmNode->zFilename = (char*)&pShmNode[1];
28833 #ifdef SQLITE_SHM_DIRECTORY
28834 sqlite3_snprintf(nShmFilename, zShmFilename,
28835 SQLITE_SHM_DIRECTORY "/sqlite-shm-%x-%x",
28836 (u32)sStat.st_ino, (u32)sStat.st_dev);
28837 #else
28838 sqlite3_snprintf(nShmFilename, zShmFilename, "%s-shm", pDbFd->zPath);
28839 sqlite3FileSuffix3(pDbFd->zPath, zShmFilename);
28840 #endif
28841 pShmNode->h = -1;
28842 pDbFd->pInode->pShmNode = pShmNode;
28843 pShmNode->pInode = pDbFd->pInode;
28844 pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
28845 if( pShmNode->mutex==0 ){
28846 rc = SQLITE_NOMEM;
28847 goto shm_open_err;
28850 if( pInode->bProcessLock==0 ){
28851 int openFlags = O_RDWR | O_CREAT;
28852 if( sqlite3_uri_boolean(pDbFd->zPath, "readonly_shm", 0) ){
28853 openFlags = O_RDONLY;
28854 pShmNode->isReadonly = 1;
28856 pShmNode->h = robust_open(zShmFilename, openFlags, (sStat.st_mode&0777));
28857 if( pShmNode->h<0 ){
28858 if( pShmNode->h<0 ){
28859 rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zShmFilename);
28860 goto shm_open_err;
28864 /* Check to see if another process is holding the dead-man switch.
28865 ** If not, truncate the file to zero length.
28867 rc = SQLITE_OK;
28868 if( unixShmSystemLock(pShmNode, F_WRLCK, UNIX_SHM_DMS, 1)==SQLITE_OK ){
28869 if( robust_ftruncate(pShmNode->h, 0) ){
28870 rc = unixLogError(SQLITE_IOERR_SHMOPEN, "ftruncate", zShmFilename);
28873 if( rc==SQLITE_OK ){
28874 rc = unixShmSystemLock(pShmNode, F_RDLCK, UNIX_SHM_DMS, 1);
28876 if( rc ) goto shm_open_err;
28880 /* Make the new connection a child of the unixShmNode */
28881 p->pShmNode = pShmNode;
28882 #ifdef SQLITE_DEBUG
28883 p->id = pShmNode->nextShmId++;
28884 #endif
28885 pShmNode->nRef++;
28886 pDbFd->pShm = p;
28887 unixLeaveMutex();
28889 /* The reference count on pShmNode has already been incremented under
28890 ** the cover of the unixEnterMutex() mutex and the pointer from the
28891 ** new (struct unixShm) object to the pShmNode has been set. All that is
28892 ** left to do is to link the new object into the linked list starting
28893 ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex
28894 ** mutex.
28896 sqlite3_mutex_enter(pShmNode->mutex);
28897 p->pNext = pShmNode->pFirst;
28898 pShmNode->pFirst = p;
28899 sqlite3_mutex_leave(pShmNode->mutex);
28900 return SQLITE_OK;
28902 /* Jump here on any error */
28903 shm_open_err:
28904 unixShmPurge(pDbFd); /* This call frees pShmNode if required */
28905 sqlite3_free(p);
28906 unixLeaveMutex();
28907 return rc;
28911 ** This function is called to obtain a pointer to region iRegion of the
28912 ** shared-memory associated with the database file fd. Shared-memory regions
28913 ** are numbered starting from zero. Each shared-memory region is szRegion
28914 ** bytes in size.
28916 ** If an error occurs, an error code is returned and *pp is set to NULL.
28918 ** Otherwise, if the bExtend parameter is 0 and the requested shared-memory
28919 ** region has not been allocated (by any client, including one running in a
28920 ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
28921 ** bExtend is non-zero and the requested shared-memory region has not yet
28922 ** been allocated, it is allocated by this function.
28924 ** If the shared-memory region has already been allocated or is allocated by
28925 ** this call as described above, then it is mapped into this processes
28926 ** address space (if it is not already), *pp is set to point to the mapped
28927 ** memory and SQLITE_OK returned.
28929 static int unixShmMap(
28930 sqlite3_file *fd, /* Handle open on database file */
28931 int iRegion, /* Region to retrieve */
28932 int szRegion, /* Size of regions */
28933 int bExtend, /* True to extend file if necessary */
28934 void volatile **pp /* OUT: Mapped memory */
28936 unixFile *pDbFd = (unixFile*)fd;
28937 unixShm *p;
28938 unixShmNode *pShmNode;
28939 int rc = SQLITE_OK;
28941 /* If the shared-memory file has not yet been opened, open it now. */
28942 if( pDbFd->pShm==0 ){
28943 rc = unixOpenSharedMemory(pDbFd);
28944 if( rc!=SQLITE_OK ) return rc;
28947 p = pDbFd->pShm;
28948 pShmNode = p->pShmNode;
28949 sqlite3_mutex_enter(pShmNode->mutex);
28950 assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
28951 assert( pShmNode->pInode==pDbFd->pInode );
28952 assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
28953 assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
28955 if( pShmNode->nRegion<=iRegion ){
28956 char **apNew; /* New apRegion[] array */
28957 int nByte = (iRegion+1)*szRegion; /* Minimum required file size */
28958 struct stat sStat; /* Used by fstat() */
28960 pShmNode->szRegion = szRegion;
28962 if( pShmNode->h>=0 ){
28963 /* The requested region is not mapped into this processes address space.
28964 ** Check to see if it has been allocated (i.e. if the wal-index file is
28965 ** large enough to contain the requested region).
28967 if( osFstat(pShmNode->h, &sStat) ){
28968 rc = SQLITE_IOERR_SHMSIZE;
28969 goto shmpage_out;
28972 if( sStat.st_size<nByte ){
28973 /* The requested memory region does not exist. If bExtend is set to
28974 ** false, exit early. *pp will be set to NULL and SQLITE_OK returned.
28976 ** Alternatively, if bExtend is true, use ftruncate() to allocate
28977 ** the requested memory region.
28979 if( !bExtend ) goto shmpage_out;
28980 if( robust_ftruncate(pShmNode->h, nByte) ){
28981 rc = unixLogError(SQLITE_IOERR_SHMSIZE, "ftruncate",
28982 pShmNode->zFilename);
28983 goto shmpage_out;
28988 /* Map the requested memory region into this processes address space. */
28989 apNew = (char **)sqlite3_realloc(
28990 pShmNode->apRegion, (iRegion+1)*sizeof(char *)
28992 if( !apNew ){
28993 rc = SQLITE_IOERR_NOMEM;
28994 goto shmpage_out;
28996 pShmNode->apRegion = apNew;
28997 while(pShmNode->nRegion<=iRegion){
28998 void *pMem;
28999 if( pShmNode->h>=0 ){
29000 pMem = mmap(0, szRegion,
29001 pShmNode->isReadonly ? PROT_READ : PROT_READ|PROT_WRITE,
29002 MAP_SHARED, pShmNode->h, pShmNode->nRegion*szRegion
29004 if( pMem==MAP_FAILED ){
29005 rc = unixLogError(SQLITE_IOERR_SHMMAP, "mmap", pShmNode->zFilename);
29006 goto shmpage_out;
29008 }else{
29009 pMem = sqlite3_malloc(szRegion);
29010 if( pMem==0 ){
29011 rc = SQLITE_NOMEM;
29012 goto shmpage_out;
29014 memset(pMem, 0, szRegion);
29016 pShmNode->apRegion[pShmNode->nRegion] = pMem;
29017 pShmNode->nRegion++;
29021 shmpage_out:
29022 if( pShmNode->nRegion>iRegion ){
29023 *pp = pShmNode->apRegion[iRegion];
29024 }else{
29025 *pp = 0;
29027 if( pShmNode->isReadonly && rc==SQLITE_OK ) rc = SQLITE_READONLY;
29028 sqlite3_mutex_leave(pShmNode->mutex);
29029 return rc;
29033 ** Change the lock state for a shared-memory segment.
29035 ** Note that the relationship between SHAREd and EXCLUSIVE locks is a little
29036 ** different here than in posix. In xShmLock(), one can go from unlocked
29037 ** to shared and back or from unlocked to exclusive and back. But one may
29038 ** not go from shared to exclusive or from exclusive to shared.
29040 static int unixShmLock(
29041 sqlite3_file *fd, /* Database file holding the shared memory */
29042 int ofst, /* First lock to acquire or release */
29043 int n, /* Number of locks to acquire or release */
29044 int flags /* What to do with the lock */
29046 unixFile *pDbFd = (unixFile*)fd; /* Connection holding shared memory */
29047 unixShm *p = pDbFd->pShm; /* The shared memory being locked */
29048 unixShm *pX; /* For looping over all siblings */
29049 unixShmNode *pShmNode = p->pShmNode; /* The underlying file iNode */
29050 int rc = SQLITE_OK; /* Result code */
29051 u16 mask; /* Mask of locks to take or release */
29053 assert( pShmNode==pDbFd->pInode->pShmNode );
29054 assert( pShmNode->pInode==pDbFd->pInode );
29055 assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
29056 assert( n>=1 );
29057 assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
29058 || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
29059 || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
29060 || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
29061 assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
29062 assert( pShmNode->h>=0 || pDbFd->pInode->bProcessLock==1 );
29063 assert( pShmNode->h<0 || pDbFd->pInode->bProcessLock==0 );
29065 mask = (1<<(ofst+n)) - (1<<ofst);
29066 assert( n>1 || mask==(1<<ofst) );
29067 sqlite3_mutex_enter(pShmNode->mutex);
29068 if( flags & SQLITE_SHM_UNLOCK ){
29069 u16 allMask = 0; /* Mask of locks held by siblings */
29071 /* See if any siblings hold this same lock */
29072 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
29073 if( pX==p ) continue;
29074 assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
29075 allMask |= pX->sharedMask;
29078 /* Unlock the system-level locks */
29079 if( (mask & allMask)==0 ){
29080 rc = unixShmSystemLock(pShmNode, F_UNLCK, ofst+UNIX_SHM_BASE, n);
29081 }else{
29082 rc = SQLITE_OK;
29085 /* Undo the local locks */
29086 if( rc==SQLITE_OK ){
29087 p->exclMask &= ~mask;
29088 p->sharedMask &= ~mask;
29090 }else if( flags & SQLITE_SHM_SHARED ){
29091 u16 allShared = 0; /* Union of locks held by connections other than "p" */
29093 /* Find out which shared locks are already held by sibling connections.
29094 ** If any sibling already holds an exclusive lock, go ahead and return
29095 ** SQLITE_BUSY.
29097 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
29098 if( (pX->exclMask & mask)!=0 ){
29099 rc = SQLITE_BUSY;
29100 break;
29102 allShared |= pX->sharedMask;
29105 /* Get shared locks at the system level, if necessary */
29106 if( rc==SQLITE_OK ){
29107 if( (allShared & mask)==0 ){
29108 rc = unixShmSystemLock(pShmNode, F_RDLCK, ofst+UNIX_SHM_BASE, n);
29109 }else{
29110 rc = SQLITE_OK;
29114 /* Get the local shared locks */
29115 if( rc==SQLITE_OK ){
29116 p->sharedMask |= mask;
29118 }else{
29119 /* Make sure no sibling connections hold locks that will block this
29120 ** lock. If any do, return SQLITE_BUSY right away.
29122 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
29123 if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
29124 rc = SQLITE_BUSY;
29125 break;
29129 /* Get the exclusive locks at the system level. Then if successful
29130 ** also mark the local connection as being locked.
29132 if( rc==SQLITE_OK ){
29133 rc = unixShmSystemLock(pShmNode, F_WRLCK, ofst+UNIX_SHM_BASE, n);
29134 if( rc==SQLITE_OK ){
29135 assert( (p->sharedMask & mask)==0 );
29136 p->exclMask |= mask;
29140 sqlite3_mutex_leave(pShmNode->mutex);
29141 OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x\n",
29142 p->id, getpid(), p->sharedMask, p->exclMask));
29143 return rc;
29147 ** Implement a memory barrier or memory fence on shared memory.
29149 ** All loads and stores begun before the barrier must complete before
29150 ** any load or store begun after the barrier.
29152 static void unixShmBarrier(
29153 sqlite3_file *fd /* Database file holding the shared memory */
29155 UNUSED_PARAMETER(fd);
29156 unixEnterMutex();
29157 unixLeaveMutex();
29161 ** Close a connection to shared-memory. Delete the underlying
29162 ** storage if deleteFlag is true.
29164 ** If there is no shared memory associated with the connection then this
29165 ** routine is a harmless no-op.
29167 static int unixShmUnmap(
29168 sqlite3_file *fd, /* The underlying database file */
29169 int deleteFlag /* Delete shared-memory if true */
29171 unixShm *p; /* The connection to be closed */
29172 unixShmNode *pShmNode; /* The underlying shared-memory file */
29173 unixShm **pp; /* For looping over sibling connections */
29174 unixFile *pDbFd; /* The underlying database file */
29176 pDbFd = (unixFile*)fd;
29177 p = pDbFd->pShm;
29178 if( p==0 ) return SQLITE_OK;
29179 pShmNode = p->pShmNode;
29181 assert( pShmNode==pDbFd->pInode->pShmNode );
29182 assert( pShmNode->pInode==pDbFd->pInode );
29184 /* Remove connection p from the set of connections associated
29185 ** with pShmNode */
29186 sqlite3_mutex_enter(pShmNode->mutex);
29187 for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
29188 *pp = p->pNext;
29190 /* Free the connection p */
29191 sqlite3_free(p);
29192 pDbFd->pShm = 0;
29193 sqlite3_mutex_leave(pShmNode->mutex);
29195 /* If pShmNode->nRef has reached 0, then close the underlying
29196 ** shared-memory file, too */
29197 unixEnterMutex();
29198 assert( pShmNode->nRef>0 );
29199 pShmNode->nRef--;
29200 if( pShmNode->nRef==0 ){
29201 if( deleteFlag && pShmNode->h>=0 ) osUnlink(pShmNode->zFilename);
29202 unixShmPurge(pDbFd);
29204 unixLeaveMutex();
29206 return SQLITE_OK;
29210 #else
29211 # define unixShmMap 0
29212 # define unixShmLock 0
29213 # define unixShmBarrier 0
29214 # define unixShmUnmap 0
29215 #endif /* #ifndef SQLITE_OMIT_WAL */
29218 ** Here ends the implementation of all sqlite3_file methods.
29220 ********************** End sqlite3_file Methods *******************************
29221 ******************************************************************************/
29224 ** This division contains definitions of sqlite3_io_methods objects that
29225 ** implement various file locking strategies. It also contains definitions
29226 ** of "finder" functions. A finder-function is used to locate the appropriate
29227 ** sqlite3_io_methods object for a particular database file. The pAppData
29228 ** field of the sqlite3_vfs VFS objects are initialized to be pointers to
29229 ** the correct finder-function for that VFS.
29231 ** Most finder functions return a pointer to a fixed sqlite3_io_methods
29232 ** object. The only interesting finder-function is autolockIoFinder, which
29233 ** looks at the filesystem type and tries to guess the best locking
29234 ** strategy from that.
29236 ** For finder-funtion F, two objects are created:
29238 ** (1) The real finder-function named "FImpt()".
29240 ** (2) A constant pointer to this function named just "F".
29243 ** A pointer to the F pointer is used as the pAppData value for VFS
29244 ** objects. We have to do this instead of letting pAppData point
29245 ** directly at the finder-function since C90 rules prevent a void*
29246 ** from be cast into a function pointer.
29249 ** Each instance of this macro generates two objects:
29251 ** * A constant sqlite3_io_methods object call METHOD that has locking
29252 ** methods CLOSE, LOCK, UNLOCK, CKRESLOCK.
29254 ** * An I/O method finder function called FINDER that returns a pointer
29255 ** to the METHOD object in the previous bullet.
29257 #define IOMETHODS(FINDER, METHOD, VERSION, CLOSE, LOCK, UNLOCK, CKLOCK) \
29258 static const sqlite3_io_methods METHOD = { \
29259 VERSION, /* iVersion */ \
29260 CLOSE, /* xClose */ \
29261 unixRead, /* xRead */ \
29262 unixWrite, /* xWrite */ \
29263 unixTruncate, /* xTruncate */ \
29264 unixSync, /* xSync */ \
29265 unixFileSize, /* xFileSize */ \
29266 LOCK, /* xLock */ \
29267 UNLOCK, /* xUnlock */ \
29268 CKLOCK, /* xCheckReservedLock */ \
29269 unixFileControl, /* xFileControl */ \
29270 unixSectorSize, /* xSectorSize */ \
29271 unixDeviceCharacteristics, /* xDeviceCapabilities */ \
29272 unixShmMap, /* xShmMap */ \
29273 unixShmLock, /* xShmLock */ \
29274 unixShmBarrier, /* xShmBarrier */ \
29275 unixShmUnmap /* xShmUnmap */ \
29276 }; \
29277 static const sqlite3_io_methods *FINDER##Impl(const char *z, unixFile *p){ \
29278 UNUSED_PARAMETER(z); UNUSED_PARAMETER(p); \
29279 return &METHOD; \
29281 static const sqlite3_io_methods *(*const FINDER)(const char*,unixFile *p) \
29282 = FINDER##Impl;
29285 ** Here are all of the sqlite3_io_methods objects for each of the
29286 ** locking strategies. Functions that return pointers to these methods
29287 ** are also created.
29289 IOMETHODS(
29290 posixIoFinder, /* Finder function name */
29291 posixIoMethods, /* sqlite3_io_methods object name */
29292 2, /* shared memory is enabled */
29293 unixClose, /* xClose method */
29294 unixLock, /* xLock method */
29295 unixUnlock, /* xUnlock method */
29296 unixCheckReservedLock /* xCheckReservedLock method */
29298 IOMETHODS(
29299 nolockIoFinder, /* Finder function name */
29300 nolockIoMethods, /* sqlite3_io_methods object name */
29301 1, /* shared memory is disabled */
29302 nolockClose, /* xClose method */
29303 nolockLock, /* xLock method */
29304 nolockUnlock, /* xUnlock method */
29305 nolockCheckReservedLock /* xCheckReservedLock method */
29307 IOMETHODS(
29308 dotlockIoFinder, /* Finder function name */
29309 dotlockIoMethods, /* sqlite3_io_methods object name */
29310 1, /* shared memory is disabled */
29311 dotlockClose, /* xClose method */
29312 dotlockLock, /* xLock method */
29313 dotlockUnlock, /* xUnlock method */
29314 dotlockCheckReservedLock /* xCheckReservedLock method */
29317 #if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
29318 IOMETHODS(
29319 flockIoFinder, /* Finder function name */
29320 flockIoMethods, /* sqlite3_io_methods object name */
29321 1, /* shared memory is disabled */
29322 flockClose, /* xClose method */
29323 flockLock, /* xLock method */
29324 flockUnlock, /* xUnlock method */
29325 flockCheckReservedLock /* xCheckReservedLock method */
29327 #endif
29329 #if OS_VXWORKS
29330 IOMETHODS(
29331 semIoFinder, /* Finder function name */
29332 semIoMethods, /* sqlite3_io_methods object name */
29333 1, /* shared memory is disabled */
29334 semClose, /* xClose method */
29335 semLock, /* xLock method */
29336 semUnlock, /* xUnlock method */
29337 semCheckReservedLock /* xCheckReservedLock method */
29339 #endif
29341 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29342 IOMETHODS(
29343 afpIoFinder, /* Finder function name */
29344 afpIoMethods, /* sqlite3_io_methods object name */
29345 1, /* shared memory is disabled */
29346 afpClose, /* xClose method */
29347 afpLock, /* xLock method */
29348 afpUnlock, /* xUnlock method */
29349 afpCheckReservedLock /* xCheckReservedLock method */
29351 #endif
29354 ** The proxy locking method is a "super-method" in the sense that it
29355 ** opens secondary file descriptors for the conch and lock files and
29356 ** it uses proxy, dot-file, AFP, and flock() locking methods on those
29357 ** secondary files. For this reason, the division that implements
29358 ** proxy locking is located much further down in the file. But we need
29359 ** to go ahead and define the sqlite3_io_methods and finder function
29360 ** for proxy locking here. So we forward declare the I/O methods.
29362 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29363 static int proxyClose(sqlite3_file*);
29364 static int proxyLock(sqlite3_file*, int);
29365 static int proxyUnlock(sqlite3_file*, int);
29366 static int proxyCheckReservedLock(sqlite3_file*, int*);
29367 IOMETHODS(
29368 proxyIoFinder, /* Finder function name */
29369 proxyIoMethods, /* sqlite3_io_methods object name */
29370 1, /* shared memory is disabled */
29371 proxyClose, /* xClose method */
29372 proxyLock, /* xLock method */
29373 proxyUnlock, /* xUnlock method */
29374 proxyCheckReservedLock /* xCheckReservedLock method */
29376 #endif
29378 /* nfs lockd on OSX 10.3+ doesn't clear write locks when a read lock is set */
29379 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29380 IOMETHODS(
29381 nfsIoFinder, /* Finder function name */
29382 nfsIoMethods, /* sqlite3_io_methods object name */
29383 1, /* shared memory is disabled */
29384 unixClose, /* xClose method */
29385 unixLock, /* xLock method */
29386 nfsUnlock, /* xUnlock method */
29387 unixCheckReservedLock /* xCheckReservedLock method */
29389 #endif
29391 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29393 ** This "finder" function attempts to determine the best locking strategy
29394 ** for the database file "filePath". It then returns the sqlite3_io_methods
29395 ** object that implements that strategy.
29397 ** This is for MacOSX only.
29399 static const sqlite3_io_methods *autolockIoFinderImpl(
29400 const char *filePath, /* name of the database file */
29401 unixFile *pNew /* open file object for the database file */
29403 static const struct Mapping {
29404 const char *zFilesystem; /* Filesystem type name */
29405 const sqlite3_io_methods *pMethods; /* Appropriate locking method */
29406 } aMap[] = {
29407 { "hfs", &posixIoMethods },
29408 { "ufs", &posixIoMethods },
29409 { "afpfs", &afpIoMethods },
29410 { "smbfs", &afpIoMethods },
29411 { "webdav", &nolockIoMethods },
29412 { 0, 0 }
29414 int i;
29415 struct statfs fsInfo;
29416 struct flock lockInfo;
29418 if( !filePath ){
29419 /* If filePath==NULL that means we are dealing with a transient file
29420 ** that does not need to be locked. */
29421 return &nolockIoMethods;
29423 if( statfs(filePath, &fsInfo) != -1 ){
29424 if( fsInfo.f_flags & MNT_RDONLY ){
29425 return &nolockIoMethods;
29427 for(i=0; aMap[i].zFilesystem; i++){
29428 if( strcmp(fsInfo.f_fstypename, aMap[i].zFilesystem)==0 ){
29429 return aMap[i].pMethods;
29434 /* Default case. Handles, amongst others, "nfs".
29435 ** Test byte-range lock using fcntl(). If the call succeeds,
29436 ** assume that the file-system supports POSIX style locks.
29438 lockInfo.l_len = 1;
29439 lockInfo.l_start = 0;
29440 lockInfo.l_whence = SEEK_SET;
29441 lockInfo.l_type = F_RDLCK;
29442 if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
29443 if( strcmp(fsInfo.f_fstypename, "nfs")==0 ){
29444 return &nfsIoMethods;
29445 } else {
29446 return &posixIoMethods;
29448 }else{
29449 return &dotlockIoMethods;
29452 static const sqlite3_io_methods
29453 *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
29455 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
29457 #if OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE
29459 ** This "finder" function attempts to determine the best locking strategy
29460 ** for the database file "filePath". It then returns the sqlite3_io_methods
29461 ** object that implements that strategy.
29463 ** This is for VXWorks only.
29465 static const sqlite3_io_methods *autolockIoFinderImpl(
29466 const char *filePath, /* name of the database file */
29467 unixFile *pNew /* the open file object */
29469 struct flock lockInfo;
29471 if( !filePath ){
29472 /* If filePath==NULL that means we are dealing with a transient file
29473 ** that does not need to be locked. */
29474 return &nolockIoMethods;
29477 /* Test if fcntl() is supported and use POSIX style locks.
29478 ** Otherwise fall back to the named semaphore method.
29480 lockInfo.l_len = 1;
29481 lockInfo.l_start = 0;
29482 lockInfo.l_whence = SEEK_SET;
29483 lockInfo.l_type = F_RDLCK;
29484 if( osFcntl(pNew->h, F_GETLK, &lockInfo)!=-1 ) {
29485 return &posixIoMethods;
29486 }else{
29487 return &semIoMethods;
29490 static const sqlite3_io_methods
29491 *(*const autolockIoFinder)(const char*,unixFile*) = autolockIoFinderImpl;
29493 #endif /* OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE */
29496 ** An abstract type for a pointer to a IO method finder function:
29498 typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
29501 /****************************************************************************
29502 **************************** sqlite3_vfs methods ****************************
29504 ** This division contains the implementation of methods on the
29505 ** sqlite3_vfs object.
29509 ** Initialize the contents of the unixFile structure pointed to by pId.
29511 static int fillInUnixFile(
29512 sqlite3_vfs *pVfs, /* Pointer to vfs object */
29513 int h, /* Open file descriptor of file being opened */
29514 sqlite3_file *pId, /* Write to the unixFile structure here */
29515 const char *zFilename, /* Name of the file being opened */
29516 int ctrlFlags /* Zero or more UNIXFILE_* values */
29518 const sqlite3_io_methods *pLockingStyle;
29519 unixFile *pNew = (unixFile *)pId;
29520 int rc = SQLITE_OK;
29522 assert( pNew->pInode==NULL );
29524 /* Usually the path zFilename should not be a relative pathname. The
29525 ** exception is when opening the proxy "conch" file in builds that
29526 ** include the special Apple locking styles.
29528 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29529 assert( zFilename==0 || zFilename[0]=='/'
29530 || pVfs->pAppData==(void*)&autolockIoFinder );
29531 #else
29532 assert( zFilename==0 || zFilename[0]=='/' );
29533 #endif
29535 /* No locking occurs in temporary files */
29536 assert( zFilename!=0 || (ctrlFlags & UNIXFILE_NOLOCK)!=0 );
29538 OSTRACE(("OPEN %-3d %s\n", h, zFilename));
29539 pNew->h = h;
29540 pNew->pVfs = pVfs;
29541 pNew->zPath = zFilename;
29542 pNew->ctrlFlags = (u8)ctrlFlags;
29543 if( sqlite3_uri_boolean(((ctrlFlags & UNIXFILE_URI) ? zFilename : 0),
29544 "psow", SQLITE_POWERSAFE_OVERWRITE) ){
29545 pNew->ctrlFlags |= UNIXFILE_PSOW;
29547 if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
29548 pNew->ctrlFlags |= UNIXFILE_EXCL;
29551 #if OS_VXWORKS
29552 pNew->pId = vxworksFindFileId(zFilename);
29553 if( pNew->pId==0 ){
29554 ctrlFlags |= UNIXFILE_NOLOCK;
29555 rc = SQLITE_NOMEM;
29557 #endif
29559 if( ctrlFlags & UNIXFILE_NOLOCK ){
29560 pLockingStyle = &nolockIoMethods;
29561 }else{
29562 pLockingStyle = (**(finder_type*)pVfs->pAppData)(zFilename, pNew);
29563 #if SQLITE_ENABLE_LOCKING_STYLE
29564 /* Cache zFilename in the locking context (AFP and dotlock override) for
29565 ** proxyLock activation is possible (remote proxy is based on db name)
29566 ** zFilename remains valid until file is closed, to support */
29567 pNew->lockingContext = (void*)zFilename;
29568 #endif
29571 if( pLockingStyle == &posixIoMethods
29572 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
29573 || pLockingStyle == &nfsIoMethods
29574 #endif
29576 unixEnterMutex();
29577 rc = findInodeInfo(pNew, &pNew->pInode);
29578 if( rc!=SQLITE_OK ){
29579 /* If an error occured in findInodeInfo(), close the file descriptor
29580 ** immediately, before releasing the mutex. findInodeInfo() may fail
29581 ** in two scenarios:
29583 ** (a) A call to fstat() failed.
29584 ** (b) A malloc failed.
29586 ** Scenario (b) may only occur if the process is holding no other
29587 ** file descriptors open on the same file. If there were other file
29588 ** descriptors on this file, then no malloc would be required by
29589 ** findInodeInfo(). If this is the case, it is quite safe to close
29590 ** handle h - as it is guaranteed that no posix locks will be released
29591 ** by doing so.
29593 ** If scenario (a) caused the error then things are not so safe. The
29594 ** implicit assumption here is that if fstat() fails, things are in
29595 ** such bad shape that dropping a lock or two doesn't matter much.
29597 robust_close(pNew, h, __LINE__);
29598 h = -1;
29600 unixLeaveMutex();
29603 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
29604 else if( pLockingStyle == &afpIoMethods ){
29605 /* AFP locking uses the file path so it needs to be included in
29606 ** the afpLockingContext.
29608 afpLockingContext *pCtx;
29609 pNew->lockingContext = pCtx = sqlite3_malloc( sizeof(*pCtx) );
29610 if( pCtx==0 ){
29611 rc = SQLITE_NOMEM;
29612 }else{
29613 /* NB: zFilename exists and remains valid until the file is closed
29614 ** according to requirement F11141. So we do not need to make a
29615 ** copy of the filename. */
29616 pCtx->dbPath = zFilename;
29617 pCtx->reserved = 0;
29618 srandomdev();
29619 unixEnterMutex();
29620 rc = findInodeInfo(pNew, &pNew->pInode);
29621 if( rc!=SQLITE_OK ){
29622 sqlite3_free(pNew->lockingContext);
29623 robust_close(pNew, h, __LINE__);
29624 h = -1;
29626 unixLeaveMutex();
29629 #endif
29631 else if( pLockingStyle == &dotlockIoMethods ){
29632 /* Dotfile locking uses the file path so it needs to be included in
29633 ** the dotlockLockingContext
29635 char *zLockFile;
29636 int nFilename;
29637 assert( zFilename!=0 );
29638 nFilename = (int)strlen(zFilename) + 6;
29639 zLockFile = (char *)sqlite3_malloc(nFilename);
29640 if( zLockFile==0 ){
29641 rc = SQLITE_NOMEM;
29642 }else{
29643 sqlite3_snprintf(nFilename, zLockFile, "%s" DOTLOCK_SUFFIX, zFilename);
29645 pNew->lockingContext = zLockFile;
29648 #if OS_VXWORKS
29649 else if( pLockingStyle == &semIoMethods ){
29650 /* Named semaphore locking uses the file path so it needs to be
29651 ** included in the semLockingContext
29653 unixEnterMutex();
29654 rc = findInodeInfo(pNew, &pNew->pInode);
29655 if( (rc==SQLITE_OK) && (pNew->pInode->pSem==NULL) ){
29656 char *zSemName = pNew->pInode->aSemName;
29657 int n;
29658 sqlite3_snprintf(MAX_PATHNAME, zSemName, "/%s.sem",
29659 pNew->pId->zCanonicalName);
29660 for( n=1; zSemName[n]; n++ )
29661 if( zSemName[n]=='/' ) zSemName[n] = '_';
29662 pNew->pInode->pSem = sem_open(zSemName, O_CREAT, 0666, 1);
29663 if( pNew->pInode->pSem == SEM_FAILED ){
29664 rc = SQLITE_NOMEM;
29665 pNew->pInode->aSemName[0] = '\0';
29668 unixLeaveMutex();
29670 #endif
29672 pNew->lastErrno = 0;
29673 #if OS_VXWORKS
29674 if( rc!=SQLITE_OK ){
29675 if( h>=0 ) robust_close(pNew, h, __LINE__);
29676 h = -1;
29677 osUnlink(zFilename);
29678 isDelete = 0;
29680 if( isDelete ) pNew->ctrlFlags |= UNIXFILE_DELETE;
29681 #endif
29682 if( rc!=SQLITE_OK ){
29683 if( h>=0 ) robust_close(pNew, h, __LINE__);
29684 }else{
29685 pNew->pMethod = pLockingStyle;
29686 OpenCounter(+1);
29688 return rc;
29692 ** Return the name of a directory in which to put temporary files.
29693 ** If no suitable temporary file directory can be found, return NULL.
29695 static const char *unixTempFileDir(void){
29696 static const char *azDirs[] = {
29699 "/var/tmp",
29700 "/usr/tmp",
29701 "/tmp",
29702 0 /* List terminator */
29704 unsigned int i;
29705 struct stat buf;
29706 const char *zDir = 0;
29708 azDirs[0] = sqlite3_temp_directory;
29709 if( !azDirs[1] ) azDirs[1] = getenv("TMPDIR");
29710 for(i=0; i<sizeof(azDirs)/sizeof(azDirs[0]); zDir=azDirs[i++]){
29711 if( zDir==0 ) continue;
29712 if( osStat(zDir, &buf) ) continue;
29713 if( !S_ISDIR(buf.st_mode) ) continue;
29714 if( osAccess(zDir, 07) ) continue;
29715 break;
29717 return zDir;
29721 ** Create a temporary file name in zBuf. zBuf must be allocated
29722 ** by the calling process and must be big enough to hold at least
29723 ** pVfs->mxPathname bytes.
29725 static int unixGetTempname(int nBuf, char *zBuf){
29726 static const unsigned char zChars[] =
29727 "abcdefghijklmnopqrstuvwxyz"
29728 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
29729 "0123456789";
29730 unsigned int i, j;
29731 const char *zDir;
29733 /* It's odd to simulate an io-error here, but really this is just
29734 ** using the io-error infrastructure to test that SQLite handles this
29735 ** function failing.
29737 SimulateIOError( return SQLITE_IOERR );
29739 zDir = unixTempFileDir();
29740 if( zDir==0 ) zDir = ".";
29742 /* Check that the output buffer is large enough for the temporary file
29743 ** name. If it is not, return SQLITE_ERROR.
29745 if( (strlen(zDir) + strlen(SQLITE_TEMP_FILE_PREFIX) + 18) >= (size_t)nBuf ){
29746 return SQLITE_ERROR;
29750 sqlite3_snprintf(nBuf-18, zBuf, "%s/"SQLITE_TEMP_FILE_PREFIX, zDir);
29751 j = (int)strlen(zBuf);
29752 sqlite3_randomness(15, &zBuf[j]);
29753 for(i=0; i<15; i++, j++){
29754 zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
29756 zBuf[j] = 0;
29757 zBuf[j+1] = 0;
29758 }while( osAccess(zBuf,0)==0 );
29759 return SQLITE_OK;
29762 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
29764 ** Routine to transform a unixFile into a proxy-locking unixFile.
29765 ** Implementation in the proxy-lock division, but used by unixOpen()
29766 ** if SQLITE_PREFER_PROXY_LOCKING is defined.
29768 static int proxyTransformUnixFile(unixFile*, const char*);
29769 #endif
29772 ** Search for an unused file descriptor that was opened on the database
29773 ** file (not a journal or master-journal file) identified by pathname
29774 ** zPath with SQLITE_OPEN_XXX flags matching those passed as the second
29775 ** argument to this function.
29777 ** Such a file descriptor may exist if a database connection was closed
29778 ** but the associated file descriptor could not be closed because some
29779 ** other file descriptor open on the same file is holding a file-lock.
29780 ** Refer to comments in the unixClose() function and the lengthy comment
29781 ** describing "Posix Advisory Locking" at the start of this file for
29782 ** further details. Also, ticket #4018.
29784 ** If a suitable file descriptor is found, then it is returned. If no
29785 ** such file descriptor is located, -1 is returned.
29787 static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
29788 UnixUnusedFd *pUnused = 0;
29790 /* Do not search for an unused file descriptor on vxworks. Not because
29791 ** vxworks would not benefit from the change (it might, we're not sure),
29792 ** but because no way to test it is currently available. It is better
29793 ** not to risk breaking vxworks support for the sake of such an obscure
29794 ** feature. */
29795 #if !OS_VXWORKS
29796 struct stat sStat; /* Results of stat() call */
29798 /* A stat() call may fail for various reasons. If this happens, it is
29799 ** almost certain that an open() call on the same path will also fail.
29800 ** For this reason, if an error occurs in the stat() call here, it is
29801 ** ignored and -1 is returned. The caller will try to open a new file
29802 ** descriptor on the same path, fail, and return an error to SQLite.
29804 ** Even if a subsequent open() call does succeed, the consequences of
29805 ** not searching for a resusable file descriptor are not dire. */
29806 if( 0==osStat(zPath, &sStat) ){
29807 unixInodeInfo *pInode;
29809 unixEnterMutex();
29810 pInode = inodeList;
29811 while( pInode && (pInode->fileId.dev!=sStat.st_dev
29812 || pInode->fileId.ino!=sStat.st_ino) ){
29813 pInode = pInode->pNext;
29815 if( pInode ){
29816 UnixUnusedFd **pp;
29817 for(pp=&pInode->pUnused; *pp && (*pp)->flags!=flags; pp=&((*pp)->pNext));
29818 pUnused = *pp;
29819 if( pUnused ){
29820 *pp = pUnused->pNext;
29823 unixLeaveMutex();
29825 #endif /* if !OS_VXWORKS */
29826 return pUnused;
29830 ** This function is called by unixOpen() to determine the unix permissions
29831 ** to create new files with. If no error occurs, then SQLITE_OK is returned
29832 ** and a value suitable for passing as the third argument to open(2) is
29833 ** written to *pMode. If an IO error occurs, an SQLite error code is
29834 ** returned and the value of *pMode is not modified.
29836 ** If the file being opened is a temporary file, it is always created with
29837 ** the octal permissions 0600 (read/writable by owner only). If the file
29838 ** is a database or master journal file, it is created with the permissions
29839 ** mask SQLITE_DEFAULT_FILE_PERMISSIONS.
29841 ** Finally, if the file being opened is a WAL or regular journal file, then
29842 ** this function queries the file-system for the permissions on the
29843 ** corresponding database file and sets *pMode to this value. Whenever
29844 ** possible, WAL and journal files are created using the same permissions
29845 ** as the associated database file.
29847 ** If the SQLITE_ENABLE_8_3_NAMES option is enabled, then the
29848 ** original filename is unavailable. But 8_3_NAMES is only used for
29849 ** FAT filesystems and permissions do not matter there, so just use
29850 ** the default permissions.
29852 static int findCreateFileMode(
29853 const char *zPath, /* Path of file (possibly) being created */
29854 int flags, /* Flags passed as 4th argument to xOpen() */
29855 mode_t *pMode /* OUT: Permissions to open file with */
29857 int rc = SQLITE_OK; /* Return Code */
29858 *pMode = SQLITE_DEFAULT_FILE_PERMISSIONS;
29859 if( flags & (SQLITE_OPEN_WAL|SQLITE_OPEN_MAIN_JOURNAL) ){
29860 char zDb[MAX_PATHNAME+1]; /* Database file path */
29861 int nDb; /* Number of valid bytes in zDb */
29862 struct stat sStat; /* Output of stat() on database file */
29864 /* zPath is a path to a WAL or journal file. The following block derives
29865 ** the path to the associated database file from zPath. This block handles
29866 ** the following naming conventions:
29868 ** "<path to db>-journal"
29869 ** "<path to db>-wal"
29870 ** "<path to db>-journalNN"
29871 ** "<path to db>-walNN"
29873 ** where NN is a decimal number. The NN naming schemes are
29874 ** used by the test_multiplex.c module.
29876 nDb = sqlite3Strlen30(zPath) - 1;
29877 #ifdef SQLITE_ENABLE_8_3_NAMES
29878 while( nDb>0 && sqlite3Isalnum(zPath[nDb]) ) nDb--;
29879 if( nDb==0 || zPath[nDb]!='-' ) return SQLITE_OK;
29880 #else
29881 while( zPath[nDb]!='-' ){
29882 assert( nDb>0 );
29883 assert( zPath[nDb]!='\n' );
29884 nDb--;
29886 #endif
29887 memcpy(zDb, zPath, nDb);
29888 zDb[nDb] = '\0';
29890 if( 0==osStat(zDb, &sStat) ){
29891 *pMode = sStat.st_mode & 0777;
29892 }else{
29893 rc = SQLITE_IOERR_FSTAT;
29895 }else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
29896 *pMode = 0600;
29898 return rc;
29902 ** Open the file zPath.
29904 ** Previously, the SQLite OS layer used three functions in place of this
29905 ** one:
29907 ** sqlite3OsOpenReadWrite();
29908 ** sqlite3OsOpenReadOnly();
29909 ** sqlite3OsOpenExclusive();
29911 ** These calls correspond to the following combinations of flags:
29913 ** ReadWrite() -> (READWRITE | CREATE)
29914 ** ReadOnly() -> (READONLY)
29915 ** OpenExclusive() -> (READWRITE | CREATE | EXCLUSIVE)
29917 ** The old OpenExclusive() accepted a boolean argument - "delFlag". If
29918 ** true, the file was configured to be automatically deleted when the
29919 ** file handle closed. To achieve the same effect using this new
29920 ** interface, add the DELETEONCLOSE flag to those specified above for
29921 ** OpenExclusive().
29923 static int unixOpen(
29924 sqlite3_vfs *pVfs, /* The VFS for which this is the xOpen method */
29925 const char *zPath, /* Pathname of file to be opened */
29926 sqlite3_file *pFile, /* The file descriptor to be filled in */
29927 int flags, /* Input flags to control the opening */
29928 int *pOutFlags /* Output flags returned to SQLite core */
29930 unixFile *p = (unixFile *)pFile;
29931 int fd = -1; /* File descriptor returned by open() */
29932 int openFlags = 0; /* Flags to pass to open() */
29933 int eType = flags&0xFFFFFF00; /* Type of file to open */
29934 int noLock; /* True to omit locking primitives */
29935 int rc = SQLITE_OK; /* Function Return Code */
29936 int ctrlFlags = 0; /* UNIXFILE_* flags */
29938 int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE);
29939 int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE);
29940 int isCreate = (flags & SQLITE_OPEN_CREATE);
29941 int isReadonly = (flags & SQLITE_OPEN_READONLY);
29942 int isReadWrite = (flags & SQLITE_OPEN_READWRITE);
29943 #if SQLITE_ENABLE_LOCKING_STYLE
29944 int isAutoProxy = (flags & SQLITE_OPEN_AUTOPROXY);
29945 #endif
29946 #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
29947 struct statfs fsInfo;
29948 #endif
29950 /* If creating a master or main-file journal, this function will open
29951 ** a file-descriptor on the directory too. The first time unixSync()
29952 ** is called the directory file descriptor will be fsync()ed and close()d.
29954 int syncDir = (isCreate && (
29955 eType==SQLITE_OPEN_MASTER_JOURNAL
29956 || eType==SQLITE_OPEN_MAIN_JOURNAL
29957 || eType==SQLITE_OPEN_WAL
29960 /* If argument zPath is a NULL pointer, this function is required to open
29961 ** a temporary file. Use this buffer to store the file name in.
29963 char zTmpname[MAX_PATHNAME+2];
29964 const char *zName = zPath;
29966 /* Check the following statements are true:
29968 ** (a) Exactly one of the READWRITE and READONLY flags must be set, and
29969 ** (b) if CREATE is set, then READWRITE must also be set, and
29970 ** (c) if EXCLUSIVE is set, then CREATE must also be set.
29971 ** (d) if DELETEONCLOSE is set, then CREATE must also be set.
29973 assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
29974 assert(isCreate==0 || isReadWrite);
29975 assert(isExclusive==0 || isCreate);
29976 assert(isDelete==0 || isCreate);
29978 /* The main DB, main journal, WAL file and master journal are never
29979 ** automatically deleted. Nor are they ever temporary files. */
29980 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
29981 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
29982 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
29983 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
29985 /* Assert that the upper layer has set one of the "file-type" flags. */
29986 assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB
29987 || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
29988 || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
29989 || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
29992 memset(p, 0, sizeof(unixFile));
29994 if( eType==SQLITE_OPEN_MAIN_DB ){
29995 UnixUnusedFd *pUnused;
29996 pUnused = findReusableFd(zName, flags);
29997 if( pUnused ){
29998 fd = pUnused->fd;
29999 }else{
30000 pUnused = sqlite3_malloc(sizeof(*pUnused));
30001 if( !pUnused ){
30002 return SQLITE_NOMEM;
30005 p->pUnused = pUnused;
30007 /* Database filenames are double-zero terminated if they are not
30008 ** URIs with parameters. Hence, they can always be passed into
30009 ** sqlite3_uri_parameter(). */
30010 assert( (flags & SQLITE_OPEN_URI) || zName[strlen(zName)+1]==0 );
30012 }else if( !zName ){
30013 /* If zName is NULL, the upper layer is requesting a temp file. */
30014 assert(isDelete && !syncDir);
30015 rc = unixGetTempname(MAX_PATHNAME+2, zTmpname);
30016 if( rc!=SQLITE_OK ){
30017 return rc;
30019 zName = zTmpname;
30021 /* Generated temporary filenames are always double-zero terminated
30022 ** for use by sqlite3_uri_parameter(). */
30023 assert( zName[strlen(zName)+1]==0 );
30026 /* Determine the value of the flags parameter passed to POSIX function
30027 ** open(). These must be calculated even if open() is not called, as
30028 ** they may be stored as part of the file handle and used by the
30029 ** 'conch file' locking functions later on. */
30030 if( isReadonly ) openFlags |= O_RDONLY;
30031 if( isReadWrite ) openFlags |= O_RDWR;
30032 if( isCreate ) openFlags |= O_CREAT;
30033 if( isExclusive ) openFlags |= (O_EXCL|O_NOFOLLOW);
30034 openFlags |= (O_LARGEFILE|O_BINARY);
30036 if( fd<0 ){
30037 mode_t openMode; /* Permissions to create file with */
30038 rc = findCreateFileMode(zName, flags, &openMode);
30039 if( rc!=SQLITE_OK ){
30040 assert( !p->pUnused );
30041 assert( eType==SQLITE_OPEN_WAL || eType==SQLITE_OPEN_MAIN_JOURNAL );
30042 return rc;
30044 fd = robust_open(zName, openFlags, openMode);
30045 OSTRACE(("OPENX %-3d %s 0%o\n", fd, zName, openFlags));
30046 if( fd<0 && errno!=EISDIR && isReadWrite && !isExclusive ){
30047 /* Failed to open the file for read/write access. Try read-only. */
30048 flags &= ~(SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE);
30049 openFlags &= ~(O_RDWR|O_CREAT);
30050 flags |= SQLITE_OPEN_READONLY;
30051 openFlags |= O_RDONLY;
30052 isReadonly = 1;
30053 fd = robust_open(zName, openFlags, openMode);
30055 if( fd<0 ){
30056 rc = unixLogError(SQLITE_CANTOPEN_BKPT, "open", zName);
30057 goto open_finished;
30060 assert( fd>=0 );
30061 if( pOutFlags ){
30062 *pOutFlags = flags;
30065 if( p->pUnused ){
30066 p->pUnused->fd = fd;
30067 p->pUnused->flags = flags;
30070 if( isDelete ){
30071 #if OS_VXWORKS
30072 zPath = zName;
30073 #else
30074 osUnlink(zName);
30075 #endif
30077 #if SQLITE_ENABLE_LOCKING_STYLE
30078 else{
30079 p->openFlags = openFlags;
30081 #endif
30083 #ifdef FD_CLOEXEC
30084 osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
30085 #endif
30087 noLock = eType!=SQLITE_OPEN_MAIN_DB;
30090 #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
30091 if( fstatfs(fd, &fsInfo) == -1 ){
30092 ((unixFile*)pFile)->lastErrno = errno;
30093 robust_close(p, fd, __LINE__);
30094 return SQLITE_IOERR_ACCESS;
30096 if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) {
30097 ((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS;
30099 #endif
30101 /* Set up appropriate ctrlFlags */
30102 if( isDelete ) ctrlFlags |= UNIXFILE_DELETE;
30103 if( isReadonly ) ctrlFlags |= UNIXFILE_RDONLY;
30104 if( noLock ) ctrlFlags |= UNIXFILE_NOLOCK;
30105 if( syncDir ) ctrlFlags |= UNIXFILE_DIRSYNC;
30106 if( flags & SQLITE_OPEN_URI ) ctrlFlags |= UNIXFILE_URI;
30108 #if SQLITE_ENABLE_LOCKING_STYLE
30109 #if SQLITE_PREFER_PROXY_LOCKING
30110 isAutoProxy = 1;
30111 #endif
30112 if( isAutoProxy && (zPath!=NULL) && (!noLock) && pVfs->xOpen ){
30113 char *envforce = getenv("SQLITE_FORCE_PROXY_LOCKING");
30114 int useProxy = 0;
30116 /* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, 0 means
30117 ** never use proxy, NULL means use proxy for non-local files only. */
30118 if( envforce!=NULL ){
30119 useProxy = atoi(envforce)>0;
30120 }else{
30121 if( statfs(zPath, &fsInfo) == -1 ){
30122 /* In theory, the close(fd) call is sub-optimal. If the file opened
30123 ** with fd is a database file, and there are other connections open
30124 ** on that file that are currently holding advisory locks on it,
30125 ** then the call to close() will cancel those locks. In practice,
30126 ** we're assuming that statfs() doesn't fail very often. At least
30127 ** not while other file descriptors opened by the same process on
30128 ** the same file are working. */
30129 p->lastErrno = errno;
30130 robust_close(p, fd, __LINE__);
30131 rc = SQLITE_IOERR_ACCESS;
30132 goto open_finished;
30134 useProxy = !(fsInfo.f_flags&MNT_LOCAL);
30136 if( useProxy ){
30137 rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags);
30138 if( rc==SQLITE_OK ){
30139 rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:");
30140 if( rc!=SQLITE_OK ){
30141 /* Use unixClose to clean up the resources added in fillInUnixFile
30142 ** and clear all the structure's references. Specifically,
30143 ** pFile->pMethods will be NULL so sqlite3OsClose will be a no-op
30145 unixClose(pFile);
30146 return rc;
30149 goto open_finished;
30152 #endif
30154 rc = fillInUnixFile(pVfs, fd, pFile, zPath, ctrlFlags);
30156 open_finished:
30157 if( rc!=SQLITE_OK ){
30158 sqlite3_free(p->pUnused);
30160 return rc;
30165 ** Delete the file at zPath. If the dirSync argument is true, fsync()
30166 ** the directory after deleting the file.
30168 static int unixDelete(
30169 sqlite3_vfs *NotUsed, /* VFS containing this as the xDelete method */
30170 const char *zPath, /* Name of file to be deleted */
30171 int dirSync /* If true, fsync() directory after deleting file */
30173 int rc = SQLITE_OK;
30174 UNUSED_PARAMETER(NotUsed);
30175 SimulateIOError(return SQLITE_IOERR_DELETE);
30176 if( osUnlink(zPath)==(-1) && errno!=ENOENT ){
30177 return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
30179 #ifndef SQLITE_DISABLE_DIRSYNC
30180 if( (dirSync & 1)!=0 ){
30181 int fd;
30182 rc = osOpenDirectory(zPath, &fd);
30183 if( rc==SQLITE_OK ){
30184 #if OS_VXWORKS
30185 if( fsync(fd)==-1 )
30186 #else
30187 if( fsync(fd) )
30188 #endif
30190 rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath);
30192 robust_close(0, fd, __LINE__);
30193 }else if( rc==SQLITE_CANTOPEN ){
30194 rc = SQLITE_OK;
30197 #endif
30198 return rc;
30202 ** Test the existance of or access permissions of file zPath. The
30203 ** test performed depends on the value of flags:
30205 ** SQLITE_ACCESS_EXISTS: Return 1 if the file exists
30206 ** SQLITE_ACCESS_READWRITE: Return 1 if the file is read and writable.
30207 ** SQLITE_ACCESS_READONLY: Return 1 if the file is readable.
30209 ** Otherwise return 0.
30211 static int unixAccess(
30212 sqlite3_vfs *NotUsed, /* The VFS containing this xAccess method */
30213 const char *zPath, /* Path of the file to examine */
30214 int flags, /* What do we want to learn about the zPath file? */
30215 int *pResOut /* Write result boolean here */
30217 int amode = 0;
30218 UNUSED_PARAMETER(NotUsed);
30219 SimulateIOError( return SQLITE_IOERR_ACCESS; );
30220 switch( flags ){
30221 case SQLITE_ACCESS_EXISTS:
30222 amode = F_OK;
30223 break;
30224 case SQLITE_ACCESS_READWRITE:
30225 amode = W_OK|R_OK;
30226 break;
30227 case SQLITE_ACCESS_READ:
30228 amode = R_OK;
30229 break;
30231 default:
30232 assert(!"Invalid flags argument");
30234 *pResOut = (osAccess(zPath, amode)==0);
30235 if( flags==SQLITE_ACCESS_EXISTS && *pResOut ){
30236 struct stat buf;
30237 if( 0==osStat(zPath, &buf) && buf.st_size==0 ){
30238 *pResOut = 0;
30241 return SQLITE_OK;
30246 ** Turn a relative pathname into a full pathname. The relative path
30247 ** is stored as a nul-terminated string in the buffer pointed to by
30248 ** zPath.
30250 ** zOut points to a buffer of at least sqlite3_vfs.mxPathname bytes
30251 ** (in this case, MAX_PATHNAME bytes). The full-path is written to
30252 ** this buffer before returning.
30254 static int unixFullPathname(
30255 sqlite3_vfs *pVfs, /* Pointer to vfs object */
30256 const char *zPath, /* Possibly relative input path */
30257 int nOut, /* Size of output buffer in bytes */
30258 char *zOut /* Output buffer */
30261 /* It's odd to simulate an io-error here, but really this is just
30262 ** using the io-error infrastructure to test that SQLite handles this
30263 ** function failing. This function could fail if, for example, the
30264 ** current working directory has been unlinked.
30266 SimulateIOError( return SQLITE_ERROR );
30268 assert( pVfs->mxPathname==MAX_PATHNAME );
30269 UNUSED_PARAMETER(pVfs);
30271 zOut[nOut-1] = '\0';
30272 if( zPath[0]=='/' ){
30273 sqlite3_snprintf(nOut, zOut, "%s", zPath);
30274 }else{
30275 int nCwd;
30276 if( osGetcwd(zOut, nOut-1)==0 ){
30277 return unixLogError(SQLITE_CANTOPEN_BKPT, "getcwd", zPath);
30279 nCwd = (int)strlen(zOut);
30280 sqlite3_snprintf(nOut-nCwd, &zOut[nCwd], "/%s", zPath);
30282 return SQLITE_OK;
30286 #ifndef SQLITE_OMIT_LOAD_EXTENSION
30288 ** Interfaces for opening a shared library, finding entry points
30289 ** within the shared library, and closing the shared library.
30291 #include <dlfcn.h>
30292 static void *unixDlOpen(sqlite3_vfs *NotUsed, const char *zFilename){
30293 UNUSED_PARAMETER(NotUsed);
30294 return dlopen(zFilename, RTLD_NOW | RTLD_GLOBAL);
30298 ** SQLite calls this function immediately after a call to unixDlSym() or
30299 ** unixDlOpen() fails (returns a null pointer). If a more detailed error
30300 ** message is available, it is written to zBufOut. If no error message
30301 ** is available, zBufOut is left unmodified and SQLite uses a default
30302 ** error message.
30304 static void unixDlError(sqlite3_vfs *NotUsed, int nBuf, char *zBufOut){
30305 const char *zErr;
30306 UNUSED_PARAMETER(NotUsed);
30307 unixEnterMutex();
30308 zErr = dlerror();
30309 if( zErr ){
30310 sqlite3_snprintf(nBuf, zBufOut, "%s", zErr);
30312 unixLeaveMutex();
30314 static void (*unixDlSym(sqlite3_vfs *NotUsed, void *p, const char*zSym))(void){
30316 ** GCC with -pedantic-errors says that C90 does not allow a void* to be
30317 ** cast into a pointer to a function. And yet the library dlsym() routine
30318 ** returns a void* which is really a pointer to a function. So how do we
30319 ** use dlsym() with -pedantic-errors?
30321 ** Variable x below is defined to be a pointer to a function taking
30322 ** parameters void* and const char* and returning a pointer to a function.
30323 ** We initialize x by assigning it a pointer to the dlsym() function.
30324 ** (That assignment requires a cast.) Then we call the function that
30325 ** x points to.
30327 ** This work-around is unlikely to work correctly on any system where
30328 ** you really cannot cast a function pointer into void*. But then, on the
30329 ** other hand, dlsym() will not work on such a system either, so we have
30330 ** not really lost anything.
30332 void (*(*x)(void*,const char*))(void);
30333 UNUSED_PARAMETER(NotUsed);
30334 x = (void(*(*)(void*,const char*))(void))dlsym;
30335 return (*x)(p, zSym);
30337 static void unixDlClose(sqlite3_vfs *NotUsed, void *pHandle){
30338 UNUSED_PARAMETER(NotUsed);
30339 dlclose(pHandle);
30341 #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
30342 #define unixDlOpen 0
30343 #define unixDlError 0
30344 #define unixDlSym 0
30345 #define unixDlClose 0
30346 #endif
30349 ** Write nBuf bytes of random data to the supplied buffer zBuf.
30351 static int unixRandomness(sqlite3_vfs *NotUsed, int nBuf, char *zBuf){
30352 UNUSED_PARAMETER(NotUsed);
30353 assert((size_t)nBuf>=(sizeof(time_t)+sizeof(int)));
30355 /* We have to initialize zBuf to prevent valgrind from reporting
30356 ** errors. The reports issued by valgrind are incorrect - we would
30357 ** prefer that the randomness be increased by making use of the
30358 ** uninitialized space in zBuf - but valgrind errors tend to worry
30359 ** some users. Rather than argue, it seems easier just to initialize
30360 ** the whole array and silence valgrind, even if that means less randomness
30361 ** in the random seed.
30363 ** When testing, initializing zBuf[] to zero is all we do. That means
30364 ** that we always use the same random number sequence. This makes the
30365 ** tests repeatable.
30367 memset(zBuf, 0, nBuf);
30368 #if !defined(SQLITE_TEST)
30370 int pid, fd;
30371 fd = robust_open("/dev/urandom", O_RDONLY, 0);
30372 if( fd<0 ){
30373 time_t t;
30374 time(&t);
30375 memcpy(zBuf, &t, sizeof(t));
30376 pid = getpid();
30377 memcpy(&zBuf[sizeof(t)], &pid, sizeof(pid));
30378 assert( sizeof(t)+sizeof(pid)<=(size_t)nBuf );
30379 nBuf = sizeof(t) + sizeof(pid);
30380 }else{
30381 do{ nBuf = osRead(fd, zBuf, nBuf); }while( nBuf<0 && errno==EINTR );
30382 robust_close(0, fd, __LINE__);
30385 #endif
30386 return nBuf;
30391 ** Sleep for a little while. Return the amount of time slept.
30392 ** The argument is the number of microseconds we want to sleep.
30393 ** The return value is the number of microseconds of sleep actually
30394 ** requested from the underlying operating system, a number which
30395 ** might be greater than or equal to the argument, but not less
30396 ** than the argument.
30398 static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
30399 #if OS_VXWORKS
30400 struct timespec sp;
30402 sp.tv_sec = microseconds / 1000000;
30403 sp.tv_nsec = (microseconds % 1000000) * 1000;
30404 nanosleep(&sp, NULL);
30405 UNUSED_PARAMETER(NotUsed);
30406 return microseconds;
30407 #elif defined(HAVE_USLEEP) && HAVE_USLEEP
30408 usleep(microseconds);
30409 UNUSED_PARAMETER(NotUsed);
30410 return microseconds;
30411 #else
30412 int seconds = (microseconds+999999)/1000000;
30413 sleep(seconds);
30414 UNUSED_PARAMETER(NotUsed);
30415 return seconds*1000000;
30416 #endif
30420 ** The following variable, if set to a non-zero value, is interpreted as
30421 ** the number of seconds since 1970 and is used to set the result of
30422 ** sqlite3OsCurrentTime() during testing.
30424 #ifdef SQLITE_TEST
30425 SQLITE_API int sqlite3_current_time = 0; /* Fake system time in seconds since 1970. */
30426 #endif
30429 ** Find the current time (in Universal Coordinated Time). Write into *piNow
30430 ** the current time and date as a Julian Day number times 86_400_000. In
30431 ** other words, write into *piNow the number of milliseconds since the Julian
30432 ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
30433 ** proleptic Gregorian calendar.
30435 ** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date
30436 ** cannot be found.
30438 static int unixCurrentTimeInt64(sqlite3_vfs *NotUsed, sqlite3_int64 *piNow){
30439 static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
30440 int rc = SQLITE_OK;
30441 #if defined(NO_GETTOD)
30442 time_t t;
30443 time(&t);
30444 *piNow = ((sqlite3_int64)t)*1000 + unixEpoch;
30445 #elif OS_VXWORKS
30446 struct timespec sNow;
30447 clock_gettime(CLOCK_REALTIME, &sNow);
30448 *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_nsec/1000000;
30449 #else
30450 struct timeval sNow;
30451 if( gettimeofday(&sNow, 0)==0 ){
30452 *piNow = unixEpoch + 1000*(sqlite3_int64)sNow.tv_sec + sNow.tv_usec/1000;
30453 }else{
30454 rc = SQLITE_ERROR;
30456 #endif
30458 #ifdef SQLITE_TEST
30459 if( sqlite3_current_time ){
30460 *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
30462 #endif
30463 UNUSED_PARAMETER(NotUsed);
30464 return rc;
30468 ** Find the current time (in Universal Coordinated Time). Write the
30469 ** current time and date as a Julian Day number into *prNow and
30470 ** return 0. Return 1 if the time and date cannot be found.
30472 static int unixCurrentTime(sqlite3_vfs *NotUsed, double *prNow){
30473 sqlite3_int64 i = 0;
30474 int rc;
30475 UNUSED_PARAMETER(NotUsed);
30476 rc = unixCurrentTimeInt64(0, &i);
30477 *prNow = i/86400000.0;
30478 return rc;
30482 ** We added the xGetLastError() method with the intention of providing
30483 ** better low-level error messages when operating-system problems come up
30484 ** during SQLite operation. But so far, none of that has been implemented
30485 ** in the core. So this routine is never called. For now, it is merely
30486 ** a place-holder.
30488 static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){
30489 UNUSED_PARAMETER(NotUsed);
30490 UNUSED_PARAMETER(NotUsed2);
30491 UNUSED_PARAMETER(NotUsed3);
30492 return 0;
30497 ************************ End of sqlite3_vfs methods ***************************
30498 ******************************************************************************/
30500 /******************************************************************************
30501 ************************** Begin Proxy Locking ********************************
30503 ** Proxy locking is a "uber-locking-method" in this sense: It uses the
30504 ** other locking methods on secondary lock files. Proxy locking is a
30505 ** meta-layer over top of the primitive locking implemented above. For
30506 ** this reason, the division that implements of proxy locking is deferred
30507 ** until late in the file (here) after all of the other I/O methods have
30508 ** been defined - so that the primitive locking methods are available
30509 ** as services to help with the implementation of proxy locking.
30511 ****
30513 ** The default locking schemes in SQLite use byte-range locks on the
30514 ** database file to coordinate safe, concurrent access by multiple readers
30515 ** and writers [http://sqlite.org/lockingv3.html]. The five file locking
30516 ** states (UNLOCKED, PENDING, SHARED, RESERVED, EXCLUSIVE) are implemented
30517 ** as POSIX read & write locks over fixed set of locations (via fsctl),
30518 ** on AFP and SMB only exclusive byte-range locks are available via fsctl
30519 ** with _IOWR('z', 23, struct ByteRangeLockPB2) to track the same 5 states.
30520 ** To simulate a F_RDLCK on the shared range, on AFP a randomly selected
30521 ** address in the shared range is taken for a SHARED lock, the entire
30522 ** shared range is taken for an EXCLUSIVE lock):
30524 ** PENDING_BYTE 0x40000000
30525 ** RESERVED_BYTE 0x40000001
30526 ** SHARED_RANGE 0x40000002 -> 0x40000200
30528 ** This works well on the local file system, but shows a nearly 100x
30529 ** slowdown in read performance on AFP because the AFP client disables
30530 ** the read cache when byte-range locks are present. Enabling the read
30531 ** cache exposes a cache coherency problem that is present on all OS X
30532 ** supported network file systems. NFS and AFP both observe the
30533 ** close-to-open semantics for ensuring cache coherency
30534 ** [http://nfs.sourceforge.net/#faq_a8], which does not effectively
30535 ** address the requirements for concurrent database access by multiple
30536 ** readers and writers
30537 ** [http://www.nabble.com/SQLite-on-NFS-cache-coherency-td15655701.html].
30539 ** To address the performance and cache coherency issues, proxy file locking
30540 ** changes the way database access is controlled by limiting access to a
30541 ** single host at a time and moving file locks off of the database file
30542 ** and onto a proxy file on the local file system.
30545 ** Using proxy locks
30546 ** -----------------
30548 ** C APIs
30550 ** sqlite3_file_control(db, dbname, SQLITE_SET_LOCKPROXYFILE,
30551 ** <proxy_path> | ":auto:");
30552 ** sqlite3_file_control(db, dbname, SQLITE_GET_LOCKPROXYFILE, &<proxy_path>);
30555 ** SQL pragmas
30557 ** PRAGMA [database.]lock_proxy_file=<proxy_path> | :auto:
30558 ** PRAGMA [database.]lock_proxy_file
30560 ** Specifying ":auto:" means that if there is a conch file with a matching
30561 ** host ID in it, the proxy path in the conch file will be used, otherwise
30562 ** a proxy path based on the user's temp dir
30563 ** (via confstr(_CS_DARWIN_USER_TEMP_DIR,...)) will be used and the
30564 ** actual proxy file name is generated from the name and path of the
30565 ** database file. For example:
30567 ** For database path "/Users/me/foo.db"
30568 ** The lock path will be "<tmpdir>/sqliteplocks/_Users_me_foo.db:auto:")
30570 ** Once a lock proxy is configured for a database connection, it can not
30571 ** be removed, however it may be switched to a different proxy path via
30572 ** the above APIs (assuming the conch file is not being held by another
30573 ** connection or process).
30576 ** How proxy locking works
30577 ** -----------------------
30579 ** Proxy file locking relies primarily on two new supporting files:
30581 ** * conch file to limit access to the database file to a single host
30582 ** at a time
30584 ** * proxy file to act as a proxy for the advisory locks normally
30585 ** taken on the database
30587 ** The conch file - to use a proxy file, sqlite must first "hold the conch"
30588 ** by taking an sqlite-style shared lock on the conch file, reading the
30589 ** contents and comparing the host's unique host ID (see below) and lock
30590 ** proxy path against the values stored in the conch. The conch file is
30591 ** stored in the same directory as the database file and the file name
30592 ** is patterned after the database file name as ".<databasename>-conch".
30593 ** If the conch file does not exist, or it's contents do not match the
30594 ** host ID and/or proxy path, then the lock is escalated to an exclusive
30595 ** lock and the conch file contents is updated with the host ID and proxy
30596 ** path and the lock is downgraded to a shared lock again. If the conch
30597 ** is held by another process (with a shared lock), the exclusive lock
30598 ** will fail and SQLITE_BUSY is returned.
30600 ** The proxy file - a single-byte file used for all advisory file locks
30601 ** normally taken on the database file. This allows for safe sharing
30602 ** of the database file for multiple readers and writers on the same
30603 ** host (the conch ensures that they all use the same local lock file).
30605 ** Requesting the lock proxy does not immediately take the conch, it is
30606 ** only taken when the first request to lock database file is made.
30607 ** This matches the semantics of the traditional locking behavior, where
30608 ** opening a connection to a database file does not take a lock on it.
30609 ** The shared lock and an open file descriptor are maintained until
30610 ** the connection to the database is closed.
30612 ** The proxy file and the lock file are never deleted so they only need
30613 ** to be created the first time they are used.
30615 ** Configuration options
30616 ** ---------------------
30618 ** SQLITE_PREFER_PROXY_LOCKING
30620 ** Database files accessed on non-local file systems are
30621 ** automatically configured for proxy locking, lock files are
30622 ** named automatically using the same logic as
30623 ** PRAGMA lock_proxy_file=":auto:"
30625 ** SQLITE_PROXY_DEBUG
30627 ** Enables the logging of error messages during host id file
30628 ** retrieval and creation
30630 ** LOCKPROXYDIR
30632 ** Overrides the default directory used for lock proxy files that
30633 ** are named automatically via the ":auto:" setting
30635 ** SQLITE_DEFAULT_PROXYDIR_PERMISSIONS
30637 ** Permissions to use when creating a directory for storing the
30638 ** lock proxy files, only used when LOCKPROXYDIR is not set.
30641 ** As mentioned above, when compiled with SQLITE_PREFER_PROXY_LOCKING,
30642 ** setting the environment variable SQLITE_FORCE_PROXY_LOCKING to 1 will
30643 ** force proxy locking to be used for every database file opened, and 0
30644 ** will force automatic proxy locking to be disabled for all database
30645 ** files (explicity calling the SQLITE_SET_LOCKPROXYFILE pragma or
30646 ** sqlite_file_control API is not affected by SQLITE_FORCE_PROXY_LOCKING).
30650 ** Proxy locking is only available on MacOSX
30652 #if defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE
30655 ** The proxyLockingContext has the path and file structures for the remote
30656 ** and local proxy files in it
30658 typedef struct proxyLockingContext proxyLockingContext;
30659 struct proxyLockingContext {
30660 unixFile *conchFile; /* Open conch file */
30661 char *conchFilePath; /* Name of the conch file */
30662 unixFile *lockProxy; /* Open proxy lock file */
30663 char *lockProxyPath; /* Name of the proxy lock file */
30664 char *dbPath; /* Name of the open file */
30665 int conchHeld; /* 1 if the conch is held, -1 if lockless */
30666 void *oldLockingContext; /* Original lockingcontext to restore on close */
30667 sqlite3_io_methods const *pOldMethod; /* Original I/O methods for close */
30671 ** The proxy lock file path for the database at dbPath is written into lPath,
30672 ** which must point to valid, writable memory large enough for a maxLen length
30673 ** file path.
30675 static int proxyGetLockPath(const char *dbPath, char *lPath, size_t maxLen){
30676 int len;
30677 int dbLen;
30678 int i;
30680 #ifdef LOCKPROXYDIR
30681 len = strlcpy(lPath, LOCKPROXYDIR, maxLen);
30682 #else
30683 # ifdef _CS_DARWIN_USER_TEMP_DIR
30685 if( !confstr(_CS_DARWIN_USER_TEMP_DIR, lPath, maxLen) ){
30686 OSTRACE(("GETLOCKPATH failed %s errno=%d pid=%d\n",
30687 lPath, errno, getpid()));
30688 return SQLITE_IOERR_LOCK;
30690 len = strlcat(lPath, "sqliteplocks", maxLen);
30692 # else
30693 len = strlcpy(lPath, "/tmp/", maxLen);
30694 # endif
30695 #endif
30697 if( lPath[len-1]!='/' ){
30698 len = strlcat(lPath, "/", maxLen);
30701 /* transform the db path to a unique cache name */
30702 dbLen = (int)strlen(dbPath);
30703 for( i=0; i<dbLen && (i+len+7)<(int)maxLen; i++){
30704 char c = dbPath[i];
30705 lPath[i+len] = (c=='/')?'_':c;
30707 lPath[i+len]='\0';
30708 strlcat(lPath, ":auto:", maxLen);
30709 OSTRACE(("GETLOCKPATH proxy lock path=%s pid=%d\n", lPath, getpid()));
30710 return SQLITE_OK;
30714 ** Creates the lock file and any missing directories in lockPath
30716 static int proxyCreateLockPath(const char *lockPath){
30717 int i, len;
30718 char buf[MAXPATHLEN];
30719 int start = 0;
30721 assert(lockPath!=NULL);
30722 /* try to create all the intermediate directories */
30723 len = (int)strlen(lockPath);
30724 buf[0] = lockPath[0];
30725 for( i=1; i<len; i++ ){
30726 if( lockPath[i] == '/' && (i - start > 0) ){
30727 /* only mkdir if leaf dir != "." or "/" or ".." */
30728 if( i-start>2 || (i-start==1 && buf[start] != '.' && buf[start] != '/')
30729 || (i-start==2 && buf[start] != '.' && buf[start+1] != '.') ){
30730 buf[i]='\0';
30731 if( osMkdir(buf, SQLITE_DEFAULT_PROXYDIR_PERMISSIONS) ){
30732 int err=errno;
30733 if( err!=EEXIST ) {
30734 OSTRACE(("CREATELOCKPATH FAILED creating %s, "
30735 "'%s' proxy lock path=%s pid=%d\n",
30736 buf, strerror(err), lockPath, getpid()));
30737 return err;
30741 start=i+1;
30743 buf[i] = lockPath[i];
30745 OSTRACE(("CREATELOCKPATH proxy lock path=%s pid=%d\n", lockPath, getpid()));
30746 return 0;
30750 ** Create a new VFS file descriptor (stored in memory obtained from
30751 ** sqlite3_malloc) and open the file named "path" in the file descriptor.
30753 ** The caller is responsible not only for closing the file descriptor
30754 ** but also for freeing the memory associated with the file descriptor.
30756 static int proxyCreateUnixFile(
30757 const char *path, /* path for the new unixFile */
30758 unixFile **ppFile, /* unixFile created and returned by ref */
30759 int islockfile /* if non zero missing dirs will be created */
30761 int fd = -1;
30762 unixFile *pNew;
30763 int rc = SQLITE_OK;
30764 int openFlags = O_RDWR | O_CREAT;
30765 sqlite3_vfs dummyVfs;
30766 int terrno = 0;
30767 UnixUnusedFd *pUnused = NULL;
30769 /* 1. first try to open/create the file
30770 ** 2. if that fails, and this is a lock file (not-conch), try creating
30771 ** the parent directories and then try again.
30772 ** 3. if that fails, try to open the file read-only
30773 ** otherwise return BUSY (if lock file) or CANTOPEN for the conch file
30775 pUnused = findReusableFd(path, openFlags);
30776 if( pUnused ){
30777 fd = pUnused->fd;
30778 }else{
30779 pUnused = sqlite3_malloc(sizeof(*pUnused));
30780 if( !pUnused ){
30781 return SQLITE_NOMEM;
30784 if( fd<0 ){
30785 fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
30786 terrno = errno;
30787 if( fd<0 && errno==ENOENT && islockfile ){
30788 if( proxyCreateLockPath(path) == SQLITE_OK ){
30789 fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
30793 if( fd<0 ){
30794 openFlags = O_RDONLY;
30795 fd = robust_open(path, openFlags, SQLITE_DEFAULT_FILE_PERMISSIONS);
30796 terrno = errno;
30798 if( fd<0 ){
30799 if( islockfile ){
30800 return SQLITE_BUSY;
30802 switch (terrno) {
30803 case EACCES:
30804 return SQLITE_PERM;
30805 case EIO:
30806 return SQLITE_IOERR_LOCK; /* even though it is the conch */
30807 default:
30808 return SQLITE_CANTOPEN_BKPT;
30812 pNew = (unixFile *)sqlite3_malloc(sizeof(*pNew));
30813 if( pNew==NULL ){
30814 rc = SQLITE_NOMEM;
30815 goto end_create_proxy;
30817 memset(pNew, 0, sizeof(unixFile));
30818 pNew->openFlags = openFlags;
30819 memset(&dummyVfs, 0, sizeof(dummyVfs));
30820 dummyVfs.pAppData = (void*)&autolockIoFinder;
30821 dummyVfs.zName = "dummy";
30822 pUnused->fd = fd;
30823 pUnused->flags = openFlags;
30824 pNew->pUnused = pUnused;
30826 rc = fillInUnixFile(&dummyVfs, fd, (sqlite3_file*)pNew, path, 0);
30827 if( rc==SQLITE_OK ){
30828 *ppFile = pNew;
30829 return SQLITE_OK;
30831 end_create_proxy:
30832 robust_close(pNew, fd, __LINE__);
30833 sqlite3_free(pNew);
30834 sqlite3_free(pUnused);
30835 return rc;
30838 #ifdef SQLITE_TEST
30839 /* simulate multiple hosts by creating unique hostid file paths */
30840 SQLITE_API int sqlite3_hostid_num = 0;
30841 #endif
30843 #define PROXY_HOSTIDLEN 16 /* conch file host id length */
30845 /* Not always defined in the headers as it ought to be */
30846 extern int gethostuuid(uuid_t id, const struct timespec *wait);
30848 /* get the host ID via gethostuuid(), pHostID must point to PROXY_HOSTIDLEN
30849 ** bytes of writable memory.
30851 static int proxyGetHostID(unsigned char *pHostID, int *pError){
30852 assert(PROXY_HOSTIDLEN == sizeof(uuid_t));
30853 memset(pHostID, 0, PROXY_HOSTIDLEN);
30854 #if defined(__MAX_OS_X_VERSION_MIN_REQUIRED)\
30855 && __MAC_OS_X_VERSION_MIN_REQUIRED<1050
30857 static const struct timespec timeout = {1, 0}; /* 1 sec timeout */
30858 if( gethostuuid(pHostID, &timeout) ){
30859 int err = errno;
30860 if( pError ){
30861 *pError = err;
30863 return SQLITE_IOERR;
30866 #else
30867 UNUSED_PARAMETER(pError);
30868 #endif
30869 #ifdef SQLITE_TEST
30870 /* simulate multiple hosts by creating unique hostid file paths */
30871 if( sqlite3_hostid_num != 0){
30872 pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF));
30874 #endif
30876 return SQLITE_OK;
30879 /* The conch file contains the header, host id and lock file path
30881 #define PROXY_CONCHVERSION 2 /* 1-byte header, 16-byte host id, path */
30882 #define PROXY_HEADERLEN 1 /* conch file header length */
30883 #define PROXY_PATHINDEX (PROXY_HEADERLEN+PROXY_HOSTIDLEN)
30884 #define PROXY_MAXCONCHLEN (PROXY_HEADERLEN+PROXY_HOSTIDLEN+MAXPATHLEN)
30887 ** Takes an open conch file, copies the contents to a new path and then moves
30888 ** it back. The newly created file's file descriptor is assigned to the
30889 ** conch file structure and finally the original conch file descriptor is
30890 ** closed. Returns zero if successful.
30892 static int proxyBreakConchLock(unixFile *pFile, uuid_t myHostID){
30893 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
30894 unixFile *conchFile = pCtx->conchFile;
30895 char tPath[MAXPATHLEN];
30896 char buf[PROXY_MAXCONCHLEN];
30897 char *cPath = pCtx->conchFilePath;
30898 size_t readLen = 0;
30899 size_t pathLen = 0;
30900 char errmsg[64] = "";
30901 int fd = -1;
30902 int rc = -1;
30903 UNUSED_PARAMETER(myHostID);
30905 /* create a new path by replace the trailing '-conch' with '-break' */
30906 pathLen = strlcpy(tPath, cPath, MAXPATHLEN);
30907 if( pathLen>MAXPATHLEN || pathLen<6 ||
30908 (strlcpy(&tPath[pathLen-5], "break", 6) != 5) ){
30909 sqlite3_snprintf(sizeof(errmsg),errmsg,"path error (len %d)",(int)pathLen);
30910 goto end_breaklock;
30912 /* read the conch content */
30913 readLen = osPread(conchFile->h, buf, PROXY_MAXCONCHLEN, 0);
30914 if( readLen<PROXY_PATHINDEX ){
30915 sqlite3_snprintf(sizeof(errmsg),errmsg,"read error (len %d)",(int)readLen);
30916 goto end_breaklock;
30918 /* write it out to the temporary break file */
30919 fd = robust_open(tPath, (O_RDWR|O_CREAT|O_EXCL),
30920 SQLITE_DEFAULT_FILE_PERMISSIONS);
30921 if( fd<0 ){
30922 sqlite3_snprintf(sizeof(errmsg), errmsg, "create failed (%d)", errno);
30923 goto end_breaklock;
30925 if( osPwrite(fd, buf, readLen, 0) != (ssize_t)readLen ){
30926 sqlite3_snprintf(sizeof(errmsg), errmsg, "write failed (%d)", errno);
30927 goto end_breaklock;
30929 if( rename(tPath, cPath) ){
30930 sqlite3_snprintf(sizeof(errmsg), errmsg, "rename failed (%d)", errno);
30931 goto end_breaklock;
30933 rc = 0;
30934 fprintf(stderr, "broke stale lock on %s\n", cPath);
30935 robust_close(pFile, conchFile->h, __LINE__);
30936 conchFile->h = fd;
30937 conchFile->openFlags = O_RDWR | O_CREAT;
30939 end_breaklock:
30940 if( rc ){
30941 if( fd>=0 ){
30942 osUnlink(tPath);
30943 robust_close(pFile, fd, __LINE__);
30945 fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg);
30947 return rc;
30950 /* Take the requested lock on the conch file and break a stale lock if the
30951 ** host id matches.
30953 static int proxyConchLock(unixFile *pFile, uuid_t myHostID, int lockType){
30954 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
30955 unixFile *conchFile = pCtx->conchFile;
30956 int rc = SQLITE_OK;
30957 int nTries = 0;
30958 struct timespec conchModTime;
30960 memset(&conchModTime, 0, sizeof(conchModTime));
30961 do {
30962 rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
30963 nTries ++;
30964 if( rc==SQLITE_BUSY ){
30965 /* If the lock failed (busy):
30966 * 1st try: get the mod time of the conch, wait 0.5s and try again.
30967 * 2nd try: fail if the mod time changed or host id is different, wait
30968 * 10 sec and try again
30969 * 3rd try: break the lock unless the mod time has changed.
30971 struct stat buf;
30972 if( osFstat(conchFile->h, &buf) ){
30973 pFile->lastErrno = errno;
30974 return SQLITE_IOERR_LOCK;
30977 if( nTries==1 ){
30978 conchModTime = buf.st_mtimespec;
30979 usleep(500000); /* wait 0.5 sec and try the lock again*/
30980 continue;
30983 assert( nTries>1 );
30984 if( conchModTime.tv_sec != buf.st_mtimespec.tv_sec ||
30985 conchModTime.tv_nsec != buf.st_mtimespec.tv_nsec ){
30986 return SQLITE_BUSY;
30989 if( nTries==2 ){
30990 char tBuf[PROXY_MAXCONCHLEN];
30991 int len = osPread(conchFile->h, tBuf, PROXY_MAXCONCHLEN, 0);
30992 if( len<0 ){
30993 pFile->lastErrno = errno;
30994 return SQLITE_IOERR_LOCK;
30996 if( len>PROXY_PATHINDEX && tBuf[0]==(char)PROXY_CONCHVERSION){
30997 /* don't break the lock if the host id doesn't match */
30998 if( 0!=memcmp(&tBuf[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN) ){
30999 return SQLITE_BUSY;
31001 }else{
31002 /* don't break the lock on short read or a version mismatch */
31003 return SQLITE_BUSY;
31005 usleep(10000000); /* wait 10 sec and try the lock again */
31006 continue;
31009 assert( nTries==3 );
31010 if( 0==proxyBreakConchLock(pFile, myHostID) ){
31011 rc = SQLITE_OK;
31012 if( lockType==EXCLUSIVE_LOCK ){
31013 rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, SHARED_LOCK);
31015 if( !rc ){
31016 rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
31020 } while( rc==SQLITE_BUSY && nTries<3 );
31022 return rc;
31025 /* Takes the conch by taking a shared lock and read the contents conch, if
31026 ** lockPath is non-NULL, the host ID and lock file path must match. A NULL
31027 ** lockPath means that the lockPath in the conch file will be used if the
31028 ** host IDs match, or a new lock path will be generated automatically
31029 ** and written to the conch file.
31031 static int proxyTakeConch(unixFile *pFile){
31032 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31034 if( pCtx->conchHeld!=0 ){
31035 return SQLITE_OK;
31036 }else{
31037 unixFile *conchFile = pCtx->conchFile;
31038 uuid_t myHostID;
31039 int pError = 0;
31040 char readBuf[PROXY_MAXCONCHLEN];
31041 char lockPath[MAXPATHLEN];
31042 char *tempLockPath = NULL;
31043 int rc = SQLITE_OK;
31044 int createConch = 0;
31045 int hostIdMatch = 0;
31046 int readLen = 0;
31047 int tryOldLockPath = 0;
31048 int forceNewLockPath = 0;
31050 OSTRACE(("TAKECONCH %d for %s pid=%d\n", conchFile->h,
31051 (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"), getpid()));
31053 rc = proxyGetHostID(myHostID, &pError);
31054 if( (rc&0xff)==SQLITE_IOERR ){
31055 pFile->lastErrno = pError;
31056 goto end_takeconch;
31058 rc = proxyConchLock(pFile, myHostID, SHARED_LOCK);
31059 if( rc!=SQLITE_OK ){
31060 goto end_takeconch;
31062 /* read the existing conch file */
31063 readLen = seekAndRead((unixFile*)conchFile, 0, readBuf, PROXY_MAXCONCHLEN);
31064 if( readLen<0 ){
31065 /* I/O error: lastErrno set by seekAndRead */
31066 pFile->lastErrno = conchFile->lastErrno;
31067 rc = SQLITE_IOERR_READ;
31068 goto end_takeconch;
31069 }else if( readLen<=(PROXY_HEADERLEN+PROXY_HOSTIDLEN) ||
31070 readBuf[0]!=(char)PROXY_CONCHVERSION ){
31071 /* a short read or version format mismatch means we need to create a new
31072 ** conch file.
31074 createConch = 1;
31076 /* if the host id matches and the lock path already exists in the conch
31077 ** we'll try to use the path there, if we can't open that path, we'll
31078 ** retry with a new auto-generated path
31080 do { /* in case we need to try again for an :auto: named lock file */
31082 if( !createConch && !forceNewLockPath ){
31083 hostIdMatch = !memcmp(&readBuf[PROXY_HEADERLEN], myHostID,
31084 PROXY_HOSTIDLEN);
31085 /* if the conch has data compare the contents */
31086 if( !pCtx->lockProxyPath ){
31087 /* for auto-named local lock file, just check the host ID and we'll
31088 ** use the local lock file path that's already in there
31090 if( hostIdMatch ){
31091 size_t pathLen = (readLen - PROXY_PATHINDEX);
31093 if( pathLen>=MAXPATHLEN ){
31094 pathLen=MAXPATHLEN-1;
31096 memcpy(lockPath, &readBuf[PROXY_PATHINDEX], pathLen);
31097 lockPath[pathLen] = 0;
31098 tempLockPath = lockPath;
31099 tryOldLockPath = 1;
31100 /* create a copy of the lock path if the conch is taken */
31101 goto end_takeconch;
31103 }else if( hostIdMatch
31104 && !strncmp(pCtx->lockProxyPath, &readBuf[PROXY_PATHINDEX],
31105 readLen-PROXY_PATHINDEX)
31107 /* conch host and lock path match */
31108 goto end_takeconch;
31112 /* if the conch isn't writable and doesn't match, we can't take it */
31113 if( (conchFile->openFlags&O_RDWR) == 0 ){
31114 rc = SQLITE_BUSY;
31115 goto end_takeconch;
31118 /* either the conch didn't match or we need to create a new one */
31119 if( !pCtx->lockProxyPath ){
31120 proxyGetLockPath(pCtx->dbPath, lockPath, MAXPATHLEN);
31121 tempLockPath = lockPath;
31122 /* create a copy of the lock path _only_ if the conch is taken */
31125 /* update conch with host and path (this will fail if other process
31126 ** has a shared lock already), if the host id matches, use the big
31127 ** stick.
31129 futimes(conchFile->h, NULL);
31130 if( hostIdMatch && !createConch ){
31131 if( conchFile->pInode && conchFile->pInode->nShared>1 ){
31132 /* We are trying for an exclusive lock but another thread in this
31133 ** same process is still holding a shared lock. */
31134 rc = SQLITE_BUSY;
31135 } else {
31136 rc = proxyConchLock(pFile, myHostID, EXCLUSIVE_LOCK);
31138 }else{
31139 rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, EXCLUSIVE_LOCK);
31141 if( rc==SQLITE_OK ){
31142 char writeBuffer[PROXY_MAXCONCHLEN];
31143 int writeSize = 0;
31145 writeBuffer[0] = (char)PROXY_CONCHVERSION;
31146 memcpy(&writeBuffer[PROXY_HEADERLEN], myHostID, PROXY_HOSTIDLEN);
31147 if( pCtx->lockProxyPath!=NULL ){
31148 strlcpy(&writeBuffer[PROXY_PATHINDEX], pCtx->lockProxyPath, MAXPATHLEN);
31149 }else{
31150 strlcpy(&writeBuffer[PROXY_PATHINDEX], tempLockPath, MAXPATHLEN);
31152 writeSize = PROXY_PATHINDEX + strlen(&writeBuffer[PROXY_PATHINDEX]);
31153 robust_ftruncate(conchFile->h, writeSize);
31154 rc = unixWrite((sqlite3_file *)conchFile, writeBuffer, writeSize, 0);
31155 fsync(conchFile->h);
31156 /* If we created a new conch file (not just updated the contents of a
31157 ** valid conch file), try to match the permissions of the database
31159 if( rc==SQLITE_OK && createConch ){
31160 struct stat buf;
31161 int err = osFstat(pFile->h, &buf);
31162 if( err==0 ){
31163 mode_t cmode = buf.st_mode&(S_IRUSR|S_IWUSR | S_IRGRP|S_IWGRP |
31164 S_IROTH|S_IWOTH);
31165 /* try to match the database file R/W permissions, ignore failure */
31166 #ifndef SQLITE_PROXY_DEBUG
31167 osFchmod(conchFile->h, cmode);
31168 #else
31170 rc = osFchmod(conchFile->h, cmode);
31171 }while( rc==(-1) && errno==EINTR );
31172 if( rc!=0 ){
31173 int code = errno;
31174 fprintf(stderr, "fchmod %o FAILED with %d %s\n",
31175 cmode, code, strerror(code));
31176 } else {
31177 fprintf(stderr, "fchmod %o SUCCEDED\n",cmode);
31179 }else{
31180 int code = errno;
31181 fprintf(stderr, "STAT FAILED[%d] with %d %s\n",
31182 err, code, strerror(code));
31183 #endif
31187 conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK);
31189 end_takeconch:
31190 OSTRACE(("TRANSPROXY: CLOSE %d\n", pFile->h));
31191 if( rc==SQLITE_OK && pFile->openFlags ){
31192 int fd;
31193 if( pFile->h>=0 ){
31194 robust_close(pFile, pFile->h, __LINE__);
31196 pFile->h = -1;
31197 fd = robust_open(pCtx->dbPath, pFile->openFlags,
31198 SQLITE_DEFAULT_FILE_PERMISSIONS);
31199 OSTRACE(("TRANSPROXY: OPEN %d\n", fd));
31200 if( fd>=0 ){
31201 pFile->h = fd;
31202 }else{
31203 rc=SQLITE_CANTOPEN_BKPT; /* SQLITE_BUSY? proxyTakeConch called
31204 during locking */
31207 if( rc==SQLITE_OK && !pCtx->lockProxy ){
31208 char *path = tempLockPath ? tempLockPath : pCtx->lockProxyPath;
31209 rc = proxyCreateUnixFile(path, &pCtx->lockProxy, 1);
31210 if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM && tryOldLockPath ){
31211 /* we couldn't create the proxy lock file with the old lock file path
31212 ** so try again via auto-naming
31214 forceNewLockPath = 1;
31215 tryOldLockPath = 0;
31216 continue; /* go back to the do {} while start point, try again */
31219 if( rc==SQLITE_OK ){
31220 /* Need to make a copy of path if we extracted the value
31221 ** from the conch file or the path was allocated on the stack
31223 if( tempLockPath ){
31224 pCtx->lockProxyPath = sqlite3DbStrDup(0, tempLockPath);
31225 if( !pCtx->lockProxyPath ){
31226 rc = SQLITE_NOMEM;
31230 if( rc==SQLITE_OK ){
31231 pCtx->conchHeld = 1;
31233 if( pCtx->lockProxy->pMethod == &afpIoMethods ){
31234 afpLockingContext *afpCtx;
31235 afpCtx = (afpLockingContext *)pCtx->lockProxy->lockingContext;
31236 afpCtx->dbPath = pCtx->lockProxyPath;
31238 } else {
31239 conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
31241 OSTRACE(("TAKECONCH %d %s\n", conchFile->h,
31242 rc==SQLITE_OK?"ok":"failed"));
31243 return rc;
31244 } while (1); /* in case we need to retry the :auto: lock file -
31245 ** we should never get here except via the 'continue' call. */
31250 ** If pFile holds a lock on a conch file, then release that lock.
31252 static int proxyReleaseConch(unixFile *pFile){
31253 int rc = SQLITE_OK; /* Subroutine return code */
31254 proxyLockingContext *pCtx; /* The locking context for the proxy lock */
31255 unixFile *conchFile; /* Name of the conch file */
31257 pCtx = (proxyLockingContext *)pFile->lockingContext;
31258 conchFile = pCtx->conchFile;
31259 OSTRACE(("RELEASECONCH %d for %s pid=%d\n", conchFile->h,
31260 (pCtx->lockProxyPath ? pCtx->lockProxyPath : ":auto:"),
31261 getpid()));
31262 if( pCtx->conchHeld>0 ){
31263 rc = conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, NO_LOCK);
31265 pCtx->conchHeld = 0;
31266 OSTRACE(("RELEASECONCH %d %s\n", conchFile->h,
31267 (rc==SQLITE_OK ? "ok" : "failed")));
31268 return rc;
31272 ** Given the name of a database file, compute the name of its conch file.
31273 ** Store the conch filename in memory obtained from sqlite3_malloc().
31274 ** Make *pConchPath point to the new name. Return SQLITE_OK on success
31275 ** or SQLITE_NOMEM if unable to obtain memory.
31277 ** The caller is responsible for ensuring that the allocated memory
31278 ** space is eventually freed.
31280 ** *pConchPath is set to NULL if a memory allocation error occurs.
31282 static int proxyCreateConchPathname(char *dbPath, char **pConchPath){
31283 int i; /* Loop counter */
31284 int len = (int)strlen(dbPath); /* Length of database filename - dbPath */
31285 char *conchPath; /* buffer in which to construct conch name */
31287 /* Allocate space for the conch filename and initialize the name to
31288 ** the name of the original database file. */
31289 *pConchPath = conchPath = (char *)sqlite3_malloc(len + 8);
31290 if( conchPath==0 ){
31291 return SQLITE_NOMEM;
31293 memcpy(conchPath, dbPath, len+1);
31295 /* now insert a "." before the last / character */
31296 for( i=(len-1); i>=0; i-- ){
31297 if( conchPath[i]=='/' ){
31298 i++;
31299 break;
31302 conchPath[i]='.';
31303 while ( i<len ){
31304 conchPath[i+1]=dbPath[i];
31305 i++;
31308 /* append the "-conch" suffix to the file */
31309 memcpy(&conchPath[i+1], "-conch", 7);
31310 assert( (int)strlen(conchPath) == len+7 );
31312 return SQLITE_OK;
31316 /* Takes a fully configured proxy locking-style unix file and switches
31317 ** the local lock file path
31319 static int switchLockProxyPath(unixFile *pFile, const char *path) {
31320 proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
31321 char *oldPath = pCtx->lockProxyPath;
31322 int rc = SQLITE_OK;
31324 if( pFile->eFileLock!=NO_LOCK ){
31325 return SQLITE_BUSY;
31328 /* nothing to do if the path is NULL, :auto: or matches the existing path */
31329 if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ||
31330 (oldPath && !strncmp(oldPath, path, MAXPATHLEN)) ){
31331 return SQLITE_OK;
31332 }else{
31333 unixFile *lockProxy = pCtx->lockProxy;
31334 pCtx->lockProxy=NULL;
31335 pCtx->conchHeld = 0;
31336 if( lockProxy!=NULL ){
31337 rc=lockProxy->pMethod->xClose((sqlite3_file *)lockProxy);
31338 if( rc ) return rc;
31339 sqlite3_free(lockProxy);
31341 sqlite3_free(oldPath);
31342 pCtx->lockProxyPath = sqlite3DbStrDup(0, path);
31345 return rc;
31349 ** pFile is a file that has been opened by a prior xOpen call. dbPath
31350 ** is a string buffer at least MAXPATHLEN+1 characters in size.
31352 ** This routine find the filename associated with pFile and writes it
31353 ** int dbPath.
31355 static int proxyGetDbPathForUnixFile(unixFile *pFile, char *dbPath){
31356 #if defined(__APPLE__)
31357 if( pFile->pMethod == &afpIoMethods ){
31358 /* afp style keeps a reference to the db path in the filePath field
31359 ** of the struct */
31360 assert( (int)strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
31361 strlcpy(dbPath, ((afpLockingContext *)pFile->lockingContext)->dbPath, MAXPATHLEN);
31362 } else
31363 #endif
31364 if( pFile->pMethod == &dotlockIoMethods ){
31365 /* dot lock style uses the locking context to store the dot lock
31366 ** file path */
31367 int len = strlen((char *)pFile->lockingContext) - strlen(DOTLOCK_SUFFIX);
31368 memcpy(dbPath, (char *)pFile->lockingContext, len + 1);
31369 }else{
31370 /* all other styles use the locking context to store the db file path */
31371 assert( strlen((char*)pFile->lockingContext)<=MAXPATHLEN );
31372 strlcpy(dbPath, (char *)pFile->lockingContext, MAXPATHLEN);
31374 return SQLITE_OK;
31378 ** Takes an already filled in unix file and alters it so all file locking
31379 ** will be performed on the local proxy lock file. The following fields
31380 ** are preserved in the locking context so that they can be restored and
31381 ** the unix structure properly cleaned up at close time:
31382 ** ->lockingContext
31383 ** ->pMethod
31385 static int proxyTransformUnixFile(unixFile *pFile, const char *path) {
31386 proxyLockingContext *pCtx;
31387 char dbPath[MAXPATHLEN+1]; /* Name of the database file */
31388 char *lockPath=NULL;
31389 int rc = SQLITE_OK;
31391 if( pFile->eFileLock!=NO_LOCK ){
31392 return SQLITE_BUSY;
31394 proxyGetDbPathForUnixFile(pFile, dbPath);
31395 if( !path || path[0]=='\0' || !strcmp(path, ":auto:") ){
31396 lockPath=NULL;
31397 }else{
31398 lockPath=(char *)path;
31401 OSTRACE(("TRANSPROXY %d for %s pid=%d\n", pFile->h,
31402 (lockPath ? lockPath : ":auto:"), getpid()));
31404 pCtx = sqlite3_malloc( sizeof(*pCtx) );
31405 if( pCtx==0 ){
31406 return SQLITE_NOMEM;
31408 memset(pCtx, 0, sizeof(*pCtx));
31410 rc = proxyCreateConchPathname(dbPath, &pCtx->conchFilePath);
31411 if( rc==SQLITE_OK ){
31412 rc = proxyCreateUnixFile(pCtx->conchFilePath, &pCtx->conchFile, 0);
31413 if( rc==SQLITE_CANTOPEN && ((pFile->openFlags&O_RDWR) == 0) ){
31414 /* if (a) the open flags are not O_RDWR, (b) the conch isn't there, and
31415 ** (c) the file system is read-only, then enable no-locking access.
31416 ** Ugh, since O_RDONLY==0x0000 we test for !O_RDWR since unixOpen asserts
31417 ** that openFlags will have only one of O_RDONLY or O_RDWR.
31419 struct statfs fsInfo;
31420 struct stat conchInfo;
31421 int goLockless = 0;
31423 if( osStat(pCtx->conchFilePath, &conchInfo) == -1 ) {
31424 int err = errno;
31425 if( (err==ENOENT) && (statfs(dbPath, &fsInfo) != -1) ){
31426 goLockless = (fsInfo.f_flags&MNT_RDONLY) == MNT_RDONLY;
31429 if( goLockless ){
31430 pCtx->conchHeld = -1; /* read only FS/ lockless */
31431 rc = SQLITE_OK;
31435 if( rc==SQLITE_OK && lockPath ){
31436 pCtx->lockProxyPath = sqlite3DbStrDup(0, lockPath);
31439 if( rc==SQLITE_OK ){
31440 pCtx->dbPath = sqlite3DbStrDup(0, dbPath);
31441 if( pCtx->dbPath==NULL ){
31442 rc = SQLITE_NOMEM;
31445 if( rc==SQLITE_OK ){
31446 /* all memory is allocated, proxys are created and assigned,
31447 ** switch the locking context and pMethod then return.
31449 pCtx->oldLockingContext = pFile->lockingContext;
31450 pFile->lockingContext = pCtx;
31451 pCtx->pOldMethod = pFile->pMethod;
31452 pFile->pMethod = &proxyIoMethods;
31453 }else{
31454 if( pCtx->conchFile ){
31455 pCtx->conchFile->pMethod->xClose((sqlite3_file *)pCtx->conchFile);
31456 sqlite3_free(pCtx->conchFile);
31458 sqlite3DbFree(0, pCtx->lockProxyPath);
31459 sqlite3_free(pCtx->conchFilePath);
31460 sqlite3_free(pCtx);
31462 OSTRACE(("TRANSPROXY %d %s\n", pFile->h,
31463 (rc==SQLITE_OK ? "ok" : "failed")));
31464 return rc;
31469 ** This routine handles sqlite3_file_control() calls that are specific
31470 ** to proxy locking.
31472 static int proxyFileControl(sqlite3_file *id, int op, void *pArg){
31473 switch( op ){
31474 case SQLITE_GET_LOCKPROXYFILE: {
31475 unixFile *pFile = (unixFile*)id;
31476 if( pFile->pMethod == &proxyIoMethods ){
31477 proxyLockingContext *pCtx = (proxyLockingContext*)pFile->lockingContext;
31478 proxyTakeConch(pFile);
31479 if( pCtx->lockProxyPath ){
31480 *(const char **)pArg = pCtx->lockProxyPath;
31481 }else{
31482 *(const char **)pArg = ":auto: (not held)";
31484 } else {
31485 *(const char **)pArg = NULL;
31487 return SQLITE_OK;
31489 case SQLITE_SET_LOCKPROXYFILE: {
31490 unixFile *pFile = (unixFile*)id;
31491 int rc = SQLITE_OK;
31492 int isProxyStyle = (pFile->pMethod == &proxyIoMethods);
31493 if( pArg==NULL || (const char *)pArg==0 ){
31494 if( isProxyStyle ){
31495 /* turn off proxy locking - not supported */
31496 rc = SQLITE_ERROR /*SQLITE_PROTOCOL? SQLITE_MISUSE?*/;
31497 }else{
31498 /* turn off proxy locking - already off - NOOP */
31499 rc = SQLITE_OK;
31501 }else{
31502 const char *proxyPath = (const char *)pArg;
31503 if( isProxyStyle ){
31504 proxyLockingContext *pCtx =
31505 (proxyLockingContext*)pFile->lockingContext;
31506 if( !strcmp(pArg, ":auto:")
31507 || (pCtx->lockProxyPath &&
31508 !strncmp(pCtx->lockProxyPath, proxyPath, MAXPATHLEN))
31510 rc = SQLITE_OK;
31511 }else{
31512 rc = switchLockProxyPath(pFile, proxyPath);
31514 }else{
31515 /* turn on proxy file locking */
31516 rc = proxyTransformUnixFile(pFile, proxyPath);
31519 return rc;
31521 default: {
31522 assert( 0 ); /* The call assures that only valid opcodes are sent */
31525 /*NOTREACHED*/
31526 return SQLITE_ERROR;
31530 ** Within this division (the proxying locking implementation) the procedures
31531 ** above this point are all utilities. The lock-related methods of the
31532 ** proxy-locking sqlite3_io_method object follow.
31537 ** This routine checks if there is a RESERVED lock held on the specified
31538 ** file by this or any other process. If such a lock is held, set *pResOut
31539 ** to a non-zero value otherwise *pResOut is set to zero. The return value
31540 ** is set to SQLITE_OK unless an I/O error occurs during lock checking.
31542 static int proxyCheckReservedLock(sqlite3_file *id, int *pResOut) {
31543 unixFile *pFile = (unixFile*)id;
31544 int rc = proxyTakeConch(pFile);
31545 if( rc==SQLITE_OK ){
31546 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31547 if( pCtx->conchHeld>0 ){
31548 unixFile *proxy = pCtx->lockProxy;
31549 return proxy->pMethod->xCheckReservedLock((sqlite3_file*)proxy, pResOut);
31550 }else{ /* conchHeld < 0 is lockless */
31551 pResOut=0;
31554 return rc;
31558 ** Lock the file with the lock specified by parameter eFileLock - one
31559 ** of the following:
31561 ** (1) SHARED_LOCK
31562 ** (2) RESERVED_LOCK
31563 ** (3) PENDING_LOCK
31564 ** (4) EXCLUSIVE_LOCK
31566 ** Sometimes when requesting one lock state, additional lock states
31567 ** are inserted in between. The locking might fail on one of the later
31568 ** transitions leaving the lock state different from what it started but
31569 ** still short of its goal. The following chart shows the allowed
31570 ** transitions and the inserted intermediate states:
31572 ** UNLOCKED -> SHARED
31573 ** SHARED -> RESERVED
31574 ** SHARED -> (PENDING) -> EXCLUSIVE
31575 ** RESERVED -> (PENDING) -> EXCLUSIVE
31576 ** PENDING -> EXCLUSIVE
31578 ** This routine will only increase a lock. Use the sqlite3OsUnlock()
31579 ** routine to lower a locking level.
31581 static int proxyLock(sqlite3_file *id, int eFileLock) {
31582 unixFile *pFile = (unixFile*)id;
31583 int rc = proxyTakeConch(pFile);
31584 if( rc==SQLITE_OK ){
31585 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31586 if( pCtx->conchHeld>0 ){
31587 unixFile *proxy = pCtx->lockProxy;
31588 rc = proxy->pMethod->xLock((sqlite3_file*)proxy, eFileLock);
31589 pFile->eFileLock = proxy->eFileLock;
31590 }else{
31591 /* conchHeld < 0 is lockless */
31594 return rc;
31599 ** Lower the locking level on file descriptor pFile to eFileLock. eFileLock
31600 ** must be either NO_LOCK or SHARED_LOCK.
31602 ** If the locking level of the file descriptor is already at or below
31603 ** the requested locking level, this routine is a no-op.
31605 static int proxyUnlock(sqlite3_file *id, int eFileLock) {
31606 unixFile *pFile = (unixFile*)id;
31607 int rc = proxyTakeConch(pFile);
31608 if( rc==SQLITE_OK ){
31609 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31610 if( pCtx->conchHeld>0 ){
31611 unixFile *proxy = pCtx->lockProxy;
31612 rc = proxy->pMethod->xUnlock((sqlite3_file*)proxy, eFileLock);
31613 pFile->eFileLock = proxy->eFileLock;
31614 }else{
31615 /* conchHeld < 0 is lockless */
31618 return rc;
31622 ** Close a file that uses proxy locks.
31624 static int proxyClose(sqlite3_file *id) {
31625 if( id ){
31626 unixFile *pFile = (unixFile*)id;
31627 proxyLockingContext *pCtx = (proxyLockingContext *)pFile->lockingContext;
31628 unixFile *lockProxy = pCtx->lockProxy;
31629 unixFile *conchFile = pCtx->conchFile;
31630 int rc = SQLITE_OK;
31632 if( lockProxy ){
31633 rc = lockProxy->pMethod->xUnlock((sqlite3_file*)lockProxy, NO_LOCK);
31634 if( rc ) return rc;
31635 rc = lockProxy->pMethod->xClose((sqlite3_file*)lockProxy);
31636 if( rc ) return rc;
31637 sqlite3_free(lockProxy);
31638 pCtx->lockProxy = 0;
31640 if( conchFile ){
31641 if( pCtx->conchHeld ){
31642 rc = proxyReleaseConch(pFile);
31643 if( rc ) return rc;
31645 rc = conchFile->pMethod->xClose((sqlite3_file*)conchFile);
31646 if( rc ) return rc;
31647 sqlite3_free(conchFile);
31649 sqlite3DbFree(0, pCtx->lockProxyPath);
31650 sqlite3_free(pCtx->conchFilePath);
31651 sqlite3DbFree(0, pCtx->dbPath);
31652 /* restore the original locking context and pMethod then close it */
31653 pFile->lockingContext = pCtx->oldLockingContext;
31654 pFile->pMethod = pCtx->pOldMethod;
31655 sqlite3_free(pCtx);
31656 return pFile->pMethod->xClose(id);
31658 return SQLITE_OK;
31663 #endif /* defined(__APPLE__) && SQLITE_ENABLE_LOCKING_STYLE */
31665 ** The proxy locking style is intended for use with AFP filesystems.
31666 ** And since AFP is only supported on MacOSX, the proxy locking is also
31667 ** restricted to MacOSX.
31670 ******************* End of the proxy lock implementation **********************
31671 ******************************************************************************/
31674 ** Initialize the operating system interface.
31676 ** This routine registers all VFS implementations for unix-like operating
31677 ** systems. This routine, and the sqlite3_os_end() routine that follows,
31678 ** should be the only routines in this file that are visible from other
31679 ** files.
31681 ** This routine is called once during SQLite initialization and by a
31682 ** single thread. The memory allocation and mutex subsystems have not
31683 ** necessarily been initialized when this routine is called, and so they
31684 ** should not be used.
31686 SQLITE_API int sqlite3_os_init(void){
31688 ** The following macro defines an initializer for an sqlite3_vfs object.
31689 ** The name of the VFS is NAME. The pAppData is a pointer to a pointer
31690 ** to the "finder" function. (pAppData is a pointer to a pointer because
31691 ** silly C90 rules prohibit a void* from being cast to a function pointer
31692 ** and so we have to go through the intermediate pointer to avoid problems
31693 ** when compiling with -pedantic-errors on GCC.)
31695 ** The FINDER parameter to this macro is the name of the pointer to the
31696 ** finder-function. The finder-function returns a pointer to the
31697 ** sqlite_io_methods object that implements the desired locking
31698 ** behaviors. See the division above that contains the IOMETHODS
31699 ** macro for addition information on finder-functions.
31701 ** Most finders simply return a pointer to a fixed sqlite3_io_methods
31702 ** object. But the "autolockIoFinder" available on MacOSX does a little
31703 ** more than that; it looks at the filesystem type that hosts the
31704 ** database file and tries to choose an locking method appropriate for
31705 ** that filesystem time.
31707 #define UNIXVFS(VFSNAME, FINDER) { \
31708 3, /* iVersion */ \
31709 sizeof(unixFile), /* szOsFile */ \
31710 MAX_PATHNAME, /* mxPathname */ \
31711 0, /* pNext */ \
31712 VFSNAME, /* zName */ \
31713 (void*)&FINDER, /* pAppData */ \
31714 unixOpen, /* xOpen */ \
31715 unixDelete, /* xDelete */ \
31716 unixAccess, /* xAccess */ \
31717 unixFullPathname, /* xFullPathname */ \
31718 unixDlOpen, /* xDlOpen */ \
31719 unixDlError, /* xDlError */ \
31720 unixDlSym, /* xDlSym */ \
31721 unixDlClose, /* xDlClose */ \
31722 unixRandomness, /* xRandomness */ \
31723 unixSleep, /* xSleep */ \
31724 unixCurrentTime, /* xCurrentTime */ \
31725 unixGetLastError, /* xGetLastError */ \
31726 unixCurrentTimeInt64, /* xCurrentTimeInt64 */ \
31727 unixSetSystemCall, /* xSetSystemCall */ \
31728 unixGetSystemCall, /* xGetSystemCall */ \
31729 unixNextSystemCall, /* xNextSystemCall */ \
31733 ** All default VFSes for unix are contained in the following array.
31735 ** Note that the sqlite3_vfs.pNext field of the VFS object is modified
31736 ** by the SQLite core when the VFS is registered. So the following
31737 ** array cannot be const.
31739 static sqlite3_vfs aVfs[] = {
31740 #if SQLITE_ENABLE_LOCKING_STYLE && (OS_VXWORKS || defined(__APPLE__))
31741 UNIXVFS("unix", autolockIoFinder ),
31742 #else
31743 UNIXVFS("unix", posixIoFinder ),
31744 #endif
31745 UNIXVFS("unix-none", nolockIoFinder ),
31746 UNIXVFS("unix-dotfile", dotlockIoFinder ),
31747 UNIXVFS("unix-excl", posixIoFinder ),
31748 #if OS_VXWORKS
31749 UNIXVFS("unix-namedsem", semIoFinder ),
31750 #endif
31751 #if SQLITE_ENABLE_LOCKING_STYLE
31752 UNIXVFS("unix-posix", posixIoFinder ),
31753 #if !OS_VXWORKS
31754 UNIXVFS("unix-flock", flockIoFinder ),
31755 #endif
31756 #endif
31757 #if SQLITE_ENABLE_LOCKING_STYLE && defined(__APPLE__)
31758 UNIXVFS("unix-afp", afpIoFinder ),
31759 UNIXVFS("unix-nfs", nfsIoFinder ),
31760 UNIXVFS("unix-proxy", proxyIoFinder ),
31761 #endif
31763 unsigned int i; /* Loop counter */
31765 /* Double-check that the aSyscall[] array has been constructed
31766 ** correctly. See ticket [bb3a86e890c8e96ab] */
31767 assert( ArraySize(aSyscall)==20 );
31769 /* Register all VFSes defined in the aVfs[] array */
31770 for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
31771 sqlite3_vfs_register(&aVfs[i], i==0);
31773 return SQLITE_OK;
31777 ** Shutdown the operating system interface.
31779 ** Some operating systems might need to do some cleanup in this routine,
31780 ** to release dynamically allocated objects. But not on unix.
31781 ** This routine is a no-op for unix.
31783 SQLITE_API int sqlite3_os_end(void){
31784 return SQLITE_OK;
31787 #endif /* SQLITE_OS_UNIX */
31789 /************** End of os_unix.c *********************************************/
31790 /************** Begin file os_win.c ******************************************/
31792 ** 2004 May 22
31794 ** The author disclaims copyright to this source code. In place of
31795 ** a legal notice, here is a blessing:
31797 ** May you do good and not evil.
31798 ** May you find forgiveness for yourself and forgive others.
31799 ** May you share freely, never taking more than you give.
31801 ******************************************************************************
31803 ** This file contains code that is specific to Windows.
31805 #if SQLITE_OS_WIN /* This file is used for Windows only */
31807 #ifdef __CYGWIN__
31808 # include <sys/cygwin.h>
31809 #endif
31812 ** Include code that is common to all os_*.c files
31814 /************** Include os_common.h in the middle of os_win.c ****************/
31815 /************** Begin file os_common.h ***************************************/
31817 ** 2004 May 22
31819 ** The author disclaims copyright to this source code. In place of
31820 ** a legal notice, here is a blessing:
31822 ** May you do good and not evil.
31823 ** May you find forgiveness for yourself and forgive others.
31824 ** May you share freely, never taking more than you give.
31826 ******************************************************************************
31828 ** This file contains macros and a little bit of code that is common to
31829 ** all of the platform-specific files (os_*.c) and is #included into those
31830 ** files.
31832 ** This file should be #included by the os_*.c files only. It is not a
31833 ** general purpose header file.
31835 #ifndef _OS_COMMON_H_
31836 #define _OS_COMMON_H_
31839 ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
31840 ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
31841 ** switch. The following code should catch this problem at compile-time.
31843 #ifdef MEMORY_DEBUG
31844 # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
31845 #endif
31847 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
31848 # ifndef SQLITE_DEBUG_OS_TRACE
31849 # define SQLITE_DEBUG_OS_TRACE 0
31850 # endif
31851 int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
31852 # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
31853 #else
31854 # define OSTRACE(X)
31855 #endif
31858 ** Macros for performance tracing. Normally turned off. Only works
31859 ** on i486 hardware.
31861 #ifdef SQLITE_PERFORMANCE_TRACE
31864 ** hwtime.h contains inline assembler code for implementing
31865 ** high-performance timing routines.
31867 /************** Include hwtime.h in the middle of os_common.h ****************/
31868 /************** Begin file hwtime.h ******************************************/
31870 ** 2008 May 27
31872 ** The author disclaims copyright to this source code. In place of
31873 ** a legal notice, here is a blessing:
31875 ** May you do good and not evil.
31876 ** May you find forgiveness for yourself and forgive others.
31877 ** May you share freely, never taking more than you give.
31879 ******************************************************************************
31881 ** This file contains inline asm code for retrieving "high-performance"
31882 ** counters for x86 class CPUs.
31884 #ifndef _HWTIME_H_
31885 #define _HWTIME_H_
31888 ** The following routine only works on pentium-class (or newer) processors.
31889 ** It uses the RDTSC opcode to read the cycle count value out of the
31890 ** processor and returns that value. This can be used for high-res
31891 ** profiling.
31893 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
31894 (defined(i386) || defined(__i386__) || defined(_M_IX86))
31896 #if defined(__GNUC__)
31898 __inline__ sqlite_uint64 sqlite3Hwtime(void){
31899 unsigned int lo, hi;
31900 __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
31901 return (sqlite_uint64)hi << 32 | lo;
31904 #elif defined(_MSC_VER)
31906 __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
31907 __asm {
31908 rdtsc
31909 ret ; return value at EDX:EAX
31913 #endif
31915 #elif (defined(__GNUC__) && defined(__x86_64__))
31917 __inline__ sqlite_uint64 sqlite3Hwtime(void){
31918 unsigned long val;
31919 __asm__ __volatile__ ("rdtsc" : "=A" (val));
31920 return val;
31923 #elif (defined(__GNUC__) && defined(__ppc__))
31925 __inline__ sqlite_uint64 sqlite3Hwtime(void){
31926 unsigned long long retval;
31927 unsigned long junk;
31928 __asm__ __volatile__ ("\n\
31929 1: mftbu %1\n\
31930 mftb %L0\n\
31931 mftbu %0\n\
31932 cmpw %0,%1\n\
31933 bne 1b"
31934 : "=r" (retval), "=r" (junk));
31935 return retval;
31938 #else
31940 #error Need implementation of sqlite3Hwtime() for your platform.
31943 ** To compile without implementing sqlite3Hwtime() for your platform,
31944 ** you can remove the above #error and use the following
31945 ** stub function. You will lose timing support for many
31946 ** of the debugging and testing utilities, but it should at
31947 ** least compile and run.
31949 SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
31951 #endif
31953 #endif /* !defined(_HWTIME_H_) */
31955 /************** End of hwtime.h **********************************************/
31956 /************** Continuing where we left off in os_common.h ******************/
31958 static sqlite_uint64 g_start;
31959 static sqlite_uint64 g_elapsed;
31960 #define TIMER_START g_start=sqlite3Hwtime()
31961 #define TIMER_END g_elapsed=sqlite3Hwtime()-g_start
31962 #define TIMER_ELAPSED g_elapsed
31963 #else
31964 #define TIMER_START
31965 #define TIMER_END
31966 #define TIMER_ELAPSED ((sqlite_uint64)0)
31967 #endif
31970 ** If we compile with the SQLITE_TEST macro set, then the following block
31971 ** of code will give us the ability to simulate a disk I/O error. This
31972 ** is used for testing the I/O recovery logic.
31974 #ifdef SQLITE_TEST
31975 SQLITE_API int sqlite3_io_error_hit = 0; /* Total number of I/O Errors */
31976 SQLITE_API int sqlite3_io_error_hardhit = 0; /* Number of non-benign errors */
31977 SQLITE_API int sqlite3_io_error_pending = 0; /* Count down to first I/O error */
31978 SQLITE_API int sqlite3_io_error_persist = 0; /* True if I/O errors persist */
31979 SQLITE_API int sqlite3_io_error_benign = 0; /* True if errors are benign */
31980 SQLITE_API int sqlite3_diskfull_pending = 0;
31981 SQLITE_API int sqlite3_diskfull = 0;
31982 #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
31983 #define SimulateIOError(CODE) \
31984 if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
31985 || sqlite3_io_error_pending-- == 1 ) \
31986 { local_ioerr(); CODE; }
31987 static void local_ioerr(){
31988 IOTRACE(("IOERR\n"));
31989 sqlite3_io_error_hit++;
31990 if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
31992 #define SimulateDiskfullError(CODE) \
31993 if( sqlite3_diskfull_pending ){ \
31994 if( sqlite3_diskfull_pending == 1 ){ \
31995 local_ioerr(); \
31996 sqlite3_diskfull = 1; \
31997 sqlite3_io_error_hit = 1; \
31998 CODE; \
31999 }else{ \
32000 sqlite3_diskfull_pending--; \
32003 #else
32004 #define SimulateIOErrorBenign(X)
32005 #define SimulateIOError(A)
32006 #define SimulateDiskfullError(A)
32007 #endif
32010 ** When testing, keep a count of the number of open files.
32012 #ifdef SQLITE_TEST
32013 SQLITE_API int sqlite3_open_file_count = 0;
32014 #define OpenCounter(X) sqlite3_open_file_count+=(X)
32015 #else
32016 #define OpenCounter(X)
32017 #endif
32019 #endif /* !defined(_OS_COMMON_H_) */
32021 /************** End of os_common.h *******************************************/
32022 /************** Continuing where we left off in os_win.c *********************/
32025 ** Some Microsoft compilers lack this definition.
32027 #ifndef INVALID_FILE_ATTRIBUTES
32028 # define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
32029 #endif
32031 /* Forward references */
32032 typedef struct winShm winShm; /* A connection to shared-memory */
32033 typedef struct winShmNode winShmNode; /* A region of shared-memory */
32036 ** WinCE lacks native support for file locking so we have to fake it
32037 ** with some code of our own.
32039 #if SQLITE_OS_WINCE
32040 typedef struct winceLock {
32041 int nReaders; /* Number of reader locks obtained */
32042 BOOL bPending; /* Indicates a pending lock has been obtained */
32043 BOOL bReserved; /* Indicates a reserved lock has been obtained */
32044 BOOL bExclusive; /* Indicates an exclusive lock has been obtained */
32045 } winceLock;
32046 #endif
32049 ** The winFile structure is a subclass of sqlite3_file* specific to the win32
32050 ** portability layer.
32052 typedef struct winFile winFile;
32053 struct winFile {
32054 const sqlite3_io_methods *pMethod; /*** Must be first ***/
32055 sqlite3_vfs *pVfs; /* The VFS used to open this file */
32056 HANDLE h; /* Handle for accessing the file */
32057 u8 locktype; /* Type of lock currently held on this file */
32058 short sharedLockByte; /* Randomly chosen byte used as a shared lock */
32059 u8 ctrlFlags; /* Flags. See WINFILE_* below */
32060 DWORD lastErrno; /* The Windows errno from the last I/O error */
32061 winShm *pShm; /* Instance of shared memory on this file */
32062 const char *zPath; /* Full pathname of this file */
32063 int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */
32064 #if SQLITE_OS_WINCE
32065 LPWSTR zDeleteOnClose; /* Name of file to delete when closing */
32066 HANDLE hMutex; /* Mutex used to control access to shared lock */
32067 HANDLE hShared; /* Shared memory segment used for locking */
32068 winceLock local; /* Locks obtained by this instance of winFile */
32069 winceLock *shared; /* Global shared lock memory for the file */
32070 #endif
32074 ** Allowed values for winFile.ctrlFlags
32076 #define WINFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */
32077 #define WINFILE_PSOW 0x10 /* SQLITE_IOCAP_POWERSAFE_OVERWRITE */
32080 * If compiled with SQLITE_WIN32_MALLOC on Windows, we will use the
32081 * various Win32 API heap functions instead of our own.
32083 #ifdef SQLITE_WIN32_MALLOC
32085 * The initial size of the Win32-specific heap. This value may be zero.
32087 #ifndef SQLITE_WIN32_HEAP_INIT_SIZE
32088 # define SQLITE_WIN32_HEAP_INIT_SIZE ((SQLITE_DEFAULT_CACHE_SIZE) * \
32089 (SQLITE_DEFAULT_PAGE_SIZE) + 4194304)
32090 #endif
32093 * The maximum size of the Win32-specific heap. This value may be zero.
32095 #ifndef SQLITE_WIN32_HEAP_MAX_SIZE
32096 # define SQLITE_WIN32_HEAP_MAX_SIZE (0)
32097 #endif
32100 * The extra flags to use in calls to the Win32 heap APIs. This value may be
32101 * zero for the default behavior.
32103 #ifndef SQLITE_WIN32_HEAP_FLAGS
32104 # define SQLITE_WIN32_HEAP_FLAGS (0)
32105 #endif
32108 ** The winMemData structure stores information required by the Win32-specific
32109 ** sqlite3_mem_methods implementation.
32111 typedef struct winMemData winMemData;
32112 struct winMemData {
32113 #ifndef NDEBUG
32114 u32 magic; /* Magic number to detect structure corruption. */
32115 #endif
32116 HANDLE hHeap; /* The handle to our heap. */
32117 BOOL bOwned; /* Do we own the heap (i.e. destroy it on shutdown)? */
32120 #ifndef NDEBUG
32121 #define WINMEM_MAGIC 0x42b2830b
32122 #endif
32124 static struct winMemData win_mem_data = {
32125 #ifndef NDEBUG
32126 WINMEM_MAGIC,
32127 #endif
32128 NULL, FALSE
32131 #ifndef NDEBUG
32132 #define winMemAssertMagic() assert( win_mem_data.magic==WINMEM_MAGIC )
32133 #else
32134 #define winMemAssertMagic()
32135 #endif
32137 #define winMemGetHeap() win_mem_data.hHeap
32139 static void *winMemMalloc(int nBytes);
32140 static void winMemFree(void *pPrior);
32141 static void *winMemRealloc(void *pPrior, int nBytes);
32142 static int winMemSize(void *p);
32143 static int winMemRoundup(int n);
32144 static int winMemInit(void *pAppData);
32145 static void winMemShutdown(void *pAppData);
32147 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void);
32148 #endif /* SQLITE_WIN32_MALLOC */
32151 ** The following variable is (normally) set once and never changes
32152 ** thereafter. It records whether the operating system is Win9x
32153 ** or WinNT.
32155 ** 0: Operating system unknown.
32156 ** 1: Operating system is Win9x.
32157 ** 2: Operating system is WinNT.
32159 ** In order to facilitate testing on a WinNT system, the test fixture
32160 ** can manually set this value to 1 to emulate Win98 behavior.
32162 #ifdef SQLITE_TEST
32163 SQLITE_API int sqlite3_os_type = 0;
32164 #else
32165 static int sqlite3_os_type = 0;
32166 #endif
32169 ** Many system calls are accessed through pointer-to-functions so that
32170 ** they may be overridden at runtime to facilitate fault injection during
32171 ** testing and sandboxing. The following array holds the names and pointers
32172 ** to all overrideable system calls.
32174 #if !SQLITE_OS_WINCE
32175 # define SQLITE_WIN32_HAS_ANSI
32176 #endif
32178 #if SQLITE_OS_WINCE || SQLITE_OS_WINNT
32179 # define SQLITE_WIN32_HAS_WIDE
32180 #endif
32182 #ifndef SYSCALL
32183 # define SYSCALL sqlite3_syscall_ptr
32184 #endif
32186 #if SQLITE_OS_WINCE
32188 ** These macros are necessary because Windows CE does not natively support the
32189 ** Win32 APIs LockFile, UnlockFile, and LockFileEx.
32192 # define LockFile(a,b,c,d,e) winceLockFile(&a, b, c, d, e)
32193 # define UnlockFile(a,b,c,d,e) winceUnlockFile(&a, b, c, d, e)
32194 # define LockFileEx(a,b,c,d,e,f) winceLockFileEx(&a, b, c, d, e, f)
32197 ** These are the special syscall hacks for Windows CE. The locking related
32198 ** defines here refer to the macros defined just above.
32201 # define osAreFileApisANSI() 1
32202 # define osLockFile LockFile
32203 # define osUnlockFile UnlockFile
32204 # define osLockFileEx LockFileEx
32205 #endif
32207 static struct win_syscall {
32208 const char *zName; /* Name of the sytem call */
32209 sqlite3_syscall_ptr pCurrent; /* Current value of the system call */
32210 sqlite3_syscall_ptr pDefault; /* Default value */
32211 } aSyscall[] = {
32212 #if !SQLITE_OS_WINCE
32213 { "AreFileApisANSI", (SYSCALL)AreFileApisANSI, 0 },
32215 #define osAreFileApisANSI ((BOOL(WINAPI*)(VOID))aSyscall[0].pCurrent)
32216 #else
32217 { "AreFileApisANSI", (SYSCALL)0, 0 },
32218 #endif
32220 #if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32221 { "CharLowerW", (SYSCALL)CharLowerW, 0 },
32222 #else
32223 { "CharLowerW", (SYSCALL)0, 0 },
32224 #endif
32226 #define osCharLowerW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[1].pCurrent)
32228 #if SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32229 { "CharUpperW", (SYSCALL)CharUpperW, 0 },
32230 #else
32231 { "CharUpperW", (SYSCALL)0, 0 },
32232 #endif
32234 #define osCharUpperW ((LPWSTR(WINAPI*)(LPWSTR))aSyscall[2].pCurrent)
32236 { "CloseHandle", (SYSCALL)CloseHandle, 0 },
32238 #define osCloseHandle ((BOOL(WINAPI*)(HANDLE))aSyscall[3].pCurrent)
32240 #if defined(SQLITE_WIN32_HAS_ANSI)
32241 { "CreateFileA", (SYSCALL)CreateFileA, 0 },
32242 #else
32243 { "CreateFileA", (SYSCALL)0, 0 },
32244 #endif
32246 #define osCreateFileA ((HANDLE(WINAPI*)(LPCSTR,DWORD,DWORD, \
32247 LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[4].pCurrent)
32249 #if defined(SQLITE_WIN32_HAS_WIDE)
32250 { "CreateFileW", (SYSCALL)CreateFileW, 0 },
32251 #else
32252 { "CreateFileW", (SYSCALL)0, 0 },
32253 #endif
32255 #define osCreateFileW ((HANDLE(WINAPI*)(LPCWSTR,DWORD,DWORD, \
32256 LPSECURITY_ATTRIBUTES,DWORD,DWORD,HANDLE))aSyscall[5].pCurrent)
32258 { "CreateFileMapping", (SYSCALL)CreateFileMapping, 0 },
32260 #define osCreateFileMapping ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \
32261 DWORD,DWORD,DWORD,LPCTSTR))aSyscall[6].pCurrent)
32263 #if defined(SQLITE_WIN32_HAS_WIDE)
32264 { "CreateFileMappingW", (SYSCALL)CreateFileMappingW, 0 },
32265 #else
32266 { "CreateFileMappingW", (SYSCALL)0, 0 },
32267 #endif
32269 #define osCreateFileMappingW ((HANDLE(WINAPI*)(HANDLE,LPSECURITY_ATTRIBUTES, \
32270 DWORD,DWORD,DWORD,LPCWSTR))aSyscall[7].pCurrent)
32272 #if defined(SQLITE_WIN32_HAS_WIDE)
32273 { "CreateMutexW", (SYSCALL)CreateMutexW, 0 },
32274 #else
32275 { "CreateMutexW", (SYSCALL)0, 0 },
32276 #endif
32278 #define osCreateMutexW ((HANDLE(WINAPI*)(LPSECURITY_ATTRIBUTES,BOOL, \
32279 LPCWSTR))aSyscall[8].pCurrent)
32281 #if defined(SQLITE_WIN32_HAS_ANSI)
32282 { "DeleteFileA", (SYSCALL)DeleteFileA, 0 },
32283 #else
32284 { "DeleteFileA", (SYSCALL)0, 0 },
32285 #endif
32287 #define osDeleteFileA ((BOOL(WINAPI*)(LPCSTR))aSyscall[9].pCurrent)
32289 #if defined(SQLITE_WIN32_HAS_WIDE)
32290 { "DeleteFileW", (SYSCALL)DeleteFileW, 0 },
32291 #else
32292 { "DeleteFileW", (SYSCALL)0, 0 },
32293 #endif
32295 #define osDeleteFileW ((BOOL(WINAPI*)(LPCWSTR))aSyscall[10].pCurrent)
32297 #if SQLITE_OS_WINCE
32298 { "FileTimeToLocalFileTime", (SYSCALL)FileTimeToLocalFileTime, 0 },
32299 #else
32300 { "FileTimeToLocalFileTime", (SYSCALL)0, 0 },
32301 #endif
32303 #define osFileTimeToLocalFileTime ((BOOL(WINAPI*)(CONST FILETIME*, \
32304 LPFILETIME))aSyscall[11].pCurrent)
32306 #if SQLITE_OS_WINCE
32307 { "FileTimeToSystemTime", (SYSCALL)FileTimeToSystemTime, 0 },
32308 #else
32309 { "FileTimeToSystemTime", (SYSCALL)0, 0 },
32310 #endif
32312 #define osFileTimeToSystemTime ((BOOL(WINAPI*)(CONST FILETIME*, \
32313 LPSYSTEMTIME))aSyscall[12].pCurrent)
32315 { "FlushFileBuffers", (SYSCALL)FlushFileBuffers, 0 },
32317 #define osFlushFileBuffers ((BOOL(WINAPI*)(HANDLE))aSyscall[13].pCurrent)
32319 #if defined(SQLITE_WIN32_HAS_ANSI)
32320 { "FormatMessageA", (SYSCALL)FormatMessageA, 0 },
32321 #else
32322 { "FormatMessageA", (SYSCALL)0, 0 },
32323 #endif
32325 #define osFormatMessageA ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPSTR, \
32326 DWORD,va_list*))aSyscall[14].pCurrent)
32328 #if defined(SQLITE_WIN32_HAS_WIDE)
32329 { "FormatMessageW", (SYSCALL)FormatMessageW, 0 },
32330 #else
32331 { "FormatMessageW", (SYSCALL)0, 0 },
32332 #endif
32334 #define osFormatMessageW ((DWORD(WINAPI*)(DWORD,LPCVOID,DWORD,DWORD,LPWSTR, \
32335 DWORD,va_list*))aSyscall[15].pCurrent)
32337 { "FreeLibrary", (SYSCALL)FreeLibrary, 0 },
32339 #define osFreeLibrary ((BOOL(WINAPI*)(HMODULE))aSyscall[16].pCurrent)
32341 { "GetCurrentProcessId", (SYSCALL)GetCurrentProcessId, 0 },
32343 #define osGetCurrentProcessId ((DWORD(WINAPI*)(VOID))aSyscall[17].pCurrent)
32345 #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI)
32346 { "GetDiskFreeSpaceA", (SYSCALL)GetDiskFreeSpaceA, 0 },
32347 #else
32348 { "GetDiskFreeSpaceA", (SYSCALL)0, 0 },
32349 #endif
32351 #define osGetDiskFreeSpaceA ((BOOL(WINAPI*)(LPCSTR,LPDWORD,LPDWORD,LPDWORD, \
32352 LPDWORD))aSyscall[18].pCurrent)
32354 #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32355 { "GetDiskFreeSpaceW", (SYSCALL)GetDiskFreeSpaceW, 0 },
32356 #else
32357 { "GetDiskFreeSpaceW", (SYSCALL)0, 0 },
32358 #endif
32360 #define osGetDiskFreeSpaceW ((BOOL(WINAPI*)(LPCWSTR,LPDWORD,LPDWORD,LPDWORD, \
32361 LPDWORD))aSyscall[19].pCurrent)
32363 #if defined(SQLITE_WIN32_HAS_ANSI)
32364 { "GetFileAttributesA", (SYSCALL)GetFileAttributesA, 0 },
32365 #else
32366 { "GetFileAttributesA", (SYSCALL)0, 0 },
32367 #endif
32369 #define osGetFileAttributesA ((DWORD(WINAPI*)(LPCSTR))aSyscall[20].pCurrent)
32371 #if defined(SQLITE_WIN32_HAS_WIDE)
32372 { "GetFileAttributesW", (SYSCALL)GetFileAttributesW, 0 },
32373 #else
32374 { "GetFileAttributesW", (SYSCALL)0, 0 },
32375 #endif
32377 #define osGetFileAttributesW ((DWORD(WINAPI*)(LPCWSTR))aSyscall[21].pCurrent)
32379 #if defined(SQLITE_WIN32_HAS_WIDE)
32380 { "GetFileAttributesExW", (SYSCALL)GetFileAttributesExW, 0 },
32381 #else
32382 { "GetFileAttributesExW", (SYSCALL)0, 0 },
32383 #endif
32385 #define osGetFileAttributesExW ((BOOL(WINAPI*)(LPCWSTR,GET_FILEEX_INFO_LEVELS, \
32386 LPVOID))aSyscall[22].pCurrent)
32388 { "GetFileSize", (SYSCALL)GetFileSize, 0 },
32390 #define osGetFileSize ((DWORD(WINAPI*)(HANDLE,LPDWORD))aSyscall[23].pCurrent)
32392 #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_ANSI)
32393 { "GetFullPathNameA", (SYSCALL)GetFullPathNameA, 0 },
32394 #else
32395 { "GetFullPathNameA", (SYSCALL)0, 0 },
32396 #endif
32398 #define osGetFullPathNameA ((DWORD(WINAPI*)(LPCSTR,DWORD,LPSTR, \
32399 LPSTR*))aSyscall[24].pCurrent)
32401 #if !SQLITE_OS_WINCE && defined(SQLITE_WIN32_HAS_WIDE)
32402 { "GetFullPathNameW", (SYSCALL)GetFullPathNameW, 0 },
32403 #else
32404 { "GetFullPathNameW", (SYSCALL)0, 0 },
32405 #endif
32407 #define osGetFullPathNameW ((DWORD(WINAPI*)(LPCWSTR,DWORD,LPWSTR, \
32408 LPWSTR*))aSyscall[25].pCurrent)
32410 { "GetLastError", (SYSCALL)GetLastError, 0 },
32412 #define osGetLastError ((DWORD(WINAPI*)(VOID))aSyscall[26].pCurrent)
32414 #if SQLITE_OS_WINCE
32415 /* The GetProcAddressA() routine is only available on Windows CE. */
32416 { "GetProcAddressA", (SYSCALL)GetProcAddressA, 0 },
32417 #else
32418 /* All other Windows platforms expect GetProcAddress() to take
32419 ** an ANSI string regardless of the _UNICODE setting */
32420 { "GetProcAddressA", (SYSCALL)GetProcAddress, 0 },
32421 #endif
32423 #define osGetProcAddressA ((FARPROC(WINAPI*)(HMODULE, \
32424 LPCSTR))aSyscall[27].pCurrent)
32426 { "GetSystemInfo", (SYSCALL)GetSystemInfo, 0 },
32428 #define osGetSystemInfo ((VOID(WINAPI*)(LPSYSTEM_INFO))aSyscall[28].pCurrent)
32430 { "GetSystemTime", (SYSCALL)GetSystemTime, 0 },
32432 #define osGetSystemTime ((VOID(WINAPI*)(LPSYSTEMTIME))aSyscall[29].pCurrent)
32434 #if !SQLITE_OS_WINCE
32435 { "GetSystemTimeAsFileTime", (SYSCALL)GetSystemTimeAsFileTime, 0 },
32436 #else
32437 { "GetSystemTimeAsFileTime", (SYSCALL)0, 0 },
32438 #endif
32440 #define osGetSystemTimeAsFileTime ((VOID(WINAPI*)( \
32441 LPFILETIME))aSyscall[30].pCurrent)
32443 #if defined(SQLITE_WIN32_HAS_ANSI)
32444 { "GetTempPathA", (SYSCALL)GetTempPathA, 0 },
32445 #else
32446 { "GetTempPathA", (SYSCALL)0, 0 },
32447 #endif
32449 #define osGetTempPathA ((DWORD(WINAPI*)(DWORD,LPSTR))aSyscall[31].pCurrent)
32451 #if defined(SQLITE_WIN32_HAS_WIDE)
32452 { "GetTempPathW", (SYSCALL)GetTempPathW, 0 },
32453 #else
32454 { "GetTempPathW", (SYSCALL)0, 0 },
32455 #endif
32457 #define osGetTempPathW ((DWORD(WINAPI*)(DWORD,LPWSTR))aSyscall[32].pCurrent)
32459 { "GetTickCount", (SYSCALL)GetTickCount, 0 },
32461 #define osGetTickCount ((DWORD(WINAPI*)(VOID))aSyscall[33].pCurrent)
32463 #if defined(SQLITE_WIN32_HAS_ANSI)
32464 { "GetVersionExA", (SYSCALL)GetVersionExA, 0 },
32465 #else
32466 { "GetVersionExA", (SYSCALL)0, 0 },
32467 #endif
32469 #define osGetVersionExA ((BOOL(WINAPI*)( \
32470 LPOSVERSIONINFOA))aSyscall[34].pCurrent)
32472 { "HeapAlloc", (SYSCALL)HeapAlloc, 0 },
32474 #define osHeapAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD, \
32475 SIZE_T))aSyscall[35].pCurrent)
32477 { "HeapCreate", (SYSCALL)HeapCreate, 0 },
32479 #define osHeapCreate ((HANDLE(WINAPI*)(DWORD,SIZE_T, \
32480 SIZE_T))aSyscall[36].pCurrent)
32482 { "HeapDestroy", (SYSCALL)HeapDestroy, 0 },
32484 #define osHeapDestroy ((BOOL(WINAPI*)(HANDLE))aSyscall[37].pCurrent)
32486 { "HeapFree", (SYSCALL)HeapFree, 0 },
32488 #define osHeapFree ((BOOL(WINAPI*)(HANDLE,DWORD,LPVOID))aSyscall[38].pCurrent)
32490 { "HeapReAlloc", (SYSCALL)HeapReAlloc, 0 },
32492 #define osHeapReAlloc ((LPVOID(WINAPI*)(HANDLE,DWORD,LPVOID, \
32493 SIZE_T))aSyscall[39].pCurrent)
32495 { "HeapSize", (SYSCALL)HeapSize, 0 },
32497 #define osHeapSize ((SIZE_T(WINAPI*)(HANDLE,DWORD, \
32498 LPCVOID))aSyscall[40].pCurrent)
32500 { "HeapValidate", (SYSCALL)HeapValidate, 0 },
32502 #define osHeapValidate ((BOOL(WINAPI*)(HANDLE,DWORD, \
32503 LPCVOID))aSyscall[41].pCurrent)
32505 #if defined(SQLITE_WIN32_HAS_ANSI)
32506 { "LoadLibraryA", (SYSCALL)LoadLibraryA, 0 },
32507 #else
32508 { "LoadLibraryA", (SYSCALL)0, 0 },
32509 #endif
32511 #define osLoadLibraryA ((HMODULE(WINAPI*)(LPCSTR))aSyscall[42].pCurrent)
32513 #if defined(SQLITE_WIN32_HAS_WIDE)
32514 { "LoadLibraryW", (SYSCALL)LoadLibraryW, 0 },
32515 #else
32516 { "LoadLibraryW", (SYSCALL)0, 0 },
32517 #endif
32519 #define osLoadLibraryW ((HMODULE(WINAPI*)(LPCWSTR))aSyscall[43].pCurrent)
32521 { "LocalFree", (SYSCALL)LocalFree, 0 },
32523 #define osLocalFree ((HLOCAL(WINAPI*)(HLOCAL))aSyscall[44].pCurrent)
32525 #if !SQLITE_OS_WINCE
32526 { "LockFile", (SYSCALL)LockFile, 0 },
32528 #define osLockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32529 DWORD))aSyscall[45].pCurrent)
32530 #else
32531 { "LockFile", (SYSCALL)0, 0 },
32532 #endif
32534 #if !SQLITE_OS_WINCE
32535 { "LockFileEx", (SYSCALL)LockFileEx, 0 },
32537 #define osLockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD,DWORD, \
32538 LPOVERLAPPED))aSyscall[46].pCurrent)
32539 #else
32540 { "LockFileEx", (SYSCALL)0, 0 },
32541 #endif
32543 { "MapViewOfFile", (SYSCALL)MapViewOfFile, 0 },
32545 #define osMapViewOfFile ((LPVOID(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32546 SIZE_T))aSyscall[47].pCurrent)
32548 { "MultiByteToWideChar", (SYSCALL)MultiByteToWideChar, 0 },
32550 #define osMultiByteToWideChar ((int(WINAPI*)(UINT,DWORD,LPCSTR,int,LPWSTR, \
32551 int))aSyscall[48].pCurrent)
32553 { "QueryPerformanceCounter", (SYSCALL)QueryPerformanceCounter, 0 },
32555 #define osQueryPerformanceCounter ((BOOL(WINAPI*)( \
32556 LARGE_INTEGER*))aSyscall[49].pCurrent)
32558 { "ReadFile", (SYSCALL)ReadFile, 0 },
32560 #define osReadFile ((BOOL(WINAPI*)(HANDLE,LPVOID,DWORD,LPDWORD, \
32561 LPOVERLAPPED))aSyscall[50].pCurrent)
32563 { "SetEndOfFile", (SYSCALL)SetEndOfFile, 0 },
32565 #define osSetEndOfFile ((BOOL(WINAPI*)(HANDLE))aSyscall[51].pCurrent)
32567 { "SetFilePointer", (SYSCALL)SetFilePointer, 0 },
32569 #define osSetFilePointer ((DWORD(WINAPI*)(HANDLE,LONG,PLONG, \
32570 DWORD))aSyscall[52].pCurrent)
32572 { "Sleep", (SYSCALL)Sleep, 0 },
32574 #define osSleep ((VOID(WINAPI*)(DWORD))aSyscall[53].pCurrent)
32576 { "SystemTimeToFileTime", (SYSCALL)SystemTimeToFileTime, 0 },
32578 #define osSystemTimeToFileTime ((BOOL(WINAPI*)(CONST SYSTEMTIME*, \
32579 LPFILETIME))aSyscall[54].pCurrent)
32581 #if !SQLITE_OS_WINCE
32582 { "UnlockFile", (SYSCALL)UnlockFile, 0 },
32584 #define osUnlockFile ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32585 DWORD))aSyscall[55].pCurrent)
32586 #else
32587 { "UnlockFile", (SYSCALL)0, 0 },
32588 #endif
32590 #if !SQLITE_OS_WINCE
32591 { "UnlockFileEx", (SYSCALL)UnlockFileEx, 0 },
32593 #define osUnlockFileEx ((BOOL(WINAPI*)(HANDLE,DWORD,DWORD,DWORD, \
32594 LPOVERLAPPED))aSyscall[56].pCurrent)
32595 #else
32596 { "UnlockFileEx", (SYSCALL)0, 0 },
32597 #endif
32599 { "UnmapViewOfFile", (SYSCALL)UnmapViewOfFile, 0 },
32601 #define osUnmapViewOfFile ((BOOL(WINAPI*)(LPCVOID))aSyscall[57].pCurrent)
32603 { "WideCharToMultiByte", (SYSCALL)WideCharToMultiByte, 0 },
32605 #define osWideCharToMultiByte ((int(WINAPI*)(UINT,DWORD,LPCWSTR,int,LPSTR,int, \
32606 LPCSTR,LPBOOL))aSyscall[58].pCurrent)
32608 { "WriteFile", (SYSCALL)WriteFile, 0 },
32610 #define osWriteFile ((BOOL(WINAPI*)(HANDLE,LPCVOID,DWORD,LPDWORD, \
32611 LPOVERLAPPED))aSyscall[59].pCurrent)
32613 }; /* End of the overrideable system calls */
32616 ** This is the xSetSystemCall() method of sqlite3_vfs for all of the
32617 ** "win32" VFSes. Return SQLITE_OK opon successfully updating the
32618 ** system call pointer, or SQLITE_NOTFOUND if there is no configurable
32619 ** system call named zName.
32621 static int winSetSystemCall(
32622 sqlite3_vfs *pNotUsed, /* The VFS pointer. Not used */
32623 const char *zName, /* Name of system call to override */
32624 sqlite3_syscall_ptr pNewFunc /* Pointer to new system call value */
32626 unsigned int i;
32627 int rc = SQLITE_NOTFOUND;
32629 UNUSED_PARAMETER(pNotUsed);
32630 if( zName==0 ){
32631 /* If no zName is given, restore all system calls to their default
32632 ** settings and return NULL
32634 rc = SQLITE_OK;
32635 for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
32636 if( aSyscall[i].pDefault ){
32637 aSyscall[i].pCurrent = aSyscall[i].pDefault;
32640 }else{
32641 /* If zName is specified, operate on only the one system call
32642 ** specified.
32644 for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
32645 if( strcmp(zName, aSyscall[i].zName)==0 ){
32646 if( aSyscall[i].pDefault==0 ){
32647 aSyscall[i].pDefault = aSyscall[i].pCurrent;
32649 rc = SQLITE_OK;
32650 if( pNewFunc==0 ) pNewFunc = aSyscall[i].pDefault;
32651 aSyscall[i].pCurrent = pNewFunc;
32652 break;
32656 return rc;
32660 ** Return the value of a system call. Return NULL if zName is not a
32661 ** recognized system call name. NULL is also returned if the system call
32662 ** is currently undefined.
32664 static sqlite3_syscall_ptr winGetSystemCall(
32665 sqlite3_vfs *pNotUsed,
32666 const char *zName
32668 unsigned int i;
32670 UNUSED_PARAMETER(pNotUsed);
32671 for(i=0; i<sizeof(aSyscall)/sizeof(aSyscall[0]); i++){
32672 if( strcmp(zName, aSyscall[i].zName)==0 ) return aSyscall[i].pCurrent;
32674 return 0;
32678 ** Return the name of the first system call after zName. If zName==NULL
32679 ** then return the name of the first system call. Return NULL if zName
32680 ** is the last system call or if zName is not the name of a valid
32681 ** system call.
32683 static const char *winNextSystemCall(sqlite3_vfs *p, const char *zName){
32684 int i = -1;
32686 UNUSED_PARAMETER(p);
32687 if( zName ){
32688 for(i=0; i<ArraySize(aSyscall)-1; i++){
32689 if( strcmp(zName, aSyscall[i].zName)==0 ) break;
32692 for(i++; i<ArraySize(aSyscall); i++){
32693 if( aSyscall[i].pCurrent!=0 ) return aSyscall[i].zName;
32695 return 0;
32699 ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
32700 ** or WinCE. Return false (zero) for Win95, Win98, or WinME.
32702 ** Here is an interesting observation: Win95, Win98, and WinME lack
32703 ** the LockFileEx() API. But we can still statically link against that
32704 ** API as long as we don't call it when running Win95/98/ME. A call to
32705 ** this routine is used to determine if the host is Win95/98/ME or
32706 ** WinNT/2K/XP so that we will know whether or not we can safely call
32707 ** the LockFileEx() API.
32709 #if SQLITE_OS_WINCE
32710 # define isNT() (1)
32711 #else
32712 static int isNT(void){
32713 if( sqlite3_os_type==0 ){
32714 OSVERSIONINFOA sInfo;
32715 sInfo.dwOSVersionInfoSize = sizeof(sInfo);
32716 osGetVersionExA(&sInfo);
32717 sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
32719 return sqlite3_os_type==2;
32721 #endif /* SQLITE_OS_WINCE */
32723 #ifdef SQLITE_WIN32_MALLOC
32725 ** Allocate nBytes of memory.
32727 static void *winMemMalloc(int nBytes){
32728 HANDLE hHeap;
32729 void *p;
32731 winMemAssertMagic();
32732 hHeap = winMemGetHeap();
32733 assert( hHeap!=0 );
32734 assert( hHeap!=INVALID_HANDLE_VALUE );
32735 #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32736 assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32737 #endif
32738 assert( nBytes>=0 );
32739 p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes);
32740 if( !p ){
32741 sqlite3_log(SQLITE_NOMEM, "failed to HeapAlloc %u bytes (%d), heap=%p",
32742 nBytes, osGetLastError(), (void*)hHeap);
32744 return p;
32748 ** Free memory.
32750 static void winMemFree(void *pPrior){
32751 HANDLE hHeap;
32753 winMemAssertMagic();
32754 hHeap = winMemGetHeap();
32755 assert( hHeap!=0 );
32756 assert( hHeap!=INVALID_HANDLE_VALUE );
32757 #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32758 assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) );
32759 #endif
32760 if( !pPrior ) return; /* Passing NULL to HeapFree is undefined. */
32761 if( !osHeapFree(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ){
32762 sqlite3_log(SQLITE_NOMEM, "failed to HeapFree block %p (%d), heap=%p",
32763 pPrior, osGetLastError(), (void*)hHeap);
32768 ** Change the size of an existing memory allocation
32770 static void *winMemRealloc(void *pPrior, int nBytes){
32771 HANDLE hHeap;
32772 void *p;
32774 winMemAssertMagic();
32775 hHeap = winMemGetHeap();
32776 assert( hHeap!=0 );
32777 assert( hHeap!=INVALID_HANDLE_VALUE );
32778 #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32779 assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) );
32780 #endif
32781 assert( nBytes>=0 );
32782 if( !pPrior ){
32783 p = osHeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes);
32784 }else{
32785 p = osHeapReAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior, (SIZE_T)nBytes);
32787 if( !p ){
32788 sqlite3_log(SQLITE_NOMEM, "failed to %s %u bytes (%d), heap=%p",
32789 pPrior ? "HeapReAlloc" : "HeapAlloc", nBytes, osGetLastError(),
32790 (void*)hHeap);
32792 return p;
32796 ** Return the size of an outstanding allocation, in bytes.
32798 static int winMemSize(void *p){
32799 HANDLE hHeap;
32800 SIZE_T n;
32802 winMemAssertMagic();
32803 hHeap = winMemGetHeap();
32804 assert( hHeap!=0 );
32805 assert( hHeap!=INVALID_HANDLE_VALUE );
32806 #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32807 assert ( osHeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32808 #endif
32809 if( !p ) return 0;
32810 n = osHeapSize(hHeap, SQLITE_WIN32_HEAP_FLAGS, p);
32811 if( n==(SIZE_T)-1 ){
32812 sqlite3_log(SQLITE_NOMEM, "failed to HeapSize block %p (%d), heap=%p",
32813 p, osGetLastError(), (void*)hHeap);
32814 return 0;
32816 return (int)n;
32820 ** Round up a request size to the next valid allocation size.
32822 static int winMemRoundup(int n){
32823 return n;
32827 ** Initialize this module.
32829 static int winMemInit(void *pAppData){
32830 winMemData *pWinMemData = (winMemData *)pAppData;
32832 if( !pWinMemData ) return SQLITE_ERROR;
32833 assert( pWinMemData->magic==WINMEM_MAGIC );
32834 if( !pWinMemData->hHeap ){
32835 pWinMemData->hHeap = osHeapCreate(SQLITE_WIN32_HEAP_FLAGS,
32836 SQLITE_WIN32_HEAP_INIT_SIZE,
32837 SQLITE_WIN32_HEAP_MAX_SIZE);
32838 if( !pWinMemData->hHeap ){
32839 sqlite3_log(SQLITE_NOMEM,
32840 "failed to HeapCreate (%d), flags=%u, initSize=%u, maxSize=%u",
32841 osGetLastError(), SQLITE_WIN32_HEAP_FLAGS,
32842 SQLITE_WIN32_HEAP_INIT_SIZE, SQLITE_WIN32_HEAP_MAX_SIZE);
32843 return SQLITE_NOMEM;
32845 pWinMemData->bOwned = TRUE;
32847 assert( pWinMemData->hHeap!=0 );
32848 assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE );
32849 #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32850 assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32851 #endif
32852 return SQLITE_OK;
32856 ** Deinitialize this module.
32858 static void winMemShutdown(void *pAppData){
32859 winMemData *pWinMemData = (winMemData *)pAppData;
32861 if( !pWinMemData ) return;
32862 if( pWinMemData->hHeap ){
32863 assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE );
32864 #ifdef SQLITE_WIN32_MALLOC_VALIDATE
32865 assert( osHeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
32866 #endif
32867 if( pWinMemData->bOwned ){
32868 if( !osHeapDestroy(pWinMemData->hHeap) ){
32869 sqlite3_log(SQLITE_NOMEM, "failed to HeapDestroy (%d), heap=%p",
32870 osGetLastError(), (void*)pWinMemData->hHeap);
32872 pWinMemData->bOwned = FALSE;
32874 pWinMemData->hHeap = NULL;
32879 ** Populate the low-level memory allocation function pointers in
32880 ** sqlite3GlobalConfig.m with pointers to the routines in this file. The
32881 ** arguments specify the block of memory to manage.
32883 ** This routine is only called by sqlite3_config(), and therefore
32884 ** is not required to be threadsafe (it is not).
32886 SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void){
32887 static const sqlite3_mem_methods winMemMethods = {
32888 winMemMalloc,
32889 winMemFree,
32890 winMemRealloc,
32891 winMemSize,
32892 winMemRoundup,
32893 winMemInit,
32894 winMemShutdown,
32895 &win_mem_data
32897 return &winMemMethods;
32900 SQLITE_PRIVATE void sqlite3MemSetDefault(void){
32901 sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetWin32());
32903 #endif /* SQLITE_WIN32_MALLOC */
32906 ** Convert a UTF-8 string to Microsoft Unicode (UTF-16?).
32908 ** Space to hold the returned string is obtained from malloc.
32910 static LPWSTR utf8ToUnicode(const char *zFilename){
32911 int nChar;
32912 LPWSTR zWideFilename;
32914 nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, NULL, 0);
32915 if( nChar==0 ){
32916 return 0;
32918 zWideFilename = sqlite3_malloc( nChar*sizeof(zWideFilename[0]) );
32919 if( zWideFilename==0 ){
32920 return 0;
32922 nChar = osMultiByteToWideChar(CP_UTF8, 0, zFilename, -1, zWideFilename,
32923 nChar);
32924 if( nChar==0 ){
32925 sqlite3_free(zWideFilename);
32926 zWideFilename = 0;
32928 return zWideFilename;
32932 ** Convert Microsoft Unicode to UTF-8. Space to hold the returned string is
32933 ** obtained from sqlite3_malloc().
32935 static char *unicodeToUtf8(LPCWSTR zWideFilename){
32936 int nByte;
32937 char *zFilename;
32939 nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, 0, 0, 0, 0);
32940 if( nByte == 0 ){
32941 return 0;
32943 zFilename = sqlite3_malloc( nByte );
32944 if( zFilename==0 ){
32945 return 0;
32947 nByte = osWideCharToMultiByte(CP_UTF8, 0, zWideFilename, -1, zFilename, nByte,
32948 0, 0);
32949 if( nByte == 0 ){
32950 sqlite3_free(zFilename);
32951 zFilename = 0;
32953 return zFilename;
32957 ** Convert an ANSI string to Microsoft Unicode, based on the
32958 ** current codepage settings for file apis.
32960 ** Space to hold the returned string is obtained
32961 ** from sqlite3_malloc.
32963 static LPWSTR mbcsToUnicode(const char *zFilename){
32964 int nByte;
32965 LPWSTR zMbcsFilename;
32966 int codepage = osAreFileApisANSI() ? CP_ACP : CP_OEMCP;
32968 nByte = osMultiByteToWideChar(codepage, 0, zFilename, -1, NULL,
32969 0)*sizeof(WCHAR);
32970 if( nByte==0 ){
32971 return 0;
32973 zMbcsFilename = sqlite3_malloc( nByte*sizeof(zMbcsFilename[0]) );
32974 if( zMbcsFilename==0 ){
32975 return 0;
32977 nByte = osMultiByteToWideChar(codepage, 0, zFilename, -1, zMbcsFilename,
32978 nByte);
32979 if( nByte==0 ){
32980 sqlite3_free(zMbcsFilename);
32981 zMbcsFilename = 0;
32983 return zMbcsFilename;
32987 ** Convert Microsoft Unicode to multi-byte character string, based on the
32988 ** user's ANSI codepage.
32990 ** Space to hold the returned string is obtained from
32991 ** sqlite3_malloc().
32993 static char *unicodeToMbcs(LPCWSTR zWideFilename){
32994 int nByte;
32995 char *zFilename;
32996 int codepage = osAreFileApisANSI() ? CP_ACP : CP_OEMCP;
32998 nByte = osWideCharToMultiByte(codepage, 0, zWideFilename, -1, 0, 0, 0, 0);
32999 if( nByte == 0 ){
33000 return 0;
33002 zFilename = sqlite3_malloc( nByte );
33003 if( zFilename==0 ){
33004 return 0;
33006 nByte = osWideCharToMultiByte(codepage, 0, zWideFilename, -1, zFilename,
33007 nByte, 0, 0);
33008 if( nByte == 0 ){
33009 sqlite3_free(zFilename);
33010 zFilename = 0;
33012 return zFilename;
33016 ** Convert multibyte character string to UTF-8. Space to hold the
33017 ** returned string is obtained from sqlite3_malloc().
33019 SQLITE_API char *sqlite3_win32_mbcs_to_utf8(const char *zFilename){
33020 char *zFilenameUtf8;
33021 LPWSTR zTmpWide;
33023 zTmpWide = mbcsToUnicode(zFilename);
33024 if( zTmpWide==0 ){
33025 return 0;
33027 zFilenameUtf8 = unicodeToUtf8(zTmpWide);
33028 sqlite3_free(zTmpWide);
33029 return zFilenameUtf8;
33033 ** Convert UTF-8 to multibyte character string. Space to hold the
33034 ** returned string is obtained from sqlite3_malloc().
33036 SQLITE_API char *sqlite3_win32_utf8_to_mbcs(const char *zFilename){
33037 char *zFilenameMbcs;
33038 LPWSTR zTmpWide;
33040 zTmpWide = utf8ToUnicode(zFilename);
33041 if( zTmpWide==0 ){
33042 return 0;
33044 zFilenameMbcs = unicodeToMbcs(zTmpWide);
33045 sqlite3_free(zTmpWide);
33046 return zFilenameMbcs;
33051 ** The return value of getLastErrorMsg
33052 ** is zero if the error message fits in the buffer, or non-zero
33053 ** otherwise (if the message was truncated).
33055 static int getLastErrorMsg(DWORD lastErrno, int nBuf, char *zBuf){
33056 /* FormatMessage returns 0 on failure. Otherwise it
33057 ** returns the number of TCHARs written to the output
33058 ** buffer, excluding the terminating null char.
33060 DWORD dwLen = 0;
33061 char *zOut = 0;
33063 if( isNT() ){
33064 LPWSTR zTempWide = NULL;
33065 dwLen = osFormatMessageW(FORMAT_MESSAGE_ALLOCATE_BUFFER |
33066 FORMAT_MESSAGE_FROM_SYSTEM |
33067 FORMAT_MESSAGE_IGNORE_INSERTS,
33068 NULL,
33069 lastErrno,
33071 (LPWSTR) &zTempWide,
33074 if( dwLen > 0 ){
33075 /* allocate a buffer and convert to UTF8 */
33076 sqlite3BeginBenignMalloc();
33077 zOut = unicodeToUtf8(zTempWide);
33078 sqlite3EndBenignMalloc();
33079 /* free the system buffer allocated by FormatMessage */
33080 osLocalFree(zTempWide);
33082 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
33083 ** Since the ANSI version of these Windows API do not exist for WINCE,
33084 ** it's important to not reference them for WINCE builds.
33086 #if SQLITE_OS_WINCE==0
33087 }else{
33088 char *zTemp = NULL;
33089 dwLen = osFormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER |
33090 FORMAT_MESSAGE_FROM_SYSTEM |
33091 FORMAT_MESSAGE_IGNORE_INSERTS,
33092 NULL,
33093 lastErrno,
33095 (LPSTR) &zTemp,
33098 if( dwLen > 0 ){
33099 /* allocate a buffer and convert to UTF8 */
33100 sqlite3BeginBenignMalloc();
33101 zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
33102 sqlite3EndBenignMalloc();
33103 /* free the system buffer allocated by FormatMessage */
33104 osLocalFree(zTemp);
33106 #endif
33108 if( 0 == dwLen ){
33109 sqlite3_snprintf(nBuf, zBuf, "OsError 0x%x (%u)", lastErrno, lastErrno);
33110 }else{
33111 /* copy a maximum of nBuf chars to output buffer */
33112 sqlite3_snprintf(nBuf, zBuf, "%s", zOut);
33113 /* free the UTF8 buffer */
33114 sqlite3_free(zOut);
33116 return 0;
33121 ** This function - winLogErrorAtLine() - is only ever called via the macro
33122 ** winLogError().
33124 ** This routine is invoked after an error occurs in an OS function.
33125 ** It logs a message using sqlite3_log() containing the current value of
33126 ** error code and, if possible, the human-readable equivalent from
33127 ** FormatMessage.
33129 ** The first argument passed to the macro should be the error code that
33130 ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN).
33131 ** The two subsequent arguments should be the name of the OS function that
33132 ** failed and the the associated file-system path, if any.
33134 #define winLogError(a,b,c,d) winLogErrorAtLine(a,b,c,d,__LINE__)
33135 static int winLogErrorAtLine(
33136 int errcode, /* SQLite error code */
33137 DWORD lastErrno, /* Win32 last error */
33138 const char *zFunc, /* Name of OS function that failed */
33139 const char *zPath, /* File path associated with error */
33140 int iLine /* Source line number where error occurred */
33142 char zMsg[500]; /* Human readable error text */
33143 int i; /* Loop counter */
33145 zMsg[0] = 0;
33146 getLastErrorMsg(lastErrno, sizeof(zMsg), zMsg);
33147 assert( errcode!=SQLITE_OK );
33148 if( zPath==0 ) zPath = "";
33149 for(i=0; zMsg[i] && zMsg[i]!='\r' && zMsg[i]!='\n'; i++){}
33150 zMsg[i] = 0;
33151 sqlite3_log(errcode,
33152 "os_win.c:%d: (%d) %s(%s) - %s",
33153 iLine, lastErrno, zFunc, zPath, zMsg
33156 return errcode;
33160 ** The number of times that a ReadFile(), WriteFile(), and DeleteFile()
33161 ** will be retried following a locking error - probably caused by
33162 ** antivirus software. Also the initial delay before the first retry.
33163 ** The delay increases linearly with each retry.
33165 #ifndef SQLITE_WIN32_IOERR_RETRY
33166 # define SQLITE_WIN32_IOERR_RETRY 10
33167 #endif
33168 #ifndef SQLITE_WIN32_IOERR_RETRY_DELAY
33169 # define SQLITE_WIN32_IOERR_RETRY_DELAY 25
33170 #endif
33171 static int win32IoerrRetry = SQLITE_WIN32_IOERR_RETRY;
33172 static int win32IoerrRetryDelay = SQLITE_WIN32_IOERR_RETRY_DELAY;
33175 ** If a ReadFile() or WriteFile() error occurs, invoke this routine
33176 ** to see if it should be retried. Return TRUE to retry. Return FALSE
33177 ** to give up with an error.
33179 static int retryIoerr(int *pnRetry, DWORD *pError){
33180 DWORD e = osGetLastError();
33181 if( *pnRetry>=win32IoerrRetry ){
33182 if( pError ){
33183 *pError = e;
33185 return 0;
33187 if( e==ERROR_ACCESS_DENIED ||
33188 e==ERROR_LOCK_VIOLATION ||
33189 e==ERROR_SHARING_VIOLATION ){
33190 osSleep(win32IoerrRetryDelay*(1+*pnRetry));
33191 ++*pnRetry;
33192 return 1;
33194 if( pError ){
33195 *pError = e;
33197 return 0;
33201 ** Log a I/O error retry episode.
33203 static void logIoerr(int nRetry){
33204 if( nRetry ){
33205 sqlite3_log(SQLITE_IOERR,
33206 "delayed %dms for lock/sharing conflict",
33207 win32IoerrRetryDelay*nRetry*(nRetry+1)/2
33212 #if SQLITE_OS_WINCE
33213 /*************************************************************************
33214 ** This section contains code for WinCE only.
33217 ** Windows CE does not have a localtime() function. So create a
33218 ** substitute.
33220 /* #include <time.h> */
33221 struct tm *__cdecl localtime(const time_t *t)
33223 static struct tm y;
33224 FILETIME uTm, lTm;
33225 SYSTEMTIME pTm;
33226 sqlite3_int64 t64;
33227 t64 = *t;
33228 t64 = (t64 + 11644473600)*10000000;
33229 uTm.dwLowDateTime = (DWORD)(t64 & 0xFFFFFFFF);
33230 uTm.dwHighDateTime= (DWORD)(t64 >> 32);
33231 osFileTimeToLocalFileTime(&uTm,&lTm);
33232 osFileTimeToSystemTime(&lTm,&pTm);
33233 y.tm_year = pTm.wYear - 1900;
33234 y.tm_mon = pTm.wMonth - 1;
33235 y.tm_wday = pTm.wDayOfWeek;
33236 y.tm_mday = pTm.wDay;
33237 y.tm_hour = pTm.wHour;
33238 y.tm_min = pTm.wMinute;
33239 y.tm_sec = pTm.wSecond;
33240 return &y;
33243 #define HANDLE_TO_WINFILE(a) (winFile*)&((char*)a)[-(int)offsetof(winFile,h)]
33246 ** Acquire a lock on the handle h
33248 static void winceMutexAcquire(HANDLE h){
33249 DWORD dwErr;
33250 do {
33251 dwErr = WaitForSingleObject(h, INFINITE);
33252 } while (dwErr != WAIT_OBJECT_0 && dwErr != WAIT_ABANDONED);
33255 ** Release a lock acquired by winceMutexAcquire()
33257 #define winceMutexRelease(h) ReleaseMutex(h)
33260 ** Create the mutex and shared memory used for locking in the file
33261 ** descriptor pFile
33263 static BOOL winceCreateLock(const char *zFilename, winFile *pFile){
33264 LPWSTR zTok;
33265 LPWSTR zName;
33266 BOOL bInit = TRUE;
33268 zName = utf8ToUnicode(zFilename);
33269 if( zName==0 ){
33270 /* out of memory */
33271 return FALSE;
33274 /* Initialize the local lockdata */
33275 memset(&pFile->local, 0, sizeof(pFile->local));
33277 /* Replace the backslashes from the filename and lowercase it
33278 ** to derive a mutex name. */
33279 zTok = osCharLowerW(zName);
33280 for (;*zTok;zTok++){
33281 if (*zTok == '\\') *zTok = '_';
33284 /* Create/open the named mutex */
33285 pFile->hMutex = osCreateMutexW(NULL, FALSE, zName);
33286 if (!pFile->hMutex){
33287 pFile->lastErrno = osGetLastError();
33288 winLogError(SQLITE_ERROR, pFile->lastErrno, "winceCreateLock1", zFilename);
33289 sqlite3_free(zName);
33290 return FALSE;
33293 /* Acquire the mutex before continuing */
33294 winceMutexAcquire(pFile->hMutex);
33296 /* Since the names of named mutexes, semaphores, file mappings etc are
33297 ** case-sensitive, take advantage of that by uppercasing the mutex name
33298 ** and using that as the shared filemapping name.
33300 osCharUpperW(zName);
33301 pFile->hShared = osCreateFileMappingW(INVALID_HANDLE_VALUE, NULL,
33302 PAGE_READWRITE, 0, sizeof(winceLock),
33303 zName);
33305 /* Set a flag that indicates we're the first to create the memory so it
33306 ** must be zero-initialized */
33307 if (osGetLastError() == ERROR_ALREADY_EXISTS){
33308 bInit = FALSE;
33311 sqlite3_free(zName);
33313 /* If we succeeded in making the shared memory handle, map it. */
33314 if (pFile->hShared){
33315 pFile->shared = (winceLock*)osMapViewOfFile(pFile->hShared,
33316 FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock));
33317 /* If mapping failed, close the shared memory handle and erase it */
33318 if (!pFile->shared){
33319 pFile->lastErrno = osGetLastError();
33320 winLogError(SQLITE_ERROR, pFile->lastErrno,
33321 "winceCreateLock2", zFilename);
33322 osCloseHandle(pFile->hShared);
33323 pFile->hShared = NULL;
33327 /* If shared memory could not be created, then close the mutex and fail */
33328 if (pFile->hShared == NULL){
33329 winceMutexRelease(pFile->hMutex);
33330 osCloseHandle(pFile->hMutex);
33331 pFile->hMutex = NULL;
33332 return FALSE;
33335 /* Initialize the shared memory if we're supposed to */
33336 if (bInit) {
33337 memset(pFile->shared, 0, sizeof(winceLock));
33340 winceMutexRelease(pFile->hMutex);
33341 return TRUE;
33345 ** Destroy the part of winFile that deals with wince locks
33347 static void winceDestroyLock(winFile *pFile){
33348 if (pFile->hMutex){
33349 /* Acquire the mutex */
33350 winceMutexAcquire(pFile->hMutex);
33352 /* The following blocks should probably assert in debug mode, but they
33353 are to cleanup in case any locks remained open */
33354 if (pFile->local.nReaders){
33355 pFile->shared->nReaders --;
33357 if (pFile->local.bReserved){
33358 pFile->shared->bReserved = FALSE;
33360 if (pFile->local.bPending){
33361 pFile->shared->bPending = FALSE;
33363 if (pFile->local.bExclusive){
33364 pFile->shared->bExclusive = FALSE;
33367 /* De-reference and close our copy of the shared memory handle */
33368 osUnmapViewOfFile(pFile->shared);
33369 osCloseHandle(pFile->hShared);
33371 /* Done with the mutex */
33372 winceMutexRelease(pFile->hMutex);
33373 osCloseHandle(pFile->hMutex);
33374 pFile->hMutex = NULL;
33379 ** An implementation of the LockFile() API of Windows for CE
33381 static BOOL winceLockFile(
33382 HANDLE *phFile,
33383 DWORD dwFileOffsetLow,
33384 DWORD dwFileOffsetHigh,
33385 DWORD nNumberOfBytesToLockLow,
33386 DWORD nNumberOfBytesToLockHigh
33388 winFile *pFile = HANDLE_TO_WINFILE(phFile);
33389 BOOL bReturn = FALSE;
33391 UNUSED_PARAMETER(dwFileOffsetHigh);
33392 UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
33394 if (!pFile->hMutex) return TRUE;
33395 winceMutexAcquire(pFile->hMutex);
33397 /* Wanting an exclusive lock? */
33398 if (dwFileOffsetLow == (DWORD)SHARED_FIRST
33399 && nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
33400 if (pFile->shared->nReaders == 0 && pFile->shared->bExclusive == 0){
33401 pFile->shared->bExclusive = TRUE;
33402 pFile->local.bExclusive = TRUE;
33403 bReturn = TRUE;
33407 /* Want a read-only lock? */
33408 else if (dwFileOffsetLow == (DWORD)SHARED_FIRST &&
33409 nNumberOfBytesToLockLow == 1){
33410 if (pFile->shared->bExclusive == 0){
33411 pFile->local.nReaders ++;
33412 if (pFile->local.nReaders == 1){
33413 pFile->shared->nReaders ++;
33415 bReturn = TRUE;
33419 /* Want a pending lock? */
33420 else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToLockLow == 1){
33421 /* If no pending lock has been acquired, then acquire it */
33422 if (pFile->shared->bPending == 0) {
33423 pFile->shared->bPending = TRUE;
33424 pFile->local.bPending = TRUE;
33425 bReturn = TRUE;
33429 /* Want a reserved lock? */
33430 else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToLockLow == 1){
33431 if (pFile->shared->bReserved == 0) {
33432 pFile->shared->bReserved = TRUE;
33433 pFile->local.bReserved = TRUE;
33434 bReturn = TRUE;
33438 winceMutexRelease(pFile->hMutex);
33439 return bReturn;
33443 ** An implementation of the UnlockFile API of Windows for CE
33445 static BOOL winceUnlockFile(
33446 HANDLE *phFile,
33447 DWORD dwFileOffsetLow,
33448 DWORD dwFileOffsetHigh,
33449 DWORD nNumberOfBytesToUnlockLow,
33450 DWORD nNumberOfBytesToUnlockHigh
33452 winFile *pFile = HANDLE_TO_WINFILE(phFile);
33453 BOOL bReturn = FALSE;
33455 UNUSED_PARAMETER(dwFileOffsetHigh);
33456 UNUSED_PARAMETER(nNumberOfBytesToUnlockHigh);
33458 if (!pFile->hMutex) return TRUE;
33459 winceMutexAcquire(pFile->hMutex);
33461 /* Releasing a reader lock or an exclusive lock */
33462 if (dwFileOffsetLow == (DWORD)SHARED_FIRST){
33463 /* Did we have an exclusive lock? */
33464 if (pFile->local.bExclusive){
33465 assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE);
33466 pFile->local.bExclusive = FALSE;
33467 pFile->shared->bExclusive = FALSE;
33468 bReturn = TRUE;
33471 /* Did we just have a reader lock? */
33472 else if (pFile->local.nReaders){
33473 assert(nNumberOfBytesToUnlockLow == (DWORD)SHARED_SIZE || nNumberOfBytesToUnlockLow == 1);
33474 pFile->local.nReaders --;
33475 if (pFile->local.nReaders == 0)
33477 pFile->shared->nReaders --;
33479 bReturn = TRUE;
33483 /* Releasing a pending lock */
33484 else if (dwFileOffsetLow == (DWORD)PENDING_BYTE && nNumberOfBytesToUnlockLow == 1){
33485 if (pFile->local.bPending){
33486 pFile->local.bPending = FALSE;
33487 pFile->shared->bPending = FALSE;
33488 bReturn = TRUE;
33491 /* Releasing a reserved lock */
33492 else if (dwFileOffsetLow == (DWORD)RESERVED_BYTE && nNumberOfBytesToUnlockLow == 1){
33493 if (pFile->local.bReserved) {
33494 pFile->local.bReserved = FALSE;
33495 pFile->shared->bReserved = FALSE;
33496 bReturn = TRUE;
33500 winceMutexRelease(pFile->hMutex);
33501 return bReturn;
33505 ** An implementation of the LockFileEx() API of Windows for CE
33507 static BOOL winceLockFileEx(
33508 HANDLE *phFile,
33509 DWORD dwFlags,
33510 DWORD dwReserved,
33511 DWORD nNumberOfBytesToLockLow,
33512 DWORD nNumberOfBytesToLockHigh,
33513 LPOVERLAPPED lpOverlapped
33515 UNUSED_PARAMETER(dwReserved);
33516 UNUSED_PARAMETER(nNumberOfBytesToLockHigh);
33518 /* If the caller wants a shared read lock, forward this call
33519 ** to winceLockFile */
33520 if (lpOverlapped->Offset == (DWORD)SHARED_FIRST &&
33521 dwFlags == 1 &&
33522 nNumberOfBytesToLockLow == (DWORD)SHARED_SIZE){
33523 return winceLockFile(phFile, SHARED_FIRST, 0, 1, 0);
33525 return FALSE;
33528 ** End of the special code for wince
33529 *****************************************************************************/
33530 #endif /* SQLITE_OS_WINCE */
33532 /*****************************************************************************
33533 ** The next group of routines implement the I/O methods specified
33534 ** by the sqlite3_io_methods object.
33535 ******************************************************************************/
33538 ** Some Microsoft compilers lack this definition.
33540 #ifndef INVALID_SET_FILE_POINTER
33541 # define INVALID_SET_FILE_POINTER ((DWORD)-1)
33542 #endif
33545 ** Move the current position of the file handle passed as the first
33546 ** argument to offset iOffset within the file. If successful, return 0.
33547 ** Otherwise, set pFile->lastErrno and return non-zero.
33549 static int seekWinFile(winFile *pFile, sqlite3_int64 iOffset){
33550 LONG upperBits; /* Most sig. 32 bits of new offset */
33551 LONG lowerBits; /* Least sig. 32 bits of new offset */
33552 DWORD dwRet; /* Value returned by SetFilePointer() */
33553 DWORD lastErrno; /* Value returned by GetLastError() */
33555 upperBits = (LONG)((iOffset>>32) & 0x7fffffff);
33556 lowerBits = (LONG)(iOffset & 0xffffffff);
33558 /* API oddity: If successful, SetFilePointer() returns a dword
33559 ** containing the lower 32-bits of the new file-offset. Or, if it fails,
33560 ** it returns INVALID_SET_FILE_POINTER. However according to MSDN,
33561 ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine
33562 ** whether an error has actually occured, it is also necessary to call
33563 ** GetLastError().
33565 dwRet = osSetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN);
33567 if( (dwRet==INVALID_SET_FILE_POINTER
33568 && ((lastErrno = osGetLastError())!=NO_ERROR)) ){
33569 pFile->lastErrno = lastErrno;
33570 winLogError(SQLITE_IOERR_SEEK, pFile->lastErrno,
33571 "seekWinFile", pFile->zPath);
33572 return 1;
33575 return 0;
33579 ** Close a file.
33581 ** It is reported that an attempt to close a handle might sometimes
33582 ** fail. This is a very unreasonable result, but Windows is notorious
33583 ** for being unreasonable so I do not doubt that it might happen. If
33584 ** the close fails, we pause for 100 milliseconds and try again. As
33585 ** many as MX_CLOSE_ATTEMPT attempts to close the handle are made before
33586 ** giving up and returning an error.
33588 #define MX_CLOSE_ATTEMPT 3
33589 static int winClose(sqlite3_file *id){
33590 int rc, cnt = 0;
33591 winFile *pFile = (winFile*)id;
33593 assert( id!=0 );
33594 assert( pFile->pShm==0 );
33595 OSTRACE(("CLOSE %d\n", pFile->h));
33597 rc = osCloseHandle(pFile->h);
33598 /* SimulateIOError( rc=0; cnt=MX_CLOSE_ATTEMPT; ); */
33599 }while( rc==0 && ++cnt < MX_CLOSE_ATTEMPT && (osSleep(100), 1) );
33600 #if SQLITE_OS_WINCE
33601 #define WINCE_DELETION_ATTEMPTS 3
33602 winceDestroyLock(pFile);
33603 if( pFile->zDeleteOnClose ){
33604 int cnt = 0;
33605 while(
33606 osDeleteFileW(pFile->zDeleteOnClose)==0
33607 && osGetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff
33608 && cnt++ < WINCE_DELETION_ATTEMPTS
33610 osSleep(100); /* Wait a little before trying again */
33612 sqlite3_free(pFile->zDeleteOnClose);
33614 #endif
33615 OSTRACE(("CLOSE %d %s\n", pFile->h, rc ? "ok" : "failed"));
33616 OpenCounter(-1);
33617 return rc ? SQLITE_OK
33618 : winLogError(SQLITE_IOERR_CLOSE, osGetLastError(),
33619 "winClose", pFile->zPath);
33623 ** Read data from a file into a buffer. Return SQLITE_OK if all
33624 ** bytes were read successfully and SQLITE_IOERR if anything goes
33625 ** wrong.
33627 static int winRead(
33628 sqlite3_file *id, /* File to read from */
33629 void *pBuf, /* Write content into this buffer */
33630 int amt, /* Number of bytes to read */
33631 sqlite3_int64 offset /* Begin reading at this offset */
33633 winFile *pFile = (winFile*)id; /* file handle */
33634 DWORD nRead; /* Number of bytes actually read from file */
33635 int nRetry = 0; /* Number of retrys */
33637 assert( id!=0 );
33638 SimulateIOError(return SQLITE_IOERR_READ);
33639 OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype));
33641 if( seekWinFile(pFile, offset) ){
33642 return SQLITE_FULL;
33644 while( !osReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
33645 DWORD lastErrno;
33646 if( retryIoerr(&nRetry, &lastErrno) ) continue;
33647 pFile->lastErrno = lastErrno;
33648 return winLogError(SQLITE_IOERR_READ, pFile->lastErrno,
33649 "winRead", pFile->zPath);
33651 logIoerr(nRetry);
33652 if( nRead<(DWORD)amt ){
33653 /* Unread parts of the buffer must be zero-filled */
33654 memset(&((char*)pBuf)[nRead], 0, amt-nRead);
33655 return SQLITE_IOERR_SHORT_READ;
33658 return SQLITE_OK;
33662 ** Write data from a buffer into a file. Return SQLITE_OK on success
33663 ** or some other error code on failure.
33665 static int winWrite(
33666 sqlite3_file *id, /* File to write into */
33667 const void *pBuf, /* The bytes to be written */
33668 int amt, /* Number of bytes to write */
33669 sqlite3_int64 offset /* Offset into the file to begin writing at */
33671 int rc; /* True if error has occured, else false */
33672 winFile *pFile = (winFile*)id; /* File handle */
33673 int nRetry = 0; /* Number of retries */
33675 assert( amt>0 );
33676 assert( pFile );
33677 SimulateIOError(return SQLITE_IOERR_WRITE);
33678 SimulateDiskfullError(return SQLITE_FULL);
33680 OSTRACE(("WRITE %d lock=%d\n", pFile->h, pFile->locktype));
33682 rc = seekWinFile(pFile, offset);
33683 if( rc==0 ){
33684 u8 *aRem = (u8 *)pBuf; /* Data yet to be written */
33685 int nRem = amt; /* Number of bytes yet to be written */
33686 DWORD nWrite; /* Bytes written by each WriteFile() call */
33687 DWORD lastErrno = NO_ERROR; /* Value returned by GetLastError() */
33689 while( nRem>0 ){
33690 if( !osWriteFile(pFile->h, aRem, nRem, &nWrite, 0) ){
33691 if( retryIoerr(&nRetry, &lastErrno) ) continue;
33692 break;
33694 if( nWrite<=0 ) break;
33695 aRem += nWrite;
33696 nRem -= nWrite;
33698 if( nRem>0 ){
33699 pFile->lastErrno = lastErrno;
33700 rc = 1;
33704 if( rc ){
33705 if( ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL )
33706 || ( pFile->lastErrno==ERROR_DISK_FULL )){
33707 return SQLITE_FULL;
33709 return winLogError(SQLITE_IOERR_WRITE, pFile->lastErrno,
33710 "winWrite", pFile->zPath);
33711 }else{
33712 logIoerr(nRetry);
33714 return SQLITE_OK;
33718 ** Truncate an open file to a specified size
33720 static int winTruncate(sqlite3_file *id, sqlite3_int64 nByte){
33721 winFile *pFile = (winFile*)id; /* File handle object */
33722 int rc = SQLITE_OK; /* Return code for this function */
33724 assert( pFile );
33726 OSTRACE(("TRUNCATE %d %lld\n", pFile->h, nByte));
33727 SimulateIOError(return SQLITE_IOERR_TRUNCATE);
33729 /* If the user has configured a chunk-size for this file, truncate the
33730 ** file so that it consists of an integer number of chunks (i.e. the
33731 ** actual file size after the operation may be larger than the requested
33732 ** size).
33734 if( pFile->szChunk>0 ){
33735 nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
33738 /* SetEndOfFile() returns non-zero when successful, or zero when it fails. */
33739 if( seekWinFile(pFile, nByte) ){
33740 rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno,
33741 "winTruncate1", pFile->zPath);
33742 }else if( 0==osSetEndOfFile(pFile->h) ){
33743 pFile->lastErrno = osGetLastError();
33744 rc = winLogError(SQLITE_IOERR_TRUNCATE, pFile->lastErrno,
33745 "winTruncate2", pFile->zPath);
33748 OSTRACE(("TRUNCATE %d %lld %s\n", pFile->h, nByte, rc ? "failed" : "ok"));
33749 return rc;
33752 #ifdef SQLITE_TEST
33754 ** Count the number of fullsyncs and normal syncs. This is used to test
33755 ** that syncs and fullsyncs are occuring at the right times.
33757 SQLITE_API int sqlite3_sync_count = 0;
33758 SQLITE_API int sqlite3_fullsync_count = 0;
33759 #endif
33762 ** Make sure all writes to a particular file are committed to disk.
33764 static int winSync(sqlite3_file *id, int flags){
33765 #ifndef SQLITE_NO_SYNC
33767 ** Used only when SQLITE_NO_SYNC is not defined.
33769 BOOL rc;
33770 #endif
33771 #if !defined(NDEBUG) || !defined(SQLITE_NO_SYNC) || \
33772 (defined(SQLITE_TEST) && defined(SQLITE_DEBUG))
33774 ** Used when SQLITE_NO_SYNC is not defined and by the assert() and/or
33775 ** OSTRACE() macros.
33777 winFile *pFile = (winFile*)id;
33778 #else
33779 UNUSED_PARAMETER(id);
33780 #endif
33782 assert( pFile );
33783 /* Check that one of SQLITE_SYNC_NORMAL or FULL was passed */
33784 assert((flags&0x0F)==SQLITE_SYNC_NORMAL
33785 || (flags&0x0F)==SQLITE_SYNC_FULL
33788 OSTRACE(("SYNC %d lock=%d\n", pFile->h, pFile->locktype));
33790 /* Unix cannot, but some systems may return SQLITE_FULL from here. This
33791 ** line is to test that doing so does not cause any problems.
33793 SimulateDiskfullError( return SQLITE_FULL );
33795 #ifndef SQLITE_TEST
33796 UNUSED_PARAMETER(flags);
33797 #else
33798 if( (flags&0x0F)==SQLITE_SYNC_FULL ){
33799 sqlite3_fullsync_count++;
33801 sqlite3_sync_count++;
33802 #endif
33804 /* If we compiled with the SQLITE_NO_SYNC flag, then syncing is a
33805 ** no-op
33807 #ifdef SQLITE_NO_SYNC
33808 return SQLITE_OK;
33809 #else
33810 rc = osFlushFileBuffers(pFile->h);
33811 SimulateIOError( rc=FALSE );
33812 if( rc ){
33813 return SQLITE_OK;
33814 }else{
33815 pFile->lastErrno = osGetLastError();
33816 return winLogError(SQLITE_IOERR_FSYNC, pFile->lastErrno,
33817 "winSync", pFile->zPath);
33819 #endif
33823 ** Determine the current size of a file in bytes
33825 static int winFileSize(sqlite3_file *id, sqlite3_int64 *pSize){
33826 DWORD upperBits;
33827 DWORD lowerBits;
33828 winFile *pFile = (winFile*)id;
33829 DWORD lastErrno;
33831 assert( id!=0 );
33832 SimulateIOError(return SQLITE_IOERR_FSTAT);
33833 lowerBits = osGetFileSize(pFile->h, &upperBits);
33834 if( (lowerBits == INVALID_FILE_SIZE)
33835 && ((lastErrno = osGetLastError())!=NO_ERROR) )
33837 pFile->lastErrno = lastErrno;
33838 return winLogError(SQLITE_IOERR_FSTAT, pFile->lastErrno,
33839 "winFileSize", pFile->zPath);
33841 *pSize = (((sqlite3_int64)upperBits)<<32) + lowerBits;
33842 return SQLITE_OK;
33846 ** LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems.
33848 #ifndef LOCKFILE_FAIL_IMMEDIATELY
33849 # define LOCKFILE_FAIL_IMMEDIATELY 1
33850 #endif
33853 ** Acquire a reader lock.
33854 ** Different API routines are called depending on whether or not this
33855 ** is Win9x or WinNT.
33857 static int getReadLock(winFile *pFile){
33858 int res;
33859 if( isNT() ){
33860 OVERLAPPED ovlp;
33861 ovlp.Offset = SHARED_FIRST;
33862 ovlp.OffsetHigh = 0;
33863 ovlp.hEvent = 0;
33864 res = osLockFileEx(pFile->h, LOCKFILE_FAIL_IMMEDIATELY,
33865 0, SHARED_SIZE, 0, &ovlp);
33866 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
33868 #if SQLITE_OS_WINCE==0
33869 }else{
33870 int lk;
33871 sqlite3_randomness(sizeof(lk), &lk);
33872 pFile->sharedLockByte = (short)((lk & 0x7fffffff)%(SHARED_SIZE - 1));
33873 res = osLockFile(pFile->h, SHARED_FIRST+pFile->sharedLockByte, 0, 1, 0);
33874 #endif
33876 if( res == 0 ){
33877 pFile->lastErrno = osGetLastError();
33878 /* No need to log a failure to lock */
33880 return res;
33884 ** Undo a readlock
33886 static int unlockReadLock(winFile *pFile){
33887 int res;
33888 DWORD lastErrno;
33889 if( isNT() ){
33890 res = osUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
33891 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
33893 #if SQLITE_OS_WINCE==0
33894 }else{
33895 res = osUnlockFile(pFile->h, SHARED_FIRST + pFile->sharedLockByte, 0, 1, 0);
33896 #endif
33898 if( res==0 && ((lastErrno = osGetLastError())!=ERROR_NOT_LOCKED) ){
33899 pFile->lastErrno = lastErrno;
33900 winLogError(SQLITE_IOERR_UNLOCK, pFile->lastErrno,
33901 "unlockReadLock", pFile->zPath);
33903 return res;
33907 ** Lock the file with the lock specified by parameter locktype - one
33908 ** of the following:
33910 ** (1) SHARED_LOCK
33911 ** (2) RESERVED_LOCK
33912 ** (3) PENDING_LOCK
33913 ** (4) EXCLUSIVE_LOCK
33915 ** Sometimes when requesting one lock state, additional lock states
33916 ** are inserted in between. The locking might fail on one of the later
33917 ** transitions leaving the lock state different from what it started but
33918 ** still short of its goal. The following chart shows the allowed
33919 ** transitions and the inserted intermediate states:
33921 ** UNLOCKED -> SHARED
33922 ** SHARED -> RESERVED
33923 ** SHARED -> (PENDING) -> EXCLUSIVE
33924 ** RESERVED -> (PENDING) -> EXCLUSIVE
33925 ** PENDING -> EXCLUSIVE
33927 ** This routine will only increase a lock. The winUnlock() routine
33928 ** erases all locks at once and returns us immediately to locking level 0.
33929 ** It is not possible to lower the locking level one step at a time. You
33930 ** must go straight to locking level 0.
33932 static int winLock(sqlite3_file *id, int locktype){
33933 int rc = SQLITE_OK; /* Return code from subroutines */
33934 int res = 1; /* Result of a Windows lock call */
33935 int newLocktype; /* Set pFile->locktype to this value before exiting */
33936 int gotPendingLock = 0;/* True if we acquired a PENDING lock this time */
33937 winFile *pFile = (winFile*)id;
33938 DWORD lastErrno = NO_ERROR;
33940 assert( id!=0 );
33941 OSTRACE(("LOCK %d %d was %d(%d)\n",
33942 pFile->h, locktype, pFile->locktype, pFile->sharedLockByte));
33944 /* If there is already a lock of this type or more restrictive on the
33945 ** OsFile, do nothing. Don't use the end_lock: exit path, as
33946 ** sqlite3OsEnterMutex() hasn't been called yet.
33948 if( pFile->locktype>=locktype ){
33949 return SQLITE_OK;
33952 /* Make sure the locking sequence is correct
33954 assert( pFile->locktype!=NO_LOCK || locktype==SHARED_LOCK );
33955 assert( locktype!=PENDING_LOCK );
33956 assert( locktype!=RESERVED_LOCK || pFile->locktype==SHARED_LOCK );
33958 /* Lock the PENDING_LOCK byte if we need to acquire a PENDING lock or
33959 ** a SHARED lock. If we are acquiring a SHARED lock, the acquisition of
33960 ** the PENDING_LOCK byte is temporary.
33962 newLocktype = pFile->locktype;
33963 if( (pFile->locktype==NO_LOCK)
33964 || ( (locktype==EXCLUSIVE_LOCK)
33965 && (pFile->locktype==RESERVED_LOCK))
33967 int cnt = 3;
33968 while( cnt-->0 && (res = osLockFile(pFile->h, PENDING_BYTE, 0, 1, 0))==0 ){
33969 /* Try 3 times to get the pending lock. This is needed to work
33970 ** around problems caused by indexing and/or anti-virus software on
33971 ** Windows systems.
33972 ** If you are using this code as a model for alternative VFSes, do not
33973 ** copy this retry logic. It is a hack intended for Windows only.
33975 OSTRACE(("could not get a PENDING lock. cnt=%d\n", cnt));
33976 if( cnt ) osSleep(1);
33978 gotPendingLock = res;
33979 if( !res ){
33980 lastErrno = osGetLastError();
33984 /* Acquire a shared lock
33986 if( locktype==SHARED_LOCK && res ){
33987 assert( pFile->locktype==NO_LOCK );
33988 res = getReadLock(pFile);
33989 if( res ){
33990 newLocktype = SHARED_LOCK;
33991 }else{
33992 lastErrno = osGetLastError();
33996 /* Acquire a RESERVED lock
33998 if( locktype==RESERVED_LOCK && res ){
33999 assert( pFile->locktype==SHARED_LOCK );
34000 res = osLockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34001 if( res ){
34002 newLocktype = RESERVED_LOCK;
34003 }else{
34004 lastErrno = osGetLastError();
34008 /* Acquire a PENDING lock
34010 if( locktype==EXCLUSIVE_LOCK && res ){
34011 newLocktype = PENDING_LOCK;
34012 gotPendingLock = 0;
34015 /* Acquire an EXCLUSIVE lock
34017 if( locktype==EXCLUSIVE_LOCK && res ){
34018 assert( pFile->locktype>=SHARED_LOCK );
34019 res = unlockReadLock(pFile);
34020 OSTRACE(("unreadlock = %d\n", res));
34021 res = osLockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
34022 if( res ){
34023 newLocktype = EXCLUSIVE_LOCK;
34024 }else{
34025 lastErrno = osGetLastError();
34026 OSTRACE(("error-code = %d\n", lastErrno));
34027 getReadLock(pFile);
34031 /* If we are holding a PENDING lock that ought to be released, then
34032 ** release it now.
34034 if( gotPendingLock && locktype==SHARED_LOCK ){
34035 osUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
34038 /* Update the state of the lock has held in the file descriptor then
34039 ** return the appropriate result code.
34041 if( res ){
34042 rc = SQLITE_OK;
34043 }else{
34044 OSTRACE(("LOCK FAILED %d trying for %d but got %d\n", pFile->h,
34045 locktype, newLocktype));
34046 pFile->lastErrno = lastErrno;
34047 rc = SQLITE_BUSY;
34049 pFile->locktype = (u8)newLocktype;
34050 return rc;
34054 ** This routine checks if there is a RESERVED lock held on the specified
34055 ** file by this or any other process. If such a lock is held, return
34056 ** non-zero, otherwise zero.
34058 static int winCheckReservedLock(sqlite3_file *id, int *pResOut){
34059 int rc;
34060 winFile *pFile = (winFile*)id;
34062 SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
34064 assert( id!=0 );
34065 if( pFile->locktype>=RESERVED_LOCK ){
34066 rc = 1;
34067 OSTRACE(("TEST WR-LOCK %d %d (local)\n", pFile->h, rc));
34068 }else{
34069 rc = osLockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34070 if( rc ){
34071 osUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34073 rc = !rc;
34074 OSTRACE(("TEST WR-LOCK %d %d (remote)\n", pFile->h, rc));
34076 *pResOut = rc;
34077 return SQLITE_OK;
34081 ** Lower the locking level on file descriptor id to locktype. locktype
34082 ** must be either NO_LOCK or SHARED_LOCK.
34084 ** If the locking level of the file descriptor is already at or below
34085 ** the requested locking level, this routine is a no-op.
34087 ** It is not possible for this routine to fail if the second argument
34088 ** is NO_LOCK. If the second argument is SHARED_LOCK then this routine
34089 ** might return SQLITE_IOERR;
34091 static int winUnlock(sqlite3_file *id, int locktype){
34092 int type;
34093 winFile *pFile = (winFile*)id;
34094 int rc = SQLITE_OK;
34095 assert( pFile!=0 );
34096 assert( locktype<=SHARED_LOCK );
34097 OSTRACE(("UNLOCK %d to %d was %d(%d)\n", pFile->h, locktype,
34098 pFile->locktype, pFile->sharedLockByte));
34099 type = pFile->locktype;
34100 if( type>=EXCLUSIVE_LOCK ){
34101 osUnlockFile(pFile->h, SHARED_FIRST, 0, SHARED_SIZE, 0);
34102 if( locktype==SHARED_LOCK && !getReadLock(pFile) ){
34103 /* This should never happen. We should always be able to
34104 ** reacquire the read lock */
34105 rc = winLogError(SQLITE_IOERR_UNLOCK, osGetLastError(),
34106 "winUnlock", pFile->zPath);
34109 if( type>=RESERVED_LOCK ){
34110 osUnlockFile(pFile->h, RESERVED_BYTE, 0, 1, 0);
34112 if( locktype==NO_LOCK && type>=SHARED_LOCK ){
34113 unlockReadLock(pFile);
34115 if( type>=PENDING_LOCK ){
34116 osUnlockFile(pFile->h, PENDING_BYTE, 0, 1, 0);
34118 pFile->locktype = (u8)locktype;
34119 return rc;
34123 ** If *pArg is inititially negative then this is a query. Set *pArg to
34124 ** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set.
34126 ** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags.
34128 static void winModeBit(winFile *pFile, unsigned char mask, int *pArg){
34129 if( *pArg<0 ){
34130 *pArg = (pFile->ctrlFlags & mask)!=0;
34131 }else if( (*pArg)==0 ){
34132 pFile->ctrlFlags &= ~mask;
34133 }else{
34134 pFile->ctrlFlags |= mask;
34139 ** Control and query of the open file handle.
34141 static int winFileControl(sqlite3_file *id, int op, void *pArg){
34142 winFile *pFile = (winFile*)id;
34143 switch( op ){
34144 case SQLITE_FCNTL_LOCKSTATE: {
34145 *(int*)pArg = pFile->locktype;
34146 return SQLITE_OK;
34148 case SQLITE_LAST_ERRNO: {
34149 *(int*)pArg = (int)pFile->lastErrno;
34150 return SQLITE_OK;
34152 case SQLITE_FCNTL_CHUNK_SIZE: {
34153 pFile->szChunk = *(int *)pArg;
34154 return SQLITE_OK;
34156 case SQLITE_FCNTL_SIZE_HINT: {
34157 if( pFile->szChunk>0 ){
34158 sqlite3_int64 oldSz;
34159 int rc = winFileSize(id, &oldSz);
34160 if( rc==SQLITE_OK ){
34161 sqlite3_int64 newSz = *(sqlite3_int64*)pArg;
34162 if( newSz>oldSz ){
34163 SimulateIOErrorBenign(1);
34164 rc = winTruncate(id, newSz);
34165 SimulateIOErrorBenign(0);
34168 return rc;
34170 return SQLITE_OK;
34172 case SQLITE_FCNTL_PERSIST_WAL: {
34173 winModeBit(pFile, WINFILE_PERSIST_WAL, (int*)pArg);
34174 return SQLITE_OK;
34176 case SQLITE_FCNTL_POWERSAFE_OVERWRITE: {
34177 winModeBit(pFile, WINFILE_PSOW, (int*)pArg);
34178 return SQLITE_OK;
34180 case SQLITE_FCNTL_VFSNAME: {
34181 *(char**)pArg = sqlite3_mprintf("win32");
34182 return SQLITE_OK;
34184 case SQLITE_FCNTL_WIN32_AV_RETRY: {
34185 int *a = (int*)pArg;
34186 if( a[0]>0 ){
34187 win32IoerrRetry = a[0];
34188 }else{
34189 a[0] = win32IoerrRetry;
34191 if( a[1]>0 ){
34192 win32IoerrRetryDelay = a[1];
34193 }else{
34194 a[1] = win32IoerrRetryDelay;
34196 return SQLITE_OK;
34199 return SQLITE_NOTFOUND;
34203 ** Return the sector size in bytes of the underlying block device for
34204 ** the specified file. This is almost always 512 bytes, but may be
34205 ** larger for some devices.
34207 ** SQLite code assumes this function cannot fail. It also assumes that
34208 ** if two files are created in the same file-system directory (i.e.
34209 ** a database and its journal file) that the sector size will be the
34210 ** same for both.
34212 static int winSectorSize(sqlite3_file *id){
34213 (void)id;
34214 return SQLITE_DEFAULT_SECTOR_SIZE;
34218 ** Return a vector of device characteristics.
34220 static int winDeviceCharacteristics(sqlite3_file *id){
34221 winFile *p = (winFile*)id;
34222 return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN |
34223 ((p->ctrlFlags & WINFILE_PSOW)?SQLITE_IOCAP_POWERSAFE_OVERWRITE:0);
34226 #ifndef SQLITE_OMIT_WAL
34229 ** Windows will only let you create file view mappings
34230 ** on allocation size granularity boundaries.
34231 ** During sqlite3_os_init() we do a GetSystemInfo()
34232 ** to get the granularity size.
34234 SYSTEM_INFO winSysInfo;
34237 ** Helper functions to obtain and relinquish the global mutex. The
34238 ** global mutex is used to protect the winLockInfo objects used by
34239 ** this file, all of which may be shared by multiple threads.
34241 ** Function winShmMutexHeld() is used to assert() that the global mutex
34242 ** is held when required. This function is only used as part of assert()
34243 ** statements. e.g.
34245 ** winShmEnterMutex()
34246 ** assert( winShmMutexHeld() );
34247 ** winShmLeaveMutex()
34249 static void winShmEnterMutex(void){
34250 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
34252 static void winShmLeaveMutex(void){
34253 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
34255 #ifdef SQLITE_DEBUG
34256 static int winShmMutexHeld(void) {
34257 return sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
34259 #endif
34262 ** Object used to represent a single file opened and mmapped to provide
34263 ** shared memory. When multiple threads all reference the same
34264 ** log-summary, each thread has its own winFile object, but they all
34265 ** point to a single instance of this object. In other words, each
34266 ** log-summary is opened only once per process.
34268 ** winShmMutexHeld() must be true when creating or destroying
34269 ** this object or while reading or writing the following fields:
34271 ** nRef
34272 ** pNext
34274 ** The following fields are read-only after the object is created:
34276 ** fid
34277 ** zFilename
34279 ** Either winShmNode.mutex must be held or winShmNode.nRef==0 and
34280 ** winShmMutexHeld() is true when reading or writing any other field
34281 ** in this structure.
34284 struct winShmNode {
34285 sqlite3_mutex *mutex; /* Mutex to access this object */
34286 char *zFilename; /* Name of the file */
34287 winFile hFile; /* File handle from winOpen */
34289 int szRegion; /* Size of shared-memory regions */
34290 int nRegion; /* Size of array apRegion */
34291 struct ShmRegion {
34292 HANDLE hMap; /* File handle from CreateFileMapping */
34293 void *pMap;
34294 } *aRegion;
34295 DWORD lastErrno; /* The Windows errno from the last I/O error */
34297 int nRef; /* Number of winShm objects pointing to this */
34298 winShm *pFirst; /* All winShm objects pointing to this */
34299 winShmNode *pNext; /* Next in list of all winShmNode objects */
34300 #ifdef SQLITE_DEBUG
34301 u8 nextShmId; /* Next available winShm.id value */
34302 #endif
34306 ** A global array of all winShmNode objects.
34308 ** The winShmMutexHeld() must be true while reading or writing this list.
34310 static winShmNode *winShmNodeList = 0;
34313 ** Structure used internally by this VFS to record the state of an
34314 ** open shared memory connection.
34316 ** The following fields are initialized when this object is created and
34317 ** are read-only thereafter:
34319 ** winShm.pShmNode
34320 ** winShm.id
34322 ** All other fields are read/write. The winShm.pShmNode->mutex must be held
34323 ** while accessing any read/write fields.
34325 struct winShm {
34326 winShmNode *pShmNode; /* The underlying winShmNode object */
34327 winShm *pNext; /* Next winShm with the same winShmNode */
34328 u8 hasMutex; /* True if holding the winShmNode mutex */
34329 u16 sharedMask; /* Mask of shared locks held */
34330 u16 exclMask; /* Mask of exclusive locks held */
34331 #ifdef SQLITE_DEBUG
34332 u8 id; /* Id of this connection with its winShmNode */
34333 #endif
34337 ** Constants used for locking
34339 #define WIN_SHM_BASE ((22+SQLITE_SHM_NLOCK)*4) /* first lock byte */
34340 #define WIN_SHM_DMS (WIN_SHM_BASE+SQLITE_SHM_NLOCK) /* deadman switch */
34343 ** Apply advisory locks for all n bytes beginning at ofst.
34345 #define _SHM_UNLCK 1
34346 #define _SHM_RDLCK 2
34347 #define _SHM_WRLCK 3
34348 static int winShmSystemLock(
34349 winShmNode *pFile, /* Apply locks to this open shared-memory segment */
34350 int lockType, /* _SHM_UNLCK, _SHM_RDLCK, or _SHM_WRLCK */
34351 int ofst, /* Offset to first byte to be locked/unlocked */
34352 int nByte /* Number of bytes to lock or unlock */
34354 OVERLAPPED ovlp;
34355 DWORD dwFlags;
34356 int rc = 0; /* Result code form Lock/UnlockFileEx() */
34358 /* Access to the winShmNode object is serialized by the caller */
34359 assert( sqlite3_mutex_held(pFile->mutex) || pFile->nRef==0 );
34361 /* Initialize the locking parameters */
34362 dwFlags = LOCKFILE_FAIL_IMMEDIATELY;
34363 if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK;
34365 memset(&ovlp, 0, sizeof(OVERLAPPED));
34366 ovlp.Offset = ofst;
34368 /* Release/Acquire the system-level lock */
34369 if( lockType==_SHM_UNLCK ){
34370 rc = osUnlockFileEx(pFile->hFile.h, 0, nByte, 0, &ovlp);
34371 }else{
34372 rc = osLockFileEx(pFile->hFile.h, dwFlags, 0, nByte, 0, &ovlp);
34375 if( rc!= 0 ){
34376 rc = SQLITE_OK;
34377 }else{
34378 pFile->lastErrno = osGetLastError();
34379 rc = SQLITE_BUSY;
34382 OSTRACE(("SHM-LOCK %d %s %s 0x%08lx\n",
34383 pFile->hFile.h,
34384 rc==SQLITE_OK ? "ok" : "failed",
34385 lockType==_SHM_UNLCK ? "UnlockFileEx" : "LockFileEx",
34386 pFile->lastErrno));
34388 return rc;
34391 /* Forward references to VFS methods */
34392 static int winOpen(sqlite3_vfs*,const char*,sqlite3_file*,int,int*);
34393 static int winDelete(sqlite3_vfs *,const char*,int);
34396 ** Purge the winShmNodeList list of all entries with winShmNode.nRef==0.
34398 ** This is not a VFS shared-memory method; it is a utility function called
34399 ** by VFS shared-memory methods.
34401 static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
34402 winShmNode **pp;
34403 winShmNode *p;
34404 BOOL bRc;
34405 assert( winShmMutexHeld() );
34406 pp = &winShmNodeList;
34407 while( (p = *pp)!=0 ){
34408 if( p->nRef==0 ){
34409 int i;
34410 if( p->mutex ) sqlite3_mutex_free(p->mutex);
34411 for(i=0; i<p->nRegion; i++){
34412 bRc = osUnmapViewOfFile(p->aRegion[i].pMap);
34413 OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
34414 (int)osGetCurrentProcessId(), i,
34415 bRc ? "ok" : "failed"));
34416 bRc = osCloseHandle(p->aRegion[i].hMap);
34417 OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
34418 (int)osGetCurrentProcessId(), i,
34419 bRc ? "ok" : "failed"));
34421 if( p->hFile.h != INVALID_HANDLE_VALUE ){
34422 SimulateIOErrorBenign(1);
34423 winClose((sqlite3_file *)&p->hFile);
34424 SimulateIOErrorBenign(0);
34426 if( deleteFlag ){
34427 SimulateIOErrorBenign(1);
34428 sqlite3BeginBenignMalloc();
34429 winDelete(pVfs, p->zFilename, 0);
34430 sqlite3EndBenignMalloc();
34431 SimulateIOErrorBenign(0);
34433 *pp = p->pNext;
34434 sqlite3_free(p->aRegion);
34435 sqlite3_free(p);
34436 }else{
34437 pp = &p->pNext;
34443 ** Open the shared-memory area associated with database file pDbFd.
34445 ** When opening a new shared-memory file, if no other instances of that
34446 ** file are currently open, in this process or in other processes, then
34447 ** the file must be truncated to zero length or have its header cleared.
34449 static int winOpenSharedMemory(winFile *pDbFd){
34450 struct winShm *p; /* The connection to be opened */
34451 struct winShmNode *pShmNode = 0; /* The underlying mmapped file */
34452 int rc; /* Result code */
34453 struct winShmNode *pNew; /* Newly allocated winShmNode */
34454 int nName; /* Size of zName in bytes */
34456 assert( pDbFd->pShm==0 ); /* Not previously opened */
34458 /* Allocate space for the new sqlite3_shm object. Also speculatively
34459 ** allocate space for a new winShmNode and filename.
34461 p = sqlite3_malloc( sizeof(*p) );
34462 if( p==0 ) return SQLITE_IOERR_NOMEM;
34463 memset(p, 0, sizeof(*p));
34464 nName = sqlite3Strlen30(pDbFd->zPath);
34465 pNew = sqlite3_malloc( sizeof(*pShmNode) + nName + 17 );
34466 if( pNew==0 ){
34467 sqlite3_free(p);
34468 return SQLITE_IOERR_NOMEM;
34470 memset(pNew, 0, sizeof(*pNew) + nName + 17);
34471 pNew->zFilename = (char*)&pNew[1];
34472 sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath);
34473 sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename);
34475 /* Look to see if there is an existing winShmNode that can be used.
34476 ** If no matching winShmNode currently exists, create a new one.
34478 winShmEnterMutex();
34479 for(pShmNode = winShmNodeList; pShmNode; pShmNode=pShmNode->pNext){
34480 /* TBD need to come up with better match here. Perhaps
34481 ** use FILE_ID_BOTH_DIR_INFO Structure.
34483 if( sqlite3StrICmp(pShmNode->zFilename, pNew->zFilename)==0 ) break;
34485 if( pShmNode ){
34486 sqlite3_free(pNew);
34487 }else{
34488 pShmNode = pNew;
34489 pNew = 0;
34490 ((winFile*)(&pShmNode->hFile))->h = INVALID_HANDLE_VALUE;
34491 pShmNode->pNext = winShmNodeList;
34492 winShmNodeList = pShmNode;
34494 pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
34495 if( pShmNode->mutex==0 ){
34496 rc = SQLITE_IOERR_NOMEM;
34497 goto shm_open_err;
34500 rc = winOpen(pDbFd->pVfs,
34501 pShmNode->zFilename, /* Name of the file (UTF-8) */
34502 (sqlite3_file*)&pShmNode->hFile, /* File handle here */
34503 SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
34505 if( SQLITE_OK!=rc ){
34506 goto shm_open_err;
34509 /* Check to see if another process is holding the dead-man switch.
34510 ** If not, truncate the file to zero length.
34512 if( winShmSystemLock(pShmNode, _SHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){
34513 rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0);
34514 if( rc!=SQLITE_OK ){
34515 rc = winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(),
34516 "winOpenShm", pDbFd->zPath);
34519 if( rc==SQLITE_OK ){
34520 winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
34521 rc = winShmSystemLock(pShmNode, _SHM_RDLCK, WIN_SHM_DMS, 1);
34523 if( rc ) goto shm_open_err;
34526 /* Make the new connection a child of the winShmNode */
34527 p->pShmNode = pShmNode;
34528 #ifdef SQLITE_DEBUG
34529 p->id = pShmNode->nextShmId++;
34530 #endif
34531 pShmNode->nRef++;
34532 pDbFd->pShm = p;
34533 winShmLeaveMutex();
34535 /* The reference count on pShmNode has already been incremented under
34536 ** the cover of the winShmEnterMutex() mutex and the pointer from the
34537 ** new (struct winShm) object to the pShmNode has been set. All that is
34538 ** left to do is to link the new object into the linked list starting
34539 ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex
34540 ** mutex.
34542 sqlite3_mutex_enter(pShmNode->mutex);
34543 p->pNext = pShmNode->pFirst;
34544 pShmNode->pFirst = p;
34545 sqlite3_mutex_leave(pShmNode->mutex);
34546 return SQLITE_OK;
34548 /* Jump here on any error */
34549 shm_open_err:
34550 winShmSystemLock(pShmNode, _SHM_UNLCK, WIN_SHM_DMS, 1);
34551 winShmPurge(pDbFd->pVfs, 0); /* This call frees pShmNode if required */
34552 sqlite3_free(p);
34553 sqlite3_free(pNew);
34554 winShmLeaveMutex();
34555 return rc;
34559 ** Close a connection to shared-memory. Delete the underlying
34560 ** storage if deleteFlag is true.
34562 static int winShmUnmap(
34563 sqlite3_file *fd, /* Database holding shared memory */
34564 int deleteFlag /* Delete after closing if true */
34566 winFile *pDbFd; /* Database holding shared-memory */
34567 winShm *p; /* The connection to be closed */
34568 winShmNode *pShmNode; /* The underlying shared-memory file */
34569 winShm **pp; /* For looping over sibling connections */
34571 pDbFd = (winFile*)fd;
34572 p = pDbFd->pShm;
34573 if( p==0 ) return SQLITE_OK;
34574 pShmNode = p->pShmNode;
34576 /* Remove connection p from the set of connections associated
34577 ** with pShmNode */
34578 sqlite3_mutex_enter(pShmNode->mutex);
34579 for(pp=&pShmNode->pFirst; (*pp)!=p; pp = &(*pp)->pNext){}
34580 *pp = p->pNext;
34582 /* Free the connection p */
34583 sqlite3_free(p);
34584 pDbFd->pShm = 0;
34585 sqlite3_mutex_leave(pShmNode->mutex);
34587 /* If pShmNode->nRef has reached 0, then close the underlying
34588 ** shared-memory file, too */
34589 winShmEnterMutex();
34590 assert( pShmNode->nRef>0 );
34591 pShmNode->nRef--;
34592 if( pShmNode->nRef==0 ){
34593 winShmPurge(pDbFd->pVfs, deleteFlag);
34595 winShmLeaveMutex();
34597 return SQLITE_OK;
34601 ** Change the lock state for a shared-memory segment.
34603 static int winShmLock(
34604 sqlite3_file *fd, /* Database file holding the shared memory */
34605 int ofst, /* First lock to acquire or release */
34606 int n, /* Number of locks to acquire or release */
34607 int flags /* What to do with the lock */
34609 winFile *pDbFd = (winFile*)fd; /* Connection holding shared memory */
34610 winShm *p = pDbFd->pShm; /* The shared memory being locked */
34611 winShm *pX; /* For looping over all siblings */
34612 winShmNode *pShmNode = p->pShmNode;
34613 int rc = SQLITE_OK; /* Result code */
34614 u16 mask; /* Mask of locks to take or release */
34616 assert( ofst>=0 && ofst+n<=SQLITE_SHM_NLOCK );
34617 assert( n>=1 );
34618 assert( flags==(SQLITE_SHM_LOCK | SQLITE_SHM_SHARED)
34619 || flags==(SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE)
34620 || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED)
34621 || flags==(SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE) );
34622 assert( n==1 || (flags & SQLITE_SHM_EXCLUSIVE)!=0 );
34624 mask = (u16)((1U<<(ofst+n)) - (1U<<ofst));
34625 assert( n>1 || mask==(1<<ofst) );
34626 sqlite3_mutex_enter(pShmNode->mutex);
34627 if( flags & SQLITE_SHM_UNLOCK ){
34628 u16 allMask = 0; /* Mask of locks held by siblings */
34630 /* See if any siblings hold this same lock */
34631 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
34632 if( pX==p ) continue;
34633 assert( (pX->exclMask & (p->exclMask|p->sharedMask))==0 );
34634 allMask |= pX->sharedMask;
34637 /* Unlock the system-level locks */
34638 if( (mask & allMask)==0 ){
34639 rc = winShmSystemLock(pShmNode, _SHM_UNLCK, ofst+WIN_SHM_BASE, n);
34640 }else{
34641 rc = SQLITE_OK;
34644 /* Undo the local locks */
34645 if( rc==SQLITE_OK ){
34646 p->exclMask &= ~mask;
34647 p->sharedMask &= ~mask;
34649 }else if( flags & SQLITE_SHM_SHARED ){
34650 u16 allShared = 0; /* Union of locks held by connections other than "p" */
34652 /* Find out which shared locks are already held by sibling connections.
34653 ** If any sibling already holds an exclusive lock, go ahead and return
34654 ** SQLITE_BUSY.
34656 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
34657 if( (pX->exclMask & mask)!=0 ){
34658 rc = SQLITE_BUSY;
34659 break;
34661 allShared |= pX->sharedMask;
34664 /* Get shared locks at the system level, if necessary */
34665 if( rc==SQLITE_OK ){
34666 if( (allShared & mask)==0 ){
34667 rc = winShmSystemLock(pShmNode, _SHM_RDLCK, ofst+WIN_SHM_BASE, n);
34668 }else{
34669 rc = SQLITE_OK;
34673 /* Get the local shared locks */
34674 if( rc==SQLITE_OK ){
34675 p->sharedMask |= mask;
34677 }else{
34678 /* Make sure no sibling connections hold locks that will block this
34679 ** lock. If any do, return SQLITE_BUSY right away.
34681 for(pX=pShmNode->pFirst; pX; pX=pX->pNext){
34682 if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
34683 rc = SQLITE_BUSY;
34684 break;
34688 /* Get the exclusive locks at the system level. Then if successful
34689 ** also mark the local connection as being locked.
34691 if( rc==SQLITE_OK ){
34692 rc = winShmSystemLock(pShmNode, _SHM_WRLCK, ofst+WIN_SHM_BASE, n);
34693 if( rc==SQLITE_OK ){
34694 assert( (p->sharedMask & mask)==0 );
34695 p->exclMask |= mask;
34699 sqlite3_mutex_leave(pShmNode->mutex);
34700 OSTRACE(("SHM-LOCK shmid-%d, pid-%d got %03x,%03x %s\n",
34701 p->id, (int)osGetCurrentProcessId(), p->sharedMask, p->exclMask,
34702 rc ? "failed" : "ok"));
34703 return rc;
34707 ** Implement a memory barrier or memory fence on shared memory.
34709 ** All loads and stores begun before the barrier must complete before
34710 ** any load or store begun after the barrier.
34712 static void winShmBarrier(
34713 sqlite3_file *fd /* Database holding the shared memory */
34715 UNUSED_PARAMETER(fd);
34716 /* MemoryBarrier(); // does not work -- do not know why not */
34717 winShmEnterMutex();
34718 winShmLeaveMutex();
34722 ** This function is called to obtain a pointer to region iRegion of the
34723 ** shared-memory associated with the database file fd. Shared-memory regions
34724 ** are numbered starting from zero. Each shared-memory region is szRegion
34725 ** bytes in size.
34727 ** If an error occurs, an error code is returned and *pp is set to NULL.
34729 ** Otherwise, if the isWrite parameter is 0 and the requested shared-memory
34730 ** region has not been allocated (by any client, including one running in a
34731 ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
34732 ** isWrite is non-zero and the requested shared-memory region has not yet
34733 ** been allocated, it is allocated by this function.
34735 ** If the shared-memory region has already been allocated or is allocated by
34736 ** this call as described above, then it is mapped into this processes
34737 ** address space (if it is not already), *pp is set to point to the mapped
34738 ** memory and SQLITE_OK returned.
34740 static int winShmMap(
34741 sqlite3_file *fd, /* Handle open on database file */
34742 int iRegion, /* Region to retrieve */
34743 int szRegion, /* Size of regions */
34744 int isWrite, /* True to extend file if necessary */
34745 void volatile **pp /* OUT: Mapped memory */
34747 winFile *pDbFd = (winFile*)fd;
34748 winShm *p = pDbFd->pShm;
34749 winShmNode *pShmNode;
34750 int rc = SQLITE_OK;
34752 if( !p ){
34753 rc = winOpenSharedMemory(pDbFd);
34754 if( rc!=SQLITE_OK ) return rc;
34755 p = pDbFd->pShm;
34757 pShmNode = p->pShmNode;
34759 sqlite3_mutex_enter(pShmNode->mutex);
34760 assert( szRegion==pShmNode->szRegion || pShmNode->nRegion==0 );
34762 if( pShmNode->nRegion<=iRegion ){
34763 struct ShmRegion *apNew; /* New aRegion[] array */
34764 int nByte = (iRegion+1)*szRegion; /* Minimum required file size */
34765 sqlite3_int64 sz; /* Current size of wal-index file */
34767 pShmNode->szRegion = szRegion;
34769 /* The requested region is not mapped into this processes address space.
34770 ** Check to see if it has been allocated (i.e. if the wal-index file is
34771 ** large enough to contain the requested region).
34773 rc = winFileSize((sqlite3_file *)&pShmNode->hFile, &sz);
34774 if( rc!=SQLITE_OK ){
34775 rc = winLogError(SQLITE_IOERR_SHMSIZE, osGetLastError(),
34776 "winShmMap1", pDbFd->zPath);
34777 goto shmpage_out;
34780 if( sz<nByte ){
34781 /* The requested memory region does not exist. If isWrite is set to
34782 ** zero, exit early. *pp will be set to NULL and SQLITE_OK returned.
34784 ** Alternatively, if isWrite is non-zero, use ftruncate() to allocate
34785 ** the requested memory region.
34787 if( !isWrite ) goto shmpage_out;
34788 rc = winTruncate((sqlite3_file *)&pShmNode->hFile, nByte);
34789 if( rc!=SQLITE_OK ){
34790 rc = winLogError(SQLITE_IOERR_SHMSIZE, osGetLastError(),
34791 "winShmMap2", pDbFd->zPath);
34792 goto shmpage_out;
34796 /* Map the requested memory region into this processes address space. */
34797 apNew = (struct ShmRegion *)sqlite3_realloc(
34798 pShmNode->aRegion, (iRegion+1)*sizeof(apNew[0])
34800 if( !apNew ){
34801 rc = SQLITE_IOERR_NOMEM;
34802 goto shmpage_out;
34804 pShmNode->aRegion = apNew;
34806 while( pShmNode->nRegion<=iRegion ){
34807 HANDLE hMap; /* file-mapping handle */
34808 void *pMap = 0; /* Mapped memory region */
34810 hMap = osCreateFileMapping(pShmNode->hFile.h,
34811 NULL, PAGE_READWRITE, 0, nByte, NULL
34813 OSTRACE(("SHM-MAP pid-%d create region=%d nbyte=%d %s\n",
34814 (int)osGetCurrentProcessId(), pShmNode->nRegion, nByte,
34815 hMap ? "ok" : "failed"));
34816 if( hMap ){
34817 int iOffset = pShmNode->nRegion*szRegion;
34818 int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
34819 pMap = osMapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
34820 0, iOffset - iOffsetShift, szRegion + iOffsetShift
34822 OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n",
34823 (int)osGetCurrentProcessId(), pShmNode->nRegion, iOffset,
34824 szRegion, pMap ? "ok" : "failed"));
34826 if( !pMap ){
34827 pShmNode->lastErrno = osGetLastError();
34828 rc = winLogError(SQLITE_IOERR_SHMMAP, pShmNode->lastErrno,
34829 "winShmMap3", pDbFd->zPath);
34830 if( hMap ) osCloseHandle(hMap);
34831 goto shmpage_out;
34834 pShmNode->aRegion[pShmNode->nRegion].pMap = pMap;
34835 pShmNode->aRegion[pShmNode->nRegion].hMap = hMap;
34836 pShmNode->nRegion++;
34840 shmpage_out:
34841 if( pShmNode->nRegion>iRegion ){
34842 int iOffset = iRegion*szRegion;
34843 int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
34844 char *p = (char *)pShmNode->aRegion[iRegion].pMap;
34845 *pp = (void *)&p[iOffsetShift];
34846 }else{
34847 *pp = 0;
34849 sqlite3_mutex_leave(pShmNode->mutex);
34850 return rc;
34853 #else
34854 # define winShmMap 0
34855 # define winShmLock 0
34856 # define winShmBarrier 0
34857 # define winShmUnmap 0
34858 #endif /* #ifndef SQLITE_OMIT_WAL */
34861 ** Here ends the implementation of all sqlite3_file methods.
34863 ********************** End sqlite3_file Methods *******************************
34864 ******************************************************************************/
34867 ** This vector defines all the methods that can operate on an
34868 ** sqlite3_file for win32.
34870 static const sqlite3_io_methods winIoMethod = {
34871 2, /* iVersion */
34872 winClose, /* xClose */
34873 winRead, /* xRead */
34874 winWrite, /* xWrite */
34875 winTruncate, /* xTruncate */
34876 winSync, /* xSync */
34877 winFileSize, /* xFileSize */
34878 winLock, /* xLock */
34879 winUnlock, /* xUnlock */
34880 winCheckReservedLock, /* xCheckReservedLock */
34881 winFileControl, /* xFileControl */
34882 winSectorSize, /* xSectorSize */
34883 winDeviceCharacteristics, /* xDeviceCharacteristics */
34884 winShmMap, /* xShmMap */
34885 winShmLock, /* xShmLock */
34886 winShmBarrier, /* xShmBarrier */
34887 winShmUnmap /* xShmUnmap */
34890 /****************************************************************************
34891 **************************** sqlite3_vfs methods ****************************
34893 ** This division contains the implementation of methods on the
34894 ** sqlite3_vfs object.
34898 ** Convert a UTF-8 filename into whatever form the underlying
34899 ** operating system wants filenames in. Space to hold the result
34900 ** is obtained from malloc and must be freed by the calling
34901 ** function.
34903 static void *convertUtf8Filename(const char *zFilename){
34904 void *zConverted = 0;
34905 if( isNT() ){
34906 zConverted = utf8ToUnicode(zFilename);
34907 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
34909 #if SQLITE_OS_WINCE==0
34910 }else{
34911 zConverted = sqlite3_win32_utf8_to_mbcs(zFilename);
34912 #endif
34914 /* caller will handle out of memory */
34915 return zConverted;
34919 ** Create a temporary file name in zBuf. zBuf must be big enough to
34920 ** hold at pVfs->mxPathname characters.
34922 static int getTempname(int nBuf, char *zBuf){
34923 static char zChars[] =
34924 "abcdefghijklmnopqrstuvwxyz"
34925 "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
34926 "0123456789";
34927 size_t i, j;
34928 char zTempPath[MAX_PATH+2];
34930 /* It's odd to simulate an io-error here, but really this is just
34931 ** using the io-error infrastructure to test that SQLite handles this
34932 ** function failing.
34934 SimulateIOError( return SQLITE_IOERR );
34936 if( sqlite3_temp_directory ){
34937 sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", sqlite3_temp_directory);
34938 }else if( isNT() ){
34939 char *zMulti;
34940 WCHAR zWidePath[MAX_PATH];
34941 osGetTempPathW(MAX_PATH-30, zWidePath);
34942 zMulti = unicodeToUtf8(zWidePath);
34943 if( zMulti ){
34944 sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zMulti);
34945 sqlite3_free(zMulti);
34946 }else{
34947 return SQLITE_IOERR_NOMEM;
34949 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
34950 ** Since the ANSI version of these Windows API do not exist for WINCE,
34951 ** it's important to not reference them for WINCE builds.
34953 #if SQLITE_OS_WINCE==0
34954 }else{
34955 char *zUtf8;
34956 char zMbcsPath[MAX_PATH];
34957 osGetTempPathA(MAX_PATH-30, zMbcsPath);
34958 zUtf8 = sqlite3_win32_mbcs_to_utf8(zMbcsPath);
34959 if( zUtf8 ){
34960 sqlite3_snprintf(MAX_PATH-30, zTempPath, "%s", zUtf8);
34961 sqlite3_free(zUtf8);
34962 }else{
34963 return SQLITE_IOERR_NOMEM;
34965 #endif
34968 /* Check that the output buffer is large enough for the temporary file
34969 ** name. If it is not, return SQLITE_ERROR.
34971 if( (sqlite3Strlen30(zTempPath) + sqlite3Strlen30(SQLITE_TEMP_FILE_PREFIX) + 18) >= nBuf ){
34972 return SQLITE_ERROR;
34975 for(i=sqlite3Strlen30(zTempPath); i>0 && zTempPath[i-1]=='\\'; i--){}
34976 zTempPath[i] = 0;
34978 sqlite3_snprintf(nBuf-18, zBuf,
34979 "%s\\"SQLITE_TEMP_FILE_PREFIX, zTempPath);
34980 j = sqlite3Strlen30(zBuf);
34981 sqlite3_randomness(15, &zBuf[j]);
34982 for(i=0; i<15; i++, j++){
34983 zBuf[j] = (char)zChars[ ((unsigned char)zBuf[j])%(sizeof(zChars)-1) ];
34985 zBuf[j] = 0;
34986 zBuf[j+1] = 0;
34988 OSTRACE(("TEMP FILENAME: %s\n", zBuf));
34989 return SQLITE_OK;
34993 ** Open a file.
34995 static int winOpen(
34996 sqlite3_vfs *pVfs, /* Not used */
34997 const char *zName, /* Name of the file (UTF-8) */
34998 sqlite3_file *id, /* Write the SQLite file handle here */
34999 int flags, /* Open mode flags */
35000 int *pOutFlags /* Status return flags */
35002 HANDLE h;
35003 DWORD lastErrno;
35004 DWORD dwDesiredAccess;
35005 DWORD dwShareMode;
35006 DWORD dwCreationDisposition;
35007 DWORD dwFlagsAndAttributes = 0;
35008 #if SQLITE_OS_WINCE
35009 int isTemp = 0;
35010 #endif
35011 winFile *pFile = (winFile*)id;
35012 void *zConverted; /* Filename in OS encoding */
35013 const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
35014 int cnt = 0;
35016 /* If argument zPath is a NULL pointer, this function is required to open
35017 ** a temporary file. Use this buffer to store the file name in.
35019 char zTmpname[MAX_PATH+2]; /* Buffer used to create temp filename */
35021 int rc = SQLITE_OK; /* Function Return Code */
35022 #if !defined(NDEBUG) || SQLITE_OS_WINCE
35023 int eType = flags&0xFFFFFF00; /* Type of file to open */
35024 #endif
35026 int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE);
35027 int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE);
35028 int isCreate = (flags & SQLITE_OPEN_CREATE);
35029 #ifndef NDEBUG
35030 int isReadonly = (flags & SQLITE_OPEN_READONLY);
35031 #endif
35032 int isReadWrite = (flags & SQLITE_OPEN_READWRITE);
35034 #ifndef NDEBUG
35035 int isOpenJournal = (isCreate && (
35036 eType==SQLITE_OPEN_MASTER_JOURNAL
35037 || eType==SQLITE_OPEN_MAIN_JOURNAL
35038 || eType==SQLITE_OPEN_WAL
35040 #endif
35042 /* Check the following statements are true:
35044 ** (a) Exactly one of the READWRITE and READONLY flags must be set, and
35045 ** (b) if CREATE is set, then READWRITE must also be set, and
35046 ** (c) if EXCLUSIVE is set, then CREATE must also be set.
35047 ** (d) if DELETEONCLOSE is set, then CREATE must also be set.
35049 assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
35050 assert(isCreate==0 || isReadWrite);
35051 assert(isExclusive==0 || isCreate);
35052 assert(isDelete==0 || isCreate);
35054 /* The main DB, main journal, WAL file and master journal are never
35055 ** automatically deleted. Nor are they ever temporary files. */
35056 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
35057 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
35058 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
35059 assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
35061 /* Assert that the upper layer has set one of the "file-type" flags. */
35062 assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB
35063 || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
35064 || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
35065 || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
35068 assert( id!=0 );
35069 UNUSED_PARAMETER(pVfs);
35071 pFile->h = INVALID_HANDLE_VALUE;
35073 /* If the second argument to this function is NULL, generate a
35074 ** temporary file name to use
35076 if( !zUtf8Name ){
35077 assert(isDelete && !isOpenJournal);
35078 rc = getTempname(MAX_PATH+2, zTmpname);
35079 if( rc!=SQLITE_OK ){
35080 return rc;
35082 zUtf8Name = zTmpname;
35085 /* Database filenames are double-zero terminated if they are not
35086 ** URIs with parameters. Hence, they can always be passed into
35087 ** sqlite3_uri_parameter().
35089 assert( (eType!=SQLITE_OPEN_MAIN_DB) || (flags & SQLITE_OPEN_URI) ||
35090 zUtf8Name[strlen(zUtf8Name)+1]==0 );
35092 /* Convert the filename to the system encoding. */
35093 zConverted = convertUtf8Filename(zUtf8Name);
35094 if( zConverted==0 ){
35095 return SQLITE_IOERR_NOMEM;
35098 if( isReadWrite ){
35099 dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
35100 }else{
35101 dwDesiredAccess = GENERIC_READ;
35104 /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is
35105 ** created. SQLite doesn't use it to indicate "exclusive access"
35106 ** as it is usually understood.
35108 if( isExclusive ){
35109 /* Creates a new file, only if it does not already exist. */
35110 /* If the file exists, it fails. */
35111 dwCreationDisposition = CREATE_NEW;
35112 }else if( isCreate ){
35113 /* Open existing file, or create if it doesn't exist */
35114 dwCreationDisposition = OPEN_ALWAYS;
35115 }else{
35116 /* Opens a file, only if it exists. */
35117 dwCreationDisposition = OPEN_EXISTING;
35120 dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
35122 if( isDelete ){
35123 #if SQLITE_OS_WINCE
35124 dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;
35125 isTemp = 1;
35126 #else
35127 dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY
35128 | FILE_ATTRIBUTE_HIDDEN
35129 | FILE_FLAG_DELETE_ON_CLOSE;
35130 #endif
35131 }else{
35132 dwFlagsAndAttributes = FILE_ATTRIBUTE_NORMAL;
35134 /* Reports from the internet are that performance is always
35135 ** better if FILE_FLAG_RANDOM_ACCESS is used. Ticket #2699. */
35136 #if SQLITE_OS_WINCE
35137 dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS;
35138 #endif
35140 if( isNT() ){
35141 while( (h = osCreateFileW((LPCWSTR)zConverted,
35142 dwDesiredAccess,
35143 dwShareMode, NULL,
35144 dwCreationDisposition,
35145 dwFlagsAndAttributes,
35146 NULL))==INVALID_HANDLE_VALUE &&
35147 retryIoerr(&cnt, &lastErrno) ){}
35148 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
35149 ** Since the ANSI version of these Windows API do not exist for WINCE,
35150 ** it's important to not reference them for WINCE builds.
35152 #if SQLITE_OS_WINCE==0
35153 }else{
35154 while( (h = osCreateFileA((LPCSTR)zConverted,
35155 dwDesiredAccess,
35156 dwShareMode, NULL,
35157 dwCreationDisposition,
35158 dwFlagsAndAttributes,
35159 NULL))==INVALID_HANDLE_VALUE &&
35160 retryIoerr(&cnt, &lastErrno) ){}
35161 #endif
35164 logIoerr(cnt);
35166 OSTRACE(("OPEN %d %s 0x%lx %s\n",
35167 h, zName, dwDesiredAccess,
35168 h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
35170 if( h==INVALID_HANDLE_VALUE ){
35171 pFile->lastErrno = lastErrno;
35172 winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
35173 sqlite3_free(zConverted);
35174 if( isReadWrite && !isExclusive ){
35175 return winOpen(pVfs, zName, id,
35176 ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags);
35177 }else{
35178 return SQLITE_CANTOPEN_BKPT;
35182 if( pOutFlags ){
35183 if( isReadWrite ){
35184 *pOutFlags = SQLITE_OPEN_READWRITE;
35185 }else{
35186 *pOutFlags = SQLITE_OPEN_READONLY;
35190 memset(pFile, 0, sizeof(*pFile));
35191 pFile->pMethod = &winIoMethod;
35192 pFile->h = h;
35193 pFile->lastErrno = NO_ERROR;
35194 pFile->pVfs = pVfs;
35195 pFile->pShm = 0;
35196 pFile->zPath = zName;
35197 if( sqlite3_uri_boolean(zName, "psow", SQLITE_POWERSAFE_OVERWRITE) ){
35198 pFile->ctrlFlags |= WINFILE_PSOW;
35201 #if SQLITE_OS_WINCE
35202 if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
35203 && !winceCreateLock(zName, pFile)
35205 osCloseHandle(h);
35206 sqlite3_free(zConverted);
35207 return SQLITE_CANTOPEN_BKPT;
35209 if( isTemp ){
35210 pFile->zDeleteOnClose = zConverted;
35211 }else
35212 #endif
35214 sqlite3_free(zConverted);
35217 OpenCounter(+1);
35218 return rc;
35222 ** Delete the named file.
35224 ** Note that Windows does not allow a file to be deleted if some other
35225 ** process has it open. Sometimes a virus scanner or indexing program
35226 ** will open a journal file shortly after it is created in order to do
35227 ** whatever it does. While this other process is holding the
35228 ** file open, we will be unable to delete it. To work around this
35229 ** problem, we delay 100 milliseconds and try to delete again. Up
35230 ** to MX_DELETION_ATTEMPTs deletion attempts are run before giving
35231 ** up and returning an error.
35233 static int winDelete(
35234 sqlite3_vfs *pVfs, /* Not used on win32 */
35235 const char *zFilename, /* Name of file to delete */
35236 int syncDir /* Not used on win32 */
35238 int cnt = 0;
35239 int rc;
35240 DWORD lastErrno;
35241 void *zConverted;
35242 UNUSED_PARAMETER(pVfs);
35243 UNUSED_PARAMETER(syncDir);
35245 SimulateIOError(return SQLITE_IOERR_DELETE);
35246 zConverted = convertUtf8Filename(zFilename);
35247 if( zConverted==0 ){
35248 return SQLITE_IOERR_NOMEM;
35250 if( isNT() ){
35251 rc = 1;
35252 while( osGetFileAttributesW(zConverted)!=INVALID_FILE_ATTRIBUTES &&
35253 (rc = osDeleteFileW(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){}
35254 rc = rc ? SQLITE_OK : SQLITE_ERROR;
35255 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
35256 ** Since the ANSI version of these Windows API do not exist for WINCE,
35257 ** it's important to not reference them for WINCE builds.
35259 #if SQLITE_OS_WINCE==0
35260 }else{
35261 rc = 1;
35262 while( osGetFileAttributesA(zConverted)!=INVALID_FILE_ATTRIBUTES &&
35263 (rc = osDeleteFileA(zConverted))==0 && retryIoerr(&cnt, &lastErrno) ){}
35264 rc = rc ? SQLITE_OK : SQLITE_ERROR;
35265 #endif
35267 if( rc ){
35268 rc = winLogError(SQLITE_IOERR_DELETE, lastErrno,
35269 "winDelete", zFilename);
35270 }else{
35271 logIoerr(cnt);
35273 sqlite3_free(zConverted);
35274 OSTRACE(("DELETE \"%s\" %s\n", zFilename, (rc ? "failed" : "ok" )));
35275 return rc;
35279 ** Check the existance and status of a file.
35281 static int winAccess(
35282 sqlite3_vfs *pVfs, /* Not used on win32 */
35283 const char *zFilename, /* Name of file to check */
35284 int flags, /* Type of test to make on this file */
35285 int *pResOut /* OUT: Result */
35287 DWORD attr;
35288 int rc = 0;
35289 DWORD lastErrno;
35290 void *zConverted;
35291 UNUSED_PARAMETER(pVfs);
35293 SimulateIOError( return SQLITE_IOERR_ACCESS; );
35294 zConverted = convertUtf8Filename(zFilename);
35295 if( zConverted==0 ){
35296 return SQLITE_IOERR_NOMEM;
35298 if( isNT() ){
35299 int cnt = 0;
35300 WIN32_FILE_ATTRIBUTE_DATA sAttrData;
35301 memset(&sAttrData, 0, sizeof(sAttrData));
35302 while( !(rc = osGetFileAttributesExW((LPCWSTR)zConverted,
35303 GetFileExInfoStandard,
35304 &sAttrData)) && retryIoerr(&cnt, &lastErrno) ){}
35305 if( rc ){
35306 /* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
35307 ** as if it does not exist.
35309 if( flags==SQLITE_ACCESS_EXISTS
35310 && sAttrData.nFileSizeHigh==0
35311 && sAttrData.nFileSizeLow==0 ){
35312 attr = INVALID_FILE_ATTRIBUTES;
35313 }else{
35314 attr = sAttrData.dwFileAttributes;
35316 }else{
35317 logIoerr(cnt);
35318 if( lastErrno!=ERROR_FILE_NOT_FOUND ){
35319 winLogError(SQLITE_IOERR_ACCESS, lastErrno, "winAccess", zFilename);
35320 sqlite3_free(zConverted);
35321 return SQLITE_IOERR_ACCESS;
35322 }else{
35323 attr = INVALID_FILE_ATTRIBUTES;
35326 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
35327 ** Since the ANSI version of these Windows API do not exist for WINCE,
35328 ** it's important to not reference them for WINCE builds.
35330 #if SQLITE_OS_WINCE==0
35331 }else{
35332 attr = osGetFileAttributesA((char*)zConverted);
35333 #endif
35335 sqlite3_free(zConverted);
35336 switch( flags ){
35337 case SQLITE_ACCESS_READ:
35338 case SQLITE_ACCESS_EXISTS:
35339 rc = attr!=INVALID_FILE_ATTRIBUTES;
35340 break;
35341 case SQLITE_ACCESS_READWRITE:
35342 rc = attr!=INVALID_FILE_ATTRIBUTES &&
35343 (attr & FILE_ATTRIBUTE_READONLY)==0;
35344 break;
35345 default:
35346 assert(!"Invalid flags argument");
35348 *pResOut = rc;
35349 return SQLITE_OK;
35354 ** Turn a relative pathname into a full pathname. Write the full
35355 ** pathname into zOut[]. zOut[] will be at least pVfs->mxPathname
35356 ** bytes in size.
35358 static int winFullPathname(
35359 sqlite3_vfs *pVfs, /* Pointer to vfs object */
35360 const char *zRelative, /* Possibly relative input path */
35361 int nFull, /* Size of output buffer in bytes */
35362 char *zFull /* Output buffer */
35365 #if defined(__CYGWIN__)
35366 SimulateIOError( return SQLITE_ERROR );
35367 UNUSED_PARAMETER(nFull);
35368 cygwin_conv_to_full_win32_path(zRelative, zFull);
35369 return SQLITE_OK;
35370 #endif
35372 #if SQLITE_OS_WINCE
35373 SimulateIOError( return SQLITE_ERROR );
35374 UNUSED_PARAMETER(nFull);
35375 /* WinCE has no concept of a relative pathname, or so I am told. */
35376 sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zRelative);
35377 return SQLITE_OK;
35378 #endif
35380 #if !SQLITE_OS_WINCE && !defined(__CYGWIN__)
35381 int nByte;
35382 void *zConverted;
35383 char *zOut;
35385 /* If this path name begins with "/X:", where "X" is any alphabetic
35386 ** character, discard the initial "/" from the pathname.
35388 if( zRelative[0]=='/' && sqlite3Isalpha(zRelative[1]) && zRelative[2]==':' ){
35389 zRelative++;
35392 /* It's odd to simulate an io-error here, but really this is just
35393 ** using the io-error infrastructure to test that SQLite handles this
35394 ** function failing. This function could fail if, for example, the
35395 ** current working directory has been unlinked.
35397 SimulateIOError( return SQLITE_ERROR );
35398 UNUSED_PARAMETER(nFull);
35399 zConverted = convertUtf8Filename(zRelative);
35400 if( zConverted==0 ){
35401 return SQLITE_IOERR_NOMEM;
35403 if( isNT() ){
35404 LPWSTR zTemp;
35405 nByte = osGetFullPathNameW((LPCWSTR)zConverted, 0, 0, 0) + 3;
35406 zTemp = sqlite3_malloc( nByte*sizeof(zTemp[0]) );
35407 if( zTemp==0 ){
35408 sqlite3_free(zConverted);
35409 return SQLITE_IOERR_NOMEM;
35411 osGetFullPathNameW((LPCWSTR)zConverted, nByte, zTemp, 0);
35412 sqlite3_free(zConverted);
35413 zOut = unicodeToUtf8(zTemp);
35414 sqlite3_free(zTemp);
35415 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
35416 ** Since the ANSI version of these Windows API do not exist for WINCE,
35417 ** it's important to not reference them for WINCE builds.
35419 #if SQLITE_OS_WINCE==0
35420 }else{
35421 char *zTemp;
35422 nByte = osGetFullPathNameA((char*)zConverted, 0, 0, 0) + 3;
35423 zTemp = sqlite3_malloc( nByte*sizeof(zTemp[0]) );
35424 if( zTemp==0 ){
35425 sqlite3_free(zConverted);
35426 return SQLITE_IOERR_NOMEM;
35428 osGetFullPathNameA((char*)zConverted, nByte, zTemp, 0);
35429 sqlite3_free(zConverted);
35430 zOut = sqlite3_win32_mbcs_to_utf8(zTemp);
35431 sqlite3_free(zTemp);
35432 #endif
35434 if( zOut ){
35435 sqlite3_snprintf(pVfs->mxPathname, zFull, "%s", zOut);
35436 sqlite3_free(zOut);
35437 return SQLITE_OK;
35438 }else{
35439 return SQLITE_IOERR_NOMEM;
35441 #endif
35444 #ifndef SQLITE_OMIT_LOAD_EXTENSION
35446 ** Interfaces for opening a shared library, finding entry points
35447 ** within the shared library, and closing the shared library.
35450 ** Interfaces for opening a shared library, finding entry points
35451 ** within the shared library, and closing the shared library.
35453 static void *winDlOpen(sqlite3_vfs *pVfs, const char *zFilename){
35454 HANDLE h;
35455 void *zConverted = convertUtf8Filename(zFilename);
35456 UNUSED_PARAMETER(pVfs);
35457 if( zConverted==0 ){
35458 return 0;
35460 if( isNT() ){
35461 h = osLoadLibraryW((LPCWSTR)zConverted);
35462 /* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
35463 ** Since the ANSI version of these Windows API do not exist for WINCE,
35464 ** it's important to not reference them for WINCE builds.
35466 #if SQLITE_OS_WINCE==0
35467 }else{
35468 h = osLoadLibraryA((char*)zConverted);
35469 #endif
35471 sqlite3_free(zConverted);
35472 return (void*)h;
35474 static void winDlError(sqlite3_vfs *pVfs, int nBuf, char *zBufOut){
35475 UNUSED_PARAMETER(pVfs);
35476 getLastErrorMsg(osGetLastError(), nBuf, zBufOut);
35478 static void (*winDlSym(sqlite3_vfs *pVfs, void *pHandle, const char *zSymbol))(void){
35479 UNUSED_PARAMETER(pVfs);
35480 return (void(*)(void))osGetProcAddressA((HANDLE)pHandle, zSymbol);
35482 static void winDlClose(sqlite3_vfs *pVfs, void *pHandle){
35483 UNUSED_PARAMETER(pVfs);
35484 osFreeLibrary((HANDLE)pHandle);
35486 #else /* if SQLITE_OMIT_LOAD_EXTENSION is defined: */
35487 #define winDlOpen 0
35488 #define winDlError 0
35489 #define winDlSym 0
35490 #define winDlClose 0
35491 #endif
35495 ** Write up to nBuf bytes of randomness into zBuf.
35497 static int winRandomness(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
35498 int n = 0;
35499 UNUSED_PARAMETER(pVfs);
35500 #if defined(SQLITE_TEST)
35501 n = nBuf;
35502 memset(zBuf, 0, nBuf);
35503 #else
35504 if( sizeof(SYSTEMTIME)<=nBuf-n ){
35505 SYSTEMTIME x;
35506 osGetSystemTime(&x);
35507 memcpy(&zBuf[n], &x, sizeof(x));
35508 n += sizeof(x);
35510 if( sizeof(DWORD)<=nBuf-n ){
35511 DWORD pid = osGetCurrentProcessId();
35512 memcpy(&zBuf[n], &pid, sizeof(pid));
35513 n += sizeof(pid);
35515 if( sizeof(DWORD)<=nBuf-n ){
35516 DWORD cnt = osGetTickCount();
35517 memcpy(&zBuf[n], &cnt, sizeof(cnt));
35518 n += sizeof(cnt);
35520 if( sizeof(LARGE_INTEGER)<=nBuf-n ){
35521 LARGE_INTEGER i;
35522 osQueryPerformanceCounter(&i);
35523 memcpy(&zBuf[n], &i, sizeof(i));
35524 n += sizeof(i);
35526 #endif
35527 return n;
35532 ** Sleep for a little while. Return the amount of time slept.
35534 static int winSleep(sqlite3_vfs *pVfs, int microsec){
35535 osSleep((microsec+999)/1000);
35536 UNUSED_PARAMETER(pVfs);
35537 return ((microsec+999)/1000)*1000;
35541 ** The following variable, if set to a non-zero value, is interpreted as
35542 ** the number of seconds since 1970 and is used to set the result of
35543 ** sqlite3OsCurrentTime() during testing.
35545 #ifdef SQLITE_TEST
35546 SQLITE_API int sqlite3_current_time = 0; /* Fake system time in seconds since 1970. */
35547 #endif
35550 ** Find the current time (in Universal Coordinated Time). Write into *piNow
35551 ** the current time and date as a Julian Day number times 86_400_000. In
35552 ** other words, write into *piNow the number of milliseconds since the Julian
35553 ** epoch of noon in Greenwich on November 24, 4714 B.C according to the
35554 ** proleptic Gregorian calendar.
35556 ** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date
35557 ** cannot be found.
35559 static int winCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
35560 /* FILETIME structure is a 64-bit value representing the number of
35561 100-nanosecond intervals since January 1, 1601 (= JD 2305813.5).
35563 FILETIME ft;
35564 static const sqlite3_int64 winFiletimeEpoch = 23058135*(sqlite3_int64)8640000;
35565 #ifdef SQLITE_TEST
35566 static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
35567 #endif
35568 /* 2^32 - to avoid use of LL and warnings in gcc */
35569 static const sqlite3_int64 max32BitValue =
35570 (sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 + (sqlite3_int64)294967296;
35572 #if SQLITE_OS_WINCE
35573 SYSTEMTIME time;
35574 osGetSystemTime(&time);
35575 /* if SystemTimeToFileTime() fails, it returns zero. */
35576 if (!osSystemTimeToFileTime(&time,&ft)){
35577 return SQLITE_ERROR;
35579 #else
35580 osGetSystemTimeAsFileTime( &ft );
35581 #endif
35583 *piNow = winFiletimeEpoch +
35584 ((((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) +
35585 (sqlite3_int64)ft.dwLowDateTime)/(sqlite3_int64)10000;
35587 #ifdef SQLITE_TEST
35588 if( sqlite3_current_time ){
35589 *piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
35591 #endif
35592 UNUSED_PARAMETER(pVfs);
35593 return SQLITE_OK;
35597 ** Find the current time (in Universal Coordinated Time). Write the
35598 ** current time and date as a Julian Day number into *prNow and
35599 ** return 0. Return 1 if the time and date cannot be found.
35601 static int winCurrentTime(sqlite3_vfs *pVfs, double *prNow){
35602 int rc;
35603 sqlite3_int64 i;
35604 rc = winCurrentTimeInt64(pVfs, &i);
35605 if( !rc ){
35606 *prNow = i/86400000.0;
35608 return rc;
35612 ** The idea is that this function works like a combination of
35613 ** GetLastError() and FormatMessage() on Windows (or errno and
35614 ** strerror_r() on Unix). After an error is returned by an OS
35615 ** function, SQLite calls this function with zBuf pointing to
35616 ** a buffer of nBuf bytes. The OS layer should populate the
35617 ** buffer with a nul-terminated UTF-8 encoded error message
35618 ** describing the last IO error to have occurred within the calling
35619 ** thread.
35621 ** If the error message is too large for the supplied buffer,
35622 ** it should be truncated. The return value of xGetLastError
35623 ** is zero if the error message fits in the buffer, or non-zero
35624 ** otherwise (if the message was truncated). If non-zero is returned,
35625 ** then it is not necessary to include the nul-terminator character
35626 ** in the output buffer.
35628 ** Not supplying an error message will have no adverse effect
35629 ** on SQLite. It is fine to have an implementation that never
35630 ** returns an error message:
35632 ** int xGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
35633 ** assert(zBuf[0]=='\0');
35634 ** return 0;
35635 ** }
35637 ** However if an error message is supplied, it will be incorporated
35638 ** by sqlite into the error message available to the user using
35639 ** sqlite3_errmsg(), possibly making IO errors easier to debug.
35641 static int winGetLastError(sqlite3_vfs *pVfs, int nBuf, char *zBuf){
35642 UNUSED_PARAMETER(pVfs);
35643 return getLastErrorMsg(osGetLastError(), nBuf, zBuf);
35647 ** Initialize and deinitialize the operating system interface.
35649 SQLITE_API int sqlite3_os_init(void){
35650 static sqlite3_vfs winVfs = {
35651 3, /* iVersion */
35652 sizeof(winFile), /* szOsFile */
35653 MAX_PATH, /* mxPathname */
35654 0, /* pNext */
35655 "win32", /* zName */
35656 0, /* pAppData */
35657 winOpen, /* xOpen */
35658 winDelete, /* xDelete */
35659 winAccess, /* xAccess */
35660 winFullPathname, /* xFullPathname */
35661 winDlOpen, /* xDlOpen */
35662 winDlError, /* xDlError */
35663 winDlSym, /* xDlSym */
35664 winDlClose, /* xDlClose */
35665 winRandomness, /* xRandomness */
35666 winSleep, /* xSleep */
35667 winCurrentTime, /* xCurrentTime */
35668 winGetLastError, /* xGetLastError */
35669 winCurrentTimeInt64, /* xCurrentTimeInt64 */
35670 winSetSystemCall, /* xSetSystemCall */
35671 winGetSystemCall, /* xGetSystemCall */
35672 winNextSystemCall, /* xNextSystemCall */
35675 /* Double-check that the aSyscall[] array has been constructed
35676 ** correctly. See ticket [bb3a86e890c8e96ab] */
35677 assert( ArraySize(aSyscall)==60 );
35679 #ifndef SQLITE_OMIT_WAL
35680 /* get memory map allocation granularity */
35681 memset(&winSysInfo, 0, sizeof(SYSTEM_INFO));
35682 osGetSystemInfo(&winSysInfo);
35683 assert(winSysInfo.dwAllocationGranularity > 0);
35684 #endif
35686 sqlite3_vfs_register(&winVfs, 1);
35687 return SQLITE_OK;
35690 SQLITE_API int sqlite3_os_end(void){
35691 return SQLITE_OK;
35694 #endif /* SQLITE_OS_WIN */
35696 /************** End of os_win.c **********************************************/
35697 /************** Begin file bitvec.c ******************************************/
35699 ** 2008 February 16
35701 ** The author disclaims copyright to this source code. In place of
35702 ** a legal notice, here is a blessing:
35704 ** May you do good and not evil.
35705 ** May you find forgiveness for yourself and forgive others.
35706 ** May you share freely, never taking more than you give.
35708 *************************************************************************
35709 ** This file implements an object that represents a fixed-length
35710 ** bitmap. Bits are numbered starting with 1.
35712 ** A bitmap is used to record which pages of a database file have been
35713 ** journalled during a transaction, or which pages have the "dont-write"
35714 ** property. Usually only a few pages are meet either condition.
35715 ** So the bitmap is usually sparse and has low cardinality.
35716 ** But sometimes (for example when during a DROP of a large table) most
35717 ** or all of the pages in a database can get journalled. In those cases,
35718 ** the bitmap becomes dense with high cardinality. The algorithm needs
35719 ** to handle both cases well.
35721 ** The size of the bitmap is fixed when the object is created.
35723 ** All bits are clear when the bitmap is created. Individual bits
35724 ** may be set or cleared one at a time.
35726 ** Test operations are about 100 times more common that set operations.
35727 ** Clear operations are exceedingly rare. There are usually between
35728 ** 5 and 500 set operations per Bitvec object, though the number of sets can
35729 ** sometimes grow into tens of thousands or larger. The size of the
35730 ** Bitvec object is the number of pages in the database file at the
35731 ** start of a transaction, and is thus usually less than a few thousand,
35732 ** but can be as large as 2 billion for a really big database.
35735 /* Size of the Bitvec structure in bytes. */
35736 #define BITVEC_SZ 512
35738 /* Round the union size down to the nearest pointer boundary, since that's how
35739 ** it will be aligned within the Bitvec struct. */
35740 #define BITVEC_USIZE (((BITVEC_SZ-(3*sizeof(u32)))/sizeof(Bitvec*))*sizeof(Bitvec*))
35742 /* Type of the array "element" for the bitmap representation.
35743 ** Should be a power of 2, and ideally, evenly divide into BITVEC_USIZE.
35744 ** Setting this to the "natural word" size of your CPU may improve
35745 ** performance. */
35746 #define BITVEC_TELEM u8
35747 /* Size, in bits, of the bitmap element. */
35748 #define BITVEC_SZELEM 8
35749 /* Number of elements in a bitmap array. */
35750 #define BITVEC_NELEM (BITVEC_USIZE/sizeof(BITVEC_TELEM))
35751 /* Number of bits in the bitmap array. */
35752 #define BITVEC_NBIT (BITVEC_NELEM*BITVEC_SZELEM)
35754 /* Number of u32 values in hash table. */
35755 #define BITVEC_NINT (BITVEC_USIZE/sizeof(u32))
35756 /* Maximum number of entries in hash table before
35757 ** sub-dividing and re-hashing. */
35758 #define BITVEC_MXHASH (BITVEC_NINT/2)
35759 /* Hashing function for the aHash representation.
35760 ** Empirical testing showed that the *37 multiplier
35761 ** (an arbitrary prime)in the hash function provided
35762 ** no fewer collisions than the no-op *1. */
35763 #define BITVEC_HASH(X) (((X)*1)%BITVEC_NINT)
35765 #define BITVEC_NPTR (BITVEC_USIZE/sizeof(Bitvec *))
35769 ** A bitmap is an instance of the following structure.
35771 ** This bitmap records the existance of zero or more bits
35772 ** with values between 1 and iSize, inclusive.
35774 ** There are three possible representations of the bitmap.
35775 ** If iSize<=BITVEC_NBIT, then Bitvec.u.aBitmap[] is a straight
35776 ** bitmap. The least significant bit is bit 1.
35778 ** If iSize>BITVEC_NBIT and iDivisor==0 then Bitvec.u.aHash[] is
35779 ** a hash table that will hold up to BITVEC_MXHASH distinct values.
35781 ** Otherwise, the value i is redirected into one of BITVEC_NPTR
35782 ** sub-bitmaps pointed to by Bitvec.u.apSub[]. Each subbitmap
35783 ** handles up to iDivisor separate values of i. apSub[0] holds
35784 ** values between 1 and iDivisor. apSub[1] holds values between
35785 ** iDivisor+1 and 2*iDivisor. apSub[N] holds values between
35786 ** N*iDivisor+1 and (N+1)*iDivisor. Each subbitmap is normalized
35787 ** to hold deal with values between 1 and iDivisor.
35789 struct Bitvec {
35790 u32 iSize; /* Maximum bit index. Max iSize is 4,294,967,296. */
35791 u32 nSet; /* Number of bits that are set - only valid for aHash
35792 ** element. Max is BITVEC_NINT. For BITVEC_SZ of 512,
35793 ** this would be 125. */
35794 u32 iDivisor; /* Number of bits handled by each apSub[] entry. */
35795 /* Should >=0 for apSub element. */
35796 /* Max iDivisor is max(u32) / BITVEC_NPTR + 1. */
35797 /* For a BITVEC_SZ of 512, this would be 34,359,739. */
35798 union {
35799 BITVEC_TELEM aBitmap[BITVEC_NELEM]; /* Bitmap representation */
35800 u32 aHash[BITVEC_NINT]; /* Hash table representation */
35801 Bitvec *apSub[BITVEC_NPTR]; /* Recursive representation */
35802 } u;
35806 ** Create a new bitmap object able to handle bits between 0 and iSize,
35807 ** inclusive. Return a pointer to the new object. Return NULL if
35808 ** malloc fails.
35810 SQLITE_PRIVATE Bitvec *sqlite3BitvecCreate(u32 iSize){
35811 Bitvec *p;
35812 assert( sizeof(*p)==BITVEC_SZ );
35813 p = sqlite3MallocZero( sizeof(*p) );
35814 if( p ){
35815 p->iSize = iSize;
35817 return p;
35821 ** Check to see if the i-th bit is set. Return true or false.
35822 ** If p is NULL (if the bitmap has not been created) or if
35823 ** i is out of range, then return false.
35825 SQLITE_PRIVATE int sqlite3BitvecTest(Bitvec *p, u32 i){
35826 if( p==0 ) return 0;
35827 if( i>p->iSize || i==0 ) return 0;
35828 i--;
35829 while( p->iDivisor ){
35830 u32 bin = i/p->iDivisor;
35831 i = i%p->iDivisor;
35832 p = p->u.apSub[bin];
35833 if (!p) {
35834 return 0;
35837 if( p->iSize<=BITVEC_NBIT ){
35838 return (p->u.aBitmap[i/BITVEC_SZELEM] & (1<<(i&(BITVEC_SZELEM-1))))!=0;
35839 } else{
35840 u32 h = BITVEC_HASH(i++);
35841 while( p->u.aHash[h] ){
35842 if( p->u.aHash[h]==i ) return 1;
35843 h = (h+1) % BITVEC_NINT;
35845 return 0;
35850 ** Set the i-th bit. Return 0 on success and an error code if
35851 ** anything goes wrong.
35853 ** This routine might cause sub-bitmaps to be allocated. Failing
35854 ** to get the memory needed to hold the sub-bitmap is the only
35855 ** that can go wrong with an insert, assuming p and i are valid.
35857 ** The calling function must ensure that p is a valid Bitvec object
35858 ** and that the value for "i" is within range of the Bitvec object.
35859 ** Otherwise the behavior is undefined.
35861 SQLITE_PRIVATE int sqlite3BitvecSet(Bitvec *p, u32 i){
35862 u32 h;
35863 if( p==0 ) return SQLITE_OK;
35864 assert( i>0 );
35865 assert( i<=p->iSize );
35866 i--;
35867 while((p->iSize > BITVEC_NBIT) && p->iDivisor) {
35868 u32 bin = i/p->iDivisor;
35869 i = i%p->iDivisor;
35870 if( p->u.apSub[bin]==0 ){
35871 p->u.apSub[bin] = sqlite3BitvecCreate( p->iDivisor );
35872 if( p->u.apSub[bin]==0 ) return SQLITE_NOMEM;
35874 p = p->u.apSub[bin];
35876 if( p->iSize<=BITVEC_NBIT ){
35877 p->u.aBitmap[i/BITVEC_SZELEM] |= 1 << (i&(BITVEC_SZELEM-1));
35878 return SQLITE_OK;
35880 h = BITVEC_HASH(i++);
35881 /* if there wasn't a hash collision, and this doesn't */
35882 /* completely fill the hash, then just add it without */
35883 /* worring about sub-dividing and re-hashing. */
35884 if( !p->u.aHash[h] ){
35885 if (p->nSet<(BITVEC_NINT-1)) {
35886 goto bitvec_set_end;
35887 } else {
35888 goto bitvec_set_rehash;
35891 /* there was a collision, check to see if it's already */
35892 /* in hash, if not, try to find a spot for it */
35893 do {
35894 if( p->u.aHash[h]==i ) return SQLITE_OK;
35895 h++;
35896 if( h>=BITVEC_NINT ) h = 0;
35897 } while( p->u.aHash[h] );
35898 /* we didn't find it in the hash. h points to the first */
35899 /* available free spot. check to see if this is going to */
35900 /* make our hash too "full". */
35901 bitvec_set_rehash:
35902 if( p->nSet>=BITVEC_MXHASH ){
35903 unsigned int j;
35904 int rc;
35905 u32 *aiValues = sqlite3StackAllocRaw(0, sizeof(p->u.aHash));
35906 if( aiValues==0 ){
35907 return SQLITE_NOMEM;
35908 }else{
35909 memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
35910 memset(p->u.apSub, 0, sizeof(p->u.apSub));
35911 p->iDivisor = (p->iSize + BITVEC_NPTR - 1)/BITVEC_NPTR;
35912 rc = sqlite3BitvecSet(p, i);
35913 for(j=0; j<BITVEC_NINT; j++){
35914 if( aiValues[j] ) rc |= sqlite3BitvecSet(p, aiValues[j]);
35916 sqlite3StackFree(0, aiValues);
35917 return rc;
35920 bitvec_set_end:
35921 p->nSet++;
35922 p->u.aHash[h] = i;
35923 return SQLITE_OK;
35927 ** Clear the i-th bit.
35929 ** pBuf must be a pointer to at least BITVEC_SZ bytes of temporary storage
35930 ** that BitvecClear can use to rebuilt its hash table.
35932 SQLITE_PRIVATE void sqlite3BitvecClear(Bitvec *p, u32 i, void *pBuf){
35933 if( p==0 ) return;
35934 assert( i>0 );
35935 i--;
35936 while( p->iDivisor ){
35937 u32 bin = i/p->iDivisor;
35938 i = i%p->iDivisor;
35939 p = p->u.apSub[bin];
35940 if (!p) {
35941 return;
35944 if( p->iSize<=BITVEC_NBIT ){
35945 p->u.aBitmap[i/BITVEC_SZELEM] &= ~(1 << (i&(BITVEC_SZELEM-1)));
35946 }else{
35947 unsigned int j;
35948 u32 *aiValues = pBuf;
35949 memcpy(aiValues, p->u.aHash, sizeof(p->u.aHash));
35950 memset(p->u.aHash, 0, sizeof(p->u.aHash));
35951 p->nSet = 0;
35952 for(j=0; j<BITVEC_NINT; j++){
35953 if( aiValues[j] && aiValues[j]!=(i+1) ){
35954 u32 h = BITVEC_HASH(aiValues[j]-1);
35955 p->nSet++;
35956 while( p->u.aHash[h] ){
35957 h++;
35958 if( h>=BITVEC_NINT ) h = 0;
35960 p->u.aHash[h] = aiValues[j];
35967 ** Destroy a bitmap object. Reclaim all memory used.
35969 SQLITE_PRIVATE void sqlite3BitvecDestroy(Bitvec *p){
35970 if( p==0 ) return;
35971 if( p->iDivisor ){
35972 unsigned int i;
35973 for(i=0; i<BITVEC_NPTR; i++){
35974 sqlite3BitvecDestroy(p->u.apSub[i]);
35977 sqlite3_free(p);
35981 ** Return the value of the iSize parameter specified when Bitvec *p
35982 ** was created.
35984 SQLITE_PRIVATE u32 sqlite3BitvecSize(Bitvec *p){
35985 return p->iSize;
35988 #ifndef SQLITE_OMIT_BUILTIN_TEST
35990 ** Let V[] be an array of unsigned characters sufficient to hold
35991 ** up to N bits. Let I be an integer between 0 and N. 0<=I<N.
35992 ** Then the following macros can be used to set, clear, or test
35993 ** individual bits within V.
35995 #define SETBIT(V,I) V[I>>3] |= (1<<(I&7))
35996 #define CLEARBIT(V,I) V[I>>3] &= ~(1<<(I&7))
35997 #define TESTBIT(V,I) (V[I>>3]&(1<<(I&7)))!=0
36000 ** This routine runs an extensive test of the Bitvec code.
36002 ** The input is an array of integers that acts as a program
36003 ** to test the Bitvec. The integers are opcodes followed
36004 ** by 0, 1, or 3 operands, depending on the opcode. Another
36005 ** opcode follows immediately after the last operand.
36007 ** There are 6 opcodes numbered from 0 through 5. 0 is the
36008 ** "halt" opcode and causes the test to end.
36010 ** 0 Halt and return the number of errors
36011 ** 1 N S X Set N bits beginning with S and incrementing by X
36012 ** 2 N S X Clear N bits beginning with S and incrementing by X
36013 ** 3 N Set N randomly chosen bits
36014 ** 4 N Clear N randomly chosen bits
36015 ** 5 N S X Set N bits from S increment X in array only, not in bitvec
36017 ** The opcodes 1 through 4 perform set and clear operations are performed
36018 ** on both a Bitvec object and on a linear array of bits obtained from malloc.
36019 ** Opcode 5 works on the linear array only, not on the Bitvec.
36020 ** Opcode 5 is used to deliberately induce a fault in order to
36021 ** confirm that error detection works.
36023 ** At the conclusion of the test the linear array is compared
36024 ** against the Bitvec object. If there are any differences,
36025 ** an error is returned. If they are the same, zero is returned.
36027 ** If a memory allocation error occurs, return -1.
36029 SQLITE_PRIVATE int sqlite3BitvecBuiltinTest(int sz, int *aOp){
36030 Bitvec *pBitvec = 0;
36031 unsigned char *pV = 0;
36032 int rc = -1;
36033 int i, nx, pc, op;
36034 void *pTmpSpace;
36036 /* Allocate the Bitvec to be tested and a linear array of
36037 ** bits to act as the reference */
36038 pBitvec = sqlite3BitvecCreate( sz );
36039 pV = sqlite3_malloc( (sz+7)/8 + 1 );
36040 pTmpSpace = sqlite3_malloc(BITVEC_SZ);
36041 if( pBitvec==0 || pV==0 || pTmpSpace==0 ) goto bitvec_end;
36042 memset(pV, 0, (sz+7)/8 + 1);
36044 /* NULL pBitvec tests */
36045 sqlite3BitvecSet(0, 1);
36046 sqlite3BitvecClear(0, 1, pTmpSpace);
36048 /* Run the program */
36049 pc = 0;
36050 while( (op = aOp[pc])!=0 ){
36051 switch( op ){
36052 case 1:
36053 case 2:
36054 case 5: {
36055 nx = 4;
36056 i = aOp[pc+2] - 1;
36057 aOp[pc+2] += aOp[pc+3];
36058 break;
36060 case 3:
36061 case 4:
36062 default: {
36063 nx = 2;
36064 sqlite3_randomness(sizeof(i), &i);
36065 break;
36068 if( (--aOp[pc+1]) > 0 ) nx = 0;
36069 pc += nx;
36070 i = (i & 0x7fffffff)%sz;
36071 if( (op & 1)!=0 ){
36072 SETBIT(pV, (i+1));
36073 if( op!=5 ){
36074 if( sqlite3BitvecSet(pBitvec, i+1) ) goto bitvec_end;
36076 }else{
36077 CLEARBIT(pV, (i+1));
36078 sqlite3BitvecClear(pBitvec, i+1, pTmpSpace);
36082 /* Test to make sure the linear array exactly matches the
36083 ** Bitvec object. Start with the assumption that they do
36084 ** match (rc==0). Change rc to non-zero if a discrepancy
36085 ** is found.
36087 rc = sqlite3BitvecTest(0,0) + sqlite3BitvecTest(pBitvec, sz+1)
36088 + sqlite3BitvecTest(pBitvec, 0)
36089 + (sqlite3BitvecSize(pBitvec) - sz);
36090 for(i=1; i<=sz; i++){
36091 if( (TESTBIT(pV,i))!=sqlite3BitvecTest(pBitvec,i) ){
36092 rc = i;
36093 break;
36097 /* Free allocated structure */
36098 bitvec_end:
36099 sqlite3_free(pTmpSpace);
36100 sqlite3_free(pV);
36101 sqlite3BitvecDestroy(pBitvec);
36102 return rc;
36104 #endif /* SQLITE_OMIT_BUILTIN_TEST */
36106 /************** End of bitvec.c **********************************************/
36107 /************** Begin file pcache.c ******************************************/
36109 ** 2008 August 05
36111 ** The author disclaims copyright to this source code. In place of
36112 ** a legal notice, here is a blessing:
36114 ** May you do good and not evil.
36115 ** May you find forgiveness for yourself and forgive others.
36116 ** May you share freely, never taking more than you give.
36118 *************************************************************************
36119 ** This file implements that page cache.
36123 ** A complete page cache is an instance of this structure.
36125 struct PCache {
36126 PgHdr *pDirty, *pDirtyTail; /* List of dirty pages in LRU order */
36127 PgHdr *pSynced; /* Last synced page in dirty page list */
36128 int nRef; /* Number of referenced pages */
36129 int szCache; /* Configured cache size */
36130 int szPage; /* Size of every page in this cache */
36131 int szExtra; /* Size of extra space for each page */
36132 int bPurgeable; /* True if pages are on backing store */
36133 int (*xStress)(void*,PgHdr*); /* Call to try make a page clean */
36134 void *pStress; /* Argument to xStress */
36135 sqlite3_pcache *pCache; /* Pluggable cache module */
36136 PgHdr *pPage1; /* Reference to page 1 */
36140 ** Some of the assert() macros in this code are too expensive to run
36141 ** even during normal debugging. Use them only rarely on long-running
36142 ** tests. Enable the expensive asserts using the
36143 ** -DSQLITE_ENABLE_EXPENSIVE_ASSERT=1 compile-time option.
36145 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
36146 # define expensive_assert(X) assert(X)
36147 #else
36148 # define expensive_assert(X)
36149 #endif
36151 /********************************** Linked List Management ********************/
36153 #if !defined(NDEBUG) && defined(SQLITE_ENABLE_EXPENSIVE_ASSERT)
36155 ** Check that the pCache->pSynced variable is set correctly. If it
36156 ** is not, either fail an assert or return zero. Otherwise, return
36157 ** non-zero. This is only used in debugging builds, as follows:
36159 ** expensive_assert( pcacheCheckSynced(pCache) );
36161 static int pcacheCheckSynced(PCache *pCache){
36162 PgHdr *p;
36163 for(p=pCache->pDirtyTail; p!=pCache->pSynced; p=p->pDirtyPrev){
36164 assert( p->nRef || (p->flags&PGHDR_NEED_SYNC) );
36166 return (p==0 || p->nRef || (p->flags&PGHDR_NEED_SYNC)==0);
36168 #endif /* !NDEBUG && SQLITE_ENABLE_EXPENSIVE_ASSERT */
36171 ** Remove page pPage from the list of dirty pages.
36173 static void pcacheRemoveFromDirtyList(PgHdr *pPage){
36174 PCache *p = pPage->pCache;
36176 assert( pPage->pDirtyNext || pPage==p->pDirtyTail );
36177 assert( pPage->pDirtyPrev || pPage==p->pDirty );
36179 /* Update the PCache1.pSynced variable if necessary. */
36180 if( p->pSynced==pPage ){
36181 PgHdr *pSynced = pPage->pDirtyPrev;
36182 while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){
36183 pSynced = pSynced->pDirtyPrev;
36185 p->pSynced = pSynced;
36188 if( pPage->pDirtyNext ){
36189 pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev;
36190 }else{
36191 assert( pPage==p->pDirtyTail );
36192 p->pDirtyTail = pPage->pDirtyPrev;
36194 if( pPage->pDirtyPrev ){
36195 pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext;
36196 }else{
36197 assert( pPage==p->pDirty );
36198 p->pDirty = pPage->pDirtyNext;
36200 pPage->pDirtyNext = 0;
36201 pPage->pDirtyPrev = 0;
36203 expensive_assert( pcacheCheckSynced(p) );
36207 ** Add page pPage to the head of the dirty list (PCache1.pDirty is set to
36208 ** pPage).
36210 static void pcacheAddToDirtyList(PgHdr *pPage){
36211 PCache *p = pPage->pCache;
36213 assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
36215 pPage->pDirtyNext = p->pDirty;
36216 if( pPage->pDirtyNext ){
36217 assert( pPage->pDirtyNext->pDirtyPrev==0 );
36218 pPage->pDirtyNext->pDirtyPrev = pPage;
36220 p->pDirty = pPage;
36221 if( !p->pDirtyTail ){
36222 p->pDirtyTail = pPage;
36224 if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
36225 p->pSynced = pPage;
36227 expensive_assert( pcacheCheckSynced(p) );
36231 ** Wrapper around the pluggable caches xUnpin method. If the cache is
36232 ** being used for an in-memory database, this function is a no-op.
36234 static void pcacheUnpin(PgHdr *p){
36235 PCache *pCache = p->pCache;
36236 if( pCache->bPurgeable ){
36237 if( p->pgno==1 ){
36238 pCache->pPage1 = 0;
36240 sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 0);
36244 /*************************************************** General Interfaces ******
36246 ** Initialize and shutdown the page cache subsystem. Neither of these
36247 ** functions are threadsafe.
36249 SQLITE_PRIVATE int sqlite3PcacheInitialize(void){
36250 if( sqlite3GlobalConfig.pcache2.xInit==0 ){
36251 /* IMPLEMENTATION-OF: R-26801-64137 If the xInit() method is NULL, then the
36252 ** built-in default page cache is used instead of the application defined
36253 ** page cache. */
36254 sqlite3PCacheSetDefault();
36256 return sqlite3GlobalConfig.pcache2.xInit(sqlite3GlobalConfig.pcache2.pArg);
36258 SQLITE_PRIVATE void sqlite3PcacheShutdown(void){
36259 if( sqlite3GlobalConfig.pcache2.xShutdown ){
36260 /* IMPLEMENTATION-OF: R-26000-56589 The xShutdown() method may be NULL. */
36261 sqlite3GlobalConfig.pcache2.xShutdown(sqlite3GlobalConfig.pcache2.pArg);
36266 ** Return the size in bytes of a PCache object.
36268 SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); }
36271 ** Create a new PCache object. Storage space to hold the object
36272 ** has already been allocated and is passed in as the p pointer.
36273 ** The caller discovers how much space needs to be allocated by
36274 ** calling sqlite3PcacheSize().
36276 SQLITE_PRIVATE void sqlite3PcacheOpen(
36277 int szPage, /* Size of every page */
36278 int szExtra, /* Extra space associated with each page */
36279 int bPurgeable, /* True if pages are on backing store */
36280 int (*xStress)(void*,PgHdr*),/* Call to try to make pages clean */
36281 void *pStress, /* Argument to xStress */
36282 PCache *p /* Preallocated space for the PCache */
36284 memset(p, 0, sizeof(PCache));
36285 p->szPage = szPage;
36286 p->szExtra = szExtra;
36287 p->bPurgeable = bPurgeable;
36288 p->xStress = xStress;
36289 p->pStress = pStress;
36290 p->szCache = 100;
36294 ** Change the page size for PCache object. The caller must ensure that there
36295 ** are no outstanding page references when this function is called.
36297 SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *pCache, int szPage){
36298 assert( pCache->nRef==0 && pCache->pDirty==0 );
36299 if( pCache->pCache ){
36300 sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
36301 pCache->pCache = 0;
36302 pCache->pPage1 = 0;
36304 pCache->szPage = szPage;
36308 ** Compute the number of pages of cache requested.
36310 static int numberOfCachePages(PCache *p){
36311 if( p->szCache>=0 ){
36312 return p->szCache;
36313 }else{
36314 return (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra));
36319 ** Try to obtain a page from the cache.
36321 SQLITE_PRIVATE int sqlite3PcacheFetch(
36322 PCache *pCache, /* Obtain the page from this cache */
36323 Pgno pgno, /* Page number to obtain */
36324 int createFlag, /* If true, create page if it does not exist already */
36325 PgHdr **ppPage /* Write the page here */
36327 sqlite3_pcache_page *pPage = 0;
36328 PgHdr *pPgHdr = 0;
36329 int eCreate;
36331 assert( pCache!=0 );
36332 assert( createFlag==1 || createFlag==0 );
36333 assert( pgno>0 );
36335 /* If the pluggable cache (sqlite3_pcache*) has not been allocated,
36336 ** allocate it now.
36338 if( !pCache->pCache && createFlag ){
36339 sqlite3_pcache *p;
36340 p = sqlite3GlobalConfig.pcache2.xCreate(
36341 pCache->szPage, pCache->szExtra + sizeof(PgHdr), pCache->bPurgeable
36343 if( !p ){
36344 return SQLITE_NOMEM;
36346 sqlite3GlobalConfig.pcache2.xCachesize(p, numberOfCachePages(pCache));
36347 pCache->pCache = p;
36350 eCreate = createFlag * (1 + (!pCache->bPurgeable || !pCache->pDirty));
36351 if( pCache->pCache ){
36352 pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate);
36355 if( !pPage && eCreate==1 ){
36356 PgHdr *pPg;
36358 /* Find a dirty page to write-out and recycle. First try to find a
36359 ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC
36360 ** cleared), but if that is not possible settle for any other
36361 ** unreferenced dirty page.
36363 expensive_assert( pcacheCheckSynced(pCache) );
36364 for(pPg=pCache->pSynced;
36365 pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC));
36366 pPg=pPg->pDirtyPrev
36368 pCache->pSynced = pPg;
36369 if( !pPg ){
36370 for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev);
36372 if( pPg ){
36373 int rc;
36374 #ifdef SQLITE_LOG_CACHE_SPILL
36375 sqlite3_log(SQLITE_FULL,
36376 "spill page %d making room for %d - cache used: %d/%d",
36377 pPg->pgno, pgno,
36378 sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache),
36379 numberOfCachePages(pCache));
36380 #endif
36381 rc = pCache->xStress(pCache->pStress, pPg);
36382 if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
36383 return rc;
36387 pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, 2);
36390 if( pPage ){
36391 pPgHdr = (PgHdr *)pPage->pExtra;
36393 if( !pPgHdr->pPage ){
36394 memset(pPgHdr, 0, sizeof(PgHdr));
36395 pPgHdr->pPage = pPage;
36396 pPgHdr->pData = pPage->pBuf;
36397 pPgHdr->pExtra = (void *)&pPgHdr[1];
36398 memset(pPgHdr->pExtra, 0, pCache->szExtra);
36399 pPgHdr->pCache = pCache;
36400 pPgHdr->pgno = pgno;
36402 assert( pPgHdr->pCache==pCache );
36403 assert( pPgHdr->pgno==pgno );
36404 assert( pPgHdr->pData==pPage->pBuf );
36405 assert( pPgHdr->pExtra==(void *)&pPgHdr[1] );
36407 if( 0==pPgHdr->nRef ){
36408 pCache->nRef++;
36410 pPgHdr->nRef++;
36411 if( pgno==1 ){
36412 pCache->pPage1 = pPgHdr;
36415 *ppPage = pPgHdr;
36416 return (pPgHdr==0 && eCreate) ? SQLITE_NOMEM : SQLITE_OK;
36420 ** Decrement the reference count on a page. If the page is clean and the
36421 ** reference count drops to 0, then it is made elible for recycling.
36423 SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr *p){
36424 assert( p->nRef>0 );
36425 p->nRef--;
36426 if( p->nRef==0 ){
36427 PCache *pCache = p->pCache;
36428 pCache->nRef--;
36429 if( (p->flags&PGHDR_DIRTY)==0 ){
36430 pcacheUnpin(p);
36431 }else{
36432 /* Move the page to the head of the dirty list. */
36433 pcacheRemoveFromDirtyList(p);
36434 pcacheAddToDirtyList(p);
36440 ** Increase the reference count of a supplied page by 1.
36442 SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){
36443 assert(p->nRef>0);
36444 p->nRef++;
36448 ** Drop a page from the cache. There must be exactly one reference to the
36449 ** page. This function deletes that reference, so after it returns the
36450 ** page pointed to by p is invalid.
36452 SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){
36453 PCache *pCache;
36454 assert( p->nRef==1 );
36455 if( p->flags&PGHDR_DIRTY ){
36456 pcacheRemoveFromDirtyList(p);
36458 pCache = p->pCache;
36459 pCache->nRef--;
36460 if( p->pgno==1 ){
36461 pCache->pPage1 = 0;
36463 sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 1);
36467 ** Make sure the page is marked as dirty. If it isn't dirty already,
36468 ** make it so.
36470 SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
36471 p->flags &= ~PGHDR_DONT_WRITE;
36472 assert( p->nRef>0 );
36473 if( 0==(p->flags & PGHDR_DIRTY) ){
36474 p->flags |= PGHDR_DIRTY;
36475 pcacheAddToDirtyList( p);
36480 ** Make sure the page is marked as clean. If it isn't clean already,
36481 ** make it so.
36483 SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){
36484 if( (p->flags & PGHDR_DIRTY) ){
36485 pcacheRemoveFromDirtyList(p);
36486 p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC);
36487 if( p->nRef==0 ){
36488 pcacheUnpin(p);
36494 ** Make every page in the cache clean.
36496 SQLITE_PRIVATE void sqlite3PcacheCleanAll(PCache *pCache){
36497 PgHdr *p;
36498 while( (p = pCache->pDirty)!=0 ){
36499 sqlite3PcacheMakeClean(p);
36504 ** Clear the PGHDR_NEED_SYNC flag from all dirty pages.
36506 SQLITE_PRIVATE void sqlite3PcacheClearSyncFlags(PCache *pCache){
36507 PgHdr *p;
36508 for(p=pCache->pDirty; p; p=p->pDirtyNext){
36509 p->flags &= ~PGHDR_NEED_SYNC;
36511 pCache->pSynced = pCache->pDirtyTail;
36515 ** Change the page number of page p to newPgno.
36517 SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
36518 PCache *pCache = p->pCache;
36519 assert( p->nRef>0 );
36520 assert( newPgno>0 );
36521 sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno);
36522 p->pgno = newPgno;
36523 if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
36524 pcacheRemoveFromDirtyList(p);
36525 pcacheAddToDirtyList(p);
36530 ** Drop every cache entry whose page number is greater than "pgno". The
36531 ** caller must ensure that there are no outstanding references to any pages
36532 ** other than page 1 with a page number greater than pgno.
36534 ** If there is a reference to page 1 and the pgno parameter passed to this
36535 ** function is 0, then the data area associated with page 1 is zeroed, but
36536 ** the page object is not dropped.
36538 SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){
36539 if( pCache->pCache ){
36540 PgHdr *p;
36541 PgHdr *pNext;
36542 for(p=pCache->pDirty; p; p=pNext){
36543 pNext = p->pDirtyNext;
36544 /* This routine never gets call with a positive pgno except right
36545 ** after sqlite3PcacheCleanAll(). So if there are dirty pages,
36546 ** it must be that pgno==0.
36548 assert( p->pgno>0 );
36549 if( ALWAYS(p->pgno>pgno) ){
36550 assert( p->flags&PGHDR_DIRTY );
36551 sqlite3PcacheMakeClean(p);
36554 if( pgno==0 && pCache->pPage1 ){
36555 memset(pCache->pPage1->pData, 0, pCache->szPage);
36556 pgno = 1;
36558 sqlite3GlobalConfig.pcache2.xTruncate(pCache->pCache, pgno+1);
36563 ** Close a cache.
36565 SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){
36566 if( pCache->pCache ){
36567 sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
36572 ** Discard the contents of the cache.
36574 SQLITE_PRIVATE void sqlite3PcacheClear(PCache *pCache){
36575 sqlite3PcacheTruncate(pCache, 0);
36579 ** Merge two lists of pages connected by pDirty and in pgno order.
36580 ** Do not both fixing the pDirtyPrev pointers.
36582 static PgHdr *pcacheMergeDirtyList(PgHdr *pA, PgHdr *pB){
36583 PgHdr result, *pTail;
36584 pTail = &result;
36585 while( pA && pB ){
36586 if( pA->pgno<pB->pgno ){
36587 pTail->pDirty = pA;
36588 pTail = pA;
36589 pA = pA->pDirty;
36590 }else{
36591 pTail->pDirty = pB;
36592 pTail = pB;
36593 pB = pB->pDirty;
36596 if( pA ){
36597 pTail->pDirty = pA;
36598 }else if( pB ){
36599 pTail->pDirty = pB;
36600 }else{
36601 pTail->pDirty = 0;
36603 return result.pDirty;
36607 ** Sort the list of pages in accending order by pgno. Pages are
36608 ** connected by pDirty pointers. The pDirtyPrev pointers are
36609 ** corrupted by this sort.
36611 ** Since there cannot be more than 2^31 distinct pages in a database,
36612 ** there cannot be more than 31 buckets required by the merge sorter.
36613 ** One extra bucket is added to catch overflow in case something
36614 ** ever changes to make the previous sentence incorrect.
36616 #define N_SORT_BUCKET 32
36617 static PgHdr *pcacheSortDirtyList(PgHdr *pIn){
36618 PgHdr *a[N_SORT_BUCKET], *p;
36619 int i;
36620 memset(a, 0, sizeof(a));
36621 while( pIn ){
36622 p = pIn;
36623 pIn = p->pDirty;
36624 p->pDirty = 0;
36625 for(i=0; ALWAYS(i<N_SORT_BUCKET-1); i++){
36626 if( a[i]==0 ){
36627 a[i] = p;
36628 break;
36629 }else{
36630 p = pcacheMergeDirtyList(a[i], p);
36631 a[i] = 0;
36634 if( NEVER(i==N_SORT_BUCKET-1) ){
36635 /* To get here, there need to be 2^(N_SORT_BUCKET) elements in
36636 ** the input list. But that is impossible.
36638 a[i] = pcacheMergeDirtyList(a[i], p);
36641 p = a[0];
36642 for(i=1; i<N_SORT_BUCKET; i++){
36643 p = pcacheMergeDirtyList(p, a[i]);
36645 return p;
36649 ** Return a list of all dirty pages in the cache, sorted by page number.
36651 SQLITE_PRIVATE PgHdr *sqlite3PcacheDirtyList(PCache *pCache){
36652 PgHdr *p;
36653 for(p=pCache->pDirty; p; p=p->pDirtyNext){
36654 p->pDirty = p->pDirtyNext;
36656 return pcacheSortDirtyList(pCache->pDirty);
36660 ** Return the total number of referenced pages held by the cache.
36662 SQLITE_PRIVATE int sqlite3PcacheRefCount(PCache *pCache){
36663 return pCache->nRef;
36667 ** Return the number of references to the page supplied as an argument.
36669 SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){
36670 return p->nRef;
36674 ** Return the total number of pages in the cache.
36676 SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){
36677 int nPage = 0;
36678 if( pCache->pCache ){
36679 nPage = sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache);
36681 return nPage;
36684 #ifdef SQLITE_TEST
36686 ** Get the suggested cache-size value.
36688 SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){
36689 return numberOfCachePages(pCache);
36691 #endif
36694 ** Set the suggested cache-size value.
36696 SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){
36697 pCache->szCache = mxPage;
36698 if( pCache->pCache ){
36699 sqlite3GlobalConfig.pcache2.xCachesize(pCache->pCache,
36700 numberOfCachePages(pCache));
36705 ** Free up as much memory as possible from the page cache.
36707 SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){
36708 if( pCache->pCache ){
36709 sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache);
36713 #if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
36715 ** For all dirty pages currently in the cache, invoke the specified
36716 ** callback. This is only used if the SQLITE_CHECK_PAGES macro is
36717 ** defined.
36719 SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHdr *)){
36720 PgHdr *pDirty;
36721 for(pDirty=pCache->pDirty; pDirty; pDirty=pDirty->pDirtyNext){
36722 xIter(pDirty);
36725 #endif
36727 /************** End of pcache.c **********************************************/
36728 /************** Begin file pcache1.c *****************************************/
36730 ** 2008 November 05
36732 ** The author disclaims copyright to this source code. In place of
36733 ** a legal notice, here is a blessing:
36735 ** May you do good and not evil.
36736 ** May you find forgiveness for yourself and forgive others.
36737 ** May you share freely, never taking more than you give.
36739 *************************************************************************
36741 ** This file implements the default page cache implementation (the
36742 ** sqlite3_pcache interface). It also contains part of the implementation
36743 ** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features.
36744 ** If the default page cache implementation is overriden, then neither of
36745 ** these two features are available.
36749 typedef struct PCache1 PCache1;
36750 typedef struct PgHdr1 PgHdr1;
36751 typedef struct PgFreeslot PgFreeslot;
36752 typedef struct PGroup PGroup;
36754 /* Each page cache (or PCache) belongs to a PGroup. A PGroup is a set
36755 ** of one or more PCaches that are able to recycle each others unpinned
36756 ** pages when they are under memory pressure. A PGroup is an instance of
36757 ** the following object.
36759 ** This page cache implementation works in one of two modes:
36761 ** (1) Every PCache is the sole member of its own PGroup. There is
36762 ** one PGroup per PCache.
36764 ** (2) There is a single global PGroup that all PCaches are a member
36765 ** of.
36767 ** Mode 1 uses more memory (since PCache instances are not able to rob
36768 ** unused pages from other PCaches) but it also operates without a mutex,
36769 ** and is therefore often faster. Mode 2 requires a mutex in order to be
36770 ** threadsafe, but recycles pages more efficiently.
36772 ** For mode (1), PGroup.mutex is NULL. For mode (2) there is only a single
36773 ** PGroup which is the pcache1.grp global variable and its mutex is
36774 ** SQLITE_MUTEX_STATIC_LRU.
36776 struct PGroup {
36777 sqlite3_mutex *mutex; /* MUTEX_STATIC_LRU or NULL */
36778 unsigned int nMaxPage; /* Sum of nMax for purgeable caches */
36779 unsigned int nMinPage; /* Sum of nMin for purgeable caches */
36780 unsigned int mxPinned; /* nMaxpage + 10 - nMinPage */
36781 unsigned int nCurrentPage; /* Number of purgeable pages allocated */
36782 PgHdr1 *pLruHead, *pLruTail; /* LRU list of unpinned pages */
36785 /* Each page cache is an instance of the following object. Every
36786 ** open database file (including each in-memory database and each
36787 ** temporary or transient database) has a single page cache which
36788 ** is an instance of this object.
36790 ** Pointers to structures of this type are cast and returned as
36791 ** opaque sqlite3_pcache* handles.
36793 struct PCache1 {
36794 /* Cache configuration parameters. Page size (szPage) and the purgeable
36795 ** flag (bPurgeable) are set when the cache is created. nMax may be
36796 ** modified at any time by a call to the pcache1Cachesize() method.
36797 ** The PGroup mutex must be held when accessing nMax.
36799 PGroup *pGroup; /* PGroup this cache belongs to */
36800 int szPage; /* Size of allocated pages in bytes */
36801 int szExtra; /* Size of extra space in bytes */
36802 int bPurgeable; /* True if cache is purgeable */
36803 unsigned int nMin; /* Minimum number of pages reserved */
36804 unsigned int nMax; /* Configured "cache_size" value */
36805 unsigned int n90pct; /* nMax*9/10 */
36807 /* Hash table of all pages. The following variables may only be accessed
36808 ** when the accessor is holding the PGroup mutex.
36810 unsigned int nRecyclable; /* Number of pages in the LRU list */
36811 unsigned int nPage; /* Total number of pages in apHash */
36812 unsigned int nHash; /* Number of slots in apHash[] */
36813 PgHdr1 **apHash; /* Hash table for fast lookup by key */
36815 unsigned int iMaxKey; /* Largest key seen since xTruncate() */
36819 ** Each cache entry is represented by an instance of the following
36820 ** structure. Unless SQLITE_PCACHE_SEPARATE_HEADER is defined, a buffer of
36821 ** PgHdr1.pCache->szPage bytes is allocated directly before this structure
36822 ** in memory.
36824 struct PgHdr1 {
36825 sqlite3_pcache_page page;
36826 unsigned int iKey; /* Key value (page number) */
36827 PgHdr1 *pNext; /* Next in hash table chain */
36828 PCache1 *pCache; /* Cache that currently owns this page */
36829 PgHdr1 *pLruNext; /* Next in LRU list of unpinned pages */
36830 PgHdr1 *pLruPrev; /* Previous in LRU list of unpinned pages */
36834 ** Free slots in the allocator used to divide up the buffer provided using
36835 ** the SQLITE_CONFIG_PAGECACHE mechanism.
36837 struct PgFreeslot {
36838 PgFreeslot *pNext; /* Next free slot */
36842 ** Global data used by this cache.
36844 static SQLITE_WSD struct PCacheGlobal {
36845 PGroup grp; /* The global PGroup for mode (2) */
36847 /* Variables related to SQLITE_CONFIG_PAGECACHE settings. The
36848 ** szSlot, nSlot, pStart, pEnd, nReserve, and isInit values are all
36849 ** fixed at sqlite3_initialize() time and do not require mutex protection.
36850 ** The nFreeSlot and pFree values do require mutex protection.
36852 int isInit; /* True if initialized */
36853 int szSlot; /* Size of each free slot */
36854 int nSlot; /* The number of pcache slots */
36855 int nReserve; /* Try to keep nFreeSlot above this */
36856 void *pStart, *pEnd; /* Bounds of pagecache malloc range */
36857 /* Above requires no mutex. Use mutex below for variable that follow. */
36858 sqlite3_mutex *mutex; /* Mutex for accessing the following: */
36859 int nFreeSlot; /* Number of unused pcache slots */
36860 PgFreeslot *pFree; /* Free page blocks */
36861 /* The following value requires a mutex to change. We skip the mutex on
36862 ** reading because (1) most platforms read a 32-bit integer atomically and
36863 ** (2) even if an incorrect value is read, no great harm is done since this
36864 ** is really just an optimization. */
36865 int bUnderPressure; /* True if low on PAGECACHE memory */
36866 } pcache1_g;
36869 ** All code in this file should access the global structure above via the
36870 ** alias "pcache1". This ensures that the WSD emulation is used when
36871 ** compiling for systems that do not support real WSD.
36873 #define pcache1 (GLOBAL(struct PCacheGlobal, pcache1_g))
36876 ** Macros to enter and leave the PCache LRU mutex.
36878 #define pcache1EnterMutex(X) sqlite3_mutex_enter((X)->mutex)
36879 #define pcache1LeaveMutex(X) sqlite3_mutex_leave((X)->mutex)
36881 /******************************************************************************/
36882 /******** Page Allocation/SQLITE_CONFIG_PCACHE Related Functions **************/
36885 ** This function is called during initialization if a static buffer is
36886 ** supplied to use for the page-cache by passing the SQLITE_CONFIG_PAGECACHE
36887 ** verb to sqlite3_config(). Parameter pBuf points to an allocation large
36888 ** enough to contain 'n' buffers of 'sz' bytes each.
36890 ** This routine is called from sqlite3_initialize() and so it is guaranteed
36891 ** to be serialized already. There is no need for further mutexing.
36893 SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){
36894 if( pcache1.isInit ){
36895 PgFreeslot *p;
36896 sz = ROUNDDOWN8(sz);
36897 pcache1.szSlot = sz;
36898 pcache1.nSlot = pcache1.nFreeSlot = n;
36899 pcache1.nReserve = n>90 ? 10 : (n/10 + 1);
36900 pcache1.pStart = pBuf;
36901 pcache1.pFree = 0;
36902 pcache1.bUnderPressure = 0;
36903 while( n-- ){
36904 p = (PgFreeslot*)pBuf;
36905 p->pNext = pcache1.pFree;
36906 pcache1.pFree = p;
36907 pBuf = (void*)&((char*)pBuf)[sz];
36909 pcache1.pEnd = pBuf;
36914 ** Malloc function used within this file to allocate space from the buffer
36915 ** configured using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no
36916 ** such buffer exists or there is no space left in it, this function falls
36917 ** back to sqlite3Malloc().
36919 ** Multiple threads can run this routine at the same time. Global variables
36920 ** in pcache1 need to be protected via mutex.
36922 static void *pcache1Alloc(int nByte){
36923 void *p = 0;
36924 assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
36925 sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
36926 if( nByte<=pcache1.szSlot ){
36927 sqlite3_mutex_enter(pcache1.mutex);
36928 p = (PgHdr1 *)pcache1.pFree;
36929 if( p ){
36930 pcache1.pFree = pcache1.pFree->pNext;
36931 pcache1.nFreeSlot--;
36932 pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
36933 assert( pcache1.nFreeSlot>=0 );
36934 sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
36936 sqlite3_mutex_leave(pcache1.mutex);
36938 if( p==0 ){
36939 /* Memory is not available in the SQLITE_CONFIG_PAGECACHE pool. Get
36940 ** it from sqlite3Malloc instead.
36942 p = sqlite3Malloc(nByte);
36943 if( p ){
36944 int sz = sqlite3MallocSize(p);
36945 sqlite3_mutex_enter(pcache1.mutex);
36946 sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz);
36947 sqlite3_mutex_leave(pcache1.mutex);
36949 sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
36951 return p;
36955 ** Free an allocated buffer obtained from pcache1Alloc().
36957 static int pcache1Free(void *p){
36958 int nFreed = 0;
36959 if( p==0 ) return 0;
36960 if( p>=pcache1.pStart && p<pcache1.pEnd ){
36961 PgFreeslot *pSlot;
36962 sqlite3_mutex_enter(pcache1.mutex);
36963 sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
36964 pSlot = (PgFreeslot*)p;
36965 pSlot->pNext = pcache1.pFree;
36966 pcache1.pFree = pSlot;
36967 pcache1.nFreeSlot++;
36968 pcache1.bUnderPressure = pcache1.nFreeSlot<pcache1.nReserve;
36969 assert( pcache1.nFreeSlot<=pcache1.nSlot );
36970 sqlite3_mutex_leave(pcache1.mutex);
36971 }else{
36972 assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
36973 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
36974 nFreed = sqlite3MallocSize(p);
36975 sqlite3_mutex_enter(pcache1.mutex);
36976 sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -nFreed);
36977 sqlite3_mutex_leave(pcache1.mutex);
36978 sqlite3_free(p);
36980 return nFreed;
36983 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
36985 ** Return the size of a pcache allocation
36987 static int pcache1MemSize(void *p){
36988 if( p>=pcache1.pStart && p<pcache1.pEnd ){
36989 return pcache1.szSlot;
36990 }else{
36991 int iSize;
36992 assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
36993 sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
36994 iSize = sqlite3MallocSize(p);
36995 sqlite3MemdebugSetType(p, MEMTYPE_PCACHE);
36996 return iSize;
36999 #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
37002 ** Allocate a new page object initially associated with cache pCache.
37004 static PgHdr1 *pcache1AllocPage(PCache1 *pCache){
37005 PgHdr1 *p = 0;
37006 void *pPg;
37008 /* The group mutex must be released before pcache1Alloc() is called. This
37009 ** is because it may call sqlite3_release_memory(), which assumes that
37010 ** this mutex is not held. */
37011 assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
37012 pcache1LeaveMutex(pCache->pGroup);
37013 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
37014 pPg = pcache1Alloc(pCache->szPage);
37015 p = sqlite3Malloc(sizeof(PgHdr1) + pCache->szExtra);
37016 if( !pPg || !p ){
37017 pcache1Free(pPg);
37018 sqlite3_free(p);
37019 pPg = 0;
37021 #else
37022 pPg = pcache1Alloc(sizeof(PgHdr1) + pCache->szPage + pCache->szExtra);
37023 p = (PgHdr1 *)&((u8 *)pPg)[pCache->szPage];
37024 #endif
37025 pcache1EnterMutex(pCache->pGroup);
37027 if( pPg ){
37028 p->page.pBuf = pPg;
37029 p->page.pExtra = &p[1];
37030 if( pCache->bPurgeable ){
37031 pCache->pGroup->nCurrentPage++;
37033 return p;
37035 return 0;
37039 ** Free a page object allocated by pcache1AllocPage().
37041 ** The pointer is allowed to be NULL, which is prudent. But it turns out
37042 ** that the current implementation happens to never call this routine
37043 ** with a NULL pointer, so we mark the NULL test with ALWAYS().
37045 static void pcache1FreePage(PgHdr1 *p){
37046 if( ALWAYS(p) ){
37047 PCache1 *pCache = p->pCache;
37048 assert( sqlite3_mutex_held(p->pCache->pGroup->mutex) );
37049 pcache1Free(p->page.pBuf);
37050 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
37051 sqlite3_free(p);
37052 #endif
37053 if( pCache->bPurgeable ){
37054 pCache->pGroup->nCurrentPage--;
37060 ** Malloc function used by SQLite to obtain space from the buffer configured
37061 ** using sqlite3_config(SQLITE_CONFIG_PAGECACHE) option. If no such buffer
37062 ** exists, this function falls back to sqlite3Malloc().
37064 SQLITE_PRIVATE void *sqlite3PageMalloc(int sz){
37065 return pcache1Alloc(sz);
37069 ** Free an allocated buffer obtained from sqlite3PageMalloc().
37071 SQLITE_PRIVATE void sqlite3PageFree(void *p){
37072 pcache1Free(p);
37077 ** Return true if it desirable to avoid allocating a new page cache
37078 ** entry.
37080 ** If memory was allocated specifically to the page cache using
37081 ** SQLITE_CONFIG_PAGECACHE but that memory has all been used, then
37082 ** it is desirable to avoid allocating a new page cache entry because
37083 ** presumably SQLITE_CONFIG_PAGECACHE was suppose to be sufficient
37084 ** for all page cache needs and we should not need to spill the
37085 ** allocation onto the heap.
37087 ** Or, the heap is used for all page cache memory but the heap is
37088 ** under memory pressure, then again it is desirable to avoid
37089 ** allocating a new page cache entry in order to avoid stressing
37090 ** the heap even further.
37092 static int pcache1UnderMemoryPressure(PCache1 *pCache){
37093 if( pcache1.nSlot && (pCache->szPage+pCache->szExtra)<=pcache1.szSlot ){
37094 return pcache1.bUnderPressure;
37095 }else{
37096 return sqlite3HeapNearlyFull();
37100 /******************************************************************************/
37101 /******** General Implementation Functions ************************************/
37104 ** This function is used to resize the hash table used by the cache passed
37105 ** as the first argument.
37107 ** The PCache mutex must be held when this function is called.
37109 static int pcache1ResizeHash(PCache1 *p){
37110 PgHdr1 **apNew;
37111 unsigned int nNew;
37112 unsigned int i;
37114 assert( sqlite3_mutex_held(p->pGroup->mutex) );
37116 nNew = p->nHash*2;
37117 if( nNew<256 ){
37118 nNew = 256;
37121 pcache1LeaveMutex(p->pGroup);
37122 if( p->nHash ){ sqlite3BeginBenignMalloc(); }
37123 apNew = (PgHdr1 **)sqlite3_malloc(sizeof(PgHdr1 *)*nNew);
37124 if( p->nHash ){ sqlite3EndBenignMalloc(); }
37125 pcache1EnterMutex(p->pGroup);
37126 if( apNew ){
37127 memset(apNew, 0, sizeof(PgHdr1 *)*nNew);
37128 for(i=0; i<p->nHash; i++){
37129 PgHdr1 *pPage;
37130 PgHdr1 *pNext = p->apHash[i];
37131 while( (pPage = pNext)!=0 ){
37132 unsigned int h = pPage->iKey % nNew;
37133 pNext = pPage->pNext;
37134 pPage->pNext = apNew[h];
37135 apNew[h] = pPage;
37138 sqlite3_free(p->apHash);
37139 p->apHash = apNew;
37140 p->nHash = nNew;
37143 return (p->apHash ? SQLITE_OK : SQLITE_NOMEM);
37147 ** This function is used internally to remove the page pPage from the
37148 ** PGroup LRU list, if is part of it. If pPage is not part of the PGroup
37149 ** LRU list, then this function is a no-op.
37151 ** The PGroup mutex must be held when this function is called.
37153 ** If pPage is NULL then this routine is a no-op.
37155 static void pcache1PinPage(PgHdr1 *pPage){
37156 PCache1 *pCache;
37157 PGroup *pGroup;
37159 if( pPage==0 ) return;
37160 pCache = pPage->pCache;
37161 pGroup = pCache->pGroup;
37162 assert( sqlite3_mutex_held(pGroup->mutex) );
37163 if( pPage->pLruNext || pPage==pGroup->pLruTail ){
37164 if( pPage->pLruPrev ){
37165 pPage->pLruPrev->pLruNext = pPage->pLruNext;
37167 if( pPage->pLruNext ){
37168 pPage->pLruNext->pLruPrev = pPage->pLruPrev;
37170 if( pGroup->pLruHead==pPage ){
37171 pGroup->pLruHead = pPage->pLruNext;
37173 if( pGroup->pLruTail==pPage ){
37174 pGroup->pLruTail = pPage->pLruPrev;
37176 pPage->pLruNext = 0;
37177 pPage->pLruPrev = 0;
37178 pPage->pCache->nRecyclable--;
37184 ** Remove the page supplied as an argument from the hash table
37185 ** (PCache1.apHash structure) that it is currently stored in.
37187 ** The PGroup mutex must be held when this function is called.
37189 static void pcache1RemoveFromHash(PgHdr1 *pPage){
37190 unsigned int h;
37191 PCache1 *pCache = pPage->pCache;
37192 PgHdr1 **pp;
37194 assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
37195 h = pPage->iKey % pCache->nHash;
37196 for(pp=&pCache->apHash[h]; (*pp)!=pPage; pp=&(*pp)->pNext);
37197 *pp = (*pp)->pNext;
37199 pCache->nPage--;
37203 ** If there are currently more than nMaxPage pages allocated, try
37204 ** to recycle pages to reduce the number allocated to nMaxPage.
37206 static void pcache1EnforceMaxPage(PGroup *pGroup){
37207 assert( sqlite3_mutex_held(pGroup->mutex) );
37208 while( pGroup->nCurrentPage>pGroup->nMaxPage && pGroup->pLruTail ){
37209 PgHdr1 *p = pGroup->pLruTail;
37210 assert( p->pCache->pGroup==pGroup );
37211 pcache1PinPage(p);
37212 pcache1RemoveFromHash(p);
37213 pcache1FreePage(p);
37218 ** Discard all pages from cache pCache with a page number (key value)
37219 ** greater than or equal to iLimit. Any pinned pages that meet this
37220 ** criteria are unpinned before they are discarded.
37222 ** The PCache mutex must be held when this function is called.
37224 static void pcache1TruncateUnsafe(
37225 PCache1 *pCache, /* The cache to truncate */
37226 unsigned int iLimit /* Drop pages with this pgno or larger */
37228 TESTONLY( unsigned int nPage = 0; ) /* To assert pCache->nPage is correct */
37229 unsigned int h;
37230 assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
37231 for(h=0; h<pCache->nHash; h++){
37232 PgHdr1 **pp = &pCache->apHash[h];
37233 PgHdr1 *pPage;
37234 while( (pPage = *pp)!=0 ){
37235 if( pPage->iKey>=iLimit ){
37236 pCache->nPage--;
37237 *pp = pPage->pNext;
37238 pcache1PinPage(pPage);
37239 pcache1FreePage(pPage);
37240 }else{
37241 pp = &pPage->pNext;
37242 TESTONLY( nPage++; )
37246 assert( pCache->nPage==nPage );
37249 /******************************************************************************/
37250 /******** sqlite3_pcache Methods **********************************************/
37253 ** Implementation of the sqlite3_pcache.xInit method.
37255 static int pcache1Init(void *NotUsed){
37256 UNUSED_PARAMETER(NotUsed);
37257 assert( pcache1.isInit==0 );
37258 memset(&pcache1, 0, sizeof(pcache1));
37259 if( sqlite3GlobalConfig.bCoreMutex ){
37260 pcache1.grp.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_LRU);
37261 pcache1.mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_PMEM);
37263 pcache1.grp.mxPinned = 10;
37264 pcache1.isInit = 1;
37265 return SQLITE_OK;
37269 ** Implementation of the sqlite3_pcache.xShutdown method.
37270 ** Note that the static mutex allocated in xInit does
37271 ** not need to be freed.
37273 static void pcache1Shutdown(void *NotUsed){
37274 UNUSED_PARAMETER(NotUsed);
37275 assert( pcache1.isInit!=0 );
37276 memset(&pcache1, 0, sizeof(pcache1));
37280 ** Implementation of the sqlite3_pcache.xCreate method.
37282 ** Allocate a new cache.
37284 static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){
37285 PCache1 *pCache; /* The newly created page cache */
37286 PGroup *pGroup; /* The group the new page cache will belong to */
37287 int sz; /* Bytes of memory required to allocate the new cache */
37290 ** The seperateCache variable is true if each PCache has its own private
37291 ** PGroup. In other words, separateCache is true for mode (1) where no
37292 ** mutexing is required.
37294 ** * Always use a unified cache (mode-2) if ENABLE_MEMORY_MANAGEMENT
37296 ** * Always use a unified cache in single-threaded applications
37298 ** * Otherwise (if multi-threaded and ENABLE_MEMORY_MANAGEMENT is off)
37299 ** use separate caches (mode-1)
37301 #if defined(SQLITE_ENABLE_MEMORY_MANAGEMENT) || SQLITE_THREADSAFE==0
37302 const int separateCache = 0;
37303 #else
37304 int separateCache = sqlite3GlobalConfig.bCoreMutex>0;
37305 #endif
37307 assert( (szPage & (szPage-1))==0 && szPage>=512 && szPage<=65536 );
37308 assert( szExtra < 300 );
37310 sz = sizeof(PCache1) + sizeof(PGroup)*separateCache;
37311 pCache = (PCache1 *)sqlite3_malloc(sz);
37312 if( pCache ){
37313 memset(pCache, 0, sz);
37314 if( separateCache ){
37315 pGroup = (PGroup*)&pCache[1];
37316 pGroup->mxPinned = 10;
37317 }else{
37318 pGroup = &pcache1.grp;
37320 pCache->pGroup = pGroup;
37321 pCache->szPage = szPage;
37322 pCache->szExtra = szExtra;
37323 pCache->bPurgeable = (bPurgeable ? 1 : 0);
37324 if( bPurgeable ){
37325 pCache->nMin = 10;
37326 pcache1EnterMutex(pGroup);
37327 pGroup->nMinPage += pCache->nMin;
37328 pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
37329 pcache1LeaveMutex(pGroup);
37332 return (sqlite3_pcache *)pCache;
37336 ** Implementation of the sqlite3_pcache.xCachesize method.
37338 ** Configure the cache_size limit for a cache.
37340 static void pcache1Cachesize(sqlite3_pcache *p, int nMax){
37341 PCache1 *pCache = (PCache1 *)p;
37342 if( pCache->bPurgeable ){
37343 PGroup *pGroup = pCache->pGroup;
37344 pcache1EnterMutex(pGroup);
37345 pGroup->nMaxPage += (nMax - pCache->nMax);
37346 pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
37347 pCache->nMax = nMax;
37348 pCache->n90pct = pCache->nMax*9/10;
37349 pcache1EnforceMaxPage(pGroup);
37350 pcache1LeaveMutex(pGroup);
37355 ** Implementation of the sqlite3_pcache.xShrink method.
37357 ** Free up as much memory as possible.
37359 static void pcache1Shrink(sqlite3_pcache *p){
37360 PCache1 *pCache = (PCache1*)p;
37361 if( pCache->bPurgeable ){
37362 PGroup *pGroup = pCache->pGroup;
37363 int savedMaxPage;
37364 pcache1EnterMutex(pGroup);
37365 savedMaxPage = pGroup->nMaxPage;
37366 pGroup->nMaxPage = 0;
37367 pcache1EnforceMaxPage(pGroup);
37368 pGroup->nMaxPage = savedMaxPage;
37369 pcache1LeaveMutex(pGroup);
37374 ** Implementation of the sqlite3_pcache.xPagecount method.
37376 static int pcache1Pagecount(sqlite3_pcache *p){
37377 int n;
37378 PCache1 *pCache = (PCache1*)p;
37379 pcache1EnterMutex(pCache->pGroup);
37380 n = pCache->nPage;
37381 pcache1LeaveMutex(pCache->pGroup);
37382 return n;
37386 ** Implementation of the sqlite3_pcache.xFetch method.
37388 ** Fetch a page by key value.
37390 ** Whether or not a new page may be allocated by this function depends on
37391 ** the value of the createFlag argument. 0 means do not allocate a new
37392 ** page. 1 means allocate a new page if space is easily available. 2
37393 ** means to try really hard to allocate a new page.
37395 ** For a non-purgeable cache (a cache used as the storage for an in-memory
37396 ** database) there is really no difference between createFlag 1 and 2. So
37397 ** the calling function (pcache.c) will never have a createFlag of 1 on
37398 ** a non-purgeable cache.
37400 ** There are three different approaches to obtaining space for a page,
37401 ** depending on the value of parameter createFlag (which may be 0, 1 or 2).
37403 ** 1. Regardless of the value of createFlag, the cache is searched for a
37404 ** copy of the requested page. If one is found, it is returned.
37406 ** 2. If createFlag==0 and the page is not already in the cache, NULL is
37407 ** returned.
37409 ** 3. If createFlag is 1, and the page is not already in the cache, then
37410 ** return NULL (do not allocate a new page) if any of the following
37411 ** conditions are true:
37413 ** (a) the number of pages pinned by the cache is greater than
37414 ** PCache1.nMax, or
37416 ** (b) the number of pages pinned by the cache is greater than
37417 ** the sum of nMax for all purgeable caches, less the sum of
37418 ** nMin for all other purgeable caches, or
37420 ** 4. If none of the first three conditions apply and the cache is marked
37421 ** as purgeable, and if one of the following is true:
37423 ** (a) The number of pages allocated for the cache is already
37424 ** PCache1.nMax, or
37426 ** (b) The number of pages allocated for all purgeable caches is
37427 ** already equal to or greater than the sum of nMax for all
37428 ** purgeable caches,
37430 ** (c) The system is under memory pressure and wants to avoid
37431 ** unnecessary pages cache entry allocations
37433 ** then attempt to recycle a page from the LRU list. If it is the right
37434 ** size, return the recycled buffer. Otherwise, free the buffer and
37435 ** proceed to step 5.
37437 ** 5. Otherwise, allocate and return a new page buffer.
37439 static sqlite3_pcache_page *pcache1Fetch(
37440 sqlite3_pcache *p,
37441 unsigned int iKey,
37442 int createFlag
37444 unsigned int nPinned;
37445 PCache1 *pCache = (PCache1 *)p;
37446 PGroup *pGroup;
37447 PgHdr1 *pPage = 0;
37449 assert( pCache->bPurgeable || createFlag!=1 );
37450 assert( pCache->bPurgeable || pCache->nMin==0 );
37451 assert( pCache->bPurgeable==0 || pCache->nMin==10 );
37452 assert( pCache->nMin==0 || pCache->bPurgeable );
37453 pcache1EnterMutex(pGroup = pCache->pGroup);
37455 /* Step 1: Search the hash table for an existing entry. */
37456 if( pCache->nHash>0 ){
37457 unsigned int h = iKey % pCache->nHash;
37458 for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext);
37461 /* Step 2: Abort if no existing page is found and createFlag is 0 */
37462 if( pPage || createFlag==0 ){
37463 pcache1PinPage(pPage);
37464 goto fetch_out;
37467 /* The pGroup local variable will normally be initialized by the
37468 ** pcache1EnterMutex() macro above. But if SQLITE_MUTEX_OMIT is defined,
37469 ** then pcache1EnterMutex() is a no-op, so we have to initialize the
37470 ** local variable here. Delaying the initialization of pGroup is an
37471 ** optimization: The common case is to exit the module before reaching
37472 ** this point.
37474 #ifdef SQLITE_MUTEX_OMIT
37475 pGroup = pCache->pGroup;
37476 #endif
37478 /* Step 3: Abort if createFlag is 1 but the cache is nearly full */
37479 assert( pCache->nPage >= pCache->nRecyclable );
37480 nPinned = pCache->nPage - pCache->nRecyclable;
37481 assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage );
37482 assert( pCache->n90pct == pCache->nMax*9/10 );
37483 if( createFlag==1 && (
37484 nPinned>=pGroup->mxPinned
37485 || nPinned>=pCache->n90pct
37486 || pcache1UnderMemoryPressure(pCache)
37488 goto fetch_out;
37491 if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){
37492 goto fetch_out;
37495 /* Step 4. Try to recycle a page. */
37496 if( pCache->bPurgeable && pGroup->pLruTail && (
37497 (pCache->nPage+1>=pCache->nMax)
37498 || pGroup->nCurrentPage>=pGroup->nMaxPage
37499 || pcache1UnderMemoryPressure(pCache)
37501 PCache1 *pOther;
37502 pPage = pGroup->pLruTail;
37503 pcache1RemoveFromHash(pPage);
37504 pcache1PinPage(pPage);
37505 pOther = pPage->pCache;
37507 /* We want to verify that szPage and szExtra are the same for pOther
37508 ** and pCache. Assert that we can verify this by comparing sums. */
37509 assert( (pCache->szPage & (pCache->szPage-1))==0 && pCache->szPage>=512 );
37510 assert( pCache->szExtra<512 );
37511 assert( (pOther->szPage & (pOther->szPage-1))==0 && pOther->szPage>=512 );
37512 assert( pOther->szExtra<512 );
37514 if( pOther->szPage+pOther->szExtra != pCache->szPage+pCache->szExtra ){
37515 pcache1FreePage(pPage);
37516 pPage = 0;
37517 }else{
37518 pGroup->nCurrentPage -= (pOther->bPurgeable - pCache->bPurgeable);
37522 /* Step 5. If a usable page buffer has still not been found,
37523 ** attempt to allocate a new one.
37525 if( !pPage ){
37526 if( createFlag==1 ) sqlite3BeginBenignMalloc();
37527 pPage = pcache1AllocPage(pCache);
37528 if( createFlag==1 ) sqlite3EndBenignMalloc();
37531 if( pPage ){
37532 unsigned int h = iKey % pCache->nHash;
37533 pCache->nPage++;
37534 pPage->iKey = iKey;
37535 pPage->pNext = pCache->apHash[h];
37536 pPage->pCache = pCache;
37537 pPage->pLruPrev = 0;
37538 pPage->pLruNext = 0;
37539 *(void **)pPage->page.pExtra = 0;
37540 pCache->apHash[h] = pPage;
37543 fetch_out:
37544 if( pPage && iKey>pCache->iMaxKey ){
37545 pCache->iMaxKey = iKey;
37547 pcache1LeaveMutex(pGroup);
37548 return &pPage->page;
37553 ** Implementation of the sqlite3_pcache.xUnpin method.
37555 ** Mark a page as unpinned (eligible for asynchronous recycling).
37557 static void pcache1Unpin(
37558 sqlite3_pcache *p,
37559 sqlite3_pcache_page *pPg,
37560 int reuseUnlikely
37562 PCache1 *pCache = (PCache1 *)p;
37563 PgHdr1 *pPage = (PgHdr1 *)pPg;
37564 PGroup *pGroup = pCache->pGroup;
37566 assert( pPage->pCache==pCache );
37567 pcache1EnterMutex(pGroup);
37569 /* It is an error to call this function if the page is already
37570 ** part of the PGroup LRU list.
37572 assert( pPage->pLruPrev==0 && pPage->pLruNext==0 );
37573 assert( pGroup->pLruHead!=pPage && pGroup->pLruTail!=pPage );
37575 if( reuseUnlikely || pGroup->nCurrentPage>pGroup->nMaxPage ){
37576 pcache1RemoveFromHash(pPage);
37577 pcache1FreePage(pPage);
37578 }else{
37579 /* Add the page to the PGroup LRU list. */
37580 if( pGroup->pLruHead ){
37581 pGroup->pLruHead->pLruPrev = pPage;
37582 pPage->pLruNext = pGroup->pLruHead;
37583 pGroup->pLruHead = pPage;
37584 }else{
37585 pGroup->pLruTail = pPage;
37586 pGroup->pLruHead = pPage;
37588 pCache->nRecyclable++;
37591 pcache1LeaveMutex(pCache->pGroup);
37595 ** Implementation of the sqlite3_pcache.xRekey method.
37597 static void pcache1Rekey(
37598 sqlite3_pcache *p,
37599 sqlite3_pcache_page *pPg,
37600 unsigned int iOld,
37601 unsigned int iNew
37603 PCache1 *pCache = (PCache1 *)p;
37604 PgHdr1 *pPage = (PgHdr1 *)pPg;
37605 PgHdr1 **pp;
37606 unsigned int h;
37607 assert( pPage->iKey==iOld );
37608 assert( pPage->pCache==pCache );
37610 pcache1EnterMutex(pCache->pGroup);
37612 h = iOld%pCache->nHash;
37613 pp = &pCache->apHash[h];
37614 while( (*pp)!=pPage ){
37615 pp = &(*pp)->pNext;
37617 *pp = pPage->pNext;
37619 h = iNew%pCache->nHash;
37620 pPage->iKey = iNew;
37621 pPage->pNext = pCache->apHash[h];
37622 pCache->apHash[h] = pPage;
37623 if( iNew>pCache->iMaxKey ){
37624 pCache->iMaxKey = iNew;
37627 pcache1LeaveMutex(pCache->pGroup);
37631 ** Implementation of the sqlite3_pcache.xTruncate method.
37633 ** Discard all unpinned pages in the cache with a page number equal to
37634 ** or greater than parameter iLimit. Any pinned pages with a page number
37635 ** equal to or greater than iLimit are implicitly unpinned.
37637 static void pcache1Truncate(sqlite3_pcache *p, unsigned int iLimit){
37638 PCache1 *pCache = (PCache1 *)p;
37639 pcache1EnterMutex(pCache->pGroup);
37640 if( iLimit<=pCache->iMaxKey ){
37641 pcache1TruncateUnsafe(pCache, iLimit);
37642 pCache->iMaxKey = iLimit-1;
37644 pcache1LeaveMutex(pCache->pGroup);
37648 ** Implementation of the sqlite3_pcache.xDestroy method.
37650 ** Destroy a cache allocated using pcache1Create().
37652 static void pcache1Destroy(sqlite3_pcache *p){
37653 PCache1 *pCache = (PCache1 *)p;
37654 PGroup *pGroup = pCache->pGroup;
37655 assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
37656 pcache1EnterMutex(pGroup);
37657 pcache1TruncateUnsafe(pCache, 0);
37658 assert( pGroup->nMaxPage >= pCache->nMax );
37659 pGroup->nMaxPage -= pCache->nMax;
37660 assert( pGroup->nMinPage >= pCache->nMin );
37661 pGroup->nMinPage -= pCache->nMin;
37662 pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
37663 pcache1EnforceMaxPage(pGroup);
37664 pcache1LeaveMutex(pGroup);
37665 sqlite3_free(pCache->apHash);
37666 sqlite3_free(pCache);
37670 ** This function is called during initialization (sqlite3_initialize()) to
37671 ** install the default pluggable cache module, assuming the user has not
37672 ** already provided an alternative.
37674 SQLITE_PRIVATE void sqlite3PCacheSetDefault(void){
37675 static const sqlite3_pcache_methods2 defaultMethods = {
37676 1, /* iVersion */
37677 0, /* pArg */
37678 pcache1Init, /* xInit */
37679 pcache1Shutdown, /* xShutdown */
37680 pcache1Create, /* xCreate */
37681 pcache1Cachesize, /* xCachesize */
37682 pcache1Pagecount, /* xPagecount */
37683 pcache1Fetch, /* xFetch */
37684 pcache1Unpin, /* xUnpin */
37685 pcache1Rekey, /* xRekey */
37686 pcache1Truncate, /* xTruncate */
37687 pcache1Destroy, /* xDestroy */
37688 pcache1Shrink /* xShrink */
37690 sqlite3_config(SQLITE_CONFIG_PCACHE2, &defaultMethods);
37693 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
37695 ** This function is called to free superfluous dynamically allocated memory
37696 ** held by the pager system. Memory in use by any SQLite pager allocated
37697 ** by the current thread may be sqlite3_free()ed.
37699 ** nReq is the number of bytes of memory required. Once this much has
37700 ** been released, the function returns. The return value is the total number
37701 ** of bytes of memory released.
37703 SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
37704 int nFree = 0;
37705 assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
37706 assert( sqlite3_mutex_notheld(pcache1.mutex) );
37707 if( pcache1.pStart==0 ){
37708 PgHdr1 *p;
37709 pcache1EnterMutex(&pcache1.grp);
37710 while( (nReq<0 || nFree<nReq) && ((p=pcache1.grp.pLruTail)!=0) ){
37711 nFree += pcache1MemSize(p->page.pBuf);
37712 #ifdef SQLITE_PCACHE_SEPARATE_HEADER
37713 nFree += sqlite3MemSize(p);
37714 #endif
37715 pcache1PinPage(p);
37716 pcache1RemoveFromHash(p);
37717 pcache1FreePage(p);
37719 pcache1LeaveMutex(&pcache1.grp);
37721 return nFree;
37723 #endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
37725 #ifdef SQLITE_TEST
37727 ** This function is used by test procedures to inspect the internal state
37728 ** of the global cache.
37730 SQLITE_PRIVATE void sqlite3PcacheStats(
37731 int *pnCurrent, /* OUT: Total number of pages cached */
37732 int *pnMax, /* OUT: Global maximum cache size */
37733 int *pnMin, /* OUT: Sum of PCache1.nMin for purgeable caches */
37734 int *pnRecyclable /* OUT: Total number of pages available for recycling */
37736 PgHdr1 *p;
37737 int nRecyclable = 0;
37738 for(p=pcache1.grp.pLruHead; p; p=p->pLruNext){
37739 nRecyclable++;
37741 *pnCurrent = pcache1.grp.nCurrentPage;
37742 *pnMax = (int)pcache1.grp.nMaxPage;
37743 *pnMin = (int)pcache1.grp.nMinPage;
37744 *pnRecyclable = nRecyclable;
37746 #endif
37748 /************** End of pcache1.c *********************************************/
37749 /************** Begin file rowset.c ******************************************/
37751 ** 2008 December 3
37753 ** The author disclaims copyright to this source code. In place of
37754 ** a legal notice, here is a blessing:
37756 ** May you do good and not evil.
37757 ** May you find forgiveness for yourself and forgive others.
37758 ** May you share freely, never taking more than you give.
37760 *************************************************************************
37762 ** This module implements an object we call a "RowSet".
37764 ** The RowSet object is a collection of rowids. Rowids
37765 ** are inserted into the RowSet in an arbitrary order. Inserts
37766 ** can be intermixed with tests to see if a given rowid has been
37767 ** previously inserted into the RowSet.
37769 ** After all inserts are finished, it is possible to extract the
37770 ** elements of the RowSet in sorted order. Once this extraction
37771 ** process has started, no new elements may be inserted.
37773 ** Hence, the primitive operations for a RowSet are:
37775 ** CREATE
37776 ** INSERT
37777 ** TEST
37778 ** SMALLEST
37779 ** DESTROY
37781 ** The CREATE and DESTROY primitives are the constructor and destructor,
37782 ** obviously. The INSERT primitive adds a new element to the RowSet.
37783 ** TEST checks to see if an element is already in the RowSet. SMALLEST
37784 ** extracts the least value from the RowSet.
37786 ** The INSERT primitive might allocate additional memory. Memory is
37787 ** allocated in chunks so most INSERTs do no allocation. There is an
37788 ** upper bound on the size of allocated memory. No memory is freed
37789 ** until DESTROY.
37791 ** The TEST primitive includes a "batch" number. The TEST primitive
37792 ** will only see elements that were inserted before the last change
37793 ** in the batch number. In other words, if an INSERT occurs between
37794 ** two TESTs where the TESTs have the same batch nubmer, then the
37795 ** value added by the INSERT will not be visible to the second TEST.
37796 ** The initial batch number is zero, so if the very first TEST contains
37797 ** a non-zero batch number, it will see all prior INSERTs.
37799 ** No INSERTs may occurs after a SMALLEST. An assertion will fail if
37800 ** that is attempted.
37802 ** The cost of an INSERT is roughly constant. (Sometime new memory
37803 ** has to be allocated on an INSERT.) The cost of a TEST with a new
37804 ** batch number is O(NlogN) where N is the number of elements in the RowSet.
37805 ** The cost of a TEST using the same batch number is O(logN). The cost
37806 ** of the first SMALLEST is O(NlogN). Second and subsequent SMALLEST
37807 ** primitives are constant time. The cost of DESTROY is O(N).
37809 ** There is an added cost of O(N) when switching between TEST and
37810 ** SMALLEST primitives.
37815 ** Target size for allocation chunks.
37817 #define ROWSET_ALLOCATION_SIZE 1024
37820 ** The number of rowset entries per allocation chunk.
37822 #define ROWSET_ENTRY_PER_CHUNK \
37823 ((ROWSET_ALLOCATION_SIZE-8)/sizeof(struct RowSetEntry))
37826 ** Each entry in a RowSet is an instance of the following object.
37828 struct RowSetEntry {
37829 i64 v; /* ROWID value for this entry */
37830 struct RowSetEntry *pRight; /* Right subtree (larger entries) or list */
37831 struct RowSetEntry *pLeft; /* Left subtree (smaller entries) */
37835 ** RowSetEntry objects are allocated in large chunks (instances of the
37836 ** following structure) to reduce memory allocation overhead. The
37837 ** chunks are kept on a linked list so that they can be deallocated
37838 ** when the RowSet is destroyed.
37840 struct RowSetChunk {
37841 struct RowSetChunk *pNextChunk; /* Next chunk on list of them all */
37842 struct RowSetEntry aEntry[ROWSET_ENTRY_PER_CHUNK]; /* Allocated entries */
37846 ** A RowSet in an instance of the following structure.
37848 ** A typedef of this structure if found in sqliteInt.h.
37850 struct RowSet {
37851 struct RowSetChunk *pChunk; /* List of all chunk allocations */
37852 sqlite3 *db; /* The database connection */
37853 struct RowSetEntry *pEntry; /* List of entries using pRight */
37854 struct RowSetEntry *pLast; /* Last entry on the pEntry list */
37855 struct RowSetEntry *pFresh; /* Source of new entry objects */
37856 struct RowSetEntry *pTree; /* Binary tree of entries */
37857 u16 nFresh; /* Number of objects on pFresh */
37858 u8 isSorted; /* True if pEntry is sorted */
37859 u8 iBatch; /* Current insert batch */
37863 ** Turn bulk memory into a RowSet object. N bytes of memory
37864 ** are available at pSpace. The db pointer is used as a memory context
37865 ** for any subsequent allocations that need to occur.
37866 ** Return a pointer to the new RowSet object.
37868 ** It must be the case that N is sufficient to make a Rowset. If not
37869 ** an assertion fault occurs.
37871 ** If N is larger than the minimum, use the surplus as an initial
37872 ** allocation of entries available to be filled.
37874 SQLITE_PRIVATE RowSet *sqlite3RowSetInit(sqlite3 *db, void *pSpace, unsigned int N){
37875 RowSet *p;
37876 assert( N >= ROUND8(sizeof(*p)) );
37877 p = pSpace;
37878 p->pChunk = 0;
37879 p->db = db;
37880 p->pEntry = 0;
37881 p->pLast = 0;
37882 p->pTree = 0;
37883 p->pFresh = (struct RowSetEntry*)(ROUND8(sizeof(*p)) + (char*)p);
37884 p->nFresh = (u16)((N - ROUND8(sizeof(*p)))/sizeof(struct RowSetEntry));
37885 p->isSorted = 1;
37886 p->iBatch = 0;
37887 return p;
37891 ** Deallocate all chunks from a RowSet. This frees all memory that
37892 ** the RowSet has allocated over its lifetime. This routine is
37893 ** the destructor for the RowSet.
37895 SQLITE_PRIVATE void sqlite3RowSetClear(RowSet *p){
37896 struct RowSetChunk *pChunk, *pNextChunk;
37897 for(pChunk=p->pChunk; pChunk; pChunk = pNextChunk){
37898 pNextChunk = pChunk->pNextChunk;
37899 sqlite3DbFree(p->db, pChunk);
37901 p->pChunk = 0;
37902 p->nFresh = 0;
37903 p->pEntry = 0;
37904 p->pLast = 0;
37905 p->pTree = 0;
37906 p->isSorted = 1;
37910 ** Insert a new value into a RowSet.
37912 ** The mallocFailed flag of the database connection is set if a
37913 ** memory allocation fails.
37915 SQLITE_PRIVATE void sqlite3RowSetInsert(RowSet *p, i64 rowid){
37916 struct RowSetEntry *pEntry; /* The new entry */
37917 struct RowSetEntry *pLast; /* The last prior entry */
37918 assert( p!=0 );
37919 if( p->nFresh==0 ){
37920 struct RowSetChunk *pNew;
37921 pNew = sqlite3DbMallocRaw(p->db, sizeof(*pNew));
37922 if( pNew==0 ){
37923 return;
37925 pNew->pNextChunk = p->pChunk;
37926 p->pChunk = pNew;
37927 p->pFresh = pNew->aEntry;
37928 p->nFresh = ROWSET_ENTRY_PER_CHUNK;
37930 pEntry = p->pFresh++;
37931 p->nFresh--;
37932 pEntry->v = rowid;
37933 pEntry->pRight = 0;
37934 pLast = p->pLast;
37935 if( pLast ){
37936 if( p->isSorted && rowid<=pLast->v ){
37937 p->isSorted = 0;
37939 pLast->pRight = pEntry;
37940 }else{
37941 assert( p->pEntry==0 ); /* Fires if INSERT after SMALLEST */
37942 p->pEntry = pEntry;
37944 p->pLast = pEntry;
37948 ** Merge two lists of RowSetEntry objects. Remove duplicates.
37950 ** The input lists are connected via pRight pointers and are
37951 ** assumed to each already be in sorted order.
37953 static struct RowSetEntry *rowSetMerge(
37954 struct RowSetEntry *pA, /* First sorted list to be merged */
37955 struct RowSetEntry *pB /* Second sorted list to be merged */
37957 struct RowSetEntry head;
37958 struct RowSetEntry *pTail;
37960 pTail = &head;
37961 while( pA && pB ){
37962 assert( pA->pRight==0 || pA->v<=pA->pRight->v );
37963 assert( pB->pRight==0 || pB->v<=pB->pRight->v );
37964 if( pA->v<pB->v ){
37965 pTail->pRight = pA;
37966 pA = pA->pRight;
37967 pTail = pTail->pRight;
37968 }else if( pB->v<pA->v ){
37969 pTail->pRight = pB;
37970 pB = pB->pRight;
37971 pTail = pTail->pRight;
37972 }else{
37973 pA = pA->pRight;
37976 if( pA ){
37977 assert( pA->pRight==0 || pA->v<=pA->pRight->v );
37978 pTail->pRight = pA;
37979 }else{
37980 assert( pB==0 || pB->pRight==0 || pB->v<=pB->pRight->v );
37981 pTail->pRight = pB;
37983 return head.pRight;
37987 ** Sort all elements on the pEntry list of the RowSet into ascending order.
37989 static void rowSetSort(RowSet *p){
37990 unsigned int i;
37991 struct RowSetEntry *pEntry;
37992 struct RowSetEntry *aBucket[40];
37994 assert( p->isSorted==0 );
37995 memset(aBucket, 0, sizeof(aBucket));
37996 while( p->pEntry ){
37997 pEntry = p->pEntry;
37998 p->pEntry = pEntry->pRight;
37999 pEntry->pRight = 0;
38000 for(i=0; aBucket[i]; i++){
38001 pEntry = rowSetMerge(aBucket[i], pEntry);
38002 aBucket[i] = 0;
38004 aBucket[i] = pEntry;
38006 pEntry = 0;
38007 for(i=0; i<sizeof(aBucket)/sizeof(aBucket[0]); i++){
38008 pEntry = rowSetMerge(pEntry, aBucket[i]);
38010 p->pEntry = pEntry;
38011 p->pLast = 0;
38012 p->isSorted = 1;
38017 ** The input, pIn, is a binary tree (or subtree) of RowSetEntry objects.
38018 ** Convert this tree into a linked list connected by the pRight pointers
38019 ** and return pointers to the first and last elements of the new list.
38021 static void rowSetTreeToList(
38022 struct RowSetEntry *pIn, /* Root of the input tree */
38023 struct RowSetEntry **ppFirst, /* Write head of the output list here */
38024 struct RowSetEntry **ppLast /* Write tail of the output list here */
38026 assert( pIn!=0 );
38027 if( pIn->pLeft ){
38028 struct RowSetEntry *p;
38029 rowSetTreeToList(pIn->pLeft, ppFirst, &p);
38030 p->pRight = pIn;
38031 }else{
38032 *ppFirst = pIn;
38034 if( pIn->pRight ){
38035 rowSetTreeToList(pIn->pRight, &pIn->pRight, ppLast);
38036 }else{
38037 *ppLast = pIn;
38039 assert( (*ppLast)->pRight==0 );
38044 ** Convert a sorted list of elements (connected by pRight) into a binary
38045 ** tree with depth of iDepth. A depth of 1 means the tree contains a single
38046 ** node taken from the head of *ppList. A depth of 2 means a tree with
38047 ** three nodes. And so forth.
38049 ** Use as many entries from the input list as required and update the
38050 ** *ppList to point to the unused elements of the list. If the input
38051 ** list contains too few elements, then construct an incomplete tree
38052 ** and leave *ppList set to NULL.
38054 ** Return a pointer to the root of the constructed binary tree.
38056 static struct RowSetEntry *rowSetNDeepTree(
38057 struct RowSetEntry **ppList,
38058 int iDepth
38060 struct RowSetEntry *p; /* Root of the new tree */
38061 struct RowSetEntry *pLeft; /* Left subtree */
38062 if( *ppList==0 ){
38063 return 0;
38065 if( iDepth==1 ){
38066 p = *ppList;
38067 *ppList = p->pRight;
38068 p->pLeft = p->pRight = 0;
38069 return p;
38071 pLeft = rowSetNDeepTree(ppList, iDepth-1);
38072 p = *ppList;
38073 if( p==0 ){
38074 return pLeft;
38076 p->pLeft = pLeft;
38077 *ppList = p->pRight;
38078 p->pRight = rowSetNDeepTree(ppList, iDepth-1);
38079 return p;
38083 ** Convert a sorted list of elements into a binary tree. Make the tree
38084 ** as deep as it needs to be in order to contain the entire list.
38086 static struct RowSetEntry *rowSetListToTree(struct RowSetEntry *pList){
38087 int iDepth; /* Depth of the tree so far */
38088 struct RowSetEntry *p; /* Current tree root */
38089 struct RowSetEntry *pLeft; /* Left subtree */
38091 assert( pList!=0 );
38092 p = pList;
38093 pList = p->pRight;
38094 p->pLeft = p->pRight = 0;
38095 for(iDepth=1; pList; iDepth++){
38096 pLeft = p;
38097 p = pList;
38098 pList = p->pRight;
38099 p->pLeft = pLeft;
38100 p->pRight = rowSetNDeepTree(&pList, iDepth);
38102 return p;
38106 ** Convert the list in p->pEntry into a sorted list if it is not
38107 ** sorted already. If there is a binary tree on p->pTree, then
38108 ** convert it into a list too and merge it into the p->pEntry list.
38110 static void rowSetToList(RowSet *p){
38111 if( !p->isSorted ){
38112 rowSetSort(p);
38114 if( p->pTree ){
38115 struct RowSetEntry *pHead, *pTail;
38116 rowSetTreeToList(p->pTree, &pHead, &pTail);
38117 p->pTree = 0;
38118 p->pEntry = rowSetMerge(p->pEntry, pHead);
38123 ** Extract the smallest element from the RowSet.
38124 ** Write the element into *pRowid. Return 1 on success. Return
38125 ** 0 if the RowSet is already empty.
38127 ** After this routine has been called, the sqlite3RowSetInsert()
38128 ** routine may not be called again.
38130 SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){
38131 rowSetToList(p);
38132 if( p->pEntry ){
38133 *pRowid = p->pEntry->v;
38134 p->pEntry = p->pEntry->pRight;
38135 if( p->pEntry==0 ){
38136 sqlite3RowSetClear(p);
38138 return 1;
38139 }else{
38140 return 0;
38145 ** Check to see if element iRowid was inserted into the the rowset as
38146 ** part of any insert batch prior to iBatch. Return 1 or 0.
38148 SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, u8 iBatch, sqlite3_int64 iRowid){
38149 struct RowSetEntry *p;
38150 if( iBatch!=pRowSet->iBatch ){
38151 if( pRowSet->pEntry ){
38152 rowSetToList(pRowSet);
38153 pRowSet->pTree = rowSetListToTree(pRowSet->pEntry);
38154 pRowSet->pEntry = 0;
38155 pRowSet->pLast = 0;
38157 pRowSet->iBatch = iBatch;
38159 p = pRowSet->pTree;
38160 while( p ){
38161 if( p->v<iRowid ){
38162 p = p->pRight;
38163 }else if( p->v>iRowid ){
38164 p = p->pLeft;
38165 }else{
38166 return 1;
38169 return 0;
38172 /************** End of rowset.c **********************************************/
38173 /************** Begin file pager.c *******************************************/
38175 ** 2001 September 15
38177 ** The author disclaims copyright to this source code. In place of
38178 ** a legal notice, here is a blessing:
38180 ** May you do good and not evil.
38181 ** May you find forgiveness for yourself and forgive others.
38182 ** May you share freely, never taking more than you give.
38184 *************************************************************************
38185 ** This is the implementation of the page cache subsystem or "pager".
38187 ** The pager is used to access a database disk file. It implements
38188 ** atomic commit and rollback through the use of a journal file that
38189 ** is separate from the database file. The pager also implements file
38190 ** locking to prevent two processes from writing the same database
38191 ** file simultaneously, or one process from reading the database while
38192 ** another is writing.
38194 #ifndef SQLITE_OMIT_DISKIO
38195 /************** Include wal.h in the middle of pager.c ***********************/
38196 /************** Begin file wal.h *********************************************/
38198 ** 2010 February 1
38200 ** The author disclaims copyright to this source code. In place of
38201 ** a legal notice, here is a blessing:
38203 ** May you do good and not evil.
38204 ** May you find forgiveness for yourself and forgive others.
38205 ** May you share freely, never taking more than you give.
38207 *************************************************************************
38208 ** This header file defines the interface to the write-ahead logging
38209 ** system. Refer to the comments below and the header comment attached to
38210 ** the implementation of each function in log.c for further details.
38213 #ifndef _WAL_H_
38214 #define _WAL_H_
38217 /* Additional values that can be added to the sync_flags argument of
38218 ** sqlite3WalFrames():
38220 #define WAL_SYNC_TRANSACTIONS 0x20 /* Sync at the end of each transaction */
38221 #define SQLITE_SYNC_MASK 0x13 /* Mask off the SQLITE_SYNC_* values */
38223 #ifdef SQLITE_OMIT_WAL
38224 # define sqlite3WalOpen(x,y,z) 0
38225 # define sqlite3WalLimit(x,y)
38226 # define sqlite3WalClose(w,x,y,z) 0
38227 # define sqlite3WalBeginReadTransaction(y,z) 0
38228 # define sqlite3WalEndReadTransaction(z)
38229 # define sqlite3WalRead(v,w,x,y,z) 0
38230 # define sqlite3WalDbsize(y) 0
38231 # define sqlite3WalBeginWriteTransaction(y) 0
38232 # define sqlite3WalEndWriteTransaction(x) 0
38233 # define sqlite3WalUndo(x,y,z) 0
38234 # define sqlite3WalSavepoint(y,z)
38235 # define sqlite3WalSavepointUndo(y,z) 0
38236 # define sqlite3WalFrames(u,v,w,x,y,z) 0
38237 # define sqlite3WalCheckpoint(r,s,t,u,v,w,x,y,z) 0
38238 # define sqlite3WalCallback(z) 0
38239 # define sqlite3WalExclusiveMode(y,z) 0
38240 # define sqlite3WalHeapMemory(z) 0
38241 #else
38243 #define WAL_SAVEPOINT_NDATA 4
38245 /* Connection to a write-ahead log (WAL) file.
38246 ** There is one object of this type for each pager.
38248 typedef struct Wal Wal;
38250 /* Open and close a connection to a write-ahead log. */
38251 SQLITE_PRIVATE int sqlite3WalOpen(sqlite3_vfs*, sqlite3_file*, const char *, int, i64, Wal**);
38252 SQLITE_PRIVATE int sqlite3WalClose(Wal *pWal, int sync_flags, int, u8 *);
38254 /* Set the limiting size of a WAL file. */
38255 SQLITE_PRIVATE void sqlite3WalLimit(Wal*, i64);
38257 /* Used by readers to open (lock) and close (unlock) a snapshot. A
38258 ** snapshot is like a read-transaction. It is the state of the database
38259 ** at an instant in time. sqlite3WalOpenSnapshot gets a read lock and
38260 ** preserves the current state even if the other threads or processes
38261 ** write to or checkpoint the WAL. sqlite3WalCloseSnapshot() closes the
38262 ** transaction and releases the lock.
38264 SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *);
38265 SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal);
38267 /* Read a page from the write-ahead log, if it is present. */
38268 SQLITE_PRIVATE int sqlite3WalRead(Wal *pWal, Pgno pgno, int *pInWal, int nOut, u8 *pOut);
38270 /* If the WAL is not empty, return the size of the database. */
38271 SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal);
38273 /* Obtain or release the WRITER lock. */
38274 SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal);
38275 SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal);
38277 /* Undo any frames written (but not committed) to the log */
38278 SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx);
38280 /* Return an integer that records the current (uncommitted) write
38281 ** position in the WAL */
38282 SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData);
38284 /* Move the write position of the WAL back to iFrame. Called in
38285 ** response to a ROLLBACK TO command. */
38286 SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData);
38288 /* Write a frame or frames to the log. */
38289 SQLITE_PRIVATE int sqlite3WalFrames(Wal *pWal, int, PgHdr *, Pgno, int, int);
38291 /* Copy pages from the log to the database file */
38292 SQLITE_PRIVATE int sqlite3WalCheckpoint(
38293 Wal *pWal, /* Write-ahead log connection */
38294 int eMode, /* One of PASSIVE, FULL and RESTART */
38295 int (*xBusy)(void*), /* Function to call when busy */
38296 void *pBusyArg, /* Context argument for xBusyHandler */
38297 int sync_flags, /* Flags to sync db file with (or 0) */
38298 int nBuf, /* Size of buffer nBuf */
38299 u8 *zBuf, /* Temporary buffer to use */
38300 int *pnLog, /* OUT: Number of frames in WAL */
38301 int *pnCkpt /* OUT: Number of backfilled frames in WAL */
38304 /* Return the value to pass to a sqlite3_wal_hook callback, the
38305 ** number of frames in the WAL at the point of the last commit since
38306 ** sqlite3WalCallback() was called. If no commits have occurred since
38307 ** the last call, then return 0.
38309 SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal);
38311 /* Tell the wal layer that an EXCLUSIVE lock has been obtained (or released)
38312 ** by the pager layer on the database file.
38314 SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op);
38316 /* Return true if the argument is non-NULL and the WAL module is using
38317 ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
38318 ** WAL module is using shared-memory, return false.
38320 SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal);
38322 #endif /* ifndef SQLITE_OMIT_WAL */
38323 #endif /* _WAL_H_ */
38325 /************** End of wal.h *************************************************/
38326 /************** Continuing where we left off in pager.c **********************/
38329 /******************* NOTES ON THE DESIGN OF THE PAGER ************************
38331 ** This comment block describes invariants that hold when using a rollback
38332 ** journal. These invariants do not apply for journal_mode=WAL,
38333 ** journal_mode=MEMORY, or journal_mode=OFF.
38335 ** Within this comment block, a page is deemed to have been synced
38336 ** automatically as soon as it is written when PRAGMA synchronous=OFF.
38337 ** Otherwise, the page is not synced until the xSync method of the VFS
38338 ** is called successfully on the file containing the page.
38340 ** Definition: A page of the database file is said to be "overwriteable" if
38341 ** one or more of the following are true about the page:
38343 ** (a) The original content of the page as it was at the beginning of
38344 ** the transaction has been written into the rollback journal and
38345 ** synced.
38347 ** (b) The page was a freelist leaf page at the start of the transaction.
38349 ** (c) The page number is greater than the largest page that existed in
38350 ** the database file at the start of the transaction.
38352 ** (1) A page of the database file is never overwritten unless one of the
38353 ** following are true:
38355 ** (a) The page and all other pages on the same sector are overwriteable.
38357 ** (b) The atomic page write optimization is enabled, and the entire
38358 ** transaction other than the update of the transaction sequence
38359 ** number consists of a single page change.
38361 ** (2) The content of a page written into the rollback journal exactly matches
38362 ** both the content in the database when the rollback journal was written
38363 ** and the content in the database at the beginning of the current
38364 ** transaction.
38366 ** (3) Writes to the database file are an integer multiple of the page size
38367 ** in length and are aligned on a page boundary.
38369 ** (4) Reads from the database file are either aligned on a page boundary and
38370 ** an integer multiple of the page size in length or are taken from the
38371 ** first 100 bytes of the database file.
38373 ** (5) All writes to the database file are synced prior to the rollback journal
38374 ** being deleted, truncated, or zeroed.
38376 ** (6) If a master journal file is used, then all writes to the database file
38377 ** are synced prior to the master journal being deleted.
38379 ** Definition: Two databases (or the same database at two points it time)
38380 ** are said to be "logically equivalent" if they give the same answer to
38381 ** all queries. Note in particular the the content of freelist leaf
38382 ** pages can be changed arbitarily without effecting the logical equivalence
38383 ** of the database.
38385 ** (7) At any time, if any subset, including the empty set and the total set,
38386 ** of the unsynced changes to a rollback journal are removed and the
38387 ** journal is rolled back, the resulting database file will be logical
38388 ** equivalent to the database file at the beginning of the transaction.
38390 ** (8) When a transaction is rolled back, the xTruncate method of the VFS
38391 ** is called to restore the database file to the same size it was at
38392 ** the beginning of the transaction. (In some VFSes, the xTruncate
38393 ** method is a no-op, but that does not change the fact the SQLite will
38394 ** invoke it.)
38396 ** (9) Whenever the database file is modified, at least one bit in the range
38397 ** of bytes from 24 through 39 inclusive will be changed prior to releasing
38398 ** the EXCLUSIVE lock, thus signaling other connections on the same
38399 ** database to flush their caches.
38401 ** (10) The pattern of bits in bytes 24 through 39 shall not repeat in less
38402 ** than one billion transactions.
38404 ** (11) A database file is well-formed at the beginning and at the conclusion
38405 ** of every transaction.
38407 ** (12) An EXCLUSIVE lock is held on the database file when writing to
38408 ** the database file.
38410 ** (13) A SHARED lock is held on the database file while reading any
38411 ** content out of the database file.
38413 ******************************************************************************/
38416 ** Macros for troubleshooting. Normally turned off
38418 #if 0
38419 int sqlite3PagerTrace=1; /* True to enable tracing */
38420 #define sqlite3DebugPrintf printf
38421 #define PAGERTRACE(X) if( sqlite3PagerTrace ){ sqlite3DebugPrintf X; }
38422 #else
38423 #define PAGERTRACE(X)
38424 #endif
38427 ** The following two macros are used within the PAGERTRACE() macros above
38428 ** to print out file-descriptors.
38430 ** PAGERID() takes a pointer to a Pager struct as its argument. The
38431 ** associated file-descriptor is returned. FILEHANDLEID() takes an sqlite3_file
38432 ** struct as its argument.
38434 #define PAGERID(p) ((int)(p->fd))
38435 #define FILEHANDLEID(fd) ((int)fd)
38438 ** The Pager.eState variable stores the current 'state' of a pager. A
38439 ** pager may be in any one of the seven states shown in the following
38440 ** state diagram.
38442 ** OPEN <------+------+
38443 ** | | |
38444 ** V | |
38445 ** +---------> READER-------+ |
38446 ** | | |
38447 ** | V |
38448 ** |<-------WRITER_LOCKED------> ERROR
38449 ** | | ^
38450 ** | V |
38451 ** |<------WRITER_CACHEMOD-------->|
38452 ** | | |
38453 ** | V |
38454 ** |<-------WRITER_DBMOD---------->|
38455 ** | | |
38456 ** | V |
38457 ** +<------WRITER_FINISHED-------->+
38460 ** List of state transitions and the C [function] that performs each:
38462 ** OPEN -> READER [sqlite3PagerSharedLock]
38463 ** READER -> OPEN [pager_unlock]
38465 ** READER -> WRITER_LOCKED [sqlite3PagerBegin]
38466 ** WRITER_LOCKED -> WRITER_CACHEMOD [pager_open_journal]
38467 ** WRITER_CACHEMOD -> WRITER_DBMOD [syncJournal]
38468 ** WRITER_DBMOD -> WRITER_FINISHED [sqlite3PagerCommitPhaseOne]
38469 ** WRITER_*** -> READER [pager_end_transaction]
38471 ** WRITER_*** -> ERROR [pager_error]
38472 ** ERROR -> OPEN [pager_unlock]
38475 ** OPEN:
38477 ** The pager starts up in this state. Nothing is guaranteed in this
38478 ** state - the file may or may not be locked and the database size is
38479 ** unknown. The database may not be read or written.
38481 ** * No read or write transaction is active.
38482 ** * Any lock, or no lock at all, may be held on the database file.
38483 ** * The dbSize, dbOrigSize and dbFileSize variables may not be trusted.
38485 ** READER:
38487 ** In this state all the requirements for reading the database in
38488 ** rollback (non-WAL) mode are met. Unless the pager is (or recently
38489 ** was) in exclusive-locking mode, a user-level read transaction is
38490 ** open. The database size is known in this state.
38492 ** A connection running with locking_mode=normal enters this state when
38493 ** it opens a read-transaction on the database and returns to state
38494 ** OPEN after the read-transaction is completed. However a connection
38495 ** running in locking_mode=exclusive (including temp databases) remains in
38496 ** this state even after the read-transaction is closed. The only way
38497 ** a locking_mode=exclusive connection can transition from READER to OPEN
38498 ** is via the ERROR state (see below).
38500 ** * A read transaction may be active (but a write-transaction cannot).
38501 ** * A SHARED or greater lock is held on the database file.
38502 ** * The dbSize variable may be trusted (even if a user-level read
38503 ** transaction is not active). The dbOrigSize and dbFileSize variables
38504 ** may not be trusted at this point.
38505 ** * If the database is a WAL database, then the WAL connection is open.
38506 ** * Even if a read-transaction is not open, it is guaranteed that
38507 ** there is no hot-journal in the file-system.
38509 ** WRITER_LOCKED:
38511 ** The pager moves to this state from READER when a write-transaction
38512 ** is first opened on the database. In WRITER_LOCKED state, all locks
38513 ** required to start a write-transaction are held, but no actual
38514 ** modifications to the cache or database have taken place.
38516 ** In rollback mode, a RESERVED or (if the transaction was opened with
38517 ** BEGIN EXCLUSIVE) EXCLUSIVE lock is obtained on the database file when
38518 ** moving to this state, but the journal file is not written to or opened
38519 ** to in this state. If the transaction is committed or rolled back while
38520 ** in WRITER_LOCKED state, all that is required is to unlock the database
38521 ** file.
38523 ** IN WAL mode, WalBeginWriteTransaction() is called to lock the log file.
38524 ** If the connection is running with locking_mode=exclusive, an attempt
38525 ** is made to obtain an EXCLUSIVE lock on the database file.
38527 ** * A write transaction is active.
38528 ** * If the connection is open in rollback-mode, a RESERVED or greater
38529 ** lock is held on the database file.
38530 ** * If the connection is open in WAL-mode, a WAL write transaction
38531 ** is open (i.e. sqlite3WalBeginWriteTransaction() has been successfully
38532 ** called).
38533 ** * The dbSize, dbOrigSize and dbFileSize variables are all valid.
38534 ** * The contents of the pager cache have not been modified.
38535 ** * The journal file may or may not be open.
38536 ** * Nothing (not even the first header) has been written to the journal.
38538 ** WRITER_CACHEMOD:
38540 ** A pager moves from WRITER_LOCKED state to this state when a page is
38541 ** first modified by the upper layer. In rollback mode the journal file
38542 ** is opened (if it is not already open) and a header written to the
38543 ** start of it. The database file on disk has not been modified.
38545 ** * A write transaction is active.
38546 ** * A RESERVED or greater lock is held on the database file.
38547 ** * The journal file is open and the first header has been written
38548 ** to it, but the header has not been synced to disk.
38549 ** * The contents of the page cache have been modified.
38551 ** WRITER_DBMOD:
38553 ** The pager transitions from WRITER_CACHEMOD into WRITER_DBMOD state
38554 ** when it modifies the contents of the database file. WAL connections
38555 ** never enter this state (since they do not modify the database file,
38556 ** just the log file).
38558 ** * A write transaction is active.
38559 ** * An EXCLUSIVE or greater lock is held on the database file.
38560 ** * The journal file is open and the first header has been written
38561 ** and synced to disk.
38562 ** * The contents of the page cache have been modified (and possibly
38563 ** written to disk).
38565 ** WRITER_FINISHED:
38567 ** It is not possible for a WAL connection to enter this state.
38569 ** A rollback-mode pager changes to WRITER_FINISHED state from WRITER_DBMOD
38570 ** state after the entire transaction has been successfully written into the
38571 ** database file. In this state the transaction may be committed simply
38572 ** by finalizing the journal file. Once in WRITER_FINISHED state, it is
38573 ** not possible to modify the database further. At this point, the upper
38574 ** layer must either commit or rollback the transaction.
38576 ** * A write transaction is active.
38577 ** * An EXCLUSIVE or greater lock is held on the database file.
38578 ** * All writing and syncing of journal and database data has finished.
38579 ** If no error occured, all that remains is to finalize the journal to
38580 ** commit the transaction. If an error did occur, the caller will need
38581 ** to rollback the transaction.
38583 ** ERROR:
38585 ** The ERROR state is entered when an IO or disk-full error (including
38586 ** SQLITE_IOERR_NOMEM) occurs at a point in the code that makes it
38587 ** difficult to be sure that the in-memory pager state (cache contents,
38588 ** db size etc.) are consistent with the contents of the file-system.
38590 ** Temporary pager files may enter the ERROR state, but in-memory pagers
38591 ** cannot.
38593 ** For example, if an IO error occurs while performing a rollback,
38594 ** the contents of the page-cache may be left in an inconsistent state.
38595 ** At this point it would be dangerous to change back to READER state
38596 ** (as usually happens after a rollback). Any subsequent readers might
38597 ** report database corruption (due to the inconsistent cache), and if
38598 ** they upgrade to writers, they may inadvertently corrupt the database
38599 ** file. To avoid this hazard, the pager switches into the ERROR state
38600 ** instead of READER following such an error.
38602 ** Once it has entered the ERROR state, any attempt to use the pager
38603 ** to read or write data returns an error. Eventually, once all
38604 ** outstanding transactions have been abandoned, the pager is able to
38605 ** transition back to OPEN state, discarding the contents of the
38606 ** page-cache and any other in-memory state at the same time. Everything
38607 ** is reloaded from disk (and, if necessary, hot-journal rollback peformed)
38608 ** when a read-transaction is next opened on the pager (transitioning
38609 ** the pager into READER state). At that point the system has recovered
38610 ** from the error.
38612 ** Specifically, the pager jumps into the ERROR state if:
38614 ** 1. An error occurs while attempting a rollback. This happens in
38615 ** function sqlite3PagerRollback().
38617 ** 2. An error occurs while attempting to finalize a journal file
38618 ** following a commit in function sqlite3PagerCommitPhaseTwo().
38620 ** 3. An error occurs while attempting to write to the journal or
38621 ** database file in function pagerStress() in order to free up
38622 ** memory.
38624 ** In other cases, the error is returned to the b-tree layer. The b-tree
38625 ** layer then attempts a rollback operation. If the error condition
38626 ** persists, the pager enters the ERROR state via condition (1) above.
38628 ** Condition (3) is necessary because it can be triggered by a read-only
38629 ** statement executed within a transaction. In this case, if the error
38630 ** code were simply returned to the user, the b-tree layer would not
38631 ** automatically attempt a rollback, as it assumes that an error in a
38632 ** read-only statement cannot leave the pager in an internally inconsistent
38633 ** state.
38635 ** * The Pager.errCode variable is set to something other than SQLITE_OK.
38636 ** * There are one or more outstanding references to pages (after the
38637 ** last reference is dropped the pager should move back to OPEN state).
38638 ** * The pager is not an in-memory pager.
38641 ** Notes:
38643 ** * A pager is never in WRITER_DBMOD or WRITER_FINISHED state if the
38644 ** connection is open in WAL mode. A WAL connection is always in one
38645 ** of the first four states.
38647 ** * Normally, a connection open in exclusive mode is never in PAGER_OPEN
38648 ** state. There are two exceptions: immediately after exclusive-mode has
38649 ** been turned on (and before any read or write transactions are
38650 ** executed), and when the pager is leaving the "error state".
38652 ** * See also: assert_pager_state().
38654 #define PAGER_OPEN 0
38655 #define PAGER_READER 1
38656 #define PAGER_WRITER_LOCKED 2
38657 #define PAGER_WRITER_CACHEMOD 3
38658 #define PAGER_WRITER_DBMOD 4
38659 #define PAGER_WRITER_FINISHED 5
38660 #define PAGER_ERROR 6
38663 ** The Pager.eLock variable is almost always set to one of the
38664 ** following locking-states, according to the lock currently held on
38665 ** the database file: NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
38666 ** This variable is kept up to date as locks are taken and released by
38667 ** the pagerLockDb() and pagerUnlockDb() wrappers.
38669 ** If the VFS xLock() or xUnlock() returns an error other than SQLITE_BUSY
38670 ** (i.e. one of the SQLITE_IOERR subtypes), it is not clear whether or not
38671 ** the operation was successful. In these circumstances pagerLockDb() and
38672 ** pagerUnlockDb() take a conservative approach - eLock is always updated
38673 ** when unlocking the file, and only updated when locking the file if the
38674 ** VFS call is successful. This way, the Pager.eLock variable may be set
38675 ** to a less exclusive (lower) value than the lock that is actually held
38676 ** at the system level, but it is never set to a more exclusive value.
38678 ** This is usually safe. If an xUnlock fails or appears to fail, there may
38679 ** be a few redundant xLock() calls or a lock may be held for longer than
38680 ** required, but nothing really goes wrong.
38682 ** The exception is when the database file is unlocked as the pager moves
38683 ** from ERROR to OPEN state. At this point there may be a hot-journal file
38684 ** in the file-system that needs to be rolled back (as part of a OPEN->SHARED
38685 ** transition, by the same pager or any other). If the call to xUnlock()
38686 ** fails at this point and the pager is left holding an EXCLUSIVE lock, this
38687 ** can confuse the call to xCheckReservedLock() call made later as part
38688 ** of hot-journal detection.
38690 ** xCheckReservedLock() is defined as returning true "if there is a RESERVED
38691 ** lock held by this process or any others". So xCheckReservedLock may
38692 ** return true because the caller itself is holding an EXCLUSIVE lock (but
38693 ** doesn't know it because of a previous error in xUnlock). If this happens
38694 ** a hot-journal may be mistaken for a journal being created by an active
38695 ** transaction in another process, causing SQLite to read from the database
38696 ** without rolling it back.
38698 ** To work around this, if a call to xUnlock() fails when unlocking the
38699 ** database in the ERROR state, Pager.eLock is set to UNKNOWN_LOCK. It
38700 ** is only changed back to a real locking state after a successful call
38701 ** to xLock(EXCLUSIVE). Also, the code to do the OPEN->SHARED state transition
38702 ** omits the check for a hot-journal if Pager.eLock is set to UNKNOWN_LOCK
38703 ** lock. Instead, it assumes a hot-journal exists and obtains an EXCLUSIVE
38704 ** lock on the database file before attempting to roll it back. See function
38705 ** PagerSharedLock() for more detail.
38707 ** Pager.eLock may only be set to UNKNOWN_LOCK when the pager is in
38708 ** PAGER_OPEN state.
38710 #define UNKNOWN_LOCK (EXCLUSIVE_LOCK+1)
38713 ** A macro used for invoking the codec if there is one
38715 #ifdef SQLITE_HAS_CODEC
38716 # define CODEC1(P,D,N,X,E) \
38717 if( P->xCodec && P->xCodec(P->pCodec,D,N,X)==0 ){ E; }
38718 # define CODEC2(P,D,N,X,E,O) \
38719 if( P->xCodec==0 ){ O=(char*)D; }else \
38720 if( (O=(char*)(P->xCodec(P->pCodec,D,N,X)))==0 ){ E; }
38721 #else
38722 # define CODEC1(P,D,N,X,E) /* NO-OP */
38723 # define CODEC2(P,D,N,X,E,O) O=(char*)D
38724 #endif
38727 ** The maximum allowed sector size. 64KiB. If the xSectorsize() method
38728 ** returns a value larger than this, then MAX_SECTOR_SIZE is used instead.
38729 ** This could conceivably cause corruption following a power failure on
38730 ** such a system. This is currently an undocumented limit.
38732 #define MAX_SECTOR_SIZE 0x10000
38735 ** An instance of the following structure is allocated for each active
38736 ** savepoint and statement transaction in the system. All such structures
38737 ** are stored in the Pager.aSavepoint[] array, which is allocated and
38738 ** resized using sqlite3Realloc().
38740 ** When a savepoint is created, the PagerSavepoint.iHdrOffset field is
38741 ** set to 0. If a journal-header is written into the main journal while
38742 ** the savepoint is active, then iHdrOffset is set to the byte offset
38743 ** immediately following the last journal record written into the main
38744 ** journal before the journal-header. This is required during savepoint
38745 ** rollback (see pagerPlaybackSavepoint()).
38747 typedef struct PagerSavepoint PagerSavepoint;
38748 struct PagerSavepoint {
38749 i64 iOffset; /* Starting offset in main journal */
38750 i64 iHdrOffset; /* See above */
38751 Bitvec *pInSavepoint; /* Set of pages in this savepoint */
38752 Pgno nOrig; /* Original number of pages in file */
38753 Pgno iSubRec; /* Index of first record in sub-journal */
38754 #ifndef SQLITE_OMIT_WAL
38755 u32 aWalData[WAL_SAVEPOINT_NDATA]; /* WAL savepoint context */
38756 #endif
38760 ** A open page cache is an instance of struct Pager. A description of
38761 ** some of the more important member variables follows:
38763 ** eState
38765 ** The current 'state' of the pager object. See the comment and state
38766 ** diagram above for a description of the pager state.
38768 ** eLock
38770 ** For a real on-disk database, the current lock held on the database file -
38771 ** NO_LOCK, SHARED_LOCK, RESERVED_LOCK or EXCLUSIVE_LOCK.
38773 ** For a temporary or in-memory database (neither of which require any
38774 ** locks), this variable is always set to EXCLUSIVE_LOCK. Since such
38775 ** databases always have Pager.exclusiveMode==1, this tricks the pager
38776 ** logic into thinking that it already has all the locks it will ever
38777 ** need (and no reason to release them).
38779 ** In some (obscure) circumstances, this variable may also be set to
38780 ** UNKNOWN_LOCK. See the comment above the #define of UNKNOWN_LOCK for
38781 ** details.
38783 ** changeCountDone
38785 ** This boolean variable is used to make sure that the change-counter
38786 ** (the 4-byte header field at byte offset 24 of the database file) is
38787 ** not updated more often than necessary.
38789 ** It is set to true when the change-counter field is updated, which
38790 ** can only happen if an exclusive lock is held on the database file.
38791 ** It is cleared (set to false) whenever an exclusive lock is
38792 ** relinquished on the database file. Each time a transaction is committed,
38793 ** The changeCountDone flag is inspected. If it is true, the work of
38794 ** updating the change-counter is omitted for the current transaction.
38796 ** This mechanism means that when running in exclusive mode, a connection
38797 ** need only update the change-counter once, for the first transaction
38798 ** committed.
38800 ** setMaster
38802 ** When PagerCommitPhaseOne() is called to commit a transaction, it may
38803 ** (or may not) specify a master-journal name to be written into the
38804 ** journal file before it is synced to disk.
38806 ** Whether or not a journal file contains a master-journal pointer affects
38807 ** the way in which the journal file is finalized after the transaction is
38808 ** committed or rolled back when running in "journal_mode=PERSIST" mode.
38809 ** If a journal file does not contain a master-journal pointer, it is
38810 ** finalized by overwriting the first journal header with zeroes. If
38811 ** it does contain a master-journal pointer the journal file is finalized
38812 ** by truncating it to zero bytes, just as if the connection were
38813 ** running in "journal_mode=truncate" mode.
38815 ** Journal files that contain master journal pointers cannot be finalized
38816 ** simply by overwriting the first journal-header with zeroes, as the
38817 ** master journal pointer could interfere with hot-journal rollback of any
38818 ** subsequently interrupted transaction that reuses the journal file.
38820 ** The flag is cleared as soon as the journal file is finalized (either
38821 ** by PagerCommitPhaseTwo or PagerRollback). If an IO error prevents the
38822 ** journal file from being successfully finalized, the setMaster flag
38823 ** is cleared anyway (and the pager will move to ERROR state).
38825 ** doNotSpill, doNotSyncSpill
38827 ** These two boolean variables control the behaviour of cache-spills
38828 ** (calls made by the pcache module to the pagerStress() routine to
38829 ** write cached data to the file-system in order to free up memory).
38831 ** When doNotSpill is non-zero, writing to the database from pagerStress()
38832 ** is disabled altogether. This is done in a very obscure case that
38833 ** comes up during savepoint rollback that requires the pcache module
38834 ** to allocate a new page to prevent the journal file from being written
38835 ** while it is being traversed by code in pager_playback().
38837 ** If doNotSyncSpill is non-zero, writing to the database from pagerStress()
38838 ** is permitted, but syncing the journal file is not. This flag is set
38839 ** by sqlite3PagerWrite() when the file-system sector-size is larger than
38840 ** the database page-size in order to prevent a journal sync from happening
38841 ** in between the journalling of two pages on the same sector.
38843 ** subjInMemory
38845 ** This is a boolean variable. If true, then any required sub-journal
38846 ** is opened as an in-memory journal file. If false, then in-memory
38847 ** sub-journals are only used for in-memory pager files.
38849 ** This variable is updated by the upper layer each time a new
38850 ** write-transaction is opened.
38852 ** dbSize, dbOrigSize, dbFileSize
38854 ** Variable dbSize is set to the number of pages in the database file.
38855 ** It is valid in PAGER_READER and higher states (all states except for
38856 ** OPEN and ERROR).
38858 ** dbSize is set based on the size of the database file, which may be
38859 ** larger than the size of the database (the value stored at offset
38860 ** 28 of the database header by the btree). If the size of the file
38861 ** is not an integer multiple of the page-size, the value stored in
38862 ** dbSize is rounded down (i.e. a 5KB file with 2K page-size has dbSize==2).
38863 ** Except, any file that is greater than 0 bytes in size is considered
38864 ** to have at least one page. (i.e. a 1KB file with 2K page-size leads
38865 ** to dbSize==1).
38867 ** During a write-transaction, if pages with page-numbers greater than
38868 ** dbSize are modified in the cache, dbSize is updated accordingly.
38869 ** Similarly, if the database is truncated using PagerTruncateImage(),
38870 ** dbSize is updated.
38872 ** Variables dbOrigSize and dbFileSize are valid in states
38873 ** PAGER_WRITER_LOCKED and higher. dbOrigSize is a copy of the dbSize
38874 ** variable at the start of the transaction. It is used during rollback,
38875 ** and to determine whether or not pages need to be journalled before
38876 ** being modified.
38878 ** Throughout a write-transaction, dbFileSize contains the size of
38879 ** the file on disk in pages. It is set to a copy of dbSize when the
38880 ** write-transaction is first opened, and updated when VFS calls are made
38881 ** to write or truncate the database file on disk.
38883 ** The only reason the dbFileSize variable is required is to suppress
38884 ** unnecessary calls to xTruncate() after committing a transaction. If,
38885 ** when a transaction is committed, the dbFileSize variable indicates
38886 ** that the database file is larger than the database image (Pager.dbSize),
38887 ** pager_truncate() is called. The pager_truncate() call uses xFilesize()
38888 ** to measure the database file on disk, and then truncates it if required.
38889 ** dbFileSize is not used when rolling back a transaction. In this case
38890 ** pager_truncate() is called unconditionally (which means there may be
38891 ** a call to xFilesize() that is not strictly required). In either case,
38892 ** pager_truncate() may cause the file to become smaller or larger.
38894 ** dbHintSize
38896 ** The dbHintSize variable is used to limit the number of calls made to
38897 ** the VFS xFileControl(FCNTL_SIZE_HINT) method.
38899 ** dbHintSize is set to a copy of the dbSize variable when a
38900 ** write-transaction is opened (at the same time as dbFileSize and
38901 ** dbOrigSize). If the xFileControl(FCNTL_SIZE_HINT) method is called,
38902 ** dbHintSize is increased to the number of pages that correspond to the
38903 ** size-hint passed to the method call. See pager_write_pagelist() for
38904 ** details.
38906 ** errCode
38908 ** The Pager.errCode variable is only ever used in PAGER_ERROR state. It
38909 ** is set to zero in all other states. In PAGER_ERROR state, Pager.errCode
38910 ** is always set to SQLITE_FULL, SQLITE_IOERR or one of the SQLITE_IOERR_XXX
38911 ** sub-codes.
38913 struct Pager {
38914 sqlite3_vfs *pVfs; /* OS functions to use for IO */
38915 u8 exclusiveMode; /* Boolean. True if locking_mode==EXCLUSIVE */
38916 u8 journalMode; /* One of the PAGER_JOURNALMODE_* values */
38917 u8 useJournal; /* Use a rollback journal on this file */
38918 u8 noReadlock; /* Do not bother to obtain readlocks */
38919 u8 noSync; /* Do not sync the journal if true */
38920 u8 fullSync; /* Do extra syncs of the journal for robustness */
38921 u8 ckptSyncFlags; /* SYNC_NORMAL or SYNC_FULL for checkpoint */
38922 u8 walSyncFlags; /* SYNC_NORMAL or SYNC_FULL for wal writes */
38923 u8 syncFlags; /* SYNC_NORMAL or SYNC_FULL otherwise */
38924 u8 tempFile; /* zFilename is a temporary file */
38925 u8 readOnly; /* True for a read-only database */
38926 u8 memDb; /* True to inhibit all file I/O */
38928 /**************************************************************************
38929 ** The following block contains those class members that change during
38930 ** routine opertion. Class members not in this block are either fixed
38931 ** when the pager is first created or else only change when there is a
38932 ** significant mode change (such as changing the page_size, locking_mode,
38933 ** or the journal_mode). From another view, these class members describe
38934 ** the "state" of the pager, while other class members describe the
38935 ** "configuration" of the pager.
38937 u8 eState; /* Pager state (OPEN, READER, WRITER_LOCKED..) */
38938 u8 eLock; /* Current lock held on database file */
38939 u8 changeCountDone; /* Set after incrementing the change-counter */
38940 u8 setMaster; /* True if a m-j name has been written to jrnl */
38941 u8 doNotSpill; /* Do not spill the cache when non-zero */
38942 u8 doNotSyncSpill; /* Do not do a spill that requires jrnl sync */
38943 u8 subjInMemory; /* True to use in-memory sub-journals */
38944 Pgno dbSize; /* Number of pages in the database */
38945 Pgno dbOrigSize; /* dbSize before the current transaction */
38946 Pgno dbFileSize; /* Number of pages in the database file */
38947 Pgno dbHintSize; /* Value passed to FCNTL_SIZE_HINT call */
38948 int errCode; /* One of several kinds of errors */
38949 int nRec; /* Pages journalled since last j-header written */
38950 u32 cksumInit; /* Quasi-random value added to every checksum */
38951 u32 nSubRec; /* Number of records written to sub-journal */
38952 Bitvec *pInJournal; /* One bit for each page in the database file */
38953 sqlite3_file *fd; /* File descriptor for database */
38954 sqlite3_file *jfd; /* File descriptor for main journal */
38955 sqlite3_file *sjfd; /* File descriptor for sub-journal */
38956 i64 journalOff; /* Current write offset in the journal file */
38957 i64 journalHdr; /* Byte offset to previous journal header */
38958 sqlite3_backup *pBackup; /* Pointer to list of ongoing backup processes */
38959 PagerSavepoint *aSavepoint; /* Array of active savepoints */
38960 int nSavepoint; /* Number of elements in aSavepoint[] */
38961 char dbFileVers[16]; /* Changes whenever database file changes */
38963 ** End of the routinely-changing class members
38964 ***************************************************************************/
38966 u16 nExtra; /* Add this many bytes to each in-memory page */
38967 i16 nReserve; /* Number of unused bytes at end of each page */
38968 u32 vfsFlags; /* Flags for sqlite3_vfs.xOpen() */
38969 u32 sectorSize; /* Assumed sector size during rollback */
38970 int pageSize; /* Number of bytes in a page */
38971 Pgno mxPgno; /* Maximum allowed size of the database */
38972 i64 journalSizeLimit; /* Size limit for persistent journal files */
38973 char *zFilename; /* Name of the database file */
38974 char *zJournal; /* Name of the journal file */
38975 int (*xBusyHandler)(void*); /* Function to call when busy */
38976 void *pBusyHandlerArg; /* Context argument for xBusyHandler */
38977 int nHit, nMiss; /* Total cache hits and misses */
38978 #ifdef SQLITE_TEST
38979 int nRead, nWrite; /* Database pages read/written */
38980 #endif
38981 void (*xReiniter)(DbPage*); /* Call this routine when reloading pages */
38982 #ifdef SQLITE_HAS_CODEC
38983 void *(*xCodec)(void*,void*,Pgno,int); /* Routine for en/decoding data */
38984 void (*xCodecSizeChng)(void*,int,int); /* Notify of page size changes */
38985 void (*xCodecFree)(void*); /* Destructor for the codec */
38986 void *pCodec; /* First argument to xCodec... methods */
38987 #endif
38988 char *pTmpSpace; /* Pager.pageSize bytes of space for tmp use */
38989 PCache *pPCache; /* Pointer to page cache object */
38990 #ifndef SQLITE_OMIT_WAL
38991 Wal *pWal; /* Write-ahead log used by "journal_mode=wal" */
38992 char *zWal; /* File name for write-ahead log */
38993 #endif
38997 ** The following global variables hold counters used for
38998 ** testing purposes only. These variables do not exist in
38999 ** a non-testing build. These variables are not thread-safe.
39001 #ifdef SQLITE_TEST
39002 SQLITE_API int sqlite3_pager_readdb_count = 0; /* Number of full pages read from DB */
39003 SQLITE_API int sqlite3_pager_writedb_count = 0; /* Number of full pages written to DB */
39004 SQLITE_API int sqlite3_pager_writej_count = 0; /* Number of pages written to journal */
39005 # define PAGER_INCR(v) v++
39006 #else
39007 # define PAGER_INCR(v)
39008 #endif
39013 ** Journal files begin with the following magic string. The data
39014 ** was obtained from /dev/random. It is used only as a sanity check.
39016 ** Since version 2.8.0, the journal format contains additional sanity
39017 ** checking information. If the power fails while the journal is being
39018 ** written, semi-random garbage data might appear in the journal
39019 ** file after power is restored. If an attempt is then made
39020 ** to roll the journal back, the database could be corrupted. The additional
39021 ** sanity checking data is an attempt to discover the garbage in the
39022 ** journal and ignore it.
39024 ** The sanity checking information for the new journal format consists
39025 ** of a 32-bit checksum on each page of data. The checksum covers both
39026 ** the page number and the pPager->pageSize bytes of data for the page.
39027 ** This cksum is initialized to a 32-bit random value that appears in the
39028 ** journal file right after the header. The random initializer is important,
39029 ** because garbage data that appears at the end of a journal is likely
39030 ** data that was once in other files that have now been deleted. If the
39031 ** garbage data came from an obsolete journal file, the checksums might
39032 ** be correct. But by initializing the checksum to random value which
39033 ** is different for every journal, we minimize that risk.
39035 static const unsigned char aJournalMagic[] = {
39036 0xd9, 0xd5, 0x05, 0xf9, 0x20, 0xa1, 0x63, 0xd7,
39040 ** The size of the of each page record in the journal is given by
39041 ** the following macro.
39043 #define JOURNAL_PG_SZ(pPager) ((pPager->pageSize) + 8)
39046 ** The journal header size for this pager. This is usually the same
39047 ** size as a single disk sector. See also setSectorSize().
39049 #define JOURNAL_HDR_SZ(pPager) (pPager->sectorSize)
39052 ** The macro MEMDB is true if we are dealing with an in-memory database.
39053 ** We do this as a macro so that if the SQLITE_OMIT_MEMORYDB macro is set,
39054 ** the value of MEMDB will be a constant and the compiler will optimize
39055 ** out code that would never execute.
39057 #ifdef SQLITE_OMIT_MEMORYDB
39058 # define MEMDB 0
39059 #else
39060 # define MEMDB pPager->memDb
39061 #endif
39064 ** The maximum legal page number is (2^31 - 1).
39066 #define PAGER_MAX_PGNO 2147483647
39069 ** The argument to this macro is a file descriptor (type sqlite3_file*).
39070 ** Return 0 if it is not open, or non-zero (but not 1) if it is.
39072 ** This is so that expressions can be written as:
39074 ** if( isOpen(pPager->jfd) ){ ...
39076 ** instead of
39078 ** if( pPager->jfd->pMethods ){ ...
39080 #define isOpen(pFd) ((pFd)->pMethods)
39083 ** Return true if this pager uses a write-ahead log instead of the usual
39084 ** rollback journal. Otherwise false.
39086 #ifndef SQLITE_OMIT_WAL
39087 static int pagerUseWal(Pager *pPager){
39088 return (pPager->pWal!=0);
39090 #else
39091 # define pagerUseWal(x) 0
39092 # define pagerRollbackWal(x) 0
39093 # define pagerWalFrames(v,w,x,y) 0
39094 # define pagerOpenWalIfPresent(z) SQLITE_OK
39095 # define pagerBeginReadTransaction(z) SQLITE_OK
39096 #endif
39098 #ifndef NDEBUG
39100 ** Usage:
39102 ** assert( assert_pager_state(pPager) );
39104 ** This function runs many asserts to try to find inconsistencies in
39105 ** the internal state of the Pager object.
39107 static int assert_pager_state(Pager *p){
39108 Pager *pPager = p;
39110 /* State must be valid. */
39111 assert( p->eState==PAGER_OPEN
39112 || p->eState==PAGER_READER
39113 || p->eState==PAGER_WRITER_LOCKED
39114 || p->eState==PAGER_WRITER_CACHEMOD
39115 || p->eState==PAGER_WRITER_DBMOD
39116 || p->eState==PAGER_WRITER_FINISHED
39117 || p->eState==PAGER_ERROR
39120 /* Regardless of the current state, a temp-file connection always behaves
39121 ** as if it has an exclusive lock on the database file. It never updates
39122 ** the change-counter field, so the changeCountDone flag is always set.
39124 assert( p->tempFile==0 || p->eLock==EXCLUSIVE_LOCK );
39125 assert( p->tempFile==0 || pPager->changeCountDone );
39127 /* If the useJournal flag is clear, the journal-mode must be "OFF".
39128 ** And if the journal-mode is "OFF", the journal file must not be open.
39130 assert( p->journalMode==PAGER_JOURNALMODE_OFF || p->useJournal );
39131 assert( p->journalMode!=PAGER_JOURNALMODE_OFF || !isOpen(p->jfd) );
39133 /* Check that MEMDB implies noSync. And an in-memory journal. Since
39134 ** this means an in-memory pager performs no IO at all, it cannot encounter
39135 ** either SQLITE_IOERR or SQLITE_FULL during rollback or while finalizing
39136 ** a journal file. (although the in-memory journal implementation may
39137 ** return SQLITE_IOERR_NOMEM while the journal file is being written). It
39138 ** is therefore not possible for an in-memory pager to enter the ERROR
39139 ** state.
39141 if( MEMDB ){
39142 assert( p->noSync );
39143 assert( p->journalMode==PAGER_JOURNALMODE_OFF
39144 || p->journalMode==PAGER_JOURNALMODE_MEMORY
39146 assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN );
39147 assert( pagerUseWal(p)==0 );
39150 /* If changeCountDone is set, a RESERVED lock or greater must be held
39151 ** on the file.
39153 assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK );
39154 assert( p->eLock!=PENDING_LOCK );
39156 switch( p->eState ){
39157 case PAGER_OPEN:
39158 assert( !MEMDB );
39159 assert( pPager->errCode==SQLITE_OK );
39160 assert( sqlite3PcacheRefCount(pPager->pPCache)==0 || pPager->tempFile );
39161 break;
39163 case PAGER_READER:
39164 assert( pPager->errCode==SQLITE_OK );
39165 assert( p->eLock!=UNKNOWN_LOCK );
39166 assert( p->eLock>=SHARED_LOCK || p->noReadlock );
39167 break;
39169 case PAGER_WRITER_LOCKED:
39170 assert( p->eLock!=UNKNOWN_LOCK );
39171 assert( pPager->errCode==SQLITE_OK );
39172 if( !pagerUseWal(pPager) ){
39173 assert( p->eLock>=RESERVED_LOCK );
39175 assert( pPager->dbSize==pPager->dbOrigSize );
39176 assert( pPager->dbOrigSize==pPager->dbFileSize );
39177 assert( pPager->dbOrigSize==pPager->dbHintSize );
39178 assert( pPager->setMaster==0 );
39179 break;
39181 case PAGER_WRITER_CACHEMOD:
39182 assert( p->eLock!=UNKNOWN_LOCK );
39183 assert( pPager->errCode==SQLITE_OK );
39184 if( !pagerUseWal(pPager) ){
39185 /* It is possible that if journal_mode=wal here that neither the
39186 ** journal file nor the WAL file are open. This happens during
39187 ** a rollback transaction that switches from journal_mode=off
39188 ** to journal_mode=wal.
39190 assert( p->eLock>=RESERVED_LOCK );
39191 assert( isOpen(p->jfd)
39192 || p->journalMode==PAGER_JOURNALMODE_OFF
39193 || p->journalMode==PAGER_JOURNALMODE_WAL
39196 assert( pPager->dbOrigSize==pPager->dbFileSize );
39197 assert( pPager->dbOrigSize==pPager->dbHintSize );
39198 break;
39200 case PAGER_WRITER_DBMOD:
39201 assert( p->eLock==EXCLUSIVE_LOCK );
39202 assert( pPager->errCode==SQLITE_OK );
39203 assert( !pagerUseWal(pPager) );
39204 assert( p->eLock>=EXCLUSIVE_LOCK );
39205 assert( isOpen(p->jfd)
39206 || p->journalMode==PAGER_JOURNALMODE_OFF
39207 || p->journalMode==PAGER_JOURNALMODE_WAL
39209 assert( pPager->dbOrigSize<=pPager->dbHintSize );
39210 break;
39212 case PAGER_WRITER_FINISHED:
39213 assert( p->eLock==EXCLUSIVE_LOCK );
39214 assert( pPager->errCode==SQLITE_OK );
39215 assert( !pagerUseWal(pPager) );
39216 assert( isOpen(p->jfd)
39217 || p->journalMode==PAGER_JOURNALMODE_OFF
39218 || p->journalMode==PAGER_JOURNALMODE_WAL
39220 break;
39222 case PAGER_ERROR:
39223 /* There must be at least one outstanding reference to the pager if
39224 ** in ERROR state. Otherwise the pager should have already dropped
39225 ** back to OPEN state.
39227 assert( pPager->errCode!=SQLITE_OK );
39228 assert( sqlite3PcacheRefCount(pPager->pPCache)>0 );
39229 break;
39232 return 1;
39234 #endif /* ifndef NDEBUG */
39236 #ifdef SQLITE_DEBUG
39238 ** Return a pointer to a human readable string in a static buffer
39239 ** containing the state of the Pager object passed as an argument. This
39240 ** is intended to be used within debuggers. For example, as an alternative
39241 ** to "print *pPager" in gdb:
39243 ** (gdb) printf "%s", print_pager_state(pPager)
39245 static char *print_pager_state(Pager *p){
39246 static char zRet[1024];
39248 sqlite3_snprintf(1024, zRet,
39249 "Filename: %s\n"
39250 "State: %s errCode=%d\n"
39251 "Lock: %s\n"
39252 "Locking mode: locking_mode=%s\n"
39253 "Journal mode: journal_mode=%s\n"
39254 "Backing store: tempFile=%d memDb=%d useJournal=%d\n"
39255 "Journal: journalOff=%lld journalHdr=%lld\n"
39256 "Size: dbsize=%d dbOrigSize=%d dbFileSize=%d\n"
39257 , p->zFilename
39258 , p->eState==PAGER_OPEN ? "OPEN" :
39259 p->eState==PAGER_READER ? "READER" :
39260 p->eState==PAGER_WRITER_LOCKED ? "WRITER_LOCKED" :
39261 p->eState==PAGER_WRITER_CACHEMOD ? "WRITER_CACHEMOD" :
39262 p->eState==PAGER_WRITER_DBMOD ? "WRITER_DBMOD" :
39263 p->eState==PAGER_WRITER_FINISHED ? "WRITER_FINISHED" :
39264 p->eState==PAGER_ERROR ? "ERROR" : "?error?"
39265 , (int)p->errCode
39266 , p->eLock==NO_LOCK ? "NO_LOCK" :
39267 p->eLock==RESERVED_LOCK ? "RESERVED" :
39268 p->eLock==EXCLUSIVE_LOCK ? "EXCLUSIVE" :
39269 p->eLock==SHARED_LOCK ? "SHARED" :
39270 p->eLock==UNKNOWN_LOCK ? "UNKNOWN" : "?error?"
39271 , p->exclusiveMode ? "exclusive" : "normal"
39272 , p->journalMode==PAGER_JOURNALMODE_MEMORY ? "memory" :
39273 p->journalMode==PAGER_JOURNALMODE_OFF ? "off" :
39274 p->journalMode==PAGER_JOURNALMODE_DELETE ? "delete" :
39275 p->journalMode==PAGER_JOURNALMODE_PERSIST ? "persist" :
39276 p->journalMode==PAGER_JOURNALMODE_TRUNCATE ? "truncate" :
39277 p->journalMode==PAGER_JOURNALMODE_WAL ? "wal" : "?error?"
39278 , (int)p->tempFile, (int)p->memDb, (int)p->useJournal
39279 , p->journalOff, p->journalHdr
39280 , (int)p->dbSize, (int)p->dbOrigSize, (int)p->dbFileSize
39283 return zRet;
39285 #endif
39288 ** Return true if it is necessary to write page *pPg into the sub-journal.
39289 ** A page needs to be written into the sub-journal if there exists one
39290 ** or more open savepoints for which:
39292 ** * The page-number is less than or equal to PagerSavepoint.nOrig, and
39293 ** * The bit corresponding to the page-number is not set in
39294 ** PagerSavepoint.pInSavepoint.
39296 static int subjRequiresPage(PgHdr *pPg){
39297 Pgno pgno = pPg->pgno;
39298 Pager *pPager = pPg->pPager;
39299 int i;
39300 for(i=0; i<pPager->nSavepoint; i++){
39301 PagerSavepoint *p = &pPager->aSavepoint[i];
39302 if( p->nOrig>=pgno && 0==sqlite3BitvecTest(p->pInSavepoint, pgno) ){
39303 return 1;
39306 return 0;
39310 ** Return true if the page is already in the journal file.
39312 static int pageInJournal(PgHdr *pPg){
39313 return sqlite3BitvecTest(pPg->pPager->pInJournal, pPg->pgno);
39317 ** Read a 32-bit integer from the given file descriptor. Store the integer
39318 ** that is read in *pRes. Return SQLITE_OK if everything worked, or an
39319 ** error code is something goes wrong.
39321 ** All values are stored on disk as big-endian.
39323 static int read32bits(sqlite3_file *fd, i64 offset, u32 *pRes){
39324 unsigned char ac[4];
39325 int rc = sqlite3OsRead(fd, ac, sizeof(ac), offset);
39326 if( rc==SQLITE_OK ){
39327 *pRes = sqlite3Get4byte(ac);
39329 return rc;
39333 ** Write a 32-bit integer into a string buffer in big-endian byte order.
39335 #define put32bits(A,B) sqlite3Put4byte((u8*)A,B)
39339 ** Write a 32-bit integer into the given file descriptor. Return SQLITE_OK
39340 ** on success or an error code is something goes wrong.
39342 static int write32bits(sqlite3_file *fd, i64 offset, u32 val){
39343 char ac[4];
39344 put32bits(ac, val);
39345 return sqlite3OsWrite(fd, ac, 4, offset);
39349 ** Unlock the database file to level eLock, which must be either NO_LOCK
39350 ** or SHARED_LOCK. Regardless of whether or not the call to xUnlock()
39351 ** succeeds, set the Pager.eLock variable to match the (attempted) new lock.
39353 ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is
39354 ** called, do not modify it. See the comment above the #define of
39355 ** UNKNOWN_LOCK for an explanation of this.
39357 static int pagerUnlockDb(Pager *pPager, int eLock){
39358 int rc = SQLITE_OK;
39360 assert( !pPager->exclusiveMode || pPager->eLock==eLock );
39361 assert( eLock==NO_LOCK || eLock==SHARED_LOCK );
39362 assert( eLock!=NO_LOCK || pagerUseWal(pPager)==0 );
39363 if( isOpen(pPager->fd) ){
39364 assert( pPager->eLock>=eLock );
39365 rc = sqlite3OsUnlock(pPager->fd, eLock);
39366 if( pPager->eLock!=UNKNOWN_LOCK ){
39367 pPager->eLock = (u8)eLock;
39369 IOTRACE(("UNLOCK %p %d\n", pPager, eLock))
39371 return rc;
39375 ** Lock the database file to level eLock, which must be either SHARED_LOCK,
39376 ** RESERVED_LOCK or EXCLUSIVE_LOCK. If the caller is successful, set the
39377 ** Pager.eLock variable to the new locking state.
39379 ** Except, if Pager.eLock is set to UNKNOWN_LOCK when this function is
39380 ** called, do not modify it unless the new locking state is EXCLUSIVE_LOCK.
39381 ** See the comment above the #define of UNKNOWN_LOCK for an explanation
39382 ** of this.
39384 static int pagerLockDb(Pager *pPager, int eLock){
39385 int rc = SQLITE_OK;
39387 assert( eLock==SHARED_LOCK || eLock==RESERVED_LOCK || eLock==EXCLUSIVE_LOCK );
39388 if( pPager->eLock<eLock || pPager->eLock==UNKNOWN_LOCK ){
39389 rc = sqlite3OsLock(pPager->fd, eLock);
39390 if( rc==SQLITE_OK && (pPager->eLock!=UNKNOWN_LOCK||eLock==EXCLUSIVE_LOCK) ){
39391 pPager->eLock = (u8)eLock;
39392 IOTRACE(("LOCK %p %d\n", pPager, eLock))
39395 return rc;
39399 ** This function determines whether or not the atomic-write optimization
39400 ** can be used with this pager. The optimization can be used if:
39402 ** (a) the value returned by OsDeviceCharacteristics() indicates that
39403 ** a database page may be written atomically, and
39404 ** (b) the value returned by OsSectorSize() is less than or equal
39405 ** to the page size.
39407 ** The optimization is also always enabled for temporary files. It is
39408 ** an error to call this function if pPager is opened on an in-memory
39409 ** database.
39411 ** If the optimization cannot be used, 0 is returned. If it can be used,
39412 ** then the value returned is the size of the journal file when it
39413 ** contains rollback data for exactly one page.
39415 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
39416 static int jrnlBufferSize(Pager *pPager){
39417 assert( !MEMDB );
39418 if( !pPager->tempFile ){
39419 int dc; /* Device characteristics */
39420 int nSector; /* Sector size */
39421 int szPage; /* Page size */
39423 assert( isOpen(pPager->fd) );
39424 dc = sqlite3OsDeviceCharacteristics(pPager->fd);
39425 nSector = pPager->sectorSize;
39426 szPage = pPager->pageSize;
39428 assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
39429 assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
39430 if( 0==(dc&(SQLITE_IOCAP_ATOMIC|(szPage>>8)) || nSector>szPage) ){
39431 return 0;
39435 return JOURNAL_HDR_SZ(pPager) + JOURNAL_PG_SZ(pPager);
39437 #endif
39440 ** If SQLITE_CHECK_PAGES is defined then we do some sanity checking
39441 ** on the cache using a hash function. This is used for testing
39442 ** and debugging only.
39444 #ifdef SQLITE_CHECK_PAGES
39446 ** Return a 32-bit hash of the page data for pPage.
39448 static u32 pager_datahash(int nByte, unsigned char *pData){
39449 u32 hash = 0;
39450 int i;
39451 for(i=0; i<nByte; i++){
39452 hash = (hash*1039) + pData[i];
39454 return hash;
39456 static u32 pager_pagehash(PgHdr *pPage){
39457 return pager_datahash(pPage->pPager->pageSize, (unsigned char *)pPage->pData);
39459 static void pager_set_pagehash(PgHdr *pPage){
39460 pPage->pageHash = pager_pagehash(pPage);
39464 ** The CHECK_PAGE macro takes a PgHdr* as an argument. If SQLITE_CHECK_PAGES
39465 ** is defined, and NDEBUG is not defined, an assert() statement checks
39466 ** that the page is either dirty or still matches the calculated page-hash.
39468 #define CHECK_PAGE(x) checkPage(x)
39469 static void checkPage(PgHdr *pPg){
39470 Pager *pPager = pPg->pPager;
39471 assert( pPager->eState!=PAGER_ERROR );
39472 assert( (pPg->flags&PGHDR_DIRTY) || pPg->pageHash==pager_pagehash(pPg) );
39475 #else
39476 #define pager_datahash(X,Y) 0
39477 #define pager_pagehash(X) 0
39478 #define pager_set_pagehash(X)
39479 #define CHECK_PAGE(x)
39480 #endif /* SQLITE_CHECK_PAGES */
39483 ** When this is called the journal file for pager pPager must be open.
39484 ** This function attempts to read a master journal file name from the
39485 ** end of the file and, if successful, copies it into memory supplied
39486 ** by the caller. See comments above writeMasterJournal() for the format
39487 ** used to store a master journal file name at the end of a journal file.
39489 ** zMaster must point to a buffer of at least nMaster bytes allocated by
39490 ** the caller. This should be sqlite3_vfs.mxPathname+1 (to ensure there is
39491 ** enough space to write the master journal name). If the master journal
39492 ** name in the journal is longer than nMaster bytes (including a
39493 ** nul-terminator), then this is handled as if no master journal name
39494 ** were present in the journal.
39496 ** If a master journal file name is present at the end of the journal
39497 ** file, then it is copied into the buffer pointed to by zMaster. A
39498 ** nul-terminator byte is appended to the buffer following the master
39499 ** journal file name.
39501 ** If it is determined that no master journal file name is present
39502 ** zMaster[0] is set to 0 and SQLITE_OK returned.
39504 ** If an error occurs while reading from the journal file, an SQLite
39505 ** error code is returned.
39507 static int readMasterJournal(sqlite3_file *pJrnl, char *zMaster, u32 nMaster){
39508 int rc; /* Return code */
39509 u32 len; /* Length in bytes of master journal name */
39510 i64 szJ; /* Total size in bytes of journal file pJrnl */
39511 u32 cksum; /* MJ checksum value read from journal */
39512 u32 u; /* Unsigned loop counter */
39513 unsigned char aMagic[8]; /* A buffer to hold the magic header */
39514 zMaster[0] = '\0';
39516 if( SQLITE_OK!=(rc = sqlite3OsFileSize(pJrnl, &szJ))
39517 || szJ<16
39518 || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-16, &len))
39519 || len>=nMaster
39520 || SQLITE_OK!=(rc = read32bits(pJrnl, szJ-12, &cksum))
39521 || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, aMagic, 8, szJ-8))
39522 || memcmp(aMagic, aJournalMagic, 8)
39523 || SQLITE_OK!=(rc = sqlite3OsRead(pJrnl, zMaster, len, szJ-16-len))
39525 return rc;
39528 /* See if the checksum matches the master journal name */
39529 for(u=0; u<len; u++){
39530 cksum -= zMaster[u];
39532 if( cksum ){
39533 /* If the checksum doesn't add up, then one or more of the disk sectors
39534 ** containing the master journal filename is corrupted. This means
39535 ** definitely roll back, so just return SQLITE_OK and report a (nul)
39536 ** master-journal filename.
39538 len = 0;
39540 zMaster[len] = '\0';
39542 return SQLITE_OK;
39546 ** Return the offset of the sector boundary at or immediately
39547 ** following the value in pPager->journalOff, assuming a sector
39548 ** size of pPager->sectorSize bytes.
39550 ** i.e for a sector size of 512:
39552 ** Pager.journalOff Return value
39553 ** ---------------------------------------
39554 ** 0 0
39555 ** 512 512
39556 ** 100 512
39557 ** 2000 2048
39560 static i64 journalHdrOffset(Pager *pPager){
39561 i64 offset = 0;
39562 i64 c = pPager->journalOff;
39563 if( c ){
39564 offset = ((c-1)/JOURNAL_HDR_SZ(pPager) + 1) * JOURNAL_HDR_SZ(pPager);
39566 assert( offset%JOURNAL_HDR_SZ(pPager)==0 );
39567 assert( offset>=c );
39568 assert( (offset-c)<JOURNAL_HDR_SZ(pPager) );
39569 return offset;
39573 ** The journal file must be open when this function is called.
39575 ** This function is a no-op if the journal file has not been written to
39576 ** within the current transaction (i.e. if Pager.journalOff==0).
39578 ** If doTruncate is non-zero or the Pager.journalSizeLimit variable is
39579 ** set to 0, then truncate the journal file to zero bytes in size. Otherwise,
39580 ** zero the 28-byte header at the start of the journal file. In either case,
39581 ** if the pager is not in no-sync mode, sync the journal file immediately
39582 ** after writing or truncating it.
39584 ** If Pager.journalSizeLimit is set to a positive, non-zero value, and
39585 ** following the truncation or zeroing described above the size of the
39586 ** journal file in bytes is larger than this value, then truncate the
39587 ** journal file to Pager.journalSizeLimit bytes. The journal file does
39588 ** not need to be synced following this operation.
39590 ** If an IO error occurs, abandon processing and return the IO error code.
39591 ** Otherwise, return SQLITE_OK.
39593 static int zeroJournalHdr(Pager *pPager, int doTruncate){
39594 int rc = SQLITE_OK; /* Return code */
39595 assert( isOpen(pPager->jfd) );
39596 if( pPager->journalOff ){
39597 const i64 iLimit = pPager->journalSizeLimit; /* Local cache of jsl */
39599 IOTRACE(("JZEROHDR %p\n", pPager))
39600 if( doTruncate || iLimit==0 ){
39601 rc = sqlite3OsTruncate(pPager->jfd, 0);
39602 }else{
39603 static const char zeroHdr[28] = {0};
39604 rc = sqlite3OsWrite(pPager->jfd, zeroHdr, sizeof(zeroHdr), 0);
39606 if( rc==SQLITE_OK && !pPager->noSync ){
39607 rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_DATAONLY|pPager->syncFlags);
39610 /* At this point the transaction is committed but the write lock
39611 ** is still held on the file. If there is a size limit configured for
39612 ** the persistent journal and the journal file currently consumes more
39613 ** space than that limit allows for, truncate it now. There is no need
39614 ** to sync the file following this operation.
39616 if( rc==SQLITE_OK && iLimit>0 ){
39617 i64 sz;
39618 rc = sqlite3OsFileSize(pPager->jfd, &sz);
39619 if( rc==SQLITE_OK && sz>iLimit ){
39620 rc = sqlite3OsTruncate(pPager->jfd, iLimit);
39624 return rc;
39628 ** The journal file must be open when this routine is called. A journal
39629 ** header (JOURNAL_HDR_SZ bytes) is written into the journal file at the
39630 ** current location.
39632 ** The format for the journal header is as follows:
39633 ** - 8 bytes: Magic identifying journal format.
39634 ** - 4 bytes: Number of records in journal, or -1 no-sync mode is on.
39635 ** - 4 bytes: Random number used for page hash.
39636 ** - 4 bytes: Initial database page count.
39637 ** - 4 bytes: Sector size used by the process that wrote this journal.
39638 ** - 4 bytes: Database page size.
39640 ** Followed by (JOURNAL_HDR_SZ - 28) bytes of unused space.
39642 static int writeJournalHdr(Pager *pPager){
39643 int rc = SQLITE_OK; /* Return code */
39644 char *zHeader = pPager->pTmpSpace; /* Temporary space used to build header */
39645 u32 nHeader = (u32)pPager->pageSize;/* Size of buffer pointed to by zHeader */
39646 u32 nWrite; /* Bytes of header sector written */
39647 int ii; /* Loop counter */
39649 assert( isOpen(pPager->jfd) ); /* Journal file must be open. */
39651 if( nHeader>JOURNAL_HDR_SZ(pPager) ){
39652 nHeader = JOURNAL_HDR_SZ(pPager);
39655 /* If there are active savepoints and any of them were created
39656 ** since the most recent journal header was written, update the
39657 ** PagerSavepoint.iHdrOffset fields now.
39659 for(ii=0; ii<pPager->nSavepoint; ii++){
39660 if( pPager->aSavepoint[ii].iHdrOffset==0 ){
39661 pPager->aSavepoint[ii].iHdrOffset = pPager->journalOff;
39665 pPager->journalHdr = pPager->journalOff = journalHdrOffset(pPager);
39668 ** Write the nRec Field - the number of page records that follow this
39669 ** journal header. Normally, zero is written to this value at this time.
39670 ** After the records are added to the journal (and the journal synced,
39671 ** if in full-sync mode), the zero is overwritten with the true number
39672 ** of records (see syncJournal()).
39674 ** A faster alternative is to write 0xFFFFFFFF to the nRec field. When
39675 ** reading the journal this value tells SQLite to assume that the
39676 ** rest of the journal file contains valid page records. This assumption
39677 ** is dangerous, as if a failure occurred whilst writing to the journal
39678 ** file it may contain some garbage data. There are two scenarios
39679 ** where this risk can be ignored:
39681 ** * When the pager is in no-sync mode. Corruption can follow a
39682 ** power failure in this case anyway.
39684 ** * When the SQLITE_IOCAP_SAFE_APPEND flag is set. This guarantees
39685 ** that garbage data is never appended to the journal file.
39687 assert( isOpen(pPager->fd) || pPager->noSync );
39688 if( pPager->noSync || (pPager->journalMode==PAGER_JOURNALMODE_MEMORY)
39689 || (sqlite3OsDeviceCharacteristics(pPager->fd)&SQLITE_IOCAP_SAFE_APPEND)
39691 memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
39692 put32bits(&zHeader[sizeof(aJournalMagic)], 0xffffffff);
39693 }else{
39694 memset(zHeader, 0, sizeof(aJournalMagic)+4);
39697 /* The random check-hash initialiser */
39698 sqlite3_randomness(sizeof(pPager->cksumInit), &pPager->cksumInit);
39699 put32bits(&zHeader[sizeof(aJournalMagic)+4], pPager->cksumInit);
39700 /* The initial database size */
39701 put32bits(&zHeader[sizeof(aJournalMagic)+8], pPager->dbOrigSize);
39702 /* The assumed sector size for this process */
39703 put32bits(&zHeader[sizeof(aJournalMagic)+12], pPager->sectorSize);
39705 /* The page size */
39706 put32bits(&zHeader[sizeof(aJournalMagic)+16], pPager->pageSize);
39708 /* Initializing the tail of the buffer is not necessary. Everything
39709 ** works find if the following memset() is omitted. But initializing
39710 ** the memory prevents valgrind from complaining, so we are willing to
39711 ** take the performance hit.
39713 memset(&zHeader[sizeof(aJournalMagic)+20], 0,
39714 nHeader-(sizeof(aJournalMagic)+20));
39716 /* In theory, it is only necessary to write the 28 bytes that the
39717 ** journal header consumes to the journal file here. Then increment the
39718 ** Pager.journalOff variable by JOURNAL_HDR_SZ so that the next
39719 ** record is written to the following sector (leaving a gap in the file
39720 ** that will be implicitly filled in by the OS).
39722 ** However it has been discovered that on some systems this pattern can
39723 ** be significantly slower than contiguously writing data to the file,
39724 ** even if that means explicitly writing data to the block of
39725 ** (JOURNAL_HDR_SZ - 28) bytes that will not be used. So that is what
39726 ** is done.
39728 ** The loop is required here in case the sector-size is larger than the
39729 ** database page size. Since the zHeader buffer is only Pager.pageSize
39730 ** bytes in size, more than one call to sqlite3OsWrite() may be required
39731 ** to populate the entire journal header sector.
39733 for(nWrite=0; rc==SQLITE_OK&&nWrite<JOURNAL_HDR_SZ(pPager); nWrite+=nHeader){
39734 IOTRACE(("JHDR %p %lld %d\n", pPager, pPager->journalHdr, nHeader))
39735 rc = sqlite3OsWrite(pPager->jfd, zHeader, nHeader, pPager->journalOff);
39736 assert( pPager->journalHdr <= pPager->journalOff );
39737 pPager->journalOff += nHeader;
39740 return rc;
39744 ** The journal file must be open when this is called. A journal header file
39745 ** (JOURNAL_HDR_SZ bytes) is read from the current location in the journal
39746 ** file. The current location in the journal file is given by
39747 ** pPager->journalOff. See comments above function writeJournalHdr() for
39748 ** a description of the journal header format.
39750 ** If the header is read successfully, *pNRec is set to the number of
39751 ** page records following this header and *pDbSize is set to the size of the
39752 ** database before the transaction began, in pages. Also, pPager->cksumInit
39753 ** is set to the value read from the journal header. SQLITE_OK is returned
39754 ** in this case.
39756 ** If the journal header file appears to be corrupted, SQLITE_DONE is
39757 ** returned and *pNRec and *PDbSize are undefined. If JOURNAL_HDR_SZ bytes
39758 ** cannot be read from the journal file an error code is returned.
39760 static int readJournalHdr(
39761 Pager *pPager, /* Pager object */
39762 int isHot,
39763 i64 journalSize, /* Size of the open journal file in bytes */
39764 u32 *pNRec, /* OUT: Value read from the nRec field */
39765 u32 *pDbSize /* OUT: Value of original database size field */
39767 int rc; /* Return code */
39768 unsigned char aMagic[8]; /* A buffer to hold the magic header */
39769 i64 iHdrOff; /* Offset of journal header being read */
39771 assert( isOpen(pPager->jfd) ); /* Journal file must be open. */
39773 /* Advance Pager.journalOff to the start of the next sector. If the
39774 ** journal file is too small for there to be a header stored at this
39775 ** point, return SQLITE_DONE.
39777 pPager->journalOff = journalHdrOffset(pPager);
39778 if( pPager->journalOff+JOURNAL_HDR_SZ(pPager) > journalSize ){
39779 return SQLITE_DONE;
39781 iHdrOff = pPager->journalOff;
39783 /* Read in the first 8 bytes of the journal header. If they do not match
39784 ** the magic string found at the start of each journal header, return
39785 ** SQLITE_DONE. If an IO error occurs, return an error code. Otherwise,
39786 ** proceed.
39788 if( isHot || iHdrOff!=pPager->journalHdr ){
39789 rc = sqlite3OsRead(pPager->jfd, aMagic, sizeof(aMagic), iHdrOff);
39790 if( rc ){
39791 return rc;
39793 if( memcmp(aMagic, aJournalMagic, sizeof(aMagic))!=0 ){
39794 return SQLITE_DONE;
39798 /* Read the first three 32-bit fields of the journal header: The nRec
39799 ** field, the checksum-initializer and the database size at the start
39800 ** of the transaction. Return an error code if anything goes wrong.
39802 if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+8, pNRec))
39803 || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+12, &pPager->cksumInit))
39804 || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+16, pDbSize))
39806 return rc;
39809 if( pPager->journalOff==0 ){
39810 u32 iPageSize; /* Page-size field of journal header */
39811 u32 iSectorSize; /* Sector-size field of journal header */
39813 /* Read the page-size and sector-size journal header fields. */
39814 if( SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+20, &iSectorSize))
39815 || SQLITE_OK!=(rc = read32bits(pPager->jfd, iHdrOff+24, &iPageSize))
39817 return rc;
39820 /* Versions of SQLite prior to 3.5.8 set the page-size field of the
39821 ** journal header to zero. In this case, assume that the Pager.pageSize
39822 ** variable is already set to the correct page size.
39824 if( iPageSize==0 ){
39825 iPageSize = pPager->pageSize;
39828 /* Check that the values read from the page-size and sector-size fields
39829 ** are within range. To be 'in range', both values need to be a power
39830 ** of two greater than or equal to 512 or 32, and not greater than their
39831 ** respective compile time maximum limits.
39833 if( iPageSize<512 || iSectorSize<32
39834 || iPageSize>SQLITE_MAX_PAGE_SIZE || iSectorSize>MAX_SECTOR_SIZE
39835 || ((iPageSize-1)&iPageSize)!=0 || ((iSectorSize-1)&iSectorSize)!=0
39837 /* If the either the page-size or sector-size in the journal-header is
39838 ** invalid, then the process that wrote the journal-header must have
39839 ** crashed before the header was synced. In this case stop reading
39840 ** the journal file here.
39842 return SQLITE_DONE;
39845 /* Update the page-size to match the value read from the journal.
39846 ** Use a testcase() macro to make sure that malloc failure within
39847 ** PagerSetPagesize() is tested.
39849 rc = sqlite3PagerSetPagesize(pPager, &iPageSize, -1);
39850 testcase( rc!=SQLITE_OK );
39852 /* Update the assumed sector-size to match the value used by
39853 ** the process that created this journal. If this journal was
39854 ** created by a process other than this one, then this routine
39855 ** is being called from within pager_playback(). The local value
39856 ** of Pager.sectorSize is restored at the end of that routine.
39858 pPager->sectorSize = iSectorSize;
39861 pPager->journalOff += JOURNAL_HDR_SZ(pPager);
39862 return rc;
39867 ** Write the supplied master journal name into the journal file for pager
39868 ** pPager at the current location. The master journal name must be the last
39869 ** thing written to a journal file. If the pager is in full-sync mode, the
39870 ** journal file descriptor is advanced to the next sector boundary before
39871 ** anything is written. The format is:
39873 ** + 4 bytes: PAGER_MJ_PGNO.
39874 ** + N bytes: Master journal filename in utf-8.
39875 ** + 4 bytes: N (length of master journal name in bytes, no nul-terminator).
39876 ** + 4 bytes: Master journal name checksum.
39877 ** + 8 bytes: aJournalMagic[].
39879 ** The master journal page checksum is the sum of the bytes in the master
39880 ** journal name, where each byte is interpreted as a signed 8-bit integer.
39882 ** If zMaster is a NULL pointer (occurs for a single database transaction),
39883 ** this call is a no-op.
39885 static int writeMasterJournal(Pager *pPager, const char *zMaster){
39886 int rc; /* Return code */
39887 int nMaster; /* Length of string zMaster */
39888 i64 iHdrOff; /* Offset of header in journal file */
39889 i64 jrnlSize; /* Size of journal file on disk */
39890 u32 cksum = 0; /* Checksum of string zMaster */
39892 assert( pPager->setMaster==0 );
39893 assert( !pagerUseWal(pPager) );
39895 if( !zMaster
39896 || pPager->journalMode==PAGER_JOURNALMODE_MEMORY
39897 || pPager->journalMode==PAGER_JOURNALMODE_OFF
39899 return SQLITE_OK;
39901 pPager->setMaster = 1;
39902 assert( isOpen(pPager->jfd) );
39903 assert( pPager->journalHdr <= pPager->journalOff );
39905 /* Calculate the length in bytes and the checksum of zMaster */
39906 for(nMaster=0; zMaster[nMaster]; nMaster++){
39907 cksum += zMaster[nMaster];
39910 /* If in full-sync mode, advance to the next disk sector before writing
39911 ** the master journal name. This is in case the previous page written to
39912 ** the journal has already been synced.
39914 if( pPager->fullSync ){
39915 pPager->journalOff = journalHdrOffset(pPager);
39917 iHdrOff = pPager->journalOff;
39919 /* Write the master journal data to the end of the journal file. If
39920 ** an error occurs, return the error code to the caller.
39922 if( (0 != (rc = write32bits(pPager->jfd, iHdrOff, PAGER_MJ_PGNO(pPager))))
39923 || (0 != (rc = sqlite3OsWrite(pPager->jfd, zMaster, nMaster, iHdrOff+4)))
39924 || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster, nMaster)))
39925 || (0 != (rc = write32bits(pPager->jfd, iHdrOff+4+nMaster+4, cksum)))
39926 || (0 != (rc = sqlite3OsWrite(pPager->jfd, aJournalMagic, 8, iHdrOff+4+nMaster+8)))
39928 return rc;
39930 pPager->journalOff += (nMaster+20);
39932 /* If the pager is in peristent-journal mode, then the physical
39933 ** journal-file may extend past the end of the master-journal name
39934 ** and 8 bytes of magic data just written to the file. This is
39935 ** dangerous because the code to rollback a hot-journal file
39936 ** will not be able to find the master-journal name to determine
39937 ** whether or not the journal is hot.
39939 ** Easiest thing to do in this scenario is to truncate the journal
39940 ** file to the required size.
39942 if( SQLITE_OK==(rc = sqlite3OsFileSize(pPager->jfd, &jrnlSize))
39943 && jrnlSize>pPager->journalOff
39945 rc = sqlite3OsTruncate(pPager->jfd, pPager->journalOff);
39947 return rc;
39951 ** Find a page in the hash table given its page number. Return
39952 ** a pointer to the page or NULL if the requested page is not
39953 ** already in memory.
39955 static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){
39956 PgHdr *p; /* Return value */
39958 /* It is not possible for a call to PcacheFetch() with createFlag==0 to
39959 ** fail, since no attempt to allocate dynamic memory will be made.
39961 (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &p);
39962 return p;
39966 ** Discard the entire contents of the in-memory page-cache.
39968 static void pager_reset(Pager *pPager){
39969 sqlite3BackupRestart(pPager->pBackup);
39970 sqlite3PcacheClear(pPager->pPCache);
39974 ** Free all structures in the Pager.aSavepoint[] array and set both
39975 ** Pager.aSavepoint and Pager.nSavepoint to zero. Close the sub-journal
39976 ** if it is open and the pager is not in exclusive mode.
39978 static void releaseAllSavepoints(Pager *pPager){
39979 int ii; /* Iterator for looping through Pager.aSavepoint */
39980 for(ii=0; ii<pPager->nSavepoint; ii++){
39981 sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
39983 if( !pPager->exclusiveMode || sqlite3IsMemJournal(pPager->sjfd) ){
39984 sqlite3OsClose(pPager->sjfd);
39986 sqlite3_free(pPager->aSavepoint);
39987 pPager->aSavepoint = 0;
39988 pPager->nSavepoint = 0;
39989 pPager->nSubRec = 0;
39993 ** Set the bit number pgno in the PagerSavepoint.pInSavepoint
39994 ** bitvecs of all open savepoints. Return SQLITE_OK if successful
39995 ** or SQLITE_NOMEM if a malloc failure occurs.
39997 static int addToSavepointBitvecs(Pager *pPager, Pgno pgno){
39998 int ii; /* Loop counter */
39999 int rc = SQLITE_OK; /* Result code */
40001 for(ii=0; ii<pPager->nSavepoint; ii++){
40002 PagerSavepoint *p = &pPager->aSavepoint[ii];
40003 if( pgno<=p->nOrig ){
40004 rc |= sqlite3BitvecSet(p->pInSavepoint, pgno);
40005 testcase( rc==SQLITE_NOMEM );
40006 assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
40009 return rc;
40013 ** This function is a no-op if the pager is in exclusive mode and not
40014 ** in the ERROR state. Otherwise, it switches the pager to PAGER_OPEN
40015 ** state.
40017 ** If the pager is not in exclusive-access mode, the database file is
40018 ** completely unlocked. If the file is unlocked and the file-system does
40019 ** not exhibit the UNDELETABLE_WHEN_OPEN property, the journal file is
40020 ** closed (if it is open).
40022 ** If the pager is in ERROR state when this function is called, the
40023 ** contents of the pager cache are discarded before switching back to
40024 ** the OPEN state. Regardless of whether the pager is in exclusive-mode
40025 ** or not, any journal file left in the file-system will be treated
40026 ** as a hot-journal and rolled back the next time a read-transaction
40027 ** is opened (by this or by any other connection).
40029 static void pager_unlock(Pager *pPager){
40031 assert( pPager->eState==PAGER_READER
40032 || pPager->eState==PAGER_OPEN
40033 || pPager->eState==PAGER_ERROR
40036 sqlite3BitvecDestroy(pPager->pInJournal);
40037 pPager->pInJournal = 0;
40038 releaseAllSavepoints(pPager);
40040 if( pagerUseWal(pPager) ){
40041 assert( !isOpen(pPager->jfd) );
40042 sqlite3WalEndReadTransaction(pPager->pWal);
40043 pPager->eState = PAGER_OPEN;
40044 }else if( !pPager->exclusiveMode ){
40045 int rc; /* Error code returned by pagerUnlockDb() */
40046 int iDc = isOpen(pPager->fd)?sqlite3OsDeviceCharacteristics(pPager->fd):0;
40048 /* If the operating system support deletion of open files, then
40049 ** close the journal file when dropping the database lock. Otherwise
40050 ** another connection with journal_mode=delete might delete the file
40051 ** out from under us.
40053 assert( (PAGER_JOURNALMODE_MEMORY & 5)!=1 );
40054 assert( (PAGER_JOURNALMODE_OFF & 5)!=1 );
40055 assert( (PAGER_JOURNALMODE_WAL & 5)!=1 );
40056 assert( (PAGER_JOURNALMODE_DELETE & 5)!=1 );
40057 assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
40058 assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 );
40059 if( 0==(iDc & SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN)
40060 || 1!=(pPager->journalMode & 5)
40062 sqlite3OsClose(pPager->jfd);
40065 /* If the pager is in the ERROR state and the call to unlock the database
40066 ** file fails, set the current lock to UNKNOWN_LOCK. See the comment
40067 ** above the #define for UNKNOWN_LOCK for an explanation of why this
40068 ** is necessary.
40070 rc = pagerUnlockDb(pPager, NO_LOCK);
40071 if( rc!=SQLITE_OK && pPager->eState==PAGER_ERROR ){
40072 pPager->eLock = UNKNOWN_LOCK;
40075 /* The pager state may be changed from PAGER_ERROR to PAGER_OPEN here
40076 ** without clearing the error code. This is intentional - the error
40077 ** code is cleared and the cache reset in the block below.
40079 assert( pPager->errCode || pPager->eState!=PAGER_ERROR );
40080 pPager->changeCountDone = 0;
40081 pPager->eState = PAGER_OPEN;
40084 /* If Pager.errCode is set, the contents of the pager cache cannot be
40085 ** trusted. Now that there are no outstanding references to the pager,
40086 ** it can safely move back to PAGER_OPEN state. This happens in both
40087 ** normal and exclusive-locking mode.
40089 if( pPager->errCode ){
40090 assert( !MEMDB );
40091 pager_reset(pPager);
40092 pPager->changeCountDone = pPager->tempFile;
40093 pPager->eState = PAGER_OPEN;
40094 pPager->errCode = SQLITE_OK;
40097 pPager->journalOff = 0;
40098 pPager->journalHdr = 0;
40099 pPager->setMaster = 0;
40103 ** This function is called whenever an IOERR or FULL error that requires
40104 ** the pager to transition into the ERROR state may ahve occurred.
40105 ** The first argument is a pointer to the pager structure, the second
40106 ** the error-code about to be returned by a pager API function. The
40107 ** value returned is a copy of the second argument to this function.
40109 ** If the second argument is SQLITE_FULL, SQLITE_IOERR or one of the
40110 ** IOERR sub-codes, the pager enters the ERROR state and the error code
40111 ** is stored in Pager.errCode. While the pager remains in the ERROR state,
40112 ** all major API calls on the Pager will immediately return Pager.errCode.
40114 ** The ERROR state indicates that the contents of the pager-cache
40115 ** cannot be trusted. This state can be cleared by completely discarding
40116 ** the contents of the pager-cache. If a transaction was active when
40117 ** the persistent error occurred, then the rollback journal may need
40118 ** to be replayed to restore the contents of the database file (as if
40119 ** it were a hot-journal).
40121 static int pager_error(Pager *pPager, int rc){
40122 int rc2 = rc & 0xff;
40123 assert( rc==SQLITE_OK || !MEMDB );
40124 assert(
40125 pPager->errCode==SQLITE_FULL ||
40126 pPager->errCode==SQLITE_OK ||
40127 (pPager->errCode & 0xff)==SQLITE_IOERR
40129 if( rc2==SQLITE_FULL || rc2==SQLITE_IOERR ){
40130 pPager->errCode = rc;
40131 pPager->eState = PAGER_ERROR;
40133 return rc;
40137 ** This routine ends a transaction. A transaction is usually ended by
40138 ** either a COMMIT or a ROLLBACK operation. This routine may be called
40139 ** after rollback of a hot-journal, or if an error occurs while opening
40140 ** the journal file or writing the very first journal-header of a
40141 ** database transaction.
40143 ** This routine is never called in PAGER_ERROR state. If it is called
40144 ** in PAGER_NONE or PAGER_SHARED state and the lock held is less
40145 ** exclusive than a RESERVED lock, it is a no-op.
40147 ** Otherwise, any active savepoints are released.
40149 ** If the journal file is open, then it is "finalized". Once a journal
40150 ** file has been finalized it is not possible to use it to roll back a
40151 ** transaction. Nor will it be considered to be a hot-journal by this
40152 ** or any other database connection. Exactly how a journal is finalized
40153 ** depends on whether or not the pager is running in exclusive mode and
40154 ** the current journal-mode (Pager.journalMode value), as follows:
40156 ** journalMode==MEMORY
40157 ** Journal file descriptor is simply closed. This destroys an
40158 ** in-memory journal.
40160 ** journalMode==TRUNCATE
40161 ** Journal file is truncated to zero bytes in size.
40163 ** journalMode==PERSIST
40164 ** The first 28 bytes of the journal file are zeroed. This invalidates
40165 ** the first journal header in the file, and hence the entire journal
40166 ** file. An invalid journal file cannot be rolled back.
40168 ** journalMode==DELETE
40169 ** The journal file is closed and deleted using sqlite3OsDelete().
40171 ** If the pager is running in exclusive mode, this method of finalizing
40172 ** the journal file is never used. Instead, if the journalMode is
40173 ** DELETE and the pager is in exclusive mode, the method described under
40174 ** journalMode==PERSIST is used instead.
40176 ** After the journal is finalized, the pager moves to PAGER_READER state.
40177 ** If running in non-exclusive rollback mode, the lock on the file is
40178 ** downgraded to a SHARED_LOCK.
40180 ** SQLITE_OK is returned if no error occurs. If an error occurs during
40181 ** any of the IO operations to finalize the journal file or unlock the
40182 ** database then the IO error code is returned to the user. If the
40183 ** operation to finalize the journal file fails, then the code still
40184 ** tries to unlock the database file if not in exclusive mode. If the
40185 ** unlock operation fails as well, then the first error code related
40186 ** to the first error encountered (the journal finalization one) is
40187 ** returned.
40189 static int pager_end_transaction(Pager *pPager, int hasMaster){
40190 int rc = SQLITE_OK; /* Error code from journal finalization operation */
40191 int rc2 = SQLITE_OK; /* Error code from db file unlock operation */
40193 /* Do nothing if the pager does not have an open write transaction
40194 ** or at least a RESERVED lock. This function may be called when there
40195 ** is no write-transaction active but a RESERVED or greater lock is
40196 ** held under two circumstances:
40198 ** 1. After a successful hot-journal rollback, it is called with
40199 ** eState==PAGER_NONE and eLock==EXCLUSIVE_LOCK.
40201 ** 2. If a connection with locking_mode=exclusive holding an EXCLUSIVE
40202 ** lock switches back to locking_mode=normal and then executes a
40203 ** read-transaction, this function is called with eState==PAGER_READER
40204 ** and eLock==EXCLUSIVE_LOCK when the read-transaction is closed.
40206 assert( assert_pager_state(pPager) );
40207 assert( pPager->eState!=PAGER_ERROR );
40208 if( pPager->eState<PAGER_WRITER_LOCKED && pPager->eLock<RESERVED_LOCK ){
40209 return SQLITE_OK;
40212 releaseAllSavepoints(pPager);
40213 assert( isOpen(pPager->jfd) || pPager->pInJournal==0 );
40214 if( isOpen(pPager->jfd) ){
40215 assert( !pagerUseWal(pPager) );
40217 /* Finalize the journal file. */
40218 if( sqlite3IsMemJournal(pPager->jfd) ){
40219 assert( pPager->journalMode==PAGER_JOURNALMODE_MEMORY );
40220 sqlite3OsClose(pPager->jfd);
40221 }else if( pPager->journalMode==PAGER_JOURNALMODE_TRUNCATE ){
40222 if( pPager->journalOff==0 ){
40223 rc = SQLITE_OK;
40224 }else{
40225 rc = sqlite3OsTruncate(pPager->jfd, 0);
40227 pPager->journalOff = 0;
40228 }else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST
40229 || (pPager->exclusiveMode && pPager->journalMode!=PAGER_JOURNALMODE_WAL)
40231 rc = zeroJournalHdr(pPager, hasMaster);
40232 pPager->journalOff = 0;
40233 }else{
40234 /* This branch may be executed with Pager.journalMode==MEMORY if
40235 ** a hot-journal was just rolled back. In this case the journal
40236 ** file should be closed and deleted. If this connection writes to
40237 ** the database file, it will do so using an in-memory journal.
40239 assert( pPager->journalMode==PAGER_JOURNALMODE_DELETE
40240 || pPager->journalMode==PAGER_JOURNALMODE_MEMORY
40241 || pPager->journalMode==PAGER_JOURNALMODE_WAL
40243 sqlite3OsClose(pPager->jfd);
40244 if( !pPager->tempFile ){
40245 rc = sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
40250 #ifdef SQLITE_CHECK_PAGES
40251 sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash);
40252 if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){
40253 PgHdr *p = pager_lookup(pPager, 1);
40254 if( p ){
40255 p->pageHash = 0;
40256 sqlite3PagerUnref(p);
40259 #endif
40261 sqlite3BitvecDestroy(pPager->pInJournal);
40262 pPager->pInJournal = 0;
40263 pPager->nRec = 0;
40264 sqlite3PcacheCleanAll(pPager->pPCache);
40265 sqlite3PcacheTruncate(pPager->pPCache, pPager->dbSize);
40267 if( pagerUseWal(pPager) ){
40268 /* Drop the WAL write-lock, if any. Also, if the connection was in
40269 ** locking_mode=exclusive mode but is no longer, drop the EXCLUSIVE
40270 ** lock held on the database file.
40272 rc2 = sqlite3WalEndWriteTransaction(pPager->pWal);
40273 assert( rc2==SQLITE_OK );
40275 if( !pPager->exclusiveMode
40276 && (!pagerUseWal(pPager) || sqlite3WalExclusiveMode(pPager->pWal, 0))
40278 rc2 = pagerUnlockDb(pPager, SHARED_LOCK);
40279 pPager->changeCountDone = 0;
40281 pPager->eState = PAGER_READER;
40282 pPager->setMaster = 0;
40284 return (rc==SQLITE_OK?rc2:rc);
40288 ** Execute a rollback if a transaction is active and unlock the
40289 ** database file.
40291 ** If the pager has already entered the ERROR state, do not attempt
40292 ** the rollback at this time. Instead, pager_unlock() is called. The
40293 ** call to pager_unlock() will discard all in-memory pages, unlock
40294 ** the database file and move the pager back to OPEN state. If this
40295 ** means that there is a hot-journal left in the file-system, the next
40296 ** connection to obtain a shared lock on the pager (which may be this one)
40297 ** will roll it back.
40299 ** If the pager has not already entered the ERROR state, but an IO or
40300 ** malloc error occurs during a rollback, then this will itself cause
40301 ** the pager to enter the ERROR state. Which will be cleared by the
40302 ** call to pager_unlock(), as described above.
40304 static void pagerUnlockAndRollback(Pager *pPager){
40305 if( pPager->eState!=PAGER_ERROR && pPager->eState!=PAGER_OPEN ){
40306 assert( assert_pager_state(pPager) );
40307 if( pPager->eState>=PAGER_WRITER_LOCKED ){
40308 sqlite3BeginBenignMalloc();
40309 sqlite3PagerRollback(pPager);
40310 sqlite3EndBenignMalloc();
40311 }else if( !pPager->exclusiveMode ){
40312 assert( pPager->eState==PAGER_READER );
40313 pager_end_transaction(pPager, 0);
40316 pager_unlock(pPager);
40320 ** Parameter aData must point to a buffer of pPager->pageSize bytes
40321 ** of data. Compute and return a checksum based ont the contents of the
40322 ** page of data and the current value of pPager->cksumInit.
40324 ** This is not a real checksum. It is really just the sum of the
40325 ** random initial value (pPager->cksumInit) and every 200th byte
40326 ** of the page data, starting with byte offset (pPager->pageSize%200).
40327 ** Each byte is interpreted as an 8-bit unsigned integer.
40329 ** Changing the formula used to compute this checksum results in an
40330 ** incompatible journal file format.
40332 ** If journal corruption occurs due to a power failure, the most likely
40333 ** scenario is that one end or the other of the record will be changed.
40334 ** It is much less likely that the two ends of the journal record will be
40335 ** correct and the middle be corrupt. Thus, this "checksum" scheme,
40336 ** though fast and simple, catches the mostly likely kind of corruption.
40338 static u32 pager_cksum(Pager *pPager, const u8 *aData){
40339 u32 cksum = pPager->cksumInit; /* Checksum value to return */
40340 int i = pPager->pageSize-200; /* Loop counter */
40341 while( i>0 ){
40342 cksum += aData[i];
40343 i -= 200;
40345 return cksum;
40349 ** Report the current page size and number of reserved bytes back
40350 ** to the codec.
40352 #ifdef SQLITE_HAS_CODEC
40353 static void pagerReportSize(Pager *pPager){
40354 if( pPager->xCodecSizeChng ){
40355 pPager->xCodecSizeChng(pPager->pCodec, pPager->pageSize,
40356 (int)pPager->nReserve);
40359 #else
40360 # define pagerReportSize(X) /* No-op if we do not support a codec */
40361 #endif
40364 ** Read a single page from either the journal file (if isMainJrnl==1) or
40365 ** from the sub-journal (if isMainJrnl==0) and playback that page.
40366 ** The page begins at offset *pOffset into the file. The *pOffset
40367 ** value is increased to the start of the next page in the journal.
40369 ** The main rollback journal uses checksums - the statement journal does
40370 ** not.
40372 ** If the page number of the page record read from the (sub-)journal file
40373 ** is greater than the current value of Pager.dbSize, then playback is
40374 ** skipped and SQLITE_OK is returned.
40376 ** If pDone is not NULL, then it is a record of pages that have already
40377 ** been played back. If the page at *pOffset has already been played back
40378 ** (if the corresponding pDone bit is set) then skip the playback.
40379 ** Make sure the pDone bit corresponding to the *pOffset page is set
40380 ** prior to returning.
40382 ** If the page record is successfully read from the (sub-)journal file
40383 ** and played back, then SQLITE_OK is returned. If an IO error occurs
40384 ** while reading the record from the (sub-)journal file or while writing
40385 ** to the database file, then the IO error code is returned. If data
40386 ** is successfully read from the (sub-)journal file but appears to be
40387 ** corrupted, SQLITE_DONE is returned. Data is considered corrupted in
40388 ** two circumstances:
40390 ** * If the record page-number is illegal (0 or PAGER_MJ_PGNO), or
40391 ** * If the record is being rolled back from the main journal file
40392 ** and the checksum field does not match the record content.
40394 ** Neither of these two scenarios are possible during a savepoint rollback.
40396 ** If this is a savepoint rollback, then memory may have to be dynamically
40397 ** allocated by this function. If this is the case and an allocation fails,
40398 ** SQLITE_NOMEM is returned.
40400 static int pager_playback_one_page(
40401 Pager *pPager, /* The pager being played back */
40402 i64 *pOffset, /* Offset of record to playback */
40403 Bitvec *pDone, /* Bitvec of pages already played back */
40404 int isMainJrnl, /* 1 -> main journal. 0 -> sub-journal. */
40405 int isSavepnt /* True for a savepoint rollback */
40407 int rc;
40408 PgHdr *pPg; /* An existing page in the cache */
40409 Pgno pgno; /* The page number of a page in journal */
40410 u32 cksum; /* Checksum used for sanity checking */
40411 char *aData; /* Temporary storage for the page */
40412 sqlite3_file *jfd; /* The file descriptor for the journal file */
40413 int isSynced; /* True if journal page is synced */
40415 assert( (isMainJrnl&~1)==0 ); /* isMainJrnl is 0 or 1 */
40416 assert( (isSavepnt&~1)==0 ); /* isSavepnt is 0 or 1 */
40417 assert( isMainJrnl || pDone ); /* pDone always used on sub-journals */
40418 assert( isSavepnt || pDone==0 ); /* pDone never used on non-savepoint */
40420 aData = pPager->pTmpSpace;
40421 assert( aData ); /* Temp storage must have already been allocated */
40422 assert( pagerUseWal(pPager)==0 || (!isMainJrnl && isSavepnt) );
40424 /* Either the state is greater than PAGER_WRITER_CACHEMOD (a transaction
40425 ** or savepoint rollback done at the request of the caller) or this is
40426 ** a hot-journal rollback. If it is a hot-journal rollback, the pager
40427 ** is in state OPEN and holds an EXCLUSIVE lock. Hot-journal rollback
40428 ** only reads from the main journal, not the sub-journal.
40430 assert( pPager->eState>=PAGER_WRITER_CACHEMOD
40431 || (pPager->eState==PAGER_OPEN && pPager->eLock==EXCLUSIVE_LOCK)
40433 assert( pPager->eState>=PAGER_WRITER_CACHEMOD || isMainJrnl );
40435 /* Read the page number and page data from the journal or sub-journal
40436 ** file. Return an error code to the caller if an IO error occurs.
40438 jfd = isMainJrnl ? pPager->jfd : pPager->sjfd;
40439 rc = read32bits(jfd, *pOffset, &pgno);
40440 if( rc!=SQLITE_OK ) return rc;
40441 rc = sqlite3OsRead(jfd, (u8*)aData, pPager->pageSize, (*pOffset)+4);
40442 if( rc!=SQLITE_OK ) return rc;
40443 *pOffset += pPager->pageSize + 4 + isMainJrnl*4;
40445 /* Sanity checking on the page. This is more important that I originally
40446 ** thought. If a power failure occurs while the journal is being written,
40447 ** it could cause invalid data to be written into the journal. We need to
40448 ** detect this invalid data (with high probability) and ignore it.
40450 if( pgno==0 || pgno==PAGER_MJ_PGNO(pPager) ){
40451 assert( !isSavepnt );
40452 return SQLITE_DONE;
40454 if( pgno>(Pgno)pPager->dbSize || sqlite3BitvecTest(pDone, pgno) ){
40455 return SQLITE_OK;
40457 if( isMainJrnl ){
40458 rc = read32bits(jfd, (*pOffset)-4, &cksum);
40459 if( rc ) return rc;
40460 if( !isSavepnt && pager_cksum(pPager, (u8*)aData)!=cksum ){
40461 return SQLITE_DONE;
40465 /* If this page has already been played by before during the current
40466 ** rollback, then don't bother to play it back again.
40468 if( pDone && (rc = sqlite3BitvecSet(pDone, pgno))!=SQLITE_OK ){
40469 return rc;
40472 /* When playing back page 1, restore the nReserve setting
40474 if( pgno==1 && pPager->nReserve!=((u8*)aData)[20] ){
40475 pPager->nReserve = ((u8*)aData)[20];
40476 pagerReportSize(pPager);
40479 /* If the pager is in CACHEMOD state, then there must be a copy of this
40480 ** page in the pager cache. In this case just update the pager cache,
40481 ** not the database file. The page is left marked dirty in this case.
40483 ** An exception to the above rule: If the database is in no-sync mode
40484 ** and a page is moved during an incremental vacuum then the page may
40485 ** not be in the pager cache. Later: if a malloc() or IO error occurs
40486 ** during a Movepage() call, then the page may not be in the cache
40487 ** either. So the condition described in the above paragraph is not
40488 ** assert()able.
40490 ** If in WRITER_DBMOD, WRITER_FINISHED or OPEN state, then we update the
40491 ** pager cache if it exists and the main file. The page is then marked
40492 ** not dirty. Since this code is only executed in PAGER_OPEN state for
40493 ** a hot-journal rollback, it is guaranteed that the page-cache is empty
40494 ** if the pager is in OPEN state.
40496 ** Ticket #1171: The statement journal might contain page content that is
40497 ** different from the page content at the start of the transaction.
40498 ** This occurs when a page is changed prior to the start of a statement
40499 ** then changed again within the statement. When rolling back such a
40500 ** statement we must not write to the original database unless we know
40501 ** for certain that original page contents are synced into the main rollback
40502 ** journal. Otherwise, a power loss might leave modified data in the
40503 ** database file without an entry in the rollback journal that can
40504 ** restore the database to its original form. Two conditions must be
40505 ** met before writing to the database files. (1) the database must be
40506 ** locked. (2) we know that the original page content is fully synced
40507 ** in the main journal either because the page is not in cache or else
40508 ** the page is marked as needSync==0.
40510 ** 2008-04-14: When attempting to vacuum a corrupt database file, it
40511 ** is possible to fail a statement on a database that does not yet exist.
40512 ** Do not attempt to write if database file has never been opened.
40514 if( pagerUseWal(pPager) ){
40515 pPg = 0;
40516 }else{
40517 pPg = pager_lookup(pPager, pgno);
40519 assert( pPg || !MEMDB );
40520 assert( pPager->eState!=PAGER_OPEN || pPg==0 );
40521 PAGERTRACE(("PLAYBACK %d page %d hash(%08x) %s\n",
40522 PAGERID(pPager), pgno, pager_datahash(pPager->pageSize, (u8*)aData),
40523 (isMainJrnl?"main-journal":"sub-journal")
40525 if( isMainJrnl ){
40526 isSynced = pPager->noSync || (*pOffset <= pPager->journalHdr);
40527 }else{
40528 isSynced = (pPg==0 || 0==(pPg->flags & PGHDR_NEED_SYNC));
40530 if( isOpen(pPager->fd)
40531 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
40532 && isSynced
40534 i64 ofst = (pgno-1)*(i64)pPager->pageSize;
40535 testcase( !isSavepnt && pPg!=0 && (pPg->flags&PGHDR_NEED_SYNC)!=0 );
40536 assert( !pagerUseWal(pPager) );
40537 rc = sqlite3OsWrite(pPager->fd, (u8*)aData, pPager->pageSize, ofst);
40538 if( pgno>pPager->dbFileSize ){
40539 pPager->dbFileSize = pgno;
40541 if( pPager->pBackup ){
40542 CODEC1(pPager, aData, pgno, 3, rc=SQLITE_NOMEM);
40543 sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)aData);
40544 CODEC2(pPager, aData, pgno, 7, rc=SQLITE_NOMEM, aData);
40546 }else if( !isMainJrnl && pPg==0 ){
40547 /* If this is a rollback of a savepoint and data was not written to
40548 ** the database and the page is not in-memory, there is a potential
40549 ** problem. When the page is next fetched by the b-tree layer, it
40550 ** will be read from the database file, which may or may not be
40551 ** current.
40553 ** There are a couple of different ways this can happen. All are quite
40554 ** obscure. When running in synchronous mode, this can only happen
40555 ** if the page is on the free-list at the start of the transaction, then
40556 ** populated, then moved using sqlite3PagerMovepage().
40558 ** The solution is to add an in-memory page to the cache containing
40559 ** the data just read from the sub-journal. Mark the page as dirty
40560 ** and if the pager requires a journal-sync, then mark the page as
40561 ** requiring a journal-sync before it is written.
40563 assert( isSavepnt );
40564 assert( pPager->doNotSpill==0 );
40565 pPager->doNotSpill++;
40566 rc = sqlite3PagerAcquire(pPager, pgno, &pPg, 1);
40567 assert( pPager->doNotSpill==1 );
40568 pPager->doNotSpill--;
40569 if( rc!=SQLITE_OK ) return rc;
40570 pPg->flags &= ~PGHDR_NEED_READ;
40571 sqlite3PcacheMakeDirty(pPg);
40573 if( pPg ){
40574 /* No page should ever be explicitly rolled back that is in use, except
40575 ** for page 1 which is held in use in order to keep the lock on the
40576 ** database active. However such a page may be rolled back as a result
40577 ** of an internal error resulting in an automatic call to
40578 ** sqlite3PagerRollback().
40580 void *pData;
40581 pData = pPg->pData;
40582 memcpy(pData, (u8*)aData, pPager->pageSize);
40583 pPager->xReiniter(pPg);
40584 if( isMainJrnl && (!isSavepnt || *pOffset<=pPager->journalHdr) ){
40585 /* If the contents of this page were just restored from the main
40586 ** journal file, then its content must be as they were when the
40587 ** transaction was first opened. In this case we can mark the page
40588 ** as clean, since there will be no need to write it out to the
40589 ** database.
40591 ** There is one exception to this rule. If the page is being rolled
40592 ** back as part of a savepoint (or statement) rollback from an
40593 ** unsynced portion of the main journal file, then it is not safe
40594 ** to mark the page as clean. This is because marking the page as
40595 ** clean will clear the PGHDR_NEED_SYNC flag. Since the page is
40596 ** already in the journal file (recorded in Pager.pInJournal) and
40597 ** the PGHDR_NEED_SYNC flag is cleared, if the page is written to
40598 ** again within this transaction, it will be marked as dirty but
40599 ** the PGHDR_NEED_SYNC flag will not be set. It could then potentially
40600 ** be written out into the database file before its journal file
40601 ** segment is synced. If a crash occurs during or following this,
40602 ** database corruption may ensue.
40604 assert( !pagerUseWal(pPager) );
40605 sqlite3PcacheMakeClean(pPg);
40607 pager_set_pagehash(pPg);
40609 /* If this was page 1, then restore the value of Pager.dbFileVers.
40610 ** Do this before any decoding. */
40611 if( pgno==1 ){
40612 memcpy(&pPager->dbFileVers, &((u8*)pData)[24],sizeof(pPager->dbFileVers));
40615 /* Decode the page just read from disk */
40616 CODEC1(pPager, pData, pPg->pgno, 3, rc=SQLITE_NOMEM);
40617 sqlite3PcacheRelease(pPg);
40619 return rc;
40623 ** Parameter zMaster is the name of a master journal file. A single journal
40624 ** file that referred to the master journal file has just been rolled back.
40625 ** This routine checks if it is possible to delete the master journal file,
40626 ** and does so if it is.
40628 ** Argument zMaster may point to Pager.pTmpSpace. So that buffer is not
40629 ** available for use within this function.
40631 ** When a master journal file is created, it is populated with the names
40632 ** of all of its child journals, one after another, formatted as utf-8
40633 ** encoded text. The end of each child journal file is marked with a
40634 ** nul-terminator byte (0x00). i.e. the entire contents of a master journal
40635 ** file for a transaction involving two databases might be:
40637 ** "/home/bill/a.db-journal\x00/home/bill/b.db-journal\x00"
40639 ** A master journal file may only be deleted once all of its child
40640 ** journals have been rolled back.
40642 ** This function reads the contents of the master-journal file into
40643 ** memory and loops through each of the child journal names. For
40644 ** each child journal, it checks if:
40646 ** * if the child journal exists, and if so
40647 ** * if the child journal contains a reference to master journal
40648 ** file zMaster
40650 ** If a child journal can be found that matches both of the criteria
40651 ** above, this function returns without doing anything. Otherwise, if
40652 ** no such child journal can be found, file zMaster is deleted from
40653 ** the file-system using sqlite3OsDelete().
40655 ** If an IO error within this function, an error code is returned. This
40656 ** function allocates memory by calling sqlite3Malloc(). If an allocation
40657 ** fails, SQLITE_NOMEM is returned. Otherwise, if no IO or malloc errors
40658 ** occur, SQLITE_OK is returned.
40660 ** TODO: This function allocates a single block of memory to load
40661 ** the entire contents of the master journal file. This could be
40662 ** a couple of kilobytes or so - potentially larger than the page
40663 ** size.
40665 static int pager_delmaster(Pager *pPager, const char *zMaster){
40666 sqlite3_vfs *pVfs = pPager->pVfs;
40667 int rc; /* Return code */
40668 sqlite3_file *pMaster; /* Malloc'd master-journal file descriptor */
40669 sqlite3_file *pJournal; /* Malloc'd child-journal file descriptor */
40670 char *zMasterJournal = 0; /* Contents of master journal file */
40671 i64 nMasterJournal; /* Size of master journal file */
40672 char *zJournal; /* Pointer to one journal within MJ file */
40673 char *zMasterPtr; /* Space to hold MJ filename from a journal file */
40674 int nMasterPtr; /* Amount of space allocated to zMasterPtr[] */
40676 /* Allocate space for both the pJournal and pMaster file descriptors.
40677 ** If successful, open the master journal file for reading.
40679 pMaster = (sqlite3_file *)sqlite3MallocZero(pVfs->szOsFile * 2);
40680 pJournal = (sqlite3_file *)(((u8 *)pMaster) + pVfs->szOsFile);
40681 if( !pMaster ){
40682 rc = SQLITE_NOMEM;
40683 }else{
40684 const int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MASTER_JOURNAL);
40685 rc = sqlite3OsOpen(pVfs, zMaster, pMaster, flags, 0);
40687 if( rc!=SQLITE_OK ) goto delmaster_out;
40689 /* Load the entire master journal file into space obtained from
40690 ** sqlite3_malloc() and pointed to by zMasterJournal. Also obtain
40691 ** sufficient space (in zMasterPtr) to hold the names of master
40692 ** journal files extracted from regular rollback-journals.
40694 rc = sqlite3OsFileSize(pMaster, &nMasterJournal);
40695 if( rc!=SQLITE_OK ) goto delmaster_out;
40696 nMasterPtr = pVfs->mxPathname+1;
40697 zMasterJournal = sqlite3Malloc((int)nMasterJournal + nMasterPtr + 1);
40698 if( !zMasterJournal ){
40699 rc = SQLITE_NOMEM;
40700 goto delmaster_out;
40702 zMasterPtr = &zMasterJournal[nMasterJournal+1];
40703 rc = sqlite3OsRead(pMaster, zMasterJournal, (int)nMasterJournal, 0);
40704 if( rc!=SQLITE_OK ) goto delmaster_out;
40705 zMasterJournal[nMasterJournal] = 0;
40707 zJournal = zMasterJournal;
40708 while( (zJournal-zMasterJournal)<nMasterJournal ){
40709 int exists;
40710 rc = sqlite3OsAccess(pVfs, zJournal, SQLITE_ACCESS_EXISTS, &exists);
40711 if( rc!=SQLITE_OK ){
40712 goto delmaster_out;
40714 if( exists ){
40715 /* One of the journals pointed to by the master journal exists.
40716 ** Open it and check if it points at the master journal. If
40717 ** so, return without deleting the master journal file.
40719 int c;
40720 int flags = (SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL);
40721 rc = sqlite3OsOpen(pVfs, zJournal, pJournal, flags, 0);
40722 if( rc!=SQLITE_OK ){
40723 goto delmaster_out;
40726 rc = readMasterJournal(pJournal, zMasterPtr, nMasterPtr);
40727 sqlite3OsClose(pJournal);
40728 if( rc!=SQLITE_OK ){
40729 goto delmaster_out;
40732 c = zMasterPtr[0]!=0 && strcmp(zMasterPtr, zMaster)==0;
40733 if( c ){
40734 /* We have a match. Do not delete the master journal file. */
40735 goto delmaster_out;
40738 zJournal += (sqlite3Strlen30(zJournal)+1);
40741 sqlite3OsClose(pMaster);
40742 rc = sqlite3OsDelete(pVfs, zMaster, 0);
40744 delmaster_out:
40745 sqlite3_free(zMasterJournal);
40746 if( pMaster ){
40747 sqlite3OsClose(pMaster);
40748 assert( !isOpen(pJournal) );
40749 sqlite3_free(pMaster);
40751 return rc;
40756 ** This function is used to change the actual size of the database
40757 ** file in the file-system. This only happens when committing a transaction,
40758 ** or rolling back a transaction (including rolling back a hot-journal).
40760 ** If the main database file is not open, or the pager is not in either
40761 ** DBMOD or OPEN state, this function is a no-op. Otherwise, the size
40762 ** of the file is changed to nPage pages (nPage*pPager->pageSize bytes).
40763 ** If the file on disk is currently larger than nPage pages, then use the VFS
40764 ** xTruncate() method to truncate it.
40766 ** Or, it might might be the case that the file on disk is smaller than
40767 ** nPage pages. Some operating system implementations can get confused if
40768 ** you try to truncate a file to some size that is larger than it
40769 ** currently is, so detect this case and write a single zero byte to
40770 ** the end of the new file instead.
40772 ** If successful, return SQLITE_OK. If an IO error occurs while modifying
40773 ** the database file, return the error code to the caller.
40775 static int pager_truncate(Pager *pPager, Pgno nPage){
40776 int rc = SQLITE_OK;
40777 assert( pPager->eState!=PAGER_ERROR );
40778 assert( pPager->eState!=PAGER_READER );
40780 if( isOpen(pPager->fd)
40781 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
40783 i64 currentSize, newSize;
40784 int szPage = pPager->pageSize;
40785 assert( pPager->eLock==EXCLUSIVE_LOCK );
40786 /* TODO: Is it safe to use Pager.dbFileSize here? */
40787 rc = sqlite3OsFileSize(pPager->fd, &currentSize);
40788 newSize = szPage*(i64)nPage;
40789 if( rc==SQLITE_OK && currentSize!=newSize ){
40790 if( currentSize>newSize ){
40791 rc = sqlite3OsTruncate(pPager->fd, newSize);
40792 }else if( (currentSize+szPage)<=newSize ){
40793 char *pTmp = pPager->pTmpSpace;
40794 memset(pTmp, 0, szPage);
40795 testcase( (newSize-szPage) == currentSize );
40796 testcase( (newSize-szPage) > currentSize );
40797 rc = sqlite3OsWrite(pPager->fd, pTmp, szPage, newSize-szPage);
40799 if( rc==SQLITE_OK ){
40800 pPager->dbFileSize = nPage;
40804 return rc;
40808 ** Set the value of the Pager.sectorSize variable for the given
40809 ** pager based on the value returned by the xSectorSize method
40810 ** of the open database file. The sector size will be used used
40811 ** to determine the size and alignment of journal header and
40812 ** master journal pointers within created journal files.
40814 ** For temporary files the effective sector size is always 512 bytes.
40816 ** Otherwise, for non-temporary files, the effective sector size is
40817 ** the value returned by the xSectorSize() method rounded up to 32 if
40818 ** it is less than 32, or rounded down to MAX_SECTOR_SIZE if it
40819 ** is greater than MAX_SECTOR_SIZE.
40821 ** If the file has the SQLITE_IOCAP_POWERSAFE_OVERWRITE property, then set
40822 ** the effective sector size to its minimum value (512). The purpose of
40823 ** pPager->sectorSize is to define the "blast radius" of bytes that
40824 ** might change if a crash occurs while writing to a single byte in
40825 ** that range. But with POWERSAFE_OVERWRITE, the blast radius is zero
40826 ** (that is what POWERSAFE_OVERWRITE means), so we minimize the sector
40827 ** size. For backwards compatibility of the rollback journal file format,
40828 ** we cannot reduce the effective sector size below 512.
40830 static void setSectorSize(Pager *pPager){
40831 assert( isOpen(pPager->fd) || pPager->tempFile );
40833 if( pPager->tempFile
40834 || (sqlite3OsDeviceCharacteristics(pPager->fd) &
40835 SQLITE_IOCAP_POWERSAFE_OVERWRITE)!=0
40837 /* Sector size doesn't matter for temporary files. Also, the file
40838 ** may not have been opened yet, in which case the OsSectorSize()
40839 ** call will segfault. */
40840 pPager->sectorSize = 512;
40841 }else{
40842 pPager->sectorSize = sqlite3OsSectorSize(pPager->fd);
40843 if( pPager->sectorSize<32 ){
40844 pPager->sectorSize = 512;
40846 if( pPager->sectorSize>MAX_SECTOR_SIZE ){
40847 assert( MAX_SECTOR_SIZE>=512 );
40848 pPager->sectorSize = MAX_SECTOR_SIZE;
40854 ** Playback the journal and thus restore the database file to
40855 ** the state it was in before we started making changes.
40857 ** The journal file format is as follows:
40859 ** (1) 8 byte prefix. A copy of aJournalMagic[].
40860 ** (2) 4 byte big-endian integer which is the number of valid page records
40861 ** in the journal. If this value is 0xffffffff, then compute the
40862 ** number of page records from the journal size.
40863 ** (3) 4 byte big-endian integer which is the initial value for the
40864 ** sanity checksum.
40865 ** (4) 4 byte integer which is the number of pages to truncate the
40866 ** database to during a rollback.
40867 ** (5) 4 byte big-endian integer which is the sector size. The header
40868 ** is this many bytes in size.
40869 ** (6) 4 byte big-endian integer which is the page size.
40870 ** (7) zero padding out to the next sector size.
40871 ** (8) Zero or more pages instances, each as follows:
40872 ** + 4 byte page number.
40873 ** + pPager->pageSize bytes of data.
40874 ** + 4 byte checksum
40876 ** When we speak of the journal header, we mean the first 7 items above.
40877 ** Each entry in the journal is an instance of the 8th item.
40879 ** Call the value from the second bullet "nRec". nRec is the number of
40880 ** valid page entries in the journal. In most cases, you can compute the
40881 ** value of nRec from the size of the journal file. But if a power
40882 ** failure occurred while the journal was being written, it could be the
40883 ** case that the size of the journal file had already been increased but
40884 ** the extra entries had not yet made it safely to disk. In such a case,
40885 ** the value of nRec computed from the file size would be too large. For
40886 ** that reason, we always use the nRec value in the header.
40888 ** If the nRec value is 0xffffffff it means that nRec should be computed
40889 ** from the file size. This value is used when the user selects the
40890 ** no-sync option for the journal. A power failure could lead to corruption
40891 ** in this case. But for things like temporary table (which will be
40892 ** deleted when the power is restored) we don't care.
40894 ** If the file opened as the journal file is not a well-formed
40895 ** journal file then all pages up to the first corrupted page are rolled
40896 ** back (or no pages if the journal header is corrupted). The journal file
40897 ** is then deleted and SQLITE_OK returned, just as if no corruption had
40898 ** been encountered.
40900 ** If an I/O or malloc() error occurs, the journal-file is not deleted
40901 ** and an error code is returned.
40903 ** The isHot parameter indicates that we are trying to rollback a journal
40904 ** that might be a hot journal. Or, it could be that the journal is
40905 ** preserved because of JOURNALMODE_PERSIST or JOURNALMODE_TRUNCATE.
40906 ** If the journal really is hot, reset the pager cache prior rolling
40907 ** back any content. If the journal is merely persistent, no reset is
40908 ** needed.
40910 static int pager_playback(Pager *pPager, int isHot){
40911 sqlite3_vfs *pVfs = pPager->pVfs;
40912 i64 szJ; /* Size of the journal file in bytes */
40913 u32 nRec; /* Number of Records in the journal */
40914 u32 u; /* Unsigned loop counter */
40915 Pgno mxPg = 0; /* Size of the original file in pages */
40916 int rc; /* Result code of a subroutine */
40917 int res = 1; /* Value returned by sqlite3OsAccess() */
40918 char *zMaster = 0; /* Name of master journal file if any */
40919 int needPagerReset; /* True to reset page prior to first page rollback */
40921 /* Figure out how many records are in the journal. Abort early if
40922 ** the journal is empty.
40924 assert( isOpen(pPager->jfd) );
40925 rc = sqlite3OsFileSize(pPager->jfd, &szJ);
40926 if( rc!=SQLITE_OK ){
40927 goto end_playback;
40930 /* Read the master journal name from the journal, if it is present.
40931 ** If a master journal file name is specified, but the file is not
40932 ** present on disk, then the journal is not hot and does not need to be
40933 ** played back.
40935 ** TODO: Technically the following is an error because it assumes that
40936 ** buffer Pager.pTmpSpace is (mxPathname+1) bytes or larger. i.e. that
40937 ** (pPager->pageSize >= pPager->pVfs->mxPathname+1). Using os_unix.c,
40938 ** mxPathname is 512, which is the same as the minimum allowable value
40939 ** for pageSize.
40941 zMaster = pPager->pTmpSpace;
40942 rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
40943 if( rc==SQLITE_OK && zMaster[0] ){
40944 rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
40946 zMaster = 0;
40947 if( rc!=SQLITE_OK || !res ){
40948 goto end_playback;
40950 pPager->journalOff = 0;
40951 needPagerReset = isHot;
40953 /* This loop terminates either when a readJournalHdr() or
40954 ** pager_playback_one_page() call returns SQLITE_DONE or an IO error
40955 ** occurs.
40957 while( 1 ){
40958 /* Read the next journal header from the journal file. If there are
40959 ** not enough bytes left in the journal file for a complete header, or
40960 ** it is corrupted, then a process must have failed while writing it.
40961 ** This indicates nothing more needs to be rolled back.
40963 rc = readJournalHdr(pPager, isHot, szJ, &nRec, &mxPg);
40964 if( rc!=SQLITE_OK ){
40965 if( rc==SQLITE_DONE ){
40966 rc = SQLITE_OK;
40968 goto end_playback;
40971 /* If nRec is 0xffffffff, then this journal was created by a process
40972 ** working in no-sync mode. This means that the rest of the journal
40973 ** file consists of pages, there are no more journal headers. Compute
40974 ** the value of nRec based on this assumption.
40976 if( nRec==0xffffffff ){
40977 assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) );
40978 nRec = (int)((szJ - JOURNAL_HDR_SZ(pPager))/JOURNAL_PG_SZ(pPager));
40981 /* If nRec is 0 and this rollback is of a transaction created by this
40982 ** process and if this is the final header in the journal, then it means
40983 ** that this part of the journal was being filled but has not yet been
40984 ** synced to disk. Compute the number of pages based on the remaining
40985 ** size of the file.
40987 ** The third term of the test was added to fix ticket #2565.
40988 ** When rolling back a hot journal, nRec==0 always means that the next
40989 ** chunk of the journal contains zero pages to be rolled back. But
40990 ** when doing a ROLLBACK and the nRec==0 chunk is the last chunk in
40991 ** the journal, it means that the journal might contain additional
40992 ** pages that need to be rolled back and that the number of pages
40993 ** should be computed based on the journal file size.
40995 if( nRec==0 && !isHot &&
40996 pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff ){
40997 nRec = (int)((szJ - pPager->journalOff) / JOURNAL_PG_SZ(pPager));
41000 /* If this is the first header read from the journal, truncate the
41001 ** database file back to its original size.
41003 if( pPager->journalOff==JOURNAL_HDR_SZ(pPager) ){
41004 rc = pager_truncate(pPager, mxPg);
41005 if( rc!=SQLITE_OK ){
41006 goto end_playback;
41008 pPager->dbSize = mxPg;
41011 /* Copy original pages out of the journal and back into the
41012 ** database file and/or page cache.
41014 for(u=0; u<nRec; u++){
41015 if( needPagerReset ){
41016 pager_reset(pPager);
41017 needPagerReset = 0;
41019 rc = pager_playback_one_page(pPager,&pPager->journalOff,0,1,0);
41020 if( rc!=SQLITE_OK ){
41021 if( rc==SQLITE_DONE ){
41022 pPager->journalOff = szJ;
41023 break;
41024 }else if( rc==SQLITE_IOERR_SHORT_READ ){
41025 /* If the journal has been truncated, simply stop reading and
41026 ** processing the journal. This might happen if the journal was
41027 ** not completely written and synced prior to a crash. In that
41028 ** case, the database should have never been written in the
41029 ** first place so it is OK to simply abandon the rollback. */
41030 rc = SQLITE_OK;
41031 goto end_playback;
41032 }else{
41033 /* If we are unable to rollback, quit and return the error
41034 ** code. This will cause the pager to enter the error state
41035 ** so that no further harm will be done. Perhaps the next
41036 ** process to come along will be able to rollback the database.
41038 goto end_playback;
41043 /*NOTREACHED*/
41044 assert( 0 );
41046 end_playback:
41047 /* Following a rollback, the database file should be back in its original
41048 ** state prior to the start of the transaction, so invoke the
41049 ** SQLITE_FCNTL_DB_UNCHANGED file-control method to disable the
41050 ** assertion that the transaction counter was modified.
41052 #ifdef SQLITE_DEBUG
41053 if( pPager->fd->pMethods ){
41054 sqlite3OsFileControlHint(pPager->fd,SQLITE_FCNTL_DB_UNCHANGED,0);
41056 #endif
41058 /* If this playback is happening automatically as a result of an IO or
41059 ** malloc error that occurred after the change-counter was updated but
41060 ** before the transaction was committed, then the change-counter
41061 ** modification may just have been reverted. If this happens in exclusive
41062 ** mode, then subsequent transactions performed by the connection will not
41063 ** update the change-counter at all. This may lead to cache inconsistency
41064 ** problems for other processes at some point in the future. So, just
41065 ** in case this has happened, clear the changeCountDone flag now.
41067 pPager->changeCountDone = pPager->tempFile;
41069 if( rc==SQLITE_OK ){
41070 zMaster = pPager->pTmpSpace;
41071 rc = readMasterJournal(pPager->jfd, zMaster, pPager->pVfs->mxPathname+1);
41072 testcase( rc!=SQLITE_OK );
41074 if( rc==SQLITE_OK
41075 && (pPager->eState>=PAGER_WRITER_DBMOD || pPager->eState==PAGER_OPEN)
41077 rc = sqlite3PagerSync(pPager);
41079 if( rc==SQLITE_OK ){
41080 rc = pager_end_transaction(pPager, zMaster[0]!='\0');
41081 testcase( rc!=SQLITE_OK );
41083 if( rc==SQLITE_OK && zMaster[0] && res ){
41084 /* If there was a master journal and this routine will return success,
41085 ** see if it is possible to delete the master journal.
41087 rc = pager_delmaster(pPager, zMaster);
41088 testcase( rc!=SQLITE_OK );
41091 /* The Pager.sectorSize variable may have been updated while rolling
41092 ** back a journal created by a process with a different sector size
41093 ** value. Reset it to the correct value for this process.
41095 setSectorSize(pPager);
41096 return rc;
41101 ** Read the content for page pPg out of the database file and into
41102 ** pPg->pData. A shared lock or greater must be held on the database
41103 ** file before this function is called.
41105 ** If page 1 is read, then the value of Pager.dbFileVers[] is set to
41106 ** the value read from the database file.
41108 ** If an IO error occurs, then the IO error is returned to the caller.
41109 ** Otherwise, SQLITE_OK is returned.
41111 static int readDbPage(PgHdr *pPg){
41112 Pager *pPager = pPg->pPager; /* Pager object associated with page pPg */
41113 Pgno pgno = pPg->pgno; /* Page number to read */
41114 int rc = SQLITE_OK; /* Return code */
41115 int isInWal = 0; /* True if page is in log file */
41116 int pgsz = pPager->pageSize; /* Number of bytes to read */
41118 assert( pPager->eState>=PAGER_READER && !MEMDB );
41119 assert( isOpen(pPager->fd) );
41121 if( NEVER(!isOpen(pPager->fd)) ){
41122 assert( pPager->tempFile );
41123 memset(pPg->pData, 0, pPager->pageSize);
41124 return SQLITE_OK;
41127 if( pagerUseWal(pPager) ){
41128 /* Try to pull the page from the write-ahead log. */
41129 rc = sqlite3WalRead(pPager->pWal, pgno, &isInWal, pgsz, pPg->pData);
41131 if( rc==SQLITE_OK && !isInWal ){
41132 i64 iOffset = (pgno-1)*(i64)pPager->pageSize;
41133 rc = sqlite3OsRead(pPager->fd, pPg->pData, pgsz, iOffset);
41134 if( rc==SQLITE_IOERR_SHORT_READ ){
41135 rc = SQLITE_OK;
41139 if( pgno==1 ){
41140 if( rc ){
41141 /* If the read is unsuccessful, set the dbFileVers[] to something
41142 ** that will never be a valid file version. dbFileVers[] is a copy
41143 ** of bytes 24..39 of the database. Bytes 28..31 should always be
41144 ** zero or the size of the database in page. Bytes 32..35 and 35..39
41145 ** should be page numbers which are never 0xffffffff. So filling
41146 ** pPager->dbFileVers[] with all 0xff bytes should suffice.
41148 ** For an encrypted database, the situation is more complex: bytes
41149 ** 24..39 of the database are white noise. But the probability of
41150 ** white noising equaling 16 bytes of 0xff is vanishingly small so
41151 ** we should still be ok.
41153 memset(pPager->dbFileVers, 0xff, sizeof(pPager->dbFileVers));
41154 }else{
41155 u8 *dbFileVers = &((u8*)pPg->pData)[24];
41156 memcpy(&pPager->dbFileVers, dbFileVers, sizeof(pPager->dbFileVers));
41159 CODEC1(pPager, pPg->pData, pgno, 3, rc = SQLITE_NOMEM);
41161 PAGER_INCR(sqlite3_pager_readdb_count);
41162 PAGER_INCR(pPager->nRead);
41163 IOTRACE(("PGIN %p %d\n", pPager, pgno));
41164 PAGERTRACE(("FETCH %d page %d hash(%08x)\n",
41165 PAGERID(pPager), pgno, pager_pagehash(pPg)));
41167 return rc;
41171 ** Update the value of the change-counter at offsets 24 and 92 in
41172 ** the header and the sqlite version number at offset 96.
41174 ** This is an unconditional update. See also the pager_incr_changecounter()
41175 ** routine which only updates the change-counter if the update is actually
41176 ** needed, as determined by the pPager->changeCountDone state variable.
41178 static void pager_write_changecounter(PgHdr *pPg){
41179 u32 change_counter;
41181 /* Increment the value just read and write it back to byte 24. */
41182 change_counter = sqlite3Get4byte((u8*)pPg->pPager->dbFileVers)+1;
41183 put32bits(((char*)pPg->pData)+24, change_counter);
41185 /* Also store the SQLite version number in bytes 96..99 and in
41186 ** bytes 92..95 store the change counter for which the version number
41187 ** is valid. */
41188 put32bits(((char*)pPg->pData)+92, change_counter);
41189 put32bits(((char*)pPg->pData)+96, SQLITE_VERSION_NUMBER);
41192 #ifndef SQLITE_OMIT_WAL
41194 ** This function is invoked once for each page that has already been
41195 ** written into the log file when a WAL transaction is rolled back.
41196 ** Parameter iPg is the page number of said page. The pCtx argument
41197 ** is actually a pointer to the Pager structure.
41199 ** If page iPg is present in the cache, and has no outstanding references,
41200 ** it is discarded. Otherwise, if there are one or more outstanding
41201 ** references, the page content is reloaded from the database. If the
41202 ** attempt to reload content from the database is required and fails,
41203 ** return an SQLite error code. Otherwise, SQLITE_OK.
41205 static int pagerUndoCallback(void *pCtx, Pgno iPg){
41206 int rc = SQLITE_OK;
41207 Pager *pPager = (Pager *)pCtx;
41208 PgHdr *pPg;
41210 pPg = sqlite3PagerLookup(pPager, iPg);
41211 if( pPg ){
41212 if( sqlite3PcachePageRefcount(pPg)==1 ){
41213 sqlite3PcacheDrop(pPg);
41214 }else{
41215 rc = readDbPage(pPg);
41216 if( rc==SQLITE_OK ){
41217 pPager->xReiniter(pPg);
41219 sqlite3PagerUnref(pPg);
41223 /* Normally, if a transaction is rolled back, any backup processes are
41224 ** updated as data is copied out of the rollback journal and into the
41225 ** database. This is not generally possible with a WAL database, as
41226 ** rollback involves simply truncating the log file. Therefore, if one
41227 ** or more frames have already been written to the log (and therefore
41228 ** also copied into the backup databases) as part of this transaction,
41229 ** the backups must be restarted.
41231 sqlite3BackupRestart(pPager->pBackup);
41233 return rc;
41237 ** This function is called to rollback a transaction on a WAL database.
41239 static int pagerRollbackWal(Pager *pPager){
41240 int rc; /* Return Code */
41241 PgHdr *pList; /* List of dirty pages to revert */
41243 /* For all pages in the cache that are currently dirty or have already
41244 ** been written (but not committed) to the log file, do one of the
41245 ** following:
41247 ** + Discard the cached page (if refcount==0), or
41248 ** + Reload page content from the database (if refcount>0).
41250 pPager->dbSize = pPager->dbOrigSize;
41251 rc = sqlite3WalUndo(pPager->pWal, pagerUndoCallback, (void *)pPager);
41252 pList = sqlite3PcacheDirtyList(pPager->pPCache);
41253 while( pList && rc==SQLITE_OK ){
41254 PgHdr *pNext = pList->pDirty;
41255 rc = pagerUndoCallback((void *)pPager, pList->pgno);
41256 pList = pNext;
41259 return rc;
41263 ** This function is a wrapper around sqlite3WalFrames(). As well as logging
41264 ** the contents of the list of pages headed by pList (connected by pDirty),
41265 ** this function notifies any active backup processes that the pages have
41266 ** changed.
41268 ** The list of pages passed into this routine is always sorted by page number.
41269 ** Hence, if page 1 appears anywhere on the list, it will be the first page.
41271 static int pagerWalFrames(
41272 Pager *pPager, /* Pager object */
41273 PgHdr *pList, /* List of frames to log */
41274 Pgno nTruncate, /* Database size after this commit */
41275 int isCommit /* True if this is a commit */
41277 int rc; /* Return code */
41278 #if defined(SQLITE_DEBUG) || defined(SQLITE_CHECK_PAGES)
41279 PgHdr *p; /* For looping over pages */
41280 #endif
41282 assert( pPager->pWal );
41283 assert( pList );
41284 #ifdef SQLITE_DEBUG
41285 /* Verify that the page list is in accending order */
41286 for(p=pList; p && p->pDirty; p=p->pDirty){
41287 assert( p->pgno < p->pDirty->pgno );
41289 #endif
41291 if( isCommit ){
41292 /* If a WAL transaction is being committed, there is no point in writing
41293 ** any pages with page numbers greater than nTruncate into the WAL file.
41294 ** They will never be read by any client. So remove them from the pDirty
41295 ** list here. */
41296 PgHdr *p;
41297 PgHdr **ppNext = &pList;
41298 for(p=pList; (*ppNext = p); p=p->pDirty){
41299 if( p->pgno<=nTruncate ) ppNext = &p->pDirty;
41301 assert( pList );
41304 if( pList->pgno==1 ) pager_write_changecounter(pList);
41305 rc = sqlite3WalFrames(pPager->pWal,
41306 pPager->pageSize, pList, nTruncate, isCommit, pPager->walSyncFlags
41308 if( rc==SQLITE_OK && pPager->pBackup ){
41309 PgHdr *p;
41310 for(p=pList; p; p=p->pDirty){
41311 sqlite3BackupUpdate(pPager->pBackup, p->pgno, (u8 *)p->pData);
41315 #ifdef SQLITE_CHECK_PAGES
41316 pList = sqlite3PcacheDirtyList(pPager->pPCache);
41317 for(p=pList; p; p=p->pDirty){
41318 pager_set_pagehash(p);
41320 #endif
41322 return rc;
41326 ** Begin a read transaction on the WAL.
41328 ** This routine used to be called "pagerOpenSnapshot()" because it essentially
41329 ** makes a snapshot of the database at the current point in time and preserves
41330 ** that snapshot for use by the reader in spite of concurrently changes by
41331 ** other writers or checkpointers.
41333 static int pagerBeginReadTransaction(Pager *pPager){
41334 int rc; /* Return code */
41335 int changed = 0; /* True if cache must be reset */
41337 assert( pagerUseWal(pPager) );
41338 assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
41340 /* sqlite3WalEndReadTransaction() was not called for the previous
41341 ** transaction in locking_mode=EXCLUSIVE. So call it now. If we
41342 ** are in locking_mode=NORMAL and EndRead() was previously called,
41343 ** the duplicate call is harmless.
41345 sqlite3WalEndReadTransaction(pPager->pWal);
41347 rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed);
41348 if( rc!=SQLITE_OK || changed ){
41349 pager_reset(pPager);
41352 return rc;
41354 #endif
41357 ** This function is called as part of the transition from PAGER_OPEN
41358 ** to PAGER_READER state to determine the size of the database file
41359 ** in pages (assuming the page size currently stored in Pager.pageSize).
41361 ** If no error occurs, SQLITE_OK is returned and the size of the database
41362 ** in pages is stored in *pnPage. Otherwise, an error code (perhaps
41363 ** SQLITE_IOERR_FSTAT) is returned and *pnPage is left unmodified.
41365 static int pagerPagecount(Pager *pPager, Pgno *pnPage){
41366 Pgno nPage; /* Value to return via *pnPage */
41368 /* Query the WAL sub-system for the database size. The WalDbsize()
41369 ** function returns zero if the WAL is not open (i.e. Pager.pWal==0), or
41370 ** if the database size is not available. The database size is not
41371 ** available from the WAL sub-system if the log file is empty or
41372 ** contains no valid committed transactions.
41374 assert( pPager->eState==PAGER_OPEN );
41375 assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
41376 nPage = sqlite3WalDbsize(pPager->pWal);
41378 /* If the database size was not available from the WAL sub-system,
41379 ** determine it based on the size of the database file. If the size
41380 ** of the database file is not an integer multiple of the page-size,
41381 ** round down to the nearest page. Except, any file larger than 0
41382 ** bytes in size is considered to contain at least one page.
41384 if( nPage==0 ){
41385 i64 n = 0; /* Size of db file in bytes */
41386 assert( isOpen(pPager->fd) || pPager->tempFile );
41387 if( isOpen(pPager->fd) ){
41388 int rc = sqlite3OsFileSize(pPager->fd, &n);
41389 if( rc!=SQLITE_OK ){
41390 return rc;
41393 nPage = (Pgno)((n+pPager->pageSize-1) / pPager->pageSize);
41396 /* If the current number of pages in the file is greater than the
41397 ** configured maximum pager number, increase the allowed limit so
41398 ** that the file can be read.
41400 if( nPage>pPager->mxPgno ){
41401 pPager->mxPgno = (Pgno)nPage;
41404 *pnPage = nPage;
41405 return SQLITE_OK;
41408 #ifndef SQLITE_OMIT_WAL
41410 ** Check if the *-wal file that corresponds to the database opened by pPager
41411 ** exists if the database is not empy, or verify that the *-wal file does
41412 ** not exist (by deleting it) if the database file is empty.
41414 ** If the database is not empty and the *-wal file exists, open the pager
41415 ** in WAL mode. If the database is empty or if no *-wal file exists and
41416 ** if no error occurs, make sure Pager.journalMode is not set to
41417 ** PAGER_JOURNALMODE_WAL.
41419 ** Return SQLITE_OK or an error code.
41421 ** The caller must hold a SHARED lock on the database file to call this
41422 ** function. Because an EXCLUSIVE lock on the db file is required to delete
41423 ** a WAL on a none-empty database, this ensures there is no race condition
41424 ** between the xAccess() below and an xDelete() being executed by some
41425 ** other connection.
41427 static int pagerOpenWalIfPresent(Pager *pPager){
41428 int rc = SQLITE_OK;
41429 assert( pPager->eState==PAGER_OPEN );
41430 assert( pPager->eLock>=SHARED_LOCK || pPager->noReadlock );
41432 if( !pPager->tempFile ){
41433 int isWal; /* True if WAL file exists */
41434 Pgno nPage; /* Size of the database file */
41436 rc = pagerPagecount(pPager, &nPage);
41437 if( rc ) return rc;
41438 if( nPage==0 ){
41439 rc = sqlite3OsDelete(pPager->pVfs, pPager->zWal, 0);
41440 isWal = 0;
41441 }else{
41442 rc = sqlite3OsAccess(
41443 pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &isWal
41446 if( rc==SQLITE_OK ){
41447 if( isWal ){
41448 testcase( sqlite3PcachePagecount(pPager->pPCache)==0 );
41449 rc = sqlite3PagerOpenWal(pPager, 0);
41450 }else if( pPager->journalMode==PAGER_JOURNALMODE_WAL ){
41451 pPager->journalMode = PAGER_JOURNALMODE_DELETE;
41455 return rc;
41457 #endif
41460 ** Playback savepoint pSavepoint. Or, if pSavepoint==NULL, then playback
41461 ** the entire master journal file. The case pSavepoint==NULL occurs when
41462 ** a ROLLBACK TO command is invoked on a SAVEPOINT that is a transaction
41463 ** savepoint.
41465 ** When pSavepoint is not NULL (meaning a non-transaction savepoint is
41466 ** being rolled back), then the rollback consists of up to three stages,
41467 ** performed in the order specified:
41469 ** * Pages are played back from the main journal starting at byte
41470 ** offset PagerSavepoint.iOffset and continuing to
41471 ** PagerSavepoint.iHdrOffset, or to the end of the main journal
41472 ** file if PagerSavepoint.iHdrOffset is zero.
41474 ** * If PagerSavepoint.iHdrOffset is not zero, then pages are played
41475 ** back starting from the journal header immediately following
41476 ** PagerSavepoint.iHdrOffset to the end of the main journal file.
41478 ** * Pages are then played back from the sub-journal file, starting
41479 ** with the PagerSavepoint.iSubRec and continuing to the end of
41480 ** the journal file.
41482 ** Throughout the rollback process, each time a page is rolled back, the
41483 ** corresponding bit is set in a bitvec structure (variable pDone in the
41484 ** implementation below). This is used to ensure that a page is only
41485 ** rolled back the first time it is encountered in either journal.
41487 ** If pSavepoint is NULL, then pages are only played back from the main
41488 ** journal file. There is no need for a bitvec in this case.
41490 ** In either case, before playback commences the Pager.dbSize variable
41491 ** is reset to the value that it held at the start of the savepoint
41492 ** (or transaction). No page with a page-number greater than this value
41493 ** is played back. If one is encountered it is simply skipped.
41495 static int pagerPlaybackSavepoint(Pager *pPager, PagerSavepoint *pSavepoint){
41496 i64 szJ; /* Effective size of the main journal */
41497 i64 iHdrOff; /* End of first segment of main-journal records */
41498 int rc = SQLITE_OK; /* Return code */
41499 Bitvec *pDone = 0; /* Bitvec to ensure pages played back only once */
41501 assert( pPager->eState!=PAGER_ERROR );
41502 assert( pPager->eState>=PAGER_WRITER_LOCKED );
41504 /* Allocate a bitvec to use to store the set of pages rolled back */
41505 if( pSavepoint ){
41506 pDone = sqlite3BitvecCreate(pSavepoint->nOrig);
41507 if( !pDone ){
41508 return SQLITE_NOMEM;
41512 /* Set the database size back to the value it was before the savepoint
41513 ** being reverted was opened.
41515 pPager->dbSize = pSavepoint ? pSavepoint->nOrig : pPager->dbOrigSize;
41516 pPager->changeCountDone = pPager->tempFile;
41518 if( !pSavepoint && pagerUseWal(pPager) ){
41519 return pagerRollbackWal(pPager);
41522 /* Use pPager->journalOff as the effective size of the main rollback
41523 ** journal. The actual file might be larger than this in
41524 ** PAGER_JOURNALMODE_TRUNCATE or PAGER_JOURNALMODE_PERSIST. But anything
41525 ** past pPager->journalOff is off-limits to us.
41527 szJ = pPager->journalOff;
41528 assert( pagerUseWal(pPager)==0 || szJ==0 );
41530 /* Begin by rolling back records from the main journal starting at
41531 ** PagerSavepoint.iOffset and continuing to the next journal header.
41532 ** There might be records in the main journal that have a page number
41533 ** greater than the current database size (pPager->dbSize) but those
41534 ** will be skipped automatically. Pages are added to pDone as they
41535 ** are played back.
41537 if( pSavepoint && !pagerUseWal(pPager) ){
41538 iHdrOff = pSavepoint->iHdrOffset ? pSavepoint->iHdrOffset : szJ;
41539 pPager->journalOff = pSavepoint->iOffset;
41540 while( rc==SQLITE_OK && pPager->journalOff<iHdrOff ){
41541 rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
41543 assert( rc!=SQLITE_DONE );
41544 }else{
41545 pPager->journalOff = 0;
41548 /* Continue rolling back records out of the main journal starting at
41549 ** the first journal header seen and continuing until the effective end
41550 ** of the main journal file. Continue to skip out-of-range pages and
41551 ** continue adding pages rolled back to pDone.
41553 while( rc==SQLITE_OK && pPager->journalOff<szJ ){
41554 u32 ii; /* Loop counter */
41555 u32 nJRec = 0; /* Number of Journal Records */
41556 u32 dummy;
41557 rc = readJournalHdr(pPager, 0, szJ, &nJRec, &dummy);
41558 assert( rc!=SQLITE_DONE );
41561 ** The "pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff"
41562 ** test is related to ticket #2565. See the discussion in the
41563 ** pager_playback() function for additional information.
41565 if( nJRec==0
41566 && pPager->journalHdr+JOURNAL_HDR_SZ(pPager)==pPager->journalOff
41568 nJRec = (u32)((szJ - pPager->journalOff)/JOURNAL_PG_SZ(pPager));
41570 for(ii=0; rc==SQLITE_OK && ii<nJRec && pPager->journalOff<szJ; ii++){
41571 rc = pager_playback_one_page(pPager, &pPager->journalOff, pDone, 1, 1);
41573 assert( rc!=SQLITE_DONE );
41575 assert( rc!=SQLITE_OK || pPager->journalOff>=szJ );
41577 /* Finally, rollback pages from the sub-journal. Page that were
41578 ** previously rolled back out of the main journal (and are hence in pDone)
41579 ** will be skipped. Out-of-range pages are also skipped.
41581 if( pSavepoint ){
41582 u32 ii; /* Loop counter */
41583 i64 offset = (i64)pSavepoint->iSubRec*(4+pPager->pageSize);
41585 if( pagerUseWal(pPager) ){
41586 rc = sqlite3WalSavepointUndo(pPager->pWal, pSavepoint->aWalData);
41588 for(ii=pSavepoint->iSubRec; rc==SQLITE_OK && ii<pPager->nSubRec; ii++){
41589 assert( offset==(i64)ii*(4+pPager->pageSize) );
41590 rc = pager_playback_one_page(pPager, &offset, pDone, 0, 1);
41592 assert( rc!=SQLITE_DONE );
41595 sqlite3BitvecDestroy(pDone);
41596 if( rc==SQLITE_OK ){
41597 pPager->journalOff = szJ;
41600 return rc;
41604 ** Change the maximum number of in-memory pages that are allowed.
41606 SQLITE_PRIVATE void sqlite3PagerSetCachesize(Pager *pPager, int mxPage){
41607 sqlite3PcacheSetCachesize(pPager->pPCache, mxPage);
41611 ** Free as much memory as possible from the pager.
41613 SQLITE_PRIVATE void sqlite3PagerShrink(Pager *pPager){
41614 sqlite3PcacheShrink(pPager->pPCache);
41618 ** Adjust the robustness of the database to damage due to OS crashes
41619 ** or power failures by changing the number of syncs()s when writing
41620 ** the rollback journal. There are three levels:
41622 ** OFF sqlite3OsSync() is never called. This is the default
41623 ** for temporary and transient files.
41625 ** NORMAL The journal is synced once before writes begin on the
41626 ** database. This is normally adequate protection, but
41627 ** it is theoretically possible, though very unlikely,
41628 ** that an inopertune power failure could leave the journal
41629 ** in a state which would cause damage to the database
41630 ** when it is rolled back.
41632 ** FULL The journal is synced twice before writes begin on the
41633 ** database (with some additional information - the nRec field
41634 ** of the journal header - being written in between the two
41635 ** syncs). If we assume that writing a
41636 ** single disk sector is atomic, then this mode provides
41637 ** assurance that the journal will not be corrupted to the
41638 ** point of causing damage to the database during rollback.
41640 ** The above is for a rollback-journal mode. For WAL mode, OFF continues
41641 ** to mean that no syncs ever occur. NORMAL means that the WAL is synced
41642 ** prior to the start of checkpoint and that the database file is synced
41643 ** at the conclusion of the checkpoint if the entire content of the WAL
41644 ** was written back into the database. But no sync operations occur for
41645 ** an ordinary commit in NORMAL mode with WAL. FULL means that the WAL
41646 ** file is synced following each commit operation, in addition to the
41647 ** syncs associated with NORMAL.
41649 ** Do not confuse synchronous=FULL with SQLITE_SYNC_FULL. The
41650 ** SQLITE_SYNC_FULL macro means to use the MacOSX-style full-fsync
41651 ** using fcntl(F_FULLFSYNC). SQLITE_SYNC_NORMAL means to do an
41652 ** ordinary fsync() call. There is no difference between SQLITE_SYNC_FULL
41653 ** and SQLITE_SYNC_NORMAL on platforms other than MacOSX. But the
41654 ** synchronous=FULL versus synchronous=NORMAL setting determines when
41655 ** the xSync primitive is called and is relevant to all platforms.
41657 ** Numeric values associated with these states are OFF==1, NORMAL=2,
41658 ** and FULL=3.
41660 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
41661 SQLITE_PRIVATE void sqlite3PagerSetSafetyLevel(
41662 Pager *pPager, /* The pager to set safety level for */
41663 int level, /* PRAGMA synchronous. 1=OFF, 2=NORMAL, 3=FULL */
41664 int bFullFsync, /* PRAGMA fullfsync */
41665 int bCkptFullFsync /* PRAGMA checkpoint_fullfsync */
41667 assert( level>=1 && level<=3 );
41668 pPager->noSync = (level==1 || pPager->tempFile) ?1:0;
41669 pPager->fullSync = (level==3 && !pPager->tempFile) ?1:0;
41670 if( pPager->noSync ){
41671 pPager->syncFlags = 0;
41672 pPager->ckptSyncFlags = 0;
41673 }else if( bFullFsync ){
41674 pPager->syncFlags = SQLITE_SYNC_FULL;
41675 pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
41676 }else if( bCkptFullFsync ){
41677 pPager->syncFlags = SQLITE_SYNC_NORMAL;
41678 pPager->ckptSyncFlags = SQLITE_SYNC_FULL;
41679 }else{
41680 pPager->syncFlags = SQLITE_SYNC_NORMAL;
41681 pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
41683 pPager->walSyncFlags = pPager->syncFlags;
41684 if( pPager->fullSync ){
41685 pPager->walSyncFlags |= WAL_SYNC_TRANSACTIONS;
41688 #endif
41691 ** The following global variable is incremented whenever the library
41692 ** attempts to open a temporary file. This information is used for
41693 ** testing and analysis only.
41695 #ifdef SQLITE_TEST
41696 SQLITE_API int sqlite3_opentemp_count = 0;
41697 #endif
41700 ** Open a temporary file.
41702 ** Write the file descriptor into *pFile. Return SQLITE_OK on success
41703 ** or some other error code if we fail. The OS will automatically
41704 ** delete the temporary file when it is closed.
41706 ** The flags passed to the VFS layer xOpen() call are those specified
41707 ** by parameter vfsFlags ORed with the following:
41709 ** SQLITE_OPEN_READWRITE
41710 ** SQLITE_OPEN_CREATE
41711 ** SQLITE_OPEN_EXCLUSIVE
41712 ** SQLITE_OPEN_DELETEONCLOSE
41714 static int pagerOpentemp(
41715 Pager *pPager, /* The pager object */
41716 sqlite3_file *pFile, /* Write the file descriptor here */
41717 int vfsFlags /* Flags passed through to the VFS */
41719 int rc; /* Return code */
41721 #ifdef SQLITE_TEST
41722 sqlite3_opentemp_count++; /* Used for testing and analysis only */
41723 #endif
41725 vfsFlags |= SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
41726 SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE;
41727 rc = sqlite3OsOpen(pPager->pVfs, 0, pFile, vfsFlags, 0);
41728 assert( rc!=SQLITE_OK || isOpen(pFile) );
41729 return rc;
41733 ** Set the busy handler function.
41735 ** The pager invokes the busy-handler if sqlite3OsLock() returns
41736 ** SQLITE_BUSY when trying to upgrade from no-lock to a SHARED lock,
41737 ** or when trying to upgrade from a RESERVED lock to an EXCLUSIVE
41738 ** lock. It does *not* invoke the busy handler when upgrading from
41739 ** SHARED to RESERVED, or when upgrading from SHARED to EXCLUSIVE
41740 ** (which occurs during hot-journal rollback). Summary:
41742 ** Transition | Invokes xBusyHandler
41743 ** --------------------------------------------------------
41744 ** NO_LOCK -> SHARED_LOCK | Yes
41745 ** SHARED_LOCK -> RESERVED_LOCK | No
41746 ** SHARED_LOCK -> EXCLUSIVE_LOCK | No
41747 ** RESERVED_LOCK -> EXCLUSIVE_LOCK | Yes
41749 ** If the busy-handler callback returns non-zero, the lock is
41750 ** retried. If it returns zero, then the SQLITE_BUSY error is
41751 ** returned to the caller of the pager API function.
41753 SQLITE_PRIVATE void sqlite3PagerSetBusyhandler(
41754 Pager *pPager, /* Pager object */
41755 int (*xBusyHandler)(void *), /* Pointer to busy-handler function */
41756 void *pBusyHandlerArg /* Argument to pass to xBusyHandler */
41758 pPager->xBusyHandler = xBusyHandler;
41759 pPager->pBusyHandlerArg = pBusyHandlerArg;
41763 ** Change the page size used by the Pager object. The new page size
41764 ** is passed in *pPageSize.
41766 ** If the pager is in the error state when this function is called, it
41767 ** is a no-op. The value returned is the error state error code (i.e.
41768 ** one of SQLITE_IOERR, an SQLITE_IOERR_xxx sub-code or SQLITE_FULL).
41770 ** Otherwise, if all of the following are true:
41772 ** * the new page size (value of *pPageSize) is valid (a power
41773 ** of two between 512 and SQLITE_MAX_PAGE_SIZE, inclusive), and
41775 ** * there are no outstanding page references, and
41777 ** * the database is either not an in-memory database or it is
41778 ** an in-memory database that currently consists of zero pages.
41780 ** then the pager object page size is set to *pPageSize.
41782 ** If the page size is changed, then this function uses sqlite3PagerMalloc()
41783 ** to obtain a new Pager.pTmpSpace buffer. If this allocation attempt
41784 ** fails, SQLITE_NOMEM is returned and the page size remains unchanged.
41785 ** In all other cases, SQLITE_OK is returned.
41787 ** If the page size is not changed, either because one of the enumerated
41788 ** conditions above is not true, the pager was in error state when this
41789 ** function was called, or because the memory allocation attempt failed,
41790 ** then *pPageSize is set to the old, retained page size before returning.
41792 SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nReserve){
41793 int rc = SQLITE_OK;
41795 /* It is not possible to do a full assert_pager_state() here, as this
41796 ** function may be called from within PagerOpen(), before the state
41797 ** of the Pager object is internally consistent.
41799 ** At one point this function returned an error if the pager was in
41800 ** PAGER_ERROR state. But since PAGER_ERROR state guarantees that
41801 ** there is at least one outstanding page reference, this function
41802 ** is a no-op for that case anyhow.
41805 u32 pageSize = *pPageSize;
41806 assert( pageSize==0 || (pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE) );
41807 if( (pPager->memDb==0 || pPager->dbSize==0)
41808 && sqlite3PcacheRefCount(pPager->pPCache)==0
41809 && pageSize && pageSize!=(u32)pPager->pageSize
41811 char *pNew = NULL; /* New temp space */
41812 i64 nByte = 0;
41814 if( pPager->eState>PAGER_OPEN && isOpen(pPager->fd) ){
41815 rc = sqlite3OsFileSize(pPager->fd, &nByte);
41817 if( rc==SQLITE_OK ){
41818 pNew = (char *)sqlite3PageMalloc(pageSize);
41819 if( !pNew ) rc = SQLITE_NOMEM;
41822 if( rc==SQLITE_OK ){
41823 pager_reset(pPager);
41824 pPager->dbSize = (Pgno)((nByte+pageSize-1)/pageSize);
41825 pPager->pageSize = pageSize;
41826 sqlite3PageFree(pPager->pTmpSpace);
41827 pPager->pTmpSpace = pNew;
41828 sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);
41832 *pPageSize = pPager->pageSize;
41833 if( rc==SQLITE_OK ){
41834 if( nReserve<0 ) nReserve = pPager->nReserve;
41835 assert( nReserve>=0 && nReserve<1000 );
41836 pPager->nReserve = (i16)nReserve;
41837 pagerReportSize(pPager);
41839 return rc;
41843 ** Return a pointer to the "temporary page" buffer held internally
41844 ** by the pager. This is a buffer that is big enough to hold the
41845 ** entire content of a database page. This buffer is used internally
41846 ** during rollback and will be overwritten whenever a rollback
41847 ** occurs. But other modules are free to use it too, as long as
41848 ** no rollbacks are happening.
41850 SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager *pPager){
41851 return pPager->pTmpSpace;
41855 ** Attempt to set the maximum database page count if mxPage is positive.
41856 ** Make no changes if mxPage is zero or negative. And never reduce the
41857 ** maximum page count below the current size of the database.
41859 ** Regardless of mxPage, return the current maximum page count.
41861 SQLITE_PRIVATE int sqlite3PagerMaxPageCount(Pager *pPager, int mxPage){
41862 if( mxPage>0 ){
41863 pPager->mxPgno = mxPage;
41865 assert( pPager->eState!=PAGER_OPEN ); /* Called only by OP_MaxPgcnt */
41866 assert( pPager->mxPgno>=pPager->dbSize ); /* OP_MaxPgcnt enforces this */
41867 return pPager->mxPgno;
41871 ** The following set of routines are used to disable the simulated
41872 ** I/O error mechanism. These routines are used to avoid simulated
41873 ** errors in places where we do not care about errors.
41875 ** Unless -DSQLITE_TEST=1 is used, these routines are all no-ops
41876 ** and generate no code.
41878 #ifdef SQLITE_TEST
41879 SQLITE_API extern int sqlite3_io_error_pending;
41880 SQLITE_API extern int sqlite3_io_error_hit;
41881 static int saved_cnt;
41882 void disable_simulated_io_errors(void){
41883 saved_cnt = sqlite3_io_error_pending;
41884 sqlite3_io_error_pending = -1;
41886 void enable_simulated_io_errors(void){
41887 sqlite3_io_error_pending = saved_cnt;
41889 #else
41890 # define disable_simulated_io_errors()
41891 # define enable_simulated_io_errors()
41892 #endif
41895 ** Read the first N bytes from the beginning of the file into memory
41896 ** that pDest points to.
41898 ** If the pager was opened on a transient file (zFilename==""), or
41899 ** opened on a file less than N bytes in size, the output buffer is
41900 ** zeroed and SQLITE_OK returned. The rationale for this is that this
41901 ** function is used to read database headers, and a new transient or
41902 ** zero sized database has a header than consists entirely of zeroes.
41904 ** If any IO error apart from SQLITE_IOERR_SHORT_READ is encountered,
41905 ** the error code is returned to the caller and the contents of the
41906 ** output buffer undefined.
41908 SQLITE_PRIVATE int sqlite3PagerReadFileheader(Pager *pPager, int N, unsigned char *pDest){
41909 int rc = SQLITE_OK;
41910 memset(pDest, 0, N);
41911 assert( isOpen(pPager->fd) || pPager->tempFile );
41913 /* This routine is only called by btree immediately after creating
41914 ** the Pager object. There has not been an opportunity to transition
41915 ** to WAL mode yet.
41917 assert( !pagerUseWal(pPager) );
41919 if( isOpen(pPager->fd) ){
41920 IOTRACE(("DBHDR %p 0 %d\n", pPager, N))
41921 rc = sqlite3OsRead(pPager->fd, pDest, N, 0);
41922 if( rc==SQLITE_IOERR_SHORT_READ ){
41923 rc = SQLITE_OK;
41926 return rc;
41930 ** This function may only be called when a read-transaction is open on
41931 ** the pager. It returns the total number of pages in the database.
41933 ** However, if the file is between 1 and <page-size> bytes in size, then
41934 ** this is considered a 1 page file.
41936 SQLITE_PRIVATE void sqlite3PagerPagecount(Pager *pPager, int *pnPage){
41937 assert( pPager->eState>=PAGER_READER );
41938 assert( pPager->eState!=PAGER_WRITER_FINISHED );
41939 *pnPage = (int)pPager->dbSize;
41944 ** Try to obtain a lock of type locktype on the database file. If
41945 ** a similar or greater lock is already held, this function is a no-op
41946 ** (returning SQLITE_OK immediately).
41948 ** Otherwise, attempt to obtain the lock using sqlite3OsLock(). Invoke
41949 ** the busy callback if the lock is currently not available. Repeat
41950 ** until the busy callback returns false or until the attempt to
41951 ** obtain the lock succeeds.
41953 ** Return SQLITE_OK on success and an error code if we cannot obtain
41954 ** the lock. If the lock is obtained successfully, set the Pager.state
41955 ** variable to locktype before returning.
41957 static int pager_wait_on_lock(Pager *pPager, int locktype){
41958 int rc; /* Return code */
41960 /* Check that this is either a no-op (because the requested lock is
41961 ** already held, or one of the transistions that the busy-handler
41962 ** may be invoked during, according to the comment above
41963 ** sqlite3PagerSetBusyhandler().
41965 assert( (pPager->eLock>=locktype)
41966 || (pPager->eLock==NO_LOCK && locktype==SHARED_LOCK)
41967 || (pPager->eLock==RESERVED_LOCK && locktype==EXCLUSIVE_LOCK)
41970 do {
41971 rc = pagerLockDb(pPager, locktype);
41972 }while( rc==SQLITE_BUSY && pPager->xBusyHandler(pPager->pBusyHandlerArg) );
41973 return rc;
41977 ** Function assertTruncateConstraint(pPager) checks that one of the
41978 ** following is true for all dirty pages currently in the page-cache:
41980 ** a) The page number is less than or equal to the size of the
41981 ** current database image, in pages, OR
41983 ** b) if the page content were written at this time, it would not
41984 ** be necessary to write the current content out to the sub-journal
41985 ** (as determined by function subjRequiresPage()).
41987 ** If the condition asserted by this function were not true, and the
41988 ** dirty page were to be discarded from the cache via the pagerStress()
41989 ** routine, pagerStress() would not write the current page content to
41990 ** the database file. If a savepoint transaction were rolled back after
41991 ** this happened, the correct behaviour would be to restore the current
41992 ** content of the page. However, since this content is not present in either
41993 ** the database file or the portion of the rollback journal and
41994 ** sub-journal rolled back the content could not be restored and the
41995 ** database image would become corrupt. It is therefore fortunate that
41996 ** this circumstance cannot arise.
41998 #if defined(SQLITE_DEBUG)
41999 static void assertTruncateConstraintCb(PgHdr *pPg){
42000 assert( pPg->flags&PGHDR_DIRTY );
42001 assert( !subjRequiresPage(pPg) || pPg->pgno<=pPg->pPager->dbSize );
42003 static void assertTruncateConstraint(Pager *pPager){
42004 sqlite3PcacheIterateDirty(pPager->pPCache, assertTruncateConstraintCb);
42006 #else
42007 # define assertTruncateConstraint(pPager)
42008 #endif
42011 ** Truncate the in-memory database file image to nPage pages. This
42012 ** function does not actually modify the database file on disk. It
42013 ** just sets the internal state of the pager object so that the
42014 ** truncation will be done when the current transaction is committed.
42016 SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager *pPager, Pgno nPage){
42017 assert( pPager->dbSize>=nPage );
42018 assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
42019 pPager->dbSize = nPage;
42020 assertTruncateConstraint(pPager);
42025 ** This function is called before attempting a hot-journal rollback. It
42026 ** syncs the journal file to disk, then sets pPager->journalHdr to the
42027 ** size of the journal file so that the pager_playback() routine knows
42028 ** that the entire journal file has been synced.
42030 ** Syncing a hot-journal to disk before attempting to roll it back ensures
42031 ** that if a power-failure occurs during the rollback, the process that
42032 ** attempts rollback following system recovery sees the same journal
42033 ** content as this process.
42035 ** If everything goes as planned, SQLITE_OK is returned. Otherwise,
42036 ** an SQLite error code.
42038 static int pagerSyncHotJournal(Pager *pPager){
42039 int rc = SQLITE_OK;
42040 if( !pPager->noSync ){
42041 rc = sqlite3OsSync(pPager->jfd, SQLITE_SYNC_NORMAL);
42043 if( rc==SQLITE_OK ){
42044 rc = sqlite3OsFileSize(pPager->jfd, &pPager->journalHdr);
42046 return rc;
42050 ** Shutdown the page cache. Free all memory and close all files.
42052 ** If a transaction was in progress when this routine is called, that
42053 ** transaction is rolled back. All outstanding pages are invalidated
42054 ** and their memory is freed. Any attempt to use a page associated
42055 ** with this page cache after this function returns will likely
42056 ** result in a coredump.
42058 ** This function always succeeds. If a transaction is active an attempt
42059 ** is made to roll it back. If an error occurs during the rollback
42060 ** a hot journal may be left in the filesystem but no error is returned
42061 ** to the caller.
42063 SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){
42064 u8 *pTmp = (u8 *)pPager->pTmpSpace;
42066 assert( assert_pager_state(pPager) );
42067 disable_simulated_io_errors();
42068 sqlite3BeginBenignMalloc();
42069 /* pPager->errCode = 0; */
42070 pPager->exclusiveMode = 0;
42071 #ifndef SQLITE_OMIT_WAL
42072 sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags, pPager->pageSize, pTmp);
42073 pPager->pWal = 0;
42074 #endif
42075 pager_reset(pPager);
42076 if( MEMDB ){
42077 pager_unlock(pPager);
42078 }else{
42079 /* If it is open, sync the journal file before calling UnlockAndRollback.
42080 ** If this is not done, then an unsynced portion of the open journal
42081 ** file may be played back into the database. If a power failure occurs
42082 ** while this is happening, the database could become corrupt.
42084 ** If an error occurs while trying to sync the journal, shift the pager
42085 ** into the ERROR state. This causes UnlockAndRollback to unlock the
42086 ** database and close the journal file without attempting to roll it
42087 ** back or finalize it. The next database user will have to do hot-journal
42088 ** rollback before accessing the database file.
42090 if( isOpen(pPager->jfd) ){
42091 pager_error(pPager, pagerSyncHotJournal(pPager));
42093 pagerUnlockAndRollback(pPager);
42095 sqlite3EndBenignMalloc();
42096 enable_simulated_io_errors();
42097 PAGERTRACE(("CLOSE %d\n", PAGERID(pPager)));
42098 IOTRACE(("CLOSE %p\n", pPager))
42099 sqlite3OsClose(pPager->jfd);
42100 sqlite3OsClose(pPager->fd);
42101 sqlite3PageFree(pTmp);
42102 sqlite3PcacheClose(pPager->pPCache);
42104 #ifdef SQLITE_HAS_CODEC
42105 if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
42106 #endif
42108 assert( !pPager->aSavepoint && !pPager->pInJournal );
42109 assert( !isOpen(pPager->jfd) && !isOpen(pPager->sjfd) );
42111 sqlite3_free(pPager);
42112 return SQLITE_OK;
42115 #if !defined(NDEBUG) || defined(SQLITE_TEST)
42117 ** Return the page number for page pPg.
42119 SQLITE_PRIVATE Pgno sqlite3PagerPagenumber(DbPage *pPg){
42120 return pPg->pgno;
42122 #endif
42125 ** Increment the reference count for page pPg.
42127 SQLITE_PRIVATE void sqlite3PagerRef(DbPage *pPg){
42128 sqlite3PcacheRef(pPg);
42132 ** Sync the journal. In other words, make sure all the pages that have
42133 ** been written to the journal have actually reached the surface of the
42134 ** disk and can be restored in the event of a hot-journal rollback.
42136 ** If the Pager.noSync flag is set, then this function is a no-op.
42137 ** Otherwise, the actions required depend on the journal-mode and the
42138 ** device characteristics of the the file-system, as follows:
42140 ** * If the journal file is an in-memory journal file, no action need
42141 ** be taken.
42143 ** * Otherwise, if the device does not support the SAFE_APPEND property,
42144 ** then the nRec field of the most recently written journal header
42145 ** is updated to contain the number of journal records that have
42146 ** been written following it. If the pager is operating in full-sync
42147 ** mode, then the journal file is synced before this field is updated.
42149 ** * If the device does not support the SEQUENTIAL property, then
42150 ** journal file is synced.
42152 ** Or, in pseudo-code:
42154 ** if( NOT <in-memory journal> ){
42155 ** if( NOT SAFE_APPEND ){
42156 ** if( <full-sync mode> ) xSync(<journal file>);
42157 ** <update nRec field>
42158 ** }
42159 ** if( NOT SEQUENTIAL ) xSync(<journal file>);
42160 ** }
42162 ** If successful, this routine clears the PGHDR_NEED_SYNC flag of every
42163 ** page currently held in memory before returning SQLITE_OK. If an IO
42164 ** error is encountered, then the IO error code is returned to the caller.
42166 static int syncJournal(Pager *pPager, int newHdr){
42167 int rc; /* Return code */
42169 assert( pPager->eState==PAGER_WRITER_CACHEMOD
42170 || pPager->eState==PAGER_WRITER_DBMOD
42172 assert( assert_pager_state(pPager) );
42173 assert( !pagerUseWal(pPager) );
42175 rc = sqlite3PagerExclusiveLock(pPager);
42176 if( rc!=SQLITE_OK ) return rc;
42178 if( !pPager->noSync ){
42179 assert( !pPager->tempFile );
42180 if( isOpen(pPager->jfd) && pPager->journalMode!=PAGER_JOURNALMODE_MEMORY ){
42181 const int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
42182 assert( isOpen(pPager->jfd) );
42184 if( 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
42185 /* This block deals with an obscure problem. If the last connection
42186 ** that wrote to this database was operating in persistent-journal
42187 ** mode, then the journal file may at this point actually be larger
42188 ** than Pager.journalOff bytes. If the next thing in the journal
42189 ** file happens to be a journal-header (written as part of the
42190 ** previous connection's transaction), and a crash or power-failure
42191 ** occurs after nRec is updated but before this connection writes
42192 ** anything else to the journal file (or commits/rolls back its
42193 ** transaction), then SQLite may become confused when doing the
42194 ** hot-journal rollback following recovery. It may roll back all
42195 ** of this connections data, then proceed to rolling back the old,
42196 ** out-of-date data that follows it. Database corruption.
42198 ** To work around this, if the journal file does appear to contain
42199 ** a valid header following Pager.journalOff, then write a 0x00
42200 ** byte to the start of it to prevent it from being recognized.
42202 ** Variable iNextHdrOffset is set to the offset at which this
42203 ** problematic header will occur, if it exists. aMagic is used
42204 ** as a temporary buffer to inspect the first couple of bytes of
42205 ** the potential journal header.
42207 i64 iNextHdrOffset;
42208 u8 aMagic[8];
42209 u8 zHeader[sizeof(aJournalMagic)+4];
42211 memcpy(zHeader, aJournalMagic, sizeof(aJournalMagic));
42212 put32bits(&zHeader[sizeof(aJournalMagic)], pPager->nRec);
42214 iNextHdrOffset = journalHdrOffset(pPager);
42215 rc = sqlite3OsRead(pPager->jfd, aMagic, 8, iNextHdrOffset);
42216 if( rc==SQLITE_OK && 0==memcmp(aMagic, aJournalMagic, 8) ){
42217 static const u8 zerobyte = 0;
42218 rc = sqlite3OsWrite(pPager->jfd, &zerobyte, 1, iNextHdrOffset);
42220 if( rc!=SQLITE_OK && rc!=SQLITE_IOERR_SHORT_READ ){
42221 return rc;
42224 /* Write the nRec value into the journal file header. If in
42225 ** full-synchronous mode, sync the journal first. This ensures that
42226 ** all data has really hit the disk before nRec is updated to mark
42227 ** it as a candidate for rollback.
42229 ** This is not required if the persistent media supports the
42230 ** SAFE_APPEND property. Because in this case it is not possible
42231 ** for garbage data to be appended to the file, the nRec field
42232 ** is populated with 0xFFFFFFFF when the journal header is written
42233 ** and never needs to be updated.
42235 if( pPager->fullSync && 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
42236 PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
42237 IOTRACE(("JSYNC %p\n", pPager))
42238 rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);
42239 if( rc!=SQLITE_OK ) return rc;
42241 IOTRACE(("JHDR %p %lld\n", pPager, pPager->journalHdr));
42242 rc = sqlite3OsWrite(
42243 pPager->jfd, zHeader, sizeof(zHeader), pPager->journalHdr
42245 if( rc!=SQLITE_OK ) return rc;
42247 if( 0==(iDc&SQLITE_IOCAP_SEQUENTIAL) ){
42248 PAGERTRACE(("SYNC journal of %d\n", PAGERID(pPager)));
42249 IOTRACE(("JSYNC %p\n", pPager))
42250 rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags|
42251 (pPager->syncFlags==SQLITE_SYNC_FULL?SQLITE_SYNC_DATAONLY:0)
42253 if( rc!=SQLITE_OK ) return rc;
42256 pPager->journalHdr = pPager->journalOff;
42257 if( newHdr && 0==(iDc&SQLITE_IOCAP_SAFE_APPEND) ){
42258 pPager->nRec = 0;
42259 rc = writeJournalHdr(pPager);
42260 if( rc!=SQLITE_OK ) return rc;
42262 }else{
42263 pPager->journalHdr = pPager->journalOff;
42267 /* Unless the pager is in noSync mode, the journal file was just
42268 ** successfully synced. Either way, clear the PGHDR_NEED_SYNC flag on
42269 ** all pages.
42271 sqlite3PcacheClearSyncFlags(pPager->pPCache);
42272 pPager->eState = PAGER_WRITER_DBMOD;
42273 assert( assert_pager_state(pPager) );
42274 return SQLITE_OK;
42278 ** The argument is the first in a linked list of dirty pages connected
42279 ** by the PgHdr.pDirty pointer. This function writes each one of the
42280 ** in-memory pages in the list to the database file. The argument may
42281 ** be NULL, representing an empty list. In this case this function is
42282 ** a no-op.
42284 ** The pager must hold at least a RESERVED lock when this function
42285 ** is called. Before writing anything to the database file, this lock
42286 ** is upgraded to an EXCLUSIVE lock. If the lock cannot be obtained,
42287 ** SQLITE_BUSY is returned and no data is written to the database file.
42289 ** If the pager is a temp-file pager and the actual file-system file
42290 ** is not yet open, it is created and opened before any data is
42291 ** written out.
42293 ** Once the lock has been upgraded and, if necessary, the file opened,
42294 ** the pages are written out to the database file in list order. Writing
42295 ** a page is skipped if it meets either of the following criteria:
42297 ** * The page number is greater than Pager.dbSize, or
42298 ** * The PGHDR_DONT_WRITE flag is set on the page.
42300 ** If writing out a page causes the database file to grow, Pager.dbFileSize
42301 ** is updated accordingly. If page 1 is written out, then the value cached
42302 ** in Pager.dbFileVers[] is updated to match the new value stored in
42303 ** the database file.
42305 ** If everything is successful, SQLITE_OK is returned. If an IO error
42306 ** occurs, an IO error code is returned. Or, if the EXCLUSIVE lock cannot
42307 ** be obtained, SQLITE_BUSY is returned.
42309 static int pager_write_pagelist(Pager *pPager, PgHdr *pList){
42310 int rc = SQLITE_OK; /* Return code */
42312 /* This function is only called for rollback pagers in WRITER_DBMOD state. */
42313 assert( !pagerUseWal(pPager) );
42314 assert( pPager->eState==PAGER_WRITER_DBMOD );
42315 assert( pPager->eLock==EXCLUSIVE_LOCK );
42317 /* If the file is a temp-file has not yet been opened, open it now. It
42318 ** is not possible for rc to be other than SQLITE_OK if this branch
42319 ** is taken, as pager_wait_on_lock() is a no-op for temp-files.
42321 if( !isOpen(pPager->fd) ){
42322 assert( pPager->tempFile && rc==SQLITE_OK );
42323 rc = pagerOpentemp(pPager, pPager->fd, pPager->vfsFlags);
42326 /* Before the first write, give the VFS a hint of what the final
42327 ** file size will be.
42329 assert( rc!=SQLITE_OK || isOpen(pPager->fd) );
42330 if( rc==SQLITE_OK && pPager->dbSize>pPager->dbHintSize ){
42331 sqlite3_int64 szFile = pPager->pageSize * (sqlite3_int64)pPager->dbSize;
42332 sqlite3OsFileControlHint(pPager->fd, SQLITE_FCNTL_SIZE_HINT, &szFile);
42333 pPager->dbHintSize = pPager->dbSize;
42336 while( rc==SQLITE_OK && pList ){
42337 Pgno pgno = pList->pgno;
42339 /* If there are dirty pages in the page cache with page numbers greater
42340 ** than Pager.dbSize, this means sqlite3PagerTruncateImage() was called to
42341 ** make the file smaller (presumably by auto-vacuum code). Do not write
42342 ** any such pages to the file.
42344 ** Also, do not write out any page that has the PGHDR_DONT_WRITE flag
42345 ** set (set by sqlite3PagerDontWrite()).
42347 if( pgno<=pPager->dbSize && 0==(pList->flags&PGHDR_DONT_WRITE) ){
42348 i64 offset = (pgno-1)*(i64)pPager->pageSize; /* Offset to write */
42349 char *pData; /* Data to write */
42351 assert( (pList->flags&PGHDR_NEED_SYNC)==0 );
42352 if( pList->pgno==1 ) pager_write_changecounter(pList);
42354 /* Encode the database */
42355 CODEC2(pPager, pList->pData, pgno, 6, return SQLITE_NOMEM, pData);
42357 /* Write out the page data. */
42358 rc = sqlite3OsWrite(pPager->fd, pData, pPager->pageSize, offset);
42360 /* If page 1 was just written, update Pager.dbFileVers to match
42361 ** the value now stored in the database file. If writing this
42362 ** page caused the database file to grow, update dbFileSize.
42364 if( pgno==1 ){
42365 memcpy(&pPager->dbFileVers, &pData[24], sizeof(pPager->dbFileVers));
42367 if( pgno>pPager->dbFileSize ){
42368 pPager->dbFileSize = pgno;
42371 /* Update any backup objects copying the contents of this pager. */
42372 sqlite3BackupUpdate(pPager->pBackup, pgno, (u8*)pList->pData);
42374 PAGERTRACE(("STORE %d page %d hash(%08x)\n",
42375 PAGERID(pPager), pgno, pager_pagehash(pList)));
42376 IOTRACE(("PGOUT %p %d\n", pPager, pgno));
42377 PAGER_INCR(sqlite3_pager_writedb_count);
42378 PAGER_INCR(pPager->nWrite);
42379 }else{
42380 PAGERTRACE(("NOSTORE %d page %d\n", PAGERID(pPager), pgno));
42382 pager_set_pagehash(pList);
42383 pList = pList->pDirty;
42386 return rc;
42390 ** Ensure that the sub-journal file is open. If it is already open, this
42391 ** function is a no-op.
42393 ** SQLITE_OK is returned if everything goes according to plan. An
42394 ** SQLITE_IOERR_XXX error code is returned if a call to sqlite3OsOpen()
42395 ** fails.
42397 static int openSubJournal(Pager *pPager){
42398 int rc = SQLITE_OK;
42399 if( !isOpen(pPager->sjfd) ){
42400 if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY || pPager->subjInMemory ){
42401 sqlite3MemJournalOpen(pPager->sjfd);
42402 }else{
42403 rc = pagerOpentemp(pPager, pPager->sjfd, SQLITE_OPEN_SUBJOURNAL);
42406 return rc;
42410 ** Append a record of the current state of page pPg to the sub-journal.
42411 ** It is the callers responsibility to use subjRequiresPage() to check
42412 ** that it is really required before calling this function.
42414 ** If successful, set the bit corresponding to pPg->pgno in the bitvecs
42415 ** for all open savepoints before returning.
42417 ** This function returns SQLITE_OK if everything is successful, an IO
42418 ** error code if the attempt to write to the sub-journal fails, or
42419 ** SQLITE_NOMEM if a malloc fails while setting a bit in a savepoint
42420 ** bitvec.
42422 static int subjournalPage(PgHdr *pPg){
42423 int rc = SQLITE_OK;
42424 Pager *pPager = pPg->pPager;
42425 if( pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
42427 /* Open the sub-journal, if it has not already been opened */
42428 assert( pPager->useJournal );
42429 assert( isOpen(pPager->jfd) || pagerUseWal(pPager) );
42430 assert( isOpen(pPager->sjfd) || pPager->nSubRec==0 );
42431 assert( pagerUseWal(pPager)
42432 || pageInJournal(pPg)
42433 || pPg->pgno>pPager->dbOrigSize
42435 rc = openSubJournal(pPager);
42437 /* If the sub-journal was opened successfully (or was already open),
42438 ** write the journal record into the file. */
42439 if( rc==SQLITE_OK ){
42440 void *pData = pPg->pData;
42441 i64 offset = (i64)pPager->nSubRec*(4+pPager->pageSize);
42442 char *pData2;
42444 CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
42445 PAGERTRACE(("STMT-JOURNAL %d page %d\n", PAGERID(pPager), pPg->pgno));
42446 rc = write32bits(pPager->sjfd, offset, pPg->pgno);
42447 if( rc==SQLITE_OK ){
42448 rc = sqlite3OsWrite(pPager->sjfd, pData2, pPager->pageSize, offset+4);
42452 if( rc==SQLITE_OK ){
42453 pPager->nSubRec++;
42454 assert( pPager->nSavepoint>0 );
42455 rc = addToSavepointBitvecs(pPager, pPg->pgno);
42457 return rc;
42461 ** This function is called by the pcache layer when it has reached some
42462 ** soft memory limit. The first argument is a pointer to a Pager object
42463 ** (cast as a void*). The pager is always 'purgeable' (not an in-memory
42464 ** database). The second argument is a reference to a page that is
42465 ** currently dirty but has no outstanding references. The page
42466 ** is always associated with the Pager object passed as the first
42467 ** argument.
42469 ** The job of this function is to make pPg clean by writing its contents
42470 ** out to the database file, if possible. This may involve syncing the
42471 ** journal file.
42473 ** If successful, sqlite3PcacheMakeClean() is called on the page and
42474 ** SQLITE_OK returned. If an IO error occurs while trying to make the
42475 ** page clean, the IO error code is returned. If the page cannot be
42476 ** made clean for some other reason, but no error occurs, then SQLITE_OK
42477 ** is returned by sqlite3PcacheMakeClean() is not called.
42479 static int pagerStress(void *p, PgHdr *pPg){
42480 Pager *pPager = (Pager *)p;
42481 int rc = SQLITE_OK;
42483 assert( pPg->pPager==pPager );
42484 assert( pPg->flags&PGHDR_DIRTY );
42486 /* The doNotSyncSpill flag is set during times when doing a sync of
42487 ** journal (and adding a new header) is not allowed. This occurs
42488 ** during calls to sqlite3PagerWrite() while trying to journal multiple
42489 ** pages belonging to the same sector.
42491 ** The doNotSpill flag inhibits all cache spilling regardless of whether
42492 ** or not a sync is required. This is set during a rollback.
42494 ** Spilling is also prohibited when in an error state since that could
42495 ** lead to database corruption. In the current implementaton it
42496 ** is impossible for sqlite3PcacheFetch() to be called with createFlag==1
42497 ** while in the error state, hence it is impossible for this routine to
42498 ** be called in the error state. Nevertheless, we include a NEVER()
42499 ** test for the error state as a safeguard against future changes.
42501 if( NEVER(pPager->errCode) ) return SQLITE_OK;
42502 if( pPager->doNotSpill ) return SQLITE_OK;
42503 if( pPager->doNotSyncSpill && (pPg->flags & PGHDR_NEED_SYNC)!=0 ){
42504 return SQLITE_OK;
42507 pPg->pDirty = 0;
42508 if( pagerUseWal(pPager) ){
42509 /* Write a single frame for this page to the log. */
42510 if( subjRequiresPage(pPg) ){
42511 rc = subjournalPage(pPg);
42513 if( rc==SQLITE_OK ){
42514 rc = pagerWalFrames(pPager, pPg, 0, 0);
42516 }else{
42518 /* Sync the journal file if required. */
42519 if( pPg->flags&PGHDR_NEED_SYNC
42520 || pPager->eState==PAGER_WRITER_CACHEMOD
42522 rc = syncJournal(pPager, 1);
42525 /* If the page number of this page is larger than the current size of
42526 ** the database image, it may need to be written to the sub-journal.
42527 ** This is because the call to pager_write_pagelist() below will not
42528 ** actually write data to the file in this case.
42530 ** Consider the following sequence of events:
42532 ** BEGIN;
42533 ** <journal page X>
42534 ** <modify page X>
42535 ** SAVEPOINT sp;
42536 ** <shrink database file to Y pages>
42537 ** pagerStress(page X)
42538 ** ROLLBACK TO sp;
42540 ** If (X>Y), then when pagerStress is called page X will not be written
42541 ** out to the database file, but will be dropped from the cache. Then,
42542 ** following the "ROLLBACK TO sp" statement, reading page X will read
42543 ** data from the database file. This will be the copy of page X as it
42544 ** was when the transaction started, not as it was when "SAVEPOINT sp"
42545 ** was executed.
42547 ** The solution is to write the current data for page X into the
42548 ** sub-journal file now (if it is not already there), so that it will
42549 ** be restored to its current value when the "ROLLBACK TO sp" is
42550 ** executed.
42552 if( NEVER(
42553 rc==SQLITE_OK && pPg->pgno>pPager->dbSize && subjRequiresPage(pPg)
42554 ) ){
42555 rc = subjournalPage(pPg);
42558 /* Write the contents of the page out to the database file. */
42559 if( rc==SQLITE_OK ){
42560 assert( (pPg->flags&PGHDR_NEED_SYNC)==0 );
42561 rc = pager_write_pagelist(pPager, pPg);
42565 /* Mark the page as clean. */
42566 if( rc==SQLITE_OK ){
42567 PAGERTRACE(("STRESS %d page %d\n", PAGERID(pPager), pPg->pgno));
42568 sqlite3PcacheMakeClean(pPg);
42571 return pager_error(pPager, rc);
42576 ** Allocate and initialize a new Pager object and put a pointer to it
42577 ** in *ppPager. The pager should eventually be freed by passing it
42578 ** to sqlite3PagerClose().
42580 ** The zFilename argument is the path to the database file to open.
42581 ** If zFilename is NULL then a randomly-named temporary file is created
42582 ** and used as the file to be cached. Temporary files are be deleted
42583 ** automatically when they are closed. If zFilename is ":memory:" then
42584 ** all information is held in cache. It is never written to disk.
42585 ** This can be used to implement an in-memory database.
42587 ** The nExtra parameter specifies the number of bytes of space allocated
42588 ** along with each page reference. This space is available to the user
42589 ** via the sqlite3PagerGetExtra() API.
42591 ** The flags argument is used to specify properties that affect the
42592 ** operation of the pager. It should be passed some bitwise combination
42593 ** of the PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK flags.
42595 ** The vfsFlags parameter is a bitmask to pass to the flags parameter
42596 ** of the xOpen() method of the supplied VFS when opening files.
42598 ** If the pager object is allocated and the specified file opened
42599 ** successfully, SQLITE_OK is returned and *ppPager set to point to
42600 ** the new pager object. If an error occurs, *ppPager is set to NULL
42601 ** and error code returned. This function may return SQLITE_NOMEM
42602 ** (sqlite3Malloc() is used to allocate memory), SQLITE_CANTOPEN or
42603 ** various SQLITE_IO_XXX errors.
42605 SQLITE_PRIVATE int sqlite3PagerOpen(
42606 sqlite3_vfs *pVfs, /* The virtual file system to use */
42607 Pager **ppPager, /* OUT: Return the Pager structure here */
42608 const char *zFilename, /* Name of the database file to open */
42609 int nExtra, /* Extra bytes append to each in-memory page */
42610 int flags, /* flags controlling this file */
42611 int vfsFlags, /* flags passed through to sqlite3_vfs.xOpen() */
42612 void (*xReinit)(DbPage*) /* Function to reinitialize pages */
42614 u8 *pPtr;
42615 Pager *pPager = 0; /* Pager object to allocate and return */
42616 int rc = SQLITE_OK; /* Return code */
42617 int tempFile = 0; /* True for temp files (incl. in-memory files) */
42618 int memDb = 0; /* True if this is an in-memory file */
42619 int readOnly = 0; /* True if this is a read-only file */
42620 int journalFileSize; /* Bytes to allocate for each journal fd */
42621 char *zPathname = 0; /* Full path to database file */
42622 int nPathname = 0; /* Number of bytes in zPathname */
42623 int useJournal = (flags & PAGER_OMIT_JOURNAL)==0; /* False to omit journal */
42624 int noReadlock = (flags & PAGER_NO_READLOCK)!=0; /* True to omit read-lock */
42625 int pcacheSize = sqlite3PcacheSize(); /* Bytes to allocate for PCache */
42626 u32 szPageDflt = SQLITE_DEFAULT_PAGE_SIZE; /* Default page size */
42627 const char *zUri = 0; /* URI args to copy */
42628 int nUri = 0; /* Number of bytes of URI args at *zUri */
42630 /* Figure out how much space is required for each journal file-handle
42631 ** (there are two of them, the main journal and the sub-journal). This
42632 ** is the maximum space required for an in-memory journal file handle
42633 ** and a regular journal file-handle. Note that a "regular journal-handle"
42634 ** may be a wrapper capable of caching the first portion of the journal
42635 ** file in memory to implement the atomic-write optimization (see
42636 ** source file journal.c).
42638 if( sqlite3JournalSize(pVfs)>sqlite3MemJournalSize() ){
42639 journalFileSize = ROUND8(sqlite3JournalSize(pVfs));
42640 }else{
42641 journalFileSize = ROUND8(sqlite3MemJournalSize());
42644 /* Set the output variable to NULL in case an error occurs. */
42645 *ppPager = 0;
42647 #ifndef SQLITE_OMIT_MEMORYDB
42648 if( flags & PAGER_MEMORY ){
42649 memDb = 1;
42650 zFilename = 0;
42652 #endif
42654 /* Compute and store the full pathname in an allocated buffer pointed
42655 ** to by zPathname, length nPathname. Or, if this is a temporary file,
42656 ** leave both nPathname and zPathname set to 0.
42658 if( zFilename && zFilename[0] ){
42659 const char *z;
42660 nPathname = pVfs->mxPathname+1;
42661 zPathname = sqlite3Malloc(nPathname*2);
42662 if( zPathname==0 ){
42663 return SQLITE_NOMEM;
42665 zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */
42666 rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);
42667 nPathname = sqlite3Strlen30(zPathname);
42668 z = zUri = &zFilename[sqlite3Strlen30(zFilename)+1];
42669 while( *z ){
42670 z += sqlite3Strlen30(z)+1;
42671 z += sqlite3Strlen30(z)+1;
42673 nUri = (int)(&z[1] - zUri);
42674 assert( nUri>=0 );
42675 if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){
42676 /* This branch is taken when the journal path required by
42677 ** the database being opened will be more than pVfs->mxPathname
42678 ** bytes in length. This means the database cannot be opened,
42679 ** as it will not be possible to open the journal file or even
42680 ** check for a hot-journal before reading.
42682 rc = SQLITE_CANTOPEN_BKPT;
42684 if( rc!=SQLITE_OK ){
42685 sqlite3_free(zPathname);
42686 return rc;
42690 /* Allocate memory for the Pager structure, PCache object, the
42691 ** three file descriptors, the database file name and the journal
42692 ** file name. The layout in memory is as follows:
42694 ** Pager object (sizeof(Pager) bytes)
42695 ** PCache object (sqlite3PcacheSize() bytes)
42696 ** Database file handle (pVfs->szOsFile bytes)
42697 ** Sub-journal file handle (journalFileSize bytes)
42698 ** Main journal file handle (journalFileSize bytes)
42699 ** Database file name (nPathname+1 bytes)
42700 ** Journal file name (nPathname+8+1 bytes)
42702 pPtr = (u8 *)sqlite3MallocZero(
42703 ROUND8(sizeof(*pPager)) + /* Pager structure */
42704 ROUND8(pcacheSize) + /* PCache object */
42705 ROUND8(pVfs->szOsFile) + /* The main db file */
42706 journalFileSize * 2 + /* The two journal files */
42707 nPathname + 1 + nUri + /* zFilename */
42708 nPathname + 8 + 2 /* zJournal */
42709 #ifndef SQLITE_OMIT_WAL
42710 + nPathname + 4 + 2 /* zWal */
42711 #endif
42713 assert( EIGHT_BYTE_ALIGNMENT(SQLITE_INT_TO_PTR(journalFileSize)) );
42714 if( !pPtr ){
42715 sqlite3_free(zPathname);
42716 return SQLITE_NOMEM;
42718 pPager = (Pager*)(pPtr);
42719 pPager->pPCache = (PCache*)(pPtr += ROUND8(sizeof(*pPager)));
42720 pPager->fd = (sqlite3_file*)(pPtr += ROUND8(pcacheSize));
42721 pPager->sjfd = (sqlite3_file*)(pPtr += ROUND8(pVfs->szOsFile));
42722 pPager->jfd = (sqlite3_file*)(pPtr += journalFileSize);
42723 pPager->zFilename = (char*)(pPtr += journalFileSize);
42724 assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) );
42726 /* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */
42727 if( zPathname ){
42728 assert( nPathname>0 );
42729 pPager->zJournal = (char*)(pPtr += nPathname + 1 + nUri);
42730 memcpy(pPager->zFilename, zPathname, nPathname);
42731 memcpy(&pPager->zFilename[nPathname+1], zUri, nUri);
42732 memcpy(pPager->zJournal, zPathname, nPathname);
42733 memcpy(&pPager->zJournal[nPathname], "-journal\000", 8+1);
42734 sqlite3FileSuffix3(pPager->zFilename, pPager->zJournal);
42735 #ifndef SQLITE_OMIT_WAL
42736 pPager->zWal = &pPager->zJournal[nPathname+8+1];
42737 memcpy(pPager->zWal, zPathname, nPathname);
42738 memcpy(&pPager->zWal[nPathname], "-wal\000", 4+1);
42739 sqlite3FileSuffix3(pPager->zFilename, pPager->zWal);
42740 #endif
42741 sqlite3_free(zPathname);
42743 pPager->pVfs = pVfs;
42744 pPager->vfsFlags = vfsFlags;
42746 /* Open the pager file.
42748 if( zFilename && zFilename[0] ){
42749 int fout = 0; /* VFS flags returned by xOpen() */
42750 rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout);
42751 assert( !memDb );
42752 readOnly = (fout&SQLITE_OPEN_READONLY);
42754 /* If the file was successfully opened for read/write access,
42755 ** choose a default page size in case we have to create the
42756 ** database file. The default page size is the maximum of:
42758 ** + SQLITE_DEFAULT_PAGE_SIZE,
42759 ** + The value returned by sqlite3OsSectorSize()
42760 ** + The largest page size that can be written atomically.
42762 if( rc==SQLITE_OK && !readOnly ){
42763 setSectorSize(pPager);
42764 assert(SQLITE_DEFAULT_PAGE_SIZE<=SQLITE_MAX_DEFAULT_PAGE_SIZE);
42765 if( szPageDflt<pPager->sectorSize ){
42766 if( pPager->sectorSize>SQLITE_MAX_DEFAULT_PAGE_SIZE ){
42767 szPageDflt = SQLITE_MAX_DEFAULT_PAGE_SIZE;
42768 }else{
42769 szPageDflt = (u32)pPager->sectorSize;
42772 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
42774 int iDc = sqlite3OsDeviceCharacteristics(pPager->fd);
42775 int ii;
42776 assert(SQLITE_IOCAP_ATOMIC512==(512>>8));
42777 assert(SQLITE_IOCAP_ATOMIC64K==(65536>>8));
42778 assert(SQLITE_MAX_DEFAULT_PAGE_SIZE<=65536);
42779 for(ii=szPageDflt; ii<=SQLITE_MAX_DEFAULT_PAGE_SIZE; ii=ii*2){
42780 if( iDc&(SQLITE_IOCAP_ATOMIC|(ii>>8)) ){
42781 szPageDflt = ii;
42785 #endif
42787 }else{
42788 /* If a temporary file is requested, it is not opened immediately.
42789 ** In this case we accept the default page size and delay actually
42790 ** opening the file until the first call to OsWrite().
42792 ** This branch is also run for an in-memory database. An in-memory
42793 ** database is the same as a temp-file that is never written out to
42794 ** disk and uses an in-memory rollback journal.
42796 tempFile = 1;
42797 pPager->eState = PAGER_READER;
42798 pPager->eLock = EXCLUSIVE_LOCK;
42799 readOnly = (vfsFlags&SQLITE_OPEN_READONLY);
42802 /* The following call to PagerSetPagesize() serves to set the value of
42803 ** Pager.pageSize and to allocate the Pager.pTmpSpace buffer.
42805 if( rc==SQLITE_OK ){
42806 assert( pPager->memDb==0 );
42807 rc = sqlite3PagerSetPagesize(pPager, &szPageDflt, -1);
42808 testcase( rc!=SQLITE_OK );
42811 /* If an error occurred in either of the blocks above, free the
42812 ** Pager structure and close the file.
42814 if( rc!=SQLITE_OK ){
42815 assert( !pPager->pTmpSpace );
42816 sqlite3OsClose(pPager->fd);
42817 sqlite3_free(pPager);
42818 return rc;
42821 /* Initialize the PCache object. */
42822 assert( nExtra<1000 );
42823 nExtra = ROUND8(nExtra);
42824 sqlite3PcacheOpen(szPageDflt, nExtra, !memDb,
42825 !memDb?pagerStress:0, (void *)pPager, pPager->pPCache);
42827 PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename));
42828 IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename))
42830 pPager->useJournal = (u8)useJournal;
42831 pPager->noReadlock = (noReadlock && readOnly) ?1:0;
42832 /* pPager->stmtOpen = 0; */
42833 /* pPager->stmtInUse = 0; */
42834 /* pPager->nRef = 0; */
42835 /* pPager->stmtSize = 0; */
42836 /* pPager->stmtJSize = 0; */
42837 /* pPager->nPage = 0; */
42838 pPager->mxPgno = SQLITE_MAX_PAGE_COUNT;
42839 /* pPager->state = PAGER_UNLOCK; */
42840 #if 0
42841 assert( pPager->state == (tempFile ? PAGER_EXCLUSIVE : PAGER_UNLOCK) );
42842 #endif
42843 /* pPager->errMask = 0; */
42844 pPager->tempFile = (u8)tempFile;
42845 assert( tempFile==PAGER_LOCKINGMODE_NORMAL
42846 || tempFile==PAGER_LOCKINGMODE_EXCLUSIVE );
42847 assert( PAGER_LOCKINGMODE_EXCLUSIVE==1 );
42848 pPager->exclusiveMode = (u8)tempFile;
42849 pPager->changeCountDone = pPager->tempFile;
42850 pPager->memDb = (u8)memDb;
42851 pPager->readOnly = (u8)readOnly;
42852 assert( useJournal || pPager->tempFile );
42853 pPager->noSync = pPager->tempFile;
42854 if( pPager->noSync ){
42855 assert( pPager->fullSync==0 );
42856 assert( pPager->syncFlags==0 );
42857 assert( pPager->walSyncFlags==0 );
42858 assert( pPager->ckptSyncFlags==0 );
42859 }else{
42860 pPager->fullSync = 1;
42861 pPager->syncFlags = SQLITE_SYNC_NORMAL;
42862 pPager->walSyncFlags = SQLITE_SYNC_NORMAL | WAL_SYNC_TRANSACTIONS;
42863 pPager->ckptSyncFlags = SQLITE_SYNC_NORMAL;
42865 /* pPager->pFirst = 0; */
42866 /* pPager->pFirstSynced = 0; */
42867 /* pPager->pLast = 0; */
42868 pPager->nExtra = (u16)nExtra;
42869 pPager->journalSizeLimit = SQLITE_DEFAULT_JOURNAL_SIZE_LIMIT;
42870 assert( isOpen(pPager->fd) || tempFile );
42871 setSectorSize(pPager);
42872 if( !useJournal ){
42873 pPager->journalMode = PAGER_JOURNALMODE_OFF;
42874 }else if( memDb ){
42875 pPager->journalMode = PAGER_JOURNALMODE_MEMORY;
42877 /* pPager->xBusyHandler = 0; */
42878 /* pPager->pBusyHandlerArg = 0; */
42879 pPager->xReiniter = xReinit;
42880 /* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */
42882 *ppPager = pPager;
42883 return SQLITE_OK;
42889 ** This function is called after transitioning from PAGER_UNLOCK to
42890 ** PAGER_SHARED state. It tests if there is a hot journal present in
42891 ** the file-system for the given pager. A hot journal is one that
42892 ** needs to be played back. According to this function, a hot-journal
42893 ** file exists if the following criteria are met:
42895 ** * The journal file exists in the file system, and
42896 ** * No process holds a RESERVED or greater lock on the database file, and
42897 ** * The database file itself is greater than 0 bytes in size, and
42898 ** * The first byte of the journal file exists and is not 0x00.
42900 ** If the current size of the database file is 0 but a journal file
42901 ** exists, that is probably an old journal left over from a prior
42902 ** database with the same name. In this case the journal file is
42903 ** just deleted using OsDelete, *pExists is set to 0 and SQLITE_OK
42904 ** is returned.
42906 ** This routine does not check if there is a master journal filename
42907 ** at the end of the file. If there is, and that master journal file
42908 ** does not exist, then the journal file is not really hot. In this
42909 ** case this routine will return a false-positive. The pager_playback()
42910 ** routine will discover that the journal file is not really hot and
42911 ** will not roll it back.
42913 ** If a hot-journal file is found to exist, *pExists is set to 1 and
42914 ** SQLITE_OK returned. If no hot-journal file is present, *pExists is
42915 ** set to 0 and SQLITE_OK returned. If an IO error occurs while trying
42916 ** to determine whether or not a hot-journal file exists, the IO error
42917 ** code is returned and the value of *pExists is undefined.
42919 static int hasHotJournal(Pager *pPager, int *pExists){
42920 sqlite3_vfs * const pVfs = pPager->pVfs;
42921 int rc = SQLITE_OK; /* Return code */
42922 int exists = 1; /* True if a journal file is present */
42923 int jrnlOpen = !!isOpen(pPager->jfd);
42925 assert( pPager->useJournal );
42926 assert( isOpen(pPager->fd) );
42927 assert( pPager->eState==PAGER_OPEN );
42929 assert( jrnlOpen==0 || ( sqlite3OsDeviceCharacteristics(pPager->jfd) &
42930 SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN
42933 *pExists = 0;
42934 if( !jrnlOpen ){
42935 rc = sqlite3OsAccess(pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &exists);
42937 if( rc==SQLITE_OK && exists ){
42938 int locked = 0; /* True if some process holds a RESERVED lock */
42940 /* Race condition here: Another process might have been holding the
42941 ** the RESERVED lock and have a journal open at the sqlite3OsAccess()
42942 ** call above, but then delete the journal and drop the lock before
42943 ** we get to the following sqlite3OsCheckReservedLock() call. If that
42944 ** is the case, this routine might think there is a hot journal when
42945 ** in fact there is none. This results in a false-positive which will
42946 ** be dealt with by the playback routine. Ticket #3883.
42948 rc = sqlite3OsCheckReservedLock(pPager->fd, &locked);
42949 if( rc==SQLITE_OK && !locked ){
42950 Pgno nPage; /* Number of pages in database file */
42952 /* Check the size of the database file. If it consists of 0 pages,
42953 ** then delete the journal file. See the header comment above for
42954 ** the reasoning here. Delete the obsolete journal file under
42955 ** a RESERVED lock to avoid race conditions and to avoid violating
42956 ** [H33020].
42958 rc = pagerPagecount(pPager, &nPage);
42959 if( rc==SQLITE_OK ){
42960 if( nPage==0 ){
42961 sqlite3BeginBenignMalloc();
42962 if( pagerLockDb(pPager, RESERVED_LOCK)==SQLITE_OK ){
42963 sqlite3OsDelete(pVfs, pPager->zJournal, 0);
42964 if( !pPager->exclusiveMode ) pagerUnlockDb(pPager, SHARED_LOCK);
42966 sqlite3EndBenignMalloc();
42967 }else{
42968 /* The journal file exists and no other connection has a reserved
42969 ** or greater lock on the database file. Now check that there is
42970 ** at least one non-zero bytes at the start of the journal file.
42971 ** If there is, then we consider this journal to be hot. If not,
42972 ** it can be ignored.
42974 if( !jrnlOpen ){
42975 int f = SQLITE_OPEN_READONLY|SQLITE_OPEN_MAIN_JOURNAL;
42976 rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &f);
42978 if( rc==SQLITE_OK ){
42979 u8 first = 0;
42980 rc = sqlite3OsRead(pPager->jfd, (void *)&first, 1, 0);
42981 if( rc==SQLITE_IOERR_SHORT_READ ){
42982 rc = SQLITE_OK;
42984 if( !jrnlOpen ){
42985 sqlite3OsClose(pPager->jfd);
42987 *pExists = (first!=0);
42988 }else if( rc==SQLITE_CANTOPEN ){
42989 /* If we cannot open the rollback journal file in order to see if
42990 ** its has a zero header, that might be due to an I/O error, or
42991 ** it might be due to the race condition described above and in
42992 ** ticket #3883. Either way, assume that the journal is hot.
42993 ** This might be a false positive. But if it is, then the
42994 ** automatic journal playback and recovery mechanism will deal
42995 ** with it under an EXCLUSIVE lock where we do not need to
42996 ** worry so much with race conditions.
42998 *pExists = 1;
42999 rc = SQLITE_OK;
43006 return rc;
43010 ** This function is called to obtain a shared lock on the database file.
43011 ** It is illegal to call sqlite3PagerAcquire() until after this function
43012 ** has been successfully called. If a shared-lock is already held when
43013 ** this function is called, it is a no-op.
43015 ** The following operations are also performed by this function.
43017 ** 1) If the pager is currently in PAGER_OPEN state (no lock held
43018 ** on the database file), then an attempt is made to obtain a
43019 ** SHARED lock on the database file. Immediately after obtaining
43020 ** the SHARED lock, the file-system is checked for a hot-journal,
43021 ** which is played back if present. Following any hot-journal
43022 ** rollback, the contents of the cache are validated by checking
43023 ** the 'change-counter' field of the database file header and
43024 ** discarded if they are found to be invalid.
43026 ** 2) If the pager is running in exclusive-mode, and there are currently
43027 ** no outstanding references to any pages, and is in the error state,
43028 ** then an attempt is made to clear the error state by discarding
43029 ** the contents of the page cache and rolling back any open journal
43030 ** file.
43032 ** If everything is successful, SQLITE_OK is returned. If an IO error
43033 ** occurs while locking the database, checking for a hot-journal file or
43034 ** rolling back a journal file, the IO error code is returned.
43036 SQLITE_PRIVATE int sqlite3PagerSharedLock(Pager *pPager){
43037 int rc = SQLITE_OK; /* Return code */
43039 /* This routine is only called from b-tree and only when there are no
43040 ** outstanding pages. This implies that the pager state should either
43041 ** be OPEN or READER. READER is only possible if the pager is or was in
43042 ** exclusive access mode.
43044 assert( sqlite3PcacheRefCount(pPager->pPCache)==0 );
43045 assert( assert_pager_state(pPager) );
43046 assert( pPager->eState==PAGER_OPEN || pPager->eState==PAGER_READER );
43047 if( NEVER(MEMDB && pPager->errCode) ){ return pPager->errCode; }
43049 if( !pagerUseWal(pPager) && pPager->eState==PAGER_OPEN ){
43050 int bHotJournal = 1; /* True if there exists a hot journal-file */
43052 assert( !MEMDB );
43053 assert( pPager->noReadlock==0 || pPager->readOnly );
43055 if( pPager->noReadlock==0 ){
43056 rc = pager_wait_on_lock(pPager, SHARED_LOCK);
43057 if( rc!=SQLITE_OK ){
43058 assert( pPager->eLock==NO_LOCK || pPager->eLock==UNKNOWN_LOCK );
43059 goto failed;
43063 /* If a journal file exists, and there is no RESERVED lock on the
43064 ** database file, then it either needs to be played back or deleted.
43066 if( pPager->eLock<=SHARED_LOCK ){
43067 rc = hasHotJournal(pPager, &bHotJournal);
43069 if( rc!=SQLITE_OK ){
43070 goto failed;
43072 if( bHotJournal ){
43073 /* Get an EXCLUSIVE lock on the database file. At this point it is
43074 ** important that a RESERVED lock is not obtained on the way to the
43075 ** EXCLUSIVE lock. If it were, another process might open the
43076 ** database file, detect the RESERVED lock, and conclude that the
43077 ** database is safe to read while this process is still rolling the
43078 ** hot-journal back.
43080 ** Because the intermediate RESERVED lock is not requested, any
43081 ** other process attempting to access the database file will get to
43082 ** this point in the code and fail to obtain its own EXCLUSIVE lock
43083 ** on the database file.
43085 ** Unless the pager is in locking_mode=exclusive mode, the lock is
43086 ** downgraded to SHARED_LOCK before this function returns.
43088 rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
43089 if( rc!=SQLITE_OK ){
43090 goto failed;
43093 /* If it is not already open and the file exists on disk, open the
43094 ** journal for read/write access. Write access is required because
43095 ** in exclusive-access mode the file descriptor will be kept open
43096 ** and possibly used for a transaction later on. Also, write-access
43097 ** is usually required to finalize the journal in journal_mode=persist
43098 ** mode (and also for journal_mode=truncate on some systems).
43100 ** If the journal does not exist, it usually means that some
43101 ** other connection managed to get in and roll it back before
43102 ** this connection obtained the exclusive lock above. Or, it
43103 ** may mean that the pager was in the error-state when this
43104 ** function was called and the journal file does not exist.
43106 if( !isOpen(pPager->jfd) ){
43107 sqlite3_vfs * const pVfs = pPager->pVfs;
43108 int bExists; /* True if journal file exists */
43109 rc = sqlite3OsAccess(
43110 pVfs, pPager->zJournal, SQLITE_ACCESS_EXISTS, &bExists);
43111 if( rc==SQLITE_OK && bExists ){
43112 int fout = 0;
43113 int f = SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_JOURNAL;
43114 assert( !pPager->tempFile );
43115 rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, f, &fout);
43116 assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
43117 if( rc==SQLITE_OK && fout&SQLITE_OPEN_READONLY ){
43118 rc = SQLITE_CANTOPEN_BKPT;
43119 sqlite3OsClose(pPager->jfd);
43124 /* Playback and delete the journal. Drop the database write
43125 ** lock and reacquire the read lock. Purge the cache before
43126 ** playing back the hot-journal so that we don't end up with
43127 ** an inconsistent cache. Sync the hot journal before playing
43128 ** it back since the process that crashed and left the hot journal
43129 ** probably did not sync it and we are required to always sync
43130 ** the journal before playing it back.
43132 if( isOpen(pPager->jfd) ){
43133 assert( rc==SQLITE_OK );
43134 rc = pagerSyncHotJournal(pPager);
43135 if( rc==SQLITE_OK ){
43136 rc = pager_playback(pPager, 1);
43137 pPager->eState = PAGER_OPEN;
43139 }else if( !pPager->exclusiveMode ){
43140 pagerUnlockDb(pPager, SHARED_LOCK);
43143 if( rc!=SQLITE_OK ){
43144 /* This branch is taken if an error occurs while trying to open
43145 ** or roll back a hot-journal while holding an EXCLUSIVE lock. The
43146 ** pager_unlock() routine will be called before returning to unlock
43147 ** the file. If the unlock attempt fails, then Pager.eLock must be
43148 ** set to UNKNOWN_LOCK (see the comment above the #define for
43149 ** UNKNOWN_LOCK above for an explanation).
43151 ** In order to get pager_unlock() to do this, set Pager.eState to
43152 ** PAGER_ERROR now. This is not actually counted as a transition
43153 ** to ERROR state in the state diagram at the top of this file,
43154 ** since we know that the same call to pager_unlock() will very
43155 ** shortly transition the pager object to the OPEN state. Calling
43156 ** assert_pager_state() would fail now, as it should not be possible
43157 ** to be in ERROR state when there are zero outstanding page
43158 ** references.
43160 pager_error(pPager, rc);
43161 goto failed;
43164 assert( pPager->eState==PAGER_OPEN );
43165 assert( (pPager->eLock==SHARED_LOCK)
43166 || (pPager->exclusiveMode && pPager->eLock>SHARED_LOCK)
43170 if( !pPager->tempFile
43171 && (pPager->pBackup || sqlite3PcachePagecount(pPager->pPCache)>0)
43173 /* The shared-lock has just been acquired on the database file
43174 ** and there are already pages in the cache (from a previous
43175 ** read or write transaction). Check to see if the database
43176 ** has been modified. If the database has changed, flush the
43177 ** cache.
43179 ** Database changes is detected by looking at 15 bytes beginning
43180 ** at offset 24 into the file. The first 4 of these 16 bytes are
43181 ** a 32-bit counter that is incremented with each change. The
43182 ** other bytes change randomly with each file change when
43183 ** a codec is in use.
43185 ** There is a vanishingly small chance that a change will not be
43186 ** detected. The chance of an undetected change is so small that
43187 ** it can be neglected.
43189 Pgno nPage = 0;
43190 char dbFileVers[sizeof(pPager->dbFileVers)];
43192 rc = pagerPagecount(pPager, &nPage);
43193 if( rc ) goto failed;
43195 if( nPage>0 ){
43196 IOTRACE(("CKVERS %p %d\n", pPager, sizeof(dbFileVers)));
43197 rc = sqlite3OsRead(pPager->fd, &dbFileVers, sizeof(dbFileVers), 24);
43198 if( rc!=SQLITE_OK ){
43199 goto failed;
43201 }else{
43202 memset(dbFileVers, 0, sizeof(dbFileVers));
43205 if( memcmp(pPager->dbFileVers, dbFileVers, sizeof(dbFileVers))!=0 ){
43206 pager_reset(pPager);
43210 /* If there is a WAL file in the file-system, open this database in WAL
43211 ** mode. Otherwise, the following function call is a no-op.
43213 rc = pagerOpenWalIfPresent(pPager);
43214 #ifndef SQLITE_OMIT_WAL
43215 assert( pPager->pWal==0 || rc==SQLITE_OK );
43216 #endif
43219 if( pagerUseWal(pPager) ){
43220 assert( rc==SQLITE_OK );
43221 rc = pagerBeginReadTransaction(pPager);
43224 if( pPager->eState==PAGER_OPEN && rc==SQLITE_OK ){
43225 rc = pagerPagecount(pPager, &pPager->dbSize);
43228 failed:
43229 if( rc!=SQLITE_OK ){
43230 assert( !MEMDB );
43231 pager_unlock(pPager);
43232 assert( pPager->eState==PAGER_OPEN );
43233 }else{
43234 pPager->eState = PAGER_READER;
43236 return rc;
43240 ** If the reference count has reached zero, rollback any active
43241 ** transaction and unlock the pager.
43243 ** Except, in locking_mode=EXCLUSIVE when there is nothing to in
43244 ** the rollback journal, the unlock is not performed and there is
43245 ** nothing to rollback, so this routine is a no-op.
43247 static void pagerUnlockIfUnused(Pager *pPager){
43248 if( (sqlite3PcacheRefCount(pPager->pPCache)==0) ){
43249 pagerUnlockAndRollback(pPager);
43254 ** Acquire a reference to page number pgno in pager pPager (a page
43255 ** reference has type DbPage*). If the requested reference is
43256 ** successfully obtained, it is copied to *ppPage and SQLITE_OK returned.
43258 ** If the requested page is already in the cache, it is returned.
43259 ** Otherwise, a new page object is allocated and populated with data
43260 ** read from the database file. In some cases, the pcache module may
43261 ** choose not to allocate a new page object and may reuse an existing
43262 ** object with no outstanding references.
43264 ** The extra data appended to a page is always initialized to zeros the
43265 ** first time a page is loaded into memory. If the page requested is
43266 ** already in the cache when this function is called, then the extra
43267 ** data is left as it was when the page object was last used.
43269 ** If the database image is smaller than the requested page or if a
43270 ** non-zero value is passed as the noContent parameter and the
43271 ** requested page is not already stored in the cache, then no
43272 ** actual disk read occurs. In this case the memory image of the
43273 ** page is initialized to all zeros.
43275 ** If noContent is true, it means that we do not care about the contents
43276 ** of the page. This occurs in two seperate scenarios:
43278 ** a) When reading a free-list leaf page from the database, and
43280 ** b) When a savepoint is being rolled back and we need to load
43281 ** a new page into the cache to be filled with the data read
43282 ** from the savepoint journal.
43284 ** If noContent is true, then the data returned is zeroed instead of
43285 ** being read from the database. Additionally, the bits corresponding
43286 ** to pgno in Pager.pInJournal (bitvec of pages already written to the
43287 ** journal file) and the PagerSavepoint.pInSavepoint bitvecs of any open
43288 ** savepoints are set. This means if the page is made writable at any
43289 ** point in the future, using a call to sqlite3PagerWrite(), its contents
43290 ** will not be journaled. This saves IO.
43292 ** The acquisition might fail for several reasons. In all cases,
43293 ** an appropriate error code is returned and *ppPage is set to NULL.
43295 ** See also sqlite3PagerLookup(). Both this routine and Lookup() attempt
43296 ** to find a page in the in-memory cache first. If the page is not already
43297 ** in memory, this routine goes to disk to read it in whereas Lookup()
43298 ** just returns 0. This routine acquires a read-lock the first time it
43299 ** has to go to disk, and could also playback an old journal if necessary.
43300 ** Since Lookup() never goes to disk, it never has to deal with locks
43301 ** or journal files.
43303 SQLITE_PRIVATE int sqlite3PagerAcquire(
43304 Pager *pPager, /* The pager open on the database file */
43305 Pgno pgno, /* Page number to fetch */
43306 DbPage **ppPage, /* Write a pointer to the page here */
43307 int noContent /* Do not bother reading content from disk if true */
43309 int rc;
43310 PgHdr *pPg;
43312 assert( pPager->eState>=PAGER_READER );
43313 assert( assert_pager_state(pPager) );
43315 if( pgno==0 ){
43316 return SQLITE_CORRUPT_BKPT;
43319 /* If the pager is in the error state, return an error immediately.
43320 ** Otherwise, request the page from the PCache layer. */
43321 if( pPager->errCode!=SQLITE_OK ){
43322 rc = pPager->errCode;
43323 }else{
43324 rc = sqlite3PcacheFetch(pPager->pPCache, pgno, 1, ppPage);
43327 if( rc!=SQLITE_OK ){
43328 /* Either the call to sqlite3PcacheFetch() returned an error or the
43329 ** pager was already in the error-state when this function was called.
43330 ** Set pPg to 0 and jump to the exception handler. */
43331 pPg = 0;
43332 goto pager_acquire_err;
43334 assert( (*ppPage)->pgno==pgno );
43335 assert( (*ppPage)->pPager==pPager || (*ppPage)->pPager==0 );
43337 if( (*ppPage)->pPager && !noContent ){
43338 /* In this case the pcache already contains an initialized copy of
43339 ** the page. Return without further ado. */
43340 assert( pgno<=PAGER_MAX_PGNO && pgno!=PAGER_MJ_PGNO(pPager) );
43341 pPager->nHit++;
43342 return SQLITE_OK;
43344 }else{
43345 /* The pager cache has created a new page. Its content needs to
43346 ** be initialized. */
43348 pPg = *ppPage;
43349 pPg->pPager = pPager;
43351 /* The maximum page number is 2^31. Return SQLITE_CORRUPT if a page
43352 ** number greater than this, or the unused locking-page, is requested. */
43353 if( pgno>PAGER_MAX_PGNO || pgno==PAGER_MJ_PGNO(pPager) ){
43354 rc = SQLITE_CORRUPT_BKPT;
43355 goto pager_acquire_err;
43358 if( MEMDB || pPager->dbSize<pgno || noContent || !isOpen(pPager->fd) ){
43359 if( pgno>pPager->mxPgno ){
43360 rc = SQLITE_FULL;
43361 goto pager_acquire_err;
43363 if( noContent ){
43364 /* Failure to set the bits in the InJournal bit-vectors is benign.
43365 ** It merely means that we might do some extra work to journal a
43366 ** page that does not need to be journaled. Nevertheless, be sure
43367 ** to test the case where a malloc error occurs while trying to set
43368 ** a bit in a bit vector.
43370 sqlite3BeginBenignMalloc();
43371 if( pgno<=pPager->dbOrigSize ){
43372 TESTONLY( rc = ) sqlite3BitvecSet(pPager->pInJournal, pgno);
43373 testcase( rc==SQLITE_NOMEM );
43375 TESTONLY( rc = ) addToSavepointBitvecs(pPager, pgno);
43376 testcase( rc==SQLITE_NOMEM );
43377 sqlite3EndBenignMalloc();
43379 memset(pPg->pData, 0, pPager->pageSize);
43380 IOTRACE(("ZERO %p %d\n", pPager, pgno));
43381 }else{
43382 assert( pPg->pPager==pPager );
43383 pPager->nMiss++;
43384 rc = readDbPage(pPg);
43385 if( rc!=SQLITE_OK ){
43386 goto pager_acquire_err;
43389 pager_set_pagehash(pPg);
43392 return SQLITE_OK;
43394 pager_acquire_err:
43395 assert( rc!=SQLITE_OK );
43396 if( pPg ){
43397 sqlite3PcacheDrop(pPg);
43399 pagerUnlockIfUnused(pPager);
43401 *ppPage = 0;
43402 return rc;
43406 ** Acquire a page if it is already in the in-memory cache. Do
43407 ** not read the page from disk. Return a pointer to the page,
43408 ** or 0 if the page is not in cache.
43410 ** See also sqlite3PagerGet(). The difference between this routine
43411 ** and sqlite3PagerGet() is that _get() will go to the disk and read
43412 ** in the page if the page is not already in cache. This routine
43413 ** returns NULL if the page is not in cache or if a disk I/O error
43414 ** has ever happened.
43416 SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
43417 PgHdr *pPg = 0;
43418 assert( pPager!=0 );
43419 assert( pgno!=0 );
43420 assert( pPager->pPCache!=0 );
43421 assert( pPager->eState>=PAGER_READER && pPager->eState!=PAGER_ERROR );
43422 sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg);
43423 return pPg;
43427 ** Release a page reference.
43429 ** If the number of references to the page drop to zero, then the
43430 ** page is added to the LRU list. When all references to all pages
43431 ** are released, a rollback occurs and the lock on the database is
43432 ** removed.
43434 SQLITE_PRIVATE void sqlite3PagerUnref(DbPage *pPg){
43435 if( pPg ){
43436 Pager *pPager = pPg->pPager;
43437 sqlite3PcacheRelease(pPg);
43438 pagerUnlockIfUnused(pPager);
43443 ** This function is called at the start of every write transaction.
43444 ** There must already be a RESERVED or EXCLUSIVE lock on the database
43445 ** file when this routine is called.
43447 ** Open the journal file for pager pPager and write a journal header
43448 ** to the start of it. If there are active savepoints, open the sub-journal
43449 ** as well. This function is only used when the journal file is being
43450 ** opened to write a rollback log for a transaction. It is not used
43451 ** when opening a hot journal file to roll it back.
43453 ** If the journal file is already open (as it may be in exclusive mode),
43454 ** then this function just writes a journal header to the start of the
43455 ** already open file.
43457 ** Whether or not the journal file is opened by this function, the
43458 ** Pager.pInJournal bitvec structure is allocated.
43460 ** Return SQLITE_OK if everything is successful. Otherwise, return
43461 ** SQLITE_NOMEM if the attempt to allocate Pager.pInJournal fails, or
43462 ** an IO error code if opening or writing the journal file fails.
43464 static int pager_open_journal(Pager *pPager){
43465 int rc = SQLITE_OK; /* Return code */
43466 sqlite3_vfs * const pVfs = pPager->pVfs; /* Local cache of vfs pointer */
43468 assert( pPager->eState==PAGER_WRITER_LOCKED );
43469 assert( assert_pager_state(pPager) );
43470 assert( pPager->pInJournal==0 );
43472 /* If already in the error state, this function is a no-op. But on
43473 ** the other hand, this routine is never called if we are already in
43474 ** an error state. */
43475 if( NEVER(pPager->errCode) ) return pPager->errCode;
43477 if( !pagerUseWal(pPager) && pPager->journalMode!=PAGER_JOURNALMODE_OFF ){
43478 pPager->pInJournal = sqlite3BitvecCreate(pPager->dbSize);
43479 if( pPager->pInJournal==0 ){
43480 return SQLITE_NOMEM;
43483 /* Open the journal file if it is not already open. */
43484 if( !isOpen(pPager->jfd) ){
43485 if( pPager->journalMode==PAGER_JOURNALMODE_MEMORY ){
43486 sqlite3MemJournalOpen(pPager->jfd);
43487 }else{
43488 const int flags = /* VFS flags to open journal file */
43489 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
43490 (pPager->tempFile ?
43491 (SQLITE_OPEN_DELETEONCLOSE|SQLITE_OPEN_TEMP_JOURNAL):
43492 (SQLITE_OPEN_MAIN_JOURNAL)
43494 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
43495 rc = sqlite3JournalOpen(
43496 pVfs, pPager->zJournal, pPager->jfd, flags, jrnlBufferSize(pPager)
43498 #else
43499 rc = sqlite3OsOpen(pVfs, pPager->zJournal, pPager->jfd, flags, 0);
43500 #endif
43502 assert( rc!=SQLITE_OK || isOpen(pPager->jfd) );
43506 /* Write the first journal header to the journal file and open
43507 ** the sub-journal if necessary.
43509 if( rc==SQLITE_OK ){
43510 /* TODO: Check if all of these are really required. */
43511 pPager->nRec = 0;
43512 pPager->journalOff = 0;
43513 pPager->setMaster = 0;
43514 pPager->journalHdr = 0;
43515 rc = writeJournalHdr(pPager);
43519 if( rc!=SQLITE_OK ){
43520 sqlite3BitvecDestroy(pPager->pInJournal);
43521 pPager->pInJournal = 0;
43522 }else{
43523 assert( pPager->eState==PAGER_WRITER_LOCKED );
43524 pPager->eState = PAGER_WRITER_CACHEMOD;
43527 return rc;
43531 ** Begin a write-transaction on the specified pager object. If a
43532 ** write-transaction has already been opened, this function is a no-op.
43534 ** If the exFlag argument is false, then acquire at least a RESERVED
43535 ** lock on the database file. If exFlag is true, then acquire at least
43536 ** an EXCLUSIVE lock. If such a lock is already held, no locking
43537 ** functions need be called.
43539 ** If the subjInMemory argument is non-zero, then any sub-journal opened
43540 ** within this transaction will be opened as an in-memory file. This
43541 ** has no effect if the sub-journal is already opened (as it may be when
43542 ** running in exclusive mode) or if the transaction does not require a
43543 ** sub-journal. If the subjInMemory argument is zero, then any required
43544 ** sub-journal is implemented in-memory if pPager is an in-memory database,
43545 ** or using a temporary file otherwise.
43547 SQLITE_PRIVATE int sqlite3PagerBegin(Pager *pPager, int exFlag, int subjInMemory){
43548 int rc = SQLITE_OK;
43550 if( pPager->errCode ) return pPager->errCode;
43551 assert( pPager->eState>=PAGER_READER && pPager->eState<PAGER_ERROR );
43552 pPager->subjInMemory = (u8)subjInMemory;
43554 if( ALWAYS(pPager->eState==PAGER_READER) ){
43555 assert( pPager->pInJournal==0 );
43557 if( pagerUseWal(pPager) ){
43558 /* If the pager is configured to use locking_mode=exclusive, and an
43559 ** exclusive lock on the database is not already held, obtain it now.
43561 if( pPager->exclusiveMode && sqlite3WalExclusiveMode(pPager->pWal, -1) ){
43562 rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
43563 if( rc!=SQLITE_OK ){
43564 return rc;
43566 sqlite3WalExclusiveMode(pPager->pWal, 1);
43569 /* Grab the write lock on the log file. If successful, upgrade to
43570 ** PAGER_RESERVED state. Otherwise, return an error code to the caller.
43571 ** The busy-handler is not invoked if another connection already
43572 ** holds the write-lock. If possible, the upper layer will call it.
43574 rc = sqlite3WalBeginWriteTransaction(pPager->pWal);
43575 }else{
43576 /* Obtain a RESERVED lock on the database file. If the exFlag parameter
43577 ** is true, then immediately upgrade this to an EXCLUSIVE lock. The
43578 ** busy-handler callback can be used when upgrading to the EXCLUSIVE
43579 ** lock, but not when obtaining the RESERVED lock.
43581 rc = pagerLockDb(pPager, RESERVED_LOCK);
43582 if( rc==SQLITE_OK && exFlag ){
43583 rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
43587 if( rc==SQLITE_OK ){
43588 /* Change to WRITER_LOCKED state.
43590 ** WAL mode sets Pager.eState to PAGER_WRITER_LOCKED or CACHEMOD
43591 ** when it has an open transaction, but never to DBMOD or FINISHED.
43592 ** This is because in those states the code to roll back savepoint
43593 ** transactions may copy data from the sub-journal into the database
43594 ** file as well as into the page cache. Which would be incorrect in
43595 ** WAL mode.
43597 pPager->eState = PAGER_WRITER_LOCKED;
43598 pPager->dbHintSize = pPager->dbSize;
43599 pPager->dbFileSize = pPager->dbSize;
43600 pPager->dbOrigSize = pPager->dbSize;
43601 pPager->journalOff = 0;
43604 assert( rc==SQLITE_OK || pPager->eState==PAGER_READER );
43605 assert( rc!=SQLITE_OK || pPager->eState==PAGER_WRITER_LOCKED );
43606 assert( assert_pager_state(pPager) );
43609 PAGERTRACE(("TRANSACTION %d\n", PAGERID(pPager)));
43610 return rc;
43614 ** Mark a single data page as writeable. The page is written into the
43615 ** main journal or sub-journal as required. If the page is written into
43616 ** one of the journals, the corresponding bit is set in the
43617 ** Pager.pInJournal bitvec and the PagerSavepoint.pInSavepoint bitvecs
43618 ** of any open savepoints as appropriate.
43620 static int pager_write(PgHdr *pPg){
43621 void *pData = pPg->pData;
43622 Pager *pPager = pPg->pPager;
43623 int rc = SQLITE_OK;
43625 /* This routine is not called unless a write-transaction has already
43626 ** been started. The journal file may or may not be open at this point.
43627 ** It is never called in the ERROR state.
43629 assert( pPager->eState==PAGER_WRITER_LOCKED
43630 || pPager->eState==PAGER_WRITER_CACHEMOD
43631 || pPager->eState==PAGER_WRITER_DBMOD
43633 assert( assert_pager_state(pPager) );
43635 /* If an error has been previously detected, report the same error
43636 ** again. This should not happen, but the check provides robustness. */
43637 if( NEVER(pPager->errCode) ) return pPager->errCode;
43639 /* Higher-level routines never call this function if database is not
43640 ** writable. But check anyway, just for robustness. */
43641 if( NEVER(pPager->readOnly) ) return SQLITE_PERM;
43643 CHECK_PAGE(pPg);
43645 /* The journal file needs to be opened. Higher level routines have already
43646 ** obtained the necessary locks to begin the write-transaction, but the
43647 ** rollback journal might not yet be open. Open it now if this is the case.
43649 ** This is done before calling sqlite3PcacheMakeDirty() on the page.
43650 ** Otherwise, if it were done after calling sqlite3PcacheMakeDirty(), then
43651 ** an error might occur and the pager would end up in WRITER_LOCKED state
43652 ** with pages marked as dirty in the cache.
43654 if( pPager->eState==PAGER_WRITER_LOCKED ){
43655 rc = pager_open_journal(pPager);
43656 if( rc!=SQLITE_OK ) return rc;
43658 assert( pPager->eState>=PAGER_WRITER_CACHEMOD );
43659 assert( assert_pager_state(pPager) );
43661 /* Mark the page as dirty. If the page has already been written
43662 ** to the journal then we can return right away.
43664 sqlite3PcacheMakeDirty(pPg);
43665 if( pageInJournal(pPg) && !subjRequiresPage(pPg) ){
43666 assert( !pagerUseWal(pPager) );
43667 }else{
43669 /* The transaction journal now exists and we have a RESERVED or an
43670 ** EXCLUSIVE lock on the main database file. Write the current page to
43671 ** the transaction journal if it is not there already.
43673 if( !pageInJournal(pPg) && !pagerUseWal(pPager) ){
43674 assert( pagerUseWal(pPager)==0 );
43675 if( pPg->pgno<=pPager->dbOrigSize && isOpen(pPager->jfd) ){
43676 u32 cksum;
43677 char *pData2;
43678 i64 iOff = pPager->journalOff;
43680 /* We should never write to the journal file the page that
43681 ** contains the database locks. The following assert verifies
43682 ** that we do not. */
43683 assert( pPg->pgno!=PAGER_MJ_PGNO(pPager) );
43685 assert( pPager->journalHdr<=pPager->journalOff );
43686 CODEC2(pPager, pData, pPg->pgno, 7, return SQLITE_NOMEM, pData2);
43687 cksum = pager_cksum(pPager, (u8*)pData2);
43689 /* Even if an IO or diskfull error occurs while journalling the
43690 ** page in the block above, set the need-sync flag for the page.
43691 ** Otherwise, when the transaction is rolled back, the logic in
43692 ** playback_one_page() will think that the page needs to be restored
43693 ** in the database file. And if an IO error occurs while doing so,
43694 ** then corruption may follow.
43696 pPg->flags |= PGHDR_NEED_SYNC;
43698 rc = write32bits(pPager->jfd, iOff, pPg->pgno);
43699 if( rc!=SQLITE_OK ) return rc;
43700 rc = sqlite3OsWrite(pPager->jfd, pData2, pPager->pageSize, iOff+4);
43701 if( rc!=SQLITE_OK ) return rc;
43702 rc = write32bits(pPager->jfd, iOff+pPager->pageSize+4, cksum);
43703 if( rc!=SQLITE_OK ) return rc;
43705 IOTRACE(("JOUT %p %d %lld %d\n", pPager, pPg->pgno,
43706 pPager->journalOff, pPager->pageSize));
43707 PAGER_INCR(sqlite3_pager_writej_count);
43708 PAGERTRACE(("JOURNAL %d page %d needSync=%d hash(%08x)\n",
43709 PAGERID(pPager), pPg->pgno,
43710 ((pPg->flags&PGHDR_NEED_SYNC)?1:0), pager_pagehash(pPg)));
43712 pPager->journalOff += 8 + pPager->pageSize;
43713 pPager->nRec++;
43714 assert( pPager->pInJournal!=0 );
43715 rc = sqlite3BitvecSet(pPager->pInJournal, pPg->pgno);
43716 testcase( rc==SQLITE_NOMEM );
43717 assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );
43718 rc |= addToSavepointBitvecs(pPager, pPg->pgno);
43719 if( rc!=SQLITE_OK ){
43720 assert( rc==SQLITE_NOMEM );
43721 return rc;
43723 }else{
43724 if( pPager->eState!=PAGER_WRITER_DBMOD ){
43725 pPg->flags |= PGHDR_NEED_SYNC;
43727 PAGERTRACE(("APPEND %d page %d needSync=%d\n",
43728 PAGERID(pPager), pPg->pgno,
43729 ((pPg->flags&PGHDR_NEED_SYNC)?1:0)));
43733 /* If the statement journal is open and the page is not in it,
43734 ** then write the current page to the statement journal. Note that
43735 ** the statement journal format differs from the standard journal format
43736 ** in that it omits the checksums and the header.
43738 if( subjRequiresPage(pPg) ){
43739 rc = subjournalPage(pPg);
43743 /* Update the database size and return.
43745 if( pPager->dbSize<pPg->pgno ){
43746 pPager->dbSize = pPg->pgno;
43748 return rc;
43752 ** Mark a data page as writeable. This routine must be called before
43753 ** making changes to a page. The caller must check the return value
43754 ** of this function and be careful not to change any page data unless
43755 ** this routine returns SQLITE_OK.
43757 ** The difference between this function and pager_write() is that this
43758 ** function also deals with the special case where 2 or more pages
43759 ** fit on a single disk sector. In this case all co-resident pages
43760 ** must have been written to the journal file before returning.
43762 ** If an error occurs, SQLITE_NOMEM or an IO error code is returned
43763 ** as appropriate. Otherwise, SQLITE_OK.
43765 SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){
43766 int rc = SQLITE_OK;
43768 PgHdr *pPg = pDbPage;
43769 Pager *pPager = pPg->pPager;
43770 Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize);
43772 assert( pPager->eState>=PAGER_WRITER_LOCKED );
43773 assert( pPager->eState!=PAGER_ERROR );
43774 assert( assert_pager_state(pPager) );
43776 if( nPagePerSector>1 ){
43777 Pgno nPageCount; /* Total number of pages in database file */
43778 Pgno pg1; /* First page of the sector pPg is located on. */
43779 int nPage = 0; /* Number of pages starting at pg1 to journal */
43780 int ii; /* Loop counter */
43781 int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */
43783 /* Set the doNotSyncSpill flag to 1. This is because we cannot allow
43784 ** a journal header to be written between the pages journaled by
43785 ** this function.
43787 assert( !MEMDB );
43788 assert( pPager->doNotSyncSpill==0 );
43789 pPager->doNotSyncSpill++;
43791 /* This trick assumes that both the page-size and sector-size are
43792 ** an integer power of 2. It sets variable pg1 to the identifier
43793 ** of the first page of the sector pPg is located on.
43795 pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;
43797 nPageCount = pPager->dbSize;
43798 if( pPg->pgno>nPageCount ){
43799 nPage = (pPg->pgno - pg1)+1;
43800 }else if( (pg1+nPagePerSector-1)>nPageCount ){
43801 nPage = nPageCount+1-pg1;
43802 }else{
43803 nPage = nPagePerSector;
43805 assert(nPage>0);
43806 assert(pg1<=pPg->pgno);
43807 assert((pg1+nPage)>pPg->pgno);
43809 for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){
43810 Pgno pg = pg1+ii;
43811 PgHdr *pPage;
43812 if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
43813 if( pg!=PAGER_MJ_PGNO(pPager) ){
43814 rc = sqlite3PagerGet(pPager, pg, &pPage);
43815 if( rc==SQLITE_OK ){
43816 rc = pager_write(pPage);
43817 if( pPage->flags&PGHDR_NEED_SYNC ){
43818 needSync = 1;
43820 sqlite3PagerUnref(pPage);
43823 }else if( (pPage = pager_lookup(pPager, pg))!=0 ){
43824 if( pPage->flags&PGHDR_NEED_SYNC ){
43825 needSync = 1;
43827 sqlite3PagerUnref(pPage);
43831 /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages
43832 ** starting at pg1, then it needs to be set for all of them. Because
43833 ** writing to any of these nPage pages may damage the others, the
43834 ** journal file must contain sync()ed copies of all of them
43835 ** before any of them can be written out to the database file.
43837 if( rc==SQLITE_OK && needSync ){
43838 assert( !MEMDB );
43839 for(ii=0; ii<nPage; ii++){
43840 PgHdr *pPage = pager_lookup(pPager, pg1+ii);
43841 if( pPage ){
43842 pPage->flags |= PGHDR_NEED_SYNC;
43843 sqlite3PagerUnref(pPage);
43848 assert( pPager->doNotSyncSpill==1 );
43849 pPager->doNotSyncSpill--;
43850 }else{
43851 rc = pager_write(pDbPage);
43853 return rc;
43857 ** Return TRUE if the page given in the argument was previously passed
43858 ** to sqlite3PagerWrite(). In other words, return TRUE if it is ok
43859 ** to change the content of the page.
43861 #ifndef NDEBUG
43862 SQLITE_PRIVATE int sqlite3PagerIswriteable(DbPage *pPg){
43863 return pPg->flags&PGHDR_DIRTY;
43865 #endif
43868 ** A call to this routine tells the pager that it is not necessary to
43869 ** write the information on page pPg back to the disk, even though
43870 ** that page might be marked as dirty. This happens, for example, when
43871 ** the page has been added as a leaf of the freelist and so its
43872 ** content no longer matters.
43874 ** The overlying software layer calls this routine when all of the data
43875 ** on the given page is unused. The pager marks the page as clean so
43876 ** that it does not get written to disk.
43878 ** Tests show that this optimization can quadruple the speed of large
43879 ** DELETE operations.
43881 SQLITE_PRIVATE void sqlite3PagerDontWrite(PgHdr *pPg){
43882 Pager *pPager = pPg->pPager;
43883 if( (pPg->flags&PGHDR_DIRTY) && pPager->nSavepoint==0 ){
43884 PAGERTRACE(("DONT_WRITE page %d of %d\n", pPg->pgno, PAGERID(pPager)));
43885 IOTRACE(("CLEAN %p %d\n", pPager, pPg->pgno))
43886 pPg->flags |= PGHDR_DONT_WRITE;
43887 pager_set_pagehash(pPg);
43892 ** This routine is called to increment the value of the database file
43893 ** change-counter, stored as a 4-byte big-endian integer starting at
43894 ** byte offset 24 of the pager file. The secondary change counter at
43895 ** 92 is also updated, as is the SQLite version number at offset 96.
43897 ** But this only happens if the pPager->changeCountDone flag is false.
43898 ** To avoid excess churning of page 1, the update only happens once.
43899 ** See also the pager_write_changecounter() routine that does an
43900 ** unconditional update of the change counters.
43902 ** If the isDirectMode flag is zero, then this is done by calling
43903 ** sqlite3PagerWrite() on page 1, then modifying the contents of the
43904 ** page data. In this case the file will be updated when the current
43905 ** transaction is committed.
43907 ** The isDirectMode flag may only be non-zero if the library was compiled
43908 ** with the SQLITE_ENABLE_ATOMIC_WRITE macro defined. In this case,
43909 ** if isDirect is non-zero, then the database file is updated directly
43910 ** by writing an updated version of page 1 using a call to the
43911 ** sqlite3OsWrite() function.
43913 static int pager_incr_changecounter(Pager *pPager, int isDirectMode){
43914 int rc = SQLITE_OK;
43916 assert( pPager->eState==PAGER_WRITER_CACHEMOD
43917 || pPager->eState==PAGER_WRITER_DBMOD
43919 assert( assert_pager_state(pPager) );
43921 /* Declare and initialize constant integer 'isDirect'. If the
43922 ** atomic-write optimization is enabled in this build, then isDirect
43923 ** is initialized to the value passed as the isDirectMode parameter
43924 ** to this function. Otherwise, it is always set to zero.
43926 ** The idea is that if the atomic-write optimization is not
43927 ** enabled at compile time, the compiler can omit the tests of
43928 ** 'isDirect' below, as well as the block enclosed in the
43929 ** "if( isDirect )" condition.
43931 #ifndef SQLITE_ENABLE_ATOMIC_WRITE
43932 # define DIRECT_MODE 0
43933 assert( isDirectMode==0 );
43934 UNUSED_PARAMETER(isDirectMode);
43935 #else
43936 # define DIRECT_MODE isDirectMode
43937 #endif
43939 if( !pPager->changeCountDone && pPager->dbSize>0 ){
43940 PgHdr *pPgHdr; /* Reference to page 1 */
43942 assert( !pPager->tempFile && isOpen(pPager->fd) );
43944 /* Open page 1 of the file for writing. */
43945 rc = sqlite3PagerGet(pPager, 1, &pPgHdr);
43946 assert( pPgHdr==0 || rc==SQLITE_OK );
43948 /* If page one was fetched successfully, and this function is not
43949 ** operating in direct-mode, make page 1 writable. When not in
43950 ** direct mode, page 1 is always held in cache and hence the PagerGet()
43951 ** above is always successful - hence the ALWAYS on rc==SQLITE_OK.
43953 if( !DIRECT_MODE && ALWAYS(rc==SQLITE_OK) ){
43954 rc = sqlite3PagerWrite(pPgHdr);
43957 if( rc==SQLITE_OK ){
43958 /* Actually do the update of the change counter */
43959 pager_write_changecounter(pPgHdr);
43961 /* If running in direct mode, write the contents of page 1 to the file. */
43962 if( DIRECT_MODE ){
43963 const void *zBuf;
43964 assert( pPager->dbFileSize>0 );
43965 CODEC2(pPager, pPgHdr->pData, 1, 6, rc=SQLITE_NOMEM, zBuf);
43966 if( rc==SQLITE_OK ){
43967 rc = sqlite3OsWrite(pPager->fd, zBuf, pPager->pageSize, 0);
43969 if( rc==SQLITE_OK ){
43970 pPager->changeCountDone = 1;
43972 }else{
43973 pPager->changeCountDone = 1;
43977 /* Release the page reference. */
43978 sqlite3PagerUnref(pPgHdr);
43980 return rc;
43984 ** Sync the database file to disk. This is a no-op for in-memory databases
43985 ** or pages with the Pager.noSync flag set.
43987 ** If successful, or if called on a pager for which it is a no-op, this
43988 ** function returns SQLITE_OK. Otherwise, an IO error code is returned.
43990 SQLITE_PRIVATE int sqlite3PagerSync(Pager *pPager){
43991 int rc = SQLITE_OK;
43992 if( !pPager->noSync ){
43993 assert( !MEMDB );
43994 rc = sqlite3OsSync(pPager->fd, pPager->syncFlags);
43995 }else if( isOpen(pPager->fd) ){
43996 assert( !MEMDB );
43997 rc = sqlite3OsFileControl(pPager->fd, SQLITE_FCNTL_SYNC_OMITTED, 0);
43998 if( rc==SQLITE_NOTFOUND ){
43999 rc = SQLITE_OK;
44002 return rc;
44006 ** This function may only be called while a write-transaction is active in
44007 ** rollback. If the connection is in WAL mode, this call is a no-op.
44008 ** Otherwise, if the connection does not already have an EXCLUSIVE lock on
44009 ** the database file, an attempt is made to obtain one.
44011 ** If the EXCLUSIVE lock is already held or the attempt to obtain it is
44012 ** successful, or the connection is in WAL mode, SQLITE_OK is returned.
44013 ** Otherwise, either SQLITE_BUSY or an SQLITE_IOERR_XXX error code is
44014 ** returned.
44016 SQLITE_PRIVATE int sqlite3PagerExclusiveLock(Pager *pPager){
44017 int rc = SQLITE_OK;
44018 assert( pPager->eState==PAGER_WRITER_CACHEMOD
44019 || pPager->eState==PAGER_WRITER_DBMOD
44020 || pPager->eState==PAGER_WRITER_LOCKED
44022 assert( assert_pager_state(pPager) );
44023 if( 0==pagerUseWal(pPager) ){
44024 rc = pager_wait_on_lock(pPager, EXCLUSIVE_LOCK);
44026 return rc;
44030 ** Sync the database file for the pager pPager. zMaster points to the name
44031 ** of a master journal file that should be written into the individual
44032 ** journal file. zMaster may be NULL, which is interpreted as no master
44033 ** journal (a single database transaction).
44035 ** This routine ensures that:
44037 ** * The database file change-counter is updated,
44038 ** * the journal is synced (unless the atomic-write optimization is used),
44039 ** * all dirty pages are written to the database file,
44040 ** * the database file is truncated (if required), and
44041 ** * the database file synced.
44043 ** The only thing that remains to commit the transaction is to finalize
44044 ** (delete, truncate or zero the first part of) the journal file (or
44045 ** delete the master journal file if specified).
44047 ** Note that if zMaster==NULL, this does not overwrite a previous value
44048 ** passed to an sqlite3PagerCommitPhaseOne() call.
44050 ** If the final parameter - noSync - is true, then the database file itself
44051 ** is not synced. The caller must call sqlite3PagerSync() directly to
44052 ** sync the database file before calling CommitPhaseTwo() to delete the
44053 ** journal file in this case.
44055 SQLITE_PRIVATE int sqlite3PagerCommitPhaseOne(
44056 Pager *pPager, /* Pager object */
44057 const char *zMaster, /* If not NULL, the master journal name */
44058 int noSync /* True to omit the xSync on the db file */
44060 int rc = SQLITE_OK; /* Return code */
44062 assert( pPager->eState==PAGER_WRITER_LOCKED
44063 || pPager->eState==PAGER_WRITER_CACHEMOD
44064 || pPager->eState==PAGER_WRITER_DBMOD
44065 || pPager->eState==PAGER_ERROR
44067 assert( assert_pager_state(pPager) );
44069 /* If a prior error occurred, report that error again. */
44070 if( NEVER(pPager->errCode) ) return pPager->errCode;
44072 PAGERTRACE(("DATABASE SYNC: File=%s zMaster=%s nSize=%d\n",
44073 pPager->zFilename, zMaster, pPager->dbSize));
44075 /* If no database changes have been made, return early. */
44076 if( pPager->eState<PAGER_WRITER_CACHEMOD ) return SQLITE_OK;
44078 if( MEMDB ){
44079 /* If this is an in-memory db, or no pages have been written to, or this
44080 ** function has already been called, it is mostly a no-op. However, any
44081 ** backup in progress needs to be restarted.
44083 sqlite3BackupRestart(pPager->pBackup);
44084 }else{
44085 if( pagerUseWal(pPager) ){
44086 PgHdr *pList = sqlite3PcacheDirtyList(pPager->pPCache);
44087 PgHdr *pPageOne = 0;
44088 if( pList==0 ){
44089 /* Must have at least one page for the WAL commit flag.
44090 ** Ticket [2d1a5c67dfc2363e44f29d9bbd57f] 2011-05-18 */
44091 rc = sqlite3PagerGet(pPager, 1, &pPageOne);
44092 pList = pPageOne;
44093 pList->pDirty = 0;
44095 assert( rc==SQLITE_OK );
44096 if( ALWAYS(pList) ){
44097 rc = pagerWalFrames(pPager, pList, pPager->dbSize, 1);
44099 sqlite3PagerUnref(pPageOne);
44100 if( rc==SQLITE_OK ){
44101 sqlite3PcacheCleanAll(pPager->pPCache);
44103 }else{
44104 /* The following block updates the change-counter. Exactly how it
44105 ** does this depends on whether or not the atomic-update optimization
44106 ** was enabled at compile time, and if this transaction meets the
44107 ** runtime criteria to use the operation:
44109 ** * The file-system supports the atomic-write property for
44110 ** blocks of size page-size, and
44111 ** * This commit is not part of a multi-file transaction, and
44112 ** * Exactly one page has been modified and store in the journal file.
44114 ** If the optimization was not enabled at compile time, then the
44115 ** pager_incr_changecounter() function is called to update the change
44116 ** counter in 'indirect-mode'. If the optimization is compiled in but
44117 ** is not applicable to this transaction, call sqlite3JournalCreate()
44118 ** to make sure the journal file has actually been created, then call
44119 ** pager_incr_changecounter() to update the change-counter in indirect
44120 ** mode.
44122 ** Otherwise, if the optimization is both enabled and applicable,
44123 ** then call pager_incr_changecounter() to update the change-counter
44124 ** in 'direct' mode. In this case the journal file will never be
44125 ** created for this transaction.
44127 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
44128 PgHdr *pPg;
44129 assert( isOpen(pPager->jfd)
44130 || pPager->journalMode==PAGER_JOURNALMODE_OFF
44131 || pPager->journalMode==PAGER_JOURNALMODE_WAL
44133 if( !zMaster && isOpen(pPager->jfd)
44134 && pPager->journalOff==jrnlBufferSize(pPager)
44135 && pPager->dbSize>=pPager->dbOrigSize
44136 && (0==(pPg = sqlite3PcacheDirtyList(pPager->pPCache)) || 0==pPg->pDirty)
44138 /* Update the db file change counter via the direct-write method. The
44139 ** following call will modify the in-memory representation of page 1
44140 ** to include the updated change counter and then write page 1
44141 ** directly to the database file. Because of the atomic-write
44142 ** property of the host file-system, this is safe.
44144 rc = pager_incr_changecounter(pPager, 1);
44145 }else{
44146 rc = sqlite3JournalCreate(pPager->jfd);
44147 if( rc==SQLITE_OK ){
44148 rc = pager_incr_changecounter(pPager, 0);
44151 #else
44152 rc = pager_incr_changecounter(pPager, 0);
44153 #endif
44154 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44156 /* If this transaction has made the database smaller, then all pages
44157 ** being discarded by the truncation must be written to the journal
44158 ** file. This can only happen in auto-vacuum mode.
44160 ** Before reading the pages with page numbers larger than the
44161 ** current value of Pager.dbSize, set dbSize back to the value
44162 ** that it took at the start of the transaction. Otherwise, the
44163 ** calls to sqlite3PagerGet() return zeroed pages instead of
44164 ** reading data from the database file.
44166 #ifndef SQLITE_OMIT_AUTOVACUUM
44167 if( pPager->dbSize<pPager->dbOrigSize
44168 && pPager->journalMode!=PAGER_JOURNALMODE_OFF
44170 Pgno i; /* Iterator variable */
44171 const Pgno iSkip = PAGER_MJ_PGNO(pPager); /* Pending lock page */
44172 const Pgno dbSize = pPager->dbSize; /* Database image size */
44173 pPager->dbSize = pPager->dbOrigSize;
44174 for( i=dbSize+1; i<=pPager->dbOrigSize; i++ ){
44175 if( !sqlite3BitvecTest(pPager->pInJournal, i) && i!=iSkip ){
44176 PgHdr *pPage; /* Page to journal */
44177 rc = sqlite3PagerGet(pPager, i, &pPage);
44178 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44179 rc = sqlite3PagerWrite(pPage);
44180 sqlite3PagerUnref(pPage);
44181 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44184 pPager->dbSize = dbSize;
44186 #endif
44188 /* Write the master journal name into the journal file. If a master
44189 ** journal file name has already been written to the journal file,
44190 ** or if zMaster is NULL (no master journal), then this call is a no-op.
44192 rc = writeMasterJournal(pPager, zMaster);
44193 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44195 /* Sync the journal file and write all dirty pages to the database.
44196 ** If the atomic-update optimization is being used, this sync will not
44197 ** create the journal file or perform any real IO.
44199 ** Because the change-counter page was just modified, unless the
44200 ** atomic-update optimization is used it is almost certain that the
44201 ** journal requires a sync here. However, in locking_mode=exclusive
44202 ** on a system under memory pressure it is just possible that this is
44203 ** not the case. In this case it is likely enough that the redundant
44204 ** xSync() call will be changed to a no-op by the OS anyhow.
44206 rc = syncJournal(pPager, 0);
44207 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44209 rc = pager_write_pagelist(pPager,sqlite3PcacheDirtyList(pPager->pPCache));
44210 if( rc!=SQLITE_OK ){
44211 assert( rc!=SQLITE_IOERR_BLOCKED );
44212 goto commit_phase_one_exit;
44214 sqlite3PcacheCleanAll(pPager->pPCache);
44216 /* If the file on disk is not the same size as the database image,
44217 ** then use pager_truncate to grow or shrink the file here.
44219 if( pPager->dbSize!=pPager->dbFileSize ){
44220 Pgno nNew = pPager->dbSize - (pPager->dbSize==PAGER_MJ_PGNO(pPager));
44221 assert( pPager->eState==PAGER_WRITER_DBMOD );
44222 rc = pager_truncate(pPager, nNew);
44223 if( rc!=SQLITE_OK ) goto commit_phase_one_exit;
44226 /* Finally, sync the database file. */
44227 if( !noSync ){
44228 rc = sqlite3PagerSync(pPager);
44230 IOTRACE(("DBSYNC %p\n", pPager))
44234 commit_phase_one_exit:
44235 if( rc==SQLITE_OK && !pagerUseWal(pPager) ){
44236 pPager->eState = PAGER_WRITER_FINISHED;
44238 return rc;
44243 ** When this function is called, the database file has been completely
44244 ** updated to reflect the changes made by the current transaction and
44245 ** synced to disk. The journal file still exists in the file-system
44246 ** though, and if a failure occurs at this point it will eventually
44247 ** be used as a hot-journal and the current transaction rolled back.
44249 ** This function finalizes the journal file, either by deleting,
44250 ** truncating or partially zeroing it, so that it cannot be used
44251 ** for hot-journal rollback. Once this is done the transaction is
44252 ** irrevocably committed.
44254 ** If an error occurs, an IO error code is returned and the pager
44255 ** moves into the error state. Otherwise, SQLITE_OK is returned.
44257 SQLITE_PRIVATE int sqlite3PagerCommitPhaseTwo(Pager *pPager){
44258 int rc = SQLITE_OK; /* Return code */
44260 /* This routine should not be called if a prior error has occurred.
44261 ** But if (due to a coding error elsewhere in the system) it does get
44262 ** called, just return the same error code without doing anything. */
44263 if( NEVER(pPager->errCode) ) return pPager->errCode;
44265 assert( pPager->eState==PAGER_WRITER_LOCKED
44266 || pPager->eState==PAGER_WRITER_FINISHED
44267 || (pagerUseWal(pPager) && pPager->eState==PAGER_WRITER_CACHEMOD)
44269 assert( assert_pager_state(pPager) );
44271 /* An optimization. If the database was not actually modified during
44272 ** this transaction, the pager is running in exclusive-mode and is
44273 ** using persistent journals, then this function is a no-op.
44275 ** The start of the journal file currently contains a single journal
44276 ** header with the nRec field set to 0. If such a journal is used as
44277 ** a hot-journal during hot-journal rollback, 0 changes will be made
44278 ** to the database file. So there is no need to zero the journal
44279 ** header. Since the pager is in exclusive mode, there is no need
44280 ** to drop any locks either.
44282 if( pPager->eState==PAGER_WRITER_LOCKED
44283 && pPager->exclusiveMode
44284 && pPager->journalMode==PAGER_JOURNALMODE_PERSIST
44286 assert( pPager->journalOff==JOURNAL_HDR_SZ(pPager) || !pPager->journalOff );
44287 pPager->eState = PAGER_READER;
44288 return SQLITE_OK;
44291 PAGERTRACE(("COMMIT %d\n", PAGERID(pPager)));
44292 rc = pager_end_transaction(pPager, pPager->setMaster);
44293 return pager_error(pPager, rc);
44297 ** If a write transaction is open, then all changes made within the
44298 ** transaction are reverted and the current write-transaction is closed.
44299 ** The pager falls back to PAGER_READER state if successful, or PAGER_ERROR
44300 ** state if an error occurs.
44302 ** If the pager is already in PAGER_ERROR state when this function is called,
44303 ** it returns Pager.errCode immediately. No work is performed in this case.
44305 ** Otherwise, in rollback mode, this function performs two functions:
44307 ** 1) It rolls back the journal file, restoring all database file and
44308 ** in-memory cache pages to the state they were in when the transaction
44309 ** was opened, and
44311 ** 2) It finalizes the journal file, so that it is not used for hot
44312 ** rollback at any point in the future.
44314 ** Finalization of the journal file (task 2) is only performed if the
44315 ** rollback is successful.
44317 ** In WAL mode, all cache-entries containing data modified within the
44318 ** current transaction are either expelled from the cache or reverted to
44319 ** their pre-transaction state by re-reading data from the database or
44320 ** WAL files. The WAL transaction is then closed.
44322 SQLITE_PRIVATE int sqlite3PagerRollback(Pager *pPager){
44323 int rc = SQLITE_OK; /* Return code */
44324 PAGERTRACE(("ROLLBACK %d\n", PAGERID(pPager)));
44326 /* PagerRollback() is a no-op if called in READER or OPEN state. If
44327 ** the pager is already in the ERROR state, the rollback is not
44328 ** attempted here. Instead, the error code is returned to the caller.
44330 assert( assert_pager_state(pPager) );
44331 if( pPager->eState==PAGER_ERROR ) return pPager->errCode;
44332 if( pPager->eState<=PAGER_READER ) return SQLITE_OK;
44334 if( pagerUseWal(pPager) ){
44335 int rc2;
44336 rc = sqlite3PagerSavepoint(pPager, SAVEPOINT_ROLLBACK, -1);
44337 rc2 = pager_end_transaction(pPager, pPager->setMaster);
44338 if( rc==SQLITE_OK ) rc = rc2;
44339 }else if( !isOpen(pPager->jfd) || pPager->eState==PAGER_WRITER_LOCKED ){
44340 int eState = pPager->eState;
44341 rc = pager_end_transaction(pPager, 0);
44342 if( !MEMDB && eState>PAGER_WRITER_LOCKED ){
44343 /* This can happen using journal_mode=off. Move the pager to the error
44344 ** state to indicate that the contents of the cache may not be trusted.
44345 ** Any active readers will get SQLITE_ABORT.
44347 pPager->errCode = SQLITE_ABORT;
44348 pPager->eState = PAGER_ERROR;
44349 return rc;
44351 }else{
44352 rc = pager_playback(pPager, 0);
44355 assert( pPager->eState==PAGER_READER || rc!=SQLITE_OK );
44356 assert( rc==SQLITE_OK || rc==SQLITE_FULL
44357 || rc==SQLITE_NOMEM || (rc&0xFF)==SQLITE_IOERR );
44359 /* If an error occurs during a ROLLBACK, we can no longer trust the pager
44360 ** cache. So call pager_error() on the way out to make any error persistent.
44362 return pager_error(pPager, rc);
44366 ** Return TRUE if the database file is opened read-only. Return FALSE
44367 ** if the database is (in theory) writable.
44369 SQLITE_PRIVATE u8 sqlite3PagerIsreadonly(Pager *pPager){
44370 return pPager->readOnly;
44374 ** Return the number of references to the pager.
44376 SQLITE_PRIVATE int sqlite3PagerRefcount(Pager *pPager){
44377 return sqlite3PcacheRefCount(pPager->pPCache);
44381 ** Return the approximate number of bytes of memory currently
44382 ** used by the pager and its associated cache.
44384 SQLITE_PRIVATE int sqlite3PagerMemUsed(Pager *pPager){
44385 int perPageSize = pPager->pageSize + pPager->nExtra + sizeof(PgHdr)
44386 + 5*sizeof(void*);
44387 return perPageSize*sqlite3PcachePagecount(pPager->pPCache)
44388 + sqlite3MallocSize(pPager)
44389 + pPager->pageSize;
44393 ** Return the number of references to the specified page.
44395 SQLITE_PRIVATE int sqlite3PagerPageRefcount(DbPage *pPage){
44396 return sqlite3PcachePageRefcount(pPage);
44399 #ifdef SQLITE_TEST
44401 ** This routine is used for testing and analysis only.
44403 SQLITE_PRIVATE int *sqlite3PagerStats(Pager *pPager){
44404 static int a[11];
44405 a[0] = sqlite3PcacheRefCount(pPager->pPCache);
44406 a[1] = sqlite3PcachePagecount(pPager->pPCache);
44407 a[2] = sqlite3PcacheGetCachesize(pPager->pPCache);
44408 a[3] = pPager->eState==PAGER_OPEN ? -1 : (int) pPager->dbSize;
44409 a[4] = pPager->eState;
44410 a[5] = pPager->errCode;
44411 a[6] = pPager->nHit;
44412 a[7] = pPager->nMiss;
44413 a[8] = 0; /* Used to be pPager->nOvfl */
44414 a[9] = pPager->nRead;
44415 a[10] = pPager->nWrite;
44416 return a;
44418 #endif
44421 ** Parameter eStat must be either SQLITE_DBSTATUS_CACHE_HIT or
44422 ** SQLITE_DBSTATUS_CACHE_MISS. Before returning, *pnVal is incremented by the
44423 ** current cache hit or miss count, according to the value of eStat. If the
44424 ** reset parameter is non-zero, the cache hit or miss count is zeroed before
44425 ** returning.
44427 SQLITE_PRIVATE void sqlite3PagerCacheStat(Pager *pPager, int eStat, int reset, int *pnVal){
44428 int *piStat;
44430 assert( eStat==SQLITE_DBSTATUS_CACHE_HIT
44431 || eStat==SQLITE_DBSTATUS_CACHE_MISS
44433 if( eStat==SQLITE_DBSTATUS_CACHE_HIT ){
44434 piStat = &pPager->nHit;
44435 }else{
44436 piStat = &pPager->nMiss;
44439 *pnVal += *piStat;
44440 if( reset ){
44441 *piStat = 0;
44446 ** Return true if this is an in-memory pager.
44448 SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){
44449 return MEMDB;
44453 ** Check that there are at least nSavepoint savepoints open. If there are
44454 ** currently less than nSavepoints open, then open one or more savepoints
44455 ** to make up the difference. If the number of savepoints is already
44456 ** equal to nSavepoint, then this function is a no-op.
44458 ** If a memory allocation fails, SQLITE_NOMEM is returned. If an error
44459 ** occurs while opening the sub-journal file, then an IO error code is
44460 ** returned. Otherwise, SQLITE_OK.
44462 SQLITE_PRIVATE int sqlite3PagerOpenSavepoint(Pager *pPager, int nSavepoint){
44463 int rc = SQLITE_OK; /* Return code */
44464 int nCurrent = pPager->nSavepoint; /* Current number of savepoints */
44466 assert( pPager->eState>=PAGER_WRITER_LOCKED );
44467 assert( assert_pager_state(pPager) );
44469 if( nSavepoint>nCurrent && pPager->useJournal ){
44470 int ii; /* Iterator variable */
44471 PagerSavepoint *aNew; /* New Pager.aSavepoint array */
44473 /* Grow the Pager.aSavepoint array using realloc(). Return SQLITE_NOMEM
44474 ** if the allocation fails. Otherwise, zero the new portion in case a
44475 ** malloc failure occurs while populating it in the for(...) loop below.
44477 aNew = (PagerSavepoint *)sqlite3Realloc(
44478 pPager->aSavepoint, sizeof(PagerSavepoint)*nSavepoint
44480 if( !aNew ){
44481 return SQLITE_NOMEM;
44483 memset(&aNew[nCurrent], 0, (nSavepoint-nCurrent) * sizeof(PagerSavepoint));
44484 pPager->aSavepoint = aNew;
44486 /* Populate the PagerSavepoint structures just allocated. */
44487 for(ii=nCurrent; ii<nSavepoint; ii++){
44488 aNew[ii].nOrig = pPager->dbSize;
44489 if( isOpen(pPager->jfd) && pPager->journalOff>0 ){
44490 aNew[ii].iOffset = pPager->journalOff;
44491 }else{
44492 aNew[ii].iOffset = JOURNAL_HDR_SZ(pPager);
44494 aNew[ii].iSubRec = pPager->nSubRec;
44495 aNew[ii].pInSavepoint = sqlite3BitvecCreate(pPager->dbSize);
44496 if( !aNew[ii].pInSavepoint ){
44497 return SQLITE_NOMEM;
44499 if( pagerUseWal(pPager) ){
44500 sqlite3WalSavepoint(pPager->pWal, aNew[ii].aWalData);
44502 pPager->nSavepoint = ii+1;
44504 assert( pPager->nSavepoint==nSavepoint );
44505 assertTruncateConstraint(pPager);
44508 return rc;
44512 ** This function is called to rollback or release (commit) a savepoint.
44513 ** The savepoint to release or rollback need not be the most recently
44514 ** created savepoint.
44516 ** Parameter op is always either SAVEPOINT_ROLLBACK or SAVEPOINT_RELEASE.
44517 ** If it is SAVEPOINT_RELEASE, then release and destroy the savepoint with
44518 ** index iSavepoint. If it is SAVEPOINT_ROLLBACK, then rollback all changes
44519 ** that have occurred since the specified savepoint was created.
44521 ** The savepoint to rollback or release is identified by parameter
44522 ** iSavepoint. A value of 0 means to operate on the outermost savepoint
44523 ** (the first created). A value of (Pager.nSavepoint-1) means operate
44524 ** on the most recently created savepoint. If iSavepoint is greater than
44525 ** (Pager.nSavepoint-1), then this function is a no-op.
44527 ** If a negative value is passed to this function, then the current
44528 ** transaction is rolled back. This is different to calling
44529 ** sqlite3PagerRollback() because this function does not terminate
44530 ** the transaction or unlock the database, it just restores the
44531 ** contents of the database to its original state.
44533 ** In any case, all savepoints with an index greater than iSavepoint
44534 ** are destroyed. If this is a release operation (op==SAVEPOINT_RELEASE),
44535 ** then savepoint iSavepoint is also destroyed.
44537 ** This function may return SQLITE_NOMEM if a memory allocation fails,
44538 ** or an IO error code if an IO error occurs while rolling back a
44539 ** savepoint. If no errors occur, SQLITE_OK is returned.
44541 SQLITE_PRIVATE int sqlite3PagerSavepoint(Pager *pPager, int op, int iSavepoint){
44542 int rc = pPager->errCode; /* Return code */
44544 assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
44545 assert( iSavepoint>=0 || op==SAVEPOINT_ROLLBACK );
44547 if( rc==SQLITE_OK && iSavepoint<pPager->nSavepoint ){
44548 int ii; /* Iterator variable */
44549 int nNew; /* Number of remaining savepoints after this op. */
44551 /* Figure out how many savepoints will still be active after this
44552 ** operation. Store this value in nNew. Then free resources associated
44553 ** with any savepoints that are destroyed by this operation.
44555 nNew = iSavepoint + (( op==SAVEPOINT_RELEASE ) ? 0 : 1);
44556 for(ii=nNew; ii<pPager->nSavepoint; ii++){
44557 sqlite3BitvecDestroy(pPager->aSavepoint[ii].pInSavepoint);
44559 pPager->nSavepoint = nNew;
44561 /* If this is a release of the outermost savepoint, truncate
44562 ** the sub-journal to zero bytes in size. */
44563 if( op==SAVEPOINT_RELEASE ){
44564 if( nNew==0 && isOpen(pPager->sjfd) ){
44565 /* Only truncate if it is an in-memory sub-journal. */
44566 if( sqlite3IsMemJournal(pPager->sjfd) ){
44567 rc = sqlite3OsTruncate(pPager->sjfd, 0);
44568 assert( rc==SQLITE_OK );
44570 pPager->nSubRec = 0;
44573 /* Else this is a rollback operation, playback the specified savepoint.
44574 ** If this is a temp-file, it is possible that the journal file has
44575 ** not yet been opened. In this case there have been no changes to
44576 ** the database file, so the playback operation can be skipped.
44578 else if( pagerUseWal(pPager) || isOpen(pPager->jfd) ){
44579 PagerSavepoint *pSavepoint = (nNew==0)?0:&pPager->aSavepoint[nNew-1];
44580 rc = pagerPlaybackSavepoint(pPager, pSavepoint);
44581 assert(rc!=SQLITE_DONE);
44585 return rc;
44589 ** Return the full pathname of the database file.
44591 SQLITE_PRIVATE const char *sqlite3PagerFilename(Pager *pPager){
44592 return pPager->zFilename;
44596 ** Return the VFS structure for the pager.
44598 SQLITE_PRIVATE const sqlite3_vfs *sqlite3PagerVfs(Pager *pPager){
44599 return pPager->pVfs;
44603 ** Return the file handle for the database file associated
44604 ** with the pager. This might return NULL if the file has
44605 ** not yet been opened.
44607 SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager *pPager){
44608 return pPager->fd;
44612 ** Return the full pathname of the journal file.
44614 SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager *pPager){
44615 return pPager->zJournal;
44619 ** Return true if fsync() calls are disabled for this pager. Return FALSE
44620 ** if fsync()s are executed normally.
44622 SQLITE_PRIVATE int sqlite3PagerNosync(Pager *pPager){
44623 return pPager->noSync;
44626 #ifdef SQLITE_HAS_CODEC
44628 ** Set or retrieve the codec for this pager
44630 SQLITE_PRIVATE void sqlite3PagerSetCodec(
44631 Pager *pPager,
44632 void *(*xCodec)(void*,void*,Pgno,int),
44633 void (*xCodecSizeChng)(void*,int,int),
44634 void (*xCodecFree)(void*),
44635 void *pCodec
44637 if( pPager->xCodecFree ) pPager->xCodecFree(pPager->pCodec);
44638 pPager->xCodec = pPager->memDb ? 0 : xCodec;
44639 pPager->xCodecSizeChng = xCodecSizeChng;
44640 pPager->xCodecFree = xCodecFree;
44641 pPager->pCodec = pCodec;
44642 pagerReportSize(pPager);
44644 SQLITE_PRIVATE void *sqlite3PagerGetCodec(Pager *pPager){
44645 return pPager->pCodec;
44647 #endif
44649 #ifndef SQLITE_OMIT_AUTOVACUUM
44651 ** Move the page pPg to location pgno in the file.
44653 ** There must be no references to the page previously located at
44654 ** pgno (which we call pPgOld) though that page is allowed to be
44655 ** in cache. If the page previously located at pgno is not already
44656 ** in the rollback journal, it is not put there by by this routine.
44658 ** References to the page pPg remain valid. Updating any
44659 ** meta-data associated with pPg (i.e. data stored in the nExtra bytes
44660 ** allocated along with the page) is the responsibility of the caller.
44662 ** A transaction must be active when this routine is called. It used to be
44663 ** required that a statement transaction was not active, but this restriction
44664 ** has been removed (CREATE INDEX needs to move a page when a statement
44665 ** transaction is active).
44667 ** If the fourth argument, isCommit, is non-zero, then this page is being
44668 ** moved as part of a database reorganization just before the transaction
44669 ** is being committed. In this case, it is guaranteed that the database page
44670 ** pPg refers to will not be written to again within this transaction.
44672 ** This function may return SQLITE_NOMEM or an IO error code if an error
44673 ** occurs. Otherwise, it returns SQLITE_OK.
44675 SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, int isCommit){
44676 PgHdr *pPgOld; /* The page being overwritten. */
44677 Pgno needSyncPgno = 0; /* Old value of pPg->pgno, if sync is required */
44678 int rc; /* Return code */
44679 Pgno origPgno; /* The original page number */
44681 assert( pPg->nRef>0 );
44682 assert( pPager->eState==PAGER_WRITER_CACHEMOD
44683 || pPager->eState==PAGER_WRITER_DBMOD
44685 assert( assert_pager_state(pPager) );
44687 /* In order to be able to rollback, an in-memory database must journal
44688 ** the page we are moving from.
44690 if( MEMDB ){
44691 rc = sqlite3PagerWrite(pPg);
44692 if( rc ) return rc;
44695 /* If the page being moved is dirty and has not been saved by the latest
44696 ** savepoint, then save the current contents of the page into the
44697 ** sub-journal now. This is required to handle the following scenario:
44699 ** BEGIN;
44700 ** <journal page X, then modify it in memory>
44701 ** SAVEPOINT one;
44702 ** <Move page X to location Y>
44703 ** ROLLBACK TO one;
44705 ** If page X were not written to the sub-journal here, it would not
44706 ** be possible to restore its contents when the "ROLLBACK TO one"
44707 ** statement were is processed.
44709 ** subjournalPage() may need to allocate space to store pPg->pgno into
44710 ** one or more savepoint bitvecs. This is the reason this function
44711 ** may return SQLITE_NOMEM.
44713 if( pPg->flags&PGHDR_DIRTY
44714 && subjRequiresPage(pPg)
44715 && SQLITE_OK!=(rc = subjournalPage(pPg))
44717 return rc;
44720 PAGERTRACE(("MOVE %d page %d (needSync=%d) moves to %d\n",
44721 PAGERID(pPager), pPg->pgno, (pPg->flags&PGHDR_NEED_SYNC)?1:0, pgno));
44722 IOTRACE(("MOVE %p %d %d\n", pPager, pPg->pgno, pgno))
44724 /* If the journal needs to be sync()ed before page pPg->pgno can
44725 ** be written to, store pPg->pgno in local variable needSyncPgno.
44727 ** If the isCommit flag is set, there is no need to remember that
44728 ** the journal needs to be sync()ed before database page pPg->pgno
44729 ** can be written to. The caller has already promised not to write to it.
44731 if( (pPg->flags&PGHDR_NEED_SYNC) && !isCommit ){
44732 needSyncPgno = pPg->pgno;
44733 assert( pageInJournal(pPg) || pPg->pgno>pPager->dbOrigSize );
44734 assert( pPg->flags&PGHDR_DIRTY );
44737 /* If the cache contains a page with page-number pgno, remove it
44738 ** from its hash chain. Also, if the PGHDR_NEED_SYNC flag was set for
44739 ** page pgno before the 'move' operation, it needs to be retained
44740 ** for the page moved there.
44742 pPg->flags &= ~PGHDR_NEED_SYNC;
44743 pPgOld = pager_lookup(pPager, pgno);
44744 assert( !pPgOld || pPgOld->nRef==1 );
44745 if( pPgOld ){
44746 pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);
44747 if( MEMDB ){
44748 /* Do not discard pages from an in-memory database since we might
44749 ** need to rollback later. Just move the page out of the way. */
44750 sqlite3PcacheMove(pPgOld, pPager->dbSize+1);
44751 }else{
44752 sqlite3PcacheDrop(pPgOld);
44756 origPgno = pPg->pgno;
44757 sqlite3PcacheMove(pPg, pgno);
44758 sqlite3PcacheMakeDirty(pPg);
44760 /* For an in-memory database, make sure the original page continues
44761 ** to exist, in case the transaction needs to roll back. Use pPgOld
44762 ** as the original page since it has already been allocated.
44764 if( MEMDB ){
44765 assert( pPgOld );
44766 sqlite3PcacheMove(pPgOld, origPgno);
44767 sqlite3PagerUnref(pPgOld);
44770 if( needSyncPgno ){
44771 /* If needSyncPgno is non-zero, then the journal file needs to be
44772 ** sync()ed before any data is written to database file page needSyncPgno.
44773 ** Currently, no such page exists in the page-cache and the
44774 ** "is journaled" bitvec flag has been set. This needs to be remedied by
44775 ** loading the page into the pager-cache and setting the PGHDR_NEED_SYNC
44776 ** flag.
44778 ** If the attempt to load the page into the page-cache fails, (due
44779 ** to a malloc() or IO failure), clear the bit in the pInJournal[]
44780 ** array. Otherwise, if the page is loaded and written again in
44781 ** this transaction, it may be written to the database file before
44782 ** it is synced into the journal file. This way, it may end up in
44783 ** the journal file twice, but that is not a problem.
44785 PgHdr *pPgHdr;
44786 rc = sqlite3PagerGet(pPager, needSyncPgno, &pPgHdr);
44787 if( rc!=SQLITE_OK ){
44788 if( needSyncPgno<=pPager->dbOrigSize ){
44789 assert( pPager->pTmpSpace!=0 );
44790 sqlite3BitvecClear(pPager->pInJournal, needSyncPgno, pPager->pTmpSpace);
44792 return rc;
44794 pPgHdr->flags |= PGHDR_NEED_SYNC;
44795 sqlite3PcacheMakeDirty(pPgHdr);
44796 sqlite3PagerUnref(pPgHdr);
44799 return SQLITE_OK;
44801 #endif
44804 ** Return a pointer to the data for the specified page.
44806 SQLITE_PRIVATE void *sqlite3PagerGetData(DbPage *pPg){
44807 assert( pPg->nRef>0 || pPg->pPager->memDb );
44808 return pPg->pData;
44812 ** Return a pointer to the Pager.nExtra bytes of "extra" space
44813 ** allocated along with the specified page.
44815 SQLITE_PRIVATE void *sqlite3PagerGetExtra(DbPage *pPg){
44816 return pPg->pExtra;
44820 ** Get/set the locking-mode for this pager. Parameter eMode must be one
44821 ** of PAGER_LOCKINGMODE_QUERY, PAGER_LOCKINGMODE_NORMAL or
44822 ** PAGER_LOCKINGMODE_EXCLUSIVE. If the parameter is not _QUERY, then
44823 ** the locking-mode is set to the value specified.
44825 ** The returned value is either PAGER_LOCKINGMODE_NORMAL or
44826 ** PAGER_LOCKINGMODE_EXCLUSIVE, indicating the current (possibly updated)
44827 ** locking-mode.
44829 SQLITE_PRIVATE int sqlite3PagerLockingMode(Pager *pPager, int eMode){
44830 assert( eMode==PAGER_LOCKINGMODE_QUERY
44831 || eMode==PAGER_LOCKINGMODE_NORMAL
44832 || eMode==PAGER_LOCKINGMODE_EXCLUSIVE );
44833 assert( PAGER_LOCKINGMODE_QUERY<0 );
44834 assert( PAGER_LOCKINGMODE_NORMAL>=0 && PAGER_LOCKINGMODE_EXCLUSIVE>=0 );
44835 assert( pPager->exclusiveMode || 0==sqlite3WalHeapMemory(pPager->pWal) );
44836 if( eMode>=0 && !pPager->tempFile && !sqlite3WalHeapMemory(pPager->pWal) ){
44837 pPager->exclusiveMode = (u8)eMode;
44839 return (int)pPager->exclusiveMode;
44843 ** Set the journal-mode for this pager. Parameter eMode must be one of:
44845 ** PAGER_JOURNALMODE_DELETE
44846 ** PAGER_JOURNALMODE_TRUNCATE
44847 ** PAGER_JOURNALMODE_PERSIST
44848 ** PAGER_JOURNALMODE_OFF
44849 ** PAGER_JOURNALMODE_MEMORY
44850 ** PAGER_JOURNALMODE_WAL
44852 ** The journalmode is set to the value specified if the change is allowed.
44853 ** The change may be disallowed for the following reasons:
44855 ** * An in-memory database can only have its journal_mode set to _OFF
44856 ** or _MEMORY.
44858 ** * Temporary databases cannot have _WAL journalmode.
44860 ** The returned indicate the current (possibly updated) journal-mode.
44862 SQLITE_PRIVATE int sqlite3PagerSetJournalMode(Pager *pPager, int eMode){
44863 u8 eOld = pPager->journalMode; /* Prior journalmode */
44865 #ifdef SQLITE_DEBUG
44866 /* The print_pager_state() routine is intended to be used by the debugger
44867 ** only. We invoke it once here to suppress a compiler warning. */
44868 print_pager_state(pPager);
44869 #endif
44872 /* The eMode parameter is always valid */
44873 assert( eMode==PAGER_JOURNALMODE_DELETE
44874 || eMode==PAGER_JOURNALMODE_TRUNCATE
44875 || eMode==PAGER_JOURNALMODE_PERSIST
44876 || eMode==PAGER_JOURNALMODE_OFF
44877 || eMode==PAGER_JOURNALMODE_WAL
44878 || eMode==PAGER_JOURNALMODE_MEMORY );
44880 /* This routine is only called from the OP_JournalMode opcode, and
44881 ** the logic there will never allow a temporary file to be changed
44882 ** to WAL mode.
44884 assert( pPager->tempFile==0 || eMode!=PAGER_JOURNALMODE_WAL );
44886 /* Do allow the journalmode of an in-memory database to be set to
44887 ** anything other than MEMORY or OFF
44889 if( MEMDB ){
44890 assert( eOld==PAGER_JOURNALMODE_MEMORY || eOld==PAGER_JOURNALMODE_OFF );
44891 if( eMode!=PAGER_JOURNALMODE_MEMORY && eMode!=PAGER_JOURNALMODE_OFF ){
44892 eMode = eOld;
44896 if( eMode!=eOld ){
44898 /* Change the journal mode. */
44899 assert( pPager->eState!=PAGER_ERROR );
44900 pPager->journalMode = (u8)eMode;
44902 /* When transistioning from TRUNCATE or PERSIST to any other journal
44903 ** mode except WAL, unless the pager is in locking_mode=exclusive mode,
44904 ** delete the journal file.
44906 assert( (PAGER_JOURNALMODE_TRUNCATE & 5)==1 );
44907 assert( (PAGER_JOURNALMODE_PERSIST & 5)==1 );
44908 assert( (PAGER_JOURNALMODE_DELETE & 5)==0 );
44909 assert( (PAGER_JOURNALMODE_MEMORY & 5)==4 );
44910 assert( (PAGER_JOURNALMODE_OFF & 5)==0 );
44911 assert( (PAGER_JOURNALMODE_WAL & 5)==5 );
44913 assert( isOpen(pPager->fd) || pPager->exclusiveMode );
44914 if( !pPager->exclusiveMode && (eOld & 5)==1 && (eMode & 1)==0 ){
44916 /* In this case we would like to delete the journal file. If it is
44917 ** not possible, then that is not a problem. Deleting the journal file
44918 ** here is an optimization only.
44920 ** Before deleting the journal file, obtain a RESERVED lock on the
44921 ** database file. This ensures that the journal file is not deleted
44922 ** while it is in use by some other client.
44924 sqlite3OsClose(pPager->jfd);
44925 if( pPager->eLock>=RESERVED_LOCK ){
44926 sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
44927 }else{
44928 int rc = SQLITE_OK;
44929 int state = pPager->eState;
44930 assert( state==PAGER_OPEN || state==PAGER_READER );
44931 if( state==PAGER_OPEN ){
44932 rc = sqlite3PagerSharedLock(pPager);
44934 if( pPager->eState==PAGER_READER ){
44935 assert( rc==SQLITE_OK );
44936 rc = pagerLockDb(pPager, RESERVED_LOCK);
44938 if( rc==SQLITE_OK ){
44939 sqlite3OsDelete(pPager->pVfs, pPager->zJournal, 0);
44941 if( rc==SQLITE_OK && state==PAGER_READER ){
44942 pagerUnlockDb(pPager, SHARED_LOCK);
44943 }else if( state==PAGER_OPEN ){
44944 pager_unlock(pPager);
44946 assert( state==pPager->eState );
44951 /* Return the new journal mode */
44952 return (int)pPager->journalMode;
44956 ** Return the current journal mode.
44958 SQLITE_PRIVATE int sqlite3PagerGetJournalMode(Pager *pPager){
44959 return (int)pPager->journalMode;
44963 ** Return TRUE if the pager is in a state where it is OK to change the
44964 ** journalmode. Journalmode changes can only happen when the database
44965 ** is unmodified.
44967 SQLITE_PRIVATE int sqlite3PagerOkToChangeJournalMode(Pager *pPager){
44968 assert( assert_pager_state(pPager) );
44969 if( pPager->eState>=PAGER_WRITER_CACHEMOD ) return 0;
44970 if( NEVER(isOpen(pPager->jfd) && pPager->journalOff>0) ) return 0;
44971 return 1;
44975 ** Get/set the size-limit used for persistent journal files.
44977 ** Setting the size limit to -1 means no limit is enforced.
44978 ** An attempt to set a limit smaller than -1 is a no-op.
44980 SQLITE_PRIVATE i64 sqlite3PagerJournalSizeLimit(Pager *pPager, i64 iLimit){
44981 if( iLimit>=-1 ){
44982 pPager->journalSizeLimit = iLimit;
44983 sqlite3WalLimit(pPager->pWal, iLimit);
44985 return pPager->journalSizeLimit;
44989 ** Return a pointer to the pPager->pBackup variable. The backup module
44990 ** in backup.c maintains the content of this variable. This module
44991 ** uses it opaquely as an argument to sqlite3BackupRestart() and
44992 ** sqlite3BackupUpdate() only.
44994 SQLITE_PRIVATE sqlite3_backup **sqlite3PagerBackupPtr(Pager *pPager){
44995 return &pPager->pBackup;
44998 #ifndef SQLITE_OMIT_VACUUM
45000 ** Unless this is an in-memory or temporary database, clear the pager cache.
45002 SQLITE_PRIVATE void sqlite3PagerClearCache(Pager *pPager){
45003 if( !MEMDB && pPager->tempFile==0 ) pager_reset(pPager);
45005 #endif
45007 #ifndef SQLITE_OMIT_WAL
45009 ** This function is called when the user invokes "PRAGMA wal_checkpoint",
45010 ** "PRAGMA wal_blocking_checkpoint" or calls the sqlite3_wal_checkpoint()
45011 ** or wal_blocking_checkpoint() API functions.
45013 ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
45015 SQLITE_PRIVATE int sqlite3PagerCheckpoint(Pager *pPager, int eMode, int *pnLog, int *pnCkpt){
45016 int rc = SQLITE_OK;
45017 if( pPager->pWal ){
45018 rc = sqlite3WalCheckpoint(pPager->pWal, eMode,
45019 pPager->xBusyHandler, pPager->pBusyHandlerArg,
45020 pPager->ckptSyncFlags, pPager->pageSize, (u8 *)pPager->pTmpSpace,
45021 pnLog, pnCkpt
45024 return rc;
45027 SQLITE_PRIVATE int sqlite3PagerWalCallback(Pager *pPager){
45028 return sqlite3WalCallback(pPager->pWal);
45032 ** Return true if the underlying VFS for the given pager supports the
45033 ** primitives necessary for write-ahead logging.
45035 SQLITE_PRIVATE int sqlite3PagerWalSupported(Pager *pPager){
45036 const sqlite3_io_methods *pMethods = pPager->fd->pMethods;
45037 return pPager->exclusiveMode || (pMethods->iVersion>=2 && pMethods->xShmMap);
45041 ** Attempt to take an exclusive lock on the database file. If a PENDING lock
45042 ** is obtained instead, immediately release it.
45044 static int pagerExclusiveLock(Pager *pPager){
45045 int rc; /* Return code */
45047 assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK );
45048 rc = pagerLockDb(pPager, EXCLUSIVE_LOCK);
45049 if( rc!=SQLITE_OK ){
45050 /* If the attempt to grab the exclusive lock failed, release the
45051 ** pending lock that may have been obtained instead. */
45052 pagerUnlockDb(pPager, SHARED_LOCK);
45055 return rc;
45059 ** Call sqlite3WalOpen() to open the WAL handle. If the pager is in
45060 ** exclusive-locking mode when this function is called, take an EXCLUSIVE
45061 ** lock on the database file and use heap-memory to store the wal-index
45062 ** in. Otherwise, use the normal shared-memory.
45064 static int pagerOpenWal(Pager *pPager){
45065 int rc = SQLITE_OK;
45067 assert( pPager->pWal==0 && pPager->tempFile==0 );
45068 assert( pPager->eLock==SHARED_LOCK || pPager->eLock==EXCLUSIVE_LOCK || pPager->noReadlock);
45070 /* If the pager is already in exclusive-mode, the WAL module will use
45071 ** heap-memory for the wal-index instead of the VFS shared-memory
45072 ** implementation. Take the exclusive lock now, before opening the WAL
45073 ** file, to make sure this is safe.
45075 if( pPager->exclusiveMode ){
45076 rc = pagerExclusiveLock(pPager);
45079 /* Open the connection to the log file. If this operation fails,
45080 ** (e.g. due to malloc() failure), return an error code.
45082 if( rc==SQLITE_OK ){
45083 rc = sqlite3WalOpen(pPager->pVfs,
45084 pPager->fd, pPager->zWal, pPager->exclusiveMode,
45085 pPager->journalSizeLimit, &pPager->pWal
45089 return rc;
45094 ** The caller must be holding a SHARED lock on the database file to call
45095 ** this function.
45097 ** If the pager passed as the first argument is open on a real database
45098 ** file (not a temp file or an in-memory database), and the WAL file
45099 ** is not already open, make an attempt to open it now. If successful,
45100 ** return SQLITE_OK. If an error occurs or the VFS used by the pager does
45101 ** not support the xShmXXX() methods, return an error code. *pbOpen is
45102 ** not modified in either case.
45104 ** If the pager is open on a temp-file (or in-memory database), or if
45105 ** the WAL file is already open, set *pbOpen to 1 and return SQLITE_OK
45106 ** without doing anything.
45108 SQLITE_PRIVATE int sqlite3PagerOpenWal(
45109 Pager *pPager, /* Pager object */
45110 int *pbOpen /* OUT: Set to true if call is a no-op */
45112 int rc = SQLITE_OK; /* Return code */
45114 assert( assert_pager_state(pPager) );
45115 assert( pPager->eState==PAGER_OPEN || pbOpen );
45116 assert( pPager->eState==PAGER_READER || !pbOpen );
45117 assert( pbOpen==0 || *pbOpen==0 );
45118 assert( pbOpen!=0 || (!pPager->tempFile && !pPager->pWal) );
45120 if( !pPager->tempFile && !pPager->pWal ){
45121 if( !sqlite3PagerWalSupported(pPager) ) return SQLITE_CANTOPEN;
45123 /* Close any rollback journal previously open */
45124 sqlite3OsClose(pPager->jfd);
45126 rc = pagerOpenWal(pPager);
45127 if( rc==SQLITE_OK ){
45128 pPager->journalMode = PAGER_JOURNALMODE_WAL;
45129 pPager->eState = PAGER_OPEN;
45131 }else{
45132 *pbOpen = 1;
45135 return rc;
45139 ** This function is called to close the connection to the log file prior
45140 ** to switching from WAL to rollback mode.
45142 ** Before closing the log file, this function attempts to take an
45143 ** EXCLUSIVE lock on the database file. If this cannot be obtained, an
45144 ** error (SQLITE_BUSY) is returned and the log connection is not closed.
45145 ** If successful, the EXCLUSIVE lock is not released before returning.
45147 SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
45148 int rc = SQLITE_OK;
45150 assert( pPager->journalMode==PAGER_JOURNALMODE_WAL );
45152 /* If the log file is not already open, but does exist in the file-system,
45153 ** it may need to be checkpointed before the connection can switch to
45154 ** rollback mode. Open it now so this can happen.
45156 if( !pPager->pWal ){
45157 int logexists = 0;
45158 rc = pagerLockDb(pPager, SHARED_LOCK);
45159 if( rc==SQLITE_OK ){
45160 rc = sqlite3OsAccess(
45161 pPager->pVfs, pPager->zWal, SQLITE_ACCESS_EXISTS, &logexists
45164 if( rc==SQLITE_OK && logexists ){
45165 rc = pagerOpenWal(pPager);
45169 /* Checkpoint and close the log. Because an EXCLUSIVE lock is held on
45170 ** the database file, the log and log-summary files will be deleted.
45172 if( rc==SQLITE_OK && pPager->pWal ){
45173 rc = pagerExclusiveLock(pPager);
45174 if( rc==SQLITE_OK ){
45175 rc = sqlite3WalClose(pPager->pWal, pPager->ckptSyncFlags,
45176 pPager->pageSize, (u8*)pPager->pTmpSpace);
45177 pPager->pWal = 0;
45180 return rc;
45183 #ifdef SQLITE_HAS_CODEC
45185 ** This function is called by the wal module when writing page content
45186 ** into the log file.
45188 ** This function returns a pointer to a buffer containing the encrypted
45189 ** page content. If a malloc fails, this function may return NULL.
45191 SQLITE_PRIVATE void *sqlite3PagerCodec(PgHdr *pPg){
45192 void *aData = 0;
45193 CODEC2(pPg->pPager, pPg->pData, pPg->pgno, 6, return 0, aData);
45194 return aData;
45196 #endif /* SQLITE_HAS_CODEC */
45198 #endif /* !SQLITE_OMIT_WAL */
45200 #endif /* SQLITE_OMIT_DISKIO */
45202 /************** End of pager.c ***********************************************/
45203 /************** Begin file wal.c *********************************************/
45205 ** 2010 February 1
45207 ** The author disclaims copyright to this source code. In place of
45208 ** a legal notice, here is a blessing:
45210 ** May you do good and not evil.
45211 ** May you find forgiveness for yourself and forgive others.
45212 ** May you share freely, never taking more than you give.
45214 *************************************************************************
45216 ** This file contains the implementation of a write-ahead log (WAL) used in
45217 ** "journal_mode=WAL" mode.
45219 ** WRITE-AHEAD LOG (WAL) FILE FORMAT
45221 ** A WAL file consists of a header followed by zero or more "frames".
45222 ** Each frame records the revised content of a single page from the
45223 ** database file. All changes to the database are recorded by writing
45224 ** frames into the WAL. Transactions commit when a frame is written that
45225 ** contains a commit marker. A single WAL can and usually does record
45226 ** multiple transactions. Periodically, the content of the WAL is
45227 ** transferred back into the database file in an operation called a
45228 ** "checkpoint".
45230 ** A single WAL file can be used multiple times. In other words, the
45231 ** WAL can fill up with frames and then be checkpointed and then new
45232 ** frames can overwrite the old ones. A WAL always grows from beginning
45233 ** toward the end. Checksums and counters attached to each frame are
45234 ** used to determine which frames within the WAL are valid and which
45235 ** are leftovers from prior checkpoints.
45237 ** The WAL header is 32 bytes in size and consists of the following eight
45238 ** big-endian 32-bit unsigned integer values:
45240 ** 0: Magic number. 0x377f0682 or 0x377f0683
45241 ** 4: File format version. Currently 3007000
45242 ** 8: Database page size. Example: 1024
45243 ** 12: Checkpoint sequence number
45244 ** 16: Salt-1, random integer incremented with each checkpoint
45245 ** 20: Salt-2, a different random integer changing with each ckpt
45246 ** 24: Checksum-1 (first part of checksum for first 24 bytes of header).
45247 ** 28: Checksum-2 (second part of checksum for first 24 bytes of header).
45249 ** Immediately following the wal-header are zero or more frames. Each
45250 ** frame consists of a 24-byte frame-header followed by a <page-size> bytes
45251 ** of page data. The frame-header is six big-endian 32-bit unsigned
45252 ** integer values, as follows:
45254 ** 0: Page number.
45255 ** 4: For commit records, the size of the database image in pages
45256 ** after the commit. For all other records, zero.
45257 ** 8: Salt-1 (copied from the header)
45258 ** 12: Salt-2 (copied from the header)
45259 ** 16: Checksum-1.
45260 ** 20: Checksum-2.
45262 ** A frame is considered valid if and only if the following conditions are
45263 ** true:
45265 ** (1) The salt-1 and salt-2 values in the frame-header match
45266 ** salt values in the wal-header
45268 ** (2) The checksum values in the final 8 bytes of the frame-header
45269 ** exactly match the checksum computed consecutively on the
45270 ** WAL header and the first 8 bytes and the content of all frames
45271 ** up to and including the current frame.
45273 ** The checksum is computed using 32-bit big-endian integers if the
45274 ** magic number in the first 4 bytes of the WAL is 0x377f0683 and it
45275 ** is computed using little-endian if the magic number is 0x377f0682.
45276 ** The checksum values are always stored in the frame header in a
45277 ** big-endian format regardless of which byte order is used to compute
45278 ** the checksum. The checksum is computed by interpreting the input as
45279 ** an even number of unsigned 32-bit integers: x[0] through x[N]. The
45280 ** algorithm used for the checksum is as follows:
45282 ** for i from 0 to n-1 step 2:
45283 ** s0 += x[i] + s1;
45284 ** s1 += x[i+1] + s0;
45285 ** endfor
45287 ** Note that s0 and s1 are both weighted checksums using fibonacci weights
45288 ** in reverse order (the largest fibonacci weight occurs on the first element
45289 ** of the sequence being summed.) The s1 value spans all 32-bit
45290 ** terms of the sequence whereas s0 omits the final term.
45292 ** On a checkpoint, the WAL is first VFS.xSync-ed, then valid content of the
45293 ** WAL is transferred into the database, then the database is VFS.xSync-ed.
45294 ** The VFS.xSync operations serve as write barriers - all writes launched
45295 ** before the xSync must complete before any write that launches after the
45296 ** xSync begins.
45298 ** After each checkpoint, the salt-1 value is incremented and the salt-2
45299 ** value is randomized. This prevents old and new frames in the WAL from
45300 ** being considered valid at the same time and being checkpointing together
45301 ** following a crash.
45303 ** READER ALGORITHM
45305 ** To read a page from the database (call it page number P), a reader
45306 ** first checks the WAL to see if it contains page P. If so, then the
45307 ** last valid instance of page P that is a followed by a commit frame
45308 ** or is a commit frame itself becomes the value read. If the WAL
45309 ** contains no copies of page P that are valid and which are a commit
45310 ** frame or are followed by a commit frame, then page P is read from
45311 ** the database file.
45313 ** To start a read transaction, the reader records the index of the last
45314 ** valid frame in the WAL. The reader uses this recorded "mxFrame" value
45315 ** for all subsequent read operations. New transactions can be appended
45316 ** to the WAL, but as long as the reader uses its original mxFrame value
45317 ** and ignores the newly appended content, it will see a consistent snapshot
45318 ** of the database from a single point in time. This technique allows
45319 ** multiple concurrent readers to view different versions of the database
45320 ** content simultaneously.
45322 ** The reader algorithm in the previous paragraphs works correctly, but
45323 ** because frames for page P can appear anywhere within the WAL, the
45324 ** reader has to scan the entire WAL looking for page P frames. If the
45325 ** WAL is large (multiple megabytes is typical) that scan can be slow,
45326 ** and read performance suffers. To overcome this problem, a separate
45327 ** data structure called the wal-index is maintained to expedite the
45328 ** search for frames of a particular page.
45330 ** WAL-INDEX FORMAT
45332 ** Conceptually, the wal-index is shared memory, though VFS implementations
45333 ** might choose to implement the wal-index using a mmapped file. Because
45334 ** the wal-index is shared memory, SQLite does not support journal_mode=WAL
45335 ** on a network filesystem. All users of the database must be able to
45336 ** share memory.
45338 ** The wal-index is transient. After a crash, the wal-index can (and should
45339 ** be) reconstructed from the original WAL file. In fact, the VFS is required
45340 ** to either truncate or zero the header of the wal-index when the last
45341 ** connection to it closes. Because the wal-index is transient, it can
45342 ** use an architecture-specific format; it does not have to be cross-platform.
45343 ** Hence, unlike the database and WAL file formats which store all values
45344 ** as big endian, the wal-index can store multi-byte values in the native
45345 ** byte order of the host computer.
45347 ** The purpose of the wal-index is to answer this question quickly: Given
45348 ** a page number P, return the index of the last frame for page P in the WAL,
45349 ** or return NULL if there are no frames for page P in the WAL.
45351 ** The wal-index consists of a header region, followed by an one or
45352 ** more index blocks.
45354 ** The wal-index header contains the total number of frames within the WAL
45355 ** in the the mxFrame field.
45357 ** Each index block except for the first contains information on
45358 ** HASHTABLE_NPAGE frames. The first index block contains information on
45359 ** HASHTABLE_NPAGE_ONE frames. The values of HASHTABLE_NPAGE_ONE and
45360 ** HASHTABLE_NPAGE are selected so that together the wal-index header and
45361 ** first index block are the same size as all other index blocks in the
45362 ** wal-index.
45364 ** Each index block contains two sections, a page-mapping that contains the
45365 ** database page number associated with each wal frame, and a hash-table
45366 ** that allows readers to query an index block for a specific page number.
45367 ** The page-mapping is an array of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE
45368 ** for the first index block) 32-bit page numbers. The first entry in the
45369 ** first index-block contains the database page number corresponding to the
45370 ** first frame in the WAL file. The first entry in the second index block
45371 ** in the WAL file corresponds to the (HASHTABLE_NPAGE_ONE+1)th frame in
45372 ** the log, and so on.
45374 ** The last index block in a wal-index usually contains less than the full
45375 ** complement of HASHTABLE_NPAGE (or HASHTABLE_NPAGE_ONE) page-numbers,
45376 ** depending on the contents of the WAL file. This does not change the
45377 ** allocated size of the page-mapping array - the page-mapping array merely
45378 ** contains unused entries.
45380 ** Even without using the hash table, the last frame for page P
45381 ** can be found by scanning the page-mapping sections of each index block
45382 ** starting with the last index block and moving toward the first, and
45383 ** within each index block, starting at the end and moving toward the
45384 ** beginning. The first entry that equals P corresponds to the frame
45385 ** holding the content for that page.
45387 ** The hash table consists of HASHTABLE_NSLOT 16-bit unsigned integers.
45388 ** HASHTABLE_NSLOT = 2*HASHTABLE_NPAGE, and there is one entry in the
45389 ** hash table for each page number in the mapping section, so the hash
45390 ** table is never more than half full. The expected number of collisions
45391 ** prior to finding a match is 1. Each entry of the hash table is an
45392 ** 1-based index of an entry in the mapping section of the same
45393 ** index block. Let K be the 1-based index of the largest entry in
45394 ** the mapping section. (For index blocks other than the last, K will
45395 ** always be exactly HASHTABLE_NPAGE (4096) and for the last index block
45396 ** K will be (mxFrame%HASHTABLE_NPAGE).) Unused slots of the hash table
45397 ** contain a value of 0.
45399 ** To look for page P in the hash table, first compute a hash iKey on
45400 ** P as follows:
45402 ** iKey = (P * 383) % HASHTABLE_NSLOT
45404 ** Then start scanning entries of the hash table, starting with iKey
45405 ** (wrapping around to the beginning when the end of the hash table is
45406 ** reached) until an unused hash slot is found. Let the first unused slot
45407 ** be at index iUnused. (iUnused might be less than iKey if there was
45408 ** wrap-around.) Because the hash table is never more than half full,
45409 ** the search is guaranteed to eventually hit an unused entry. Let
45410 ** iMax be the value between iKey and iUnused, closest to iUnused,
45411 ** where aHash[iMax]==P. If there is no iMax entry (if there exists
45412 ** no hash slot such that aHash[i]==p) then page P is not in the
45413 ** current index block. Otherwise the iMax-th mapping entry of the
45414 ** current index block corresponds to the last entry that references
45415 ** page P.
45417 ** A hash search begins with the last index block and moves toward the
45418 ** first index block, looking for entries corresponding to page P. On
45419 ** average, only two or three slots in each index block need to be
45420 ** examined in order to either find the last entry for page P, or to
45421 ** establish that no such entry exists in the block. Each index block
45422 ** holds over 4000 entries. So two or three index blocks are sufficient
45423 ** to cover a typical 10 megabyte WAL file, assuming 1K pages. 8 or 10
45424 ** comparisons (on average) suffice to either locate a frame in the
45425 ** WAL or to establish that the frame does not exist in the WAL. This
45426 ** is much faster than scanning the entire 10MB WAL.
45428 ** Note that entries are added in order of increasing K. Hence, one
45429 ** reader might be using some value K0 and a second reader that started
45430 ** at a later time (after additional transactions were added to the WAL
45431 ** and to the wal-index) might be using a different value K1, where K1>K0.
45432 ** Both readers can use the same hash table and mapping section to get
45433 ** the correct result. There may be entries in the hash table with
45434 ** K>K0 but to the first reader, those entries will appear to be unused
45435 ** slots in the hash table and so the first reader will get an answer as
45436 ** if no values greater than K0 had ever been inserted into the hash table
45437 ** in the first place - which is what reader one wants. Meanwhile, the
45438 ** second reader using K1 will see additional values that were inserted
45439 ** later, which is exactly what reader two wants.
45441 ** When a rollback occurs, the value of K is decreased. Hash table entries
45442 ** that correspond to frames greater than the new K value are removed
45443 ** from the hash table at this point.
45445 #ifndef SQLITE_OMIT_WAL
45449 ** Trace output macros
45451 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
45452 SQLITE_PRIVATE int sqlite3WalTrace = 0;
45453 # define WALTRACE(X) if(sqlite3WalTrace) sqlite3DebugPrintf X
45454 #else
45455 # define WALTRACE(X)
45456 #endif
45459 ** The maximum (and only) versions of the wal and wal-index formats
45460 ** that may be interpreted by this version of SQLite.
45462 ** If a client begins recovering a WAL file and finds that (a) the checksum
45463 ** values in the wal-header are correct and (b) the version field is not
45464 ** WAL_MAX_VERSION, recovery fails and SQLite returns SQLITE_CANTOPEN.
45466 ** Similarly, if a client successfully reads a wal-index header (i.e. the
45467 ** checksum test is successful) and finds that the version field is not
45468 ** WALINDEX_MAX_VERSION, then no read-transaction is opened and SQLite
45469 ** returns SQLITE_CANTOPEN.
45471 #define WAL_MAX_VERSION 3007000
45472 #define WALINDEX_MAX_VERSION 3007000
45475 ** Indices of various locking bytes. WAL_NREADER is the number
45476 ** of available reader locks and should be at least 3.
45478 #define WAL_WRITE_LOCK 0
45479 #define WAL_ALL_BUT_WRITE 1
45480 #define WAL_CKPT_LOCK 1
45481 #define WAL_RECOVER_LOCK 2
45482 #define WAL_READ_LOCK(I) (3+(I))
45483 #define WAL_NREADER (SQLITE_SHM_NLOCK-3)
45486 /* Object declarations */
45487 typedef struct WalIndexHdr WalIndexHdr;
45488 typedef struct WalIterator WalIterator;
45489 typedef struct WalCkptInfo WalCkptInfo;
45493 ** The following object holds a copy of the wal-index header content.
45495 ** The actual header in the wal-index consists of two copies of this
45496 ** object.
45498 ** The szPage value can be any power of 2 between 512 and 32768, inclusive.
45499 ** Or it can be 1 to represent a 65536-byte page. The latter case was
45500 ** added in 3.7.1 when support for 64K pages was added.
45502 struct WalIndexHdr {
45503 u32 iVersion; /* Wal-index version */
45504 u32 unused; /* Unused (padding) field */
45505 u32 iChange; /* Counter incremented each transaction */
45506 u8 isInit; /* 1 when initialized */
45507 u8 bigEndCksum; /* True if checksums in WAL are big-endian */
45508 u16 szPage; /* Database page size in bytes. 1==64K */
45509 u32 mxFrame; /* Index of last valid frame in the WAL */
45510 u32 nPage; /* Size of database in pages */
45511 u32 aFrameCksum[2]; /* Checksum of last frame in log */
45512 u32 aSalt[2]; /* Two salt values copied from WAL header */
45513 u32 aCksum[2]; /* Checksum over all prior fields */
45517 ** A copy of the following object occurs in the wal-index immediately
45518 ** following the second copy of the WalIndexHdr. This object stores
45519 ** information used by checkpoint.
45521 ** nBackfill is the number of frames in the WAL that have been written
45522 ** back into the database. (We call the act of moving content from WAL to
45523 ** database "backfilling".) The nBackfill number is never greater than
45524 ** WalIndexHdr.mxFrame. nBackfill can only be increased by threads
45525 ** holding the WAL_CKPT_LOCK lock (which includes a recovery thread).
45526 ** However, a WAL_WRITE_LOCK thread can move the value of nBackfill from
45527 ** mxFrame back to zero when the WAL is reset.
45529 ** There is one entry in aReadMark[] for each reader lock. If a reader
45530 ** holds read-lock K, then the value in aReadMark[K] is no greater than
45531 ** the mxFrame for that reader. The value READMARK_NOT_USED (0xffffffff)
45532 ** for any aReadMark[] means that entry is unused. aReadMark[0] is
45533 ** a special case; its value is never used and it exists as a place-holder
45534 ** to avoid having to offset aReadMark[] indexs by one. Readers holding
45535 ** WAL_READ_LOCK(0) always ignore the entire WAL and read all content
45536 ** directly from the database.
45538 ** The value of aReadMark[K] may only be changed by a thread that
45539 ** is holding an exclusive lock on WAL_READ_LOCK(K). Thus, the value of
45540 ** aReadMark[K] cannot changed while there is a reader is using that mark
45541 ** since the reader will be holding a shared lock on WAL_READ_LOCK(K).
45543 ** The checkpointer may only transfer frames from WAL to database where
45544 ** the frame numbers are less than or equal to every aReadMark[] that is
45545 ** in use (that is, every aReadMark[j] for which there is a corresponding
45546 ** WAL_READ_LOCK(j)). New readers (usually) pick the aReadMark[] with the
45547 ** largest value and will increase an unused aReadMark[] to mxFrame if there
45548 ** is not already an aReadMark[] equal to mxFrame. The exception to the
45549 ** previous sentence is when nBackfill equals mxFrame (meaning that everything
45550 ** in the WAL has been backfilled into the database) then new readers
45551 ** will choose aReadMark[0] which has value 0 and hence such reader will
45552 ** get all their all content directly from the database file and ignore
45553 ** the WAL.
45555 ** Writers normally append new frames to the end of the WAL. However,
45556 ** if nBackfill equals mxFrame (meaning that all WAL content has been
45557 ** written back into the database) and if no readers are using the WAL
45558 ** (in other words, if there are no WAL_READ_LOCK(i) where i>0) then
45559 ** the writer will first "reset" the WAL back to the beginning and start
45560 ** writing new content beginning at frame 1.
45562 ** We assume that 32-bit loads are atomic and so no locks are needed in
45563 ** order to read from any aReadMark[] entries.
45565 struct WalCkptInfo {
45566 u32 nBackfill; /* Number of WAL frames backfilled into DB */
45567 u32 aReadMark[WAL_NREADER]; /* Reader marks */
45569 #define READMARK_NOT_USED 0xffffffff
45572 /* A block of WALINDEX_LOCK_RESERVED bytes beginning at
45573 ** WALINDEX_LOCK_OFFSET is reserved for locks. Since some systems
45574 ** only support mandatory file-locks, we do not read or write data
45575 ** from the region of the file on which locks are applied.
45577 #define WALINDEX_LOCK_OFFSET (sizeof(WalIndexHdr)*2 + sizeof(WalCkptInfo))
45578 #define WALINDEX_LOCK_RESERVED 16
45579 #define WALINDEX_HDR_SIZE (WALINDEX_LOCK_OFFSET+WALINDEX_LOCK_RESERVED)
45581 /* Size of header before each frame in wal */
45582 #define WAL_FRAME_HDRSIZE 24
45584 /* Size of write ahead log header, including checksum. */
45585 /* #define WAL_HDRSIZE 24 */
45586 #define WAL_HDRSIZE 32
45588 /* WAL magic value. Either this value, or the same value with the least
45589 ** significant bit also set (WAL_MAGIC | 0x00000001) is stored in 32-bit
45590 ** big-endian format in the first 4 bytes of a WAL file.
45592 ** If the LSB is set, then the checksums for each frame within the WAL
45593 ** file are calculated by treating all data as an array of 32-bit
45594 ** big-endian words. Otherwise, they are calculated by interpreting
45595 ** all data as 32-bit little-endian words.
45597 #define WAL_MAGIC 0x377f0682
45600 ** Return the offset of frame iFrame in the write-ahead log file,
45601 ** assuming a database page size of szPage bytes. The offset returned
45602 ** is to the start of the write-ahead log frame-header.
45604 #define walFrameOffset(iFrame, szPage) ( \
45605 WAL_HDRSIZE + ((iFrame)-1)*(i64)((szPage)+WAL_FRAME_HDRSIZE) \
45609 ** An open write-ahead log file is represented by an instance of the
45610 ** following object.
45612 struct Wal {
45613 sqlite3_vfs *pVfs; /* The VFS used to create pDbFd */
45614 sqlite3_file *pDbFd; /* File handle for the database file */
45615 sqlite3_file *pWalFd; /* File handle for WAL file */
45616 u32 iCallback; /* Value to pass to log callback (or 0) */
45617 i64 mxWalSize; /* Truncate WAL to this size upon reset */
45618 int nWiData; /* Size of array apWiData */
45619 int szFirstBlock; /* Size of first block written to WAL file */
45620 volatile u32 **apWiData; /* Pointer to wal-index content in memory */
45621 u32 szPage; /* Database page size */
45622 i16 readLock; /* Which read lock is being held. -1 for none */
45623 u8 syncFlags; /* Flags to use to sync header writes */
45624 u8 exclusiveMode; /* Non-zero if connection is in exclusive mode */
45625 u8 writeLock; /* True if in a write transaction */
45626 u8 ckptLock; /* True if holding a checkpoint lock */
45627 u8 readOnly; /* WAL_RDWR, WAL_RDONLY, or WAL_SHM_RDONLY */
45628 u8 truncateOnCommit; /* True to truncate WAL file on commit */
45629 u8 syncHeader; /* Fsync the WAL header if true */
45630 u8 padToSectorBoundary; /* Pad transactions out to the next sector */
45631 WalIndexHdr hdr; /* Wal-index header for current transaction */
45632 const char *zWalName; /* Name of WAL file */
45633 u32 nCkpt; /* Checkpoint sequence counter in the wal-header */
45634 #ifdef SQLITE_DEBUG
45635 u8 lockError; /* True if a locking error has occurred */
45636 #endif
45640 ** Candidate values for Wal.exclusiveMode.
45642 #define WAL_NORMAL_MODE 0
45643 #define WAL_EXCLUSIVE_MODE 1
45644 #define WAL_HEAPMEMORY_MODE 2
45647 ** Possible values for WAL.readOnly
45649 #define WAL_RDWR 0 /* Normal read/write connection */
45650 #define WAL_RDONLY 1 /* The WAL file is readonly */
45651 #define WAL_SHM_RDONLY 2 /* The SHM file is readonly */
45654 ** Each page of the wal-index mapping contains a hash-table made up of
45655 ** an array of HASHTABLE_NSLOT elements of the following type.
45657 typedef u16 ht_slot;
45660 ** This structure is used to implement an iterator that loops through
45661 ** all frames in the WAL in database page order. Where two or more frames
45662 ** correspond to the same database page, the iterator visits only the
45663 ** frame most recently written to the WAL (in other words, the frame with
45664 ** the largest index).
45666 ** The internals of this structure are only accessed by:
45668 ** walIteratorInit() - Create a new iterator,
45669 ** walIteratorNext() - Step an iterator,
45670 ** walIteratorFree() - Free an iterator.
45672 ** This functionality is used by the checkpoint code (see walCheckpoint()).
45674 struct WalIterator {
45675 int iPrior; /* Last result returned from the iterator */
45676 int nSegment; /* Number of entries in aSegment[] */
45677 struct WalSegment {
45678 int iNext; /* Next slot in aIndex[] not yet returned */
45679 ht_slot *aIndex; /* i0, i1, i2... such that aPgno[iN] ascend */
45680 u32 *aPgno; /* Array of page numbers. */
45681 int nEntry; /* Nr. of entries in aPgno[] and aIndex[] */
45682 int iZero; /* Frame number associated with aPgno[0] */
45683 } aSegment[1]; /* One for every 32KB page in the wal-index */
45687 ** Define the parameters of the hash tables in the wal-index file. There
45688 ** is a hash-table following every HASHTABLE_NPAGE page numbers in the
45689 ** wal-index.
45691 ** Changing any of these constants will alter the wal-index format and
45692 ** create incompatibilities.
45694 #define HASHTABLE_NPAGE 4096 /* Must be power of 2 */
45695 #define HASHTABLE_HASH_1 383 /* Should be prime */
45696 #define HASHTABLE_NSLOT (HASHTABLE_NPAGE*2) /* Must be a power of 2 */
45699 ** The block of page numbers associated with the first hash-table in a
45700 ** wal-index is smaller than usual. This is so that there is a complete
45701 ** hash-table on each aligned 32KB page of the wal-index.
45703 #define HASHTABLE_NPAGE_ONE (HASHTABLE_NPAGE - (WALINDEX_HDR_SIZE/sizeof(u32)))
45705 /* The wal-index is divided into pages of WALINDEX_PGSZ bytes each. */
45706 #define WALINDEX_PGSZ ( \
45707 sizeof(ht_slot)*HASHTABLE_NSLOT + HASHTABLE_NPAGE*sizeof(u32) \
45711 ** Obtain a pointer to the iPage'th page of the wal-index. The wal-index
45712 ** is broken into pages of WALINDEX_PGSZ bytes. Wal-index pages are
45713 ** numbered from zero.
45715 ** If this call is successful, *ppPage is set to point to the wal-index
45716 ** page and SQLITE_OK is returned. If an error (an OOM or VFS error) occurs,
45717 ** then an SQLite error code is returned and *ppPage is set to 0.
45719 static int walIndexPage(Wal *pWal, int iPage, volatile u32 **ppPage){
45720 int rc = SQLITE_OK;
45722 /* Enlarge the pWal->apWiData[] array if required */
45723 if( pWal->nWiData<=iPage ){
45724 int nByte = sizeof(u32*)*(iPage+1);
45725 volatile u32 **apNew;
45726 apNew = (volatile u32 **)sqlite3_realloc((void *)pWal->apWiData, nByte);
45727 if( !apNew ){
45728 *ppPage = 0;
45729 return SQLITE_NOMEM;
45731 memset((void*)&apNew[pWal->nWiData], 0,
45732 sizeof(u32*)*(iPage+1-pWal->nWiData));
45733 pWal->apWiData = apNew;
45734 pWal->nWiData = iPage+1;
45737 /* Request a pointer to the required page from the VFS */
45738 if( pWal->apWiData[iPage]==0 ){
45739 if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
45740 pWal->apWiData[iPage] = (u32 volatile *)sqlite3MallocZero(WALINDEX_PGSZ);
45741 if( !pWal->apWiData[iPage] ) rc = SQLITE_NOMEM;
45742 }else{
45743 rc = sqlite3OsShmMap(pWal->pDbFd, iPage, WALINDEX_PGSZ,
45744 pWal->writeLock, (void volatile **)&pWal->apWiData[iPage]
45746 if( rc==SQLITE_READONLY ){
45747 pWal->readOnly |= WAL_SHM_RDONLY;
45748 rc = SQLITE_OK;
45753 *ppPage = pWal->apWiData[iPage];
45754 assert( iPage==0 || *ppPage || rc!=SQLITE_OK );
45755 return rc;
45759 ** Return a pointer to the WalCkptInfo structure in the wal-index.
45761 static volatile WalCkptInfo *walCkptInfo(Wal *pWal){
45762 assert( pWal->nWiData>0 && pWal->apWiData[0] );
45763 return (volatile WalCkptInfo*)&(pWal->apWiData[0][sizeof(WalIndexHdr)/2]);
45767 ** Return a pointer to the WalIndexHdr structure in the wal-index.
45769 static volatile WalIndexHdr *walIndexHdr(Wal *pWal){
45770 assert( pWal->nWiData>0 && pWal->apWiData[0] );
45771 return (volatile WalIndexHdr*)pWal->apWiData[0];
45775 ** The argument to this macro must be of type u32. On a little-endian
45776 ** architecture, it returns the u32 value that results from interpreting
45777 ** the 4 bytes as a big-endian value. On a big-endian architecture, it
45778 ** returns the value that would be produced by intepreting the 4 bytes
45779 ** of the input value as a little-endian integer.
45781 #define BYTESWAP32(x) ( \
45782 (((x)&0x000000FF)<<24) + (((x)&0x0000FF00)<<8) \
45783 + (((x)&0x00FF0000)>>8) + (((x)&0xFF000000)>>24) \
45787 ** Generate or extend an 8 byte checksum based on the data in
45788 ** array aByte[] and the initial values of aIn[0] and aIn[1] (or
45789 ** initial values of 0 and 0 if aIn==NULL).
45791 ** The checksum is written back into aOut[] before returning.
45793 ** nByte must be a positive multiple of 8.
45795 static void walChecksumBytes(
45796 int nativeCksum, /* True for native byte-order, false for non-native */
45797 u8 *a, /* Content to be checksummed */
45798 int nByte, /* Bytes of content in a[]. Must be a multiple of 8. */
45799 const u32 *aIn, /* Initial checksum value input */
45800 u32 *aOut /* OUT: Final checksum value output */
45802 u32 s1, s2;
45803 u32 *aData = (u32 *)a;
45804 u32 *aEnd = (u32 *)&a[nByte];
45806 if( aIn ){
45807 s1 = aIn[0];
45808 s2 = aIn[1];
45809 }else{
45810 s1 = s2 = 0;
45813 assert( nByte>=8 );
45814 assert( (nByte&0x00000007)==0 );
45816 if( nativeCksum ){
45817 do {
45818 s1 += *aData++ + s2;
45819 s2 += *aData++ + s1;
45820 }while( aData<aEnd );
45821 }else{
45822 do {
45823 s1 += BYTESWAP32(aData[0]) + s2;
45824 s2 += BYTESWAP32(aData[1]) + s1;
45825 aData += 2;
45826 }while( aData<aEnd );
45829 aOut[0] = s1;
45830 aOut[1] = s2;
45833 static void walShmBarrier(Wal *pWal){
45834 if( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE ){
45835 sqlite3OsShmBarrier(pWal->pDbFd);
45840 ** Write the header information in pWal->hdr into the wal-index.
45842 ** The checksum on pWal->hdr is updated before it is written.
45844 static void walIndexWriteHdr(Wal *pWal){
45845 volatile WalIndexHdr *aHdr = walIndexHdr(pWal);
45846 const int nCksum = offsetof(WalIndexHdr, aCksum);
45848 assert( pWal->writeLock );
45849 pWal->hdr.isInit = 1;
45850 pWal->hdr.iVersion = WALINDEX_MAX_VERSION;
45851 walChecksumBytes(1, (u8*)&pWal->hdr, nCksum, 0, pWal->hdr.aCksum);
45852 memcpy((void *)&aHdr[1], (void *)&pWal->hdr, sizeof(WalIndexHdr));
45853 walShmBarrier(pWal);
45854 memcpy((void *)&aHdr[0], (void *)&pWal->hdr, sizeof(WalIndexHdr));
45858 ** This function encodes a single frame header and writes it to a buffer
45859 ** supplied by the caller. A frame-header is made up of a series of
45860 ** 4-byte big-endian integers, as follows:
45862 ** 0: Page number.
45863 ** 4: For commit records, the size of the database image in pages
45864 ** after the commit. For all other records, zero.
45865 ** 8: Salt-1 (copied from the wal-header)
45866 ** 12: Salt-2 (copied from the wal-header)
45867 ** 16: Checksum-1.
45868 ** 20: Checksum-2.
45870 static void walEncodeFrame(
45871 Wal *pWal, /* The write-ahead log */
45872 u32 iPage, /* Database page number for frame */
45873 u32 nTruncate, /* New db size (or 0 for non-commit frames) */
45874 u8 *aData, /* Pointer to page data */
45875 u8 *aFrame /* OUT: Write encoded frame here */
45877 int nativeCksum; /* True for native byte-order checksums */
45878 u32 *aCksum = pWal->hdr.aFrameCksum;
45879 assert( WAL_FRAME_HDRSIZE==24 );
45880 sqlite3Put4byte(&aFrame[0], iPage);
45881 sqlite3Put4byte(&aFrame[4], nTruncate);
45882 memcpy(&aFrame[8], pWal->hdr.aSalt, 8);
45884 nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
45885 walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
45886 walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
45888 sqlite3Put4byte(&aFrame[16], aCksum[0]);
45889 sqlite3Put4byte(&aFrame[20], aCksum[1]);
45893 ** Check to see if the frame with header in aFrame[] and content
45894 ** in aData[] is valid. If it is a valid frame, fill *piPage and
45895 ** *pnTruncate and return true. Return if the frame is not valid.
45897 static int walDecodeFrame(
45898 Wal *pWal, /* The write-ahead log */
45899 u32 *piPage, /* OUT: Database page number for frame */
45900 u32 *pnTruncate, /* OUT: New db size (or 0 if not commit) */
45901 u8 *aData, /* Pointer to page data (for checksum) */
45902 u8 *aFrame /* Frame data */
45904 int nativeCksum; /* True for native byte-order checksums */
45905 u32 *aCksum = pWal->hdr.aFrameCksum;
45906 u32 pgno; /* Page number of the frame */
45907 assert( WAL_FRAME_HDRSIZE==24 );
45909 /* A frame is only valid if the salt values in the frame-header
45910 ** match the salt values in the wal-header.
45912 if( memcmp(&pWal->hdr.aSalt, &aFrame[8], 8)!=0 ){
45913 return 0;
45916 /* A frame is only valid if the page number is creater than zero.
45918 pgno = sqlite3Get4byte(&aFrame[0]);
45919 if( pgno==0 ){
45920 return 0;
45923 /* A frame is only valid if a checksum of the WAL header,
45924 ** all prior frams, the first 16 bytes of this frame-header,
45925 ** and the frame-data matches the checksum in the last 8
45926 ** bytes of this frame-header.
45928 nativeCksum = (pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN);
45929 walChecksumBytes(nativeCksum, aFrame, 8, aCksum, aCksum);
45930 walChecksumBytes(nativeCksum, aData, pWal->szPage, aCksum, aCksum);
45931 if( aCksum[0]!=sqlite3Get4byte(&aFrame[16])
45932 || aCksum[1]!=sqlite3Get4byte(&aFrame[20])
45934 /* Checksum failed. */
45935 return 0;
45938 /* If we reach this point, the frame is valid. Return the page number
45939 ** and the new database size.
45941 *piPage = pgno;
45942 *pnTruncate = sqlite3Get4byte(&aFrame[4]);
45943 return 1;
45947 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
45949 ** Names of locks. This routine is used to provide debugging output and is not
45950 ** a part of an ordinary build.
45952 static const char *walLockName(int lockIdx){
45953 if( lockIdx==WAL_WRITE_LOCK ){
45954 return "WRITE-LOCK";
45955 }else if( lockIdx==WAL_CKPT_LOCK ){
45956 return "CKPT-LOCK";
45957 }else if( lockIdx==WAL_RECOVER_LOCK ){
45958 return "RECOVER-LOCK";
45959 }else{
45960 static char zName[15];
45961 sqlite3_snprintf(sizeof(zName), zName, "READ-LOCK[%d]",
45962 lockIdx-WAL_READ_LOCK(0));
45963 return zName;
45966 #endif /*defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
45970 ** Set or release locks on the WAL. Locks are either shared or exclusive.
45971 ** A lock cannot be moved directly between shared and exclusive - it must go
45972 ** through the unlocked state first.
45974 ** In locking_mode=EXCLUSIVE, all of these routines become no-ops.
45976 static int walLockShared(Wal *pWal, int lockIdx){
45977 int rc;
45978 if( pWal->exclusiveMode ) return SQLITE_OK;
45979 rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
45980 SQLITE_SHM_LOCK | SQLITE_SHM_SHARED);
45981 WALTRACE(("WAL%p: acquire SHARED-%s %s\n", pWal,
45982 walLockName(lockIdx), rc ? "failed" : "ok"));
45983 VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
45984 return rc;
45986 static void walUnlockShared(Wal *pWal, int lockIdx){
45987 if( pWal->exclusiveMode ) return;
45988 (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, 1,
45989 SQLITE_SHM_UNLOCK | SQLITE_SHM_SHARED);
45990 WALTRACE(("WAL%p: release SHARED-%s\n", pWal, walLockName(lockIdx)));
45992 static int walLockExclusive(Wal *pWal, int lockIdx, int n){
45993 int rc;
45994 if( pWal->exclusiveMode ) return SQLITE_OK;
45995 rc = sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
45996 SQLITE_SHM_LOCK | SQLITE_SHM_EXCLUSIVE);
45997 WALTRACE(("WAL%p: acquire EXCLUSIVE-%s cnt=%d %s\n", pWal,
45998 walLockName(lockIdx), n, rc ? "failed" : "ok"));
45999 VVA_ONLY( pWal->lockError = (u8)(rc!=SQLITE_OK && rc!=SQLITE_BUSY); )
46000 return rc;
46002 static void walUnlockExclusive(Wal *pWal, int lockIdx, int n){
46003 if( pWal->exclusiveMode ) return;
46004 (void)sqlite3OsShmLock(pWal->pDbFd, lockIdx, n,
46005 SQLITE_SHM_UNLOCK | SQLITE_SHM_EXCLUSIVE);
46006 WALTRACE(("WAL%p: release EXCLUSIVE-%s cnt=%d\n", pWal,
46007 walLockName(lockIdx), n));
46011 ** Compute a hash on a page number. The resulting hash value must land
46012 ** between 0 and (HASHTABLE_NSLOT-1). The walHashNext() function advances
46013 ** the hash to the next value in the event of a collision.
46015 static int walHash(u32 iPage){
46016 assert( iPage>0 );
46017 assert( (HASHTABLE_NSLOT & (HASHTABLE_NSLOT-1))==0 );
46018 return (iPage*HASHTABLE_HASH_1) & (HASHTABLE_NSLOT-1);
46020 static int walNextHash(int iPriorHash){
46021 return (iPriorHash+1)&(HASHTABLE_NSLOT-1);
46025 ** Return pointers to the hash table and page number array stored on
46026 ** page iHash of the wal-index. The wal-index is broken into 32KB pages
46027 ** numbered starting from 0.
46029 ** Set output variable *paHash to point to the start of the hash table
46030 ** in the wal-index file. Set *piZero to one less than the frame
46031 ** number of the first frame indexed by this hash table. If a
46032 ** slot in the hash table is set to N, it refers to frame number
46033 ** (*piZero+N) in the log.
46035 ** Finally, set *paPgno so that *paPgno[1] is the page number of the
46036 ** first frame indexed by the hash table, frame (*piZero+1).
46038 static int walHashGet(
46039 Wal *pWal, /* WAL handle */
46040 int iHash, /* Find the iHash'th table */
46041 volatile ht_slot **paHash, /* OUT: Pointer to hash index */
46042 volatile u32 **paPgno, /* OUT: Pointer to page number array */
46043 u32 *piZero /* OUT: Frame associated with *paPgno[0] */
46045 int rc; /* Return code */
46046 volatile u32 *aPgno;
46048 rc = walIndexPage(pWal, iHash, &aPgno);
46049 assert( rc==SQLITE_OK || iHash>0 );
46051 if( rc==SQLITE_OK ){
46052 u32 iZero;
46053 volatile ht_slot *aHash;
46055 aHash = (volatile ht_slot *)&aPgno[HASHTABLE_NPAGE];
46056 if( iHash==0 ){
46057 aPgno = &aPgno[WALINDEX_HDR_SIZE/sizeof(u32)];
46058 iZero = 0;
46059 }else{
46060 iZero = HASHTABLE_NPAGE_ONE + (iHash-1)*HASHTABLE_NPAGE;
46063 *paPgno = &aPgno[-1];
46064 *paHash = aHash;
46065 *piZero = iZero;
46067 return rc;
46071 ** Return the number of the wal-index page that contains the hash-table
46072 ** and page-number array that contain entries corresponding to WAL frame
46073 ** iFrame. The wal-index is broken up into 32KB pages. Wal-index pages
46074 ** are numbered starting from 0.
46076 static int walFramePage(u32 iFrame){
46077 int iHash = (iFrame+HASHTABLE_NPAGE-HASHTABLE_NPAGE_ONE-1) / HASHTABLE_NPAGE;
46078 assert( (iHash==0 || iFrame>HASHTABLE_NPAGE_ONE)
46079 && (iHash>=1 || iFrame<=HASHTABLE_NPAGE_ONE)
46080 && (iHash<=1 || iFrame>(HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE))
46081 && (iHash>=2 || iFrame<=HASHTABLE_NPAGE_ONE+HASHTABLE_NPAGE)
46082 && (iHash<=2 || iFrame>(HASHTABLE_NPAGE_ONE+2*HASHTABLE_NPAGE))
46084 return iHash;
46088 ** Return the page number associated with frame iFrame in this WAL.
46090 static u32 walFramePgno(Wal *pWal, u32 iFrame){
46091 int iHash = walFramePage(iFrame);
46092 if( iHash==0 ){
46093 return pWal->apWiData[0][WALINDEX_HDR_SIZE/sizeof(u32) + iFrame - 1];
46095 return pWal->apWiData[iHash][(iFrame-1-HASHTABLE_NPAGE_ONE)%HASHTABLE_NPAGE];
46099 ** Remove entries from the hash table that point to WAL slots greater
46100 ** than pWal->hdr.mxFrame.
46102 ** This function is called whenever pWal->hdr.mxFrame is decreased due
46103 ** to a rollback or savepoint.
46105 ** At most only the hash table containing pWal->hdr.mxFrame needs to be
46106 ** updated. Any later hash tables will be automatically cleared when
46107 ** pWal->hdr.mxFrame advances to the point where those hash tables are
46108 ** actually needed.
46110 static void walCleanupHash(Wal *pWal){
46111 volatile ht_slot *aHash = 0; /* Pointer to hash table to clear */
46112 volatile u32 *aPgno = 0; /* Page number array for hash table */
46113 u32 iZero = 0; /* frame == (aHash[x]+iZero) */
46114 int iLimit = 0; /* Zero values greater than this */
46115 int nByte; /* Number of bytes to zero in aPgno[] */
46116 int i; /* Used to iterate through aHash[] */
46118 assert( pWal->writeLock );
46119 testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE-1 );
46120 testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE );
46121 testcase( pWal->hdr.mxFrame==HASHTABLE_NPAGE_ONE+1 );
46123 if( pWal->hdr.mxFrame==0 ) return;
46125 /* Obtain pointers to the hash-table and page-number array containing
46126 ** the entry that corresponds to frame pWal->hdr.mxFrame. It is guaranteed
46127 ** that the page said hash-table and array reside on is already mapped.
46129 assert( pWal->nWiData>walFramePage(pWal->hdr.mxFrame) );
46130 assert( pWal->apWiData[walFramePage(pWal->hdr.mxFrame)] );
46131 walHashGet(pWal, walFramePage(pWal->hdr.mxFrame), &aHash, &aPgno, &iZero);
46133 /* Zero all hash-table entries that correspond to frame numbers greater
46134 ** than pWal->hdr.mxFrame.
46136 iLimit = pWal->hdr.mxFrame - iZero;
46137 assert( iLimit>0 );
46138 for(i=0; i<HASHTABLE_NSLOT; i++){
46139 if( aHash[i]>iLimit ){
46140 aHash[i] = 0;
46144 /* Zero the entries in the aPgno array that correspond to frames with
46145 ** frame numbers greater than pWal->hdr.mxFrame.
46147 nByte = (int)((char *)aHash - (char *)&aPgno[iLimit+1]);
46148 memset((void *)&aPgno[iLimit+1], 0, nByte);
46150 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
46151 /* Verify that the every entry in the mapping region is still reachable
46152 ** via the hash table even after the cleanup.
46154 if( iLimit ){
46155 int i; /* Loop counter */
46156 int iKey; /* Hash key */
46157 for(i=1; i<=iLimit; i++){
46158 for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
46159 if( aHash[iKey]==i ) break;
46161 assert( aHash[iKey]==i );
46164 #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
46169 ** Set an entry in the wal-index that will map database page number
46170 ** pPage into WAL frame iFrame.
46172 static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){
46173 int rc; /* Return code */
46174 u32 iZero = 0; /* One less than frame number of aPgno[1] */
46175 volatile u32 *aPgno = 0; /* Page number array */
46176 volatile ht_slot *aHash = 0; /* Hash table */
46178 rc = walHashGet(pWal, walFramePage(iFrame), &aHash, &aPgno, &iZero);
46180 /* Assuming the wal-index file was successfully mapped, populate the
46181 ** page number array and hash table entry.
46183 if( rc==SQLITE_OK ){
46184 int iKey; /* Hash table key */
46185 int idx; /* Value to write to hash-table slot */
46186 int nCollide; /* Number of hash collisions */
46188 idx = iFrame - iZero;
46189 assert( idx <= HASHTABLE_NSLOT/2 + 1 );
46191 /* If this is the first entry to be added to this hash-table, zero the
46192 ** entire hash table and aPgno[] array before proceding.
46194 if( idx==1 ){
46195 int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]);
46196 memset((void*)&aPgno[1], 0, nByte);
46199 /* If the entry in aPgno[] is already set, then the previous writer
46200 ** must have exited unexpectedly in the middle of a transaction (after
46201 ** writing one or more dirty pages to the WAL to free up memory).
46202 ** Remove the remnants of that writers uncommitted transaction from
46203 ** the hash-table before writing any new entries.
46205 if( aPgno[idx] ){
46206 walCleanupHash(pWal);
46207 assert( !aPgno[idx] );
46210 /* Write the aPgno[] array entry and the hash-table slot. */
46211 nCollide = idx;
46212 for(iKey=walHash(iPage); aHash[iKey]; iKey=walNextHash(iKey)){
46213 if( (nCollide--)==0 ) return SQLITE_CORRUPT_BKPT;
46215 aPgno[idx] = iPage;
46216 aHash[iKey] = (ht_slot)idx;
46218 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
46219 /* Verify that the number of entries in the hash table exactly equals
46220 ** the number of entries in the mapping region.
46223 int i; /* Loop counter */
46224 int nEntry = 0; /* Number of entries in the hash table */
46225 for(i=0; i<HASHTABLE_NSLOT; i++){ if( aHash[i] ) nEntry++; }
46226 assert( nEntry==idx );
46229 /* Verify that the every entry in the mapping region is reachable
46230 ** via the hash table. This turns out to be a really, really expensive
46231 ** thing to check, so only do this occasionally - not on every
46232 ** iteration.
46234 if( (idx&0x3ff)==0 ){
46235 int i; /* Loop counter */
46236 for(i=1; i<=idx; i++){
46237 for(iKey=walHash(aPgno[i]); aHash[iKey]; iKey=walNextHash(iKey)){
46238 if( aHash[iKey]==i ) break;
46240 assert( aHash[iKey]==i );
46243 #endif /* SQLITE_ENABLE_EXPENSIVE_ASSERT */
46247 return rc;
46252 ** Recover the wal-index by reading the write-ahead log file.
46254 ** This routine first tries to establish an exclusive lock on the
46255 ** wal-index to prevent other threads/processes from doing anything
46256 ** with the WAL or wal-index while recovery is running. The
46257 ** WAL_RECOVER_LOCK is also held so that other threads will know
46258 ** that this thread is running recovery. If unable to establish
46259 ** the necessary locks, this routine returns SQLITE_BUSY.
46261 static int walIndexRecover(Wal *pWal){
46262 int rc; /* Return Code */
46263 i64 nSize; /* Size of log file */
46264 u32 aFrameCksum[2] = {0, 0};
46265 int iLock; /* Lock offset to lock for checkpoint */
46266 int nLock; /* Number of locks to hold */
46268 /* Obtain an exclusive lock on all byte in the locking range not already
46269 ** locked by the caller. The caller is guaranteed to have locked the
46270 ** WAL_WRITE_LOCK byte, and may have also locked the WAL_CKPT_LOCK byte.
46271 ** If successful, the same bytes that are locked here are unlocked before
46272 ** this function returns.
46274 assert( pWal->ckptLock==1 || pWal->ckptLock==0 );
46275 assert( WAL_ALL_BUT_WRITE==WAL_WRITE_LOCK+1 );
46276 assert( WAL_CKPT_LOCK==WAL_ALL_BUT_WRITE );
46277 assert( pWal->writeLock );
46278 iLock = WAL_ALL_BUT_WRITE + pWal->ckptLock;
46279 nLock = SQLITE_SHM_NLOCK - iLock;
46280 rc = walLockExclusive(pWal, iLock, nLock);
46281 if( rc ){
46282 return rc;
46284 WALTRACE(("WAL%p: recovery begin...\n", pWal));
46286 memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
46288 rc = sqlite3OsFileSize(pWal->pWalFd, &nSize);
46289 if( rc!=SQLITE_OK ){
46290 goto recovery_error;
46293 if( nSize>WAL_HDRSIZE ){
46294 u8 aBuf[WAL_HDRSIZE]; /* Buffer to load WAL header into */
46295 u8 *aFrame = 0; /* Malloc'd buffer to load entire frame */
46296 int szFrame; /* Number of bytes in buffer aFrame[] */
46297 u8 *aData; /* Pointer to data part of aFrame buffer */
46298 int iFrame; /* Index of last frame read */
46299 i64 iOffset; /* Next offset to read from log file */
46300 int szPage; /* Page size according to the log */
46301 u32 magic; /* Magic value read from WAL header */
46302 u32 version; /* Magic value read from WAL header */
46303 int isValid; /* True if this frame is valid */
46305 /* Read in the WAL header. */
46306 rc = sqlite3OsRead(pWal->pWalFd, aBuf, WAL_HDRSIZE, 0);
46307 if( rc!=SQLITE_OK ){
46308 goto recovery_error;
46311 /* If the database page size is not a power of two, or is greater than
46312 ** SQLITE_MAX_PAGE_SIZE, conclude that the WAL file contains no valid
46313 ** data. Similarly, if the 'magic' value is invalid, ignore the whole
46314 ** WAL file.
46316 magic = sqlite3Get4byte(&aBuf[0]);
46317 szPage = sqlite3Get4byte(&aBuf[8]);
46318 if( (magic&0xFFFFFFFE)!=WAL_MAGIC
46319 || szPage&(szPage-1)
46320 || szPage>SQLITE_MAX_PAGE_SIZE
46321 || szPage<512
46323 goto finished;
46325 pWal->hdr.bigEndCksum = (u8)(magic&0x00000001);
46326 pWal->szPage = szPage;
46327 pWal->nCkpt = sqlite3Get4byte(&aBuf[12]);
46328 memcpy(&pWal->hdr.aSalt, &aBuf[16], 8);
46330 /* Verify that the WAL header checksum is correct */
46331 walChecksumBytes(pWal->hdr.bigEndCksum==SQLITE_BIGENDIAN,
46332 aBuf, WAL_HDRSIZE-2*4, 0, pWal->hdr.aFrameCksum
46334 if( pWal->hdr.aFrameCksum[0]!=sqlite3Get4byte(&aBuf[24])
46335 || pWal->hdr.aFrameCksum[1]!=sqlite3Get4byte(&aBuf[28])
46337 goto finished;
46340 /* Verify that the version number on the WAL format is one that
46341 ** are able to understand */
46342 version = sqlite3Get4byte(&aBuf[4]);
46343 if( version!=WAL_MAX_VERSION ){
46344 rc = SQLITE_CANTOPEN_BKPT;
46345 goto finished;
46348 /* Malloc a buffer to read frames into. */
46349 szFrame = szPage + WAL_FRAME_HDRSIZE;
46350 aFrame = (u8 *)sqlite3_malloc(szFrame);
46351 if( !aFrame ){
46352 rc = SQLITE_NOMEM;
46353 goto recovery_error;
46355 aData = &aFrame[WAL_FRAME_HDRSIZE];
46357 /* Read all frames from the log file. */
46358 iFrame = 0;
46359 for(iOffset=WAL_HDRSIZE; (iOffset+szFrame)<=nSize; iOffset+=szFrame){
46360 u32 pgno; /* Database page number for frame */
46361 u32 nTruncate; /* dbsize field from frame header */
46363 /* Read and decode the next log frame. */
46364 iFrame++;
46365 rc = sqlite3OsRead(pWal->pWalFd, aFrame, szFrame, iOffset);
46366 if( rc!=SQLITE_OK ) break;
46367 isValid = walDecodeFrame(pWal, &pgno, &nTruncate, aData, aFrame);
46368 if( !isValid ) break;
46369 rc = walIndexAppend(pWal, iFrame, pgno);
46370 if( rc!=SQLITE_OK ) break;
46372 /* If nTruncate is non-zero, this is a commit record. */
46373 if( nTruncate ){
46374 pWal->hdr.mxFrame = iFrame;
46375 pWal->hdr.nPage = nTruncate;
46376 pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
46377 testcase( szPage<=32768 );
46378 testcase( szPage>=65536 );
46379 aFrameCksum[0] = pWal->hdr.aFrameCksum[0];
46380 aFrameCksum[1] = pWal->hdr.aFrameCksum[1];
46384 sqlite3_free(aFrame);
46387 finished:
46388 if( rc==SQLITE_OK ){
46389 volatile WalCkptInfo *pInfo;
46390 int i;
46391 pWal->hdr.aFrameCksum[0] = aFrameCksum[0];
46392 pWal->hdr.aFrameCksum[1] = aFrameCksum[1];
46393 walIndexWriteHdr(pWal);
46395 /* Reset the checkpoint-header. This is safe because this thread is
46396 ** currently holding locks that exclude all other readers, writers and
46397 ** checkpointers.
46399 pInfo = walCkptInfo(pWal);
46400 pInfo->nBackfill = 0;
46401 pInfo->aReadMark[0] = 0;
46402 for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
46404 /* If more than one frame was recovered from the log file, report an
46405 ** event via sqlite3_log(). This is to help with identifying performance
46406 ** problems caused by applications routinely shutting down without
46407 ** checkpointing the log file.
46409 if( pWal->hdr.nPage ){
46410 sqlite3_log(SQLITE_OK, "Recovered %d frames from WAL file %s",
46411 pWal->hdr.nPage, pWal->zWalName
46416 recovery_error:
46417 WALTRACE(("WAL%p: recovery %s\n", pWal, rc ? "failed" : "ok"));
46418 walUnlockExclusive(pWal, iLock, nLock);
46419 return rc;
46423 ** Close an open wal-index.
46425 static void walIndexClose(Wal *pWal, int isDelete){
46426 if( pWal->exclusiveMode==WAL_HEAPMEMORY_MODE ){
46427 int i;
46428 for(i=0; i<pWal->nWiData; i++){
46429 sqlite3_free((void *)pWal->apWiData[i]);
46430 pWal->apWiData[i] = 0;
46432 }else{
46433 sqlite3OsShmUnmap(pWal->pDbFd, isDelete);
46438 ** Open a connection to the WAL file zWalName. The database file must
46439 ** already be opened on connection pDbFd. The buffer that zWalName points
46440 ** to must remain valid for the lifetime of the returned Wal* handle.
46442 ** A SHARED lock should be held on the database file when this function
46443 ** is called. The purpose of this SHARED lock is to prevent any other
46444 ** client from unlinking the WAL or wal-index file. If another process
46445 ** were to do this just after this client opened one of these files, the
46446 ** system would be badly broken.
46448 ** If the log file is successfully opened, SQLITE_OK is returned and
46449 ** *ppWal is set to point to a new WAL handle. If an error occurs,
46450 ** an SQLite error code is returned and *ppWal is left unmodified.
46452 SQLITE_PRIVATE int sqlite3WalOpen(
46453 sqlite3_vfs *pVfs, /* vfs module to open wal and wal-index */
46454 sqlite3_file *pDbFd, /* The open database file */
46455 const char *zWalName, /* Name of the WAL file */
46456 int bNoShm, /* True to run in heap-memory mode */
46457 i64 mxWalSize, /* Truncate WAL to this size on reset */
46458 Wal **ppWal /* OUT: Allocated Wal handle */
46460 int rc; /* Return Code */
46461 Wal *pRet; /* Object to allocate and return */
46462 int flags; /* Flags passed to OsOpen() */
46464 assert( zWalName && zWalName[0] );
46465 assert( pDbFd );
46467 /* In the amalgamation, the os_unix.c and os_win.c source files come before
46468 ** this source file. Verify that the #defines of the locking byte offsets
46469 ** in os_unix.c and os_win.c agree with the WALINDEX_LOCK_OFFSET value.
46471 #ifdef WIN_SHM_BASE
46472 assert( WIN_SHM_BASE==WALINDEX_LOCK_OFFSET );
46473 #endif
46474 #ifdef UNIX_SHM_BASE
46475 assert( UNIX_SHM_BASE==WALINDEX_LOCK_OFFSET );
46476 #endif
46479 /* Allocate an instance of struct Wal to return. */
46480 *ppWal = 0;
46481 pRet = (Wal*)sqlite3MallocZero(sizeof(Wal) + pVfs->szOsFile);
46482 if( !pRet ){
46483 return SQLITE_NOMEM;
46486 pRet->pVfs = pVfs;
46487 pRet->pWalFd = (sqlite3_file *)&pRet[1];
46488 pRet->pDbFd = pDbFd;
46489 pRet->readLock = -1;
46490 pRet->mxWalSize = mxWalSize;
46491 pRet->zWalName = zWalName;
46492 pRet->syncHeader = 1;
46493 pRet->padToSectorBoundary = 1;
46494 pRet->exclusiveMode = (bNoShm ? WAL_HEAPMEMORY_MODE: WAL_NORMAL_MODE);
46496 /* Open file handle on the write-ahead log file. */
46497 flags = (SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|SQLITE_OPEN_WAL);
46498 rc = sqlite3OsOpen(pVfs, zWalName, pRet->pWalFd, flags, &flags);
46499 if( rc==SQLITE_OK && flags&SQLITE_OPEN_READONLY ){
46500 pRet->readOnly = WAL_RDONLY;
46503 if( rc!=SQLITE_OK ){
46504 walIndexClose(pRet, 0);
46505 sqlite3OsClose(pRet->pWalFd);
46506 sqlite3_free(pRet);
46507 }else{
46508 int iDC = sqlite3OsDeviceCharacteristics(pRet->pWalFd);
46509 if( iDC & SQLITE_IOCAP_SEQUENTIAL ){ pRet->syncHeader = 0; }
46510 if( iDC & SQLITE_IOCAP_POWERSAFE_OVERWRITE ){
46511 pRet->padToSectorBoundary = 0;
46513 *ppWal = pRet;
46514 WALTRACE(("WAL%d: opened\n", pRet));
46516 return rc;
46520 ** Change the size to which the WAL file is trucated on each reset.
46522 SQLITE_PRIVATE void sqlite3WalLimit(Wal *pWal, i64 iLimit){
46523 if( pWal ) pWal->mxWalSize = iLimit;
46527 ** Find the smallest page number out of all pages held in the WAL that
46528 ** has not been returned by any prior invocation of this method on the
46529 ** same WalIterator object. Write into *piFrame the frame index where
46530 ** that page was last written into the WAL. Write into *piPage the page
46531 ** number.
46533 ** Return 0 on success. If there are no pages in the WAL with a page
46534 ** number larger than *piPage, then return 1.
46536 static int walIteratorNext(
46537 WalIterator *p, /* Iterator */
46538 u32 *piPage, /* OUT: The page number of the next page */
46539 u32 *piFrame /* OUT: Wal frame index of next page */
46541 u32 iMin; /* Result pgno must be greater than iMin */
46542 u32 iRet = 0xFFFFFFFF; /* 0xffffffff is never a valid page number */
46543 int i; /* For looping through segments */
46545 iMin = p->iPrior;
46546 assert( iMin<0xffffffff );
46547 for(i=p->nSegment-1; i>=0; i--){
46548 struct WalSegment *pSegment = &p->aSegment[i];
46549 while( pSegment->iNext<pSegment->nEntry ){
46550 u32 iPg = pSegment->aPgno[pSegment->aIndex[pSegment->iNext]];
46551 if( iPg>iMin ){
46552 if( iPg<iRet ){
46553 iRet = iPg;
46554 *piFrame = pSegment->iZero + pSegment->aIndex[pSegment->iNext];
46556 break;
46558 pSegment->iNext++;
46562 *piPage = p->iPrior = iRet;
46563 return (iRet==0xFFFFFFFF);
46567 ** This function merges two sorted lists into a single sorted list.
46569 ** aLeft[] and aRight[] are arrays of indices. The sort key is
46570 ** aContent[aLeft[]] and aContent[aRight[]]. Upon entry, the following
46571 ** is guaranteed for all J<K:
46573 ** aContent[aLeft[J]] < aContent[aLeft[K]]
46574 ** aContent[aRight[J]] < aContent[aRight[K]]
46576 ** This routine overwrites aRight[] with a new (probably longer) sequence
46577 ** of indices such that the aRight[] contains every index that appears in
46578 ** either aLeft[] or the old aRight[] and such that the second condition
46579 ** above is still met.
46581 ** The aContent[aLeft[X]] values will be unique for all X. And the
46582 ** aContent[aRight[X]] values will be unique too. But there might be
46583 ** one or more combinations of X and Y such that
46585 ** aLeft[X]!=aRight[Y] && aContent[aLeft[X]] == aContent[aRight[Y]]
46587 ** When that happens, omit the aLeft[X] and use the aRight[Y] index.
46589 static void walMerge(
46590 const u32 *aContent, /* Pages in wal - keys for the sort */
46591 ht_slot *aLeft, /* IN: Left hand input list */
46592 int nLeft, /* IN: Elements in array *paLeft */
46593 ht_slot **paRight, /* IN/OUT: Right hand input list */
46594 int *pnRight, /* IN/OUT: Elements in *paRight */
46595 ht_slot *aTmp /* Temporary buffer */
46597 int iLeft = 0; /* Current index in aLeft */
46598 int iRight = 0; /* Current index in aRight */
46599 int iOut = 0; /* Current index in output buffer */
46600 int nRight = *pnRight;
46601 ht_slot *aRight = *paRight;
46603 assert( nLeft>0 && nRight>0 );
46604 while( iRight<nRight || iLeft<nLeft ){
46605 ht_slot logpage;
46606 Pgno dbpage;
46608 if( (iLeft<nLeft)
46609 && (iRight>=nRight || aContent[aLeft[iLeft]]<aContent[aRight[iRight]])
46611 logpage = aLeft[iLeft++];
46612 }else{
46613 logpage = aRight[iRight++];
46615 dbpage = aContent[logpage];
46617 aTmp[iOut++] = logpage;
46618 if( iLeft<nLeft && aContent[aLeft[iLeft]]==dbpage ) iLeft++;
46620 assert( iLeft>=nLeft || aContent[aLeft[iLeft]]>dbpage );
46621 assert( iRight>=nRight || aContent[aRight[iRight]]>dbpage );
46624 *paRight = aLeft;
46625 *pnRight = iOut;
46626 memcpy(aLeft, aTmp, sizeof(aTmp[0])*iOut);
46630 ** Sort the elements in list aList using aContent[] as the sort key.
46631 ** Remove elements with duplicate keys, preferring to keep the
46632 ** larger aList[] values.
46634 ** The aList[] entries are indices into aContent[]. The values in
46635 ** aList[] are to be sorted so that for all J<K:
46637 ** aContent[aList[J]] < aContent[aList[K]]
46639 ** For any X and Y such that
46641 ** aContent[aList[X]] == aContent[aList[Y]]
46643 ** Keep the larger of the two values aList[X] and aList[Y] and discard
46644 ** the smaller.
46646 static void walMergesort(
46647 const u32 *aContent, /* Pages in wal */
46648 ht_slot *aBuffer, /* Buffer of at least *pnList items to use */
46649 ht_slot *aList, /* IN/OUT: List to sort */
46650 int *pnList /* IN/OUT: Number of elements in aList[] */
46652 struct Sublist {
46653 int nList; /* Number of elements in aList */
46654 ht_slot *aList; /* Pointer to sub-list content */
46657 const int nList = *pnList; /* Size of input list */
46658 int nMerge = 0; /* Number of elements in list aMerge */
46659 ht_slot *aMerge = 0; /* List to be merged */
46660 int iList; /* Index into input list */
46661 int iSub = 0; /* Index into aSub array */
46662 struct Sublist aSub[13]; /* Array of sub-lists */
46664 memset(aSub, 0, sizeof(aSub));
46665 assert( nList<=HASHTABLE_NPAGE && nList>0 );
46666 assert( HASHTABLE_NPAGE==(1<<(ArraySize(aSub)-1)) );
46668 for(iList=0; iList<nList; iList++){
46669 nMerge = 1;
46670 aMerge = &aList[iList];
46671 for(iSub=0; iList & (1<<iSub); iSub++){
46672 struct Sublist *p = &aSub[iSub];
46673 assert( p->aList && p->nList<=(1<<iSub) );
46674 assert( p->aList==&aList[iList&~((2<<iSub)-1)] );
46675 walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
46677 aSub[iSub].aList = aMerge;
46678 aSub[iSub].nList = nMerge;
46681 for(iSub++; iSub<ArraySize(aSub); iSub++){
46682 if( nList & (1<<iSub) ){
46683 struct Sublist *p = &aSub[iSub];
46684 assert( p->nList<=(1<<iSub) );
46685 assert( p->aList==&aList[nList&~((2<<iSub)-1)] );
46686 walMerge(aContent, p->aList, p->nList, &aMerge, &nMerge, aBuffer);
46689 assert( aMerge==aList );
46690 *pnList = nMerge;
46692 #ifdef SQLITE_DEBUG
46694 int i;
46695 for(i=1; i<*pnList; i++){
46696 assert( aContent[aList[i]] > aContent[aList[i-1]] );
46699 #endif
46703 ** Free an iterator allocated by walIteratorInit().
46705 static void walIteratorFree(WalIterator *p){
46706 sqlite3ScratchFree(p);
46710 ** Construct a WalInterator object that can be used to loop over all
46711 ** pages in the WAL in ascending order. The caller must hold the checkpoint
46712 ** lock.
46714 ** On success, make *pp point to the newly allocated WalInterator object
46715 ** return SQLITE_OK. Otherwise, return an error code. If this routine
46716 ** returns an error, the value of *pp is undefined.
46718 ** The calling routine should invoke walIteratorFree() to destroy the
46719 ** WalIterator object when it has finished with it.
46721 static int walIteratorInit(Wal *pWal, WalIterator **pp){
46722 WalIterator *p; /* Return value */
46723 int nSegment; /* Number of segments to merge */
46724 u32 iLast; /* Last frame in log */
46725 int nByte; /* Number of bytes to allocate */
46726 int i; /* Iterator variable */
46727 ht_slot *aTmp; /* Temp space used by merge-sort */
46728 int rc = SQLITE_OK; /* Return Code */
46730 /* This routine only runs while holding the checkpoint lock. And
46731 ** it only runs if there is actually content in the log (mxFrame>0).
46733 assert( pWal->ckptLock && pWal->hdr.mxFrame>0 );
46734 iLast = pWal->hdr.mxFrame;
46736 /* Allocate space for the WalIterator object. */
46737 nSegment = walFramePage(iLast) + 1;
46738 nByte = sizeof(WalIterator)
46739 + (nSegment-1)*sizeof(struct WalSegment)
46740 + iLast*sizeof(ht_slot);
46741 p = (WalIterator *)sqlite3ScratchMalloc(nByte);
46742 if( !p ){
46743 return SQLITE_NOMEM;
46745 memset(p, 0, nByte);
46746 p->nSegment = nSegment;
46748 /* Allocate temporary space used by the merge-sort routine. This block
46749 ** of memory will be freed before this function returns.
46751 aTmp = (ht_slot *)sqlite3ScratchMalloc(
46752 sizeof(ht_slot) * (iLast>HASHTABLE_NPAGE?HASHTABLE_NPAGE:iLast)
46754 if( !aTmp ){
46755 rc = SQLITE_NOMEM;
46758 for(i=0; rc==SQLITE_OK && i<nSegment; i++){
46759 volatile ht_slot *aHash;
46760 u32 iZero;
46761 volatile u32 *aPgno;
46763 rc = walHashGet(pWal, i, &aHash, &aPgno, &iZero);
46764 if( rc==SQLITE_OK ){
46765 int j; /* Counter variable */
46766 int nEntry; /* Number of entries in this segment */
46767 ht_slot *aIndex; /* Sorted index for this segment */
46769 aPgno++;
46770 if( (i+1)==nSegment ){
46771 nEntry = (int)(iLast - iZero);
46772 }else{
46773 nEntry = (int)((u32*)aHash - (u32*)aPgno);
46775 aIndex = &((ht_slot *)&p->aSegment[p->nSegment])[iZero];
46776 iZero++;
46778 for(j=0; j<nEntry; j++){
46779 aIndex[j] = (ht_slot)j;
46781 walMergesort((u32 *)aPgno, aTmp, aIndex, &nEntry);
46782 p->aSegment[i].iZero = iZero;
46783 p->aSegment[i].nEntry = nEntry;
46784 p->aSegment[i].aIndex = aIndex;
46785 p->aSegment[i].aPgno = (u32 *)aPgno;
46788 sqlite3ScratchFree(aTmp);
46790 if( rc!=SQLITE_OK ){
46791 walIteratorFree(p);
46793 *pp = p;
46794 return rc;
46798 ** Attempt to obtain the exclusive WAL lock defined by parameters lockIdx and
46799 ** n. If the attempt fails and parameter xBusy is not NULL, then it is a
46800 ** busy-handler function. Invoke it and retry the lock until either the
46801 ** lock is successfully obtained or the busy-handler returns 0.
46803 static int walBusyLock(
46804 Wal *pWal, /* WAL connection */
46805 int (*xBusy)(void*), /* Function to call when busy */
46806 void *pBusyArg, /* Context argument for xBusyHandler */
46807 int lockIdx, /* Offset of first byte to lock */
46808 int n /* Number of bytes to lock */
46810 int rc;
46811 do {
46812 rc = walLockExclusive(pWal, lockIdx, n);
46813 }while( xBusy && rc==SQLITE_BUSY && xBusy(pBusyArg) );
46814 return rc;
46818 ** The cache of the wal-index header must be valid to call this function.
46819 ** Return the page-size in bytes used by the database.
46821 static int walPagesize(Wal *pWal){
46822 return (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
46826 ** Copy as much content as we can from the WAL back into the database file
46827 ** in response to an sqlite3_wal_checkpoint() request or the equivalent.
46829 ** The amount of information copies from WAL to database might be limited
46830 ** by active readers. This routine will never overwrite a database page
46831 ** that a concurrent reader might be using.
46833 ** All I/O barrier operations (a.k.a fsyncs) occur in this routine when
46834 ** SQLite is in WAL-mode in synchronous=NORMAL. That means that if
46835 ** checkpoints are always run by a background thread or background
46836 ** process, foreground threads will never block on a lengthy fsync call.
46838 ** Fsync is called on the WAL before writing content out of the WAL and
46839 ** into the database. This ensures that if the new content is persistent
46840 ** in the WAL and can be recovered following a power-loss or hard reset.
46842 ** Fsync is also called on the database file if (and only if) the entire
46843 ** WAL content is copied into the database file. This second fsync makes
46844 ** it safe to delete the WAL since the new content will persist in the
46845 ** database file.
46847 ** This routine uses and updates the nBackfill field of the wal-index header.
46848 ** This is the only routine tha will increase the value of nBackfill.
46849 ** (A WAL reset or recovery will revert nBackfill to zero, but not increase
46850 ** its value.)
46852 ** The caller must be holding sufficient locks to ensure that no other
46853 ** checkpoint is running (in any other thread or process) at the same
46854 ** time.
46856 static int walCheckpoint(
46857 Wal *pWal, /* Wal connection */
46858 int eMode, /* One of PASSIVE, FULL or RESTART */
46859 int (*xBusyCall)(void*), /* Function to call when busy */
46860 void *pBusyArg, /* Context argument for xBusyHandler */
46861 int sync_flags, /* Flags for OsSync() (or 0) */
46862 u8 *zBuf /* Temporary buffer to use */
46864 int rc; /* Return code */
46865 int szPage; /* Database page-size */
46866 WalIterator *pIter = 0; /* Wal iterator context */
46867 u32 iDbpage = 0; /* Next database page to write */
46868 u32 iFrame = 0; /* Wal frame containing data for iDbpage */
46869 u32 mxSafeFrame; /* Max frame that can be backfilled */
46870 u32 mxPage; /* Max database page to write */
46871 int i; /* Loop counter */
46872 volatile WalCkptInfo *pInfo; /* The checkpoint status information */
46873 int (*xBusy)(void*) = 0; /* Function to call when waiting for locks */
46875 szPage = walPagesize(pWal);
46876 testcase( szPage<=32768 );
46877 testcase( szPage>=65536 );
46878 pInfo = walCkptInfo(pWal);
46879 if( pInfo->nBackfill>=pWal->hdr.mxFrame ) return SQLITE_OK;
46881 /* Allocate the iterator */
46882 rc = walIteratorInit(pWal, &pIter);
46883 if( rc!=SQLITE_OK ){
46884 return rc;
46886 assert( pIter );
46888 if( eMode!=SQLITE_CHECKPOINT_PASSIVE ) xBusy = xBusyCall;
46890 /* Compute in mxSafeFrame the index of the last frame of the WAL that is
46891 ** safe to write into the database. Frames beyond mxSafeFrame might
46892 ** overwrite database pages that are in use by active readers and thus
46893 ** cannot be backfilled from the WAL.
46895 mxSafeFrame = pWal->hdr.mxFrame;
46896 mxPage = pWal->hdr.nPage;
46897 for(i=1; i<WAL_NREADER; i++){
46898 u32 y = pInfo->aReadMark[i];
46899 if( mxSafeFrame>y ){
46900 assert( y<=pWal->hdr.mxFrame );
46901 rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(i), 1);
46902 if( rc==SQLITE_OK ){
46903 pInfo->aReadMark[i] = READMARK_NOT_USED;
46904 walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
46905 }else if( rc==SQLITE_BUSY ){
46906 mxSafeFrame = y;
46907 xBusy = 0;
46908 }else{
46909 goto walcheckpoint_out;
46914 if( pInfo->nBackfill<mxSafeFrame
46915 && (rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(0), 1))==SQLITE_OK
46917 i64 nSize; /* Current size of database file */
46918 u32 nBackfill = pInfo->nBackfill;
46920 /* Sync the WAL to disk */
46921 if( sync_flags ){
46922 rc = sqlite3OsSync(pWal->pWalFd, sync_flags);
46925 /* If the database file may grow as a result of this checkpoint, hint
46926 ** about the eventual size of the db file to the VFS layer.
46928 if( rc==SQLITE_OK ){
46929 i64 nReq = ((i64)mxPage * szPage);
46930 rc = sqlite3OsFileSize(pWal->pDbFd, &nSize);
46931 if( rc==SQLITE_OK && nSize<nReq ){
46932 sqlite3OsFileControlHint(pWal->pDbFd, SQLITE_FCNTL_SIZE_HINT, &nReq);
46936 /* Iterate through the contents of the WAL, copying data to the db file. */
46937 while( rc==SQLITE_OK && 0==walIteratorNext(pIter, &iDbpage, &iFrame) ){
46938 i64 iOffset;
46939 assert( walFramePgno(pWal, iFrame)==iDbpage );
46940 if( iFrame<=nBackfill || iFrame>mxSafeFrame || iDbpage>mxPage ) continue;
46941 iOffset = walFrameOffset(iFrame, szPage) + WAL_FRAME_HDRSIZE;
46942 /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL file */
46943 rc = sqlite3OsRead(pWal->pWalFd, zBuf, szPage, iOffset);
46944 if( rc!=SQLITE_OK ) break;
46945 iOffset = (iDbpage-1)*(i64)szPage;
46946 testcase( IS_BIG_INT(iOffset) );
46947 rc = sqlite3OsWrite(pWal->pDbFd, zBuf, szPage, iOffset);
46948 if( rc!=SQLITE_OK ) break;
46951 /* If work was actually accomplished... */
46952 if( rc==SQLITE_OK ){
46953 if( mxSafeFrame==walIndexHdr(pWal)->mxFrame ){
46954 i64 szDb = pWal->hdr.nPage*(i64)szPage;
46955 testcase( IS_BIG_INT(szDb) );
46956 rc = sqlite3OsTruncate(pWal->pDbFd, szDb);
46957 if( rc==SQLITE_OK && sync_flags ){
46958 rc = sqlite3OsSync(pWal->pDbFd, sync_flags);
46961 if( rc==SQLITE_OK ){
46962 pInfo->nBackfill = mxSafeFrame;
46966 /* Release the reader lock held while backfilling */
46967 walUnlockExclusive(pWal, WAL_READ_LOCK(0), 1);
46970 if( rc==SQLITE_BUSY ){
46971 /* Reset the return code so as not to report a checkpoint failure
46972 ** just because there are active readers. */
46973 rc = SQLITE_OK;
46976 /* If this is an SQLITE_CHECKPOINT_RESTART operation, and the entire wal
46977 ** file has been copied into the database file, then block until all
46978 ** readers have finished using the wal file. This ensures that the next
46979 ** process to write to the database restarts the wal file.
46981 if( rc==SQLITE_OK && eMode!=SQLITE_CHECKPOINT_PASSIVE ){
46982 assert( pWal->writeLock );
46983 if( pInfo->nBackfill<pWal->hdr.mxFrame ){
46984 rc = SQLITE_BUSY;
46985 }else if( eMode==SQLITE_CHECKPOINT_RESTART ){
46986 assert( mxSafeFrame==pWal->hdr.mxFrame );
46987 rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_READ_LOCK(1), WAL_NREADER-1);
46988 if( rc==SQLITE_OK ){
46989 walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
46994 walcheckpoint_out:
46995 walIteratorFree(pIter);
46996 return rc;
47000 ** If the WAL file is currently larger than nMax bytes in size, truncate
47001 ** it to exactly nMax bytes. If an error occurs while doing so, ignore it.
47003 static void walLimitSize(Wal *pWal, i64 nMax){
47004 i64 sz;
47005 int rx;
47006 sqlite3BeginBenignMalloc();
47007 rx = sqlite3OsFileSize(pWal->pWalFd, &sz);
47008 if( rx==SQLITE_OK && (sz > nMax ) ){
47009 rx = sqlite3OsTruncate(pWal->pWalFd, nMax);
47011 sqlite3EndBenignMalloc();
47012 if( rx ){
47013 sqlite3_log(rx, "cannot limit WAL size: %s", pWal->zWalName);
47018 ** Close a connection to a log file.
47020 SQLITE_PRIVATE int sqlite3WalClose(
47021 Wal *pWal, /* Wal to close */
47022 int sync_flags, /* Flags to pass to OsSync() (or 0) */
47023 int nBuf,
47024 u8 *zBuf /* Buffer of at least nBuf bytes */
47026 int rc = SQLITE_OK;
47027 if( pWal ){
47028 int isDelete = 0; /* True to unlink wal and wal-index files */
47030 /* If an EXCLUSIVE lock can be obtained on the database file (using the
47031 ** ordinary, rollback-mode locking methods, this guarantees that the
47032 ** connection associated with this log file is the only connection to
47033 ** the database. In this case checkpoint the database and unlink both
47034 ** the wal and wal-index files.
47036 ** The EXCLUSIVE lock is not released before returning.
47038 rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE);
47039 if( rc==SQLITE_OK ){
47040 if( pWal->exclusiveMode==WAL_NORMAL_MODE ){
47041 pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
47043 rc = sqlite3WalCheckpoint(
47044 pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0
47046 if( rc==SQLITE_OK ){
47047 int bPersist = -1;
47048 sqlite3OsFileControlHint(
47049 pWal->pDbFd, SQLITE_FCNTL_PERSIST_WAL, &bPersist
47051 if( bPersist!=1 ){
47052 /* Try to delete the WAL file if the checkpoint completed and
47053 ** fsyned (rc==SQLITE_OK) and if we are not in persistent-wal
47054 ** mode (!bPersist) */
47055 isDelete = 1;
47056 }else if( pWal->mxWalSize>=0 ){
47057 /* Try to truncate the WAL file to zero bytes if the checkpoint
47058 ** completed and fsynced (rc==SQLITE_OK) and we are in persistent
47059 ** WAL mode (bPersist) and if the PRAGMA journal_size_limit is a
47060 ** non-negative value (pWal->mxWalSize>=0). Note that we truncate
47061 ** to zero bytes as truncating to the journal_size_limit might
47062 ** leave a corrupt WAL file on disk. */
47063 walLimitSize(pWal, 0);
47068 walIndexClose(pWal, isDelete);
47069 sqlite3OsClose(pWal->pWalFd);
47070 if( isDelete ){
47071 sqlite3BeginBenignMalloc();
47072 sqlite3OsDelete(pWal->pVfs, pWal->zWalName, 0);
47073 sqlite3EndBenignMalloc();
47075 WALTRACE(("WAL%p: closed\n", pWal));
47076 sqlite3_free((void *)pWal->apWiData);
47077 sqlite3_free(pWal);
47079 return rc;
47083 ** Try to read the wal-index header. Return 0 on success and 1 if
47084 ** there is a problem.
47086 ** The wal-index is in shared memory. Another thread or process might
47087 ** be writing the header at the same time this procedure is trying to
47088 ** read it, which might result in inconsistency. A dirty read is detected
47089 ** by verifying that both copies of the header are the same and also by
47090 ** a checksum on the header.
47092 ** If and only if the read is consistent and the header is different from
47093 ** pWal->hdr, then pWal->hdr is updated to the content of the new header
47094 ** and *pChanged is set to 1.
47096 ** If the checksum cannot be verified return non-zero. If the header
47097 ** is read successfully and the checksum verified, return zero.
47099 static int walIndexTryHdr(Wal *pWal, int *pChanged){
47100 u32 aCksum[2]; /* Checksum on the header content */
47101 WalIndexHdr h1, h2; /* Two copies of the header content */
47102 WalIndexHdr volatile *aHdr; /* Header in shared memory */
47104 /* The first page of the wal-index must be mapped at this point. */
47105 assert( pWal->nWiData>0 && pWal->apWiData[0] );
47107 /* Read the header. This might happen concurrently with a write to the
47108 ** same area of shared memory on a different CPU in a SMP,
47109 ** meaning it is possible that an inconsistent snapshot is read
47110 ** from the file. If this happens, return non-zero.
47112 ** There are two copies of the header at the beginning of the wal-index.
47113 ** When reading, read [0] first then [1]. Writes are in the reverse order.
47114 ** Memory barriers are used to prevent the compiler or the hardware from
47115 ** reordering the reads and writes.
47117 aHdr = walIndexHdr(pWal);
47118 memcpy(&h1, (void *)&aHdr[0], sizeof(h1));
47119 walShmBarrier(pWal);
47120 memcpy(&h2, (void *)&aHdr[1], sizeof(h2));
47122 if( memcmp(&h1, &h2, sizeof(h1))!=0 ){
47123 return 1; /* Dirty read */
47125 if( h1.isInit==0 ){
47126 return 1; /* Malformed header - probably all zeros */
47128 walChecksumBytes(1, (u8*)&h1, sizeof(h1)-sizeof(h1.aCksum), 0, aCksum);
47129 if( aCksum[0]!=h1.aCksum[0] || aCksum[1]!=h1.aCksum[1] ){
47130 return 1; /* Checksum does not match */
47133 if( memcmp(&pWal->hdr, &h1, sizeof(WalIndexHdr)) ){
47134 *pChanged = 1;
47135 memcpy(&pWal->hdr, &h1, sizeof(WalIndexHdr));
47136 pWal->szPage = (pWal->hdr.szPage&0xfe00) + ((pWal->hdr.szPage&0x0001)<<16);
47137 testcase( pWal->szPage<=32768 );
47138 testcase( pWal->szPage>=65536 );
47141 /* The header was successfully read. Return zero. */
47142 return 0;
47146 ** Read the wal-index header from the wal-index and into pWal->hdr.
47147 ** If the wal-header appears to be corrupt, try to reconstruct the
47148 ** wal-index from the WAL before returning.
47150 ** Set *pChanged to 1 if the wal-index header value in pWal->hdr is
47151 ** changed by this opertion. If pWal->hdr is unchanged, set *pChanged
47152 ** to 0.
47154 ** If the wal-index header is successfully read, return SQLITE_OK.
47155 ** Otherwise an SQLite error code.
47157 static int walIndexReadHdr(Wal *pWal, int *pChanged){
47158 int rc; /* Return code */
47159 int badHdr; /* True if a header read failed */
47160 volatile u32 *page0; /* Chunk of wal-index containing header */
47162 /* Ensure that page 0 of the wal-index (the page that contains the
47163 ** wal-index header) is mapped. Return early if an error occurs here.
47165 assert( pChanged );
47166 rc = walIndexPage(pWal, 0, &page0);
47167 if( rc!=SQLITE_OK ){
47168 return rc;
47170 assert( page0 || pWal->writeLock==0 );
47172 /* If the first page of the wal-index has been mapped, try to read the
47173 ** wal-index header immediately, without holding any lock. This usually
47174 ** works, but may fail if the wal-index header is corrupt or currently
47175 ** being modified by another thread or process.
47177 badHdr = (page0 ? walIndexTryHdr(pWal, pChanged) : 1);
47179 /* If the first attempt failed, it might have been due to a race
47180 ** with a writer. So get a WRITE lock and try again.
47182 assert( badHdr==0 || pWal->writeLock==0 );
47183 if( badHdr ){
47184 if( pWal->readOnly & WAL_SHM_RDONLY ){
47185 if( SQLITE_OK==(rc = walLockShared(pWal, WAL_WRITE_LOCK)) ){
47186 walUnlockShared(pWal, WAL_WRITE_LOCK);
47187 rc = SQLITE_READONLY_RECOVERY;
47189 }else if( SQLITE_OK==(rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1)) ){
47190 pWal->writeLock = 1;
47191 if( SQLITE_OK==(rc = walIndexPage(pWal, 0, &page0)) ){
47192 badHdr = walIndexTryHdr(pWal, pChanged);
47193 if( badHdr ){
47194 /* If the wal-index header is still malformed even while holding
47195 ** a WRITE lock, it can only mean that the header is corrupted and
47196 ** needs to be reconstructed. So run recovery to do exactly that.
47198 rc = walIndexRecover(pWal);
47199 *pChanged = 1;
47202 pWal->writeLock = 0;
47203 walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
47207 /* If the header is read successfully, check the version number to make
47208 ** sure the wal-index was not constructed with some future format that
47209 ** this version of SQLite cannot understand.
47211 if( badHdr==0 && pWal->hdr.iVersion!=WALINDEX_MAX_VERSION ){
47212 rc = SQLITE_CANTOPEN_BKPT;
47215 return rc;
47219 ** This is the value that walTryBeginRead returns when it needs to
47220 ** be retried.
47222 #define WAL_RETRY (-1)
47225 ** Attempt to start a read transaction. This might fail due to a race or
47226 ** other transient condition. When that happens, it returns WAL_RETRY to
47227 ** indicate to the caller that it is safe to retry immediately.
47229 ** On success return SQLITE_OK. On a permanent failure (such an
47230 ** I/O error or an SQLITE_BUSY because another process is running
47231 ** recovery) return a positive error code.
47233 ** The useWal parameter is true to force the use of the WAL and disable
47234 ** the case where the WAL is bypassed because it has been completely
47235 ** checkpointed. If useWal==0 then this routine calls walIndexReadHdr()
47236 ** to make a copy of the wal-index header into pWal->hdr. If the
47237 ** wal-index header has changed, *pChanged is set to 1 (as an indication
47238 ** to the caller that the local paget cache is obsolete and needs to be
47239 ** flushed.) When useWal==1, the wal-index header is assumed to already
47240 ** be loaded and the pChanged parameter is unused.
47242 ** The caller must set the cnt parameter to the number of prior calls to
47243 ** this routine during the current read attempt that returned WAL_RETRY.
47244 ** This routine will start taking more aggressive measures to clear the
47245 ** race conditions after multiple WAL_RETRY returns, and after an excessive
47246 ** number of errors will ultimately return SQLITE_PROTOCOL. The
47247 ** SQLITE_PROTOCOL return indicates that some other process has gone rogue
47248 ** and is not honoring the locking protocol. There is a vanishingly small
47249 ** chance that SQLITE_PROTOCOL could be returned because of a run of really
47250 ** bad luck when there is lots of contention for the wal-index, but that
47251 ** possibility is so small that it can be safely neglected, we believe.
47253 ** On success, this routine obtains a read lock on
47254 ** WAL_READ_LOCK(pWal->readLock). The pWal->readLock integer is
47255 ** in the range 0 <= pWal->readLock < WAL_NREADER. If pWal->readLock==(-1)
47256 ** that means the Wal does not hold any read lock. The reader must not
47257 ** access any database page that is modified by a WAL frame up to and
47258 ** including frame number aReadMark[pWal->readLock]. The reader will
47259 ** use WAL frames up to and including pWal->hdr.mxFrame if pWal->readLock>0
47260 ** Or if pWal->readLock==0, then the reader will ignore the WAL
47261 ** completely and get all content directly from the database file.
47262 ** If the useWal parameter is 1 then the WAL will never be ignored and
47263 ** this routine will always set pWal->readLock>0 on success.
47264 ** When the read transaction is completed, the caller must release the
47265 ** lock on WAL_READ_LOCK(pWal->readLock) and set pWal->readLock to -1.
47267 ** This routine uses the nBackfill and aReadMark[] fields of the header
47268 ** to select a particular WAL_READ_LOCK() that strives to let the
47269 ** checkpoint process do as much work as possible. This routine might
47270 ** update values of the aReadMark[] array in the header, but if it does
47271 ** so it takes care to hold an exclusive lock on the corresponding
47272 ** WAL_READ_LOCK() while changing values.
47274 static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
47275 volatile WalCkptInfo *pInfo; /* Checkpoint information in wal-index */
47276 u32 mxReadMark; /* Largest aReadMark[] value */
47277 int mxI; /* Index of largest aReadMark[] value */
47278 int i; /* Loop counter */
47279 int rc = SQLITE_OK; /* Return code */
47281 assert( pWal->readLock<0 ); /* Not currently locked */
47283 /* Take steps to avoid spinning forever if there is a protocol error.
47285 ** Circumstances that cause a RETRY should only last for the briefest
47286 ** instances of time. No I/O or other system calls are done while the
47287 ** locks are held, so the locks should not be held for very long. But
47288 ** if we are unlucky, another process that is holding a lock might get
47289 ** paged out or take a page-fault that is time-consuming to resolve,
47290 ** during the few nanoseconds that it is holding the lock. In that case,
47291 ** it might take longer than normal for the lock to free.
47293 ** After 5 RETRYs, we begin calling sqlite3OsSleep(). The first few
47294 ** calls to sqlite3OsSleep() have a delay of 1 microsecond. Really this
47295 ** is more of a scheduler yield than an actual delay. But on the 10th
47296 ** an subsequent retries, the delays start becoming longer and longer,
47297 ** so that on the 100th (and last) RETRY we delay for 21 milliseconds.
47298 ** The total delay time before giving up is less than 1 second.
47300 if( cnt>5 ){
47301 int nDelay = 1; /* Pause time in microseconds */
47302 if( cnt>100 ){
47303 VVA_ONLY( pWal->lockError = 1; )
47304 return SQLITE_PROTOCOL;
47306 if( cnt>=10 ) nDelay = (cnt-9)*238; /* Max delay 21ms. Total delay 996ms */
47307 sqlite3OsSleep(pWal->pVfs, nDelay);
47310 if( !useWal ){
47311 rc = walIndexReadHdr(pWal, pChanged);
47312 if( rc==SQLITE_BUSY ){
47313 /* If there is not a recovery running in another thread or process
47314 ** then convert BUSY errors to WAL_RETRY. If recovery is known to
47315 ** be running, convert BUSY to BUSY_RECOVERY. There is a race here
47316 ** which might cause WAL_RETRY to be returned even if BUSY_RECOVERY
47317 ** would be technically correct. But the race is benign since with
47318 ** WAL_RETRY this routine will be called again and will probably be
47319 ** right on the second iteration.
47321 if( pWal->apWiData[0]==0 ){
47322 /* This branch is taken when the xShmMap() method returns SQLITE_BUSY.
47323 ** We assume this is a transient condition, so return WAL_RETRY. The
47324 ** xShmMap() implementation used by the default unix and win32 VFS
47325 ** modules may return SQLITE_BUSY due to a race condition in the
47326 ** code that determines whether or not the shared-memory region
47327 ** must be zeroed before the requested page is returned.
47329 rc = WAL_RETRY;
47330 }else if( SQLITE_OK==(rc = walLockShared(pWal, WAL_RECOVER_LOCK)) ){
47331 walUnlockShared(pWal, WAL_RECOVER_LOCK);
47332 rc = WAL_RETRY;
47333 }else if( rc==SQLITE_BUSY ){
47334 rc = SQLITE_BUSY_RECOVERY;
47337 if( rc!=SQLITE_OK ){
47338 return rc;
47342 pInfo = walCkptInfo(pWal);
47343 if( !useWal && pInfo->nBackfill==pWal->hdr.mxFrame ){
47344 /* The WAL has been completely backfilled (or it is empty).
47345 ** and can be safely ignored.
47347 rc = walLockShared(pWal, WAL_READ_LOCK(0));
47348 walShmBarrier(pWal);
47349 if( rc==SQLITE_OK ){
47350 if( memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr)) ){
47351 /* It is not safe to allow the reader to continue here if frames
47352 ** may have been appended to the log before READ_LOCK(0) was obtained.
47353 ** When holding READ_LOCK(0), the reader ignores the entire log file,
47354 ** which implies that the database file contains a trustworthy
47355 ** snapshoT. Since holding READ_LOCK(0) prevents a checkpoint from
47356 ** happening, this is usually correct.
47358 ** However, if frames have been appended to the log (or if the log
47359 ** is wrapped and written for that matter) before the READ_LOCK(0)
47360 ** is obtained, that is not necessarily true. A checkpointer may
47361 ** have started to backfill the appended frames but crashed before
47362 ** it finished. Leaving a corrupt image in the database file.
47364 walUnlockShared(pWal, WAL_READ_LOCK(0));
47365 return WAL_RETRY;
47367 pWal->readLock = 0;
47368 return SQLITE_OK;
47369 }else if( rc!=SQLITE_BUSY ){
47370 return rc;
47374 /* If we get this far, it means that the reader will want to use
47375 ** the WAL to get at content from recent commits. The job now is
47376 ** to select one of the aReadMark[] entries that is closest to
47377 ** but not exceeding pWal->hdr.mxFrame and lock that entry.
47379 mxReadMark = 0;
47380 mxI = 0;
47381 for(i=1; i<WAL_NREADER; i++){
47382 u32 thisMark = pInfo->aReadMark[i];
47383 if( mxReadMark<=thisMark && thisMark<=pWal->hdr.mxFrame ){
47384 assert( thisMark!=READMARK_NOT_USED );
47385 mxReadMark = thisMark;
47386 mxI = i;
47389 /* There was once an "if" here. The extra "{" is to preserve indentation. */
47391 if( (pWal->readOnly & WAL_SHM_RDONLY)==0
47392 && (mxReadMark<pWal->hdr.mxFrame || mxI==0)
47394 for(i=1; i<WAL_NREADER; i++){
47395 rc = walLockExclusive(pWal, WAL_READ_LOCK(i), 1);
47396 if( rc==SQLITE_OK ){
47397 mxReadMark = pInfo->aReadMark[i] = pWal->hdr.mxFrame;
47398 mxI = i;
47399 walUnlockExclusive(pWal, WAL_READ_LOCK(i), 1);
47400 break;
47401 }else if( rc!=SQLITE_BUSY ){
47402 return rc;
47406 if( mxI==0 ){
47407 assert( rc==SQLITE_BUSY || (pWal->readOnly & WAL_SHM_RDONLY)!=0 );
47408 return rc==SQLITE_BUSY ? WAL_RETRY : SQLITE_READONLY_CANTLOCK;
47411 rc = walLockShared(pWal, WAL_READ_LOCK(mxI));
47412 if( rc ){
47413 return rc==SQLITE_BUSY ? WAL_RETRY : rc;
47415 /* Now that the read-lock has been obtained, check that neither the
47416 ** value in the aReadMark[] array or the contents of the wal-index
47417 ** header have changed.
47419 ** It is necessary to check that the wal-index header did not change
47420 ** between the time it was read and when the shared-lock was obtained
47421 ** on WAL_READ_LOCK(mxI) was obtained to account for the possibility
47422 ** that the log file may have been wrapped by a writer, or that frames
47423 ** that occur later in the log than pWal->hdr.mxFrame may have been
47424 ** copied into the database by a checkpointer. If either of these things
47425 ** happened, then reading the database with the current value of
47426 ** pWal->hdr.mxFrame risks reading a corrupted snapshot. So, retry
47427 ** instead.
47429 ** This does not guarantee that the copy of the wal-index header is up to
47430 ** date before proceeding. That would not be possible without somehow
47431 ** blocking writers. It only guarantees that a dangerous checkpoint or
47432 ** log-wrap (either of which would require an exclusive lock on
47433 ** WAL_READ_LOCK(mxI)) has not occurred since the snapshot was valid.
47435 walShmBarrier(pWal);
47436 if( pInfo->aReadMark[mxI]!=mxReadMark
47437 || memcmp((void *)walIndexHdr(pWal), &pWal->hdr, sizeof(WalIndexHdr))
47439 walUnlockShared(pWal, WAL_READ_LOCK(mxI));
47440 return WAL_RETRY;
47441 }else{
47442 assert( mxReadMark<=pWal->hdr.mxFrame );
47443 pWal->readLock = (i16)mxI;
47446 return rc;
47450 ** Begin a read transaction on the database.
47452 ** This routine used to be called sqlite3OpenSnapshot() and with good reason:
47453 ** it takes a snapshot of the state of the WAL and wal-index for the current
47454 ** instant in time. The current thread will continue to use this snapshot.
47455 ** Other threads might append new content to the WAL and wal-index but
47456 ** that extra content is ignored by the current thread.
47458 ** If the database contents have changes since the previous read
47459 ** transaction, then *pChanged is set to 1 before returning. The
47460 ** Pager layer will use this to know that is cache is stale and
47461 ** needs to be flushed.
47463 SQLITE_PRIVATE int sqlite3WalBeginReadTransaction(Wal *pWal, int *pChanged){
47464 int rc; /* Return code */
47465 int cnt = 0; /* Number of TryBeginRead attempts */
47468 rc = walTryBeginRead(pWal, pChanged, 0, ++cnt);
47469 }while( rc==WAL_RETRY );
47470 testcase( (rc&0xff)==SQLITE_BUSY );
47471 testcase( (rc&0xff)==SQLITE_IOERR );
47472 testcase( rc==SQLITE_PROTOCOL );
47473 testcase( rc==SQLITE_OK );
47474 return rc;
47478 ** Finish with a read transaction. All this does is release the
47479 ** read-lock.
47481 SQLITE_PRIVATE void sqlite3WalEndReadTransaction(Wal *pWal){
47482 sqlite3WalEndWriteTransaction(pWal);
47483 if( pWal->readLock>=0 ){
47484 walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
47485 pWal->readLock = -1;
47490 ** Read a page from the WAL, if it is present in the WAL and if the
47491 ** current read transaction is configured to use the WAL.
47493 ** The *pInWal is set to 1 if the requested page is in the WAL and
47494 ** has been loaded. Or *pInWal is set to 0 if the page was not in
47495 ** the WAL and needs to be read out of the database.
47497 SQLITE_PRIVATE int sqlite3WalRead(
47498 Wal *pWal, /* WAL handle */
47499 Pgno pgno, /* Database page number to read data for */
47500 int *pInWal, /* OUT: True if data is read from WAL */
47501 int nOut, /* Size of buffer pOut in bytes */
47502 u8 *pOut /* Buffer to write page data to */
47504 u32 iRead = 0; /* If !=0, WAL frame to return data from */
47505 u32 iLast = pWal->hdr.mxFrame; /* Last page in WAL for this reader */
47506 int iHash; /* Used to loop through N hash tables */
47508 /* This routine is only be called from within a read transaction. */
47509 assert( pWal->readLock>=0 || pWal->lockError );
47511 /* If the "last page" field of the wal-index header snapshot is 0, then
47512 ** no data will be read from the wal under any circumstances. Return early
47513 ** in this case as an optimization. Likewise, if pWal->readLock==0,
47514 ** then the WAL is ignored by the reader so return early, as if the
47515 ** WAL were empty.
47517 if( iLast==0 || pWal->readLock==0 ){
47518 *pInWal = 0;
47519 return SQLITE_OK;
47522 /* Search the hash table or tables for an entry matching page number
47523 ** pgno. Each iteration of the following for() loop searches one
47524 ** hash table (each hash table indexes up to HASHTABLE_NPAGE frames).
47526 ** This code might run concurrently to the code in walIndexAppend()
47527 ** that adds entries to the wal-index (and possibly to this hash
47528 ** table). This means the value just read from the hash
47529 ** slot (aHash[iKey]) may have been added before or after the
47530 ** current read transaction was opened. Values added after the
47531 ** read transaction was opened may have been written incorrectly -
47532 ** i.e. these slots may contain garbage data. However, we assume
47533 ** that any slots written before the current read transaction was
47534 ** opened remain unmodified.
47536 ** For the reasons above, the if(...) condition featured in the inner
47537 ** loop of the following block is more stringent that would be required
47538 ** if we had exclusive access to the hash-table:
47540 ** (aPgno[iFrame]==pgno):
47541 ** This condition filters out normal hash-table collisions.
47543 ** (iFrame<=iLast):
47544 ** This condition filters out entries that were added to the hash
47545 ** table after the current read-transaction had started.
47547 for(iHash=walFramePage(iLast); iHash>=0 && iRead==0; iHash--){
47548 volatile ht_slot *aHash; /* Pointer to hash table */
47549 volatile u32 *aPgno; /* Pointer to array of page numbers */
47550 u32 iZero; /* Frame number corresponding to aPgno[0] */
47551 int iKey; /* Hash slot index */
47552 int nCollide; /* Number of hash collisions remaining */
47553 int rc; /* Error code */
47555 rc = walHashGet(pWal, iHash, &aHash, &aPgno, &iZero);
47556 if( rc!=SQLITE_OK ){
47557 return rc;
47559 nCollide = HASHTABLE_NSLOT;
47560 for(iKey=walHash(pgno); aHash[iKey]; iKey=walNextHash(iKey)){
47561 u32 iFrame = aHash[iKey] + iZero;
47562 if( iFrame<=iLast && aPgno[aHash[iKey]]==pgno ){
47563 /* assert( iFrame>iRead ); -- not true if there is corruption */
47564 iRead = iFrame;
47566 if( (nCollide--)==0 ){
47567 return SQLITE_CORRUPT_BKPT;
47572 #ifdef SQLITE_ENABLE_EXPENSIVE_ASSERT
47573 /* If expensive assert() statements are available, do a linear search
47574 ** of the wal-index file content. Make sure the results agree with the
47575 ** result obtained using the hash indexes above. */
47577 u32 iRead2 = 0;
47578 u32 iTest;
47579 for(iTest=iLast; iTest>0; iTest--){
47580 if( walFramePgno(pWal, iTest)==pgno ){
47581 iRead2 = iTest;
47582 break;
47585 assert( iRead==iRead2 );
47587 #endif
47589 /* If iRead is non-zero, then it is the log frame number that contains the
47590 ** required page. Read and return data from the log file.
47592 if( iRead ){
47593 int sz;
47594 i64 iOffset;
47595 sz = pWal->hdr.szPage;
47596 sz = (sz&0xfe00) + ((sz&0x0001)<<16);
47597 testcase( sz<=32768 );
47598 testcase( sz>=65536 );
47599 iOffset = walFrameOffset(iRead, sz) + WAL_FRAME_HDRSIZE;
47600 *pInWal = 1;
47601 /* testcase( IS_BIG_INT(iOffset) ); // requires a 4GiB WAL */
47602 return sqlite3OsRead(pWal->pWalFd, pOut, nOut, iOffset);
47605 *pInWal = 0;
47606 return SQLITE_OK;
47611 ** Return the size of the database in pages (or zero, if unknown).
47613 SQLITE_PRIVATE Pgno sqlite3WalDbsize(Wal *pWal){
47614 if( pWal && ALWAYS(pWal->readLock>=0) ){
47615 return pWal->hdr.nPage;
47617 return 0;
47622 ** This function starts a write transaction on the WAL.
47624 ** A read transaction must have already been started by a prior call
47625 ** to sqlite3WalBeginReadTransaction().
47627 ** If another thread or process has written into the database since
47628 ** the read transaction was started, then it is not possible for this
47629 ** thread to write as doing so would cause a fork. So this routine
47630 ** returns SQLITE_BUSY in that case and no write transaction is started.
47632 ** There can only be a single writer active at a time.
47634 SQLITE_PRIVATE int sqlite3WalBeginWriteTransaction(Wal *pWal){
47635 int rc;
47637 /* Cannot start a write transaction without first holding a read
47638 ** transaction. */
47639 assert( pWal->readLock>=0 );
47641 if( pWal->readOnly ){
47642 return SQLITE_READONLY;
47645 /* Only one writer allowed at a time. Get the write lock. Return
47646 ** SQLITE_BUSY if unable.
47648 rc = walLockExclusive(pWal, WAL_WRITE_LOCK, 1);
47649 if( rc ){
47650 return rc;
47652 pWal->writeLock = 1;
47654 /* If another connection has written to the database file since the
47655 ** time the read transaction on this connection was started, then
47656 ** the write is disallowed.
47658 if( memcmp(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr))!=0 ){
47659 walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
47660 pWal->writeLock = 0;
47661 rc = SQLITE_BUSY;
47664 return rc;
47668 ** End a write transaction. The commit has already been done. This
47669 ** routine merely releases the lock.
47671 SQLITE_PRIVATE int sqlite3WalEndWriteTransaction(Wal *pWal){
47672 if( pWal->writeLock ){
47673 walUnlockExclusive(pWal, WAL_WRITE_LOCK, 1);
47674 pWal->writeLock = 0;
47675 pWal->truncateOnCommit = 0;
47677 return SQLITE_OK;
47681 ** If any data has been written (but not committed) to the log file, this
47682 ** function moves the write-pointer back to the start of the transaction.
47684 ** Additionally, the callback function is invoked for each frame written
47685 ** to the WAL since the start of the transaction. If the callback returns
47686 ** other than SQLITE_OK, it is not invoked again and the error code is
47687 ** returned to the caller.
47689 ** Otherwise, if the callback function does not return an error, this
47690 ** function returns SQLITE_OK.
47692 SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *pUndoCtx){
47693 int rc = SQLITE_OK;
47694 if( ALWAYS(pWal->writeLock) ){
47695 Pgno iMax = pWal->hdr.mxFrame;
47696 Pgno iFrame;
47698 /* Restore the clients cache of the wal-index header to the state it
47699 ** was in before the client began writing to the database.
47701 memcpy(&pWal->hdr, (void *)walIndexHdr(pWal), sizeof(WalIndexHdr));
47703 for(iFrame=pWal->hdr.mxFrame+1;
47704 ALWAYS(rc==SQLITE_OK) && iFrame<=iMax;
47705 iFrame++
47707 /* This call cannot fail. Unless the page for which the page number
47708 ** is passed as the second argument is (a) in the cache and
47709 ** (b) has an outstanding reference, then xUndo is either a no-op
47710 ** (if (a) is false) or simply expels the page from the cache (if (b)
47711 ** is false).
47713 ** If the upper layer is doing a rollback, it is guaranteed that there
47714 ** are no outstanding references to any page other than page 1. And
47715 ** page 1 is never written to the log until the transaction is
47716 ** committed. As a result, the call to xUndo may not fail.
47718 assert( walFramePgno(pWal, iFrame)!=1 );
47719 rc = xUndo(pUndoCtx, walFramePgno(pWal, iFrame));
47721 walCleanupHash(pWal);
47723 assert( rc==SQLITE_OK );
47724 return rc;
47728 ** Argument aWalData must point to an array of WAL_SAVEPOINT_NDATA u32
47729 ** values. This function populates the array with values required to
47730 ** "rollback" the write position of the WAL handle back to the current
47731 ** point in the event of a savepoint rollback (via WalSavepointUndo()).
47733 SQLITE_PRIVATE void sqlite3WalSavepoint(Wal *pWal, u32 *aWalData){
47734 assert( pWal->writeLock );
47735 aWalData[0] = pWal->hdr.mxFrame;
47736 aWalData[1] = pWal->hdr.aFrameCksum[0];
47737 aWalData[2] = pWal->hdr.aFrameCksum[1];
47738 aWalData[3] = pWal->nCkpt;
47742 ** Move the write position of the WAL back to the point identified by
47743 ** the values in the aWalData[] array. aWalData must point to an array
47744 ** of WAL_SAVEPOINT_NDATA u32 values that has been previously populated
47745 ** by a call to WalSavepoint().
47747 SQLITE_PRIVATE int sqlite3WalSavepointUndo(Wal *pWal, u32 *aWalData){
47748 int rc = SQLITE_OK;
47750 assert( pWal->writeLock );
47751 assert( aWalData[3]!=pWal->nCkpt || aWalData[0]<=pWal->hdr.mxFrame );
47753 if( aWalData[3]!=pWal->nCkpt ){
47754 /* This savepoint was opened immediately after the write-transaction
47755 ** was started. Right after that, the writer decided to wrap around
47756 ** to the start of the log. Update the savepoint values to match.
47758 aWalData[0] = 0;
47759 aWalData[3] = pWal->nCkpt;
47762 if( aWalData[0]<pWal->hdr.mxFrame ){
47763 pWal->hdr.mxFrame = aWalData[0];
47764 pWal->hdr.aFrameCksum[0] = aWalData[1];
47765 pWal->hdr.aFrameCksum[1] = aWalData[2];
47766 walCleanupHash(pWal);
47769 return rc;
47774 ** This function is called just before writing a set of frames to the log
47775 ** file (see sqlite3WalFrames()). It checks to see if, instead of appending
47776 ** to the current log file, it is possible to overwrite the start of the
47777 ** existing log file with the new frames (i.e. "reset" the log). If so,
47778 ** it sets pWal->hdr.mxFrame to 0. Otherwise, pWal->hdr.mxFrame is left
47779 ** unchanged.
47781 ** SQLITE_OK is returned if no error is encountered (regardless of whether
47782 ** or not pWal->hdr.mxFrame is modified). An SQLite error code is returned
47783 ** if an error occurs.
47785 static int walRestartLog(Wal *pWal){
47786 int rc = SQLITE_OK;
47787 int cnt;
47789 if( pWal->readLock==0 ){
47790 volatile WalCkptInfo *pInfo = walCkptInfo(pWal);
47791 assert( pInfo->nBackfill==pWal->hdr.mxFrame );
47792 if( pInfo->nBackfill>0 ){
47793 u32 salt1;
47794 sqlite3_randomness(4, &salt1);
47795 rc = walLockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
47796 if( rc==SQLITE_OK ){
47797 /* If all readers are using WAL_READ_LOCK(0) (in other words if no
47798 ** readers are currently using the WAL), then the transactions
47799 ** frames will overwrite the start of the existing log. Update the
47800 ** wal-index header to reflect this.
47802 ** In theory it would be Ok to update the cache of the header only
47803 ** at this point. But updating the actual wal-index header is also
47804 ** safe and means there is no special case for sqlite3WalUndo()
47805 ** to handle if this transaction is rolled back.
47807 int i; /* Loop counter */
47808 u32 *aSalt = pWal->hdr.aSalt; /* Big-endian salt values */
47810 pWal->nCkpt++;
47811 pWal->hdr.mxFrame = 0;
47812 sqlite3Put4byte((u8*)&aSalt[0], 1 + sqlite3Get4byte((u8*)&aSalt[0]));
47813 aSalt[1] = salt1;
47814 walIndexWriteHdr(pWal);
47815 pInfo->nBackfill = 0;
47816 for(i=1; i<WAL_NREADER; i++) pInfo->aReadMark[i] = READMARK_NOT_USED;
47817 assert( pInfo->aReadMark[0]==0 );
47818 walUnlockExclusive(pWal, WAL_READ_LOCK(1), WAL_NREADER-1);
47819 }else if( rc!=SQLITE_BUSY ){
47820 return rc;
47823 walUnlockShared(pWal, WAL_READ_LOCK(0));
47824 pWal->readLock = -1;
47825 cnt = 0;
47827 int notUsed;
47828 rc = walTryBeginRead(pWal, &notUsed, 1, ++cnt);
47829 }while( rc==WAL_RETRY );
47830 assert( (rc&0xff)!=SQLITE_BUSY ); /* BUSY not possible when useWal==1 */
47831 testcase( (rc&0xff)==SQLITE_IOERR );
47832 testcase( rc==SQLITE_PROTOCOL );
47833 testcase( rc==SQLITE_OK );
47835 return rc;
47839 ** Information about the current state of the WAL file and where
47840 ** the next fsync should occur - passed from sqlite3WalFrames() into
47841 ** walWriteToLog().
47843 typedef struct WalWriter {
47844 Wal *pWal; /* The complete WAL information */
47845 sqlite3_file *pFd; /* The WAL file to which we write */
47846 sqlite3_int64 iSyncPoint; /* Fsync at this offset */
47847 int syncFlags; /* Flags for the fsync */
47848 int szPage; /* Size of one page */
47849 } WalWriter;
47852 ** Write iAmt bytes of content into the WAL file beginning at iOffset.
47853 ** Do a sync when crossing the p->iSyncPoint boundary.
47855 ** In other words, if iSyncPoint is in between iOffset and iOffset+iAmt,
47856 ** first write the part before iSyncPoint, then sync, then write the
47857 ** rest.
47859 static int walWriteToLog(
47860 WalWriter *p, /* WAL to write to */
47861 void *pContent, /* Content to be written */
47862 int iAmt, /* Number of bytes to write */
47863 sqlite3_int64 iOffset /* Start writing at this offset */
47865 int rc;
47866 if( iOffset<p->iSyncPoint && iOffset+iAmt>=p->iSyncPoint ){
47867 int iFirstAmt = (int)(p->iSyncPoint - iOffset);
47868 rc = sqlite3OsWrite(p->pFd, pContent, iFirstAmt, iOffset);
47869 if( rc ) return rc;
47870 iOffset += iFirstAmt;
47871 iAmt -= iFirstAmt;
47872 pContent = (void*)(iFirstAmt + (char*)pContent);
47873 assert( p->syncFlags & (SQLITE_SYNC_NORMAL|SQLITE_SYNC_FULL) );
47874 rc = sqlite3OsSync(p->pFd, p->syncFlags);
47875 if( iAmt==0 || rc ) return rc;
47877 rc = sqlite3OsWrite(p->pFd, pContent, iAmt, iOffset);
47878 return rc;
47882 ** Write out a single frame of the WAL
47884 static int walWriteOneFrame(
47885 WalWriter *p, /* Where to write the frame */
47886 PgHdr *pPage, /* The page of the frame to be written */
47887 int nTruncate, /* The commit flag. Usually 0. >0 for commit */
47888 sqlite3_int64 iOffset /* Byte offset at which to write */
47890 int rc; /* Result code from subfunctions */
47891 void *pData; /* Data actually written */
47892 u8 aFrame[WAL_FRAME_HDRSIZE]; /* Buffer to assemble frame-header in */
47893 #if defined(SQLITE_HAS_CODEC)
47894 if( (pData = sqlite3PagerCodec(pPage))==0 ) return SQLITE_NOMEM;
47895 #else
47896 pData = pPage->pData;
47897 #endif
47898 walEncodeFrame(p->pWal, pPage->pgno, nTruncate, pData, aFrame);
47899 rc = walWriteToLog(p, aFrame, sizeof(aFrame), iOffset);
47900 if( rc ) return rc;
47901 /* Write the page data */
47902 rc = walWriteToLog(p, pData, p->szPage, iOffset+sizeof(aFrame));
47903 return rc;
47907 ** Write a set of frames to the log. The caller must hold the write-lock
47908 ** on the log file (obtained using sqlite3WalBeginWriteTransaction()).
47910 SQLITE_PRIVATE int sqlite3WalFrames(
47911 Wal *pWal, /* Wal handle to write to */
47912 int szPage, /* Database page-size in bytes */
47913 PgHdr *pList, /* List of dirty pages to write */
47914 Pgno nTruncate, /* Database size after this commit */
47915 int isCommit, /* True if this is a commit */
47916 int sync_flags /* Flags to pass to OsSync() (or 0) */
47918 int rc; /* Used to catch return codes */
47919 u32 iFrame; /* Next frame address */
47920 PgHdr *p; /* Iterator to run through pList with. */
47921 PgHdr *pLast = 0; /* Last frame in list */
47922 int nExtra = 0; /* Number of extra copies of last page */
47923 int szFrame; /* The size of a single frame */
47924 i64 iOffset; /* Next byte to write in WAL file */
47925 WalWriter w; /* The writer */
47927 assert( pList );
47928 assert( pWal->writeLock );
47930 /* If this frame set completes a transaction, then nTruncate>0. If
47931 ** nTruncate==0 then this frame set does not complete the transaction. */
47932 assert( (isCommit!=0)==(nTruncate!=0) );
47934 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
47935 { int cnt; for(cnt=0, p=pList; p; p=p->pDirty, cnt++){}
47936 WALTRACE(("WAL%p: frame write begin. %d frames. mxFrame=%d. %s\n",
47937 pWal, cnt, pWal->hdr.mxFrame, isCommit ? "Commit" : "Spill"));
47939 #endif
47941 /* See if it is possible to write these frames into the start of the
47942 ** log file, instead of appending to it at pWal->hdr.mxFrame.
47944 if( SQLITE_OK!=(rc = walRestartLog(pWal)) ){
47945 return rc;
47948 /* If this is the first frame written into the log, write the WAL
47949 ** header to the start of the WAL file. See comments at the top of
47950 ** this source file for a description of the WAL header format.
47952 iFrame = pWal->hdr.mxFrame;
47953 if( iFrame==0 ){
47954 u8 aWalHdr[WAL_HDRSIZE]; /* Buffer to assemble wal-header in */
47955 u32 aCksum[2]; /* Checksum for wal-header */
47957 sqlite3Put4byte(&aWalHdr[0], (WAL_MAGIC | SQLITE_BIGENDIAN));
47958 sqlite3Put4byte(&aWalHdr[4], WAL_MAX_VERSION);
47959 sqlite3Put4byte(&aWalHdr[8], szPage);
47960 sqlite3Put4byte(&aWalHdr[12], pWal->nCkpt);
47961 if( pWal->nCkpt==0 ) sqlite3_randomness(8, pWal->hdr.aSalt);
47962 memcpy(&aWalHdr[16], pWal->hdr.aSalt, 8);
47963 walChecksumBytes(1, aWalHdr, WAL_HDRSIZE-2*4, 0, aCksum);
47964 sqlite3Put4byte(&aWalHdr[24], aCksum[0]);
47965 sqlite3Put4byte(&aWalHdr[28], aCksum[1]);
47967 pWal->szPage = szPage;
47968 pWal->hdr.bigEndCksum = SQLITE_BIGENDIAN;
47969 pWal->hdr.aFrameCksum[0] = aCksum[0];
47970 pWal->hdr.aFrameCksum[1] = aCksum[1];
47971 pWal->truncateOnCommit = 1;
47973 rc = sqlite3OsWrite(pWal->pWalFd, aWalHdr, sizeof(aWalHdr), 0);
47974 WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok"));
47975 if( rc!=SQLITE_OK ){
47976 return rc;
47979 /* Sync the header (unless SQLITE_IOCAP_SEQUENTIAL is true or unless
47980 ** all syncing is turned off by PRAGMA synchronous=OFF). Otherwise
47981 ** an out-of-order write following a WAL restart could result in
47982 ** database corruption. See the ticket:
47984 ** http://localhost:591/sqlite/info/ff5be73dee
47986 if( pWal->syncHeader && sync_flags ){
47987 rc = sqlite3OsSync(pWal->pWalFd, sync_flags & SQLITE_SYNC_MASK);
47988 if( rc ) return rc;
47991 assert( (int)pWal->szPage==szPage );
47993 /* Setup information needed to write frames into the WAL */
47994 w.pWal = pWal;
47995 w.pFd = pWal->pWalFd;
47996 w.iSyncPoint = 0;
47997 w.syncFlags = sync_flags;
47998 w.szPage = szPage;
47999 iOffset = walFrameOffset(iFrame+1, szPage);
48000 szFrame = szPage + WAL_FRAME_HDRSIZE;
48002 /* Write all frames into the log file exactly once */
48003 for(p=pList; p; p=p->pDirty){
48004 int nDbSize; /* 0 normally. Positive == commit flag */
48005 iFrame++;
48006 assert( iOffset==walFrameOffset(iFrame, szPage) );
48007 nDbSize = (isCommit && p->pDirty==0) ? nTruncate : 0;
48008 rc = walWriteOneFrame(&w, p, nDbSize, iOffset);
48009 if( rc ) return rc;
48010 pLast = p;
48011 iOffset += szFrame;
48014 /* If this is the end of a transaction, then we might need to pad
48015 ** the transaction and/or sync the WAL file.
48017 ** Padding and syncing only occur if this set of frames complete a
48018 ** transaction and if PRAGMA synchronous=FULL. If synchronous==NORMAL
48019 ** or synchonous==OFF, then no padding or syncing are needed.
48021 ** If SQLITE_IOCAP_POWERSAFE_OVERWRITE is defined, then padding is not
48022 ** needed and only the sync is done. If padding is needed, then the
48023 ** final frame is repeated (with its commit mark) until the next sector
48024 ** boundary is crossed. Only the part of the WAL prior to the last
48025 ** sector boundary is synced; the part of the last frame that extends
48026 ** past the sector boundary is written after the sync.
48028 if( isCommit && (sync_flags & WAL_SYNC_TRANSACTIONS)!=0 ){
48029 if( pWal->padToSectorBoundary ){
48030 int sectorSize = sqlite3OsSectorSize(pWal->pWalFd);
48031 w.iSyncPoint = ((iOffset+sectorSize-1)/sectorSize)*sectorSize;
48032 while( iOffset<w.iSyncPoint ){
48033 rc = walWriteOneFrame(&w, pLast, nTruncate, iOffset);
48034 if( rc ) return rc;
48035 iOffset += szFrame;
48036 nExtra++;
48038 }else{
48039 rc = sqlite3OsSync(w.pFd, sync_flags & SQLITE_SYNC_MASK);
48043 /* If this frame set completes the first transaction in the WAL and
48044 ** if PRAGMA journal_size_limit is set, then truncate the WAL to the
48045 ** journal size limit, if possible.
48047 if( isCommit && pWal->truncateOnCommit && pWal->mxWalSize>=0 ){
48048 i64 sz = pWal->mxWalSize;
48049 if( walFrameOffset(iFrame+nExtra+1, szPage)>pWal->mxWalSize ){
48050 sz = walFrameOffset(iFrame+nExtra+1, szPage);
48052 walLimitSize(pWal, sz);
48053 pWal->truncateOnCommit = 0;
48056 /* Append data to the wal-index. It is not necessary to lock the
48057 ** wal-index to do this as the SQLITE_SHM_WRITE lock held on the wal-index
48058 ** guarantees that there are no other writers, and no data that may
48059 ** be in use by existing readers is being overwritten.
48061 iFrame = pWal->hdr.mxFrame;
48062 for(p=pList; p && rc==SQLITE_OK; p=p->pDirty){
48063 iFrame++;
48064 rc = walIndexAppend(pWal, iFrame, p->pgno);
48066 while( rc==SQLITE_OK && nExtra>0 ){
48067 iFrame++;
48068 nExtra--;
48069 rc = walIndexAppend(pWal, iFrame, pLast->pgno);
48072 if( rc==SQLITE_OK ){
48073 /* Update the private copy of the header. */
48074 pWal->hdr.szPage = (u16)((szPage&0xff00) | (szPage>>16));
48075 testcase( szPage<=32768 );
48076 testcase( szPage>=65536 );
48077 pWal->hdr.mxFrame = iFrame;
48078 if( isCommit ){
48079 pWal->hdr.iChange++;
48080 pWal->hdr.nPage = nTruncate;
48082 /* If this is a commit, update the wal-index header too. */
48083 if( isCommit ){
48084 walIndexWriteHdr(pWal);
48085 pWal->iCallback = iFrame;
48089 WALTRACE(("WAL%p: frame write %s\n", pWal, rc ? "failed" : "ok"));
48090 return rc;
48094 ** This routine is called to implement sqlite3_wal_checkpoint() and
48095 ** related interfaces.
48097 ** Obtain a CHECKPOINT lock and then backfill as much information as
48098 ** we can from WAL into the database.
48100 ** If parameter xBusy is not NULL, it is a pointer to a busy-handler
48101 ** callback. In this case this function runs a blocking checkpoint.
48103 SQLITE_PRIVATE int sqlite3WalCheckpoint(
48104 Wal *pWal, /* Wal connection */
48105 int eMode, /* PASSIVE, FULL or RESTART */
48106 int (*xBusy)(void*), /* Function to call when busy */
48107 void *pBusyArg, /* Context argument for xBusyHandler */
48108 int sync_flags, /* Flags to sync db file with (or 0) */
48109 int nBuf, /* Size of temporary buffer */
48110 u8 *zBuf, /* Temporary buffer to use */
48111 int *pnLog, /* OUT: Number of frames in WAL */
48112 int *pnCkpt /* OUT: Number of backfilled frames in WAL */
48114 int rc; /* Return code */
48115 int isChanged = 0; /* True if a new wal-index header is loaded */
48116 int eMode2 = eMode; /* Mode to pass to walCheckpoint() */
48118 assert( pWal->ckptLock==0 );
48119 assert( pWal->writeLock==0 );
48121 if( pWal->readOnly ) return SQLITE_READONLY;
48122 WALTRACE(("WAL%p: checkpoint begins\n", pWal));
48123 rc = walLockExclusive(pWal, WAL_CKPT_LOCK, 1);
48124 if( rc ){
48125 /* Usually this is SQLITE_BUSY meaning that another thread or process
48126 ** is already running a checkpoint, or maybe a recovery. But it might
48127 ** also be SQLITE_IOERR. */
48128 return rc;
48130 pWal->ckptLock = 1;
48132 /* If this is a blocking-checkpoint, then obtain the write-lock as well
48133 ** to prevent any writers from running while the checkpoint is underway.
48134 ** This has to be done before the call to walIndexReadHdr() below.
48136 ** If the writer lock cannot be obtained, then a passive checkpoint is
48137 ** run instead. Since the checkpointer is not holding the writer lock,
48138 ** there is no point in blocking waiting for any readers. Assuming no
48139 ** other error occurs, this function will return SQLITE_BUSY to the caller.
48141 if( eMode!=SQLITE_CHECKPOINT_PASSIVE ){
48142 rc = walBusyLock(pWal, xBusy, pBusyArg, WAL_WRITE_LOCK, 1);
48143 if( rc==SQLITE_OK ){
48144 pWal->writeLock = 1;
48145 }else if( rc==SQLITE_BUSY ){
48146 eMode2 = SQLITE_CHECKPOINT_PASSIVE;
48147 rc = SQLITE_OK;
48151 /* Read the wal-index header. */
48152 if( rc==SQLITE_OK ){
48153 rc = walIndexReadHdr(pWal, &isChanged);
48156 /* Copy data from the log to the database file. */
48157 if( rc==SQLITE_OK ){
48158 if( pWal->hdr.mxFrame && walPagesize(pWal)!=nBuf ){
48159 rc = SQLITE_CORRUPT_BKPT;
48160 }else{
48161 rc = walCheckpoint(pWal, eMode2, xBusy, pBusyArg, sync_flags, zBuf);
48164 /* If no error occurred, set the output variables. */
48165 if( rc==SQLITE_OK || rc==SQLITE_BUSY ){
48166 if( pnLog ) *pnLog = (int)pWal->hdr.mxFrame;
48167 if( pnCkpt ) *pnCkpt = (int)(walCkptInfo(pWal)->nBackfill);
48171 if( isChanged ){
48172 /* If a new wal-index header was loaded before the checkpoint was
48173 ** performed, then the pager-cache associated with pWal is now
48174 ** out of date. So zero the cached wal-index header to ensure that
48175 ** next time the pager opens a snapshot on this database it knows that
48176 ** the cache needs to be reset.
48178 memset(&pWal->hdr, 0, sizeof(WalIndexHdr));
48181 /* Release the locks. */
48182 sqlite3WalEndWriteTransaction(pWal);
48183 walUnlockExclusive(pWal, WAL_CKPT_LOCK, 1);
48184 pWal->ckptLock = 0;
48185 WALTRACE(("WAL%p: checkpoint %s\n", pWal, rc ? "failed" : "ok"));
48186 return (rc==SQLITE_OK && eMode!=eMode2 ? SQLITE_BUSY : rc);
48189 /* Return the value to pass to a sqlite3_wal_hook callback, the
48190 ** number of frames in the WAL at the point of the last commit since
48191 ** sqlite3WalCallback() was called. If no commits have occurred since
48192 ** the last call, then return 0.
48194 SQLITE_PRIVATE int sqlite3WalCallback(Wal *pWal){
48195 u32 ret = 0;
48196 if( pWal ){
48197 ret = pWal->iCallback;
48198 pWal->iCallback = 0;
48200 return (int)ret;
48204 ** This function is called to change the WAL subsystem into or out
48205 ** of locking_mode=EXCLUSIVE.
48207 ** If op is zero, then attempt to change from locking_mode=EXCLUSIVE
48208 ** into locking_mode=NORMAL. This means that we must acquire a lock
48209 ** on the pWal->readLock byte. If the WAL is already in locking_mode=NORMAL
48210 ** or if the acquisition of the lock fails, then return 0. If the
48211 ** transition out of exclusive-mode is successful, return 1. This
48212 ** operation must occur while the pager is still holding the exclusive
48213 ** lock on the main database file.
48215 ** If op is one, then change from locking_mode=NORMAL into
48216 ** locking_mode=EXCLUSIVE. This means that the pWal->readLock must
48217 ** be released. Return 1 if the transition is made and 0 if the
48218 ** WAL is already in exclusive-locking mode - meaning that this
48219 ** routine is a no-op. The pager must already hold the exclusive lock
48220 ** on the main database file before invoking this operation.
48222 ** If op is negative, then do a dry-run of the op==1 case but do
48223 ** not actually change anything. The pager uses this to see if it
48224 ** should acquire the database exclusive lock prior to invoking
48225 ** the op==1 case.
48227 SQLITE_PRIVATE int sqlite3WalExclusiveMode(Wal *pWal, int op){
48228 int rc;
48229 assert( pWal->writeLock==0 );
48230 assert( pWal->exclusiveMode!=WAL_HEAPMEMORY_MODE || op==-1 );
48232 /* pWal->readLock is usually set, but might be -1 if there was a
48233 ** prior error while attempting to acquire are read-lock. This cannot
48234 ** happen if the connection is actually in exclusive mode (as no xShmLock
48235 ** locks are taken in this case). Nor should the pager attempt to
48236 ** upgrade to exclusive-mode following such an error.
48238 assert( pWal->readLock>=0 || pWal->lockError );
48239 assert( pWal->readLock>=0 || (op<=0 && pWal->exclusiveMode==0) );
48241 if( op==0 ){
48242 if( pWal->exclusiveMode ){
48243 pWal->exclusiveMode = 0;
48244 if( walLockShared(pWal, WAL_READ_LOCK(pWal->readLock))!=SQLITE_OK ){
48245 pWal->exclusiveMode = 1;
48247 rc = pWal->exclusiveMode==0;
48248 }else{
48249 /* Already in locking_mode=NORMAL */
48250 rc = 0;
48252 }else if( op>0 ){
48253 assert( pWal->exclusiveMode==0 );
48254 assert( pWal->readLock>=0 );
48255 walUnlockShared(pWal, WAL_READ_LOCK(pWal->readLock));
48256 pWal->exclusiveMode = 1;
48257 rc = 1;
48258 }else{
48259 rc = pWal->exclusiveMode==0;
48261 return rc;
48265 ** Return true if the argument is non-NULL and the WAL module is using
48266 ** heap-memory for the wal-index. Otherwise, if the argument is NULL or the
48267 ** WAL module is using shared-memory, return false.
48269 SQLITE_PRIVATE int sqlite3WalHeapMemory(Wal *pWal){
48270 return (pWal && pWal->exclusiveMode==WAL_HEAPMEMORY_MODE );
48273 #endif /* #ifndef SQLITE_OMIT_WAL */
48275 /************** End of wal.c *************************************************/
48276 /************** Begin file btmutex.c *****************************************/
48278 ** 2007 August 27
48280 ** The author disclaims copyright to this source code. In place of
48281 ** a legal notice, here is a blessing:
48283 ** May you do good and not evil.
48284 ** May you find forgiveness for yourself and forgive others.
48285 ** May you share freely, never taking more than you give.
48287 *************************************************************************
48289 ** This file contains code used to implement mutexes on Btree objects.
48290 ** This code really belongs in btree.c. But btree.c is getting too
48291 ** big and we want to break it down some. This packaged seemed like
48292 ** a good breakout.
48294 /************** Include btreeInt.h in the middle of btmutex.c ****************/
48295 /************** Begin file btreeInt.h ****************************************/
48297 ** 2004 April 6
48299 ** The author disclaims copyright to this source code. In place of
48300 ** a legal notice, here is a blessing:
48302 ** May you do good and not evil.
48303 ** May you find forgiveness for yourself and forgive others.
48304 ** May you share freely, never taking more than you give.
48306 *************************************************************************
48307 ** This file implements a external (disk-based) database using BTrees.
48308 ** For a detailed discussion of BTrees, refer to
48310 ** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3:
48311 ** "Sorting And Searching", pages 473-480. Addison-Wesley
48312 ** Publishing Company, Reading, Massachusetts.
48314 ** The basic idea is that each page of the file contains N database
48315 ** entries and N+1 pointers to subpages.
48317 ** ----------------------------------------------------------------
48318 ** | Ptr(0) | Key(0) | Ptr(1) | Key(1) | ... | Key(N-1) | Ptr(N) |
48319 ** ----------------------------------------------------------------
48321 ** All of the keys on the page that Ptr(0) points to have values less
48322 ** than Key(0). All of the keys on page Ptr(1) and its subpages have
48323 ** values greater than Key(0) and less than Key(1). All of the keys
48324 ** on Ptr(N) and its subpages have values greater than Key(N-1). And
48325 ** so forth.
48327 ** Finding a particular key requires reading O(log(M)) pages from the
48328 ** disk where M is the number of entries in the tree.
48330 ** In this implementation, a single file can hold one or more separate
48331 ** BTrees. Each BTree is identified by the index of its root page. The
48332 ** key and data for any entry are combined to form the "payload". A
48333 ** fixed amount of payload can be carried directly on the database
48334 ** page. If the payload is larger than the preset amount then surplus
48335 ** bytes are stored on overflow pages. The payload for an entry
48336 ** and the preceding pointer are combined to form a "Cell". Each
48337 ** page has a small header which contains the Ptr(N) pointer and other
48338 ** information such as the size of key and data.
48340 ** FORMAT DETAILS
48342 ** The file is divided into pages. The first page is called page 1,
48343 ** the second is page 2, and so forth. A page number of zero indicates
48344 ** "no such page". The page size can be any power of 2 between 512 and 65536.
48345 ** Each page can be either a btree page, a freelist page, an overflow
48346 ** page, or a pointer-map page.
48348 ** The first page is always a btree page. The first 100 bytes of the first
48349 ** page contain a special header (the "file header") that describes the file.
48350 ** The format of the file header is as follows:
48352 ** OFFSET SIZE DESCRIPTION
48353 ** 0 16 Header string: "SQLite format 3\000"
48354 ** 16 2 Page size in bytes.
48355 ** 18 1 File format write version
48356 ** 19 1 File format read version
48357 ** 20 1 Bytes of unused space at the end of each page
48358 ** 21 1 Max embedded payload fraction
48359 ** 22 1 Min embedded payload fraction
48360 ** 23 1 Min leaf payload fraction
48361 ** 24 4 File change counter
48362 ** 28 4 Reserved for future use
48363 ** 32 4 First freelist page
48364 ** 36 4 Number of freelist pages in the file
48365 ** 40 60 15 4-byte meta values passed to higher layers
48367 ** 40 4 Schema cookie
48368 ** 44 4 File format of schema layer
48369 ** 48 4 Size of page cache
48370 ** 52 4 Largest root-page (auto/incr_vacuum)
48371 ** 56 4 1=UTF-8 2=UTF16le 3=UTF16be
48372 ** 60 4 User version
48373 ** 64 4 Incremental vacuum mode
48374 ** 68 4 unused
48375 ** 72 4 unused
48376 ** 76 4 unused
48378 ** All of the integer values are big-endian (most significant byte first).
48380 ** The file change counter is incremented when the database is changed
48381 ** This counter allows other processes to know when the file has changed
48382 ** and thus when they need to flush their cache.
48384 ** The max embedded payload fraction is the amount of the total usable
48385 ** space in a page that can be consumed by a single cell for standard
48386 ** B-tree (non-LEAFDATA) tables. A value of 255 means 100%. The default
48387 ** is to limit the maximum cell size so that at least 4 cells will fit
48388 ** on one page. Thus the default max embedded payload fraction is 64.
48390 ** If the payload for a cell is larger than the max payload, then extra
48391 ** payload is spilled to overflow pages. Once an overflow page is allocated,
48392 ** as many bytes as possible are moved into the overflow pages without letting
48393 ** the cell size drop below the min embedded payload fraction.
48395 ** The min leaf payload fraction is like the min embedded payload fraction
48396 ** except that it applies to leaf nodes in a LEAFDATA tree. The maximum
48397 ** payload fraction for a LEAFDATA tree is always 100% (or 255) and it
48398 ** not specified in the header.
48400 ** Each btree pages is divided into three sections: The header, the
48401 ** cell pointer array, and the cell content area. Page 1 also has a 100-byte
48402 ** file header that occurs before the page header.
48404 ** |----------------|
48405 ** | file header | 100 bytes. Page 1 only.
48406 ** |----------------|
48407 ** | page header | 8 bytes for leaves. 12 bytes for interior nodes
48408 ** |----------------|
48409 ** | cell pointer | | 2 bytes per cell. Sorted order.
48410 ** | array | | Grows downward
48411 ** | | v
48412 ** |----------------|
48413 ** | unallocated |
48414 ** | space |
48415 ** |----------------| ^ Grows upwards
48416 ** | cell content | | Arbitrary order interspersed with freeblocks.
48417 ** | area | | and free space fragments.
48418 ** |----------------|
48420 ** The page headers looks like this:
48422 ** OFFSET SIZE DESCRIPTION
48423 ** 0 1 Flags. 1: intkey, 2: zerodata, 4: leafdata, 8: leaf
48424 ** 1 2 byte offset to the first freeblock
48425 ** 3 2 number of cells on this page
48426 ** 5 2 first byte of the cell content area
48427 ** 7 1 number of fragmented free bytes
48428 ** 8 4 Right child (the Ptr(N) value). Omitted on leaves.
48430 ** The flags define the format of this btree page. The leaf flag means that
48431 ** this page has no children. The zerodata flag means that this page carries
48432 ** only keys and no data. The intkey flag means that the key is a integer
48433 ** which is stored in the key size entry of the cell header rather than in
48434 ** the payload area.
48436 ** The cell pointer array begins on the first byte after the page header.
48437 ** The cell pointer array contains zero or more 2-byte numbers which are
48438 ** offsets from the beginning of the page to the cell content in the cell
48439 ** content area. The cell pointers occur in sorted order. The system strives
48440 ** to keep free space after the last cell pointer so that new cells can
48441 ** be easily added without having to defragment the page.
48443 ** Cell content is stored at the very end of the page and grows toward the
48444 ** beginning of the page.
48446 ** Unused space within the cell content area is collected into a linked list of
48447 ** freeblocks. Each freeblock is at least 4 bytes in size. The byte offset
48448 ** to the first freeblock is given in the header. Freeblocks occur in
48449 ** increasing order. Because a freeblock must be at least 4 bytes in size,
48450 ** any group of 3 or fewer unused bytes in the cell content area cannot
48451 ** exist on the freeblock chain. A group of 3 or fewer free bytes is called
48452 ** a fragment. The total number of bytes in all fragments is recorded.
48453 ** in the page header at offset 7.
48455 ** SIZE DESCRIPTION
48456 ** 2 Byte offset of the next freeblock
48457 ** 2 Bytes in this freeblock
48459 ** Cells are of variable length. Cells are stored in the cell content area at
48460 ** the end of the page. Pointers to the cells are in the cell pointer array
48461 ** that immediately follows the page header. Cells is not necessarily
48462 ** contiguous or in order, but cell pointers are contiguous and in order.
48464 ** Cell content makes use of variable length integers. A variable
48465 ** length integer is 1 to 9 bytes where the lower 7 bits of each
48466 ** byte are used. The integer consists of all bytes that have bit 8 set and
48467 ** the first byte with bit 8 clear. The most significant byte of the integer
48468 ** appears first. A variable-length integer may not be more than 9 bytes long.
48469 ** As a special case, all 8 bytes of the 9th byte are used as data. This
48470 ** allows a 64-bit integer to be encoded in 9 bytes.
48472 ** 0x00 becomes 0x00000000
48473 ** 0x7f becomes 0x0000007f
48474 ** 0x81 0x00 becomes 0x00000080
48475 ** 0x82 0x00 becomes 0x00000100
48476 ** 0x80 0x7f becomes 0x0000007f
48477 ** 0x8a 0x91 0xd1 0xac 0x78 becomes 0x12345678
48478 ** 0x81 0x81 0x81 0x81 0x01 becomes 0x10204081
48480 ** Variable length integers are used for rowids and to hold the number of
48481 ** bytes of key and data in a btree cell.
48483 ** The content of a cell looks like this:
48485 ** SIZE DESCRIPTION
48486 ** 4 Page number of the left child. Omitted if leaf flag is set.
48487 ** var Number of bytes of data. Omitted if the zerodata flag is set.
48488 ** var Number of bytes of key. Or the key itself if intkey flag is set.
48489 ** * Payload
48490 ** 4 First page of the overflow chain. Omitted if no overflow
48492 ** Overflow pages form a linked list. Each page except the last is completely
48493 ** filled with data (pagesize - 4 bytes). The last page can have as little
48494 ** as 1 byte of data.
48496 ** SIZE DESCRIPTION
48497 ** 4 Page number of next overflow page
48498 ** * Data
48500 ** Freelist pages come in two subtypes: trunk pages and leaf pages. The
48501 ** file header points to the first in a linked list of trunk page. Each trunk
48502 ** page points to multiple leaf pages. The content of a leaf page is
48503 ** unspecified. A trunk page looks like this:
48505 ** SIZE DESCRIPTION
48506 ** 4 Page number of next trunk page
48507 ** 4 Number of leaf pointers on this page
48508 ** * zero or more pages numbers of leaves
48512 /* The following value is the maximum cell size assuming a maximum page
48513 ** size give above.
48515 #define MX_CELL_SIZE(pBt) ((int)(pBt->pageSize-8))
48517 /* The maximum number of cells on a single page of the database. This
48518 ** assumes a minimum cell size of 6 bytes (4 bytes for the cell itself
48519 ** plus 2 bytes for the index to the cell in the page header). Such
48520 ** small cells will be rare, but they are possible.
48522 #define MX_CELL(pBt) ((pBt->pageSize-8)/6)
48524 /* Forward declarations */
48525 typedef struct MemPage MemPage;
48526 typedef struct BtLock BtLock;
48529 ** This is a magic string that appears at the beginning of every
48530 ** SQLite database in order to identify the file as a real database.
48532 ** You can change this value at compile-time by specifying a
48533 ** -DSQLITE_FILE_HEADER="..." on the compiler command-line. The
48534 ** header must be exactly 16 bytes including the zero-terminator so
48535 ** the string itself should be 15 characters long. If you change
48536 ** the header, then your custom library will not be able to read
48537 ** databases generated by the standard tools and the standard tools
48538 ** will not be able to read databases created by your custom library.
48540 #ifndef SQLITE_FILE_HEADER /* 123456789 123456 */
48541 # define SQLITE_FILE_HEADER "SQLite format 3"
48542 #endif
48545 ** Page type flags. An ORed combination of these flags appear as the
48546 ** first byte of on-disk image of every BTree page.
48548 #define PTF_INTKEY 0x01
48549 #define PTF_ZERODATA 0x02
48550 #define PTF_LEAFDATA 0x04
48551 #define PTF_LEAF 0x08
48554 ** As each page of the file is loaded into memory, an instance of the following
48555 ** structure is appended and initialized to zero. This structure stores
48556 ** information about the page that is decoded from the raw file page.
48558 ** The pParent field points back to the parent page. This allows us to
48559 ** walk up the BTree from any leaf to the root. Care must be taken to
48560 ** unref() the parent page pointer when this page is no longer referenced.
48561 ** The pageDestructor() routine handles that chore.
48563 ** Access to all fields of this structure is controlled by the mutex
48564 ** stored in MemPage.pBt->mutex.
48566 struct MemPage {
48567 u8 isInit; /* True if previously initialized. MUST BE FIRST! */
48568 u8 nOverflow; /* Number of overflow cell bodies in aCell[] */
48569 u8 intKey; /* True if intkey flag is set */
48570 u8 leaf; /* True if leaf flag is set */
48571 u8 hasData; /* True if this page stores data */
48572 u8 hdrOffset; /* 100 for page 1. 0 otherwise */
48573 u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */
48574 u8 max1bytePayload; /* min(maxLocal,127) */
48575 u16 maxLocal; /* Copy of BtShared.maxLocal or BtShared.maxLeaf */
48576 u16 minLocal; /* Copy of BtShared.minLocal or BtShared.minLeaf */
48577 u16 cellOffset; /* Index in aData of first cell pointer */
48578 u16 nFree; /* Number of free bytes on the page */
48579 u16 nCell; /* Number of cells on this page, local and ovfl */
48580 u16 maskPage; /* Mask for page offset */
48581 struct _OvflCell { /* Cells that will not fit on aData[] */
48582 u8 *pCell; /* Pointers to the body of the overflow cell */
48583 u16 idx; /* Insert this cell before idx-th non-overflow cell */
48584 } aOvfl[5];
48585 BtShared *pBt; /* Pointer to BtShared that this page is part of */
48586 u8 *aData; /* Pointer to disk image of the page data */
48587 u8 *aDataEnd; /* One byte past the end of usable data */
48588 u8 *aCellIdx; /* The cell index area */
48589 DbPage *pDbPage; /* Pager page handle */
48590 Pgno pgno; /* Page number for this page */
48594 ** The in-memory image of a disk page has the auxiliary information appended
48595 ** to the end. EXTRA_SIZE is the number of bytes of space needed to hold
48596 ** that extra information.
48598 #define EXTRA_SIZE sizeof(MemPage)
48601 ** A linked list of the following structures is stored at BtShared.pLock.
48602 ** Locks are added (or upgraded from READ_LOCK to WRITE_LOCK) when a cursor
48603 ** is opened on the table with root page BtShared.iTable. Locks are removed
48604 ** from this list when a transaction is committed or rolled back, or when
48605 ** a btree handle is closed.
48607 struct BtLock {
48608 Btree *pBtree; /* Btree handle holding this lock */
48609 Pgno iTable; /* Root page of table */
48610 u8 eLock; /* READ_LOCK or WRITE_LOCK */
48611 BtLock *pNext; /* Next in BtShared.pLock list */
48614 /* Candidate values for BtLock.eLock */
48615 #define READ_LOCK 1
48616 #define WRITE_LOCK 2
48618 /* A Btree handle
48620 ** A database connection contains a pointer to an instance of
48621 ** this object for every database file that it has open. This structure
48622 ** is opaque to the database connection. The database connection cannot
48623 ** see the internals of this structure and only deals with pointers to
48624 ** this structure.
48626 ** For some database files, the same underlying database cache might be
48627 ** shared between multiple connections. In that case, each connection
48628 ** has it own instance of this object. But each instance of this object
48629 ** points to the same BtShared object. The database cache and the
48630 ** schema associated with the database file are all contained within
48631 ** the BtShared object.
48633 ** All fields in this structure are accessed under sqlite3.mutex.
48634 ** The pBt pointer itself may not be changed while there exists cursors
48635 ** in the referenced BtShared that point back to this Btree since those
48636 ** cursors have to go through this Btree to find their BtShared and
48637 ** they often do so without holding sqlite3.mutex.
48639 struct Btree {
48640 sqlite3 *db; /* The database connection holding this btree */
48641 BtShared *pBt; /* Sharable content of this btree */
48642 u8 inTrans; /* TRANS_NONE, TRANS_READ or TRANS_WRITE */
48643 u8 sharable; /* True if we can share pBt with another db */
48644 u8 locked; /* True if db currently has pBt locked */
48645 int wantToLock; /* Number of nested calls to sqlite3BtreeEnter() */
48646 int nBackup; /* Number of backup operations reading this btree */
48647 Btree *pNext; /* List of other sharable Btrees from the same db */
48648 Btree *pPrev; /* Back pointer of the same list */
48649 #ifndef SQLITE_OMIT_SHARED_CACHE
48650 BtLock lock; /* Object used to lock page 1 */
48651 #endif
48655 ** Btree.inTrans may take one of the following values.
48657 ** If the shared-data extension is enabled, there may be multiple users
48658 ** of the Btree structure. At most one of these may open a write transaction,
48659 ** but any number may have active read transactions.
48661 #define TRANS_NONE 0
48662 #define TRANS_READ 1
48663 #define TRANS_WRITE 2
48666 ** An instance of this object represents a single database file.
48668 ** A single database file can be in use at the same time by two
48669 ** or more database connections. When two or more connections are
48670 ** sharing the same database file, each connection has it own
48671 ** private Btree object for the file and each of those Btrees points
48672 ** to this one BtShared object. BtShared.nRef is the number of
48673 ** connections currently sharing this database file.
48675 ** Fields in this structure are accessed under the BtShared.mutex
48676 ** mutex, except for nRef and pNext which are accessed under the
48677 ** global SQLITE_MUTEX_STATIC_MASTER mutex. The pPager field
48678 ** may not be modified once it is initially set as long as nRef>0.
48679 ** The pSchema field may be set once under BtShared.mutex and
48680 ** thereafter is unchanged as long as nRef>0.
48682 ** isPending:
48684 ** If a BtShared client fails to obtain a write-lock on a database
48685 ** table (because there exists one or more read-locks on the table),
48686 ** the shared-cache enters 'pending-lock' state and isPending is
48687 ** set to true.
48689 ** The shared-cache leaves the 'pending lock' state when either of
48690 ** the following occur:
48692 ** 1) The current writer (BtShared.pWriter) concludes its transaction, OR
48693 ** 2) The number of locks held by other connections drops to zero.
48695 ** while in the 'pending-lock' state, no connection may start a new
48696 ** transaction.
48698 ** This feature is included to help prevent writer-starvation.
48700 struct BtShared {
48701 Pager *pPager; /* The page cache */
48702 sqlite3 *db; /* Database connection currently using this Btree */
48703 BtCursor *pCursor; /* A list of all open cursors */
48704 MemPage *pPage1; /* First page of the database */
48705 u8 openFlags; /* Flags to sqlite3BtreeOpen() */
48706 #ifndef SQLITE_OMIT_AUTOVACUUM
48707 u8 autoVacuum; /* True if auto-vacuum is enabled */
48708 u8 incrVacuum; /* True if incr-vacuum is enabled */
48709 #endif
48710 u8 inTransaction; /* Transaction state */
48711 u8 max1bytePayload; /* Maximum first byte of cell for a 1-byte payload */
48712 u16 btsFlags; /* Boolean parameters. See BTS_* macros below */
48713 u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */
48714 u16 minLocal; /* Minimum local payload in non-LEAFDATA tables */
48715 u16 maxLeaf; /* Maximum local payload in a LEAFDATA table */
48716 u16 minLeaf; /* Minimum local payload in a LEAFDATA table */
48717 u32 pageSize; /* Total number of bytes on a page */
48718 u32 usableSize; /* Number of usable bytes on each page */
48719 int nTransaction; /* Number of open transactions (read + write) */
48720 u32 nPage; /* Number of pages in the database */
48721 void *pSchema; /* Pointer to space allocated by sqlite3BtreeSchema() */
48722 void (*xFreeSchema)(void*); /* Destructor for BtShared.pSchema */
48723 sqlite3_mutex *mutex; /* Non-recursive mutex required to access this object */
48724 Bitvec *pHasContent; /* Set of pages moved to free-list this transaction */
48725 #ifndef SQLITE_OMIT_SHARED_CACHE
48726 int nRef; /* Number of references to this structure */
48727 BtShared *pNext; /* Next on a list of sharable BtShared structs */
48728 BtLock *pLock; /* List of locks held on this shared-btree struct */
48729 Btree *pWriter; /* Btree with currently open write transaction */
48730 #endif
48731 u8 *pTmpSpace; /* BtShared.pageSize bytes of space for tmp use */
48735 ** Allowed values for BtShared.btsFlags
48737 #define BTS_READ_ONLY 0x0001 /* Underlying file is readonly */
48738 #define BTS_PAGESIZE_FIXED 0x0002 /* Page size can no longer be changed */
48739 #define BTS_SECURE_DELETE 0x0004 /* PRAGMA secure_delete is enabled */
48740 #define BTS_INITIALLY_EMPTY 0x0008 /* Database was empty at trans start */
48741 #define BTS_NO_WAL 0x0010 /* Do not open write-ahead-log files */
48742 #define BTS_EXCLUSIVE 0x0020 /* pWriter has an exclusive lock */
48743 #define BTS_PENDING 0x0040 /* Waiting for read-locks to clear */
48746 ** An instance of the following structure is used to hold information
48747 ** about a cell. The parseCellPtr() function fills in this structure
48748 ** based on information extract from the raw disk page.
48750 typedef struct CellInfo CellInfo;
48751 struct CellInfo {
48752 i64 nKey; /* The key for INTKEY tables, or number of bytes in key */
48753 u8 *pCell; /* Pointer to the start of cell content */
48754 u32 nData; /* Number of bytes of data */
48755 u32 nPayload; /* Total amount of payload */
48756 u16 nHeader; /* Size of the cell content header in bytes */
48757 u16 nLocal; /* Amount of payload held locally */
48758 u16 iOverflow; /* Offset to overflow page number. Zero if no overflow */
48759 u16 nSize; /* Size of the cell content on the main b-tree page */
48763 ** Maximum depth of an SQLite B-Tree structure. Any B-Tree deeper than
48764 ** this will be declared corrupt. This value is calculated based on a
48765 ** maximum database size of 2^31 pages a minimum fanout of 2 for a
48766 ** root-node and 3 for all other internal nodes.
48768 ** If a tree that appears to be taller than this is encountered, it is
48769 ** assumed that the database is corrupt.
48771 #define BTCURSOR_MAX_DEPTH 20
48774 ** A cursor is a pointer to a particular entry within a particular
48775 ** b-tree within a database file.
48777 ** The entry is identified by its MemPage and the index in
48778 ** MemPage.aCell[] of the entry.
48780 ** A single database file can be shared by two more database connections,
48781 ** but cursors cannot be shared. Each cursor is associated with a
48782 ** particular database connection identified BtCursor.pBtree.db.
48784 ** Fields in this structure are accessed under the BtShared.mutex
48785 ** found at self->pBt->mutex.
48787 struct BtCursor {
48788 Btree *pBtree; /* The Btree to which this cursor belongs */
48789 BtShared *pBt; /* The BtShared this cursor points to */
48790 BtCursor *pNext, *pPrev; /* Forms a linked list of all cursors */
48791 struct KeyInfo *pKeyInfo; /* Argument passed to comparison function */
48792 Pgno pgnoRoot; /* The root page of this tree */
48793 sqlite3_int64 cachedRowid; /* Next rowid cache. 0 means not valid */
48794 CellInfo info; /* A parse of the cell we are pointing at */
48795 i64 nKey; /* Size of pKey, or last integer key */
48796 void *pKey; /* Saved key that was cursor's last known position */
48797 int skipNext; /* Prev() is noop if negative. Next() is noop if positive */
48798 u8 wrFlag; /* True if writable */
48799 u8 atLast; /* Cursor pointing to the last entry */
48800 u8 validNKey; /* True if info.nKey is valid */
48801 u8 eState; /* One of the CURSOR_XXX constants (see below) */
48802 #ifndef SQLITE_OMIT_INCRBLOB
48803 Pgno *aOverflow; /* Cache of overflow page locations */
48804 u8 isIncrblobHandle; /* True if this cursor is an incr. io handle */
48805 #endif
48806 i16 iPage; /* Index of current page in apPage */
48807 u16 aiIdx[BTCURSOR_MAX_DEPTH]; /* Current index in apPage[i] */
48808 MemPage *apPage[BTCURSOR_MAX_DEPTH]; /* Pages from root to current page */
48812 ** Potential values for BtCursor.eState.
48814 ** CURSOR_VALID:
48815 ** Cursor points to a valid entry. getPayload() etc. may be called.
48817 ** CURSOR_INVALID:
48818 ** Cursor does not point to a valid entry. This can happen (for example)
48819 ** because the table is empty or because BtreeCursorFirst() has not been
48820 ** called.
48822 ** CURSOR_REQUIRESEEK:
48823 ** The table that this cursor was opened on still exists, but has been
48824 ** modified since the cursor was last used. The cursor position is saved
48825 ** in variables BtCursor.pKey and BtCursor.nKey. When a cursor is in
48826 ** this state, restoreCursorPosition() can be called to attempt to
48827 ** seek the cursor to the saved position.
48829 ** CURSOR_FAULT:
48830 ** A unrecoverable error (an I/O error or a malloc failure) has occurred
48831 ** on a different connection that shares the BtShared cache with this
48832 ** cursor. The error has left the cache in an inconsistent state.
48833 ** Do nothing else with this cursor. Any attempt to use the cursor
48834 ** should return the error code stored in BtCursor.skip
48836 #define CURSOR_INVALID 0
48837 #define CURSOR_VALID 1
48838 #define CURSOR_REQUIRESEEK 2
48839 #define CURSOR_FAULT 3
48842 ** The database page the PENDING_BYTE occupies. This page is never used.
48844 # define PENDING_BYTE_PAGE(pBt) PAGER_MJ_PGNO(pBt)
48847 ** These macros define the location of the pointer-map entry for a
48848 ** database page. The first argument to each is the number of usable
48849 ** bytes on each page of the database (often 1024). The second is the
48850 ** page number to look up in the pointer map.
48852 ** PTRMAP_PAGENO returns the database page number of the pointer-map
48853 ** page that stores the required pointer. PTRMAP_PTROFFSET returns
48854 ** the offset of the requested map entry.
48856 ** If the pgno argument passed to PTRMAP_PAGENO is a pointer-map page,
48857 ** then pgno is returned. So (pgno==PTRMAP_PAGENO(pgsz, pgno)) can be
48858 ** used to test if pgno is a pointer-map page. PTRMAP_ISPAGE implements
48859 ** this test.
48861 #define PTRMAP_PAGENO(pBt, pgno) ptrmapPageno(pBt, pgno)
48862 #define PTRMAP_PTROFFSET(pgptrmap, pgno) (5*(pgno-pgptrmap-1))
48863 #define PTRMAP_ISPAGE(pBt, pgno) (PTRMAP_PAGENO((pBt),(pgno))==(pgno))
48866 ** The pointer map is a lookup table that identifies the parent page for
48867 ** each child page in the database file. The parent page is the page that
48868 ** contains a pointer to the child. Every page in the database contains
48869 ** 0 or 1 parent pages. (In this context 'database page' refers
48870 ** to any page that is not part of the pointer map itself.) Each pointer map
48871 ** entry consists of a single byte 'type' and a 4 byte parent page number.
48872 ** The PTRMAP_XXX identifiers below are the valid types.
48874 ** The purpose of the pointer map is to facility moving pages from one
48875 ** position in the file to another as part of autovacuum. When a page
48876 ** is moved, the pointer in its parent must be updated to point to the
48877 ** new location. The pointer map is used to locate the parent page quickly.
48879 ** PTRMAP_ROOTPAGE: The database page is a root-page. The page-number is not
48880 ** used in this case.
48882 ** PTRMAP_FREEPAGE: The database page is an unused (free) page. The page-number
48883 ** is not used in this case.
48885 ** PTRMAP_OVERFLOW1: The database page is the first page in a list of
48886 ** overflow pages. The page number identifies the page that
48887 ** contains the cell with a pointer to this overflow page.
48889 ** PTRMAP_OVERFLOW2: The database page is the second or later page in a list of
48890 ** overflow pages. The page-number identifies the previous
48891 ** page in the overflow page list.
48893 ** PTRMAP_BTREE: The database page is a non-root btree page. The page number
48894 ** identifies the parent page in the btree.
48896 #define PTRMAP_ROOTPAGE 1
48897 #define PTRMAP_FREEPAGE 2
48898 #define PTRMAP_OVERFLOW1 3
48899 #define PTRMAP_OVERFLOW2 4
48900 #define PTRMAP_BTREE 5
48902 /* A bunch of assert() statements to check the transaction state variables
48903 ** of handle p (type Btree*) are internally consistent.
48905 #define btreeIntegrity(p) \
48906 assert( p->pBt->inTransaction!=TRANS_NONE || p->pBt->nTransaction==0 ); \
48907 assert( p->pBt->inTransaction>=p->inTrans );
48911 ** The ISAUTOVACUUM macro is used within balance_nonroot() to determine
48912 ** if the database supports auto-vacuum or not. Because it is used
48913 ** within an expression that is an argument to another macro
48914 ** (sqliteMallocRaw), it is not possible to use conditional compilation.
48915 ** So, this macro is defined instead.
48917 #ifndef SQLITE_OMIT_AUTOVACUUM
48918 #define ISAUTOVACUUM (pBt->autoVacuum)
48919 #else
48920 #define ISAUTOVACUUM 0
48921 #endif
48925 ** This structure is passed around through all the sanity checking routines
48926 ** in order to keep track of some global state information.
48928 typedef struct IntegrityCk IntegrityCk;
48929 struct IntegrityCk {
48930 BtShared *pBt; /* The tree being checked out */
48931 Pager *pPager; /* The associated pager. Also accessible by pBt->pPager */
48932 Pgno nPage; /* Number of pages in the database */
48933 int *anRef; /* Number of times each page is referenced */
48934 int mxErr; /* Stop accumulating errors when this reaches zero */
48935 int nErr; /* Number of messages written to zErrMsg so far */
48936 int mallocFailed; /* A memory allocation error has occurred */
48937 StrAccum errMsg; /* Accumulate the error message text here */
48941 ** Routines to read or write a two- and four-byte big-endian integer values.
48943 #define get2byte(x) ((x)[0]<<8 | (x)[1])
48944 #define put2byte(p,v) ((p)[0] = (u8)((v)>>8), (p)[1] = (u8)(v))
48945 #define get4byte sqlite3Get4byte
48946 #define put4byte sqlite3Put4byte
48948 /************** End of btreeInt.h ********************************************/
48949 /************** Continuing where we left off in btmutex.c ********************/
48950 #ifndef SQLITE_OMIT_SHARED_CACHE
48951 #if SQLITE_THREADSAFE
48954 ** Obtain the BtShared mutex associated with B-Tree handle p. Also,
48955 ** set BtShared.db to the database handle associated with p and the
48956 ** p->locked boolean to true.
48958 static void lockBtreeMutex(Btree *p){
48959 assert( p->locked==0 );
48960 assert( sqlite3_mutex_notheld(p->pBt->mutex) );
48961 assert( sqlite3_mutex_held(p->db->mutex) );
48963 sqlite3_mutex_enter(p->pBt->mutex);
48964 p->pBt->db = p->db;
48965 p->locked = 1;
48969 ** Release the BtShared mutex associated with B-Tree handle p and
48970 ** clear the p->locked boolean.
48972 static void unlockBtreeMutex(Btree *p){
48973 BtShared *pBt = p->pBt;
48974 assert( p->locked==1 );
48975 assert( sqlite3_mutex_held(pBt->mutex) );
48976 assert( sqlite3_mutex_held(p->db->mutex) );
48977 assert( p->db==pBt->db );
48979 sqlite3_mutex_leave(pBt->mutex);
48980 p->locked = 0;
48984 ** Enter a mutex on the given BTree object.
48986 ** If the object is not sharable, then no mutex is ever required
48987 ** and this routine is a no-op. The underlying mutex is non-recursive.
48988 ** But we keep a reference count in Btree.wantToLock so the behavior
48989 ** of this interface is recursive.
48991 ** To avoid deadlocks, multiple Btrees are locked in the same order
48992 ** by all database connections. The p->pNext is a list of other
48993 ** Btrees belonging to the same database connection as the p Btree
48994 ** which need to be locked after p. If we cannot get a lock on
48995 ** p, then first unlock all of the others on p->pNext, then wait
48996 ** for the lock to become available on p, then relock all of the
48997 ** subsequent Btrees that desire a lock.
48999 SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
49000 Btree *pLater;
49002 /* Some basic sanity checking on the Btree. The list of Btrees
49003 ** connected by pNext and pPrev should be in sorted order by
49004 ** Btree.pBt value. All elements of the list should belong to
49005 ** the same connection. Only shared Btrees are on the list. */
49006 assert( p->pNext==0 || p->pNext->pBt>p->pBt );
49007 assert( p->pPrev==0 || p->pPrev->pBt<p->pBt );
49008 assert( p->pNext==0 || p->pNext->db==p->db );
49009 assert( p->pPrev==0 || p->pPrev->db==p->db );
49010 assert( p->sharable || (p->pNext==0 && p->pPrev==0) );
49012 /* Check for locking consistency */
49013 assert( !p->locked || p->wantToLock>0 );
49014 assert( p->sharable || p->wantToLock==0 );
49016 /* We should already hold a lock on the database connection */
49017 assert( sqlite3_mutex_held(p->db->mutex) );
49019 /* Unless the database is sharable and unlocked, then BtShared.db
49020 ** should already be set correctly. */
49021 assert( (p->locked==0 && p->sharable) || p->pBt->db==p->db );
49023 if( !p->sharable ) return;
49024 p->wantToLock++;
49025 if( p->locked ) return;
49027 /* In most cases, we should be able to acquire the lock we
49028 ** want without having to go throught the ascending lock
49029 ** procedure that follows. Just be sure not to block.
49031 if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){
49032 p->pBt->db = p->db;
49033 p->locked = 1;
49034 return;
49037 /* To avoid deadlock, first release all locks with a larger
49038 ** BtShared address. Then acquire our lock. Then reacquire
49039 ** the other BtShared locks that we used to hold in ascending
49040 ** order.
49042 for(pLater=p->pNext; pLater; pLater=pLater->pNext){
49043 assert( pLater->sharable );
49044 assert( pLater->pNext==0 || pLater->pNext->pBt>pLater->pBt );
49045 assert( !pLater->locked || pLater->wantToLock>0 );
49046 if( pLater->locked ){
49047 unlockBtreeMutex(pLater);
49050 lockBtreeMutex(p);
49051 for(pLater=p->pNext; pLater; pLater=pLater->pNext){
49052 if( pLater->wantToLock ){
49053 lockBtreeMutex(pLater);
49059 ** Exit the recursive mutex on a Btree.
49061 SQLITE_PRIVATE void sqlite3BtreeLeave(Btree *p){
49062 if( p->sharable ){
49063 assert( p->wantToLock>0 );
49064 p->wantToLock--;
49065 if( p->wantToLock==0 ){
49066 unlockBtreeMutex(p);
49071 #ifndef NDEBUG
49073 ** Return true if the BtShared mutex is held on the btree, or if the
49074 ** B-Tree is not marked as sharable.
49076 ** This routine is used only from within assert() statements.
49078 SQLITE_PRIVATE int sqlite3BtreeHoldsMutex(Btree *p){
49079 assert( p->sharable==0 || p->locked==0 || p->wantToLock>0 );
49080 assert( p->sharable==0 || p->locked==0 || p->db==p->pBt->db );
49081 assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->pBt->mutex) );
49082 assert( p->sharable==0 || p->locked==0 || sqlite3_mutex_held(p->db->mutex) );
49084 return (p->sharable==0 || p->locked);
49086 #endif
49089 #ifndef SQLITE_OMIT_INCRBLOB
49091 ** Enter and leave a mutex on a Btree given a cursor owned by that
49092 ** Btree. These entry points are used by incremental I/O and can be
49093 ** omitted if that module is not used.
49095 SQLITE_PRIVATE void sqlite3BtreeEnterCursor(BtCursor *pCur){
49096 sqlite3BtreeEnter(pCur->pBtree);
49098 SQLITE_PRIVATE void sqlite3BtreeLeaveCursor(BtCursor *pCur){
49099 sqlite3BtreeLeave(pCur->pBtree);
49101 #endif /* SQLITE_OMIT_INCRBLOB */
49105 ** Enter the mutex on every Btree associated with a database
49106 ** connection. This is needed (for example) prior to parsing
49107 ** a statement since we will be comparing table and column names
49108 ** against all schemas and we do not want those schemas being
49109 ** reset out from under us.
49111 ** There is a corresponding leave-all procedures.
49113 ** Enter the mutexes in accending order by BtShared pointer address
49114 ** to avoid the possibility of deadlock when two threads with
49115 ** two or more btrees in common both try to lock all their btrees
49116 ** at the same instant.
49118 SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
49119 int i;
49120 Btree *p;
49121 assert( sqlite3_mutex_held(db->mutex) );
49122 for(i=0; i<db->nDb; i++){
49123 p = db->aDb[i].pBt;
49124 if( p ) sqlite3BtreeEnter(p);
49127 SQLITE_PRIVATE void sqlite3BtreeLeaveAll(sqlite3 *db){
49128 int i;
49129 Btree *p;
49130 assert( sqlite3_mutex_held(db->mutex) );
49131 for(i=0; i<db->nDb; i++){
49132 p = db->aDb[i].pBt;
49133 if( p ) sqlite3BtreeLeave(p);
49138 ** Return true if a particular Btree requires a lock. Return FALSE if
49139 ** no lock is ever required since it is not sharable.
49141 SQLITE_PRIVATE int sqlite3BtreeSharable(Btree *p){
49142 return p->sharable;
49145 #ifndef NDEBUG
49147 ** Return true if the current thread holds the database connection
49148 ** mutex and all required BtShared mutexes.
49150 ** This routine is used inside assert() statements only.
49152 SQLITE_PRIVATE int sqlite3BtreeHoldsAllMutexes(sqlite3 *db){
49153 int i;
49154 if( !sqlite3_mutex_held(db->mutex) ){
49155 return 0;
49157 for(i=0; i<db->nDb; i++){
49158 Btree *p;
49159 p = db->aDb[i].pBt;
49160 if( p && p->sharable &&
49161 (p->wantToLock==0 || !sqlite3_mutex_held(p->pBt->mutex)) ){
49162 return 0;
49165 return 1;
49167 #endif /* NDEBUG */
49169 #ifndef NDEBUG
49171 ** Return true if the correct mutexes are held for accessing the
49172 ** db->aDb[iDb].pSchema structure. The mutexes required for schema
49173 ** access are:
49175 ** (1) The mutex on db
49176 ** (2) if iDb!=1, then the mutex on db->aDb[iDb].pBt.
49178 ** If pSchema is not NULL, then iDb is computed from pSchema and
49179 ** db using sqlite3SchemaToIndex().
49181 SQLITE_PRIVATE int sqlite3SchemaMutexHeld(sqlite3 *db, int iDb, Schema *pSchema){
49182 Btree *p;
49183 assert( db!=0 );
49184 if( pSchema ) iDb = sqlite3SchemaToIndex(db, pSchema);
49185 assert( iDb>=0 && iDb<db->nDb );
49186 if( !sqlite3_mutex_held(db->mutex) ) return 0;
49187 if( iDb==1 ) return 1;
49188 p = db->aDb[iDb].pBt;
49189 assert( p!=0 );
49190 return p->sharable==0 || p->locked==1;
49192 #endif /* NDEBUG */
49194 #else /* SQLITE_THREADSAFE>0 above. SQLITE_THREADSAFE==0 below */
49196 ** The following are special cases for mutex enter routines for use
49197 ** in single threaded applications that use shared cache. Except for
49198 ** these two routines, all mutex operations are no-ops in that case and
49199 ** are null #defines in btree.h.
49201 ** If shared cache is disabled, then all btree mutex routines, including
49202 ** the ones below, are no-ops and are null #defines in btree.h.
49205 SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
49206 p->pBt->db = p->db;
49208 SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
49209 int i;
49210 for(i=0; i<db->nDb; i++){
49211 Btree *p = db->aDb[i].pBt;
49212 if( p ){
49213 p->pBt->db = p->db;
49217 #endif /* if SQLITE_THREADSAFE */
49218 #endif /* ifndef SQLITE_OMIT_SHARED_CACHE */
49220 /************** End of btmutex.c *********************************************/
49221 /************** Begin file btree.c *******************************************/
49223 ** 2004 April 6
49225 ** The author disclaims copyright to this source code. In place of
49226 ** a legal notice, here is a blessing:
49228 ** May you do good and not evil.
49229 ** May you find forgiveness for yourself and forgive others.
49230 ** May you share freely, never taking more than you give.
49232 *************************************************************************
49233 ** This file implements a external (disk-based) database using BTrees.
49234 ** See the header comment on "btreeInt.h" for additional information.
49235 ** Including a description of file format and an overview of operation.
49239 ** The header string that appears at the beginning of every
49240 ** SQLite database.
49242 static const char zMagicHeader[] = SQLITE_FILE_HEADER;
49245 ** Set this global variable to 1 to enable tracing using the TRACE
49246 ** macro.
49248 #if 0
49249 int sqlite3BtreeTrace=1; /* True to enable tracing */
49250 # define TRACE(X) if(sqlite3BtreeTrace){printf X;fflush(stdout);}
49251 #else
49252 # define TRACE(X)
49253 #endif
49256 ** Extract a 2-byte big-endian integer from an array of unsigned bytes.
49257 ** But if the value is zero, make it 65536.
49259 ** This routine is used to extract the "offset to cell content area" value
49260 ** from the header of a btree page. If the page size is 65536 and the page
49261 ** is empty, the offset should be 65536, but the 2-byte value stores zero.
49262 ** This routine makes the necessary adjustment to 65536.
49264 #define get2byteNotZero(X) (((((int)get2byte(X))-1)&0xffff)+1)
49266 #ifndef SQLITE_OMIT_SHARED_CACHE
49268 ** A list of BtShared objects that are eligible for participation
49269 ** in shared cache. This variable has file scope during normal builds,
49270 ** but the test harness needs to access it so we make it global for
49271 ** test builds.
49273 ** Access to this variable is protected by SQLITE_MUTEX_STATIC_MASTER.
49275 #ifdef SQLITE_TEST
49276 SQLITE_PRIVATE BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
49277 #else
49278 static BtShared *SQLITE_WSD sqlite3SharedCacheList = 0;
49279 #endif
49280 #endif /* SQLITE_OMIT_SHARED_CACHE */
49282 #ifndef SQLITE_OMIT_SHARED_CACHE
49284 ** Enable or disable the shared pager and schema features.
49286 ** This routine has no effect on existing database connections.
49287 ** The shared cache setting effects only future calls to
49288 ** sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2().
49290 SQLITE_API int sqlite3_enable_shared_cache(int enable){
49291 sqlite3GlobalConfig.sharedCacheEnabled = enable;
49292 return SQLITE_OK;
49294 #endif
49298 #ifdef SQLITE_OMIT_SHARED_CACHE
49300 ** The functions querySharedCacheTableLock(), setSharedCacheTableLock(),
49301 ** and clearAllSharedCacheTableLocks()
49302 ** manipulate entries in the BtShared.pLock linked list used to store
49303 ** shared-cache table level locks. If the library is compiled with the
49304 ** shared-cache feature disabled, then there is only ever one user
49305 ** of each BtShared structure and so this locking is not necessary.
49306 ** So define the lock related functions as no-ops.
49308 #define querySharedCacheTableLock(a,b,c) SQLITE_OK
49309 #define setSharedCacheTableLock(a,b,c) SQLITE_OK
49310 #define clearAllSharedCacheTableLocks(a)
49311 #define downgradeAllSharedCacheTableLocks(a)
49312 #define hasSharedCacheTableLock(a,b,c,d) 1
49313 #define hasReadConflicts(a, b) 0
49314 #endif
49316 #ifndef SQLITE_OMIT_SHARED_CACHE
49318 #ifdef SQLITE_DEBUG
49320 **** This function is only used as part of an assert() statement. ***
49322 ** Check to see if pBtree holds the required locks to read or write to the
49323 ** table with root page iRoot. Return 1 if it does and 0 if not.
49325 ** For example, when writing to a table with root-page iRoot via
49326 ** Btree connection pBtree:
49328 ** assert( hasSharedCacheTableLock(pBtree, iRoot, 0, WRITE_LOCK) );
49330 ** When writing to an index that resides in a sharable database, the
49331 ** caller should have first obtained a lock specifying the root page of
49332 ** the corresponding table. This makes things a bit more complicated,
49333 ** as this module treats each table as a separate structure. To determine
49334 ** the table corresponding to the index being written, this
49335 ** function has to search through the database schema.
49337 ** Instead of a lock on the table/index rooted at page iRoot, the caller may
49338 ** hold a write-lock on the schema table (root page 1). This is also
49339 ** acceptable.
49341 static int hasSharedCacheTableLock(
49342 Btree *pBtree, /* Handle that must hold lock */
49343 Pgno iRoot, /* Root page of b-tree */
49344 int isIndex, /* True if iRoot is the root of an index b-tree */
49345 int eLockType /* Required lock type (READ_LOCK or WRITE_LOCK) */
49347 Schema *pSchema = (Schema *)pBtree->pBt->pSchema;
49348 Pgno iTab = 0;
49349 BtLock *pLock;
49351 /* If this database is not shareable, or if the client is reading
49352 ** and has the read-uncommitted flag set, then no lock is required.
49353 ** Return true immediately.
49355 if( (pBtree->sharable==0)
49356 || (eLockType==READ_LOCK && (pBtree->db->flags & SQLITE_ReadUncommitted))
49358 return 1;
49361 /* If the client is reading or writing an index and the schema is
49362 ** not loaded, then it is too difficult to actually check to see if
49363 ** the correct locks are held. So do not bother - just return true.
49364 ** This case does not come up very often anyhow.
49366 if( isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0) ){
49367 return 1;
49370 /* Figure out the root-page that the lock should be held on. For table
49371 ** b-trees, this is just the root page of the b-tree being read or
49372 ** written. For index b-trees, it is the root page of the associated
49373 ** table. */
49374 if( isIndex ){
49375 HashElem *p;
49376 for(p=sqliteHashFirst(&pSchema->idxHash); p; p=sqliteHashNext(p)){
49377 Index *pIdx = (Index *)sqliteHashData(p);
49378 if( pIdx->tnum==(int)iRoot ){
49379 iTab = pIdx->pTable->tnum;
49382 }else{
49383 iTab = iRoot;
49386 /* Search for the required lock. Either a write-lock on root-page iTab, a
49387 ** write-lock on the schema table, or (if the client is reading) a
49388 ** read-lock on iTab will suffice. Return 1 if any of these are found. */
49389 for(pLock=pBtree->pBt->pLock; pLock; pLock=pLock->pNext){
49390 if( pLock->pBtree==pBtree
49391 && (pLock->iTable==iTab || (pLock->eLock==WRITE_LOCK && pLock->iTable==1))
49392 && pLock->eLock>=eLockType
49394 return 1;
49398 /* Failed to find the required lock. */
49399 return 0;
49401 #endif /* SQLITE_DEBUG */
49403 #ifdef SQLITE_DEBUG
49405 **** This function may be used as part of assert() statements only. ****
49407 ** Return true if it would be illegal for pBtree to write into the
49408 ** table or index rooted at iRoot because other shared connections are
49409 ** simultaneously reading that same table or index.
49411 ** It is illegal for pBtree to write if some other Btree object that
49412 ** shares the same BtShared object is currently reading or writing
49413 ** the iRoot table. Except, if the other Btree object has the
49414 ** read-uncommitted flag set, then it is OK for the other object to
49415 ** have a read cursor.
49417 ** For example, before writing to any part of the table or index
49418 ** rooted at page iRoot, one should call:
49420 ** assert( !hasReadConflicts(pBtree, iRoot) );
49422 static int hasReadConflicts(Btree *pBtree, Pgno iRoot){
49423 BtCursor *p;
49424 for(p=pBtree->pBt->pCursor; p; p=p->pNext){
49425 if( p->pgnoRoot==iRoot
49426 && p->pBtree!=pBtree
49427 && 0==(p->pBtree->db->flags & SQLITE_ReadUncommitted)
49429 return 1;
49432 return 0;
49434 #endif /* #ifdef SQLITE_DEBUG */
49437 ** Query to see if Btree handle p may obtain a lock of type eLock
49438 ** (READ_LOCK or WRITE_LOCK) on the table with root-page iTab. Return
49439 ** SQLITE_OK if the lock may be obtained (by calling
49440 ** setSharedCacheTableLock()), or SQLITE_LOCKED if not.
49442 static int querySharedCacheTableLock(Btree *p, Pgno iTab, u8 eLock){
49443 BtShared *pBt = p->pBt;
49444 BtLock *pIter;
49446 assert( sqlite3BtreeHoldsMutex(p) );
49447 assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
49448 assert( p->db!=0 );
49449 assert( !(p->db->flags&SQLITE_ReadUncommitted)||eLock==WRITE_LOCK||iTab==1 );
49451 /* If requesting a write-lock, then the Btree must have an open write
49452 ** transaction on this file. And, obviously, for this to be so there
49453 ** must be an open write transaction on the file itself.
49455 assert( eLock==READ_LOCK || (p==pBt->pWriter && p->inTrans==TRANS_WRITE) );
49456 assert( eLock==READ_LOCK || pBt->inTransaction==TRANS_WRITE );
49458 /* This routine is a no-op if the shared-cache is not enabled */
49459 if( !p->sharable ){
49460 return SQLITE_OK;
49463 /* If some other connection is holding an exclusive lock, the
49464 ** requested lock may not be obtained.
49466 if( pBt->pWriter!=p && (pBt->btsFlags & BTS_EXCLUSIVE)!=0 ){
49467 sqlite3ConnectionBlocked(p->db, pBt->pWriter->db);
49468 return SQLITE_LOCKED_SHAREDCACHE;
49471 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
49472 /* The condition (pIter->eLock!=eLock) in the following if(...)
49473 ** statement is a simplification of:
49475 ** (eLock==WRITE_LOCK || pIter->eLock==WRITE_LOCK)
49477 ** since we know that if eLock==WRITE_LOCK, then no other connection
49478 ** may hold a WRITE_LOCK on any table in this file (since there can
49479 ** only be a single writer).
49481 assert( pIter->eLock==READ_LOCK || pIter->eLock==WRITE_LOCK );
49482 assert( eLock==READ_LOCK || pIter->pBtree==p || pIter->eLock==READ_LOCK);
49483 if( pIter->pBtree!=p && pIter->iTable==iTab && pIter->eLock!=eLock ){
49484 sqlite3ConnectionBlocked(p->db, pIter->pBtree->db);
49485 if( eLock==WRITE_LOCK ){
49486 assert( p==pBt->pWriter );
49487 pBt->btsFlags |= BTS_PENDING;
49489 return SQLITE_LOCKED_SHAREDCACHE;
49492 return SQLITE_OK;
49494 #endif /* !SQLITE_OMIT_SHARED_CACHE */
49496 #ifndef SQLITE_OMIT_SHARED_CACHE
49498 ** Add a lock on the table with root-page iTable to the shared-btree used
49499 ** by Btree handle p. Parameter eLock must be either READ_LOCK or
49500 ** WRITE_LOCK.
49502 ** This function assumes the following:
49504 ** (a) The specified Btree object p is connected to a sharable
49505 ** database (one with the BtShared.sharable flag set), and
49507 ** (b) No other Btree objects hold a lock that conflicts
49508 ** with the requested lock (i.e. querySharedCacheTableLock() has
49509 ** already been called and returned SQLITE_OK).
49511 ** SQLITE_OK is returned if the lock is added successfully. SQLITE_NOMEM
49512 ** is returned if a malloc attempt fails.
49514 static int setSharedCacheTableLock(Btree *p, Pgno iTable, u8 eLock){
49515 BtShared *pBt = p->pBt;
49516 BtLock *pLock = 0;
49517 BtLock *pIter;
49519 assert( sqlite3BtreeHoldsMutex(p) );
49520 assert( eLock==READ_LOCK || eLock==WRITE_LOCK );
49521 assert( p->db!=0 );
49523 /* A connection with the read-uncommitted flag set will never try to
49524 ** obtain a read-lock using this function. The only read-lock obtained
49525 ** by a connection in read-uncommitted mode is on the sqlite_master
49526 ** table, and that lock is obtained in BtreeBeginTrans(). */
49527 assert( 0==(p->db->flags&SQLITE_ReadUncommitted) || eLock==WRITE_LOCK );
49529 /* This function should only be called on a sharable b-tree after it
49530 ** has been determined that no other b-tree holds a conflicting lock. */
49531 assert( p->sharable );
49532 assert( SQLITE_OK==querySharedCacheTableLock(p, iTable, eLock) );
49534 /* First search the list for an existing lock on this table. */
49535 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
49536 if( pIter->iTable==iTable && pIter->pBtree==p ){
49537 pLock = pIter;
49538 break;
49542 /* If the above search did not find a BtLock struct associating Btree p
49543 ** with table iTable, allocate one and link it into the list.
49545 if( !pLock ){
49546 pLock = (BtLock *)sqlite3MallocZero(sizeof(BtLock));
49547 if( !pLock ){
49548 return SQLITE_NOMEM;
49550 pLock->iTable = iTable;
49551 pLock->pBtree = p;
49552 pLock->pNext = pBt->pLock;
49553 pBt->pLock = pLock;
49556 /* Set the BtLock.eLock variable to the maximum of the current lock
49557 ** and the requested lock. This means if a write-lock was already held
49558 ** and a read-lock requested, we don't incorrectly downgrade the lock.
49560 assert( WRITE_LOCK>READ_LOCK );
49561 if( eLock>pLock->eLock ){
49562 pLock->eLock = eLock;
49565 return SQLITE_OK;
49567 #endif /* !SQLITE_OMIT_SHARED_CACHE */
49569 #ifndef SQLITE_OMIT_SHARED_CACHE
49571 ** Release all the table locks (locks obtained via calls to
49572 ** the setSharedCacheTableLock() procedure) held by Btree object p.
49574 ** This function assumes that Btree p has an open read or write
49575 ** transaction. If it does not, then the BTS_PENDING flag
49576 ** may be incorrectly cleared.
49578 static void clearAllSharedCacheTableLocks(Btree *p){
49579 BtShared *pBt = p->pBt;
49580 BtLock **ppIter = &pBt->pLock;
49582 assert( sqlite3BtreeHoldsMutex(p) );
49583 assert( p->sharable || 0==*ppIter );
49584 assert( p->inTrans>0 );
49586 while( *ppIter ){
49587 BtLock *pLock = *ppIter;
49588 assert( (pBt->btsFlags & BTS_EXCLUSIVE)==0 || pBt->pWriter==pLock->pBtree );
49589 assert( pLock->pBtree->inTrans>=pLock->eLock );
49590 if( pLock->pBtree==p ){
49591 *ppIter = pLock->pNext;
49592 assert( pLock->iTable!=1 || pLock==&p->lock );
49593 if( pLock->iTable!=1 ){
49594 sqlite3_free(pLock);
49596 }else{
49597 ppIter = &pLock->pNext;
49601 assert( (pBt->btsFlags & BTS_PENDING)==0 || pBt->pWriter );
49602 if( pBt->pWriter==p ){
49603 pBt->pWriter = 0;
49604 pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING);
49605 }else if( pBt->nTransaction==2 ){
49606 /* This function is called when Btree p is concluding its
49607 ** transaction. If there currently exists a writer, and p is not
49608 ** that writer, then the number of locks held by connections other
49609 ** than the writer must be about to drop to zero. In this case
49610 ** set the BTS_PENDING flag to 0.
49612 ** If there is not currently a writer, then BTS_PENDING must
49613 ** be zero already. So this next line is harmless in that case.
49615 pBt->btsFlags &= ~BTS_PENDING;
49620 ** This function changes all write-locks held by Btree p into read-locks.
49622 static void downgradeAllSharedCacheTableLocks(Btree *p){
49623 BtShared *pBt = p->pBt;
49624 if( pBt->pWriter==p ){
49625 BtLock *pLock;
49626 pBt->pWriter = 0;
49627 pBt->btsFlags &= ~(BTS_EXCLUSIVE|BTS_PENDING);
49628 for(pLock=pBt->pLock; pLock; pLock=pLock->pNext){
49629 assert( pLock->eLock==READ_LOCK || pLock->pBtree==p );
49630 pLock->eLock = READ_LOCK;
49635 #endif /* SQLITE_OMIT_SHARED_CACHE */
49637 static void releasePage(MemPage *pPage); /* Forward reference */
49640 ***** This routine is used inside of assert() only ****
49642 ** Verify that the cursor holds the mutex on its BtShared
49644 #ifdef SQLITE_DEBUG
49645 static int cursorHoldsMutex(BtCursor *p){
49646 return sqlite3_mutex_held(p->pBt->mutex);
49648 #endif
49651 #ifndef SQLITE_OMIT_INCRBLOB
49653 ** Invalidate the overflow page-list cache for cursor pCur, if any.
49655 static void invalidateOverflowCache(BtCursor *pCur){
49656 assert( cursorHoldsMutex(pCur) );
49657 sqlite3_free(pCur->aOverflow);
49658 pCur->aOverflow = 0;
49662 ** Invalidate the overflow page-list cache for all cursors opened
49663 ** on the shared btree structure pBt.
49665 static void invalidateAllOverflowCache(BtShared *pBt){
49666 BtCursor *p;
49667 assert( sqlite3_mutex_held(pBt->mutex) );
49668 for(p=pBt->pCursor; p; p=p->pNext){
49669 invalidateOverflowCache(p);
49674 ** This function is called before modifying the contents of a table
49675 ** to invalidate any incrblob cursors that are open on the
49676 ** row or one of the rows being modified.
49678 ** If argument isClearTable is true, then the entire contents of the
49679 ** table is about to be deleted. In this case invalidate all incrblob
49680 ** cursors open on any row within the table with root-page pgnoRoot.
49682 ** Otherwise, if argument isClearTable is false, then the row with
49683 ** rowid iRow is being replaced or deleted. In this case invalidate
49684 ** only those incrblob cursors open on that specific row.
49686 static void invalidateIncrblobCursors(
49687 Btree *pBtree, /* The database file to check */
49688 i64 iRow, /* The rowid that might be changing */
49689 int isClearTable /* True if all rows are being deleted */
49691 BtCursor *p;
49692 BtShared *pBt = pBtree->pBt;
49693 assert( sqlite3BtreeHoldsMutex(pBtree) );
49694 for(p=pBt->pCursor; p; p=p->pNext){
49695 if( p->isIncrblobHandle && (isClearTable || p->info.nKey==iRow) ){
49696 p->eState = CURSOR_INVALID;
49701 #else
49702 /* Stub functions when INCRBLOB is omitted */
49703 #define invalidateOverflowCache(x)
49704 #define invalidateAllOverflowCache(x)
49705 #define invalidateIncrblobCursors(x,y,z)
49706 #endif /* SQLITE_OMIT_INCRBLOB */
49709 ** Set bit pgno of the BtShared.pHasContent bitvec. This is called
49710 ** when a page that previously contained data becomes a free-list leaf
49711 ** page.
49713 ** The BtShared.pHasContent bitvec exists to work around an obscure
49714 ** bug caused by the interaction of two useful IO optimizations surrounding
49715 ** free-list leaf pages:
49717 ** 1) When all data is deleted from a page and the page becomes
49718 ** a free-list leaf page, the page is not written to the database
49719 ** (as free-list leaf pages contain no meaningful data). Sometimes
49720 ** such a page is not even journalled (as it will not be modified,
49721 ** why bother journalling it?).
49723 ** 2) When a free-list leaf page is reused, its content is not read
49724 ** from the database or written to the journal file (why should it
49725 ** be, if it is not at all meaningful?).
49727 ** By themselves, these optimizations work fine and provide a handy
49728 ** performance boost to bulk delete or insert operations. However, if
49729 ** a page is moved to the free-list and then reused within the same
49730 ** transaction, a problem comes up. If the page is not journalled when
49731 ** it is moved to the free-list and it is also not journalled when it
49732 ** is extracted from the free-list and reused, then the original data
49733 ** may be lost. In the event of a rollback, it may not be possible
49734 ** to restore the database to its original configuration.
49736 ** The solution is the BtShared.pHasContent bitvec. Whenever a page is
49737 ** moved to become a free-list leaf page, the corresponding bit is
49738 ** set in the bitvec. Whenever a leaf page is extracted from the free-list,
49739 ** optimization 2 above is omitted if the corresponding bit is already
49740 ** set in BtShared.pHasContent. The contents of the bitvec are cleared
49741 ** at the end of every transaction.
49743 static int btreeSetHasContent(BtShared *pBt, Pgno pgno){
49744 int rc = SQLITE_OK;
49745 if( !pBt->pHasContent ){
49746 assert( pgno<=pBt->nPage );
49747 pBt->pHasContent = sqlite3BitvecCreate(pBt->nPage);
49748 if( !pBt->pHasContent ){
49749 rc = SQLITE_NOMEM;
49752 if( rc==SQLITE_OK && pgno<=sqlite3BitvecSize(pBt->pHasContent) ){
49753 rc = sqlite3BitvecSet(pBt->pHasContent, pgno);
49755 return rc;
49759 ** Query the BtShared.pHasContent vector.
49761 ** This function is called when a free-list leaf page is removed from the
49762 ** free-list for reuse. It returns false if it is safe to retrieve the
49763 ** page from the pager layer with the 'no-content' flag set. True otherwise.
49765 static int btreeGetHasContent(BtShared *pBt, Pgno pgno){
49766 Bitvec *p = pBt->pHasContent;
49767 return (p && (pgno>sqlite3BitvecSize(p) || sqlite3BitvecTest(p, pgno)));
49771 ** Clear (destroy) the BtShared.pHasContent bitvec. This should be
49772 ** invoked at the conclusion of each write-transaction.
49774 static void btreeClearHasContent(BtShared *pBt){
49775 sqlite3BitvecDestroy(pBt->pHasContent);
49776 pBt->pHasContent = 0;
49780 ** Save the current cursor position in the variables BtCursor.nKey
49781 ** and BtCursor.pKey. The cursor's state is set to CURSOR_REQUIRESEEK.
49783 ** The caller must ensure that the cursor is valid (has eState==CURSOR_VALID)
49784 ** prior to calling this routine.
49786 static int saveCursorPosition(BtCursor *pCur){
49787 int rc;
49789 assert( CURSOR_VALID==pCur->eState );
49790 assert( 0==pCur->pKey );
49791 assert( cursorHoldsMutex(pCur) );
49793 rc = sqlite3BtreeKeySize(pCur, &pCur->nKey);
49794 assert( rc==SQLITE_OK ); /* KeySize() cannot fail */
49796 /* If this is an intKey table, then the above call to BtreeKeySize()
49797 ** stores the integer key in pCur->nKey. In this case this value is
49798 ** all that is required. Otherwise, if pCur is not open on an intKey
49799 ** table, then malloc space for and store the pCur->nKey bytes of key
49800 ** data.
49802 if( 0==pCur->apPage[0]->intKey ){
49803 void *pKey = sqlite3Malloc( (int)pCur->nKey );
49804 if( pKey ){
49805 rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey);
49806 if( rc==SQLITE_OK ){
49807 pCur->pKey = pKey;
49808 }else{
49809 sqlite3_free(pKey);
49811 }else{
49812 rc = SQLITE_NOMEM;
49815 assert( !pCur->apPage[0]->intKey || !pCur->pKey );
49817 if( rc==SQLITE_OK ){
49818 int i;
49819 for(i=0; i<=pCur->iPage; i++){
49820 releasePage(pCur->apPage[i]);
49821 pCur->apPage[i] = 0;
49823 pCur->iPage = -1;
49824 pCur->eState = CURSOR_REQUIRESEEK;
49827 invalidateOverflowCache(pCur);
49828 return rc;
49832 ** Save the positions of all cursors (except pExcept) that are open on
49833 ** the table with root-page iRoot. Usually, this is called just before cursor
49834 ** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()).
49836 static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
49837 BtCursor *p;
49838 assert( sqlite3_mutex_held(pBt->mutex) );
49839 assert( pExcept==0 || pExcept->pBt==pBt );
49840 for(p=pBt->pCursor; p; p=p->pNext){
49841 if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) &&
49842 p->eState==CURSOR_VALID ){
49843 int rc = saveCursorPosition(p);
49844 if( SQLITE_OK!=rc ){
49845 return rc;
49849 return SQLITE_OK;
49853 ** Clear the current cursor position.
49855 SQLITE_PRIVATE void sqlite3BtreeClearCursor(BtCursor *pCur){
49856 assert( cursorHoldsMutex(pCur) );
49857 sqlite3_free(pCur->pKey);
49858 pCur->pKey = 0;
49859 pCur->eState = CURSOR_INVALID;
49863 ** In this version of BtreeMoveto, pKey is a packed index record
49864 ** such as is generated by the OP_MakeRecord opcode. Unpack the
49865 ** record and then call BtreeMovetoUnpacked() to do the work.
49867 static int btreeMoveto(
49868 BtCursor *pCur, /* Cursor open on the btree to be searched */
49869 const void *pKey, /* Packed key if the btree is an index */
49870 i64 nKey, /* Integer key for tables. Size of pKey for indices */
49871 int bias, /* Bias search to the high end */
49872 int *pRes /* Write search results here */
49874 int rc; /* Status code */
49875 UnpackedRecord *pIdxKey; /* Unpacked index key */
49876 char aSpace[150]; /* Temp space for pIdxKey - to avoid a malloc */
49877 char *pFree = 0;
49879 if( pKey ){
49880 assert( nKey==(i64)(int)nKey );
49881 pIdxKey = sqlite3VdbeAllocUnpackedRecord(
49882 pCur->pKeyInfo, aSpace, sizeof(aSpace), &pFree
49884 if( pIdxKey==0 ) return SQLITE_NOMEM;
49885 sqlite3VdbeRecordUnpack(pCur->pKeyInfo, (int)nKey, pKey, pIdxKey);
49886 }else{
49887 pIdxKey = 0;
49889 rc = sqlite3BtreeMovetoUnpacked(pCur, pIdxKey, nKey, bias, pRes);
49890 if( pFree ){
49891 sqlite3DbFree(pCur->pKeyInfo->db, pFree);
49893 return rc;
49897 ** Restore the cursor to the position it was in (or as close to as possible)
49898 ** when saveCursorPosition() was called. Note that this call deletes the
49899 ** saved position info stored by saveCursorPosition(), so there can be
49900 ** at most one effective restoreCursorPosition() call after each
49901 ** saveCursorPosition().
49903 static int btreeRestoreCursorPosition(BtCursor *pCur){
49904 int rc;
49905 assert( cursorHoldsMutex(pCur) );
49906 assert( pCur->eState>=CURSOR_REQUIRESEEK );
49907 if( pCur->eState==CURSOR_FAULT ){
49908 return pCur->skipNext;
49910 pCur->eState = CURSOR_INVALID;
49911 rc = btreeMoveto(pCur, pCur->pKey, pCur->nKey, 0, &pCur->skipNext);
49912 if( rc==SQLITE_OK ){
49913 sqlite3_free(pCur->pKey);
49914 pCur->pKey = 0;
49915 assert( pCur->eState==CURSOR_VALID || pCur->eState==CURSOR_INVALID );
49917 return rc;
49920 #define restoreCursorPosition(p) \
49921 (p->eState>=CURSOR_REQUIRESEEK ? \
49922 btreeRestoreCursorPosition(p) : \
49923 SQLITE_OK)
49926 ** Determine whether or not a cursor has moved from the position it
49927 ** was last placed at. Cursors can move when the row they are pointing
49928 ** at is deleted out from under them.
49930 ** This routine returns an error code if something goes wrong. The
49931 ** integer *pHasMoved is set to one if the cursor has moved and 0 if not.
49933 SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur, int *pHasMoved){
49934 int rc;
49936 rc = restoreCursorPosition(pCur);
49937 if( rc ){
49938 *pHasMoved = 1;
49939 return rc;
49941 if( pCur->eState!=CURSOR_VALID || pCur->skipNext!=0 ){
49942 *pHasMoved = 1;
49943 }else{
49944 *pHasMoved = 0;
49946 return SQLITE_OK;
49949 #ifndef SQLITE_OMIT_AUTOVACUUM
49951 ** Given a page number of a regular database page, return the page
49952 ** number for the pointer-map page that contains the entry for the
49953 ** input page number.
49955 ** Return 0 (not a valid page) for pgno==1 since there is
49956 ** no pointer map associated with page 1. The integrity_check logic
49957 ** requires that ptrmapPageno(*,1)!=1.
49959 static Pgno ptrmapPageno(BtShared *pBt, Pgno pgno){
49960 int nPagesPerMapPage;
49961 Pgno iPtrMap, ret;
49962 assert( sqlite3_mutex_held(pBt->mutex) );
49963 if( pgno<2 ) return 0;
49964 nPagesPerMapPage = (pBt->usableSize/5)+1;
49965 iPtrMap = (pgno-2)/nPagesPerMapPage;
49966 ret = (iPtrMap*nPagesPerMapPage) + 2;
49967 if( ret==PENDING_BYTE_PAGE(pBt) ){
49968 ret++;
49970 return ret;
49974 ** Write an entry into the pointer map.
49976 ** This routine updates the pointer map entry for page number 'key'
49977 ** so that it maps to type 'eType' and parent page number 'pgno'.
49979 ** If *pRC is initially non-zero (non-SQLITE_OK) then this routine is
49980 ** a no-op. If an error occurs, the appropriate error code is written
49981 ** into *pRC.
49983 static void ptrmapPut(BtShared *pBt, Pgno key, u8 eType, Pgno parent, int *pRC){
49984 DbPage *pDbPage; /* The pointer map page */
49985 u8 *pPtrmap; /* The pointer map data */
49986 Pgno iPtrmap; /* The pointer map page number */
49987 int offset; /* Offset in pointer map page */
49988 int rc; /* Return code from subfunctions */
49990 if( *pRC ) return;
49992 assert( sqlite3_mutex_held(pBt->mutex) );
49993 /* The master-journal page number must never be used as a pointer map page */
49994 assert( 0==PTRMAP_ISPAGE(pBt, PENDING_BYTE_PAGE(pBt)) );
49996 assert( pBt->autoVacuum );
49997 if( key==0 ){
49998 *pRC = SQLITE_CORRUPT_BKPT;
49999 return;
50001 iPtrmap = PTRMAP_PAGENO(pBt, key);
50002 rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
50003 if( rc!=SQLITE_OK ){
50004 *pRC = rc;
50005 return;
50007 offset = PTRMAP_PTROFFSET(iPtrmap, key);
50008 if( offset<0 ){
50009 *pRC = SQLITE_CORRUPT_BKPT;
50010 goto ptrmap_exit;
50012 assert( offset <= (int)pBt->usableSize-5 );
50013 pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
50015 if( eType!=pPtrmap[offset] || get4byte(&pPtrmap[offset+1])!=parent ){
50016 TRACE(("PTRMAP_UPDATE: %d->(%d,%d)\n", key, eType, parent));
50017 *pRC= rc = sqlite3PagerWrite(pDbPage);
50018 if( rc==SQLITE_OK ){
50019 pPtrmap[offset] = eType;
50020 put4byte(&pPtrmap[offset+1], parent);
50024 ptrmap_exit:
50025 sqlite3PagerUnref(pDbPage);
50029 ** Read an entry from the pointer map.
50031 ** This routine retrieves the pointer map entry for page 'key', writing
50032 ** the type and parent page number to *pEType and *pPgno respectively.
50033 ** An error code is returned if something goes wrong, otherwise SQLITE_OK.
50035 static int ptrmapGet(BtShared *pBt, Pgno key, u8 *pEType, Pgno *pPgno){
50036 DbPage *pDbPage; /* The pointer map page */
50037 int iPtrmap; /* Pointer map page index */
50038 u8 *pPtrmap; /* Pointer map page data */
50039 int offset; /* Offset of entry in pointer map */
50040 int rc;
50042 assert( sqlite3_mutex_held(pBt->mutex) );
50044 iPtrmap = PTRMAP_PAGENO(pBt, key);
50045 rc = sqlite3PagerGet(pBt->pPager, iPtrmap, &pDbPage);
50046 if( rc!=0 ){
50047 return rc;
50049 pPtrmap = (u8 *)sqlite3PagerGetData(pDbPage);
50051 offset = PTRMAP_PTROFFSET(iPtrmap, key);
50052 if( offset<0 ){
50053 sqlite3PagerUnref(pDbPage);
50054 return SQLITE_CORRUPT_BKPT;
50056 assert( offset <= (int)pBt->usableSize-5 );
50057 assert( pEType!=0 );
50058 *pEType = pPtrmap[offset];
50059 if( pPgno ) *pPgno = get4byte(&pPtrmap[offset+1]);
50061 sqlite3PagerUnref(pDbPage);
50062 if( *pEType<1 || *pEType>5 ) return SQLITE_CORRUPT_BKPT;
50063 return SQLITE_OK;
50066 #else /* if defined SQLITE_OMIT_AUTOVACUUM */
50067 #define ptrmapPut(w,x,y,z,rc)
50068 #define ptrmapGet(w,x,y,z) SQLITE_OK
50069 #define ptrmapPutOvflPtr(x, y, rc)
50070 #endif
50073 ** Given a btree page and a cell index (0 means the first cell on
50074 ** the page, 1 means the second cell, and so forth) return a pointer
50075 ** to the cell content.
50077 ** This routine works only for pages that do not contain overflow cells.
50079 #define findCell(P,I) \
50080 ((P)->aData + ((P)->maskPage & get2byte(&(P)->aCellIdx[2*(I)])))
50081 #define findCellv2(D,M,O,I) (D+(M&get2byte(D+(O+2*(I)))))
50085 ** This a more complex version of findCell() that works for
50086 ** pages that do contain overflow cells.
50088 static u8 *findOverflowCell(MemPage *pPage, int iCell){
50089 int i;
50090 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50091 for(i=pPage->nOverflow-1; i>=0; i--){
50092 int k;
50093 struct _OvflCell *pOvfl;
50094 pOvfl = &pPage->aOvfl[i];
50095 k = pOvfl->idx;
50096 if( k<=iCell ){
50097 if( k==iCell ){
50098 return pOvfl->pCell;
50100 iCell--;
50103 return findCell(pPage, iCell);
50107 ** Parse a cell content block and fill in the CellInfo structure. There
50108 ** are two versions of this function. btreeParseCell() takes a
50109 ** cell index as the second argument and btreeParseCellPtr()
50110 ** takes a pointer to the body of the cell as its second argument.
50112 ** Within this file, the parseCell() macro can be called instead of
50113 ** btreeParseCellPtr(). Using some compilers, this will be faster.
50115 static void btreeParseCellPtr(
50116 MemPage *pPage, /* Page containing the cell */
50117 u8 *pCell, /* Pointer to the cell text. */
50118 CellInfo *pInfo /* Fill in this structure */
50120 u16 n; /* Number bytes in cell content header */
50121 u32 nPayload; /* Number of bytes of cell payload */
50123 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50125 pInfo->pCell = pCell;
50126 assert( pPage->leaf==0 || pPage->leaf==1 );
50127 n = pPage->childPtrSize;
50128 assert( n==4-4*pPage->leaf );
50129 if( pPage->intKey ){
50130 if( pPage->hasData ){
50131 n += getVarint32(&pCell[n], nPayload);
50132 }else{
50133 nPayload = 0;
50135 n += getVarint(&pCell[n], (u64*)&pInfo->nKey);
50136 pInfo->nData = nPayload;
50137 }else{
50138 pInfo->nData = 0;
50139 n += getVarint32(&pCell[n], nPayload);
50140 pInfo->nKey = nPayload;
50142 pInfo->nPayload = nPayload;
50143 pInfo->nHeader = n;
50144 testcase( nPayload==pPage->maxLocal );
50145 testcase( nPayload==pPage->maxLocal+1 );
50146 if( likely(nPayload<=pPage->maxLocal) ){
50147 /* This is the (easy) common case where the entire payload fits
50148 ** on the local page. No overflow is required.
50150 if( (pInfo->nSize = (u16)(n+nPayload))<4 ) pInfo->nSize = 4;
50151 pInfo->nLocal = (u16)nPayload;
50152 pInfo->iOverflow = 0;
50153 }else{
50154 /* If the payload will not fit completely on the local page, we have
50155 ** to decide how much to store locally and how much to spill onto
50156 ** overflow pages. The strategy is to minimize the amount of unused
50157 ** space on overflow pages while keeping the amount of local storage
50158 ** in between minLocal and maxLocal.
50160 ** Warning: changing the way overflow payload is distributed in any
50161 ** way will result in an incompatible file format.
50163 int minLocal; /* Minimum amount of payload held locally */
50164 int maxLocal; /* Maximum amount of payload held locally */
50165 int surplus; /* Overflow payload available for local storage */
50167 minLocal = pPage->minLocal;
50168 maxLocal = pPage->maxLocal;
50169 surplus = minLocal + (nPayload - minLocal)%(pPage->pBt->usableSize - 4);
50170 testcase( surplus==maxLocal );
50171 testcase( surplus==maxLocal+1 );
50172 if( surplus <= maxLocal ){
50173 pInfo->nLocal = (u16)surplus;
50174 }else{
50175 pInfo->nLocal = (u16)minLocal;
50177 pInfo->iOverflow = (u16)(pInfo->nLocal + n);
50178 pInfo->nSize = pInfo->iOverflow + 4;
50181 #define parseCell(pPage, iCell, pInfo) \
50182 btreeParseCellPtr((pPage), findCell((pPage), (iCell)), (pInfo))
50183 static void btreeParseCell(
50184 MemPage *pPage, /* Page containing the cell */
50185 int iCell, /* The cell index. First cell is 0 */
50186 CellInfo *pInfo /* Fill in this structure */
50188 parseCell(pPage, iCell, pInfo);
50192 ** Compute the total number of bytes that a Cell needs in the cell
50193 ** data area of the btree-page. The return number includes the cell
50194 ** data header and the local payload, but not any overflow page or
50195 ** the space used by the cell pointer.
50197 static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
50198 u8 *pIter = &pCell[pPage->childPtrSize];
50199 u32 nSize;
50201 #ifdef SQLITE_DEBUG
50202 /* The value returned by this function should always be the same as
50203 ** the (CellInfo.nSize) value found by doing a full parse of the
50204 ** cell. If SQLITE_DEBUG is defined, an assert() at the bottom of
50205 ** this function verifies that this invariant is not violated. */
50206 CellInfo debuginfo;
50207 btreeParseCellPtr(pPage, pCell, &debuginfo);
50208 #endif
50210 if( pPage->intKey ){
50211 u8 *pEnd;
50212 if( pPage->hasData ){
50213 pIter += getVarint32(pIter, nSize);
50214 }else{
50215 nSize = 0;
50218 /* pIter now points at the 64-bit integer key value, a variable length
50219 ** integer. The following block moves pIter to point at the first byte
50220 ** past the end of the key value. */
50221 pEnd = &pIter[9];
50222 while( (*pIter++)&0x80 && pIter<pEnd );
50223 }else{
50224 pIter += getVarint32(pIter, nSize);
50227 testcase( nSize==pPage->maxLocal );
50228 testcase( nSize==pPage->maxLocal+1 );
50229 if( nSize>pPage->maxLocal ){
50230 int minLocal = pPage->minLocal;
50231 nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4);
50232 testcase( nSize==pPage->maxLocal );
50233 testcase( nSize==pPage->maxLocal+1 );
50234 if( nSize>pPage->maxLocal ){
50235 nSize = minLocal;
50237 nSize += 4;
50239 nSize += (u32)(pIter - pCell);
50241 /* The minimum size of any cell is 4 bytes. */
50242 if( nSize<4 ){
50243 nSize = 4;
50246 assert( nSize==debuginfo.nSize );
50247 return (u16)nSize;
50250 #ifdef SQLITE_DEBUG
50251 /* This variation on cellSizePtr() is used inside of assert() statements
50252 ** only. */
50253 static u16 cellSize(MemPage *pPage, int iCell){
50254 return cellSizePtr(pPage, findCell(pPage, iCell));
50256 #endif
50258 #ifndef SQLITE_OMIT_AUTOVACUUM
50260 ** If the cell pCell, part of page pPage contains a pointer
50261 ** to an overflow page, insert an entry into the pointer-map
50262 ** for the overflow page.
50264 static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
50265 CellInfo info;
50266 if( *pRC ) return;
50267 assert( pCell!=0 );
50268 btreeParseCellPtr(pPage, pCell, &info);
50269 assert( (info.nData+(pPage->intKey?0:info.nKey))==info.nPayload );
50270 if( info.iOverflow ){
50271 Pgno ovfl = get4byte(&pCell[info.iOverflow]);
50272 ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC);
50275 #endif
50279 ** Defragment the page given. All Cells are moved to the
50280 ** end of the page and all free space is collected into one
50281 ** big FreeBlk that occurs in between the header and cell
50282 ** pointer array and the cell content area.
50284 static int defragmentPage(MemPage *pPage){
50285 int i; /* Loop counter */
50286 int pc; /* Address of a i-th cell */
50287 int hdr; /* Offset to the page header */
50288 int size; /* Size of a cell */
50289 int usableSize; /* Number of usable bytes on a page */
50290 int cellOffset; /* Offset to the cell pointer array */
50291 int cbrk; /* Offset to the cell content area */
50292 int nCell; /* Number of cells on the page */
50293 unsigned char *data; /* The page data */
50294 unsigned char *temp; /* Temp area for cell content */
50295 int iCellFirst; /* First allowable cell index */
50296 int iCellLast; /* Last possible cell index */
50299 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50300 assert( pPage->pBt!=0 );
50301 assert( pPage->pBt->usableSize <= SQLITE_MAX_PAGE_SIZE );
50302 assert( pPage->nOverflow==0 );
50303 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50304 temp = sqlite3PagerTempSpace(pPage->pBt->pPager);
50305 data = pPage->aData;
50306 hdr = pPage->hdrOffset;
50307 cellOffset = pPage->cellOffset;
50308 nCell = pPage->nCell;
50309 assert( nCell==get2byte(&data[hdr+3]) );
50310 usableSize = pPage->pBt->usableSize;
50311 cbrk = get2byte(&data[hdr+5]);
50312 memcpy(&temp[cbrk], &data[cbrk], usableSize - cbrk);
50313 cbrk = usableSize;
50314 iCellFirst = cellOffset + 2*nCell;
50315 iCellLast = usableSize - 4;
50316 for(i=0; i<nCell; i++){
50317 u8 *pAddr; /* The i-th cell pointer */
50318 pAddr = &data[cellOffset + i*2];
50319 pc = get2byte(pAddr);
50320 testcase( pc==iCellFirst );
50321 testcase( pc==iCellLast );
50322 #if !defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
50323 /* These conditions have already been verified in btreeInitPage()
50324 ** if SQLITE_ENABLE_OVERSIZE_CELL_CHECK is defined
50326 if( pc<iCellFirst || pc>iCellLast ){
50327 return SQLITE_CORRUPT_BKPT;
50329 #endif
50330 assert( pc>=iCellFirst && pc<=iCellLast );
50331 size = cellSizePtr(pPage, &temp[pc]);
50332 cbrk -= size;
50333 #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
50334 if( cbrk<iCellFirst ){
50335 return SQLITE_CORRUPT_BKPT;
50337 #else
50338 if( cbrk<iCellFirst || pc+size>usableSize ){
50339 return SQLITE_CORRUPT_BKPT;
50341 #endif
50342 assert( cbrk+size<=usableSize && cbrk>=iCellFirst );
50343 testcase( cbrk+size==usableSize );
50344 testcase( pc+size==usableSize );
50345 memcpy(&data[cbrk], &temp[pc], size);
50346 put2byte(pAddr, cbrk);
50348 assert( cbrk>=iCellFirst );
50349 put2byte(&data[hdr+5], cbrk);
50350 data[hdr+1] = 0;
50351 data[hdr+2] = 0;
50352 data[hdr+7] = 0;
50353 memset(&data[iCellFirst], 0, cbrk-iCellFirst);
50354 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50355 if( cbrk-iCellFirst!=pPage->nFree ){
50356 return SQLITE_CORRUPT_BKPT;
50358 return SQLITE_OK;
50362 ** Allocate nByte bytes of space from within the B-Tree page passed
50363 ** as the first argument. Write into *pIdx the index into pPage->aData[]
50364 ** of the first byte of allocated space. Return either SQLITE_OK or
50365 ** an error code (usually SQLITE_CORRUPT).
50367 ** The caller guarantees that there is sufficient space to make the
50368 ** allocation. This routine might need to defragment in order to bring
50369 ** all the space together, however. This routine will avoid using
50370 ** the first two bytes past the cell pointer area since presumably this
50371 ** allocation is being made in order to insert a new cell, so we will
50372 ** also end up needing a new cell pointer.
50374 static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
50375 const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */
50376 u8 * const data = pPage->aData; /* Local cache of pPage->aData */
50377 int nFrag; /* Number of fragmented bytes on pPage */
50378 int top; /* First byte of cell content area */
50379 int gap; /* First byte of gap between cell pointers and cell content */
50380 int rc; /* Integer return code */
50381 int usableSize; /* Usable size of the page */
50383 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50384 assert( pPage->pBt );
50385 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50386 assert( nByte>=0 ); /* Minimum cell size is 4 */
50387 assert( pPage->nFree>=nByte );
50388 assert( pPage->nOverflow==0 );
50389 usableSize = pPage->pBt->usableSize;
50390 assert( nByte < usableSize-8 );
50392 nFrag = data[hdr+7];
50393 assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
50394 gap = pPage->cellOffset + 2*pPage->nCell;
50395 top = get2byteNotZero(&data[hdr+5]);
50396 if( gap>top ) return SQLITE_CORRUPT_BKPT;
50397 testcase( gap+2==top );
50398 testcase( gap+1==top );
50399 testcase( gap==top );
50401 if( nFrag>=60 ){
50402 /* Always defragment highly fragmented pages */
50403 rc = defragmentPage(pPage);
50404 if( rc ) return rc;
50405 top = get2byteNotZero(&data[hdr+5]);
50406 }else if( gap+2<=top ){
50407 /* Search the freelist looking for a free slot big enough to satisfy
50408 ** the request. The allocation is made from the first free slot in
50409 ** the list that is large enough to accomadate it.
50411 int pc, addr;
50412 for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){
50413 int size; /* Size of the free slot */
50414 if( pc>usableSize-4 || pc<addr+4 ){
50415 return SQLITE_CORRUPT_BKPT;
50417 size = get2byte(&data[pc+2]);
50418 if( size>=nByte ){
50419 int x = size - nByte;
50420 testcase( x==4 );
50421 testcase( x==3 );
50422 if( x<4 ){
50423 /* Remove the slot from the free-list. Update the number of
50424 ** fragmented bytes within the page. */
50425 memcpy(&data[addr], &data[pc], 2);
50426 data[hdr+7] = (u8)(nFrag + x);
50427 }else if( size+pc > usableSize ){
50428 return SQLITE_CORRUPT_BKPT;
50429 }else{
50430 /* The slot remains on the free-list. Reduce its size to account
50431 ** for the portion used by the new allocation. */
50432 put2byte(&data[pc+2], x);
50434 *pIdx = pc + x;
50435 return SQLITE_OK;
50440 /* Check to make sure there is enough space in the gap to satisfy
50441 ** the allocation. If not, defragment.
50443 testcase( gap+2+nByte==top );
50444 if( gap+2+nByte>top ){
50445 rc = defragmentPage(pPage);
50446 if( rc ) return rc;
50447 top = get2byteNotZero(&data[hdr+5]);
50448 assert( gap+nByte<=top );
50452 /* Allocate memory from the gap in between the cell pointer array
50453 ** and the cell content area. The btreeInitPage() call has already
50454 ** validated the freelist. Given that the freelist is valid, there
50455 ** is no way that the allocation can extend off the end of the page.
50456 ** The assert() below verifies the previous sentence.
50458 top -= nByte;
50459 put2byte(&data[hdr+5], top);
50460 assert( top+nByte <= (int)pPage->pBt->usableSize );
50461 *pIdx = top;
50462 return SQLITE_OK;
50466 ** Return a section of the pPage->aData to the freelist.
50467 ** The first byte of the new free block is pPage->aDisk[start]
50468 ** and the size of the block is "size" bytes.
50470 ** Most of the effort here is involved in coalesing adjacent
50471 ** free blocks into a single big free block.
50473 static int freeSpace(MemPage *pPage, int start, int size){
50474 int addr, pbegin, hdr;
50475 int iLast; /* Largest possible freeblock offset */
50476 unsigned char *data = pPage->aData;
50478 assert( pPage->pBt!=0 );
50479 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50480 assert( start>=pPage->hdrOffset+6+pPage->childPtrSize );
50481 assert( (start + size) <= (int)pPage->pBt->usableSize );
50482 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50483 assert( size>=0 ); /* Minimum cell size is 4 */
50485 if( pPage->pBt->btsFlags & BTS_SECURE_DELETE ){
50486 /* Overwrite deleted information with zeros when the secure_delete
50487 ** option is enabled */
50488 memset(&data[start], 0, size);
50491 /* Add the space back into the linked list of freeblocks. Note that
50492 ** even though the freeblock list was checked by btreeInitPage(),
50493 ** btreeInitPage() did not detect overlapping cells or
50494 ** freeblocks that overlapped cells. Nor does it detect when the
50495 ** cell content area exceeds the value in the page header. If these
50496 ** situations arise, then subsequent insert operations might corrupt
50497 ** the freelist. So we do need to check for corruption while scanning
50498 ** the freelist.
50500 hdr = pPage->hdrOffset;
50501 addr = hdr + 1;
50502 iLast = pPage->pBt->usableSize - 4;
50503 assert( start<=iLast );
50504 while( (pbegin = get2byte(&data[addr]))<start && pbegin>0 ){
50505 if( pbegin<addr+4 ){
50506 return SQLITE_CORRUPT_BKPT;
50508 addr = pbegin;
50510 if( pbegin>iLast ){
50511 return SQLITE_CORRUPT_BKPT;
50513 assert( pbegin>addr || pbegin==0 );
50514 put2byte(&data[addr], start);
50515 put2byte(&data[start], pbegin);
50516 put2byte(&data[start+2], size);
50517 pPage->nFree = pPage->nFree + (u16)size;
50519 /* Coalesce adjacent free blocks */
50520 addr = hdr + 1;
50521 while( (pbegin = get2byte(&data[addr]))>0 ){
50522 int pnext, psize, x;
50523 assert( pbegin>addr );
50524 assert( pbegin <= (int)pPage->pBt->usableSize-4 );
50525 pnext = get2byte(&data[pbegin]);
50526 psize = get2byte(&data[pbegin+2]);
50527 if( pbegin + psize + 3 >= pnext && pnext>0 ){
50528 int frag = pnext - (pbegin+psize);
50529 if( (frag<0) || (frag>(int)data[hdr+7]) ){
50530 return SQLITE_CORRUPT_BKPT;
50532 data[hdr+7] -= (u8)frag;
50533 x = get2byte(&data[pnext]);
50534 put2byte(&data[pbegin], x);
50535 x = pnext + get2byte(&data[pnext+2]) - pbegin;
50536 put2byte(&data[pbegin+2], x);
50537 }else{
50538 addr = pbegin;
50542 /* If the cell content area begins with a freeblock, remove it. */
50543 if( data[hdr+1]==data[hdr+5] && data[hdr+2]==data[hdr+6] ){
50544 int top;
50545 pbegin = get2byte(&data[hdr+1]);
50546 memcpy(&data[hdr+1], &data[pbegin], 2);
50547 top = get2byte(&data[hdr+5]) + get2byte(&data[pbegin+2]);
50548 put2byte(&data[hdr+5], top);
50550 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50551 return SQLITE_OK;
50555 ** Decode the flags byte (the first byte of the header) for a page
50556 ** and initialize fields of the MemPage structure accordingly.
50558 ** Only the following combinations are supported. Anything different
50559 ** indicates a corrupt database files:
50561 ** PTF_ZERODATA
50562 ** PTF_ZERODATA | PTF_LEAF
50563 ** PTF_LEAFDATA | PTF_INTKEY
50564 ** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF
50566 static int decodeFlags(MemPage *pPage, int flagByte){
50567 BtShared *pBt; /* A copy of pPage->pBt */
50569 assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );
50570 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50571 pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 );
50572 flagByte &= ~PTF_LEAF;
50573 pPage->childPtrSize = 4-4*pPage->leaf;
50574 pBt = pPage->pBt;
50575 if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
50576 pPage->intKey = 1;
50577 pPage->hasData = pPage->leaf;
50578 pPage->maxLocal = pBt->maxLeaf;
50579 pPage->minLocal = pBt->minLeaf;
50580 }else if( flagByte==PTF_ZERODATA ){
50581 pPage->intKey = 0;
50582 pPage->hasData = 0;
50583 pPage->maxLocal = pBt->maxLocal;
50584 pPage->minLocal = pBt->minLocal;
50585 }else{
50586 return SQLITE_CORRUPT_BKPT;
50588 pPage->max1bytePayload = pBt->max1bytePayload;
50589 return SQLITE_OK;
50593 ** Initialize the auxiliary information for a disk block.
50595 ** Return SQLITE_OK on success. If we see that the page does
50596 ** not contain a well-formed database page, then return
50597 ** SQLITE_CORRUPT. Note that a return of SQLITE_OK does not
50598 ** guarantee that the page is well-formed. It only shows that
50599 ** we failed to detect any corruption.
50601 static int btreeInitPage(MemPage *pPage){
50603 assert( pPage->pBt!=0 );
50604 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50605 assert( pPage->pgno==sqlite3PagerPagenumber(pPage->pDbPage) );
50606 assert( pPage == sqlite3PagerGetExtra(pPage->pDbPage) );
50607 assert( pPage->aData == sqlite3PagerGetData(pPage->pDbPage) );
50609 if( !pPage->isInit ){
50610 u16 pc; /* Address of a freeblock within pPage->aData[] */
50611 u8 hdr; /* Offset to beginning of page header */
50612 u8 *data; /* Equal to pPage->aData */
50613 BtShared *pBt; /* The main btree structure */
50614 int usableSize; /* Amount of usable space on each page */
50615 u16 cellOffset; /* Offset from start of page to first cell pointer */
50616 int nFree; /* Number of unused bytes on the page */
50617 int top; /* First byte of the cell content area */
50618 int iCellFirst; /* First allowable cell or freeblock offset */
50619 int iCellLast; /* Last possible cell or freeblock offset */
50621 pBt = pPage->pBt;
50623 hdr = pPage->hdrOffset;
50624 data = pPage->aData;
50625 if( decodeFlags(pPage, data[hdr]) ) return SQLITE_CORRUPT_BKPT;
50626 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
50627 pPage->maskPage = (u16)(pBt->pageSize - 1);
50628 pPage->nOverflow = 0;
50629 usableSize = pBt->usableSize;
50630 pPage->cellOffset = cellOffset = hdr + 12 - 4*pPage->leaf;
50631 pPage->aDataEnd = &data[usableSize];
50632 pPage->aCellIdx = &data[cellOffset];
50633 top = get2byteNotZero(&data[hdr+5]);
50634 pPage->nCell = get2byte(&data[hdr+3]);
50635 if( pPage->nCell>MX_CELL(pBt) ){
50636 /* To many cells for a single page. The page must be corrupt */
50637 return SQLITE_CORRUPT_BKPT;
50639 testcase( pPage->nCell==MX_CELL(pBt) );
50641 /* A malformed database page might cause us to read past the end
50642 ** of page when parsing a cell.
50644 ** The following block of code checks early to see if a cell extends
50645 ** past the end of a page boundary and causes SQLITE_CORRUPT to be
50646 ** returned if it does.
50648 iCellFirst = cellOffset + 2*pPage->nCell;
50649 iCellLast = usableSize - 4;
50650 #if defined(SQLITE_ENABLE_OVERSIZE_CELL_CHECK)
50652 int i; /* Index into the cell pointer array */
50653 int sz; /* Size of a cell */
50655 if( !pPage->leaf ) iCellLast--;
50656 for(i=0; i<pPage->nCell; i++){
50657 pc = get2byte(&data[cellOffset+i*2]);
50658 testcase( pc==iCellFirst );
50659 testcase( pc==iCellLast );
50660 if( pc<iCellFirst || pc>iCellLast ){
50661 return SQLITE_CORRUPT_BKPT;
50663 sz = cellSizePtr(pPage, &data[pc]);
50664 testcase( pc+sz==usableSize );
50665 if( pc+sz>usableSize ){
50666 return SQLITE_CORRUPT_BKPT;
50669 if( !pPage->leaf ) iCellLast++;
50671 #endif
50673 /* Compute the total free space on the page */
50674 pc = get2byte(&data[hdr+1]);
50675 nFree = data[hdr+7] + top;
50676 while( pc>0 ){
50677 u16 next, size;
50678 if( pc<iCellFirst || pc>iCellLast ){
50679 /* Start of free block is off the page */
50680 return SQLITE_CORRUPT_BKPT;
50682 next = get2byte(&data[pc]);
50683 size = get2byte(&data[pc+2]);
50684 if( (next>0 && next<=pc+size+3) || pc+size>usableSize ){
50685 /* Free blocks must be in ascending order. And the last byte of
50686 ** the free-block must lie on the database page. */
50687 return SQLITE_CORRUPT_BKPT;
50689 nFree = nFree + size;
50690 pc = next;
50693 /* At this point, nFree contains the sum of the offset to the start
50694 ** of the cell-content area plus the number of free bytes within
50695 ** the cell-content area. If this is greater than the usable-size
50696 ** of the page, then the page must be corrupted. This check also
50697 ** serves to verify that the offset to the start of the cell-content
50698 ** area, according to the page header, lies within the page.
50700 if( nFree>usableSize ){
50701 return SQLITE_CORRUPT_BKPT;
50703 pPage->nFree = (u16)(nFree - iCellFirst);
50704 pPage->isInit = 1;
50706 return SQLITE_OK;
50710 ** Set up a raw page so that it looks like a database page holding
50711 ** no entries.
50713 static void zeroPage(MemPage *pPage, int flags){
50714 unsigned char *data = pPage->aData;
50715 BtShared *pBt = pPage->pBt;
50716 u8 hdr = pPage->hdrOffset;
50717 u16 first;
50719 assert( sqlite3PagerPagenumber(pPage->pDbPage)==pPage->pgno );
50720 assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
50721 assert( sqlite3PagerGetData(pPage->pDbPage) == data );
50722 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
50723 assert( sqlite3_mutex_held(pBt->mutex) );
50724 if( pBt->btsFlags & BTS_SECURE_DELETE ){
50725 memset(&data[hdr], 0, pBt->usableSize - hdr);
50727 data[hdr] = (char)flags;
50728 first = hdr + 8 + 4*((flags&PTF_LEAF)==0 ?1:0);
50729 memset(&data[hdr+1], 0, 4);
50730 data[hdr+7] = 0;
50731 put2byte(&data[hdr+5], pBt->usableSize);
50732 pPage->nFree = (u16)(pBt->usableSize - first);
50733 decodeFlags(pPage, flags);
50734 pPage->hdrOffset = hdr;
50735 pPage->cellOffset = first;
50736 pPage->aDataEnd = &data[pBt->usableSize];
50737 pPage->aCellIdx = &data[first];
50738 pPage->nOverflow = 0;
50739 assert( pBt->pageSize>=512 && pBt->pageSize<=65536 );
50740 pPage->maskPage = (u16)(pBt->pageSize - 1);
50741 pPage->nCell = 0;
50742 pPage->isInit = 1;
50747 ** Convert a DbPage obtained from the pager into a MemPage used by
50748 ** the btree layer.
50750 static MemPage *btreePageFromDbPage(DbPage *pDbPage, Pgno pgno, BtShared *pBt){
50751 MemPage *pPage = (MemPage*)sqlite3PagerGetExtra(pDbPage);
50752 pPage->aData = sqlite3PagerGetData(pDbPage);
50753 pPage->pDbPage = pDbPage;
50754 pPage->pBt = pBt;
50755 pPage->pgno = pgno;
50756 pPage->hdrOffset = pPage->pgno==1 ? 100 : 0;
50757 return pPage;
50761 ** Get a page from the pager. Initialize the MemPage.pBt and
50762 ** MemPage.aData elements if needed.
50764 ** If the noContent flag is set, it means that we do not care about
50765 ** the content of the page at this time. So do not go to the disk
50766 ** to fetch the content. Just fill in the content with zeros for now.
50767 ** If in the future we call sqlite3PagerWrite() on this page, that
50768 ** means we have started to be concerned about content and the disk
50769 ** read should occur at that point.
50771 static int btreeGetPage(
50772 BtShared *pBt, /* The btree */
50773 Pgno pgno, /* Number of the page to fetch */
50774 MemPage **ppPage, /* Return the page in this parameter */
50775 int noContent /* Do not load page content if true */
50777 int rc;
50778 DbPage *pDbPage;
50780 assert( sqlite3_mutex_held(pBt->mutex) );
50781 rc = sqlite3PagerAcquire(pBt->pPager, pgno, (DbPage**)&pDbPage, noContent);
50782 if( rc ) return rc;
50783 *ppPage = btreePageFromDbPage(pDbPage, pgno, pBt);
50784 return SQLITE_OK;
50788 ** Retrieve a page from the pager cache. If the requested page is not
50789 ** already in the pager cache return NULL. Initialize the MemPage.pBt and
50790 ** MemPage.aData elements if needed.
50792 static MemPage *btreePageLookup(BtShared *pBt, Pgno pgno){
50793 DbPage *pDbPage;
50794 assert( sqlite3_mutex_held(pBt->mutex) );
50795 pDbPage = sqlite3PagerLookup(pBt->pPager, pgno);
50796 if( pDbPage ){
50797 return btreePageFromDbPage(pDbPage, pgno, pBt);
50799 return 0;
50803 ** Return the size of the database file in pages. If there is any kind of
50804 ** error, return ((unsigned int)-1).
50806 static Pgno btreePagecount(BtShared *pBt){
50807 return pBt->nPage;
50809 SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
50810 assert( sqlite3BtreeHoldsMutex(p) );
50811 assert( ((p->pBt->nPage)&0x8000000)==0 );
50812 return (int)btreePagecount(p->pBt);
50816 ** Get a page from the pager and initialize it. This routine is just a
50817 ** convenience wrapper around separate calls to btreeGetPage() and
50818 ** btreeInitPage().
50820 ** If an error occurs, then the value *ppPage is set to is undefined. It
50821 ** may remain unchanged, or it may be set to an invalid value.
50823 static int getAndInitPage(
50824 BtShared *pBt, /* The database file */
50825 Pgno pgno, /* Number of the page to get */
50826 MemPage **ppPage /* Write the page pointer here */
50828 int rc;
50829 assert( sqlite3_mutex_held(pBt->mutex) );
50831 if( pgno>btreePagecount(pBt) ){
50832 rc = SQLITE_CORRUPT_BKPT;
50833 }else{
50834 rc = btreeGetPage(pBt, pgno, ppPage, 0);
50835 if( rc==SQLITE_OK ){
50836 rc = btreeInitPage(*ppPage);
50837 if( rc!=SQLITE_OK ){
50838 releasePage(*ppPage);
50843 testcase( pgno==0 );
50844 assert( pgno!=0 || rc==SQLITE_CORRUPT );
50845 return rc;
50849 ** Release a MemPage. This should be called once for each prior
50850 ** call to btreeGetPage.
50852 static void releasePage(MemPage *pPage){
50853 if( pPage ){
50854 assert( pPage->aData );
50855 assert( pPage->pBt );
50856 assert( sqlite3PagerGetExtra(pPage->pDbPage) == (void*)pPage );
50857 assert( sqlite3PagerGetData(pPage->pDbPage)==pPage->aData );
50858 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50859 sqlite3PagerUnref(pPage->pDbPage);
50864 ** During a rollback, when the pager reloads information into the cache
50865 ** so that the cache is restored to its original state at the start of
50866 ** the transaction, for each page restored this routine is called.
50868 ** This routine needs to reset the extra data section at the end of the
50869 ** page to agree with the restored data.
50871 static void pageReinit(DbPage *pData){
50872 MemPage *pPage;
50873 pPage = (MemPage *)sqlite3PagerGetExtra(pData);
50874 assert( sqlite3PagerPageRefcount(pData)>0 );
50875 if( pPage->isInit ){
50876 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
50877 pPage->isInit = 0;
50878 if( sqlite3PagerPageRefcount(pData)>1 ){
50879 /* pPage might not be a btree page; it might be an overflow page
50880 ** or ptrmap page or a free page. In those cases, the following
50881 ** call to btreeInitPage() will likely return SQLITE_CORRUPT.
50882 ** But no harm is done by this. And it is very important that
50883 ** btreeInitPage() be called on every btree page so we make
50884 ** the call for every page that comes in for re-initing. */
50885 btreeInitPage(pPage);
50891 ** Invoke the busy handler for a btree.
50893 static int btreeInvokeBusyHandler(void *pArg){
50894 BtShared *pBt = (BtShared*)pArg;
50895 assert( pBt->db );
50896 assert( sqlite3_mutex_held(pBt->db->mutex) );
50897 return sqlite3InvokeBusyHandler(&pBt->db->busyHandler);
50901 ** Open a database file.
50903 ** zFilename is the name of the database file. If zFilename is NULL
50904 ** then an ephemeral database is created. The ephemeral database might
50905 ** be exclusively in memory, or it might use a disk-based memory cache.
50906 ** Either way, the ephemeral database will be automatically deleted
50907 ** when sqlite3BtreeClose() is called.
50909 ** If zFilename is ":memory:" then an in-memory database is created
50910 ** that is automatically destroyed when it is closed.
50912 ** The "flags" parameter is a bitmask that might contain bits
50913 ** BTREE_OMIT_JOURNAL and/or BTREE_NO_READLOCK. The BTREE_NO_READLOCK
50914 ** bit is also set if the SQLITE_NoReadlock flags is set in db->flags.
50915 ** These flags are passed through into sqlite3PagerOpen() and must
50916 ** be the same values as PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK.
50918 ** If the database is already opened in the same database connection
50919 ** and we are in shared cache mode, then the open will fail with an
50920 ** SQLITE_CONSTRAINT error. We cannot allow two or more BtShared
50921 ** objects in the same database connection since doing so will lead
50922 ** to problems with locking.
50924 SQLITE_PRIVATE int sqlite3BtreeOpen(
50925 sqlite3_vfs *pVfs, /* VFS to use for this b-tree */
50926 const char *zFilename, /* Name of the file containing the BTree database */
50927 sqlite3 *db, /* Associated database handle */
50928 Btree **ppBtree, /* Pointer to new Btree object written here */
50929 int flags, /* Options */
50930 int vfsFlags /* Flags passed through to sqlite3_vfs.xOpen() */
50932 BtShared *pBt = 0; /* Shared part of btree structure */
50933 Btree *p; /* Handle to return */
50934 sqlite3_mutex *mutexOpen = 0; /* Prevents a race condition. Ticket #3537 */
50935 int rc = SQLITE_OK; /* Result code from this function */
50936 u8 nReserve; /* Byte of unused space on each page */
50937 unsigned char zDbHeader[100]; /* Database header content */
50939 /* True if opening an ephemeral, temporary database */
50940 const int isTempDb = zFilename==0 || zFilename[0]==0;
50942 /* Set the variable isMemdb to true for an in-memory database, or
50943 ** false for a file-based database.
50945 #ifdef SQLITE_OMIT_MEMORYDB
50946 const int isMemdb = 0;
50947 #else
50948 const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
50949 || (isTempDb && sqlite3TempInMemory(db));
50950 #endif
50952 assert( db!=0 );
50953 assert( pVfs!=0 );
50954 assert( sqlite3_mutex_held(db->mutex) );
50955 assert( (flags&0xff)==flags ); /* flags fit in 8 bits */
50957 /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */
50958 assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 );
50960 /* A BTREE_SINGLE database is always a temporary and/or ephemeral */
50961 assert( (flags & BTREE_SINGLE)==0 || isTempDb );
50963 if( db->flags & SQLITE_NoReadlock ){
50964 flags |= BTREE_NO_READLOCK;
50966 if( isMemdb ){
50967 flags |= BTREE_MEMORY;
50969 if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){
50970 vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
50972 p = sqlite3MallocZero(sizeof(Btree));
50973 if( !p ){
50974 return SQLITE_NOMEM;
50976 p->inTrans = TRANS_NONE;
50977 p->db = db;
50978 #ifndef SQLITE_OMIT_SHARED_CACHE
50979 p->lock.pBtree = p;
50980 p->lock.iTable = 1;
50981 #endif
50983 #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
50985 ** If this Btree is a candidate for shared cache, try to find an
50986 ** existing BtShared object that we can share with
50988 if( isMemdb==0 && isTempDb==0 ){
50989 if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
50990 int nFullPathname = pVfs->mxPathname+1;
50991 char *zFullPathname = sqlite3Malloc(nFullPathname);
50992 MUTEX_LOGIC( sqlite3_mutex *mutexShared; )
50993 p->sharable = 1;
50994 if( !zFullPathname ){
50995 sqlite3_free(p);
50996 return SQLITE_NOMEM;
50998 rc = sqlite3OsFullPathname(pVfs, zFilename, nFullPathname, zFullPathname);
50999 if( rc ){
51000 sqlite3_free(zFullPathname);
51001 sqlite3_free(p);
51002 return rc;
51004 #if SQLITE_THREADSAFE
51005 mutexOpen = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_OPEN);
51006 sqlite3_mutex_enter(mutexOpen);
51007 mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
51008 sqlite3_mutex_enter(mutexShared);
51009 #endif
51010 for(pBt=GLOBAL(BtShared*,sqlite3SharedCacheList); pBt; pBt=pBt->pNext){
51011 assert( pBt->nRef>0 );
51012 if( 0==strcmp(zFullPathname, sqlite3PagerFilename(pBt->pPager))
51013 && sqlite3PagerVfs(pBt->pPager)==pVfs ){
51014 int iDb;
51015 for(iDb=db->nDb-1; iDb>=0; iDb--){
51016 Btree *pExisting = db->aDb[iDb].pBt;
51017 if( pExisting && pExisting->pBt==pBt ){
51018 sqlite3_mutex_leave(mutexShared);
51019 sqlite3_mutex_leave(mutexOpen);
51020 sqlite3_free(zFullPathname);
51021 sqlite3_free(p);
51022 return SQLITE_CONSTRAINT;
51025 p->pBt = pBt;
51026 pBt->nRef++;
51027 break;
51030 sqlite3_mutex_leave(mutexShared);
51031 sqlite3_free(zFullPathname);
51033 #ifdef SQLITE_DEBUG
51034 else{
51035 /* In debug mode, we mark all persistent databases as sharable
51036 ** even when they are not. This exercises the locking code and
51037 ** gives more opportunity for asserts(sqlite3_mutex_held())
51038 ** statements to find locking problems.
51040 p->sharable = 1;
51042 #endif
51044 #endif
51045 if( pBt==0 ){
51047 ** The following asserts make sure that structures used by the btree are
51048 ** the right size. This is to guard against size changes that result
51049 ** when compiling on a different architecture.
51051 assert( sizeof(i64)==8 || sizeof(i64)==4 );
51052 assert( sizeof(u64)==8 || sizeof(u64)==4 );
51053 assert( sizeof(u32)==4 );
51054 assert( sizeof(u16)==2 );
51055 assert( sizeof(Pgno)==4 );
51057 pBt = sqlite3MallocZero( sizeof(*pBt) );
51058 if( pBt==0 ){
51059 rc = SQLITE_NOMEM;
51060 goto btree_open_out;
51062 rc = sqlite3PagerOpen(pVfs, &pBt->pPager, zFilename,
51063 EXTRA_SIZE, flags, vfsFlags, pageReinit);
51064 if( rc==SQLITE_OK ){
51065 rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader);
51067 if( rc!=SQLITE_OK ){
51068 goto btree_open_out;
51070 pBt->openFlags = (u8)flags;
51071 pBt->db = db;
51072 sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt);
51073 p->pBt = pBt;
51075 pBt->pCursor = 0;
51076 pBt->pPage1 = 0;
51077 if( sqlite3PagerIsreadonly(pBt->pPager) ) pBt->btsFlags |= BTS_READ_ONLY;
51078 #ifdef SQLITE_SECURE_DELETE
51079 pBt->btsFlags |= BTS_SECURE_DELETE;
51080 #endif
51081 pBt->pageSize = (zDbHeader[16]<<8) | (zDbHeader[17]<<16);
51082 if( pBt->pageSize<512 || pBt->pageSize>SQLITE_MAX_PAGE_SIZE
51083 || ((pBt->pageSize-1)&pBt->pageSize)!=0 ){
51084 pBt->pageSize = 0;
51085 #ifndef SQLITE_OMIT_AUTOVACUUM
51086 /* If the magic name ":memory:" will create an in-memory database, then
51087 ** leave the autoVacuum mode at 0 (do not auto-vacuum), even if
51088 ** SQLITE_DEFAULT_AUTOVACUUM is true. On the other hand, if
51089 ** SQLITE_OMIT_MEMORYDB has been defined, then ":memory:" is just a
51090 ** regular file-name. In this case the auto-vacuum applies as per normal.
51092 if( zFilename && !isMemdb ){
51093 pBt->autoVacuum = (SQLITE_DEFAULT_AUTOVACUUM ? 1 : 0);
51094 pBt->incrVacuum = (SQLITE_DEFAULT_AUTOVACUUM==2 ? 1 : 0);
51096 #endif
51097 nReserve = 0;
51098 }else{
51099 nReserve = zDbHeader[20];
51100 pBt->btsFlags |= BTS_PAGESIZE_FIXED;
51101 #ifndef SQLITE_OMIT_AUTOVACUUM
51102 pBt->autoVacuum = (get4byte(&zDbHeader[36 + 4*4])?1:0);
51103 pBt->incrVacuum = (get4byte(&zDbHeader[36 + 7*4])?1:0);
51104 #endif
51106 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
51107 if( rc ) goto btree_open_out;
51108 pBt->usableSize = pBt->pageSize - nReserve;
51109 assert( (pBt->pageSize & 7)==0 ); /* 8-byte alignment of pageSize */
51111 #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
51112 /* Add the new BtShared object to the linked list sharable BtShareds.
51114 if( p->sharable ){
51115 MUTEX_LOGIC( sqlite3_mutex *mutexShared; )
51116 pBt->nRef = 1;
51117 MUTEX_LOGIC( mutexShared = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);)
51118 if( SQLITE_THREADSAFE && sqlite3GlobalConfig.bCoreMutex ){
51119 pBt->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_FAST);
51120 if( pBt->mutex==0 ){
51121 rc = SQLITE_NOMEM;
51122 db->mallocFailed = 0;
51123 goto btree_open_out;
51126 sqlite3_mutex_enter(mutexShared);
51127 pBt->pNext = GLOBAL(BtShared*,sqlite3SharedCacheList);
51128 GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt;
51129 sqlite3_mutex_leave(mutexShared);
51131 #endif
51134 #if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
51135 /* If the new Btree uses a sharable pBtShared, then link the new
51136 ** Btree into the list of all sharable Btrees for the same connection.
51137 ** The list is kept in ascending order by pBt address.
51139 if( p->sharable ){
51140 int i;
51141 Btree *pSib;
51142 for(i=0; i<db->nDb; i++){
51143 if( (pSib = db->aDb[i].pBt)!=0 && pSib->sharable ){
51144 while( pSib->pPrev ){ pSib = pSib->pPrev; }
51145 if( p->pBt<pSib->pBt ){
51146 p->pNext = pSib;
51147 p->pPrev = 0;
51148 pSib->pPrev = p;
51149 }else{
51150 while( pSib->pNext && pSib->pNext->pBt<p->pBt ){
51151 pSib = pSib->pNext;
51153 p->pNext = pSib->pNext;
51154 p->pPrev = pSib;
51155 if( p->pNext ){
51156 p->pNext->pPrev = p;
51158 pSib->pNext = p;
51160 break;
51164 #endif
51165 *ppBtree = p;
51167 btree_open_out:
51168 if( rc!=SQLITE_OK ){
51169 if( pBt && pBt->pPager ){
51170 sqlite3PagerClose(pBt->pPager);
51172 sqlite3_free(pBt);
51173 sqlite3_free(p);
51174 *ppBtree = 0;
51175 }else{
51176 /* If the B-Tree was successfully opened, set the pager-cache size to the
51177 ** default value. Except, when opening on an existing shared pager-cache,
51178 ** do not change the pager-cache size.
51180 if( sqlite3BtreeSchema(p, 0, 0)==0 ){
51181 sqlite3PagerSetCachesize(p->pBt->pPager, SQLITE_DEFAULT_CACHE_SIZE);
51184 if( mutexOpen ){
51185 assert( sqlite3_mutex_held(mutexOpen) );
51186 sqlite3_mutex_leave(mutexOpen);
51188 return rc;
51192 ** Decrement the BtShared.nRef counter. When it reaches zero,
51193 ** remove the BtShared structure from the sharing list. Return
51194 ** true if the BtShared.nRef counter reaches zero and return
51195 ** false if it is still positive.
51197 static int removeFromSharingList(BtShared *pBt){
51198 #ifndef SQLITE_OMIT_SHARED_CACHE
51199 MUTEX_LOGIC( sqlite3_mutex *pMaster; )
51200 BtShared *pList;
51201 int removed = 0;
51203 assert( sqlite3_mutex_notheld(pBt->mutex) );
51204 MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
51205 sqlite3_mutex_enter(pMaster);
51206 pBt->nRef--;
51207 if( pBt->nRef<=0 ){
51208 if( GLOBAL(BtShared*,sqlite3SharedCacheList)==pBt ){
51209 GLOBAL(BtShared*,sqlite3SharedCacheList) = pBt->pNext;
51210 }else{
51211 pList = GLOBAL(BtShared*,sqlite3SharedCacheList);
51212 while( ALWAYS(pList) && pList->pNext!=pBt ){
51213 pList=pList->pNext;
51215 if( ALWAYS(pList) ){
51216 pList->pNext = pBt->pNext;
51219 if( SQLITE_THREADSAFE ){
51220 sqlite3_mutex_free(pBt->mutex);
51222 removed = 1;
51224 sqlite3_mutex_leave(pMaster);
51225 return removed;
51226 #else
51227 return 1;
51228 #endif
51232 ** Make sure pBt->pTmpSpace points to an allocation of
51233 ** MX_CELL_SIZE(pBt) bytes.
51235 static void allocateTempSpace(BtShared *pBt){
51236 if( !pBt->pTmpSpace ){
51237 pBt->pTmpSpace = sqlite3PageMalloc( pBt->pageSize );
51242 ** Free the pBt->pTmpSpace allocation
51244 static void freeTempSpace(BtShared *pBt){
51245 sqlite3PageFree( pBt->pTmpSpace);
51246 pBt->pTmpSpace = 0;
51250 ** Close an open database and invalidate all cursors.
51252 SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){
51253 BtShared *pBt = p->pBt;
51254 BtCursor *pCur;
51256 /* Close all cursors opened via this handle. */
51257 assert( sqlite3_mutex_held(p->db->mutex) );
51258 sqlite3BtreeEnter(p);
51259 pCur = pBt->pCursor;
51260 while( pCur ){
51261 BtCursor *pTmp = pCur;
51262 pCur = pCur->pNext;
51263 if( pTmp->pBtree==p ){
51264 sqlite3BtreeCloseCursor(pTmp);
51268 /* Rollback any active transaction and free the handle structure.
51269 ** The call to sqlite3BtreeRollback() drops any table-locks held by
51270 ** this handle.
51272 sqlite3BtreeRollback(p);
51273 sqlite3BtreeLeave(p);
51275 /* If there are still other outstanding references to the shared-btree
51276 ** structure, return now. The remainder of this procedure cleans
51277 ** up the shared-btree.
51279 assert( p->wantToLock==0 && p->locked==0 );
51280 if( !p->sharable || removeFromSharingList(pBt) ){
51281 /* The pBt is no longer on the sharing list, so we can access
51282 ** it without having to hold the mutex.
51284 ** Clean out and delete the BtShared object.
51286 assert( !pBt->pCursor );
51287 sqlite3PagerClose(pBt->pPager);
51288 if( pBt->xFreeSchema && pBt->pSchema ){
51289 pBt->xFreeSchema(pBt->pSchema);
51291 sqlite3DbFree(0, pBt->pSchema);
51292 freeTempSpace(pBt);
51293 sqlite3_free(pBt);
51296 #ifndef SQLITE_OMIT_SHARED_CACHE
51297 assert( p->wantToLock==0 );
51298 assert( p->locked==0 );
51299 if( p->pPrev ) p->pPrev->pNext = p->pNext;
51300 if( p->pNext ) p->pNext->pPrev = p->pPrev;
51301 #endif
51303 sqlite3_free(p);
51304 return SQLITE_OK;
51308 ** Change the limit on the number of pages allowed in the cache.
51310 ** The maximum number of cache pages is set to the absolute
51311 ** value of mxPage. If mxPage is negative, the pager will
51312 ** operate asynchronously - it will not stop to do fsync()s
51313 ** to insure data is written to the disk surface before
51314 ** continuing. Transactions still work if synchronous is off,
51315 ** and the database cannot be corrupted if this program
51316 ** crashes. But if the operating system crashes or there is
51317 ** an abrupt power failure when synchronous is off, the database
51318 ** could be left in an inconsistent and unrecoverable state.
51319 ** Synchronous is on by default so database corruption is not
51320 ** normally a worry.
51322 SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree *p, int mxPage){
51323 BtShared *pBt = p->pBt;
51324 assert( sqlite3_mutex_held(p->db->mutex) );
51325 sqlite3BtreeEnter(p);
51326 sqlite3PagerSetCachesize(pBt->pPager, mxPage);
51327 sqlite3BtreeLeave(p);
51328 return SQLITE_OK;
51332 ** Change the way data is synced to disk in order to increase or decrease
51333 ** how well the database resists damage due to OS crashes and power
51334 ** failures. Level 1 is the same as asynchronous (no syncs() occur and
51335 ** there is a high probability of damage) Level 2 is the default. There
51336 ** is a very low but non-zero probability of damage. Level 3 reduces the
51337 ** probability of damage to near zero but with a write performance reduction.
51339 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
51340 SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(
51341 Btree *p, /* The btree to set the safety level on */
51342 int level, /* PRAGMA synchronous. 1=OFF, 2=NORMAL, 3=FULL */
51343 int fullSync, /* PRAGMA fullfsync. */
51344 int ckptFullSync /* PRAGMA checkpoint_fullfync */
51346 BtShared *pBt = p->pBt;
51347 assert( sqlite3_mutex_held(p->db->mutex) );
51348 assert( level>=1 && level<=3 );
51349 sqlite3BtreeEnter(p);
51350 sqlite3PagerSetSafetyLevel(pBt->pPager, level, fullSync, ckptFullSync);
51351 sqlite3BtreeLeave(p);
51352 return SQLITE_OK;
51354 #endif
51357 ** Return TRUE if the given btree is set to safety level 1. In other
51358 ** words, return TRUE if no sync() occurs on the disk files.
51360 SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree *p){
51361 BtShared *pBt = p->pBt;
51362 int rc;
51363 assert( sqlite3_mutex_held(p->db->mutex) );
51364 sqlite3BtreeEnter(p);
51365 assert( pBt && pBt->pPager );
51366 rc = sqlite3PagerNosync(pBt->pPager);
51367 sqlite3BtreeLeave(p);
51368 return rc;
51372 ** Change the default pages size and the number of reserved bytes per page.
51373 ** Or, if the page size has already been fixed, return SQLITE_READONLY
51374 ** without changing anything.
51376 ** The page size must be a power of 2 between 512 and 65536. If the page
51377 ** size supplied does not meet this constraint then the page size is not
51378 ** changed.
51380 ** Page sizes are constrained to be a power of two so that the region
51381 ** of the database file used for locking (beginning at PENDING_BYTE,
51382 ** the first byte past the 1GB boundary, 0x40000000) needs to occur
51383 ** at the beginning of a page.
51385 ** If parameter nReserve is less than zero, then the number of reserved
51386 ** bytes per page is left unchanged.
51388 ** If the iFix!=0 then the BTS_PAGESIZE_FIXED flag is set so that the page size
51389 ** and autovacuum mode can no longer be changed.
51391 SQLITE_PRIVATE int sqlite3BtreeSetPageSize(Btree *p, int pageSize, int nReserve, int iFix){
51392 int rc = SQLITE_OK;
51393 BtShared *pBt = p->pBt;
51394 assert( nReserve>=-1 && nReserve<=255 );
51395 sqlite3BtreeEnter(p);
51396 if( pBt->btsFlags & BTS_PAGESIZE_FIXED ){
51397 sqlite3BtreeLeave(p);
51398 return SQLITE_READONLY;
51400 if( nReserve<0 ){
51401 nReserve = pBt->pageSize - pBt->usableSize;
51403 assert( nReserve>=0 && nReserve<=255 );
51404 if( pageSize>=512 && pageSize<=SQLITE_MAX_PAGE_SIZE &&
51405 ((pageSize-1)&pageSize)==0 ){
51406 assert( (pageSize & 7)==0 );
51407 assert( !pBt->pPage1 && !pBt->pCursor );
51408 pBt->pageSize = (u32)pageSize;
51409 freeTempSpace(pBt);
51411 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize, nReserve);
51412 pBt->usableSize = pBt->pageSize - (u16)nReserve;
51413 if( iFix ) pBt->btsFlags |= BTS_PAGESIZE_FIXED;
51414 sqlite3BtreeLeave(p);
51415 return rc;
51419 ** Return the currently defined page size
51421 SQLITE_PRIVATE int sqlite3BtreeGetPageSize(Btree *p){
51422 return p->pBt->pageSize;
51425 #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM)
51427 ** Return the number of bytes of space at the end of every page that
51428 ** are intentually left unused. This is the "reserved" space that is
51429 ** sometimes used by extensions.
51431 SQLITE_PRIVATE int sqlite3BtreeGetReserve(Btree *p){
51432 int n;
51433 sqlite3BtreeEnter(p);
51434 n = p->pBt->pageSize - p->pBt->usableSize;
51435 sqlite3BtreeLeave(p);
51436 return n;
51440 ** Set the maximum page count for a database if mxPage is positive.
51441 ** No changes are made if mxPage is 0 or negative.
51442 ** Regardless of the value of mxPage, return the maximum page count.
51444 SQLITE_PRIVATE int sqlite3BtreeMaxPageCount(Btree *p, int mxPage){
51445 int n;
51446 sqlite3BtreeEnter(p);
51447 n = sqlite3PagerMaxPageCount(p->pBt->pPager, mxPage);
51448 sqlite3BtreeLeave(p);
51449 return n;
51453 ** Set the BTS_SECURE_DELETE flag if newFlag is 0 or 1. If newFlag is -1,
51454 ** then make no changes. Always return the value of the BTS_SECURE_DELETE
51455 ** setting after the change.
51457 SQLITE_PRIVATE int sqlite3BtreeSecureDelete(Btree *p, int newFlag){
51458 int b;
51459 if( p==0 ) return 0;
51460 sqlite3BtreeEnter(p);
51461 if( newFlag>=0 ){
51462 p->pBt->btsFlags &= ~BTS_SECURE_DELETE;
51463 if( newFlag ) p->pBt->btsFlags |= BTS_SECURE_DELETE;
51465 b = (p->pBt->btsFlags & BTS_SECURE_DELETE)!=0;
51466 sqlite3BtreeLeave(p);
51467 return b;
51469 #endif /* !defined(SQLITE_OMIT_PAGER_PRAGMAS) || !defined(SQLITE_OMIT_VACUUM) */
51472 ** Change the 'auto-vacuum' property of the database. If the 'autoVacuum'
51473 ** parameter is non-zero, then auto-vacuum mode is enabled. If zero, it
51474 ** is disabled. The default value for the auto-vacuum property is
51475 ** determined by the SQLITE_DEFAULT_AUTOVACUUM macro.
51477 SQLITE_PRIVATE int sqlite3BtreeSetAutoVacuum(Btree *p, int autoVacuum){
51478 #ifdef SQLITE_OMIT_AUTOVACUUM
51479 return SQLITE_READONLY;
51480 #else
51481 BtShared *pBt = p->pBt;
51482 int rc = SQLITE_OK;
51483 u8 av = (u8)autoVacuum;
51485 sqlite3BtreeEnter(p);
51486 if( (pBt->btsFlags & BTS_PAGESIZE_FIXED)!=0 && (av ?1:0)!=pBt->autoVacuum ){
51487 rc = SQLITE_READONLY;
51488 }else{
51489 pBt->autoVacuum = av ?1:0;
51490 pBt->incrVacuum = av==2 ?1:0;
51492 sqlite3BtreeLeave(p);
51493 return rc;
51494 #endif
51498 ** Return the value of the 'auto-vacuum' property. If auto-vacuum is
51499 ** enabled 1 is returned. Otherwise 0.
51501 SQLITE_PRIVATE int sqlite3BtreeGetAutoVacuum(Btree *p){
51502 #ifdef SQLITE_OMIT_AUTOVACUUM
51503 return BTREE_AUTOVACUUM_NONE;
51504 #else
51505 int rc;
51506 sqlite3BtreeEnter(p);
51507 rc = (
51508 (!p->pBt->autoVacuum)?BTREE_AUTOVACUUM_NONE:
51509 (!p->pBt->incrVacuum)?BTREE_AUTOVACUUM_FULL:
51510 BTREE_AUTOVACUUM_INCR
51512 sqlite3BtreeLeave(p);
51513 return rc;
51514 #endif
51519 ** Get a reference to pPage1 of the database file. This will
51520 ** also acquire a readlock on that file.
51522 ** SQLITE_OK is returned on success. If the file is not a
51523 ** well-formed database file, then SQLITE_CORRUPT is returned.
51524 ** SQLITE_BUSY is returned if the database is locked. SQLITE_NOMEM
51525 ** is returned if we run out of memory.
51527 static int lockBtree(BtShared *pBt){
51528 int rc; /* Result code from subfunctions */
51529 MemPage *pPage1; /* Page 1 of the database file */
51530 int nPage; /* Number of pages in the database */
51531 int nPageFile = 0; /* Number of pages in the database file */
51532 int nPageHeader; /* Number of pages in the database according to hdr */
51534 assert( sqlite3_mutex_held(pBt->mutex) );
51535 assert( pBt->pPage1==0 );
51536 rc = sqlite3PagerSharedLock(pBt->pPager);
51537 if( rc!=SQLITE_OK ) return rc;
51538 rc = btreeGetPage(pBt, 1, &pPage1, 0);
51539 if( rc!=SQLITE_OK ) return rc;
51541 /* Do some checking to help insure the file we opened really is
51542 ** a valid database file.
51544 nPage = nPageHeader = get4byte(28+(u8*)pPage1->aData);
51545 sqlite3PagerPagecount(pBt->pPager, &nPageFile);
51546 if( nPage==0 || memcmp(24+(u8*)pPage1->aData, 92+(u8*)pPage1->aData,4)!=0 ){
51547 nPage = nPageFile;
51549 if( nPage>0 ){
51550 u32 pageSize;
51551 u32 usableSize;
51552 u8 *page1 = pPage1->aData;
51553 rc = SQLITE_NOTADB;
51554 if( memcmp(page1, zMagicHeader, 16)!=0 ){
51555 goto page1_init_failed;
51558 #ifdef SQLITE_OMIT_WAL
51559 if( page1[18]>1 ){
51560 pBt->btsFlags |= BTS_READ_ONLY;
51562 if( page1[19]>1 ){
51563 goto page1_init_failed;
51565 #else
51566 if( page1[18]>2 ){
51567 pBt->btsFlags |= BTS_READ_ONLY;
51569 if( page1[19]>2 ){
51570 goto page1_init_failed;
51573 /* If the write version is set to 2, this database should be accessed
51574 ** in WAL mode. If the log is not already open, open it now. Then
51575 ** return SQLITE_OK and return without populating BtShared.pPage1.
51576 ** The caller detects this and calls this function again. This is
51577 ** required as the version of page 1 currently in the page1 buffer
51578 ** may not be the latest version - there may be a newer one in the log
51579 ** file.
51581 if( page1[19]==2 && (pBt->btsFlags & BTS_NO_WAL)==0 ){
51582 int isOpen = 0;
51583 rc = sqlite3PagerOpenWal(pBt->pPager, &isOpen);
51584 if( rc!=SQLITE_OK ){
51585 goto page1_init_failed;
51586 }else if( isOpen==0 ){
51587 releasePage(pPage1);
51588 return SQLITE_OK;
51590 rc = SQLITE_NOTADB;
51592 #endif
51594 /* The maximum embedded fraction must be exactly 25%. And the minimum
51595 ** embedded fraction must be 12.5% for both leaf-data and non-leaf-data.
51596 ** The original design allowed these amounts to vary, but as of
51597 ** version 3.6.0, we require them to be fixed.
51599 if( memcmp(&page1[21], "\100\040\040",3)!=0 ){
51600 goto page1_init_failed;
51602 pageSize = (page1[16]<<8) | (page1[17]<<16);
51603 if( ((pageSize-1)&pageSize)!=0
51604 || pageSize>SQLITE_MAX_PAGE_SIZE
51605 || pageSize<=256
51607 goto page1_init_failed;
51609 assert( (pageSize & 7)==0 );
51610 usableSize = pageSize - page1[20];
51611 if( (u32)pageSize!=pBt->pageSize ){
51612 /* After reading the first page of the database assuming a page size
51613 ** of BtShared.pageSize, we have discovered that the page-size is
51614 ** actually pageSize. Unlock the database, leave pBt->pPage1 at
51615 ** zero and return SQLITE_OK. The caller will call this function
51616 ** again with the correct page-size.
51618 releasePage(pPage1);
51619 pBt->usableSize = usableSize;
51620 pBt->pageSize = pageSize;
51621 freeTempSpace(pBt);
51622 rc = sqlite3PagerSetPagesize(pBt->pPager, &pBt->pageSize,
51623 pageSize-usableSize);
51624 return rc;
51626 if( (pBt->db->flags & SQLITE_RecoveryMode)==0 && nPage>nPageFile ){
51627 rc = SQLITE_CORRUPT_BKPT;
51628 goto page1_init_failed;
51630 if( usableSize<480 ){
51631 goto page1_init_failed;
51633 pBt->pageSize = pageSize;
51634 pBt->usableSize = usableSize;
51635 #ifndef SQLITE_OMIT_AUTOVACUUM
51636 pBt->autoVacuum = (get4byte(&page1[36 + 4*4])?1:0);
51637 pBt->incrVacuum = (get4byte(&page1[36 + 7*4])?1:0);
51638 #endif
51641 /* maxLocal is the maximum amount of payload to store locally for
51642 ** a cell. Make sure it is small enough so that at least minFanout
51643 ** cells can will fit on one page. We assume a 10-byte page header.
51644 ** Besides the payload, the cell must store:
51645 ** 2-byte pointer to the cell
51646 ** 4-byte child pointer
51647 ** 9-byte nKey value
51648 ** 4-byte nData value
51649 ** 4-byte overflow page pointer
51650 ** So a cell consists of a 2-byte pointer, a header which is as much as
51651 ** 17 bytes long, 0 to N bytes of payload, and an optional 4 byte overflow
51652 ** page pointer.
51654 pBt->maxLocal = (u16)((pBt->usableSize-12)*64/255 - 23);
51655 pBt->minLocal = (u16)((pBt->usableSize-12)*32/255 - 23);
51656 pBt->maxLeaf = (u16)(pBt->usableSize - 35);
51657 pBt->minLeaf = (u16)((pBt->usableSize-12)*32/255 - 23);
51658 if( pBt->maxLocal>127 ){
51659 pBt->max1bytePayload = 127;
51660 }else{
51661 pBt->max1bytePayload = (u8)pBt->maxLocal;
51663 assert( pBt->maxLeaf + 23 <= MX_CELL_SIZE(pBt) );
51664 pBt->pPage1 = pPage1;
51665 pBt->nPage = nPage;
51666 return SQLITE_OK;
51668 page1_init_failed:
51669 releasePage(pPage1);
51670 pBt->pPage1 = 0;
51671 return rc;
51675 ** If there are no outstanding cursors and we are not in the middle
51676 ** of a transaction but there is a read lock on the database, then
51677 ** this routine unrefs the first page of the database file which
51678 ** has the effect of releasing the read lock.
51680 ** If there is a transaction in progress, this routine is a no-op.
51682 static void unlockBtreeIfUnused(BtShared *pBt){
51683 assert( sqlite3_mutex_held(pBt->mutex) );
51684 assert( pBt->pCursor==0 || pBt->inTransaction>TRANS_NONE );
51685 if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){
51686 assert( pBt->pPage1->aData );
51687 assert( sqlite3PagerRefcount(pBt->pPager)==1 );
51688 assert( pBt->pPage1->aData );
51689 releasePage(pBt->pPage1);
51690 pBt->pPage1 = 0;
51695 ** If pBt points to an empty file then convert that empty file
51696 ** into a new empty database by initializing the first page of
51697 ** the database.
51699 static int newDatabase(BtShared *pBt){
51700 MemPage *pP1;
51701 unsigned char *data;
51702 int rc;
51704 assert( sqlite3_mutex_held(pBt->mutex) );
51705 if( pBt->nPage>0 ){
51706 return SQLITE_OK;
51708 pP1 = pBt->pPage1;
51709 assert( pP1!=0 );
51710 data = pP1->aData;
51711 rc = sqlite3PagerWrite(pP1->pDbPage);
51712 if( rc ) return rc;
51713 memcpy(data, zMagicHeader, sizeof(zMagicHeader));
51714 assert( sizeof(zMagicHeader)==16 );
51715 data[16] = (u8)((pBt->pageSize>>8)&0xff);
51716 data[17] = (u8)((pBt->pageSize>>16)&0xff);
51717 data[18] = 1;
51718 data[19] = 1;
51719 assert( pBt->usableSize<=pBt->pageSize && pBt->usableSize+255>=pBt->pageSize);
51720 data[20] = (u8)(pBt->pageSize - pBt->usableSize);
51721 data[21] = 64;
51722 data[22] = 32;
51723 data[23] = 32;
51724 memset(&data[24], 0, 100-24);
51725 zeroPage(pP1, PTF_INTKEY|PTF_LEAF|PTF_LEAFDATA );
51726 pBt->btsFlags |= BTS_PAGESIZE_FIXED;
51727 #ifndef SQLITE_OMIT_AUTOVACUUM
51728 assert( pBt->autoVacuum==1 || pBt->autoVacuum==0 );
51729 assert( pBt->incrVacuum==1 || pBt->incrVacuum==0 );
51730 put4byte(&data[36 + 4*4], pBt->autoVacuum);
51731 put4byte(&data[36 + 7*4], pBt->incrVacuum);
51732 #endif
51733 pBt->nPage = 1;
51734 data[31] = 1;
51735 return SQLITE_OK;
51739 ** Attempt to start a new transaction. A write-transaction
51740 ** is started if the second argument is nonzero, otherwise a read-
51741 ** transaction. If the second argument is 2 or more and exclusive
51742 ** transaction is started, meaning that no other process is allowed
51743 ** to access the database. A preexisting transaction may not be
51744 ** upgraded to exclusive by calling this routine a second time - the
51745 ** exclusivity flag only works for a new transaction.
51747 ** A write-transaction must be started before attempting any
51748 ** changes to the database. None of the following routines
51749 ** will work unless a transaction is started first:
51751 ** sqlite3BtreeCreateTable()
51752 ** sqlite3BtreeCreateIndex()
51753 ** sqlite3BtreeClearTable()
51754 ** sqlite3BtreeDropTable()
51755 ** sqlite3BtreeInsert()
51756 ** sqlite3BtreeDelete()
51757 ** sqlite3BtreeUpdateMeta()
51759 ** If an initial attempt to acquire the lock fails because of lock contention
51760 ** and the database was previously unlocked, then invoke the busy handler
51761 ** if there is one. But if there was previously a read-lock, do not
51762 ** invoke the busy handler - just return SQLITE_BUSY. SQLITE_BUSY is
51763 ** returned when there is already a read-lock in order to avoid a deadlock.
51765 ** Suppose there are two processes A and B. A has a read lock and B has
51766 ** a reserved lock. B tries to promote to exclusive but is blocked because
51767 ** of A's read lock. A tries to promote to reserved but is blocked by B.
51768 ** One or the other of the two processes must give way or there can be
51769 ** no progress. By returning SQLITE_BUSY and not invoking the busy callback
51770 ** when A already has a read lock, we encourage A to give up and let B
51771 ** proceed.
51773 SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree *p, int wrflag){
51774 sqlite3 *pBlock = 0;
51775 BtShared *pBt = p->pBt;
51776 int rc = SQLITE_OK;
51778 sqlite3BtreeEnter(p);
51779 btreeIntegrity(p);
51781 /* If the btree is already in a write-transaction, or it
51782 ** is already in a read-transaction and a read-transaction
51783 ** is requested, this is a no-op.
51785 if( p->inTrans==TRANS_WRITE || (p->inTrans==TRANS_READ && !wrflag) ){
51786 goto trans_begun;
51789 /* Write transactions are not possible on a read-only database */
51790 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 && wrflag ){
51791 rc = SQLITE_READONLY;
51792 goto trans_begun;
51795 #ifndef SQLITE_OMIT_SHARED_CACHE
51796 /* If another database handle has already opened a write transaction
51797 ** on this shared-btree structure and a second write transaction is
51798 ** requested, return SQLITE_LOCKED.
51800 if( (wrflag && pBt->inTransaction==TRANS_WRITE)
51801 || (pBt->btsFlags & BTS_PENDING)!=0
51803 pBlock = pBt->pWriter->db;
51804 }else if( wrflag>1 ){
51805 BtLock *pIter;
51806 for(pIter=pBt->pLock; pIter; pIter=pIter->pNext){
51807 if( pIter->pBtree!=p ){
51808 pBlock = pIter->pBtree->db;
51809 break;
51813 if( pBlock ){
51814 sqlite3ConnectionBlocked(p->db, pBlock);
51815 rc = SQLITE_LOCKED_SHAREDCACHE;
51816 goto trans_begun;
51818 #endif
51820 /* Any read-only or read-write transaction implies a read-lock on
51821 ** page 1. So if some other shared-cache client already has a write-lock
51822 ** on page 1, the transaction cannot be opened. */
51823 rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
51824 if( SQLITE_OK!=rc ) goto trans_begun;
51826 pBt->btsFlags &= ~BTS_INITIALLY_EMPTY;
51827 if( pBt->nPage==0 ) pBt->btsFlags |= BTS_INITIALLY_EMPTY;
51828 do {
51829 /* Call lockBtree() until either pBt->pPage1 is populated or
51830 ** lockBtree() returns something other than SQLITE_OK. lockBtree()
51831 ** may return SQLITE_OK but leave pBt->pPage1 set to 0 if after
51832 ** reading page 1 it discovers that the page-size of the database
51833 ** file is not pBt->pageSize. In this case lockBtree() will update
51834 ** pBt->pageSize to the page-size of the file on disk.
51836 while( pBt->pPage1==0 && SQLITE_OK==(rc = lockBtree(pBt)) );
51838 if( rc==SQLITE_OK && wrflag ){
51839 if( (pBt->btsFlags & BTS_READ_ONLY)!=0 ){
51840 rc = SQLITE_READONLY;
51841 }else{
51842 rc = sqlite3PagerBegin(pBt->pPager,wrflag>1,sqlite3TempInMemory(p->db));
51843 if( rc==SQLITE_OK ){
51844 rc = newDatabase(pBt);
51849 if( rc!=SQLITE_OK ){
51850 unlockBtreeIfUnused(pBt);
51852 }while( (rc&0xFF)==SQLITE_BUSY && pBt->inTransaction==TRANS_NONE &&
51853 btreeInvokeBusyHandler(pBt) );
51855 if( rc==SQLITE_OK ){
51856 if( p->inTrans==TRANS_NONE ){
51857 pBt->nTransaction++;
51858 #ifndef SQLITE_OMIT_SHARED_CACHE
51859 if( p->sharable ){
51860 assert( p->lock.pBtree==p && p->lock.iTable==1 );
51861 p->lock.eLock = READ_LOCK;
51862 p->lock.pNext = pBt->pLock;
51863 pBt->pLock = &p->lock;
51865 #endif
51867 p->inTrans = (wrflag?TRANS_WRITE:TRANS_READ);
51868 if( p->inTrans>pBt->inTransaction ){
51869 pBt->inTransaction = p->inTrans;
51871 if( wrflag ){
51872 MemPage *pPage1 = pBt->pPage1;
51873 #ifndef SQLITE_OMIT_SHARED_CACHE
51874 assert( !pBt->pWriter );
51875 pBt->pWriter = p;
51876 pBt->btsFlags &= ~BTS_EXCLUSIVE;
51877 if( wrflag>1 ) pBt->btsFlags |= BTS_EXCLUSIVE;
51878 #endif
51880 /* If the db-size header field is incorrect (as it may be if an old
51881 ** client has been writing the database file), update it now. Doing
51882 ** this sooner rather than later means the database size can safely
51883 ** re-read the database size from page 1 if a savepoint or transaction
51884 ** rollback occurs within the transaction.
51886 if( pBt->nPage!=get4byte(&pPage1->aData[28]) ){
51887 rc = sqlite3PagerWrite(pPage1->pDbPage);
51888 if( rc==SQLITE_OK ){
51889 put4byte(&pPage1->aData[28], pBt->nPage);
51896 trans_begun:
51897 if( rc==SQLITE_OK && wrflag ){
51898 /* This call makes sure that the pager has the correct number of
51899 ** open savepoints. If the second parameter is greater than 0 and
51900 ** the sub-journal is not already open, then it will be opened here.
51902 rc = sqlite3PagerOpenSavepoint(pBt->pPager, p->db->nSavepoint);
51905 btreeIntegrity(p);
51906 sqlite3BtreeLeave(p);
51907 return rc;
51910 #ifndef SQLITE_OMIT_AUTOVACUUM
51913 ** Set the pointer-map entries for all children of page pPage. Also, if
51914 ** pPage contains cells that point to overflow pages, set the pointer
51915 ** map entries for the overflow pages as well.
51917 static int setChildPtrmaps(MemPage *pPage){
51918 int i; /* Counter variable */
51919 int nCell; /* Number of cells in page pPage */
51920 int rc; /* Return code */
51921 BtShared *pBt = pPage->pBt;
51922 u8 isInitOrig = pPage->isInit;
51923 Pgno pgno = pPage->pgno;
51925 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
51926 rc = btreeInitPage(pPage);
51927 if( rc!=SQLITE_OK ){
51928 goto set_child_ptrmaps_out;
51930 nCell = pPage->nCell;
51932 for(i=0; i<nCell; i++){
51933 u8 *pCell = findCell(pPage, i);
51935 ptrmapPutOvflPtr(pPage, pCell, &rc);
51937 if( !pPage->leaf ){
51938 Pgno childPgno = get4byte(pCell);
51939 ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
51943 if( !pPage->leaf ){
51944 Pgno childPgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
51945 ptrmapPut(pBt, childPgno, PTRMAP_BTREE, pgno, &rc);
51948 set_child_ptrmaps_out:
51949 pPage->isInit = isInitOrig;
51950 return rc;
51954 ** Somewhere on pPage is a pointer to page iFrom. Modify this pointer so
51955 ** that it points to iTo. Parameter eType describes the type of pointer to
51956 ** be modified, as follows:
51958 ** PTRMAP_BTREE: pPage is a btree-page. The pointer points at a child
51959 ** page of pPage.
51961 ** PTRMAP_OVERFLOW1: pPage is a btree-page. The pointer points at an overflow
51962 ** page pointed to by one of the cells on pPage.
51964 ** PTRMAP_OVERFLOW2: pPage is an overflow-page. The pointer points at the next
51965 ** overflow page in the list.
51967 static int modifyPagePointer(MemPage *pPage, Pgno iFrom, Pgno iTo, u8 eType){
51968 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
51969 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
51970 if( eType==PTRMAP_OVERFLOW2 ){
51971 /* The pointer is always the first 4 bytes of the page in this case. */
51972 if( get4byte(pPage->aData)!=iFrom ){
51973 return SQLITE_CORRUPT_BKPT;
51975 put4byte(pPage->aData, iTo);
51976 }else{
51977 u8 isInitOrig = pPage->isInit;
51978 int i;
51979 int nCell;
51981 btreeInitPage(pPage);
51982 nCell = pPage->nCell;
51984 for(i=0; i<nCell; i++){
51985 u8 *pCell = findCell(pPage, i);
51986 if( eType==PTRMAP_OVERFLOW1 ){
51987 CellInfo info;
51988 btreeParseCellPtr(pPage, pCell, &info);
51989 if( info.iOverflow
51990 && pCell+info.iOverflow+3<=pPage->aData+pPage->maskPage
51991 && iFrom==get4byte(&pCell[info.iOverflow])
51993 put4byte(&pCell[info.iOverflow], iTo);
51994 break;
51996 }else{
51997 if( get4byte(pCell)==iFrom ){
51998 put4byte(pCell, iTo);
51999 break;
52004 if( i==nCell ){
52005 if( eType!=PTRMAP_BTREE ||
52006 get4byte(&pPage->aData[pPage->hdrOffset+8])!=iFrom ){
52007 return SQLITE_CORRUPT_BKPT;
52009 put4byte(&pPage->aData[pPage->hdrOffset+8], iTo);
52012 pPage->isInit = isInitOrig;
52014 return SQLITE_OK;
52019 ** Move the open database page pDbPage to location iFreePage in the
52020 ** database. The pDbPage reference remains valid.
52022 ** The isCommit flag indicates that there is no need to remember that
52023 ** the journal needs to be sync()ed before database page pDbPage->pgno
52024 ** can be written to. The caller has already promised not to write to that
52025 ** page.
52027 static int relocatePage(
52028 BtShared *pBt, /* Btree */
52029 MemPage *pDbPage, /* Open page to move */
52030 u8 eType, /* Pointer map 'type' entry for pDbPage */
52031 Pgno iPtrPage, /* Pointer map 'page-no' entry for pDbPage */
52032 Pgno iFreePage, /* The location to move pDbPage to */
52033 int isCommit /* isCommit flag passed to sqlite3PagerMovepage */
52035 MemPage *pPtrPage; /* The page that contains a pointer to pDbPage */
52036 Pgno iDbPage = pDbPage->pgno;
52037 Pager *pPager = pBt->pPager;
52038 int rc;
52040 assert( eType==PTRMAP_OVERFLOW2 || eType==PTRMAP_OVERFLOW1 ||
52041 eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE );
52042 assert( sqlite3_mutex_held(pBt->mutex) );
52043 assert( pDbPage->pBt==pBt );
52045 /* Move page iDbPage from its current location to page number iFreePage */
52046 TRACE(("AUTOVACUUM: Moving %d to free page %d (ptr page %d type %d)\n",
52047 iDbPage, iFreePage, iPtrPage, eType));
52048 rc = sqlite3PagerMovepage(pPager, pDbPage->pDbPage, iFreePage, isCommit);
52049 if( rc!=SQLITE_OK ){
52050 return rc;
52052 pDbPage->pgno = iFreePage;
52054 /* If pDbPage was a btree-page, then it may have child pages and/or cells
52055 ** that point to overflow pages. The pointer map entries for all these
52056 ** pages need to be changed.
52058 ** If pDbPage is an overflow page, then the first 4 bytes may store a
52059 ** pointer to a subsequent overflow page. If this is the case, then
52060 ** the pointer map needs to be updated for the subsequent overflow page.
52062 if( eType==PTRMAP_BTREE || eType==PTRMAP_ROOTPAGE ){
52063 rc = setChildPtrmaps(pDbPage);
52064 if( rc!=SQLITE_OK ){
52065 return rc;
52067 }else{
52068 Pgno nextOvfl = get4byte(pDbPage->aData);
52069 if( nextOvfl!=0 ){
52070 ptrmapPut(pBt, nextOvfl, PTRMAP_OVERFLOW2, iFreePage, &rc);
52071 if( rc!=SQLITE_OK ){
52072 return rc;
52077 /* Fix the database pointer on page iPtrPage that pointed at iDbPage so
52078 ** that it points at iFreePage. Also fix the pointer map entry for
52079 ** iPtrPage.
52081 if( eType!=PTRMAP_ROOTPAGE ){
52082 rc = btreeGetPage(pBt, iPtrPage, &pPtrPage, 0);
52083 if( rc!=SQLITE_OK ){
52084 return rc;
52086 rc = sqlite3PagerWrite(pPtrPage->pDbPage);
52087 if( rc!=SQLITE_OK ){
52088 releasePage(pPtrPage);
52089 return rc;
52091 rc = modifyPagePointer(pPtrPage, iDbPage, iFreePage, eType);
52092 releasePage(pPtrPage);
52093 if( rc==SQLITE_OK ){
52094 ptrmapPut(pBt, iFreePage, eType, iPtrPage, &rc);
52097 return rc;
52100 /* Forward declaration required by incrVacuumStep(). */
52101 static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
52104 ** Perform a single step of an incremental-vacuum. If successful,
52105 ** return SQLITE_OK. If there is no work to do (and therefore no
52106 ** point in calling this function again), return SQLITE_DONE.
52108 ** More specificly, this function attempts to re-organize the
52109 ** database so that the last page of the file currently in use
52110 ** is no longer in use.
52112 ** If the nFin parameter is non-zero, this function assumes
52113 ** that the caller will keep calling incrVacuumStep() until
52114 ** it returns SQLITE_DONE or an error, and that nFin is the
52115 ** number of pages the database file will contain after this
52116 ** process is complete. If nFin is zero, it is assumed that
52117 ** incrVacuumStep() will be called a finite amount of times
52118 ** which may or may not empty the freelist. A full autovacuum
52119 ** has nFin>0. A "PRAGMA incremental_vacuum" has nFin==0.
52121 static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg){
52122 Pgno nFreeList; /* Number of pages still on the free-list */
52123 int rc;
52125 assert( sqlite3_mutex_held(pBt->mutex) );
52126 assert( iLastPg>nFin );
52128 if( !PTRMAP_ISPAGE(pBt, iLastPg) && iLastPg!=PENDING_BYTE_PAGE(pBt) ){
52129 u8 eType;
52130 Pgno iPtrPage;
52132 nFreeList = get4byte(&pBt->pPage1->aData[36]);
52133 if( nFreeList==0 ){
52134 return SQLITE_DONE;
52137 rc = ptrmapGet(pBt, iLastPg, &eType, &iPtrPage);
52138 if( rc!=SQLITE_OK ){
52139 return rc;
52141 if( eType==PTRMAP_ROOTPAGE ){
52142 return SQLITE_CORRUPT_BKPT;
52145 if( eType==PTRMAP_FREEPAGE ){
52146 if( nFin==0 ){
52147 /* Remove the page from the files free-list. This is not required
52148 ** if nFin is non-zero. In that case, the free-list will be
52149 ** truncated to zero after this function returns, so it doesn't
52150 ** matter if it still contains some garbage entries.
52152 Pgno iFreePg;
52153 MemPage *pFreePg;
52154 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, iLastPg, 1);
52155 if( rc!=SQLITE_OK ){
52156 return rc;
52158 assert( iFreePg==iLastPg );
52159 releasePage(pFreePg);
52161 } else {
52162 Pgno iFreePg; /* Index of free page to move pLastPg to */
52163 MemPage *pLastPg;
52165 rc = btreeGetPage(pBt, iLastPg, &pLastPg, 0);
52166 if( rc!=SQLITE_OK ){
52167 return rc;
52170 /* If nFin is zero, this loop runs exactly once and page pLastPg
52171 ** is swapped with the first free page pulled off the free list.
52173 ** On the other hand, if nFin is greater than zero, then keep
52174 ** looping until a free-page located within the first nFin pages
52175 ** of the file is found.
52177 do {
52178 MemPage *pFreePg;
52179 rc = allocateBtreePage(pBt, &pFreePg, &iFreePg, 0, 0);
52180 if( rc!=SQLITE_OK ){
52181 releasePage(pLastPg);
52182 return rc;
52184 releasePage(pFreePg);
52185 }while( nFin!=0 && iFreePg>nFin );
52186 assert( iFreePg<iLastPg );
52188 rc = sqlite3PagerWrite(pLastPg->pDbPage);
52189 if( rc==SQLITE_OK ){
52190 rc = relocatePage(pBt, pLastPg, eType, iPtrPage, iFreePg, nFin!=0);
52192 releasePage(pLastPg);
52193 if( rc!=SQLITE_OK ){
52194 return rc;
52199 if( nFin==0 ){
52200 iLastPg--;
52201 while( iLastPg==PENDING_BYTE_PAGE(pBt)||PTRMAP_ISPAGE(pBt, iLastPg) ){
52202 if( PTRMAP_ISPAGE(pBt, iLastPg) ){
52203 MemPage *pPg;
52204 rc = btreeGetPage(pBt, iLastPg, &pPg, 0);
52205 if( rc!=SQLITE_OK ){
52206 return rc;
52208 rc = sqlite3PagerWrite(pPg->pDbPage);
52209 releasePage(pPg);
52210 if( rc!=SQLITE_OK ){
52211 return rc;
52214 iLastPg--;
52216 sqlite3PagerTruncateImage(pBt->pPager, iLastPg);
52217 pBt->nPage = iLastPg;
52219 return SQLITE_OK;
52223 ** A write-transaction must be opened before calling this function.
52224 ** It performs a single unit of work towards an incremental vacuum.
52226 ** If the incremental vacuum is finished after this function has run,
52227 ** SQLITE_DONE is returned. If it is not finished, but no error occurred,
52228 ** SQLITE_OK is returned. Otherwise an SQLite error code.
52230 SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *p){
52231 int rc;
52232 BtShared *pBt = p->pBt;
52234 sqlite3BtreeEnter(p);
52235 assert( pBt->inTransaction==TRANS_WRITE && p->inTrans==TRANS_WRITE );
52236 if( !pBt->autoVacuum ){
52237 rc = SQLITE_DONE;
52238 }else{
52239 invalidateAllOverflowCache(pBt);
52240 rc = incrVacuumStep(pBt, 0, btreePagecount(pBt));
52241 if( rc==SQLITE_OK ){
52242 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
52243 put4byte(&pBt->pPage1->aData[28], pBt->nPage);
52246 sqlite3BtreeLeave(p);
52247 return rc;
52251 ** This routine is called prior to sqlite3PagerCommit when a transaction
52252 ** is commited for an auto-vacuum database.
52254 ** If SQLITE_OK is returned, then *pnTrunc is set to the number of pages
52255 ** the database file should be truncated to during the commit process.
52256 ** i.e. the database has been reorganized so that only the first *pnTrunc
52257 ** pages are in use.
52259 static int autoVacuumCommit(BtShared *pBt){
52260 int rc = SQLITE_OK;
52261 Pager *pPager = pBt->pPager;
52262 VVA_ONLY( int nRef = sqlite3PagerRefcount(pPager) );
52264 assert( sqlite3_mutex_held(pBt->mutex) );
52265 invalidateAllOverflowCache(pBt);
52266 assert(pBt->autoVacuum);
52267 if( !pBt->incrVacuum ){
52268 Pgno nFin; /* Number of pages in database after autovacuuming */
52269 Pgno nFree; /* Number of pages on the freelist initially */
52270 Pgno nPtrmap; /* Number of PtrMap pages to be freed */
52271 Pgno iFree; /* The next page to be freed */
52272 int nEntry; /* Number of entries on one ptrmap page */
52273 Pgno nOrig; /* Database size before freeing */
52275 nOrig = btreePagecount(pBt);
52276 if( PTRMAP_ISPAGE(pBt, nOrig) || nOrig==PENDING_BYTE_PAGE(pBt) ){
52277 /* It is not possible to create a database for which the final page
52278 ** is either a pointer-map page or the pending-byte page. If one
52279 ** is encountered, this indicates corruption.
52281 return SQLITE_CORRUPT_BKPT;
52284 nFree = get4byte(&pBt->pPage1->aData[36]);
52285 nEntry = pBt->usableSize/5;
52286 nPtrmap = (nFree-nOrig+PTRMAP_PAGENO(pBt, nOrig)+nEntry)/nEntry;
52287 nFin = nOrig - nFree - nPtrmap;
52288 if( nOrig>PENDING_BYTE_PAGE(pBt) && nFin<PENDING_BYTE_PAGE(pBt) ){
52289 nFin--;
52291 while( PTRMAP_ISPAGE(pBt, nFin) || nFin==PENDING_BYTE_PAGE(pBt) ){
52292 nFin--;
52294 if( nFin>nOrig ) return SQLITE_CORRUPT_BKPT;
52296 for(iFree=nOrig; iFree>nFin && rc==SQLITE_OK; iFree--){
52297 rc = incrVacuumStep(pBt, nFin, iFree);
52299 if( (rc==SQLITE_DONE || rc==SQLITE_OK) && nFree>0 ){
52300 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
52301 put4byte(&pBt->pPage1->aData[32], 0);
52302 put4byte(&pBt->pPage1->aData[36], 0);
52303 put4byte(&pBt->pPage1->aData[28], nFin);
52304 sqlite3PagerTruncateImage(pBt->pPager, nFin);
52305 pBt->nPage = nFin;
52307 if( rc!=SQLITE_OK ){
52308 sqlite3PagerRollback(pPager);
52312 assert( nRef==sqlite3PagerRefcount(pPager) );
52313 return rc;
52316 #else /* ifndef SQLITE_OMIT_AUTOVACUUM */
52317 # define setChildPtrmaps(x) SQLITE_OK
52318 #endif
52321 ** This routine does the first phase of a two-phase commit. This routine
52322 ** causes a rollback journal to be created (if it does not already exist)
52323 ** and populated with enough information so that if a power loss occurs
52324 ** the database can be restored to its original state by playing back
52325 ** the journal. Then the contents of the journal are flushed out to
52326 ** the disk. After the journal is safely on oxide, the changes to the
52327 ** database are written into the database file and flushed to oxide.
52328 ** At the end of this call, the rollback journal still exists on the
52329 ** disk and we are still holding all locks, so the transaction has not
52330 ** committed. See sqlite3BtreeCommitPhaseTwo() for the second phase of the
52331 ** commit process.
52333 ** This call is a no-op if no write-transaction is currently active on pBt.
52335 ** Otherwise, sync the database file for the btree pBt. zMaster points to
52336 ** the name of a master journal file that should be written into the
52337 ** individual journal file, or is NULL, indicating no master journal file
52338 ** (single database transaction).
52340 ** When this is called, the master journal should already have been
52341 ** created, populated with this journal pointer and synced to disk.
52343 ** Once this is routine has returned, the only thing required to commit
52344 ** the write-transaction for this database file is to delete the journal.
52346 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree *p, const char *zMaster){
52347 int rc = SQLITE_OK;
52348 if( p->inTrans==TRANS_WRITE ){
52349 BtShared *pBt = p->pBt;
52350 sqlite3BtreeEnter(p);
52351 #ifndef SQLITE_OMIT_AUTOVACUUM
52352 if( pBt->autoVacuum ){
52353 rc = autoVacuumCommit(pBt);
52354 if( rc!=SQLITE_OK ){
52355 sqlite3BtreeLeave(p);
52356 return rc;
52359 #endif
52360 rc = sqlite3PagerCommitPhaseOne(pBt->pPager, zMaster, 0);
52361 sqlite3BtreeLeave(p);
52363 return rc;
52367 ** This function is called from both BtreeCommitPhaseTwo() and BtreeRollback()
52368 ** at the conclusion of a transaction.
52370 static void btreeEndTransaction(Btree *p){
52371 BtShared *pBt = p->pBt;
52372 assert( sqlite3BtreeHoldsMutex(p) );
52374 btreeClearHasContent(pBt);
52375 if( p->inTrans>TRANS_NONE && p->db->activeVdbeCnt>1 ){
52376 /* If there are other active statements that belong to this database
52377 ** handle, downgrade to a read-only transaction. The other statements
52378 ** may still be reading from the database. */
52379 downgradeAllSharedCacheTableLocks(p);
52380 p->inTrans = TRANS_READ;
52381 }else{
52382 /* If the handle had any kind of transaction open, decrement the
52383 ** transaction count of the shared btree. If the transaction count
52384 ** reaches 0, set the shared state to TRANS_NONE. The unlockBtreeIfUnused()
52385 ** call below will unlock the pager. */
52386 if( p->inTrans!=TRANS_NONE ){
52387 clearAllSharedCacheTableLocks(p);
52388 pBt->nTransaction--;
52389 if( 0==pBt->nTransaction ){
52390 pBt->inTransaction = TRANS_NONE;
52394 /* Set the current transaction state to TRANS_NONE and unlock the
52395 ** pager if this call closed the only read or write transaction. */
52396 p->inTrans = TRANS_NONE;
52397 unlockBtreeIfUnused(pBt);
52400 btreeIntegrity(p);
52404 ** Commit the transaction currently in progress.
52406 ** This routine implements the second phase of a 2-phase commit. The
52407 ** sqlite3BtreeCommitPhaseOne() routine does the first phase and should
52408 ** be invoked prior to calling this routine. The sqlite3BtreeCommitPhaseOne()
52409 ** routine did all the work of writing information out to disk and flushing the
52410 ** contents so that they are written onto the disk platter. All this
52411 ** routine has to do is delete or truncate or zero the header in the
52412 ** the rollback journal (which causes the transaction to commit) and
52413 ** drop locks.
52415 ** Normally, if an error occurs while the pager layer is attempting to
52416 ** finalize the underlying journal file, this function returns an error and
52417 ** the upper layer will attempt a rollback. However, if the second argument
52418 ** is non-zero then this b-tree transaction is part of a multi-file
52419 ** transaction. In this case, the transaction has already been committed
52420 ** (by deleting a master journal file) and the caller will ignore this
52421 ** functions return code. So, even if an error occurs in the pager layer,
52422 ** reset the b-tree objects internal state to indicate that the write
52423 ** transaction has been closed. This is quite safe, as the pager will have
52424 ** transitioned to the error state.
52426 ** This will release the write lock on the database file. If there
52427 ** are no active cursors, it also releases the read lock.
52429 SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree *p, int bCleanup){
52431 if( p->inTrans==TRANS_NONE ) return SQLITE_OK;
52432 sqlite3BtreeEnter(p);
52433 btreeIntegrity(p);
52435 /* If the handle has a write-transaction open, commit the shared-btrees
52436 ** transaction and set the shared state to TRANS_READ.
52438 if( p->inTrans==TRANS_WRITE ){
52439 int rc;
52440 BtShared *pBt = p->pBt;
52441 assert( pBt->inTransaction==TRANS_WRITE );
52442 assert( pBt->nTransaction>0 );
52443 rc = sqlite3PagerCommitPhaseTwo(pBt->pPager);
52444 if( rc!=SQLITE_OK && bCleanup==0 ){
52445 sqlite3BtreeLeave(p);
52446 return rc;
52448 pBt->inTransaction = TRANS_READ;
52451 btreeEndTransaction(p);
52452 sqlite3BtreeLeave(p);
52453 return SQLITE_OK;
52457 ** Do both phases of a commit.
52459 SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){
52460 int rc;
52461 sqlite3BtreeEnter(p);
52462 rc = sqlite3BtreeCommitPhaseOne(p, 0);
52463 if( rc==SQLITE_OK ){
52464 rc = sqlite3BtreeCommitPhaseTwo(p, 0);
52466 sqlite3BtreeLeave(p);
52467 return rc;
52470 #ifndef NDEBUG
52472 ** Return the number of write-cursors open on this handle. This is for use
52473 ** in assert() expressions, so it is only compiled if NDEBUG is not
52474 ** defined.
52476 ** For the purposes of this routine, a write-cursor is any cursor that
52477 ** is capable of writing to the databse. That means the cursor was
52478 ** originally opened for writing and the cursor has not be disabled
52479 ** by having its state changed to CURSOR_FAULT.
52481 static int countWriteCursors(BtShared *pBt){
52482 BtCursor *pCur;
52483 int r = 0;
52484 for(pCur=pBt->pCursor; pCur; pCur=pCur->pNext){
52485 if( pCur->wrFlag && pCur->eState!=CURSOR_FAULT ) r++;
52487 return r;
52489 #endif
52492 ** This routine sets the state to CURSOR_FAULT and the error
52493 ** code to errCode for every cursor on BtShared that pBtree
52494 ** references.
52496 ** Every cursor is tripped, including cursors that belong
52497 ** to other database connections that happen to be sharing
52498 ** the cache with pBtree.
52500 ** This routine gets called when a rollback occurs.
52501 ** All cursors using the same cache must be tripped
52502 ** to prevent them from trying to use the btree after
52503 ** the rollback. The rollback may have deleted tables
52504 ** or moved root pages, so it is not sufficient to
52505 ** save the state of the cursor. The cursor must be
52506 ** invalidated.
52508 SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode){
52509 BtCursor *p;
52510 sqlite3BtreeEnter(pBtree);
52511 for(p=pBtree->pBt->pCursor; p; p=p->pNext){
52512 int i;
52513 sqlite3BtreeClearCursor(p);
52514 p->eState = CURSOR_FAULT;
52515 p->skipNext = errCode;
52516 for(i=0; i<=p->iPage; i++){
52517 releasePage(p->apPage[i]);
52518 p->apPage[i] = 0;
52521 sqlite3BtreeLeave(pBtree);
52525 ** Rollback the transaction in progress. All cursors will be
52526 ** invalided by this operation. Any attempt to use a cursor
52527 ** that was open at the beginning of this operation will result
52528 ** in an error.
52530 ** This will release the write lock on the database file. If there
52531 ** are no active cursors, it also releases the read lock.
52533 SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p){
52534 int rc;
52535 BtShared *pBt = p->pBt;
52536 MemPage *pPage1;
52538 sqlite3BtreeEnter(p);
52539 rc = saveAllCursors(pBt, 0, 0);
52540 #ifndef SQLITE_OMIT_SHARED_CACHE
52541 if( rc!=SQLITE_OK ){
52542 /* This is a horrible situation. An IO or malloc() error occurred whilst
52543 ** trying to save cursor positions. If this is an automatic rollback (as
52544 ** the result of a constraint, malloc() failure or IO error) then
52545 ** the cache may be internally inconsistent (not contain valid trees) so
52546 ** we cannot simply return the error to the caller. Instead, abort
52547 ** all queries that may be using any of the cursors that failed to save.
52549 sqlite3BtreeTripAllCursors(p, rc);
52551 #endif
52552 btreeIntegrity(p);
52554 if( p->inTrans==TRANS_WRITE ){
52555 int rc2;
52557 assert( TRANS_WRITE==pBt->inTransaction );
52558 rc2 = sqlite3PagerRollback(pBt->pPager);
52559 if( rc2!=SQLITE_OK ){
52560 rc = rc2;
52563 /* The rollback may have destroyed the pPage1->aData value. So
52564 ** call btreeGetPage() on page 1 again to make
52565 ** sure pPage1->aData is set correctly. */
52566 if( btreeGetPage(pBt, 1, &pPage1, 0)==SQLITE_OK ){
52567 int nPage = get4byte(28+(u8*)pPage1->aData);
52568 testcase( nPage==0 );
52569 if( nPage==0 ) sqlite3PagerPagecount(pBt->pPager, &nPage);
52570 testcase( pBt->nPage!=nPage );
52571 pBt->nPage = nPage;
52572 releasePage(pPage1);
52574 assert( countWriteCursors(pBt)==0 );
52575 pBt->inTransaction = TRANS_READ;
52578 btreeEndTransaction(p);
52579 sqlite3BtreeLeave(p);
52580 return rc;
52584 ** Start a statement subtransaction. The subtransaction can can be rolled
52585 ** back independently of the main transaction. You must start a transaction
52586 ** before starting a subtransaction. The subtransaction is ended automatically
52587 ** if the main transaction commits or rolls back.
52589 ** Statement subtransactions are used around individual SQL statements
52590 ** that are contained within a BEGIN...COMMIT block. If a constraint
52591 ** error occurs within the statement, the effect of that one statement
52592 ** can be rolled back without having to rollback the entire transaction.
52594 ** A statement sub-transaction is implemented as an anonymous savepoint. The
52595 ** value passed as the second parameter is the total number of savepoints,
52596 ** including the new anonymous savepoint, open on the B-Tree. i.e. if there
52597 ** are no active savepoints and no other statement-transactions open,
52598 ** iStatement is 1. This anonymous savepoint can be released or rolled back
52599 ** using the sqlite3BtreeSavepoint() function.
52601 SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree *p, int iStatement){
52602 int rc;
52603 BtShared *pBt = p->pBt;
52604 sqlite3BtreeEnter(p);
52605 assert( p->inTrans==TRANS_WRITE );
52606 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );
52607 assert( iStatement>0 );
52608 assert( iStatement>p->db->nSavepoint );
52609 assert( pBt->inTransaction==TRANS_WRITE );
52610 /* At the pager level, a statement transaction is a savepoint with
52611 ** an index greater than all savepoints created explicitly using
52612 ** SQL statements. It is illegal to open, release or rollback any
52613 ** such savepoints while the statement transaction savepoint is active.
52615 rc = sqlite3PagerOpenSavepoint(pBt->pPager, iStatement);
52616 sqlite3BtreeLeave(p);
52617 return rc;
52621 ** The second argument to this function, op, is always SAVEPOINT_ROLLBACK
52622 ** or SAVEPOINT_RELEASE. This function either releases or rolls back the
52623 ** savepoint identified by parameter iSavepoint, depending on the value
52624 ** of op.
52626 ** Normally, iSavepoint is greater than or equal to zero. However, if op is
52627 ** SAVEPOINT_ROLLBACK, then iSavepoint may also be -1. In this case the
52628 ** contents of the entire transaction are rolled back. This is different
52629 ** from a normal transaction rollback, as no locks are released and the
52630 ** transaction remains open.
52632 SQLITE_PRIVATE int sqlite3BtreeSavepoint(Btree *p, int op, int iSavepoint){
52633 int rc = SQLITE_OK;
52634 if( p && p->inTrans==TRANS_WRITE ){
52635 BtShared *pBt = p->pBt;
52636 assert( op==SAVEPOINT_RELEASE || op==SAVEPOINT_ROLLBACK );
52637 assert( iSavepoint>=0 || (iSavepoint==-1 && op==SAVEPOINT_ROLLBACK) );
52638 sqlite3BtreeEnter(p);
52639 rc = sqlite3PagerSavepoint(pBt->pPager, op, iSavepoint);
52640 if( rc==SQLITE_OK ){
52641 if( iSavepoint<0 && (pBt->btsFlags & BTS_INITIALLY_EMPTY)!=0 ){
52642 pBt->nPage = 0;
52644 rc = newDatabase(pBt);
52645 pBt->nPage = get4byte(28 + pBt->pPage1->aData);
52647 /* The database size was written into the offset 28 of the header
52648 ** when the transaction started, so we know that the value at offset
52649 ** 28 is nonzero. */
52650 assert( pBt->nPage>0 );
52652 sqlite3BtreeLeave(p);
52654 return rc;
52658 ** Create a new cursor for the BTree whose root is on the page
52659 ** iTable. If a read-only cursor is requested, it is assumed that
52660 ** the caller already has at least a read-only transaction open
52661 ** on the database already. If a write-cursor is requested, then
52662 ** the caller is assumed to have an open write transaction.
52664 ** If wrFlag==0, then the cursor can only be used for reading.
52665 ** If wrFlag==1, then the cursor can be used for reading or for
52666 ** writing if other conditions for writing are also met. These
52667 ** are the conditions that must be met in order for writing to
52668 ** be allowed:
52670 ** 1: The cursor must have been opened with wrFlag==1
52672 ** 2: Other database connections that share the same pager cache
52673 ** but which are not in the READ_UNCOMMITTED state may not have
52674 ** cursors open with wrFlag==0 on the same table. Otherwise
52675 ** the changes made by this write cursor would be visible to
52676 ** the read cursors in the other database connection.
52678 ** 3: The database must be writable (not on read-only media)
52680 ** 4: There must be an active transaction.
52682 ** No checking is done to make sure that page iTable really is the
52683 ** root page of a b-tree. If it is not, then the cursor acquired
52684 ** will not work correctly.
52686 ** It is assumed that the sqlite3BtreeCursorZero() has been called
52687 ** on pCur to initialize the memory space prior to invoking this routine.
52689 static int btreeCursor(
52690 Btree *p, /* The btree */
52691 int iTable, /* Root page of table to open */
52692 int wrFlag, /* 1 to write. 0 read-only */
52693 struct KeyInfo *pKeyInfo, /* First arg to comparison function */
52694 BtCursor *pCur /* Space for new cursor */
52696 BtShared *pBt = p->pBt; /* Shared b-tree handle */
52698 assert( sqlite3BtreeHoldsMutex(p) );
52699 assert( wrFlag==0 || wrFlag==1 );
52701 /* The following assert statements verify that if this is a sharable
52702 ** b-tree database, the connection is holding the required table locks,
52703 ** and that no other connection has any open cursor that conflicts with
52704 ** this lock. */
52705 assert( hasSharedCacheTableLock(p, iTable, pKeyInfo!=0, wrFlag+1) );
52706 assert( wrFlag==0 || !hasReadConflicts(p, iTable) );
52708 /* Assert that the caller has opened the required transaction. */
52709 assert( p->inTrans>TRANS_NONE );
52710 assert( wrFlag==0 || p->inTrans==TRANS_WRITE );
52711 assert( pBt->pPage1 && pBt->pPage1->aData );
52713 if( NEVER(wrFlag && (pBt->btsFlags & BTS_READ_ONLY)!=0) ){
52714 return SQLITE_READONLY;
52716 if( iTable==1 && btreePagecount(pBt)==0 ){
52717 assert( wrFlag==0 );
52718 iTable = 0;
52721 /* Now that no other errors can occur, finish filling in the BtCursor
52722 ** variables and link the cursor into the BtShared list. */
52723 pCur->pgnoRoot = (Pgno)iTable;
52724 pCur->iPage = -1;
52725 pCur->pKeyInfo = pKeyInfo;
52726 pCur->pBtree = p;
52727 pCur->pBt = pBt;
52728 pCur->wrFlag = (u8)wrFlag;
52729 pCur->pNext = pBt->pCursor;
52730 if( pCur->pNext ){
52731 pCur->pNext->pPrev = pCur;
52733 pBt->pCursor = pCur;
52734 pCur->eState = CURSOR_INVALID;
52735 pCur->cachedRowid = 0;
52736 return SQLITE_OK;
52738 SQLITE_PRIVATE int sqlite3BtreeCursor(
52739 Btree *p, /* The btree */
52740 int iTable, /* Root page of table to open */
52741 int wrFlag, /* 1 to write. 0 read-only */
52742 struct KeyInfo *pKeyInfo, /* First arg to xCompare() */
52743 BtCursor *pCur /* Write new cursor here */
52745 int rc;
52746 sqlite3BtreeEnter(p);
52747 rc = btreeCursor(p, iTable, wrFlag, pKeyInfo, pCur);
52748 sqlite3BtreeLeave(p);
52749 return rc;
52753 ** Return the size of a BtCursor object in bytes.
52755 ** This interfaces is needed so that users of cursors can preallocate
52756 ** sufficient storage to hold a cursor. The BtCursor object is opaque
52757 ** to users so they cannot do the sizeof() themselves - they must call
52758 ** this routine.
52760 SQLITE_PRIVATE int sqlite3BtreeCursorSize(void){
52761 return ROUND8(sizeof(BtCursor));
52765 ** Initialize memory that will be converted into a BtCursor object.
52767 ** The simple approach here would be to memset() the entire object
52768 ** to zero. But it turns out that the apPage[] and aiIdx[] arrays
52769 ** do not need to be zeroed and they are large, so we can save a lot
52770 ** of run-time by skipping the initialization of those elements.
52772 SQLITE_PRIVATE void sqlite3BtreeCursorZero(BtCursor *p){
52773 memset(p, 0, offsetof(BtCursor, iPage));
52777 ** Set the cached rowid value of every cursor in the same database file
52778 ** as pCur and having the same root page number as pCur. The value is
52779 ** set to iRowid.
52781 ** Only positive rowid values are considered valid for this cache.
52782 ** The cache is initialized to zero, indicating an invalid cache.
52783 ** A btree will work fine with zero or negative rowids. We just cannot
52784 ** cache zero or negative rowids, which means tables that use zero or
52785 ** negative rowids might run a little slower. But in practice, zero
52786 ** or negative rowids are very uncommon so this should not be a problem.
52788 SQLITE_PRIVATE void sqlite3BtreeSetCachedRowid(BtCursor *pCur, sqlite3_int64 iRowid){
52789 BtCursor *p;
52790 for(p=pCur->pBt->pCursor; p; p=p->pNext){
52791 if( p->pgnoRoot==pCur->pgnoRoot ) p->cachedRowid = iRowid;
52793 assert( pCur->cachedRowid==iRowid );
52797 ** Return the cached rowid for the given cursor. A negative or zero
52798 ** return value indicates that the rowid cache is invalid and should be
52799 ** ignored. If the rowid cache has never before been set, then a
52800 ** zero is returned.
52802 SQLITE_PRIVATE sqlite3_int64 sqlite3BtreeGetCachedRowid(BtCursor *pCur){
52803 return pCur->cachedRowid;
52807 ** Close a cursor. The read lock on the database file is released
52808 ** when the last cursor is closed.
52810 SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
52811 Btree *pBtree = pCur->pBtree;
52812 if( pBtree ){
52813 int i;
52814 BtShared *pBt = pCur->pBt;
52815 sqlite3BtreeEnter(pBtree);
52816 sqlite3BtreeClearCursor(pCur);
52817 if( pCur->pPrev ){
52818 pCur->pPrev->pNext = pCur->pNext;
52819 }else{
52820 pBt->pCursor = pCur->pNext;
52822 if( pCur->pNext ){
52823 pCur->pNext->pPrev = pCur->pPrev;
52825 for(i=0; i<=pCur->iPage; i++){
52826 releasePage(pCur->apPage[i]);
52828 unlockBtreeIfUnused(pBt);
52829 invalidateOverflowCache(pCur);
52830 /* sqlite3_free(pCur); */
52831 sqlite3BtreeLeave(pBtree);
52833 return SQLITE_OK;
52837 ** Make sure the BtCursor* given in the argument has a valid
52838 ** BtCursor.info structure. If it is not already valid, call
52839 ** btreeParseCell() to fill it in.
52841 ** BtCursor.info is a cache of the information in the current cell.
52842 ** Using this cache reduces the number of calls to btreeParseCell().
52844 ** 2007-06-25: There is a bug in some versions of MSVC that cause the
52845 ** compiler to crash when getCellInfo() is implemented as a macro.
52846 ** But there is a measureable speed advantage to using the macro on gcc
52847 ** (when less compiler optimizations like -Os or -O0 are used and the
52848 ** compiler is not doing agressive inlining.) So we use a real function
52849 ** for MSVC and a macro for everything else. Ticket #2457.
52851 #ifndef NDEBUG
52852 static void assertCellInfo(BtCursor *pCur){
52853 CellInfo info;
52854 int iPage = pCur->iPage;
52855 memset(&info, 0, sizeof(info));
52856 btreeParseCell(pCur->apPage[iPage], pCur->aiIdx[iPage], &info);
52857 assert( memcmp(&info, &pCur->info, sizeof(info))==0 );
52859 #else
52860 #define assertCellInfo(x)
52861 #endif
52862 #ifdef _MSC_VER
52863 /* Use a real function in MSVC to work around bugs in that compiler. */
52864 static void getCellInfo(BtCursor *pCur){
52865 if( pCur->info.nSize==0 ){
52866 int iPage = pCur->iPage;
52867 btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info);
52868 pCur->validNKey = 1;
52869 }else{
52870 assertCellInfo(pCur);
52873 #else /* if not _MSC_VER */
52874 /* Use a macro in all other compilers so that the function is inlined */
52875 #define getCellInfo(pCur) \
52876 if( pCur->info.nSize==0 ){ \
52877 int iPage = pCur->iPage; \
52878 btreeParseCell(pCur->apPage[iPage],pCur->aiIdx[iPage],&pCur->info); \
52879 pCur->validNKey = 1; \
52880 }else{ \
52881 assertCellInfo(pCur); \
52883 #endif /* _MSC_VER */
52885 #ifndef NDEBUG /* The next routine used only within assert() statements */
52887 ** Return true if the given BtCursor is valid. A valid cursor is one
52888 ** that is currently pointing to a row in a (non-empty) table.
52889 ** This is a verification routine is used only within assert() statements.
52891 SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){
52892 return pCur && pCur->eState==CURSOR_VALID;
52894 #endif /* NDEBUG */
52897 ** Set *pSize to the size of the buffer needed to hold the value of
52898 ** the key for the current entry. If the cursor is not pointing
52899 ** to a valid entry, *pSize is set to 0.
52901 ** For a table with the INTKEY flag set, this routine returns the key
52902 ** itself, not the number of bytes in the key.
52904 ** The caller must position the cursor prior to invoking this routine.
52906 ** This routine cannot fail. It always returns SQLITE_OK.
52908 SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){
52909 assert( cursorHoldsMutex(pCur) );
52910 assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID );
52911 if( pCur->eState!=CURSOR_VALID ){
52912 *pSize = 0;
52913 }else{
52914 getCellInfo(pCur);
52915 *pSize = pCur->info.nKey;
52917 return SQLITE_OK;
52921 ** Set *pSize to the number of bytes of data in the entry the
52922 ** cursor currently points to.
52924 ** The caller must guarantee that the cursor is pointing to a non-NULL
52925 ** valid entry. In other words, the calling procedure must guarantee
52926 ** that the cursor has Cursor.eState==CURSOR_VALID.
52928 ** Failure is not possible. This function always returns SQLITE_OK.
52929 ** It might just as well be a procedure (returning void) but we continue
52930 ** to return an integer result code for historical reasons.
52932 SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){
52933 assert( cursorHoldsMutex(pCur) );
52934 assert( pCur->eState==CURSOR_VALID );
52935 getCellInfo(pCur);
52936 *pSize = pCur->info.nData;
52937 return SQLITE_OK;
52941 ** Given the page number of an overflow page in the database (parameter
52942 ** ovfl), this function finds the page number of the next page in the
52943 ** linked list of overflow pages. If possible, it uses the auto-vacuum
52944 ** pointer-map data instead of reading the content of page ovfl to do so.
52946 ** If an error occurs an SQLite error code is returned. Otherwise:
52948 ** The page number of the next overflow page in the linked list is
52949 ** written to *pPgnoNext. If page ovfl is the last page in its linked
52950 ** list, *pPgnoNext is set to zero.
52952 ** If ppPage is not NULL, and a reference to the MemPage object corresponding
52953 ** to page number pOvfl was obtained, then *ppPage is set to point to that
52954 ** reference. It is the responsibility of the caller to call releasePage()
52955 ** on *ppPage to free the reference. In no reference was obtained (because
52956 ** the pointer-map was used to obtain the value for *pPgnoNext), then
52957 ** *ppPage is set to zero.
52959 static int getOverflowPage(
52960 BtShared *pBt, /* The database file */
52961 Pgno ovfl, /* Current overflow page number */
52962 MemPage **ppPage, /* OUT: MemPage handle (may be NULL) */
52963 Pgno *pPgnoNext /* OUT: Next overflow page number */
52965 Pgno next = 0;
52966 MemPage *pPage = 0;
52967 int rc = SQLITE_OK;
52969 assert( sqlite3_mutex_held(pBt->mutex) );
52970 assert(pPgnoNext);
52972 #ifndef SQLITE_OMIT_AUTOVACUUM
52973 /* Try to find the next page in the overflow list using the
52974 ** autovacuum pointer-map pages. Guess that the next page in
52975 ** the overflow list is page number (ovfl+1). If that guess turns
52976 ** out to be wrong, fall back to loading the data of page
52977 ** number ovfl to determine the next page number.
52979 if( pBt->autoVacuum ){
52980 Pgno pgno;
52981 Pgno iGuess = ovfl+1;
52982 u8 eType;
52984 while( PTRMAP_ISPAGE(pBt, iGuess) || iGuess==PENDING_BYTE_PAGE(pBt) ){
52985 iGuess++;
52988 if( iGuess<=btreePagecount(pBt) ){
52989 rc = ptrmapGet(pBt, iGuess, &eType, &pgno);
52990 if( rc==SQLITE_OK && eType==PTRMAP_OVERFLOW2 && pgno==ovfl ){
52991 next = iGuess;
52992 rc = SQLITE_DONE;
52996 #endif
52998 assert( next==0 || rc==SQLITE_DONE );
52999 if( rc==SQLITE_OK ){
53000 rc = btreeGetPage(pBt, ovfl, &pPage, 0);
53001 assert( rc==SQLITE_OK || pPage==0 );
53002 if( rc==SQLITE_OK ){
53003 next = get4byte(pPage->aData);
53007 *pPgnoNext = next;
53008 if( ppPage ){
53009 *ppPage = pPage;
53010 }else{
53011 releasePage(pPage);
53013 return (rc==SQLITE_DONE ? SQLITE_OK : rc);
53017 ** Copy data from a buffer to a page, or from a page to a buffer.
53019 ** pPayload is a pointer to data stored on database page pDbPage.
53020 ** If argument eOp is false, then nByte bytes of data are copied
53021 ** from pPayload to the buffer pointed at by pBuf. If eOp is true,
53022 ** then sqlite3PagerWrite() is called on pDbPage and nByte bytes
53023 ** of data are copied from the buffer pBuf to pPayload.
53025 ** SQLITE_OK is returned on success, otherwise an error code.
53027 static int copyPayload(
53028 void *pPayload, /* Pointer to page data */
53029 void *pBuf, /* Pointer to buffer */
53030 int nByte, /* Number of bytes to copy */
53031 int eOp, /* 0 -> copy from page, 1 -> copy to page */
53032 DbPage *pDbPage /* Page containing pPayload */
53034 if( eOp ){
53035 /* Copy data from buffer to page (a write operation) */
53036 int rc = sqlite3PagerWrite(pDbPage);
53037 if( rc!=SQLITE_OK ){
53038 return rc;
53040 memcpy(pPayload, pBuf, nByte);
53041 }else{
53042 /* Copy data from page to buffer (a read operation) */
53043 memcpy(pBuf, pPayload, nByte);
53045 return SQLITE_OK;
53049 ** This function is used to read or overwrite payload information
53050 ** for the entry that the pCur cursor is pointing to. If the eOp
53051 ** parameter is 0, this is a read operation (data copied into
53052 ** buffer pBuf). If it is non-zero, a write (data copied from
53053 ** buffer pBuf).
53055 ** A total of "amt" bytes are read or written beginning at "offset".
53056 ** Data is read to or from the buffer pBuf.
53058 ** The content being read or written might appear on the main page
53059 ** or be scattered out on multiple overflow pages.
53061 ** If the BtCursor.isIncrblobHandle flag is set, and the current
53062 ** cursor entry uses one or more overflow pages, this function
53063 ** allocates space for and lazily popluates the overflow page-list
53064 ** cache array (BtCursor.aOverflow). Subsequent calls use this
53065 ** cache to make seeking to the supplied offset more efficient.
53067 ** Once an overflow page-list cache has been allocated, it may be
53068 ** invalidated if some other cursor writes to the same table, or if
53069 ** the cursor is moved to a different row. Additionally, in auto-vacuum
53070 ** mode, the following events may invalidate an overflow page-list cache.
53072 ** * An incremental vacuum,
53073 ** * A commit in auto_vacuum="full" mode,
53074 ** * Creating a table (may require moving an overflow page).
53076 static int accessPayload(
53077 BtCursor *pCur, /* Cursor pointing to entry to read from */
53078 u32 offset, /* Begin reading this far into payload */
53079 u32 amt, /* Read this many bytes */
53080 unsigned char *pBuf, /* Write the bytes into this buffer */
53081 int eOp /* zero to read. non-zero to write. */
53083 unsigned char *aPayload;
53084 int rc = SQLITE_OK;
53085 u32 nKey;
53086 int iIdx = 0;
53087 MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */
53088 BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */
53090 assert( pPage );
53091 assert( pCur->eState==CURSOR_VALID );
53092 assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
53093 assert( cursorHoldsMutex(pCur) );
53095 getCellInfo(pCur);
53096 aPayload = pCur->info.pCell + pCur->info.nHeader;
53097 nKey = (pPage->intKey ? 0 : (int)pCur->info.nKey);
53099 if( NEVER(offset+amt > nKey+pCur->info.nData)
53100 || &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize]
53102 /* Trying to read or write past the end of the data is an error */
53103 return SQLITE_CORRUPT_BKPT;
53106 /* Check if data must be read/written to/from the btree page itself. */
53107 if( offset<pCur->info.nLocal ){
53108 int a = amt;
53109 if( a+offset>pCur->info.nLocal ){
53110 a = pCur->info.nLocal - offset;
53112 rc = copyPayload(&aPayload[offset], pBuf, a, eOp, pPage->pDbPage);
53113 offset = 0;
53114 pBuf += a;
53115 amt -= a;
53116 }else{
53117 offset -= pCur->info.nLocal;
53120 if( rc==SQLITE_OK && amt>0 ){
53121 const u32 ovflSize = pBt->usableSize - 4; /* Bytes content per ovfl page */
53122 Pgno nextPage;
53124 nextPage = get4byte(&aPayload[pCur->info.nLocal]);
53126 #ifndef SQLITE_OMIT_INCRBLOB
53127 /* If the isIncrblobHandle flag is set and the BtCursor.aOverflow[]
53128 ** has not been allocated, allocate it now. The array is sized at
53129 ** one entry for each overflow page in the overflow chain. The
53130 ** page number of the first overflow page is stored in aOverflow[0],
53131 ** etc. A value of 0 in the aOverflow[] array means "not yet known"
53132 ** (the cache is lazily populated).
53134 if( pCur->isIncrblobHandle && !pCur->aOverflow ){
53135 int nOvfl = (pCur->info.nPayload-pCur->info.nLocal+ovflSize-1)/ovflSize;
53136 pCur->aOverflow = (Pgno *)sqlite3MallocZero(sizeof(Pgno)*nOvfl);
53137 /* nOvfl is always positive. If it were zero, fetchPayload would have
53138 ** been used instead of this routine. */
53139 if( ALWAYS(nOvfl) && !pCur->aOverflow ){
53140 rc = SQLITE_NOMEM;
53144 /* If the overflow page-list cache has been allocated and the
53145 ** entry for the first required overflow page is valid, skip
53146 ** directly to it.
53148 if( pCur->aOverflow && pCur->aOverflow[offset/ovflSize] ){
53149 iIdx = (offset/ovflSize);
53150 nextPage = pCur->aOverflow[iIdx];
53151 offset = (offset%ovflSize);
53153 #endif
53155 for( ; rc==SQLITE_OK && amt>0 && nextPage; iIdx++){
53157 #ifndef SQLITE_OMIT_INCRBLOB
53158 /* If required, populate the overflow page-list cache. */
53159 if( pCur->aOverflow ){
53160 assert(!pCur->aOverflow[iIdx] || pCur->aOverflow[iIdx]==nextPage);
53161 pCur->aOverflow[iIdx] = nextPage;
53163 #endif
53165 if( offset>=ovflSize ){
53166 /* The only reason to read this page is to obtain the page
53167 ** number for the next page in the overflow chain. The page
53168 ** data is not required. So first try to lookup the overflow
53169 ** page-list cache, if any, then fall back to the getOverflowPage()
53170 ** function.
53172 #ifndef SQLITE_OMIT_INCRBLOB
53173 if( pCur->aOverflow && pCur->aOverflow[iIdx+1] ){
53174 nextPage = pCur->aOverflow[iIdx+1];
53175 } else
53176 #endif
53177 rc = getOverflowPage(pBt, nextPage, 0, &nextPage);
53178 offset -= ovflSize;
53179 }else{
53180 /* Need to read this page properly. It contains some of the
53181 ** range of data that is being read (eOp==0) or written (eOp!=0).
53183 #ifdef SQLITE_DIRECT_OVERFLOW_READ
53184 sqlite3_file *fd;
53185 #endif
53186 int a = amt;
53187 if( a + offset > ovflSize ){
53188 a = ovflSize - offset;
53191 #ifdef SQLITE_DIRECT_OVERFLOW_READ
53192 /* If all the following are true:
53194 ** 1) this is a read operation, and
53195 ** 2) data is required from the start of this overflow page, and
53196 ** 3) the database is file-backed, and
53197 ** 4) there is no open write-transaction, and
53198 ** 5) the database is not a WAL database,
53200 ** then data can be read directly from the database file into the
53201 ** output buffer, bypassing the page-cache altogether. This speeds
53202 ** up loading large records that span many overflow pages.
53204 if( eOp==0 /* (1) */
53205 && offset==0 /* (2) */
53206 && pBt->inTransaction==TRANS_READ /* (4) */
53207 && (fd = sqlite3PagerFile(pBt->pPager))->pMethods /* (3) */
53208 && pBt->pPage1->aData[19]==0x01 /* (5) */
53210 u8 aSave[4];
53211 u8 *aWrite = &pBuf[-4];
53212 memcpy(aSave, aWrite, 4);
53213 rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1));
53214 nextPage = get4byte(aWrite);
53215 memcpy(aWrite, aSave, 4);
53216 }else
53217 #endif
53220 DbPage *pDbPage;
53221 rc = sqlite3PagerGet(pBt->pPager, nextPage, &pDbPage);
53222 if( rc==SQLITE_OK ){
53223 aPayload = sqlite3PagerGetData(pDbPage);
53224 nextPage = get4byte(aPayload);
53225 rc = copyPayload(&aPayload[offset+4], pBuf, a, eOp, pDbPage);
53226 sqlite3PagerUnref(pDbPage);
53227 offset = 0;
53230 amt -= a;
53231 pBuf += a;
53236 if( rc==SQLITE_OK && amt>0 ){
53237 return SQLITE_CORRUPT_BKPT;
53239 return rc;
53243 ** Read part of the key associated with cursor pCur. Exactly
53244 ** "amt" bytes will be transfered into pBuf[]. The transfer
53245 ** begins at "offset".
53247 ** The caller must ensure that pCur is pointing to a valid row
53248 ** in the table.
53250 ** Return SQLITE_OK on success or an error code if anything goes
53251 ** wrong. An error is returned if "offset+amt" is larger than
53252 ** the available payload.
53254 SQLITE_PRIVATE int sqlite3BtreeKey(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
53255 assert( cursorHoldsMutex(pCur) );
53256 assert( pCur->eState==CURSOR_VALID );
53257 assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
53258 assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
53259 return accessPayload(pCur, offset, amt, (unsigned char*)pBuf, 0);
53263 ** Read part of the data associated with cursor pCur. Exactly
53264 ** "amt" bytes will be transfered into pBuf[]. The transfer
53265 ** begins at "offset".
53267 ** Return SQLITE_OK on success or an error code if anything goes
53268 ** wrong. An error is returned if "offset+amt" is larger than
53269 ** the available payload.
53271 SQLITE_PRIVATE int sqlite3BtreeData(BtCursor *pCur, u32 offset, u32 amt, void *pBuf){
53272 int rc;
53274 #ifndef SQLITE_OMIT_INCRBLOB
53275 if ( pCur->eState==CURSOR_INVALID ){
53276 return SQLITE_ABORT;
53278 #endif
53280 assert( cursorHoldsMutex(pCur) );
53281 rc = restoreCursorPosition(pCur);
53282 if( rc==SQLITE_OK ){
53283 assert( pCur->eState==CURSOR_VALID );
53284 assert( pCur->iPage>=0 && pCur->apPage[pCur->iPage] );
53285 assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
53286 rc = accessPayload(pCur, offset, amt, pBuf, 0);
53288 return rc;
53292 ** Return a pointer to payload information from the entry that the
53293 ** pCur cursor is pointing to. The pointer is to the beginning of
53294 ** the key if skipKey==0 and it points to the beginning of data if
53295 ** skipKey==1. The number of bytes of available key/data is written
53296 ** into *pAmt. If *pAmt==0, then the value returned will not be
53297 ** a valid pointer.
53299 ** This routine is an optimization. It is common for the entire key
53300 ** and data to fit on the local page and for there to be no overflow
53301 ** pages. When that is so, this routine can be used to access the
53302 ** key and data without making a copy. If the key and/or data spills
53303 ** onto overflow pages, then accessPayload() must be used to reassemble
53304 ** the key/data and copy it into a preallocated buffer.
53306 ** The pointer returned by this routine looks directly into the cached
53307 ** page of the database. The data might change or move the next time
53308 ** any btree routine is called.
53310 static const unsigned char *fetchPayload(
53311 BtCursor *pCur, /* Cursor pointing to entry to read from */
53312 int *pAmt, /* Write the number of available bytes here */
53313 int skipKey /* read beginning at data if this is true */
53315 unsigned char *aPayload;
53316 MemPage *pPage;
53317 u32 nKey;
53318 u32 nLocal;
53320 assert( pCur!=0 && pCur->iPage>=0 && pCur->apPage[pCur->iPage]);
53321 assert( pCur->eState==CURSOR_VALID );
53322 assert( cursorHoldsMutex(pCur) );
53323 pPage = pCur->apPage[pCur->iPage];
53324 assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
53325 if( NEVER(pCur->info.nSize==0) ){
53326 btreeParseCell(pCur->apPage[pCur->iPage], pCur->aiIdx[pCur->iPage],
53327 &pCur->info);
53329 aPayload = pCur->info.pCell;
53330 aPayload += pCur->info.nHeader;
53331 if( pPage->intKey ){
53332 nKey = 0;
53333 }else{
53334 nKey = (int)pCur->info.nKey;
53336 if( skipKey ){
53337 aPayload += nKey;
53338 nLocal = pCur->info.nLocal - nKey;
53339 }else{
53340 nLocal = pCur->info.nLocal;
53341 assert( nLocal<=nKey );
53343 *pAmt = nLocal;
53344 return aPayload;
53349 ** For the entry that cursor pCur is point to, return as
53350 ** many bytes of the key or data as are available on the local
53351 ** b-tree page. Write the number of available bytes into *pAmt.
53353 ** The pointer returned is ephemeral. The key/data may move
53354 ** or be destroyed on the next call to any Btree routine,
53355 ** including calls from other threads against the same cache.
53356 ** Hence, a mutex on the BtShared should be held prior to calling
53357 ** this routine.
53359 ** These routines is used to get quick access to key and data
53360 ** in the common case where no overflow pages are used.
53362 SQLITE_PRIVATE const void *sqlite3BtreeKeyFetch(BtCursor *pCur, int *pAmt){
53363 const void *p = 0;
53364 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53365 assert( cursorHoldsMutex(pCur) );
53366 if( ALWAYS(pCur->eState==CURSOR_VALID) ){
53367 p = (const void*)fetchPayload(pCur, pAmt, 0);
53369 return p;
53371 SQLITE_PRIVATE const void *sqlite3BtreeDataFetch(BtCursor *pCur, int *pAmt){
53372 const void *p = 0;
53373 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53374 assert( cursorHoldsMutex(pCur) );
53375 if( ALWAYS(pCur->eState==CURSOR_VALID) ){
53376 p = (const void*)fetchPayload(pCur, pAmt, 1);
53378 return p;
53383 ** Move the cursor down to a new child page. The newPgno argument is the
53384 ** page number of the child page to move to.
53386 ** This function returns SQLITE_CORRUPT if the page-header flags field of
53387 ** the new child page does not match the flags field of the parent (i.e.
53388 ** if an intkey page appears to be the parent of a non-intkey page, or
53389 ** vice-versa).
53391 static int moveToChild(BtCursor *pCur, u32 newPgno){
53392 int rc;
53393 int i = pCur->iPage;
53394 MemPage *pNewPage;
53395 BtShared *pBt = pCur->pBt;
53397 assert( cursorHoldsMutex(pCur) );
53398 assert( pCur->eState==CURSOR_VALID );
53399 assert( pCur->iPage<BTCURSOR_MAX_DEPTH );
53400 if( pCur->iPage>=(BTCURSOR_MAX_DEPTH-1) ){
53401 return SQLITE_CORRUPT_BKPT;
53403 rc = getAndInitPage(pBt, newPgno, &pNewPage);
53404 if( rc ) return rc;
53405 pCur->apPage[i+1] = pNewPage;
53406 pCur->aiIdx[i+1] = 0;
53407 pCur->iPage++;
53409 pCur->info.nSize = 0;
53410 pCur->validNKey = 0;
53411 if( pNewPage->nCell<1 || pNewPage->intKey!=pCur->apPage[i]->intKey ){
53412 return SQLITE_CORRUPT_BKPT;
53414 return SQLITE_OK;
53417 #if 0
53419 ** Page pParent is an internal (non-leaf) tree page. This function
53420 ** asserts that page number iChild is the left-child if the iIdx'th
53421 ** cell in page pParent. Or, if iIdx is equal to the total number of
53422 ** cells in pParent, that page number iChild is the right-child of
53423 ** the page.
53425 static void assertParentIndex(MemPage *pParent, int iIdx, Pgno iChild){
53426 assert( iIdx<=pParent->nCell );
53427 if( iIdx==pParent->nCell ){
53428 assert( get4byte(&pParent->aData[pParent->hdrOffset+8])==iChild );
53429 }else{
53430 assert( get4byte(findCell(pParent, iIdx))==iChild );
53433 #else
53434 # define assertParentIndex(x,y,z)
53435 #endif
53438 ** Move the cursor up to the parent page.
53440 ** pCur->idx is set to the cell index that contains the pointer
53441 ** to the page we are coming from. If we are coming from the
53442 ** right-most child page then pCur->idx is set to one more than
53443 ** the largest cell index.
53445 static void moveToParent(BtCursor *pCur){
53446 assert( cursorHoldsMutex(pCur) );
53447 assert( pCur->eState==CURSOR_VALID );
53448 assert( pCur->iPage>0 );
53449 assert( pCur->apPage[pCur->iPage] );
53451 /* UPDATE: It is actually possible for the condition tested by the assert
53452 ** below to be untrue if the database file is corrupt. This can occur if
53453 ** one cursor has modified page pParent while a reference to it is held
53454 ** by a second cursor. Which can only happen if a single page is linked
53455 ** into more than one b-tree structure in a corrupt database. */
53456 #if 0
53457 assertParentIndex(
53458 pCur->apPage[pCur->iPage-1],
53459 pCur->aiIdx[pCur->iPage-1],
53460 pCur->apPage[pCur->iPage]->pgno
53462 #endif
53463 testcase( pCur->aiIdx[pCur->iPage-1] > pCur->apPage[pCur->iPage-1]->nCell );
53465 releasePage(pCur->apPage[pCur->iPage]);
53466 pCur->iPage--;
53467 pCur->info.nSize = 0;
53468 pCur->validNKey = 0;
53472 ** Move the cursor to point to the root page of its b-tree structure.
53474 ** If the table has a virtual root page, then the cursor is moved to point
53475 ** to the virtual root page instead of the actual root page. A table has a
53476 ** virtual root page when the actual root page contains no cells and a
53477 ** single child page. This can only happen with the table rooted at page 1.
53479 ** If the b-tree structure is empty, the cursor state is set to
53480 ** CURSOR_INVALID. Otherwise, the cursor is set to point to the first
53481 ** cell located on the root (or virtual root) page and the cursor state
53482 ** is set to CURSOR_VALID.
53484 ** If this function returns successfully, it may be assumed that the
53485 ** page-header flags indicate that the [virtual] root-page is the expected
53486 ** kind of b-tree page (i.e. if when opening the cursor the caller did not
53487 ** specify a KeyInfo structure the flags byte is set to 0x05 or 0x0D,
53488 ** indicating a table b-tree, or if the caller did specify a KeyInfo
53489 ** structure the flags byte is set to 0x02 or 0x0A, indicating an index
53490 ** b-tree).
53492 static int moveToRoot(BtCursor *pCur){
53493 MemPage *pRoot;
53494 int rc = SQLITE_OK;
53495 Btree *p = pCur->pBtree;
53496 BtShared *pBt = p->pBt;
53498 assert( cursorHoldsMutex(pCur) );
53499 assert( CURSOR_INVALID < CURSOR_REQUIRESEEK );
53500 assert( CURSOR_VALID < CURSOR_REQUIRESEEK );
53501 assert( CURSOR_FAULT > CURSOR_REQUIRESEEK );
53502 if( pCur->eState>=CURSOR_REQUIRESEEK ){
53503 if( pCur->eState==CURSOR_FAULT ){
53504 assert( pCur->skipNext!=SQLITE_OK );
53505 return pCur->skipNext;
53507 sqlite3BtreeClearCursor(pCur);
53510 if( pCur->iPage>=0 ){
53511 int i;
53512 for(i=1; i<=pCur->iPage; i++){
53513 releasePage(pCur->apPage[i]);
53515 pCur->iPage = 0;
53516 }else if( pCur->pgnoRoot==0 ){
53517 pCur->eState = CURSOR_INVALID;
53518 return SQLITE_OK;
53519 }else{
53520 rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0]);
53521 if( rc!=SQLITE_OK ){
53522 pCur->eState = CURSOR_INVALID;
53523 return rc;
53525 pCur->iPage = 0;
53527 /* If pCur->pKeyInfo is not NULL, then the caller that opened this cursor
53528 ** expected to open it on an index b-tree. Otherwise, if pKeyInfo is
53529 ** NULL, the caller expects a table b-tree. If this is not the case,
53530 ** return an SQLITE_CORRUPT error. */
53531 assert( pCur->apPage[0]->intKey==1 || pCur->apPage[0]->intKey==0 );
53532 if( (pCur->pKeyInfo==0)!=pCur->apPage[0]->intKey ){
53533 return SQLITE_CORRUPT_BKPT;
53537 /* Assert that the root page is of the correct type. This must be the
53538 ** case as the call to this function that loaded the root-page (either
53539 ** this call or a previous invocation) would have detected corruption
53540 ** if the assumption were not true, and it is not possible for the flags
53541 ** byte to have been modified while this cursor is holding a reference
53542 ** to the page. */
53543 pRoot = pCur->apPage[0];
53544 assert( pRoot->pgno==pCur->pgnoRoot );
53545 assert( pRoot->isInit && (pCur->pKeyInfo==0)==pRoot->intKey );
53547 pCur->aiIdx[0] = 0;
53548 pCur->info.nSize = 0;
53549 pCur->atLast = 0;
53550 pCur->validNKey = 0;
53552 if( pRoot->nCell==0 && !pRoot->leaf ){
53553 Pgno subpage;
53554 if( pRoot->pgno!=1 ) return SQLITE_CORRUPT_BKPT;
53555 subpage = get4byte(&pRoot->aData[pRoot->hdrOffset+8]);
53556 pCur->eState = CURSOR_VALID;
53557 rc = moveToChild(pCur, subpage);
53558 }else{
53559 pCur->eState = ((pRoot->nCell>0)?CURSOR_VALID:CURSOR_INVALID);
53561 return rc;
53565 ** Move the cursor down to the left-most leaf entry beneath the
53566 ** entry to which it is currently pointing.
53568 ** The left-most leaf is the one with the smallest key - the first
53569 ** in ascending order.
53571 static int moveToLeftmost(BtCursor *pCur){
53572 Pgno pgno;
53573 int rc = SQLITE_OK;
53574 MemPage *pPage;
53576 assert( cursorHoldsMutex(pCur) );
53577 assert( pCur->eState==CURSOR_VALID );
53578 while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
53579 assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
53580 pgno = get4byte(findCell(pPage, pCur->aiIdx[pCur->iPage]));
53581 rc = moveToChild(pCur, pgno);
53583 return rc;
53587 ** Move the cursor down to the right-most leaf entry beneath the
53588 ** page to which it is currently pointing. Notice the difference
53589 ** between moveToLeftmost() and moveToRightmost(). moveToLeftmost()
53590 ** finds the left-most entry beneath the *entry* whereas moveToRightmost()
53591 ** finds the right-most entry beneath the *page*.
53593 ** The right-most entry is the one with the largest key - the last
53594 ** key in ascending order.
53596 static int moveToRightmost(BtCursor *pCur){
53597 Pgno pgno;
53598 int rc = SQLITE_OK;
53599 MemPage *pPage = 0;
53601 assert( cursorHoldsMutex(pCur) );
53602 assert( pCur->eState==CURSOR_VALID );
53603 while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
53604 pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
53605 pCur->aiIdx[pCur->iPage] = pPage->nCell;
53606 rc = moveToChild(pCur, pgno);
53608 if( rc==SQLITE_OK ){
53609 pCur->aiIdx[pCur->iPage] = pPage->nCell-1;
53610 pCur->info.nSize = 0;
53611 pCur->validNKey = 0;
53613 return rc;
53616 /* Move the cursor to the first entry in the table. Return SQLITE_OK
53617 ** on success. Set *pRes to 0 if the cursor actually points to something
53618 ** or set *pRes to 1 if the table is empty.
53620 SQLITE_PRIVATE int sqlite3BtreeFirst(BtCursor *pCur, int *pRes){
53621 int rc;
53623 assert( cursorHoldsMutex(pCur) );
53624 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53625 rc = moveToRoot(pCur);
53626 if( rc==SQLITE_OK ){
53627 if( pCur->eState==CURSOR_INVALID ){
53628 assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
53629 *pRes = 1;
53630 }else{
53631 assert( pCur->apPage[pCur->iPage]->nCell>0 );
53632 *pRes = 0;
53633 rc = moveToLeftmost(pCur);
53636 return rc;
53639 /* Move the cursor to the last entry in the table. Return SQLITE_OK
53640 ** on success. Set *pRes to 0 if the cursor actually points to something
53641 ** or set *pRes to 1 if the table is empty.
53643 SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
53644 int rc;
53646 assert( cursorHoldsMutex(pCur) );
53647 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53649 /* If the cursor already points to the last entry, this is a no-op. */
53650 if( CURSOR_VALID==pCur->eState && pCur->atLast ){
53651 #ifdef SQLITE_DEBUG
53652 /* This block serves to assert() that the cursor really does point
53653 ** to the last entry in the b-tree. */
53654 int ii;
53655 for(ii=0; ii<pCur->iPage; ii++){
53656 assert( pCur->aiIdx[ii]==pCur->apPage[ii]->nCell );
53658 assert( pCur->aiIdx[pCur->iPage]==pCur->apPage[pCur->iPage]->nCell-1 );
53659 assert( pCur->apPage[pCur->iPage]->leaf );
53660 #endif
53661 return SQLITE_OK;
53664 rc = moveToRoot(pCur);
53665 if( rc==SQLITE_OK ){
53666 if( CURSOR_INVALID==pCur->eState ){
53667 assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
53668 *pRes = 1;
53669 }else{
53670 assert( pCur->eState==CURSOR_VALID );
53671 *pRes = 0;
53672 rc = moveToRightmost(pCur);
53673 pCur->atLast = rc==SQLITE_OK ?1:0;
53676 return rc;
53679 /* Move the cursor so that it points to an entry near the key
53680 ** specified by pIdxKey or intKey. Return a success code.
53682 ** For INTKEY tables, the intKey parameter is used. pIdxKey
53683 ** must be NULL. For index tables, pIdxKey is used and intKey
53684 ** is ignored.
53686 ** If an exact match is not found, then the cursor is always
53687 ** left pointing at a leaf page which would hold the entry if it
53688 ** were present. The cursor might point to an entry that comes
53689 ** before or after the key.
53691 ** An integer is written into *pRes which is the result of
53692 ** comparing the key with the entry to which the cursor is
53693 ** pointing. The meaning of the integer written into
53694 ** *pRes is as follows:
53696 ** *pRes<0 The cursor is left pointing at an entry that
53697 ** is smaller than intKey/pIdxKey or if the table is empty
53698 ** and the cursor is therefore left point to nothing.
53700 ** *pRes==0 The cursor is left pointing at an entry that
53701 ** exactly matches intKey/pIdxKey.
53703 ** *pRes>0 The cursor is left pointing at an entry that
53704 ** is larger than intKey/pIdxKey.
53707 SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
53708 BtCursor *pCur, /* The cursor to be moved */
53709 UnpackedRecord *pIdxKey, /* Unpacked index key */
53710 i64 intKey, /* The table key */
53711 int biasRight, /* If true, bias the search to the high end */
53712 int *pRes /* Write search results here */
53714 int rc;
53716 assert( cursorHoldsMutex(pCur) );
53717 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
53718 assert( pRes );
53719 assert( (pIdxKey==0)==(pCur->pKeyInfo==0) );
53721 /* If the cursor is already positioned at the point we are trying
53722 ** to move to, then just return without doing any work */
53723 if( pCur->eState==CURSOR_VALID && pCur->validNKey
53724 && pCur->apPage[0]->intKey
53726 if( pCur->info.nKey==intKey ){
53727 *pRes = 0;
53728 return SQLITE_OK;
53730 if( pCur->atLast && pCur->info.nKey<intKey ){
53731 *pRes = -1;
53732 return SQLITE_OK;
53736 rc = moveToRoot(pCur);
53737 if( rc ){
53738 return rc;
53740 assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage] );
53741 assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->isInit );
53742 assert( pCur->eState==CURSOR_INVALID || pCur->apPage[pCur->iPage]->nCell>0 );
53743 if( pCur->eState==CURSOR_INVALID ){
53744 *pRes = -1;
53745 assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
53746 return SQLITE_OK;
53748 assert( pCur->apPage[0]->intKey || pIdxKey );
53749 for(;;){
53750 int lwr, upr, idx;
53751 Pgno chldPg;
53752 MemPage *pPage = pCur->apPage[pCur->iPage];
53753 int c;
53755 /* pPage->nCell must be greater than zero. If this is the root-page
53756 ** the cursor would have been INVALID above and this for(;;) loop
53757 ** not run. If this is not the root-page, then the moveToChild() routine
53758 ** would have already detected db corruption. Similarly, pPage must
53759 ** be the right kind (index or table) of b-tree page. Otherwise
53760 ** a moveToChild() or moveToRoot() call would have detected corruption. */
53761 assert( pPage->nCell>0 );
53762 assert( pPage->intKey==(pIdxKey==0) );
53763 lwr = 0;
53764 upr = pPage->nCell-1;
53765 if( biasRight ){
53766 pCur->aiIdx[pCur->iPage] = (u16)(idx = upr);
53767 }else{
53768 pCur->aiIdx[pCur->iPage] = (u16)(idx = (upr+lwr)/2);
53770 for(;;){
53771 u8 *pCell; /* Pointer to current cell in pPage */
53773 assert( idx==pCur->aiIdx[pCur->iPage] );
53774 pCur->info.nSize = 0;
53775 pCell = findCell(pPage, idx) + pPage->childPtrSize;
53776 if( pPage->intKey ){
53777 i64 nCellKey;
53778 if( pPage->hasData ){
53779 u32 dummy;
53780 pCell += getVarint32(pCell, dummy);
53782 getVarint(pCell, (u64*)&nCellKey);
53783 if( nCellKey==intKey ){
53784 c = 0;
53785 }else if( nCellKey<intKey ){
53786 c = -1;
53787 }else{
53788 assert( nCellKey>intKey );
53789 c = +1;
53791 pCur->validNKey = 1;
53792 pCur->info.nKey = nCellKey;
53793 }else{
53794 /* The maximum supported page-size is 65536 bytes. This means that
53795 ** the maximum number of record bytes stored on an index B-Tree
53796 ** page is less than 16384 bytes and may be stored as a 2-byte
53797 ** varint. This information is used to attempt to avoid parsing
53798 ** the entire cell by checking for the cases where the record is
53799 ** stored entirely within the b-tree page by inspecting the first
53800 ** 2 bytes of the cell.
53802 int nCell = pCell[0];
53803 if( nCell<=pPage->max1bytePayload
53804 /* && (pCell+nCell)<pPage->aDataEnd */
53806 /* This branch runs if the record-size field of the cell is a
53807 ** single byte varint and the record fits entirely on the main
53808 ** b-tree page. */
53809 testcase( pCell+nCell+1==pPage->aDataEnd );
53810 c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[1], pIdxKey);
53811 }else if( !(pCell[1] & 0x80)
53812 && (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal
53813 /* && (pCell+nCell+2)<=pPage->aDataEnd */
53815 /* The record-size field is a 2 byte varint and the record
53816 ** fits entirely on the main b-tree page. */
53817 testcase( pCell+nCell+2==pPage->aDataEnd );
53818 c = sqlite3VdbeRecordCompare(nCell, (void*)&pCell[2], pIdxKey);
53819 }else{
53820 /* The record flows over onto one or more overflow pages. In
53821 ** this case the whole cell needs to be parsed, a buffer allocated
53822 ** and accessPayload() used to retrieve the record into the
53823 ** buffer before VdbeRecordCompare() can be called. */
53824 void *pCellKey;
53825 u8 * const pCellBody = pCell - pPage->childPtrSize;
53826 btreeParseCellPtr(pPage, pCellBody, &pCur->info);
53827 nCell = (int)pCur->info.nKey;
53828 pCellKey = sqlite3Malloc( nCell );
53829 if( pCellKey==0 ){
53830 rc = SQLITE_NOMEM;
53831 goto moveto_finish;
53833 rc = accessPayload(pCur, 0, nCell, (unsigned char*)pCellKey, 0);
53834 if( rc ){
53835 sqlite3_free(pCellKey);
53836 goto moveto_finish;
53838 c = sqlite3VdbeRecordCompare(nCell, pCellKey, pIdxKey);
53839 sqlite3_free(pCellKey);
53842 if( c==0 ){
53843 if( pPage->intKey && !pPage->leaf ){
53844 lwr = idx;
53845 break;
53846 }else{
53847 *pRes = 0;
53848 rc = SQLITE_OK;
53849 goto moveto_finish;
53852 if( c<0 ){
53853 lwr = idx+1;
53854 }else{
53855 upr = idx-1;
53857 if( lwr>upr ){
53858 break;
53860 pCur->aiIdx[pCur->iPage] = (u16)(idx = (lwr+upr)/2);
53862 assert( lwr==upr+1 || (pPage->intKey && !pPage->leaf) );
53863 assert( pPage->isInit );
53864 if( pPage->leaf ){
53865 chldPg = 0;
53866 }else if( lwr>=pPage->nCell ){
53867 chldPg = get4byte(&pPage->aData[pPage->hdrOffset+8]);
53868 }else{
53869 chldPg = get4byte(findCell(pPage, lwr));
53871 if( chldPg==0 ){
53872 assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
53873 *pRes = c;
53874 rc = SQLITE_OK;
53875 goto moveto_finish;
53877 pCur->aiIdx[pCur->iPage] = (u16)lwr;
53878 pCur->info.nSize = 0;
53879 pCur->validNKey = 0;
53880 rc = moveToChild(pCur, chldPg);
53881 if( rc ) goto moveto_finish;
53883 moveto_finish:
53884 return rc;
53889 ** Return TRUE if the cursor is not pointing at an entry of the table.
53891 ** TRUE will be returned after a call to sqlite3BtreeNext() moves
53892 ** past the last entry in the table or sqlite3BtreePrev() moves past
53893 ** the first entry. TRUE is also returned if the table is empty.
53895 SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
53896 /* TODO: What if the cursor is in CURSOR_REQUIRESEEK but all table entries
53897 ** have been deleted? This API will need to change to return an error code
53898 ** as well as the boolean result value.
53900 return (CURSOR_VALID!=pCur->eState);
53904 ** Advance the cursor to the next entry in the database. If
53905 ** successful then set *pRes=0. If the cursor
53906 ** was already pointing to the last entry in the database before
53907 ** this routine was called, then set *pRes=1.
53909 SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
53910 int rc;
53911 int idx;
53912 MemPage *pPage;
53914 assert( cursorHoldsMutex(pCur) );
53915 rc = restoreCursorPosition(pCur);
53916 if( rc!=SQLITE_OK ){
53917 return rc;
53919 assert( pRes!=0 );
53920 if( CURSOR_INVALID==pCur->eState ){
53921 *pRes = 1;
53922 return SQLITE_OK;
53924 if( pCur->skipNext>0 ){
53925 pCur->skipNext = 0;
53926 *pRes = 0;
53927 return SQLITE_OK;
53929 pCur->skipNext = 0;
53931 pPage = pCur->apPage[pCur->iPage];
53932 idx = ++pCur->aiIdx[pCur->iPage];
53933 assert( pPage->isInit );
53935 /* If the database file is corrupt, it is possible for the value of idx
53936 ** to be invalid here. This can only occur if a second cursor modifies
53937 ** the page while cursor pCur is holding a reference to it. Which can
53938 ** only happen if the database is corrupt in such a way as to link the
53939 ** page into more than one b-tree structure. */
53940 testcase( idx>pPage->nCell );
53942 pCur->info.nSize = 0;
53943 pCur->validNKey = 0;
53944 if( idx>=pPage->nCell ){
53945 if( !pPage->leaf ){
53946 rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
53947 if( rc ) return rc;
53948 rc = moveToLeftmost(pCur);
53949 *pRes = 0;
53950 return rc;
53953 if( pCur->iPage==0 ){
53954 *pRes = 1;
53955 pCur->eState = CURSOR_INVALID;
53956 return SQLITE_OK;
53958 moveToParent(pCur);
53959 pPage = pCur->apPage[pCur->iPage];
53960 }while( pCur->aiIdx[pCur->iPage]>=pPage->nCell );
53961 *pRes = 0;
53962 if( pPage->intKey ){
53963 rc = sqlite3BtreeNext(pCur, pRes);
53964 }else{
53965 rc = SQLITE_OK;
53967 return rc;
53969 *pRes = 0;
53970 if( pPage->leaf ){
53971 return SQLITE_OK;
53973 rc = moveToLeftmost(pCur);
53974 return rc;
53979 ** Step the cursor to the back to the previous entry in the database. If
53980 ** successful then set *pRes=0. If the cursor
53981 ** was already pointing to the first entry in the database before
53982 ** this routine was called, then set *pRes=1.
53984 SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
53985 int rc;
53986 MemPage *pPage;
53988 assert( cursorHoldsMutex(pCur) );
53989 rc = restoreCursorPosition(pCur);
53990 if( rc!=SQLITE_OK ){
53991 return rc;
53993 pCur->atLast = 0;
53994 if( CURSOR_INVALID==pCur->eState ){
53995 *pRes = 1;
53996 return SQLITE_OK;
53998 if( pCur->skipNext<0 ){
53999 pCur->skipNext = 0;
54000 *pRes = 0;
54001 return SQLITE_OK;
54003 pCur->skipNext = 0;
54005 pPage = pCur->apPage[pCur->iPage];
54006 assert( pPage->isInit );
54007 if( !pPage->leaf ){
54008 int idx = pCur->aiIdx[pCur->iPage];
54009 rc = moveToChild(pCur, get4byte(findCell(pPage, idx)));
54010 if( rc ){
54011 return rc;
54013 rc = moveToRightmost(pCur);
54014 }else{
54015 while( pCur->aiIdx[pCur->iPage]==0 ){
54016 if( pCur->iPage==0 ){
54017 pCur->eState = CURSOR_INVALID;
54018 *pRes = 1;
54019 return SQLITE_OK;
54021 moveToParent(pCur);
54023 pCur->info.nSize = 0;
54024 pCur->validNKey = 0;
54026 pCur->aiIdx[pCur->iPage]--;
54027 pPage = pCur->apPage[pCur->iPage];
54028 if( pPage->intKey && !pPage->leaf ){
54029 rc = sqlite3BtreePrevious(pCur, pRes);
54030 }else{
54031 rc = SQLITE_OK;
54034 *pRes = 0;
54035 return rc;
54039 ** Allocate a new page from the database file.
54041 ** The new page is marked as dirty. (In other words, sqlite3PagerWrite()
54042 ** has already been called on the new page.) The new page has also
54043 ** been referenced and the calling routine is responsible for calling
54044 ** sqlite3PagerUnref() on the new page when it is done.
54046 ** SQLITE_OK is returned on success. Any other return value indicates
54047 ** an error. *ppPage and *pPgno are undefined in the event of an error.
54048 ** Do not invoke sqlite3PagerUnref() on *ppPage if an error is returned.
54050 ** If the "nearby" parameter is not 0, then a (feeble) effort is made to
54051 ** locate a page close to the page number "nearby". This can be used in an
54052 ** attempt to keep related pages close to each other in the database file,
54053 ** which in turn can make database access faster.
54055 ** If the "exact" parameter is not 0, and the page-number nearby exists
54056 ** anywhere on the free-list, then it is guarenteed to be returned. This
54057 ** is only used by auto-vacuum databases when allocating a new table.
54059 static int allocateBtreePage(
54060 BtShared *pBt,
54061 MemPage **ppPage,
54062 Pgno *pPgno,
54063 Pgno nearby,
54064 u8 exact
54066 MemPage *pPage1;
54067 int rc;
54068 u32 n; /* Number of pages on the freelist */
54069 u32 k; /* Number of leaves on the trunk of the freelist */
54070 MemPage *pTrunk = 0;
54071 MemPage *pPrevTrunk = 0;
54072 Pgno mxPage; /* Total size of the database file */
54074 assert( sqlite3_mutex_held(pBt->mutex) );
54075 pPage1 = pBt->pPage1;
54076 mxPage = btreePagecount(pBt);
54077 n = get4byte(&pPage1->aData[36]);
54078 testcase( n==mxPage-1 );
54079 if( n>=mxPage ){
54080 return SQLITE_CORRUPT_BKPT;
54082 if( n>0 ){
54083 /* There are pages on the freelist. Reuse one of those pages. */
54084 Pgno iTrunk;
54085 u8 searchList = 0; /* If the free-list must be searched for 'nearby' */
54087 /* If the 'exact' parameter was true and a query of the pointer-map
54088 ** shows that the page 'nearby' is somewhere on the free-list, then
54089 ** the entire-list will be searched for that page.
54091 #ifndef SQLITE_OMIT_AUTOVACUUM
54092 if( exact && nearby<=mxPage ){
54093 u8 eType;
54094 assert( nearby>0 );
54095 assert( pBt->autoVacuum );
54096 rc = ptrmapGet(pBt, nearby, &eType, 0);
54097 if( rc ) return rc;
54098 if( eType==PTRMAP_FREEPAGE ){
54099 searchList = 1;
54101 *pPgno = nearby;
54103 #endif
54105 /* Decrement the free-list count by 1. Set iTrunk to the index of the
54106 ** first free-list trunk page. iPrevTrunk is initially 1.
54108 rc = sqlite3PagerWrite(pPage1->pDbPage);
54109 if( rc ) return rc;
54110 put4byte(&pPage1->aData[36], n-1);
54112 /* The code within this loop is run only once if the 'searchList' variable
54113 ** is not true. Otherwise, it runs once for each trunk-page on the
54114 ** free-list until the page 'nearby' is located.
54116 do {
54117 pPrevTrunk = pTrunk;
54118 if( pPrevTrunk ){
54119 iTrunk = get4byte(&pPrevTrunk->aData[0]);
54120 }else{
54121 iTrunk = get4byte(&pPage1->aData[32]);
54123 testcase( iTrunk==mxPage );
54124 if( iTrunk>mxPage ){
54125 rc = SQLITE_CORRUPT_BKPT;
54126 }else{
54127 rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
54129 if( rc ){
54130 pTrunk = 0;
54131 goto end_allocate_page;
54133 assert( pTrunk!=0 );
54134 assert( pTrunk->aData!=0 );
54136 k = get4byte(&pTrunk->aData[4]); /* # of leaves on this trunk page */
54137 if( k==0 && !searchList ){
54138 /* The trunk has no leaves and the list is not being searched.
54139 ** So extract the trunk page itself and use it as the newly
54140 ** allocated page */
54141 assert( pPrevTrunk==0 );
54142 rc = sqlite3PagerWrite(pTrunk->pDbPage);
54143 if( rc ){
54144 goto end_allocate_page;
54146 *pPgno = iTrunk;
54147 memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
54148 *ppPage = pTrunk;
54149 pTrunk = 0;
54150 TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
54151 }else if( k>(u32)(pBt->usableSize/4 - 2) ){
54152 /* Value of k is out of range. Database corruption */
54153 rc = SQLITE_CORRUPT_BKPT;
54154 goto end_allocate_page;
54155 #ifndef SQLITE_OMIT_AUTOVACUUM
54156 }else if( searchList && nearby==iTrunk ){
54157 /* The list is being searched and this trunk page is the page
54158 ** to allocate, regardless of whether it has leaves.
54160 assert( *pPgno==iTrunk );
54161 *ppPage = pTrunk;
54162 searchList = 0;
54163 rc = sqlite3PagerWrite(pTrunk->pDbPage);
54164 if( rc ){
54165 goto end_allocate_page;
54167 if( k==0 ){
54168 if( !pPrevTrunk ){
54169 memcpy(&pPage1->aData[32], &pTrunk->aData[0], 4);
54170 }else{
54171 rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
54172 if( rc!=SQLITE_OK ){
54173 goto end_allocate_page;
54175 memcpy(&pPrevTrunk->aData[0], &pTrunk->aData[0], 4);
54177 }else{
54178 /* The trunk page is required by the caller but it contains
54179 ** pointers to free-list leaves. The first leaf becomes a trunk
54180 ** page in this case.
54182 MemPage *pNewTrunk;
54183 Pgno iNewTrunk = get4byte(&pTrunk->aData[8]);
54184 if( iNewTrunk>mxPage ){
54185 rc = SQLITE_CORRUPT_BKPT;
54186 goto end_allocate_page;
54188 testcase( iNewTrunk==mxPage );
54189 rc = btreeGetPage(pBt, iNewTrunk, &pNewTrunk, 0);
54190 if( rc!=SQLITE_OK ){
54191 goto end_allocate_page;
54193 rc = sqlite3PagerWrite(pNewTrunk->pDbPage);
54194 if( rc!=SQLITE_OK ){
54195 releasePage(pNewTrunk);
54196 goto end_allocate_page;
54198 memcpy(&pNewTrunk->aData[0], &pTrunk->aData[0], 4);
54199 put4byte(&pNewTrunk->aData[4], k-1);
54200 memcpy(&pNewTrunk->aData[8], &pTrunk->aData[12], (k-1)*4);
54201 releasePage(pNewTrunk);
54202 if( !pPrevTrunk ){
54203 assert( sqlite3PagerIswriteable(pPage1->pDbPage) );
54204 put4byte(&pPage1->aData[32], iNewTrunk);
54205 }else{
54206 rc = sqlite3PagerWrite(pPrevTrunk->pDbPage);
54207 if( rc ){
54208 goto end_allocate_page;
54210 put4byte(&pPrevTrunk->aData[0], iNewTrunk);
54213 pTrunk = 0;
54214 TRACE(("ALLOCATE: %d trunk - %d free pages left\n", *pPgno, n-1));
54215 #endif
54216 }else if( k>0 ){
54217 /* Extract a leaf from the trunk */
54218 u32 closest;
54219 Pgno iPage;
54220 unsigned char *aData = pTrunk->aData;
54221 if( nearby>0 ){
54222 u32 i;
54223 int dist;
54224 closest = 0;
54225 dist = sqlite3AbsInt32(get4byte(&aData[8]) - nearby);
54226 for(i=1; i<k; i++){
54227 int d2 = sqlite3AbsInt32(get4byte(&aData[8+i*4]) - nearby);
54228 if( d2<dist ){
54229 closest = i;
54230 dist = d2;
54233 }else{
54234 closest = 0;
54237 iPage = get4byte(&aData[8+closest*4]);
54238 testcase( iPage==mxPage );
54239 if( iPage>mxPage ){
54240 rc = SQLITE_CORRUPT_BKPT;
54241 goto end_allocate_page;
54243 testcase( iPage==mxPage );
54244 if( !searchList || iPage==nearby ){
54245 int noContent;
54246 *pPgno = iPage;
54247 TRACE(("ALLOCATE: %d was leaf %d of %d on trunk %d"
54248 ": %d more free pages\n",
54249 *pPgno, closest+1, k, pTrunk->pgno, n-1));
54250 rc = sqlite3PagerWrite(pTrunk->pDbPage);
54251 if( rc ) goto end_allocate_page;
54252 if( closest<k-1 ){
54253 memcpy(&aData[8+closest*4], &aData[4+k*4], 4);
54255 put4byte(&aData[4], k-1);
54256 noContent = !btreeGetHasContent(pBt, *pPgno);
54257 rc = btreeGetPage(pBt, *pPgno, ppPage, noContent);
54258 if( rc==SQLITE_OK ){
54259 rc = sqlite3PagerWrite((*ppPage)->pDbPage);
54260 if( rc!=SQLITE_OK ){
54261 releasePage(*ppPage);
54264 searchList = 0;
54267 releasePage(pPrevTrunk);
54268 pPrevTrunk = 0;
54269 }while( searchList );
54270 }else{
54271 /* There are no pages on the freelist, so create a new page at the
54272 ** end of the file */
54273 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
54274 if( rc ) return rc;
54275 pBt->nPage++;
54276 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ) pBt->nPage++;
54278 #ifndef SQLITE_OMIT_AUTOVACUUM
54279 if( pBt->autoVacuum && PTRMAP_ISPAGE(pBt, pBt->nPage) ){
54280 /* If *pPgno refers to a pointer-map page, allocate two new pages
54281 ** at the end of the file instead of one. The first allocated page
54282 ** becomes a new pointer-map page, the second is used by the caller.
54284 MemPage *pPg = 0;
54285 TRACE(("ALLOCATE: %d from end of file (pointer-map page)\n", pBt->nPage));
54286 assert( pBt->nPage!=PENDING_BYTE_PAGE(pBt) );
54287 rc = btreeGetPage(pBt, pBt->nPage, &pPg, 1);
54288 if( rc==SQLITE_OK ){
54289 rc = sqlite3PagerWrite(pPg->pDbPage);
54290 releasePage(pPg);
54292 if( rc ) return rc;
54293 pBt->nPage++;
54294 if( pBt->nPage==PENDING_BYTE_PAGE(pBt) ){ pBt->nPage++; }
54296 #endif
54297 put4byte(28 + (u8*)pBt->pPage1->aData, pBt->nPage);
54298 *pPgno = pBt->nPage;
54300 assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
54301 rc = btreeGetPage(pBt, *pPgno, ppPage, 1);
54302 if( rc ) return rc;
54303 rc = sqlite3PagerWrite((*ppPage)->pDbPage);
54304 if( rc!=SQLITE_OK ){
54305 releasePage(*ppPage);
54307 TRACE(("ALLOCATE: %d from end of file\n", *pPgno));
54310 assert( *pPgno!=PENDING_BYTE_PAGE(pBt) );
54312 end_allocate_page:
54313 releasePage(pTrunk);
54314 releasePage(pPrevTrunk);
54315 if( rc==SQLITE_OK ){
54316 if( sqlite3PagerPageRefcount((*ppPage)->pDbPage)>1 ){
54317 releasePage(*ppPage);
54318 return SQLITE_CORRUPT_BKPT;
54320 (*ppPage)->isInit = 0;
54321 }else{
54322 *ppPage = 0;
54324 assert( rc!=SQLITE_OK || sqlite3PagerIswriteable((*ppPage)->pDbPage) );
54325 return rc;
54329 ** This function is used to add page iPage to the database file free-list.
54330 ** It is assumed that the page is not already a part of the free-list.
54332 ** The value passed as the second argument to this function is optional.
54333 ** If the caller happens to have a pointer to the MemPage object
54334 ** corresponding to page iPage handy, it may pass it as the second value.
54335 ** Otherwise, it may pass NULL.
54337 ** If a pointer to a MemPage object is passed as the second argument,
54338 ** its reference count is not altered by this function.
54340 static int freePage2(BtShared *pBt, MemPage *pMemPage, Pgno iPage){
54341 MemPage *pTrunk = 0; /* Free-list trunk page */
54342 Pgno iTrunk = 0; /* Page number of free-list trunk page */
54343 MemPage *pPage1 = pBt->pPage1; /* Local reference to page 1 */
54344 MemPage *pPage; /* Page being freed. May be NULL. */
54345 int rc; /* Return Code */
54346 int nFree; /* Initial number of pages on free-list */
54348 assert( sqlite3_mutex_held(pBt->mutex) );
54349 assert( iPage>1 );
54350 assert( !pMemPage || pMemPage->pgno==iPage );
54352 if( pMemPage ){
54353 pPage = pMemPage;
54354 sqlite3PagerRef(pPage->pDbPage);
54355 }else{
54356 pPage = btreePageLookup(pBt, iPage);
54359 /* Increment the free page count on pPage1 */
54360 rc = sqlite3PagerWrite(pPage1->pDbPage);
54361 if( rc ) goto freepage_out;
54362 nFree = get4byte(&pPage1->aData[36]);
54363 put4byte(&pPage1->aData[36], nFree+1);
54365 if( pBt->btsFlags & BTS_SECURE_DELETE ){
54366 /* If the secure_delete option is enabled, then
54367 ** always fully overwrite deleted information with zeros.
54369 if( (!pPage && ((rc = btreeGetPage(pBt, iPage, &pPage, 0))!=0) )
54370 || ((rc = sqlite3PagerWrite(pPage->pDbPage))!=0)
54372 goto freepage_out;
54374 memset(pPage->aData, 0, pPage->pBt->pageSize);
54377 /* If the database supports auto-vacuum, write an entry in the pointer-map
54378 ** to indicate that the page is free.
54380 if( ISAUTOVACUUM ){
54381 ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc);
54382 if( rc ) goto freepage_out;
54385 /* Now manipulate the actual database free-list structure. There are two
54386 ** possibilities. If the free-list is currently empty, or if the first
54387 ** trunk page in the free-list is full, then this page will become a
54388 ** new free-list trunk page. Otherwise, it will become a leaf of the
54389 ** first trunk page in the current free-list. This block tests if it
54390 ** is possible to add the page as a new free-list leaf.
54392 if( nFree!=0 ){
54393 u32 nLeaf; /* Initial number of leaf cells on trunk page */
54395 iTrunk = get4byte(&pPage1->aData[32]);
54396 rc = btreeGetPage(pBt, iTrunk, &pTrunk, 0);
54397 if( rc!=SQLITE_OK ){
54398 goto freepage_out;
54401 nLeaf = get4byte(&pTrunk->aData[4]);
54402 assert( pBt->usableSize>32 );
54403 if( nLeaf > (u32)pBt->usableSize/4 - 2 ){
54404 rc = SQLITE_CORRUPT_BKPT;
54405 goto freepage_out;
54407 if( nLeaf < (u32)pBt->usableSize/4 - 8 ){
54408 /* In this case there is room on the trunk page to insert the page
54409 ** being freed as a new leaf.
54411 ** Note that the trunk page is not really full until it contains
54412 ** usableSize/4 - 2 entries, not usableSize/4 - 8 entries as we have
54413 ** coded. But due to a coding error in versions of SQLite prior to
54414 ** 3.6.0, databases with freelist trunk pages holding more than
54415 ** usableSize/4 - 8 entries will be reported as corrupt. In order
54416 ** to maintain backwards compatibility with older versions of SQLite,
54417 ** we will continue to restrict the number of entries to usableSize/4 - 8
54418 ** for now. At some point in the future (once everyone has upgraded
54419 ** to 3.6.0 or later) we should consider fixing the conditional above
54420 ** to read "usableSize/4-2" instead of "usableSize/4-8".
54422 rc = sqlite3PagerWrite(pTrunk->pDbPage);
54423 if( rc==SQLITE_OK ){
54424 put4byte(&pTrunk->aData[4], nLeaf+1);
54425 put4byte(&pTrunk->aData[8+nLeaf*4], iPage);
54426 if( pPage && (pBt->btsFlags & BTS_SECURE_DELETE)==0 ){
54427 sqlite3PagerDontWrite(pPage->pDbPage);
54429 rc = btreeSetHasContent(pBt, iPage);
54431 TRACE(("FREE-PAGE: %d leaf on trunk page %d\n",pPage->pgno,pTrunk->pgno));
54432 goto freepage_out;
54436 /* If control flows to this point, then it was not possible to add the
54437 ** the page being freed as a leaf page of the first trunk in the free-list.
54438 ** Possibly because the free-list is empty, or possibly because the
54439 ** first trunk in the free-list is full. Either way, the page being freed
54440 ** will become the new first trunk page in the free-list.
54442 if( pPage==0 && SQLITE_OK!=(rc = btreeGetPage(pBt, iPage, &pPage, 0)) ){
54443 goto freepage_out;
54445 rc = sqlite3PagerWrite(pPage->pDbPage);
54446 if( rc!=SQLITE_OK ){
54447 goto freepage_out;
54449 put4byte(pPage->aData, iTrunk);
54450 put4byte(&pPage->aData[4], 0);
54451 put4byte(&pPage1->aData[32], iPage);
54452 TRACE(("FREE-PAGE: %d new trunk page replacing %d\n", pPage->pgno, iTrunk));
54454 freepage_out:
54455 if( pPage ){
54456 pPage->isInit = 0;
54458 releasePage(pPage);
54459 releasePage(pTrunk);
54460 return rc;
54462 static void freePage(MemPage *pPage, int *pRC){
54463 if( (*pRC)==SQLITE_OK ){
54464 *pRC = freePage2(pPage->pBt, pPage, pPage->pgno);
54469 ** Free any overflow pages associated with the given Cell.
54471 static int clearCell(MemPage *pPage, unsigned char *pCell){
54472 BtShared *pBt = pPage->pBt;
54473 CellInfo info;
54474 Pgno ovflPgno;
54475 int rc;
54476 int nOvfl;
54477 u32 ovflPageSize;
54479 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54480 btreeParseCellPtr(pPage, pCell, &info);
54481 if( info.iOverflow==0 ){
54482 return SQLITE_OK; /* No overflow pages. Return without doing anything */
54484 if( pCell+info.iOverflow+3 > pPage->aData+pPage->maskPage ){
54485 return SQLITE_CORRUPT; /* Cell extends past end of page */
54487 ovflPgno = get4byte(&pCell[info.iOverflow]);
54488 assert( pBt->usableSize > 4 );
54489 ovflPageSize = pBt->usableSize - 4;
54490 nOvfl = (info.nPayload - info.nLocal + ovflPageSize - 1)/ovflPageSize;
54491 assert( ovflPgno==0 || nOvfl>0 );
54492 while( nOvfl-- ){
54493 Pgno iNext = 0;
54494 MemPage *pOvfl = 0;
54495 if( ovflPgno<2 || ovflPgno>btreePagecount(pBt) ){
54496 /* 0 is not a legal page number and page 1 cannot be an
54497 ** overflow page. Therefore if ovflPgno<2 or past the end of the
54498 ** file the database must be corrupt. */
54499 return SQLITE_CORRUPT_BKPT;
54501 if( nOvfl ){
54502 rc = getOverflowPage(pBt, ovflPgno, &pOvfl, &iNext);
54503 if( rc ) return rc;
54506 if( ( pOvfl || ((pOvfl = btreePageLookup(pBt, ovflPgno))!=0) )
54507 && sqlite3PagerPageRefcount(pOvfl->pDbPage)!=1
54509 /* There is no reason any cursor should have an outstanding reference
54510 ** to an overflow page belonging to a cell that is being deleted/updated.
54511 ** So if there exists more than one reference to this page, then it
54512 ** must not really be an overflow page and the database must be corrupt.
54513 ** It is helpful to detect this before calling freePage2(), as
54514 ** freePage2() may zero the page contents if secure-delete mode is
54515 ** enabled. If this 'overflow' page happens to be a page that the
54516 ** caller is iterating through or using in some other way, this
54517 ** can be problematic.
54519 rc = SQLITE_CORRUPT_BKPT;
54520 }else{
54521 rc = freePage2(pBt, pOvfl, ovflPgno);
54524 if( pOvfl ){
54525 sqlite3PagerUnref(pOvfl->pDbPage);
54527 if( rc ) return rc;
54528 ovflPgno = iNext;
54530 return SQLITE_OK;
54534 ** Create the byte sequence used to represent a cell on page pPage
54535 ** and write that byte sequence into pCell[]. Overflow pages are
54536 ** allocated and filled in as necessary. The calling procedure
54537 ** is responsible for making sure sufficient space has been allocated
54538 ** for pCell[].
54540 ** Note that pCell does not necessary need to point to the pPage->aData
54541 ** area. pCell might point to some temporary storage. The cell will
54542 ** be constructed in this temporary area then copied into pPage->aData
54543 ** later.
54545 static int fillInCell(
54546 MemPage *pPage, /* The page that contains the cell */
54547 unsigned char *pCell, /* Complete text of the cell */
54548 const void *pKey, i64 nKey, /* The key */
54549 const void *pData,int nData, /* The data */
54550 int nZero, /* Extra zero bytes to append to pData */
54551 int *pnSize /* Write cell size here */
54553 int nPayload;
54554 const u8 *pSrc;
54555 int nSrc, n, rc;
54556 int spaceLeft;
54557 MemPage *pOvfl = 0;
54558 MemPage *pToRelease = 0;
54559 unsigned char *pPrior;
54560 unsigned char *pPayload;
54561 BtShared *pBt = pPage->pBt;
54562 Pgno pgnoOvfl = 0;
54563 int nHeader;
54564 CellInfo info;
54566 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54568 /* pPage is not necessarily writeable since pCell might be auxiliary
54569 ** buffer space that is separate from the pPage buffer area */
54570 assert( pCell<pPage->aData || pCell>=&pPage->aData[pBt->pageSize]
54571 || sqlite3PagerIswriteable(pPage->pDbPage) );
54573 /* Fill in the header. */
54574 nHeader = 0;
54575 if( !pPage->leaf ){
54576 nHeader += 4;
54578 if( pPage->hasData ){
54579 nHeader += putVarint(&pCell[nHeader], nData+nZero);
54580 }else{
54581 nData = nZero = 0;
54583 nHeader += putVarint(&pCell[nHeader], *(u64*)&nKey);
54584 btreeParseCellPtr(pPage, pCell, &info);
54585 assert( info.nHeader==nHeader );
54586 assert( info.nKey==nKey );
54587 assert( info.nData==(u32)(nData+nZero) );
54589 /* Fill in the payload */
54590 nPayload = nData + nZero;
54591 if( pPage->intKey ){
54592 pSrc = pData;
54593 nSrc = nData;
54594 nData = 0;
54595 }else{
54596 if( NEVER(nKey>0x7fffffff || pKey==0) ){
54597 return SQLITE_CORRUPT_BKPT;
54599 nPayload += (int)nKey;
54600 pSrc = pKey;
54601 nSrc = (int)nKey;
54603 *pnSize = info.nSize;
54604 spaceLeft = info.nLocal;
54605 pPayload = &pCell[nHeader];
54606 pPrior = &pCell[info.iOverflow];
54608 while( nPayload>0 ){
54609 if( spaceLeft==0 ){
54610 #ifndef SQLITE_OMIT_AUTOVACUUM
54611 Pgno pgnoPtrmap = pgnoOvfl; /* Overflow page pointer-map entry page */
54612 if( pBt->autoVacuum ){
54614 pgnoOvfl++;
54615 } while(
54616 PTRMAP_ISPAGE(pBt, pgnoOvfl) || pgnoOvfl==PENDING_BYTE_PAGE(pBt)
54619 #endif
54620 rc = allocateBtreePage(pBt, &pOvfl, &pgnoOvfl, pgnoOvfl, 0);
54621 #ifndef SQLITE_OMIT_AUTOVACUUM
54622 /* If the database supports auto-vacuum, and the second or subsequent
54623 ** overflow page is being allocated, add an entry to the pointer-map
54624 ** for that page now.
54626 ** If this is the first overflow page, then write a partial entry
54627 ** to the pointer-map. If we write nothing to this pointer-map slot,
54628 ** then the optimistic overflow chain processing in clearCell()
54629 ** may misinterpret the uninitialised values and delete the
54630 ** wrong pages from the database.
54632 if( pBt->autoVacuum && rc==SQLITE_OK ){
54633 u8 eType = (pgnoPtrmap?PTRMAP_OVERFLOW2:PTRMAP_OVERFLOW1);
54634 ptrmapPut(pBt, pgnoOvfl, eType, pgnoPtrmap, &rc);
54635 if( rc ){
54636 releasePage(pOvfl);
54639 #endif
54640 if( rc ){
54641 releasePage(pToRelease);
54642 return rc;
54645 /* If pToRelease is not zero than pPrior points into the data area
54646 ** of pToRelease. Make sure pToRelease is still writeable. */
54647 assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
54649 /* If pPrior is part of the data area of pPage, then make sure pPage
54650 ** is still writeable */
54651 assert( pPrior<pPage->aData || pPrior>=&pPage->aData[pBt->pageSize]
54652 || sqlite3PagerIswriteable(pPage->pDbPage) );
54654 put4byte(pPrior, pgnoOvfl);
54655 releasePage(pToRelease);
54656 pToRelease = pOvfl;
54657 pPrior = pOvfl->aData;
54658 put4byte(pPrior, 0);
54659 pPayload = &pOvfl->aData[4];
54660 spaceLeft = pBt->usableSize - 4;
54662 n = nPayload;
54663 if( n>spaceLeft ) n = spaceLeft;
54665 /* If pToRelease is not zero than pPayload points into the data area
54666 ** of pToRelease. Make sure pToRelease is still writeable. */
54667 assert( pToRelease==0 || sqlite3PagerIswriteable(pToRelease->pDbPage) );
54669 /* If pPayload is part of the data area of pPage, then make sure pPage
54670 ** is still writeable */
54671 assert( pPayload<pPage->aData || pPayload>=&pPage->aData[pBt->pageSize]
54672 || sqlite3PagerIswriteable(pPage->pDbPage) );
54674 if( nSrc>0 ){
54675 if( n>nSrc ) n = nSrc;
54676 assert( pSrc );
54677 memcpy(pPayload, pSrc, n);
54678 }else{
54679 memset(pPayload, 0, n);
54681 nPayload -= n;
54682 pPayload += n;
54683 pSrc += n;
54684 nSrc -= n;
54685 spaceLeft -= n;
54686 if( nSrc==0 ){
54687 nSrc = nData;
54688 pSrc = pData;
54691 releasePage(pToRelease);
54692 return SQLITE_OK;
54696 ** Remove the i-th cell from pPage. This routine effects pPage only.
54697 ** The cell content is not freed or deallocated. It is assumed that
54698 ** the cell content has been copied someplace else. This routine just
54699 ** removes the reference to the cell from pPage.
54701 ** "sz" must be the number of bytes in the cell.
54703 static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
54704 u32 pc; /* Offset to cell content of cell being deleted */
54705 u8 *data; /* pPage->aData */
54706 u8 *ptr; /* Used to move bytes around within data[] */
54707 u8 *endPtr; /* End of loop */
54708 int rc; /* The return code */
54709 int hdr; /* Beginning of the header. 0 most pages. 100 page 1 */
54711 if( *pRC ) return;
54713 assert( idx>=0 && idx<pPage->nCell );
54714 assert( sz==cellSize(pPage, idx) );
54715 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
54716 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54717 data = pPage->aData;
54718 ptr = &pPage->aCellIdx[2*idx];
54719 pc = get2byte(ptr);
54720 hdr = pPage->hdrOffset;
54721 testcase( pc==get2byte(&data[hdr+5]) );
54722 testcase( pc+sz==pPage->pBt->usableSize );
54723 if( pc < (u32)get2byte(&data[hdr+5]) || pc+sz > pPage->pBt->usableSize ){
54724 *pRC = SQLITE_CORRUPT_BKPT;
54725 return;
54727 rc = freeSpace(pPage, pc, sz);
54728 if( rc ){
54729 *pRC = rc;
54730 return;
54732 endPtr = &pPage->aCellIdx[2*pPage->nCell - 2];
54733 assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 ); /* ptr is always 2-byte aligned */
54734 while( ptr<endPtr ){
54735 *(u16*)ptr = *(u16*)&ptr[2];
54736 ptr += 2;
54738 pPage->nCell--;
54739 put2byte(&data[hdr+3], pPage->nCell);
54740 pPage->nFree += 2;
54744 ** Insert a new cell on pPage at cell index "i". pCell points to the
54745 ** content of the cell.
54747 ** If the cell content will fit on the page, then put it there. If it
54748 ** will not fit, then make a copy of the cell content into pTemp if
54749 ** pTemp is not null. Regardless of pTemp, allocate a new entry
54750 ** in pPage->aOvfl[] and make it point to the cell content (either
54751 ** in pTemp or the original pCell) and also record its index.
54752 ** Allocating a new entry in pPage->aCell[] implies that
54753 ** pPage->nOverflow is incremented.
54755 ** If nSkip is non-zero, then do not copy the first nSkip bytes of the
54756 ** cell. The caller will overwrite them after this function returns. If
54757 ** nSkip is non-zero, then pCell may not point to an invalid memory location
54758 ** (but pCell+nSkip is always valid).
54760 static void insertCell(
54761 MemPage *pPage, /* Page into which we are copying */
54762 int i, /* New cell becomes the i-th cell of the page */
54763 u8 *pCell, /* Content of the new cell */
54764 int sz, /* Bytes of content in pCell */
54765 u8 *pTemp, /* Temp storage space for pCell, if needed */
54766 Pgno iChild, /* If non-zero, replace first 4 bytes with this value */
54767 int *pRC /* Read and write return code from here */
54769 int idx = 0; /* Where to write new cell content in data[] */
54770 int j; /* Loop counter */
54771 int end; /* First byte past the last cell pointer in data[] */
54772 int ins; /* Index in data[] where new cell pointer is inserted */
54773 int cellOffset; /* Address of first cell pointer in data[] */
54774 u8 *data; /* The content of the whole page */
54775 u8 *ptr; /* Used for moving information around in data[] */
54776 u8 *endPtr; /* End of the loop */
54778 int nSkip = (iChild ? 4 : 0);
54780 if( *pRC ) return;
54782 assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
54783 assert( pPage->nCell<=MX_CELL(pPage->pBt) && MX_CELL(pPage->pBt)<=10921 );
54784 assert( pPage->nOverflow<=ArraySize(pPage->aOvfl) );
54785 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54786 /* The cell should normally be sized correctly. However, when moving a
54787 ** malformed cell from a leaf page to an interior page, if the cell size
54788 ** wanted to be less than 4 but got rounded up to 4 on the leaf, then size
54789 ** might be less than 8 (leaf-size + pointer) on the interior node. Hence
54790 ** the term after the || in the following assert(). */
54791 assert( sz==cellSizePtr(pPage, pCell) || (sz==8 && iChild>0) );
54792 if( pPage->nOverflow || sz+2>pPage->nFree ){
54793 if( pTemp ){
54794 memcpy(pTemp+nSkip, pCell+nSkip, sz-nSkip);
54795 pCell = pTemp;
54797 if( iChild ){
54798 put4byte(pCell, iChild);
54800 j = pPage->nOverflow++;
54801 assert( j<(int)(sizeof(pPage->aOvfl)/sizeof(pPage->aOvfl[0])) );
54802 pPage->aOvfl[j].pCell = pCell;
54803 pPage->aOvfl[j].idx = (u16)i;
54804 }else{
54805 int rc = sqlite3PagerWrite(pPage->pDbPage);
54806 if( rc!=SQLITE_OK ){
54807 *pRC = rc;
54808 return;
54810 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
54811 data = pPage->aData;
54812 cellOffset = pPage->cellOffset;
54813 end = cellOffset + 2*pPage->nCell;
54814 ins = cellOffset + 2*i;
54815 rc = allocateSpace(pPage, sz, &idx);
54816 if( rc ){ *pRC = rc; return; }
54817 /* The allocateSpace() routine guarantees the following two properties
54818 ** if it returns success */
54819 assert( idx >= end+2 );
54820 assert( idx+sz <= (int)pPage->pBt->usableSize );
54821 pPage->nCell++;
54822 pPage->nFree -= (u16)(2 + sz);
54823 memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip);
54824 if( iChild ){
54825 put4byte(&data[idx], iChild);
54827 ptr = &data[end];
54828 endPtr = &data[ins];
54829 assert( (SQLITE_PTR_TO_INT(ptr)&1)==0 ); /* ptr is always 2-byte aligned */
54830 while( ptr>endPtr ){
54831 *(u16*)ptr = *(u16*)&ptr[-2];
54832 ptr -= 2;
54834 put2byte(&data[ins], idx);
54835 put2byte(&data[pPage->hdrOffset+3], pPage->nCell);
54836 #ifndef SQLITE_OMIT_AUTOVACUUM
54837 if( pPage->pBt->autoVacuum ){
54838 /* The cell may contain a pointer to an overflow page. If so, write
54839 ** the entry for the overflow page into the pointer map.
54841 ptrmapPutOvflPtr(pPage, pCell, pRC);
54843 #endif
54848 ** Add a list of cells to a page. The page should be initially empty.
54849 ** The cells are guaranteed to fit on the page.
54851 static void assemblePage(
54852 MemPage *pPage, /* The page to be assemblied */
54853 int nCell, /* The number of cells to add to this page */
54854 u8 **apCell, /* Pointers to cell bodies */
54855 u16 *aSize /* Sizes of the cells */
54857 int i; /* Loop counter */
54858 u8 *pCellptr; /* Address of next cell pointer */
54859 int cellbody; /* Address of next cell body */
54860 u8 * const data = pPage->aData; /* Pointer to data for pPage */
54861 const int hdr = pPage->hdrOffset; /* Offset of header on pPage */
54862 const int nUsable = pPage->pBt->usableSize; /* Usable size of page */
54864 assert( pPage->nOverflow==0 );
54865 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54866 assert( nCell>=0 && nCell<=(int)MX_CELL(pPage->pBt)
54867 && (int)MX_CELL(pPage->pBt)<=10921);
54868 assert( sqlite3PagerIswriteable(pPage->pDbPage) );
54870 /* Check that the page has just been zeroed by zeroPage() */
54871 assert( pPage->nCell==0 );
54872 assert( get2byteNotZero(&data[hdr+5])==nUsable );
54874 pCellptr = &pPage->aCellIdx[nCell*2];
54875 cellbody = nUsable;
54876 for(i=nCell-1; i>=0; i--){
54877 u16 sz = aSize[i];
54878 pCellptr -= 2;
54879 cellbody -= sz;
54880 put2byte(pCellptr, cellbody);
54881 memcpy(&data[cellbody], apCell[i], sz);
54883 put2byte(&data[hdr+3], nCell);
54884 put2byte(&data[hdr+5], cellbody);
54885 pPage->nFree -= (nCell*2 + nUsable - cellbody);
54886 pPage->nCell = (u16)nCell;
54890 ** The following parameters determine how many adjacent pages get involved
54891 ** in a balancing operation. NN is the number of neighbors on either side
54892 ** of the page that participate in the balancing operation. NB is the
54893 ** total number of pages that participate, including the target page and
54894 ** NN neighbors on either side.
54896 ** The minimum value of NN is 1 (of course). Increasing NN above 1
54897 ** (to 2 or 3) gives a modest improvement in SELECT and DELETE performance
54898 ** in exchange for a larger degradation in INSERT and UPDATE performance.
54899 ** The value of NN appears to give the best results overall.
54901 #define NN 1 /* Number of neighbors on either side of pPage */
54902 #define NB (NN*2+1) /* Total pages involved in the balance */
54905 #ifndef SQLITE_OMIT_QUICKBALANCE
54907 ** This version of balance() handles the common special case where
54908 ** a new entry is being inserted on the extreme right-end of the
54909 ** tree, in other words, when the new entry will become the largest
54910 ** entry in the tree.
54912 ** Instead of trying to balance the 3 right-most leaf pages, just add
54913 ** a new page to the right-hand side and put the one new entry in
54914 ** that page. This leaves the right side of the tree somewhat
54915 ** unbalanced. But odds are that we will be inserting new entries
54916 ** at the end soon afterwards so the nearly empty page will quickly
54917 ** fill up. On average.
54919 ** pPage is the leaf page which is the right-most page in the tree.
54920 ** pParent is its parent. pPage must have a single overflow entry
54921 ** which is also the right-most entry on the page.
54923 ** The pSpace buffer is used to store a temporary copy of the divider
54924 ** cell that will be inserted into pParent. Such a cell consists of a 4
54925 ** byte page number followed by a variable length integer. In other
54926 ** words, at most 13 bytes. Hence the pSpace buffer must be at
54927 ** least 13 bytes in size.
54929 static int balance_quick(MemPage *pParent, MemPage *pPage, u8 *pSpace){
54930 BtShared *const pBt = pPage->pBt; /* B-Tree Database */
54931 MemPage *pNew; /* Newly allocated page */
54932 int rc; /* Return Code */
54933 Pgno pgnoNew; /* Page number of pNew */
54935 assert( sqlite3_mutex_held(pPage->pBt->mutex) );
54936 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
54937 assert( pPage->nOverflow==1 );
54939 /* This error condition is now caught prior to reaching this function */
54940 if( pPage->nCell<=0 ) return SQLITE_CORRUPT_BKPT;
54942 /* Allocate a new page. This page will become the right-sibling of
54943 ** pPage. Make the parent page writable, so that the new divider cell
54944 ** may be inserted. If both these operations are successful, proceed.
54946 rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);
54948 if( rc==SQLITE_OK ){
54950 u8 *pOut = &pSpace[4];
54951 u8 *pCell = pPage->aOvfl[0].pCell;
54952 u16 szCell = cellSizePtr(pPage, pCell);
54953 u8 *pStop;
54955 assert( sqlite3PagerIswriteable(pNew->pDbPage) );
54956 assert( pPage->aData[0]==(PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF) );
54957 zeroPage(pNew, PTF_INTKEY|PTF_LEAFDATA|PTF_LEAF);
54958 assemblePage(pNew, 1, &pCell, &szCell);
54960 /* If this is an auto-vacuum database, update the pointer map
54961 ** with entries for the new page, and any pointer from the
54962 ** cell on the page to an overflow page. If either of these
54963 ** operations fails, the return code is set, but the contents
54964 ** of the parent page are still manipulated by thh code below.
54965 ** That is Ok, at this point the parent page is guaranteed to
54966 ** be marked as dirty. Returning an error code will cause a
54967 ** rollback, undoing any changes made to the parent page.
54969 if( ISAUTOVACUUM ){
54970 ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc);
54971 if( szCell>pNew->minLocal ){
54972 ptrmapPutOvflPtr(pNew, pCell, &rc);
54976 /* Create a divider cell to insert into pParent. The divider cell
54977 ** consists of a 4-byte page number (the page number of pPage) and
54978 ** a variable length key value (which must be the same value as the
54979 ** largest key on pPage).
54981 ** To find the largest key value on pPage, first find the right-most
54982 ** cell on pPage. The first two fields of this cell are the
54983 ** record-length (a variable length integer at most 32-bits in size)
54984 ** and the key value (a variable length integer, may have any value).
54985 ** The first of the while(...) loops below skips over the record-length
54986 ** field. The second while(...) loop copies the key value from the
54987 ** cell on pPage into the pSpace buffer.
54989 pCell = findCell(pPage, pPage->nCell-1);
54990 pStop = &pCell[9];
54991 while( (*(pCell++)&0x80) && pCell<pStop );
54992 pStop = &pCell[9];
54993 while( ((*(pOut++) = *(pCell++))&0x80) && pCell<pStop );
54995 /* Insert the new divider cell into pParent. */
54996 insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
54997 0, pPage->pgno, &rc);
54999 /* Set the right-child pointer of pParent to point to the new page. */
55000 put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew);
55002 /* Release the reference to the new page. */
55003 releasePage(pNew);
55006 return rc;
55008 #endif /* SQLITE_OMIT_QUICKBALANCE */
55010 #if 0
55012 ** This function does not contribute anything to the operation of SQLite.
55013 ** it is sometimes activated temporarily while debugging code responsible
55014 ** for setting pointer-map entries.
55016 static int ptrmapCheckPages(MemPage **apPage, int nPage){
55017 int i, j;
55018 for(i=0; i<nPage; i++){
55019 Pgno n;
55020 u8 e;
55021 MemPage *pPage = apPage[i];
55022 BtShared *pBt = pPage->pBt;
55023 assert( pPage->isInit );
55025 for(j=0; j<pPage->nCell; j++){
55026 CellInfo info;
55027 u8 *z;
55029 z = findCell(pPage, j);
55030 btreeParseCellPtr(pPage, z, &info);
55031 if( info.iOverflow ){
55032 Pgno ovfl = get4byte(&z[info.iOverflow]);
55033 ptrmapGet(pBt, ovfl, &e, &n);
55034 assert( n==pPage->pgno && e==PTRMAP_OVERFLOW1 );
55036 if( !pPage->leaf ){
55037 Pgno child = get4byte(z);
55038 ptrmapGet(pBt, child, &e, &n);
55039 assert( n==pPage->pgno && e==PTRMAP_BTREE );
55042 if( !pPage->leaf ){
55043 Pgno child = get4byte(&pPage->aData[pPage->hdrOffset+8]);
55044 ptrmapGet(pBt, child, &e, &n);
55045 assert( n==pPage->pgno && e==PTRMAP_BTREE );
55048 return 1;
55050 #endif
55053 ** This function is used to copy the contents of the b-tree node stored
55054 ** on page pFrom to page pTo. If page pFrom was not a leaf page, then
55055 ** the pointer-map entries for each child page are updated so that the
55056 ** parent page stored in the pointer map is page pTo. If pFrom contained
55057 ** any cells with overflow page pointers, then the corresponding pointer
55058 ** map entries are also updated so that the parent page is page pTo.
55060 ** If pFrom is currently carrying any overflow cells (entries in the
55061 ** MemPage.aOvfl[] array), they are not copied to pTo.
55063 ** Before returning, page pTo is reinitialized using btreeInitPage().
55065 ** The performance of this function is not critical. It is only used by
55066 ** the balance_shallower() and balance_deeper() procedures, neither of
55067 ** which are called often under normal circumstances.
55069 static void copyNodeContent(MemPage *pFrom, MemPage *pTo, int *pRC){
55070 if( (*pRC)==SQLITE_OK ){
55071 BtShared * const pBt = pFrom->pBt;
55072 u8 * const aFrom = pFrom->aData;
55073 u8 * const aTo = pTo->aData;
55074 int const iFromHdr = pFrom->hdrOffset;
55075 int const iToHdr = ((pTo->pgno==1) ? 100 : 0);
55076 int rc;
55077 int iData;
55080 assert( pFrom->isInit );
55081 assert( pFrom->nFree>=iToHdr );
55082 assert( get2byte(&aFrom[iFromHdr+5]) <= (int)pBt->usableSize );
55084 /* Copy the b-tree node content from page pFrom to page pTo. */
55085 iData = get2byte(&aFrom[iFromHdr+5]);
55086 memcpy(&aTo[iData], &aFrom[iData], pBt->usableSize-iData);
55087 memcpy(&aTo[iToHdr], &aFrom[iFromHdr], pFrom->cellOffset + 2*pFrom->nCell);
55089 /* Reinitialize page pTo so that the contents of the MemPage structure
55090 ** match the new data. The initialization of pTo can actually fail under
55091 ** fairly obscure circumstances, even though it is a copy of initialized
55092 ** page pFrom.
55094 pTo->isInit = 0;
55095 rc = btreeInitPage(pTo);
55096 if( rc!=SQLITE_OK ){
55097 *pRC = rc;
55098 return;
55101 /* If this is an auto-vacuum database, update the pointer-map entries
55102 ** for any b-tree or overflow pages that pTo now contains the pointers to.
55104 if( ISAUTOVACUUM ){
55105 *pRC = setChildPtrmaps(pTo);
55111 ** This routine redistributes cells on the iParentIdx'th child of pParent
55112 ** (hereafter "the page") and up to 2 siblings so that all pages have about the
55113 ** same amount of free space. Usually a single sibling on either side of the
55114 ** page are used in the balancing, though both siblings might come from one
55115 ** side if the page is the first or last child of its parent. If the page
55116 ** has fewer than 2 siblings (something which can only happen if the page
55117 ** is a root page or a child of a root page) then all available siblings
55118 ** participate in the balancing.
55120 ** The number of siblings of the page might be increased or decreased by
55121 ** one or two in an effort to keep pages nearly full but not over full.
55123 ** Note that when this routine is called, some of the cells on the page
55124 ** might not actually be stored in MemPage.aData[]. This can happen
55125 ** if the page is overfull. This routine ensures that all cells allocated
55126 ** to the page and its siblings fit into MemPage.aData[] before returning.
55128 ** In the course of balancing the page and its siblings, cells may be
55129 ** inserted into or removed from the parent page (pParent). Doing so
55130 ** may cause the parent page to become overfull or underfull. If this
55131 ** happens, it is the responsibility of the caller to invoke the correct
55132 ** balancing routine to fix this problem (see the balance() routine).
55134 ** If this routine fails for any reason, it might leave the database
55135 ** in a corrupted state. So if this routine fails, the database should
55136 ** be rolled back.
55138 ** The third argument to this function, aOvflSpace, is a pointer to a
55139 ** buffer big enough to hold one page. If while inserting cells into the parent
55140 ** page (pParent) the parent page becomes overfull, this buffer is
55141 ** used to store the parent's overflow cells. Because this function inserts
55142 ** a maximum of four divider cells into the parent page, and the maximum
55143 ** size of a cell stored within an internal node is always less than 1/4
55144 ** of the page-size, the aOvflSpace[] buffer is guaranteed to be large
55145 ** enough for all overflow cells.
55147 ** If aOvflSpace is set to a null pointer, this function returns
55148 ** SQLITE_NOMEM.
55150 static int balance_nonroot(
55151 MemPage *pParent, /* Parent page of siblings being balanced */
55152 int iParentIdx, /* Index of "the page" in pParent */
55153 u8 *aOvflSpace, /* page-size bytes of space for parent ovfl */
55154 int isRoot /* True if pParent is a root-page */
55156 BtShared *pBt; /* The whole database */
55157 int nCell = 0; /* Number of cells in apCell[] */
55158 int nMaxCells = 0; /* Allocated size of apCell, szCell, aFrom. */
55159 int nNew = 0; /* Number of pages in apNew[] */
55160 int nOld; /* Number of pages in apOld[] */
55161 int i, j, k; /* Loop counters */
55162 int nxDiv; /* Next divider slot in pParent->aCell[] */
55163 int rc = SQLITE_OK; /* The return code */
55164 u16 leafCorrection; /* 4 if pPage is a leaf. 0 if not */
55165 int leafData; /* True if pPage is a leaf of a LEAFDATA tree */
55166 int usableSpace; /* Bytes in pPage beyond the header */
55167 int pageFlags; /* Value of pPage->aData[0] */
55168 int subtotal; /* Subtotal of bytes in cells on one page */
55169 int iSpace1 = 0; /* First unused byte of aSpace1[] */
55170 int iOvflSpace = 0; /* First unused byte of aOvflSpace[] */
55171 int szScratch; /* Size of scratch memory requested */
55172 MemPage *apOld[NB]; /* pPage and up to two siblings */
55173 MemPage *apCopy[NB]; /* Private copies of apOld[] pages */
55174 MemPage *apNew[NB+2]; /* pPage and up to NB siblings after balancing */
55175 u8 *pRight; /* Location in parent of right-sibling pointer */
55176 u8 *apDiv[NB-1]; /* Divider cells in pParent */
55177 int cntNew[NB+2]; /* Index in aCell[] of cell after i-th page */
55178 int szNew[NB+2]; /* Combined size of cells place on i-th page */
55179 u8 **apCell = 0; /* All cells begin balanced */
55180 u16 *szCell; /* Local size of all cells in apCell[] */
55181 u8 *aSpace1; /* Space for copies of dividers cells */
55182 Pgno pgno; /* Temp var to store a page number in */
55184 pBt = pParent->pBt;
55185 assert( sqlite3_mutex_held(pBt->mutex) );
55186 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
55188 #if 0
55189 TRACE(("BALANCE: begin page %d child of %d\n", pPage->pgno, pParent->pgno));
55190 #endif
55192 /* At this point pParent may have at most one overflow cell. And if
55193 ** this overflow cell is present, it must be the cell with
55194 ** index iParentIdx. This scenario comes about when this function
55195 ** is called (indirectly) from sqlite3BtreeDelete().
55197 assert( pParent->nOverflow==0 || pParent->nOverflow==1 );
55198 assert( pParent->nOverflow==0 || pParent->aOvfl[0].idx==iParentIdx );
55200 if( !aOvflSpace ){
55201 return SQLITE_NOMEM;
55204 /* Find the sibling pages to balance. Also locate the cells in pParent
55205 ** that divide the siblings. An attempt is made to find NN siblings on
55206 ** either side of pPage. More siblings are taken from one side, however,
55207 ** if there are fewer than NN siblings on the other side. If pParent
55208 ** has NB or fewer children then all children of pParent are taken.
55210 ** This loop also drops the divider cells from the parent page. This
55211 ** way, the remainder of the function does not have to deal with any
55212 ** overflow cells in the parent page, since if any existed they will
55213 ** have already been removed.
55215 i = pParent->nOverflow + pParent->nCell;
55216 if( i<2 ){
55217 nxDiv = 0;
55218 nOld = i+1;
55219 }else{
55220 nOld = 3;
55221 if( iParentIdx==0 ){
55222 nxDiv = 0;
55223 }else if( iParentIdx==i ){
55224 nxDiv = i-2;
55225 }else{
55226 nxDiv = iParentIdx-1;
55228 i = 2;
55230 if( (i+nxDiv-pParent->nOverflow)==pParent->nCell ){
55231 pRight = &pParent->aData[pParent->hdrOffset+8];
55232 }else{
55233 pRight = findCell(pParent, i+nxDiv-pParent->nOverflow);
55235 pgno = get4byte(pRight);
55236 while( 1 ){
55237 rc = getAndInitPage(pBt, pgno, &apOld[i]);
55238 if( rc ){
55239 memset(apOld, 0, (i+1)*sizeof(MemPage*));
55240 goto balance_cleanup;
55242 nMaxCells += 1+apOld[i]->nCell+apOld[i]->nOverflow;
55243 if( (i--)==0 ) break;
55245 if( i+nxDiv==pParent->aOvfl[0].idx && pParent->nOverflow ){
55246 apDiv[i] = pParent->aOvfl[0].pCell;
55247 pgno = get4byte(apDiv[i]);
55248 szNew[i] = cellSizePtr(pParent, apDiv[i]);
55249 pParent->nOverflow = 0;
55250 }else{
55251 apDiv[i] = findCell(pParent, i+nxDiv-pParent->nOverflow);
55252 pgno = get4byte(apDiv[i]);
55253 szNew[i] = cellSizePtr(pParent, apDiv[i]);
55255 /* Drop the cell from the parent page. apDiv[i] still points to
55256 ** the cell within the parent, even though it has been dropped.
55257 ** This is safe because dropping a cell only overwrites the first
55258 ** four bytes of it, and this function does not need the first
55259 ** four bytes of the divider cell. So the pointer is safe to use
55260 ** later on.
55262 ** But not if we are in secure-delete mode. In secure-delete mode,
55263 ** the dropCell() routine will overwrite the entire cell with zeroes.
55264 ** In this case, temporarily copy the cell into the aOvflSpace[]
55265 ** buffer. It will be copied out again as soon as the aSpace[] buffer
55266 ** is allocated. */
55267 if( pBt->btsFlags & BTS_SECURE_DELETE ){
55268 int iOff;
55270 iOff = SQLITE_PTR_TO_INT(apDiv[i]) - SQLITE_PTR_TO_INT(pParent->aData);
55271 if( (iOff+szNew[i])>(int)pBt->usableSize ){
55272 rc = SQLITE_CORRUPT_BKPT;
55273 memset(apOld, 0, (i+1)*sizeof(MemPage*));
55274 goto balance_cleanup;
55275 }else{
55276 memcpy(&aOvflSpace[iOff], apDiv[i], szNew[i]);
55277 apDiv[i] = &aOvflSpace[apDiv[i]-pParent->aData];
55280 dropCell(pParent, i+nxDiv-pParent->nOverflow, szNew[i], &rc);
55284 /* Make nMaxCells a multiple of 4 in order to preserve 8-byte
55285 ** alignment */
55286 nMaxCells = (nMaxCells + 3)&~3;
55289 ** Allocate space for memory structures
55291 k = pBt->pageSize + ROUND8(sizeof(MemPage));
55292 szScratch =
55293 nMaxCells*sizeof(u8*) /* apCell */
55294 + nMaxCells*sizeof(u16) /* szCell */
55295 + pBt->pageSize /* aSpace1 */
55296 + k*nOld; /* Page copies (apCopy) */
55297 apCell = sqlite3ScratchMalloc( szScratch );
55298 if( apCell==0 ){
55299 rc = SQLITE_NOMEM;
55300 goto balance_cleanup;
55302 szCell = (u16*)&apCell[nMaxCells];
55303 aSpace1 = (u8*)&szCell[nMaxCells];
55304 assert( EIGHT_BYTE_ALIGNMENT(aSpace1) );
55307 ** Load pointers to all cells on sibling pages and the divider cells
55308 ** into the local apCell[] array. Make copies of the divider cells
55309 ** into space obtained from aSpace1[] and remove the the divider Cells
55310 ** from pParent.
55312 ** If the siblings are on leaf pages, then the child pointers of the
55313 ** divider cells are stripped from the cells before they are copied
55314 ** into aSpace1[]. In this way, all cells in apCell[] are without
55315 ** child pointers. If siblings are not leaves, then all cell in
55316 ** apCell[] include child pointers. Either way, all cells in apCell[]
55317 ** are alike.
55319 ** leafCorrection: 4 if pPage is a leaf. 0 if pPage is not a leaf.
55320 ** leafData: 1 if pPage holds key+data and pParent holds only keys.
55322 leafCorrection = apOld[0]->leaf*4;
55323 leafData = apOld[0]->hasData;
55324 for(i=0; i<nOld; i++){
55325 int limit;
55327 /* Before doing anything else, take a copy of the i'th original sibling
55328 ** The rest of this function will use data from the copies rather
55329 ** that the original pages since the original pages will be in the
55330 ** process of being overwritten. */
55331 MemPage *pOld = apCopy[i] = (MemPage*)&aSpace1[pBt->pageSize + k*i];
55332 memcpy(pOld, apOld[i], sizeof(MemPage));
55333 pOld->aData = (void*)&pOld[1];
55334 memcpy(pOld->aData, apOld[i]->aData, pBt->pageSize);
55336 limit = pOld->nCell+pOld->nOverflow;
55337 if( pOld->nOverflow>0 ){
55338 for(j=0; j<limit; j++){
55339 assert( nCell<nMaxCells );
55340 apCell[nCell] = findOverflowCell(pOld, j);
55341 szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
55342 nCell++;
55344 }else{
55345 u8 *aData = pOld->aData;
55346 u16 maskPage = pOld->maskPage;
55347 u16 cellOffset = pOld->cellOffset;
55348 for(j=0; j<limit; j++){
55349 assert( nCell<nMaxCells );
55350 apCell[nCell] = findCellv2(aData, maskPage, cellOffset, j);
55351 szCell[nCell] = cellSizePtr(pOld, apCell[nCell]);
55352 nCell++;
55355 if( i<nOld-1 && !leafData){
55356 u16 sz = (u16)szNew[i];
55357 u8 *pTemp;
55358 assert( nCell<nMaxCells );
55359 szCell[nCell] = sz;
55360 pTemp = &aSpace1[iSpace1];
55361 iSpace1 += sz;
55362 assert( sz<=pBt->maxLocal+23 );
55363 assert( iSpace1 <= (int)pBt->pageSize );
55364 memcpy(pTemp, apDiv[i], sz);
55365 apCell[nCell] = pTemp+leafCorrection;
55366 assert( leafCorrection==0 || leafCorrection==4 );
55367 szCell[nCell] = szCell[nCell] - leafCorrection;
55368 if( !pOld->leaf ){
55369 assert( leafCorrection==0 );
55370 assert( pOld->hdrOffset==0 );
55371 /* The right pointer of the child page pOld becomes the left
55372 ** pointer of the divider cell */
55373 memcpy(apCell[nCell], &pOld->aData[8], 4);
55374 }else{
55375 assert( leafCorrection==4 );
55376 if( szCell[nCell]<4 ){
55377 /* Do not allow any cells smaller than 4 bytes. */
55378 szCell[nCell] = 4;
55381 nCell++;
55386 ** Figure out the number of pages needed to hold all nCell cells.
55387 ** Store this number in "k". Also compute szNew[] which is the total
55388 ** size of all cells on the i-th page and cntNew[] which is the index
55389 ** in apCell[] of the cell that divides page i from page i+1.
55390 ** cntNew[k] should equal nCell.
55392 ** Values computed by this block:
55394 ** k: The total number of sibling pages
55395 ** szNew[i]: Spaced used on the i-th sibling page.
55396 ** cntNew[i]: Index in apCell[] and szCell[] for the first cell to
55397 ** the right of the i-th sibling page.
55398 ** usableSpace: Number of bytes of space available on each sibling.
55401 usableSpace = pBt->usableSize - 12 + leafCorrection;
55402 for(subtotal=k=i=0; i<nCell; i++){
55403 assert( i<nMaxCells );
55404 subtotal += szCell[i] + 2;
55405 if( subtotal > usableSpace ){
55406 szNew[k] = subtotal - szCell[i];
55407 cntNew[k] = i;
55408 if( leafData ){ i--; }
55409 subtotal = 0;
55410 k++;
55411 if( k>NB+1 ){ rc = SQLITE_CORRUPT_BKPT; goto balance_cleanup; }
55414 szNew[k] = subtotal;
55415 cntNew[k] = nCell;
55416 k++;
55419 ** The packing computed by the previous block is biased toward the siblings
55420 ** on the left side. The left siblings are always nearly full, while the
55421 ** right-most sibling might be nearly empty. This block of code attempts
55422 ** to adjust the packing of siblings to get a better balance.
55424 ** This adjustment is more than an optimization. The packing above might
55425 ** be so out of balance as to be illegal. For example, the right-most
55426 ** sibling might be completely empty. This adjustment is not optional.
55428 for(i=k-1; i>0; i--){
55429 int szRight = szNew[i]; /* Size of sibling on the right */
55430 int szLeft = szNew[i-1]; /* Size of sibling on the left */
55431 int r; /* Index of right-most cell in left sibling */
55432 int d; /* Index of first cell to the left of right sibling */
55434 r = cntNew[i-1] - 1;
55435 d = r + 1 - leafData;
55436 assert( d<nMaxCells );
55437 assert( r<nMaxCells );
55438 while( szRight==0 || szRight+szCell[d]+2<=szLeft-(szCell[r]+2) ){
55439 szRight += szCell[d] + 2;
55440 szLeft -= szCell[r] + 2;
55441 cntNew[i-1]--;
55442 r = cntNew[i-1] - 1;
55443 d = r + 1 - leafData;
55445 szNew[i] = szRight;
55446 szNew[i-1] = szLeft;
55449 /* Either we found one or more cells (cntnew[0])>0) or pPage is
55450 ** a virtual root page. A virtual root page is when the real root
55451 ** page is page 1 and we are the only child of that page.
55453 ** UPDATE: The assert() below is not necessarily true if the database
55454 ** file is corrupt. The corruption will be detected and reported later
55455 ** in this procedure so there is no need to act upon it now.
55457 #if 0
55458 assert( cntNew[0]>0 || (pParent->pgno==1 && pParent->nCell==0) );
55459 #endif
55461 TRACE(("BALANCE: old: %d %d %d ",
55462 apOld[0]->pgno,
55463 nOld>=2 ? apOld[1]->pgno : 0,
55464 nOld>=3 ? apOld[2]->pgno : 0
55468 ** Allocate k new pages. Reuse old pages where possible.
55470 if( apOld[0]->pgno<=1 ){
55471 rc = SQLITE_CORRUPT_BKPT;
55472 goto balance_cleanup;
55474 pageFlags = apOld[0]->aData[0];
55475 for(i=0; i<k; i++){
55476 MemPage *pNew;
55477 if( i<nOld ){
55478 pNew = apNew[i] = apOld[i];
55479 apOld[i] = 0;
55480 rc = sqlite3PagerWrite(pNew->pDbPage);
55481 nNew++;
55482 if( rc ) goto balance_cleanup;
55483 }else{
55484 assert( i>0 );
55485 rc = allocateBtreePage(pBt, &pNew, &pgno, pgno, 0);
55486 if( rc ) goto balance_cleanup;
55487 apNew[i] = pNew;
55488 nNew++;
55490 /* Set the pointer-map entry for the new sibling page. */
55491 if( ISAUTOVACUUM ){
55492 ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
55493 if( rc!=SQLITE_OK ){
55494 goto balance_cleanup;
55500 /* Free any old pages that were not reused as new pages.
55502 while( i<nOld ){
55503 freePage(apOld[i], &rc);
55504 if( rc ) goto balance_cleanup;
55505 releasePage(apOld[i]);
55506 apOld[i] = 0;
55507 i++;
55511 ** Put the new pages in accending order. This helps to
55512 ** keep entries in the disk file in order so that a scan
55513 ** of the table is a linear scan through the file. That
55514 ** in turn helps the operating system to deliver pages
55515 ** from the disk more rapidly.
55517 ** An O(n^2) insertion sort algorithm is used, but since
55518 ** n is never more than NB (a small constant), that should
55519 ** not be a problem.
55521 ** When NB==3, this one optimization makes the database
55522 ** about 25% faster for large insertions and deletions.
55524 for(i=0; i<k-1; i++){
55525 int minV = apNew[i]->pgno;
55526 int minI = i;
55527 for(j=i+1; j<k; j++){
55528 if( apNew[j]->pgno<(unsigned)minV ){
55529 minI = j;
55530 minV = apNew[j]->pgno;
55533 if( minI>i ){
55534 MemPage *pT;
55535 pT = apNew[i];
55536 apNew[i] = apNew[minI];
55537 apNew[minI] = pT;
55540 TRACE(("new: %d(%d) %d(%d) %d(%d) %d(%d) %d(%d)\n",
55541 apNew[0]->pgno, szNew[0],
55542 nNew>=2 ? apNew[1]->pgno : 0, nNew>=2 ? szNew[1] : 0,
55543 nNew>=3 ? apNew[2]->pgno : 0, nNew>=3 ? szNew[2] : 0,
55544 nNew>=4 ? apNew[3]->pgno : 0, nNew>=4 ? szNew[3] : 0,
55545 nNew>=5 ? apNew[4]->pgno : 0, nNew>=5 ? szNew[4] : 0));
55547 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
55548 put4byte(pRight, apNew[nNew-1]->pgno);
55551 ** Evenly distribute the data in apCell[] across the new pages.
55552 ** Insert divider cells into pParent as necessary.
55554 j = 0;
55555 for(i=0; i<nNew; i++){
55556 /* Assemble the new sibling page. */
55557 MemPage *pNew = apNew[i];
55558 assert( j<nMaxCells );
55559 zeroPage(pNew, pageFlags);
55560 assemblePage(pNew, cntNew[i]-j, &apCell[j], &szCell[j]);
55561 assert( pNew->nCell>0 || (nNew==1 && cntNew[0]==0) );
55562 assert( pNew->nOverflow==0 );
55564 j = cntNew[i];
55566 /* If the sibling page assembled above was not the right-most sibling,
55567 ** insert a divider cell into the parent page.
55569 assert( i<nNew-1 || j==nCell );
55570 if( j<nCell ){
55571 u8 *pCell;
55572 u8 *pTemp;
55573 int sz;
55575 assert( j<nMaxCells );
55576 pCell = apCell[j];
55577 sz = szCell[j] + leafCorrection;
55578 pTemp = &aOvflSpace[iOvflSpace];
55579 if( !pNew->leaf ){
55580 memcpy(&pNew->aData[8], pCell, 4);
55581 }else if( leafData ){
55582 /* If the tree is a leaf-data tree, and the siblings are leaves,
55583 ** then there is no divider cell in apCell[]. Instead, the divider
55584 ** cell consists of the integer key for the right-most cell of
55585 ** the sibling-page assembled above only.
55587 CellInfo info;
55588 j--;
55589 btreeParseCellPtr(pNew, apCell[j], &info);
55590 pCell = pTemp;
55591 sz = 4 + putVarint(&pCell[4], info.nKey);
55592 pTemp = 0;
55593 }else{
55594 pCell -= 4;
55595 /* Obscure case for non-leaf-data trees: If the cell at pCell was
55596 ** previously stored on a leaf node, and its reported size was 4
55597 ** bytes, then it may actually be smaller than this
55598 ** (see btreeParseCellPtr(), 4 bytes is the minimum size of
55599 ** any cell). But it is important to pass the correct size to
55600 ** insertCell(), so reparse the cell now.
55602 ** Note that this can never happen in an SQLite data file, as all
55603 ** cells are at least 4 bytes. It only happens in b-trees used
55604 ** to evaluate "IN (SELECT ...)" and similar clauses.
55606 if( szCell[j]==4 ){
55607 assert(leafCorrection==4);
55608 sz = cellSizePtr(pParent, pCell);
55611 iOvflSpace += sz;
55612 assert( sz<=pBt->maxLocal+23 );
55613 assert( iOvflSpace <= (int)pBt->pageSize );
55614 insertCell(pParent, nxDiv, pCell, sz, pTemp, pNew->pgno, &rc);
55615 if( rc!=SQLITE_OK ) goto balance_cleanup;
55616 assert( sqlite3PagerIswriteable(pParent->pDbPage) );
55618 j++;
55619 nxDiv++;
55622 assert( j==nCell );
55623 assert( nOld>0 );
55624 assert( nNew>0 );
55625 if( (pageFlags & PTF_LEAF)==0 ){
55626 u8 *zChild = &apCopy[nOld-1]->aData[8];
55627 memcpy(&apNew[nNew-1]->aData[8], zChild, 4);
55630 if( isRoot && pParent->nCell==0 && pParent->hdrOffset<=apNew[0]->nFree ){
55631 /* The root page of the b-tree now contains no cells. The only sibling
55632 ** page is the right-child of the parent. Copy the contents of the
55633 ** child page into the parent, decreasing the overall height of the
55634 ** b-tree structure by one. This is described as the "balance-shallower"
55635 ** sub-algorithm in some documentation.
55637 ** If this is an auto-vacuum database, the call to copyNodeContent()
55638 ** sets all pointer-map entries corresponding to database image pages
55639 ** for which the pointer is stored within the content being copied.
55641 ** The second assert below verifies that the child page is defragmented
55642 ** (it must be, as it was just reconstructed using assemblePage()). This
55643 ** is important if the parent page happens to be page 1 of the database
55644 ** image. */
55645 assert( nNew==1 );
55646 assert( apNew[0]->nFree ==
55647 (get2byte(&apNew[0]->aData[5])-apNew[0]->cellOffset-apNew[0]->nCell*2)
55649 copyNodeContent(apNew[0], pParent, &rc);
55650 freePage(apNew[0], &rc);
55651 }else if( ISAUTOVACUUM ){
55652 /* Fix the pointer-map entries for all the cells that were shifted around.
55653 ** There are several different types of pointer-map entries that need to
55654 ** be dealt with by this routine. Some of these have been set already, but
55655 ** many have not. The following is a summary:
55657 ** 1) The entries associated with new sibling pages that were not
55658 ** siblings when this function was called. These have already
55659 ** been set. We don't need to worry about old siblings that were
55660 ** moved to the free-list - the freePage() code has taken care
55661 ** of those.
55663 ** 2) The pointer-map entries associated with the first overflow
55664 ** page in any overflow chains used by new divider cells. These
55665 ** have also already been taken care of by the insertCell() code.
55667 ** 3) If the sibling pages are not leaves, then the child pages of
55668 ** cells stored on the sibling pages may need to be updated.
55670 ** 4) If the sibling pages are not internal intkey nodes, then any
55671 ** overflow pages used by these cells may need to be updated
55672 ** (internal intkey nodes never contain pointers to overflow pages).
55674 ** 5) If the sibling pages are not leaves, then the pointer-map
55675 ** entries for the right-child pages of each sibling may need
55676 ** to be updated.
55678 ** Cases 1 and 2 are dealt with above by other code. The next
55679 ** block deals with cases 3 and 4 and the one after that, case 5. Since
55680 ** setting a pointer map entry is a relatively expensive operation, this
55681 ** code only sets pointer map entries for child or overflow pages that have
55682 ** actually moved between pages. */
55683 MemPage *pNew = apNew[0];
55684 MemPage *pOld = apCopy[0];
55685 int nOverflow = pOld->nOverflow;
55686 int iNextOld = pOld->nCell + nOverflow;
55687 int iOverflow = (nOverflow ? pOld->aOvfl[0].idx : -1);
55688 j = 0; /* Current 'old' sibling page */
55689 k = 0; /* Current 'new' sibling page */
55690 for(i=0; i<nCell; i++){
55691 int isDivider = 0;
55692 while( i==iNextOld ){
55693 /* Cell i is the cell immediately following the last cell on old
55694 ** sibling page j. If the siblings are not leaf pages of an
55695 ** intkey b-tree, then cell i was a divider cell. */
55696 assert( j+1 < ArraySize(apCopy) );
55697 pOld = apCopy[++j];
55698 iNextOld = i + !leafData + pOld->nCell + pOld->nOverflow;
55699 if( pOld->nOverflow ){
55700 nOverflow = pOld->nOverflow;
55701 iOverflow = i + !leafData + pOld->aOvfl[0].idx;
55703 isDivider = !leafData;
55706 assert(nOverflow>0 || iOverflow<i );
55707 assert(nOverflow<2 || pOld->aOvfl[0].idx==pOld->aOvfl[1].idx-1);
55708 assert(nOverflow<3 || pOld->aOvfl[1].idx==pOld->aOvfl[2].idx-1);
55709 if( i==iOverflow ){
55710 isDivider = 1;
55711 if( (--nOverflow)>0 ){
55712 iOverflow++;
55716 if( i==cntNew[k] ){
55717 /* Cell i is the cell immediately following the last cell on new
55718 ** sibling page k. If the siblings are not leaf pages of an
55719 ** intkey b-tree, then cell i is a divider cell. */
55720 pNew = apNew[++k];
55721 if( !leafData ) continue;
55723 assert( j<nOld );
55724 assert( k<nNew );
55726 /* If the cell was originally divider cell (and is not now) or
55727 ** an overflow cell, or if the cell was located on a different sibling
55728 ** page before the balancing, then the pointer map entries associated
55729 ** with any child or overflow pages need to be updated. */
55730 if( isDivider || pOld->pgno!=pNew->pgno ){
55731 if( !leafCorrection ){
55732 ptrmapPut(pBt, get4byte(apCell[i]), PTRMAP_BTREE, pNew->pgno, &rc);
55734 if( szCell[i]>pNew->minLocal ){
55735 ptrmapPutOvflPtr(pNew, apCell[i], &rc);
55740 if( !leafCorrection ){
55741 for(i=0; i<nNew; i++){
55742 u32 key = get4byte(&apNew[i]->aData[8]);
55743 ptrmapPut(pBt, key, PTRMAP_BTREE, apNew[i]->pgno, &rc);
55747 #if 0
55748 /* The ptrmapCheckPages() contains assert() statements that verify that
55749 ** all pointer map pages are set correctly. This is helpful while
55750 ** debugging. This is usually disabled because a corrupt database may
55751 ** cause an assert() statement to fail. */
55752 ptrmapCheckPages(apNew, nNew);
55753 ptrmapCheckPages(&pParent, 1);
55754 #endif
55757 assert( pParent->isInit );
55758 TRACE(("BALANCE: finished: old=%d new=%d cells=%d\n",
55759 nOld, nNew, nCell));
55762 ** Cleanup before returning.
55764 balance_cleanup:
55765 sqlite3ScratchFree(apCell);
55766 for(i=0; i<nOld; i++){
55767 releasePage(apOld[i]);
55769 for(i=0; i<nNew; i++){
55770 releasePage(apNew[i]);
55773 return rc;
55778 ** This function is called when the root page of a b-tree structure is
55779 ** overfull (has one or more overflow pages).
55781 ** A new child page is allocated and the contents of the current root
55782 ** page, including overflow cells, are copied into the child. The root
55783 ** page is then overwritten to make it an empty page with the right-child
55784 ** pointer pointing to the new page.
55786 ** Before returning, all pointer-map entries corresponding to pages
55787 ** that the new child-page now contains pointers to are updated. The
55788 ** entry corresponding to the new right-child pointer of the root
55789 ** page is also updated.
55791 ** If successful, *ppChild is set to contain a reference to the child
55792 ** page and SQLITE_OK is returned. In this case the caller is required
55793 ** to call releasePage() on *ppChild exactly once. If an error occurs,
55794 ** an error code is returned and *ppChild is set to 0.
55796 static int balance_deeper(MemPage *pRoot, MemPage **ppChild){
55797 int rc; /* Return value from subprocedures */
55798 MemPage *pChild = 0; /* Pointer to a new child page */
55799 Pgno pgnoChild = 0; /* Page number of the new child page */
55800 BtShared *pBt = pRoot->pBt; /* The BTree */
55802 assert( pRoot->nOverflow>0 );
55803 assert( sqlite3_mutex_held(pBt->mutex) );
55805 /* Make pRoot, the root page of the b-tree, writable. Allocate a new
55806 ** page that will become the new right-child of pPage. Copy the contents
55807 ** of the node stored on pRoot into the new child page.
55809 rc = sqlite3PagerWrite(pRoot->pDbPage);
55810 if( rc==SQLITE_OK ){
55811 rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0);
55812 copyNodeContent(pRoot, pChild, &rc);
55813 if( ISAUTOVACUUM ){
55814 ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc);
55817 if( rc ){
55818 *ppChild = 0;
55819 releasePage(pChild);
55820 return rc;
55822 assert( sqlite3PagerIswriteable(pChild->pDbPage) );
55823 assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
55824 assert( pChild->nCell==pRoot->nCell );
55826 TRACE(("BALANCE: copy root %d into %d\n", pRoot->pgno, pChild->pgno));
55828 /* Copy the overflow cells from pRoot to pChild */
55829 memcpy(pChild->aOvfl, pRoot->aOvfl, pRoot->nOverflow*sizeof(pRoot->aOvfl[0]));
55830 pChild->nOverflow = pRoot->nOverflow;
55832 /* Zero the contents of pRoot. Then install pChild as the right-child. */
55833 zeroPage(pRoot, pChild->aData[0] & ~PTF_LEAF);
55834 put4byte(&pRoot->aData[pRoot->hdrOffset+8], pgnoChild);
55836 *ppChild = pChild;
55837 return SQLITE_OK;
55841 ** The page that pCur currently points to has just been modified in
55842 ** some way. This function figures out if this modification means the
55843 ** tree needs to be balanced, and if so calls the appropriate balancing
55844 ** routine. Balancing routines are:
55846 ** balance_quick()
55847 ** balance_deeper()
55848 ** balance_nonroot()
55850 static int balance(BtCursor *pCur){
55851 int rc = SQLITE_OK;
55852 const int nMin = pCur->pBt->usableSize * 2 / 3;
55853 u8 aBalanceQuickSpace[13];
55854 u8 *pFree = 0;
55856 TESTONLY( int balance_quick_called = 0 );
55857 TESTONLY( int balance_deeper_called = 0 );
55859 do {
55860 int iPage = pCur->iPage;
55861 MemPage *pPage = pCur->apPage[iPage];
55863 if( iPage==0 ){
55864 if( pPage->nOverflow ){
55865 /* The root page of the b-tree is overfull. In this case call the
55866 ** balance_deeper() function to create a new child for the root-page
55867 ** and copy the current contents of the root-page to it. The
55868 ** next iteration of the do-loop will balance the child page.
55870 assert( (balance_deeper_called++)==0 );
55871 rc = balance_deeper(pPage, &pCur->apPage[1]);
55872 if( rc==SQLITE_OK ){
55873 pCur->iPage = 1;
55874 pCur->aiIdx[0] = 0;
55875 pCur->aiIdx[1] = 0;
55876 assert( pCur->apPage[1]->nOverflow );
55878 }else{
55879 break;
55881 }else if( pPage->nOverflow==0 && pPage->nFree<=nMin ){
55882 break;
55883 }else{
55884 MemPage * const pParent = pCur->apPage[iPage-1];
55885 int const iIdx = pCur->aiIdx[iPage-1];
55887 rc = sqlite3PagerWrite(pParent->pDbPage);
55888 if( rc==SQLITE_OK ){
55889 #ifndef SQLITE_OMIT_QUICKBALANCE
55890 if( pPage->hasData
55891 && pPage->nOverflow==1
55892 && pPage->aOvfl[0].idx==pPage->nCell
55893 && pParent->pgno!=1
55894 && pParent->nCell==iIdx
55896 /* Call balance_quick() to create a new sibling of pPage on which
55897 ** to store the overflow cell. balance_quick() inserts a new cell
55898 ** into pParent, which may cause pParent overflow. If this
55899 ** happens, the next interation of the do-loop will balance pParent
55900 ** use either balance_nonroot() or balance_deeper(). Until this
55901 ** happens, the overflow cell is stored in the aBalanceQuickSpace[]
55902 ** buffer.
55904 ** The purpose of the following assert() is to check that only a
55905 ** single call to balance_quick() is made for each call to this
55906 ** function. If this were not verified, a subtle bug involving reuse
55907 ** of the aBalanceQuickSpace[] might sneak in.
55909 assert( (balance_quick_called++)==0 );
55910 rc = balance_quick(pParent, pPage, aBalanceQuickSpace);
55911 }else
55912 #endif
55914 /* In this case, call balance_nonroot() to redistribute cells
55915 ** between pPage and up to 2 of its sibling pages. This involves
55916 ** modifying the contents of pParent, which may cause pParent to
55917 ** become overfull or underfull. The next iteration of the do-loop
55918 ** will balance the parent page to correct this.
55920 ** If the parent page becomes overfull, the overflow cell or cells
55921 ** are stored in the pSpace buffer allocated immediately below.
55922 ** A subsequent iteration of the do-loop will deal with this by
55923 ** calling balance_nonroot() (balance_deeper() may be called first,
55924 ** but it doesn't deal with overflow cells - just moves them to a
55925 ** different page). Once this subsequent call to balance_nonroot()
55926 ** has completed, it is safe to release the pSpace buffer used by
55927 ** the previous call, as the overflow cell data will have been
55928 ** copied either into the body of a database page or into the new
55929 ** pSpace buffer passed to the latter call to balance_nonroot().
55931 u8 *pSpace = sqlite3PageMalloc(pCur->pBt->pageSize);
55932 rc = balance_nonroot(pParent, iIdx, pSpace, iPage==1);
55933 if( pFree ){
55934 /* If pFree is not NULL, it points to the pSpace buffer used
55935 ** by a previous call to balance_nonroot(). Its contents are
55936 ** now stored either on real database pages or within the
55937 ** new pSpace buffer, so it may be safely freed here. */
55938 sqlite3PageFree(pFree);
55941 /* The pSpace buffer will be freed after the next call to
55942 ** balance_nonroot(), or just before this function returns, whichever
55943 ** comes first. */
55944 pFree = pSpace;
55948 pPage->nOverflow = 0;
55950 /* The next iteration of the do-loop balances the parent page. */
55951 releasePage(pPage);
55952 pCur->iPage--;
55954 }while( rc==SQLITE_OK );
55956 if( pFree ){
55957 sqlite3PageFree(pFree);
55959 return rc;
55964 ** Insert a new record into the BTree. The key is given by (pKey,nKey)
55965 ** and the data is given by (pData,nData). The cursor is used only to
55966 ** define what table the record should be inserted into. The cursor
55967 ** is left pointing at a random location.
55969 ** For an INTKEY table, only the nKey value of the key is used. pKey is
55970 ** ignored. For a ZERODATA table, the pData and nData are both ignored.
55972 ** If the seekResult parameter is non-zero, then a successful call to
55973 ** MovetoUnpacked() to seek cursor pCur to (pKey, nKey) has already
55974 ** been performed. seekResult is the search result returned (a negative
55975 ** number if pCur points at an entry that is smaller than (pKey, nKey), or
55976 ** a positive value if pCur points at an etry that is larger than
55977 ** (pKey, nKey)).
55979 ** If the seekResult parameter is non-zero, then the caller guarantees that
55980 ** cursor pCur is pointing at the existing copy of a row that is to be
55981 ** overwritten. If the seekResult parameter is 0, then cursor pCur may
55982 ** point to any entry or to no entry at all and so this function has to seek
55983 ** the cursor before the new key can be inserted.
55985 SQLITE_PRIVATE int sqlite3BtreeInsert(
55986 BtCursor *pCur, /* Insert data into the table of this cursor */
55987 const void *pKey, i64 nKey, /* The key of the new record */
55988 const void *pData, int nData, /* The data of the new record */
55989 int nZero, /* Number of extra 0 bytes to append to data */
55990 int appendBias, /* True if this is likely an append */
55991 int seekResult /* Result of prior MovetoUnpacked() call */
55993 int rc;
55994 int loc = seekResult; /* -1: before desired location +1: after */
55995 int szNew = 0;
55996 int idx;
55997 MemPage *pPage;
55998 Btree *p = pCur->pBtree;
55999 BtShared *pBt = p->pBt;
56000 unsigned char *oldCell;
56001 unsigned char *newCell = 0;
56003 if( pCur->eState==CURSOR_FAULT ){
56004 assert( pCur->skipNext!=SQLITE_OK );
56005 return pCur->skipNext;
56008 assert( cursorHoldsMutex(pCur) );
56009 assert( pCur->wrFlag && pBt->inTransaction==TRANS_WRITE
56010 && (pBt->btsFlags & BTS_READ_ONLY)==0 );
56011 assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
56013 /* Assert that the caller has been consistent. If this cursor was opened
56014 ** expecting an index b-tree, then the caller should be inserting blob
56015 ** keys with no associated data. If the cursor was opened expecting an
56016 ** intkey table, the caller should be inserting integer keys with a
56017 ** blob of associated data. */
56018 assert( (pKey==0)==(pCur->pKeyInfo==0) );
56020 /* If this is an insert into a table b-tree, invalidate any incrblob
56021 ** cursors open on the row being replaced (assuming this is a replace
56022 ** operation - if it is not, the following is a no-op). */
56023 if( pCur->pKeyInfo==0 ){
56024 invalidateIncrblobCursors(p, nKey, 0);
56027 /* Save the positions of any other cursors open on this table.
56029 ** In some cases, the call to btreeMoveto() below is a no-op. For
56030 ** example, when inserting data into a table with auto-generated integer
56031 ** keys, the VDBE layer invokes sqlite3BtreeLast() to figure out the
56032 ** integer key to use. It then calls this function to actually insert the
56033 ** data into the intkey B-Tree. In this case btreeMoveto() recognizes
56034 ** that the cursor is already where it needs to be and returns without
56035 ** doing any work. To avoid thwarting these optimizations, it is important
56036 ** not to clear the cursor here.
56038 rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
56039 if( rc ) return rc;
56040 if( !loc ){
56041 rc = btreeMoveto(pCur, pKey, nKey, appendBias, &loc);
56042 if( rc ) return rc;
56044 assert( pCur->eState==CURSOR_VALID || (pCur->eState==CURSOR_INVALID && loc) );
56046 pPage = pCur->apPage[pCur->iPage];
56047 assert( pPage->intKey || nKey>=0 );
56048 assert( pPage->leaf || !pPage->intKey );
56050 TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n",
56051 pCur->pgnoRoot, nKey, nData, pPage->pgno,
56052 loc==0 ? "overwrite" : "new entry"));
56053 assert( pPage->isInit );
56054 allocateTempSpace(pBt);
56055 newCell = pBt->pTmpSpace;
56056 if( newCell==0 ) return SQLITE_NOMEM;
56057 rc = fillInCell(pPage, newCell, pKey, nKey, pData, nData, nZero, &szNew);
56058 if( rc ) goto end_insert;
56059 assert( szNew==cellSizePtr(pPage, newCell) );
56060 assert( szNew <= MX_CELL_SIZE(pBt) );
56061 idx = pCur->aiIdx[pCur->iPage];
56062 if( loc==0 ){
56063 u16 szOld;
56064 assert( idx<pPage->nCell );
56065 rc = sqlite3PagerWrite(pPage->pDbPage);
56066 if( rc ){
56067 goto end_insert;
56069 oldCell = findCell(pPage, idx);
56070 if( !pPage->leaf ){
56071 memcpy(newCell, oldCell, 4);
56073 szOld = cellSizePtr(pPage, oldCell);
56074 rc = clearCell(pPage, oldCell);
56075 dropCell(pPage, idx, szOld, &rc);
56076 if( rc ) goto end_insert;
56077 }else if( loc<0 && pPage->nCell>0 ){
56078 assert( pPage->leaf );
56079 idx = ++pCur->aiIdx[pCur->iPage];
56080 }else{
56081 assert( pPage->leaf );
56083 insertCell(pPage, idx, newCell, szNew, 0, 0, &rc);
56084 assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 );
56086 /* If no error has occured and pPage has an overflow cell, call balance()
56087 ** to redistribute the cells within the tree. Since balance() may move
56088 ** the cursor, zero the BtCursor.info.nSize and BtCursor.validNKey
56089 ** variables.
56091 ** Previous versions of SQLite called moveToRoot() to move the cursor
56092 ** back to the root page as balance() used to invalidate the contents
56093 ** of BtCursor.apPage[] and BtCursor.aiIdx[]. Instead of doing that,
56094 ** set the cursor state to "invalid". This makes common insert operations
56095 ** slightly faster.
56097 ** There is a subtle but important optimization here too. When inserting
56098 ** multiple records into an intkey b-tree using a single cursor (as can
56099 ** happen while processing an "INSERT INTO ... SELECT" statement), it
56100 ** is advantageous to leave the cursor pointing to the last entry in
56101 ** the b-tree if possible. If the cursor is left pointing to the last
56102 ** entry in the table, and the next row inserted has an integer key
56103 ** larger than the largest existing key, it is possible to insert the
56104 ** row without seeking the cursor. This can be a big performance boost.
56106 pCur->info.nSize = 0;
56107 pCur->validNKey = 0;
56108 if( rc==SQLITE_OK && pPage->nOverflow ){
56109 rc = balance(pCur);
56111 /* Must make sure nOverflow is reset to zero even if the balance()
56112 ** fails. Internal data structure corruption will result otherwise.
56113 ** Also, set the cursor state to invalid. This stops saveCursorPosition()
56114 ** from trying to save the current position of the cursor. */
56115 pCur->apPage[pCur->iPage]->nOverflow = 0;
56116 pCur->eState = CURSOR_INVALID;
56118 assert( pCur->apPage[pCur->iPage]->nOverflow==0 );
56120 end_insert:
56121 return rc;
56125 ** Delete the entry that the cursor is pointing to. The cursor
56126 ** is left pointing at a arbitrary location.
56128 SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
56129 Btree *p = pCur->pBtree;
56130 BtShared *pBt = p->pBt;
56131 int rc; /* Return code */
56132 MemPage *pPage; /* Page to delete cell from */
56133 unsigned char *pCell; /* Pointer to cell to delete */
56134 int iCellIdx; /* Index of cell to delete */
56135 int iCellDepth; /* Depth of node containing pCell */
56137 assert( cursorHoldsMutex(pCur) );
56138 assert( pBt->inTransaction==TRANS_WRITE );
56139 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );
56140 assert( pCur->wrFlag );
56141 assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
56142 assert( !hasReadConflicts(p, pCur->pgnoRoot) );
56144 if( NEVER(pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell)
56145 || NEVER(pCur->eState!=CURSOR_VALID)
56147 return SQLITE_ERROR; /* Something has gone awry. */
56150 /* If this is a delete operation to remove a row from a table b-tree,
56151 ** invalidate any incrblob cursors open on the row being deleted. */
56152 if( pCur->pKeyInfo==0 ){
56153 invalidateIncrblobCursors(p, pCur->info.nKey, 0);
56156 iCellDepth = pCur->iPage;
56157 iCellIdx = pCur->aiIdx[iCellDepth];
56158 pPage = pCur->apPage[iCellDepth];
56159 pCell = findCell(pPage, iCellIdx);
56161 /* If the page containing the entry to delete is not a leaf page, move
56162 ** the cursor to the largest entry in the tree that is smaller than
56163 ** the entry being deleted. This cell will replace the cell being deleted
56164 ** from the internal node. The 'previous' entry is used for this instead
56165 ** of the 'next' entry, as the previous entry is always a part of the
56166 ** sub-tree headed by the child page of the cell being deleted. This makes
56167 ** balancing the tree following the delete operation easier. */
56168 if( !pPage->leaf ){
56169 int notUsed;
56170 rc = sqlite3BtreePrevious(pCur, &notUsed);
56171 if( rc ) return rc;
56174 /* Save the positions of any other cursors open on this table before
56175 ** making any modifications. Make the page containing the entry to be
56176 ** deleted writable. Then free any overflow pages associated with the
56177 ** entry and finally remove the cell itself from within the page.
56179 rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
56180 if( rc ) return rc;
56181 rc = sqlite3PagerWrite(pPage->pDbPage);
56182 if( rc ) return rc;
56183 rc = clearCell(pPage, pCell);
56184 dropCell(pPage, iCellIdx, cellSizePtr(pPage, pCell), &rc);
56185 if( rc ) return rc;
56187 /* If the cell deleted was not located on a leaf page, then the cursor
56188 ** is currently pointing to the largest entry in the sub-tree headed
56189 ** by the child-page of the cell that was just deleted from an internal
56190 ** node. The cell from the leaf node needs to be moved to the internal
56191 ** node to replace the deleted cell. */
56192 if( !pPage->leaf ){
56193 MemPage *pLeaf = pCur->apPage[pCur->iPage];
56194 int nCell;
56195 Pgno n = pCur->apPage[iCellDepth+1]->pgno;
56196 unsigned char *pTmp;
56198 pCell = findCell(pLeaf, pLeaf->nCell-1);
56199 nCell = cellSizePtr(pLeaf, pCell);
56200 assert( MX_CELL_SIZE(pBt) >= nCell );
56202 allocateTempSpace(pBt);
56203 pTmp = pBt->pTmpSpace;
56205 rc = sqlite3PagerWrite(pLeaf->pDbPage);
56206 insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);
56207 dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);
56208 if( rc ) return rc;
56211 /* Balance the tree. If the entry deleted was located on a leaf page,
56212 ** then the cursor still points to that page. In this case the first
56213 ** call to balance() repairs the tree, and the if(...) condition is
56214 ** never true.
56216 ** Otherwise, if the entry deleted was on an internal node page, then
56217 ** pCur is pointing to the leaf page from which a cell was removed to
56218 ** replace the cell deleted from the internal node. This is slightly
56219 ** tricky as the leaf node may be underfull, and the internal node may
56220 ** be either under or overfull. In this case run the balancing algorithm
56221 ** on the leaf node first. If the balance proceeds far enough up the
56222 ** tree that we can be sure that any problem in the internal node has
56223 ** been corrected, so be it. Otherwise, after balancing the leaf node,
56224 ** walk the cursor up the tree to the internal node and balance it as
56225 ** well. */
56226 rc = balance(pCur);
56227 if( rc==SQLITE_OK && pCur->iPage>iCellDepth ){
56228 while( pCur->iPage>iCellDepth ){
56229 releasePage(pCur->apPage[pCur->iPage--]);
56231 rc = balance(pCur);
56234 if( rc==SQLITE_OK ){
56235 moveToRoot(pCur);
56237 return rc;
56241 ** Create a new BTree table. Write into *piTable the page
56242 ** number for the root page of the new table.
56244 ** The type of type is determined by the flags parameter. Only the
56245 ** following values of flags are currently in use. Other values for
56246 ** flags might not work:
56248 ** BTREE_INTKEY|BTREE_LEAFDATA Used for SQL tables with rowid keys
56249 ** BTREE_ZERODATA Used for SQL indices
56251 static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){
56252 BtShared *pBt = p->pBt;
56253 MemPage *pRoot;
56254 Pgno pgnoRoot;
56255 int rc;
56256 int ptfFlags; /* Page-type flage for the root page of new table */
56258 assert( sqlite3BtreeHoldsMutex(p) );
56259 assert( pBt->inTransaction==TRANS_WRITE );
56260 assert( (pBt->btsFlags & BTS_READ_ONLY)==0 );
56262 #ifdef SQLITE_OMIT_AUTOVACUUM
56263 rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
56264 if( rc ){
56265 return rc;
56267 #else
56268 if( pBt->autoVacuum ){
56269 Pgno pgnoMove; /* Move a page here to make room for the root-page */
56270 MemPage *pPageMove; /* The page to move to. */
56272 /* Creating a new table may probably require moving an existing database
56273 ** to make room for the new tables root page. In case this page turns
56274 ** out to be an overflow page, delete all overflow page-map caches
56275 ** held by open cursors.
56277 invalidateAllOverflowCache(pBt);
56279 /* Read the value of meta[3] from the database to determine where the
56280 ** root page of the new table should go. meta[3] is the largest root-page
56281 ** created so far, so the new root-page is (meta[3]+1).
56283 sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &pgnoRoot);
56284 pgnoRoot++;
56286 /* The new root-page may not be allocated on a pointer-map page, or the
56287 ** PENDING_BYTE page.
56289 while( pgnoRoot==PTRMAP_PAGENO(pBt, pgnoRoot) ||
56290 pgnoRoot==PENDING_BYTE_PAGE(pBt) ){
56291 pgnoRoot++;
56293 assert( pgnoRoot>=3 );
56295 /* Allocate a page. The page that currently resides at pgnoRoot will
56296 ** be moved to the allocated page (unless the allocated page happens
56297 ** to reside at pgnoRoot).
56299 rc = allocateBtreePage(pBt, &pPageMove, &pgnoMove, pgnoRoot, 1);
56300 if( rc!=SQLITE_OK ){
56301 return rc;
56304 if( pgnoMove!=pgnoRoot ){
56305 /* pgnoRoot is the page that will be used for the root-page of
56306 ** the new table (assuming an error did not occur). But we were
56307 ** allocated pgnoMove. If required (i.e. if it was not allocated
56308 ** by extending the file), the current page at position pgnoMove
56309 ** is already journaled.
56311 u8 eType = 0;
56312 Pgno iPtrPage = 0;
56314 releasePage(pPageMove);
56316 /* Move the page currently at pgnoRoot to pgnoMove. */
56317 rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
56318 if( rc!=SQLITE_OK ){
56319 return rc;
56321 rc = ptrmapGet(pBt, pgnoRoot, &eType, &iPtrPage);
56322 if( eType==PTRMAP_ROOTPAGE || eType==PTRMAP_FREEPAGE ){
56323 rc = SQLITE_CORRUPT_BKPT;
56325 if( rc!=SQLITE_OK ){
56326 releasePage(pRoot);
56327 return rc;
56329 assert( eType!=PTRMAP_ROOTPAGE );
56330 assert( eType!=PTRMAP_FREEPAGE );
56331 rc = relocatePage(pBt, pRoot, eType, iPtrPage, pgnoMove, 0);
56332 releasePage(pRoot);
56334 /* Obtain the page at pgnoRoot */
56335 if( rc!=SQLITE_OK ){
56336 return rc;
56338 rc = btreeGetPage(pBt, pgnoRoot, &pRoot, 0);
56339 if( rc!=SQLITE_OK ){
56340 return rc;
56342 rc = sqlite3PagerWrite(pRoot->pDbPage);
56343 if( rc!=SQLITE_OK ){
56344 releasePage(pRoot);
56345 return rc;
56347 }else{
56348 pRoot = pPageMove;
56351 /* Update the pointer-map and meta-data with the new root-page number. */
56352 ptrmapPut(pBt, pgnoRoot, PTRMAP_ROOTPAGE, 0, &rc);
56353 if( rc ){
56354 releasePage(pRoot);
56355 return rc;
56358 /* When the new root page was allocated, page 1 was made writable in
56359 ** order either to increase the database filesize, or to decrement the
56360 ** freelist count. Hence, the sqlite3BtreeUpdateMeta() call cannot fail.
56362 assert( sqlite3PagerIswriteable(pBt->pPage1->pDbPage) );
56363 rc = sqlite3BtreeUpdateMeta(p, 4, pgnoRoot);
56364 if( NEVER(rc) ){
56365 releasePage(pRoot);
56366 return rc;
56369 }else{
56370 rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
56371 if( rc ) return rc;
56373 #endif
56374 assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
56375 if( createTabFlags & BTREE_INTKEY ){
56376 ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF;
56377 }else{
56378 ptfFlags = PTF_ZERODATA | PTF_LEAF;
56380 zeroPage(pRoot, ptfFlags);
56381 sqlite3PagerUnref(pRoot->pDbPage);
56382 assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 );
56383 *piTable = (int)pgnoRoot;
56384 return SQLITE_OK;
56386 SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){
56387 int rc;
56388 sqlite3BtreeEnter(p);
56389 rc = btreeCreateTable(p, piTable, flags);
56390 sqlite3BtreeLeave(p);
56391 return rc;
56395 ** Erase the given database page and all its children. Return
56396 ** the page to the freelist.
56398 static int clearDatabasePage(
56399 BtShared *pBt, /* The BTree that contains the table */
56400 Pgno pgno, /* Page number to clear */
56401 int freePageFlag, /* Deallocate page if true */
56402 int *pnChange /* Add number of Cells freed to this counter */
56404 MemPage *pPage;
56405 int rc;
56406 unsigned char *pCell;
56407 int i;
56409 assert( sqlite3_mutex_held(pBt->mutex) );
56410 if( pgno>btreePagecount(pBt) ){
56411 return SQLITE_CORRUPT_BKPT;
56414 rc = getAndInitPage(pBt, pgno, &pPage);
56415 if( rc ) return rc;
56416 for(i=0; i<pPage->nCell; i++){
56417 pCell = findCell(pPage, i);
56418 if( !pPage->leaf ){
56419 rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange);
56420 if( rc ) goto cleardatabasepage_out;
56422 rc = clearCell(pPage, pCell);
56423 if( rc ) goto cleardatabasepage_out;
56425 if( !pPage->leaf ){
56426 rc = clearDatabasePage(pBt, get4byte(&pPage->aData[8]), 1, pnChange);
56427 if( rc ) goto cleardatabasepage_out;
56428 }else if( pnChange ){
56429 assert( pPage->intKey );
56430 *pnChange += pPage->nCell;
56432 if( freePageFlag ){
56433 freePage(pPage, &rc);
56434 }else if( (rc = sqlite3PagerWrite(pPage->pDbPage))==0 ){
56435 zeroPage(pPage, pPage->aData[0] | PTF_LEAF);
56438 cleardatabasepage_out:
56439 releasePage(pPage);
56440 return rc;
56444 ** Delete all information from a single table in the database. iTable is
56445 ** the page number of the root of the table. After this routine returns,
56446 ** the root page is empty, but still exists.
56448 ** This routine will fail with SQLITE_LOCKED if there are any open
56449 ** read cursors on the table. Open write cursors are moved to the
56450 ** root of the table.
56452 ** If pnChange is not NULL, then table iTable must be an intkey table. The
56453 ** integer value pointed to by pnChange is incremented by the number of
56454 ** entries in the table.
56456 SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree *p, int iTable, int *pnChange){
56457 int rc;
56458 BtShared *pBt = p->pBt;
56459 sqlite3BtreeEnter(p);
56460 assert( p->inTrans==TRANS_WRITE );
56462 /* Invalidate all incrblob cursors open on table iTable (assuming iTable
56463 ** is the root of a table b-tree - if it is not, the following call is
56464 ** a no-op). */
56465 invalidateIncrblobCursors(p, 0, 1);
56467 rc = saveAllCursors(pBt, (Pgno)iTable, 0);
56468 if( SQLITE_OK==rc ){
56469 rc = clearDatabasePage(pBt, (Pgno)iTable, 0, pnChange);
56471 sqlite3BtreeLeave(p);
56472 return rc;
56476 ** Erase all information in a table and add the root of the table to
56477 ** the freelist. Except, the root of the principle table (the one on
56478 ** page 1) is never added to the freelist.
56480 ** This routine will fail with SQLITE_LOCKED if there are any open
56481 ** cursors on the table.
56483 ** If AUTOVACUUM is enabled and the page at iTable is not the last
56484 ** root page in the database file, then the last root page
56485 ** in the database file is moved into the slot formerly occupied by
56486 ** iTable and that last slot formerly occupied by the last root page
56487 ** is added to the freelist instead of iTable. In this say, all
56488 ** root pages are kept at the beginning of the database file, which
56489 ** is necessary for AUTOVACUUM to work right. *piMoved is set to the
56490 ** page number that used to be the last root page in the file before
56491 ** the move. If no page gets moved, *piMoved is set to 0.
56492 ** The last root page is recorded in meta[3] and the value of
56493 ** meta[3] is updated by this procedure.
56495 static int btreeDropTable(Btree *p, Pgno iTable, int *piMoved){
56496 int rc;
56497 MemPage *pPage = 0;
56498 BtShared *pBt = p->pBt;
56500 assert( sqlite3BtreeHoldsMutex(p) );
56501 assert( p->inTrans==TRANS_WRITE );
56503 /* It is illegal to drop a table if any cursors are open on the
56504 ** database. This is because in auto-vacuum mode the backend may
56505 ** need to move another root-page to fill a gap left by the deleted
56506 ** root page. If an open cursor was using this page a problem would
56507 ** occur.
56509 ** This error is caught long before control reaches this point.
56511 if( NEVER(pBt->pCursor) ){
56512 sqlite3ConnectionBlocked(p->db, pBt->pCursor->pBtree->db);
56513 return SQLITE_LOCKED_SHAREDCACHE;
56516 rc = btreeGetPage(pBt, (Pgno)iTable, &pPage, 0);
56517 if( rc ) return rc;
56518 rc = sqlite3BtreeClearTable(p, iTable, 0);
56519 if( rc ){
56520 releasePage(pPage);
56521 return rc;
56524 *piMoved = 0;
56526 if( iTable>1 ){
56527 #ifdef SQLITE_OMIT_AUTOVACUUM
56528 freePage(pPage, &rc);
56529 releasePage(pPage);
56530 #else
56531 if( pBt->autoVacuum ){
56532 Pgno maxRootPgno;
56533 sqlite3BtreeGetMeta(p, BTREE_LARGEST_ROOT_PAGE, &maxRootPgno);
56535 if( iTable==maxRootPgno ){
56536 /* If the table being dropped is the table with the largest root-page
56537 ** number in the database, put the root page on the free list.
56539 freePage(pPage, &rc);
56540 releasePage(pPage);
56541 if( rc!=SQLITE_OK ){
56542 return rc;
56544 }else{
56545 /* The table being dropped does not have the largest root-page
56546 ** number in the database. So move the page that does into the
56547 ** gap left by the deleted root-page.
56549 MemPage *pMove;
56550 releasePage(pPage);
56551 rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
56552 if( rc!=SQLITE_OK ){
56553 return rc;
56555 rc = relocatePage(pBt, pMove, PTRMAP_ROOTPAGE, 0, iTable, 0);
56556 releasePage(pMove);
56557 if( rc!=SQLITE_OK ){
56558 return rc;
56560 pMove = 0;
56561 rc = btreeGetPage(pBt, maxRootPgno, &pMove, 0);
56562 freePage(pMove, &rc);
56563 releasePage(pMove);
56564 if( rc!=SQLITE_OK ){
56565 return rc;
56567 *piMoved = maxRootPgno;
56570 /* Set the new 'max-root-page' value in the database header. This
56571 ** is the old value less one, less one more if that happens to
56572 ** be a root-page number, less one again if that is the
56573 ** PENDING_BYTE_PAGE.
56575 maxRootPgno--;
56576 while( maxRootPgno==PENDING_BYTE_PAGE(pBt)
56577 || PTRMAP_ISPAGE(pBt, maxRootPgno) ){
56578 maxRootPgno--;
56580 assert( maxRootPgno!=PENDING_BYTE_PAGE(pBt) );
56582 rc = sqlite3BtreeUpdateMeta(p, 4, maxRootPgno);
56583 }else{
56584 freePage(pPage, &rc);
56585 releasePage(pPage);
56587 #endif
56588 }else{
56589 /* If sqlite3BtreeDropTable was called on page 1.
56590 ** This really never should happen except in a corrupt
56591 ** database.
56593 zeroPage(pPage, PTF_INTKEY|PTF_LEAF );
56594 releasePage(pPage);
56596 return rc;
56598 SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
56599 int rc;
56600 sqlite3BtreeEnter(p);
56601 rc = btreeDropTable(p, iTable, piMoved);
56602 sqlite3BtreeLeave(p);
56603 return rc;
56608 ** This function may only be called if the b-tree connection already
56609 ** has a read or write transaction open on the database.
56611 ** Read the meta-information out of a database file. Meta[0]
56612 ** is the number of free pages currently in the database. Meta[1]
56613 ** through meta[15] are available for use by higher layers. Meta[0]
56614 ** is read-only, the others are read/write.
56616 ** The schema layer numbers meta values differently. At the schema
56617 ** layer (and the SetCookie and ReadCookie opcodes) the number of
56618 ** free pages is not visible. So Cookie[0] is the same as Meta[1].
56620 SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *p, int idx, u32 *pMeta){
56621 BtShared *pBt = p->pBt;
56623 sqlite3BtreeEnter(p);
56624 assert( p->inTrans>TRANS_NONE );
56625 assert( SQLITE_OK==querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK) );
56626 assert( pBt->pPage1 );
56627 assert( idx>=0 && idx<=15 );
56629 *pMeta = get4byte(&pBt->pPage1->aData[36 + idx*4]);
56631 /* If auto-vacuum is disabled in this build and this is an auto-vacuum
56632 ** database, mark the database as read-only. */
56633 #ifdef SQLITE_OMIT_AUTOVACUUM
56634 if( idx==BTREE_LARGEST_ROOT_PAGE && *pMeta>0 ){
56635 pBt->btsFlags |= BTS_READ_ONLY;
56637 #endif
56639 sqlite3BtreeLeave(p);
56643 ** Write meta-information back into the database. Meta[0] is
56644 ** read-only and may not be written.
56646 SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree *p, int idx, u32 iMeta){
56647 BtShared *pBt = p->pBt;
56648 unsigned char *pP1;
56649 int rc;
56650 assert( idx>=1 && idx<=15 );
56651 sqlite3BtreeEnter(p);
56652 assert( p->inTrans==TRANS_WRITE );
56653 assert( pBt->pPage1!=0 );
56654 pP1 = pBt->pPage1->aData;
56655 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
56656 if( rc==SQLITE_OK ){
56657 put4byte(&pP1[36 + idx*4], iMeta);
56658 #ifndef SQLITE_OMIT_AUTOVACUUM
56659 if( idx==BTREE_INCR_VACUUM ){
56660 assert( pBt->autoVacuum || iMeta==0 );
56661 assert( iMeta==0 || iMeta==1 );
56662 pBt->incrVacuum = (u8)iMeta;
56664 #endif
56666 sqlite3BtreeLeave(p);
56667 return rc;
56670 #ifndef SQLITE_OMIT_BTREECOUNT
56672 ** The first argument, pCur, is a cursor opened on some b-tree. Count the
56673 ** number of entries in the b-tree and write the result to *pnEntry.
56675 ** SQLITE_OK is returned if the operation is successfully executed.
56676 ** Otherwise, if an error is encountered (i.e. an IO error or database
56677 ** corruption) an SQLite error code is returned.
56679 SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
56680 i64 nEntry = 0; /* Value to return in *pnEntry */
56681 int rc; /* Return code */
56683 if( pCur->pgnoRoot==0 ){
56684 *pnEntry = 0;
56685 return SQLITE_OK;
56687 rc = moveToRoot(pCur);
56689 /* Unless an error occurs, the following loop runs one iteration for each
56690 ** page in the B-Tree structure (not including overflow pages).
56692 while( rc==SQLITE_OK ){
56693 int iIdx; /* Index of child node in parent */
56694 MemPage *pPage; /* Current page of the b-tree */
56696 /* If this is a leaf page or the tree is not an int-key tree, then
56697 ** this page contains countable entries. Increment the entry counter
56698 ** accordingly.
56700 pPage = pCur->apPage[pCur->iPage];
56701 if( pPage->leaf || !pPage->intKey ){
56702 nEntry += pPage->nCell;
56705 /* pPage is a leaf node. This loop navigates the cursor so that it
56706 ** points to the first interior cell that it points to the parent of
56707 ** the next page in the tree that has not yet been visited. The
56708 ** pCur->aiIdx[pCur->iPage] value is set to the index of the parent cell
56709 ** of the page, or to the number of cells in the page if the next page
56710 ** to visit is the right-child of its parent.
56712 ** If all pages in the tree have been visited, return SQLITE_OK to the
56713 ** caller.
56715 if( pPage->leaf ){
56716 do {
56717 if( pCur->iPage==0 ){
56718 /* All pages of the b-tree have been visited. Return successfully. */
56719 *pnEntry = nEntry;
56720 return SQLITE_OK;
56722 moveToParent(pCur);
56723 }while ( pCur->aiIdx[pCur->iPage]>=pCur->apPage[pCur->iPage]->nCell );
56725 pCur->aiIdx[pCur->iPage]++;
56726 pPage = pCur->apPage[pCur->iPage];
56729 /* Descend to the child node of the cell that the cursor currently
56730 ** points at. This is the right-child if (iIdx==pPage->nCell).
56732 iIdx = pCur->aiIdx[pCur->iPage];
56733 if( iIdx==pPage->nCell ){
56734 rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
56735 }else{
56736 rc = moveToChild(pCur, get4byte(findCell(pPage, iIdx)));
56740 /* An error has occurred. Return an error code. */
56741 return rc;
56743 #endif
56746 ** Return the pager associated with a BTree. This routine is used for
56747 ** testing and debugging only.
56749 SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){
56750 return p->pBt->pPager;
56753 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
56755 ** Append a message to the error message string.
56757 static void checkAppendMsg(
56758 IntegrityCk *pCheck,
56759 char *zMsg1,
56760 const char *zFormat,
56763 va_list ap;
56764 if( !pCheck->mxErr ) return;
56765 pCheck->mxErr--;
56766 pCheck->nErr++;
56767 va_start(ap, zFormat);
56768 if( pCheck->errMsg.nChar ){
56769 sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1);
56771 if( zMsg1 ){
56772 sqlite3StrAccumAppend(&pCheck->errMsg, zMsg1, -1);
56774 sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap);
56775 va_end(ap);
56776 if( pCheck->errMsg.mallocFailed ){
56777 pCheck->mallocFailed = 1;
56780 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
56782 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
56784 ** Add 1 to the reference count for page iPage. If this is the second
56785 ** reference to the page, add an error message to pCheck->zErrMsg.
56786 ** Return 1 if there are 2 ore more references to the page and 0 if
56787 ** if this is the first reference to the page.
56789 ** Also check that the page number is in bounds.
56791 static int checkRef(IntegrityCk *pCheck, Pgno iPage, char *zContext){
56792 if( iPage==0 ) return 1;
56793 if( iPage>pCheck->nPage ){
56794 checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage);
56795 return 1;
56797 if( pCheck->anRef[iPage]==1 ){
56798 checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage);
56799 return 1;
56801 return (pCheck->anRef[iPage]++)>1;
56804 #ifndef SQLITE_OMIT_AUTOVACUUM
56806 ** Check that the entry in the pointer-map for page iChild maps to
56807 ** page iParent, pointer type ptrType. If not, append an error message
56808 ** to pCheck.
56810 static void checkPtrmap(
56811 IntegrityCk *pCheck, /* Integrity check context */
56812 Pgno iChild, /* Child page number */
56813 u8 eType, /* Expected pointer map type */
56814 Pgno iParent, /* Expected pointer map parent page number */
56815 char *zContext /* Context description (used for error msg) */
56817 int rc;
56818 u8 ePtrmapType;
56819 Pgno iPtrmapParent;
56821 rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent);
56822 if( rc!=SQLITE_OK ){
56823 if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1;
56824 checkAppendMsg(pCheck, zContext, "Failed to read ptrmap key=%d", iChild);
56825 return;
56828 if( ePtrmapType!=eType || iPtrmapParent!=iParent ){
56829 checkAppendMsg(pCheck, zContext,
56830 "Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)",
56831 iChild, eType, iParent, ePtrmapType, iPtrmapParent);
56834 #endif
56837 ** Check the integrity of the freelist or of an overflow page list.
56838 ** Verify that the number of pages on the list is N.
56840 static void checkList(
56841 IntegrityCk *pCheck, /* Integrity checking context */
56842 int isFreeList, /* True for a freelist. False for overflow page list */
56843 int iPage, /* Page number for first page in the list */
56844 int N, /* Expected number of pages in the list */
56845 char *zContext /* Context for error messages */
56847 int i;
56848 int expected = N;
56849 int iFirst = iPage;
56850 while( N-- > 0 && pCheck->mxErr ){
56851 DbPage *pOvflPage;
56852 unsigned char *pOvflData;
56853 if( iPage<1 ){
56854 checkAppendMsg(pCheck, zContext,
56855 "%d of %d pages missing from overflow list starting at %d",
56856 N+1, expected, iFirst);
56857 break;
56859 if( checkRef(pCheck, iPage, zContext) ) break;
56860 if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage) ){
56861 checkAppendMsg(pCheck, zContext, "failed to get page %d", iPage);
56862 break;
56864 pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage);
56865 if( isFreeList ){
56866 int n = get4byte(&pOvflData[4]);
56867 #ifndef SQLITE_OMIT_AUTOVACUUM
56868 if( pCheck->pBt->autoVacuum ){
56869 checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0, zContext);
56871 #endif
56872 if( n>(int)pCheck->pBt->usableSize/4-2 ){
56873 checkAppendMsg(pCheck, zContext,
56874 "freelist leaf count too big on page %d", iPage);
56875 N--;
56876 }else{
56877 for(i=0; i<n; i++){
56878 Pgno iFreePage = get4byte(&pOvflData[8+i*4]);
56879 #ifndef SQLITE_OMIT_AUTOVACUUM
56880 if( pCheck->pBt->autoVacuum ){
56881 checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0, zContext);
56883 #endif
56884 checkRef(pCheck, iFreePage, zContext);
56886 N -= n;
56889 #ifndef SQLITE_OMIT_AUTOVACUUM
56890 else{
56891 /* If this database supports auto-vacuum and iPage is not the last
56892 ** page in this overflow list, check that the pointer-map entry for
56893 ** the following page matches iPage.
56895 if( pCheck->pBt->autoVacuum && N>0 ){
56896 i = get4byte(pOvflData);
56897 checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage, zContext);
56900 #endif
56901 iPage = get4byte(pOvflData);
56902 sqlite3PagerUnref(pOvflPage);
56905 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
56907 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
56909 ** Do various sanity checks on a single page of a tree. Return
56910 ** the tree depth. Root pages return 0. Parents of root pages
56911 ** return 1, and so forth.
56913 ** These checks are done:
56915 ** 1. Make sure that cells and freeblocks do not overlap
56916 ** but combine to completely cover the page.
56917 ** NO 2. Make sure cell keys are in order.
56918 ** NO 3. Make sure no key is less than or equal to zLowerBound.
56919 ** NO 4. Make sure no key is greater than or equal to zUpperBound.
56920 ** 5. Check the integrity of overflow pages.
56921 ** 6. Recursively call checkTreePage on all children.
56922 ** 7. Verify that the depth of all children is the same.
56923 ** 8. Make sure this page is at least 33% full or else it is
56924 ** the root of the tree.
56926 static int checkTreePage(
56927 IntegrityCk *pCheck, /* Context for the sanity check */
56928 int iPage, /* Page number of the page to check */
56929 char *zParentContext, /* Parent context */
56930 i64 *pnParentMinKey,
56931 i64 *pnParentMaxKey
56933 MemPage *pPage;
56934 int i, rc, depth, d2, pgno, cnt;
56935 int hdr, cellStart;
56936 int nCell;
56937 u8 *data;
56938 BtShared *pBt;
56939 int usableSize;
56940 char zContext[100];
56941 char *hit = 0;
56942 i64 nMinKey = 0;
56943 i64 nMaxKey = 0;
56945 sqlite3_snprintf(sizeof(zContext), zContext, "Page %d: ", iPage);
56947 /* Check that the page exists
56949 pBt = pCheck->pBt;
56950 usableSize = pBt->usableSize;
56951 if( iPage==0 ) return 0;
56952 if( checkRef(pCheck, iPage, zParentContext) ) return 0;
56953 if( (rc = btreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){
56954 checkAppendMsg(pCheck, zContext,
56955 "unable to get the page. error code=%d", rc);
56956 return 0;
56959 /* Clear MemPage.isInit to make sure the corruption detection code in
56960 ** btreeInitPage() is executed. */
56961 pPage->isInit = 0;
56962 if( (rc = btreeInitPage(pPage))!=0 ){
56963 assert( rc==SQLITE_CORRUPT ); /* The only possible error from InitPage */
56964 checkAppendMsg(pCheck, zContext,
56965 "btreeInitPage() returns error code %d", rc);
56966 releasePage(pPage);
56967 return 0;
56970 /* Check out all the cells.
56972 depth = 0;
56973 for(i=0; i<pPage->nCell && pCheck->mxErr; i++){
56974 u8 *pCell;
56975 u32 sz;
56976 CellInfo info;
56978 /* Check payload overflow pages
56980 sqlite3_snprintf(sizeof(zContext), zContext,
56981 "On tree page %d cell %d: ", iPage, i);
56982 pCell = findCell(pPage,i);
56983 btreeParseCellPtr(pPage, pCell, &info);
56984 sz = info.nData;
56985 if( !pPage->intKey ) sz += (int)info.nKey;
56986 /* For intKey pages, check that the keys are in order.
56988 else if( i==0 ) nMinKey = nMaxKey = info.nKey;
56989 else{
56990 if( info.nKey <= nMaxKey ){
56991 checkAppendMsg(pCheck, zContext,
56992 "Rowid %lld out of order (previous was %lld)", info.nKey, nMaxKey);
56994 nMaxKey = info.nKey;
56996 assert( sz==info.nPayload );
56997 if( (sz>info.nLocal)
56998 && (&pCell[info.iOverflow]<=&pPage->aData[pBt->usableSize])
57000 int nPage = (sz - info.nLocal + usableSize - 5)/(usableSize - 4);
57001 Pgno pgnoOvfl = get4byte(&pCell[info.iOverflow]);
57002 #ifndef SQLITE_OMIT_AUTOVACUUM
57003 if( pBt->autoVacuum ){
57004 checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage, zContext);
57006 #endif
57007 checkList(pCheck, 0, pgnoOvfl, nPage, zContext);
57010 /* Check sanity of left child page.
57012 if( !pPage->leaf ){
57013 pgno = get4byte(pCell);
57014 #ifndef SQLITE_OMIT_AUTOVACUUM
57015 if( pBt->autoVacuum ){
57016 checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
57018 #endif
57019 d2 = checkTreePage(pCheck, pgno, zContext, &nMinKey, i==0 ? NULL : &nMaxKey);
57020 if( i>0 && d2!=depth ){
57021 checkAppendMsg(pCheck, zContext, "Child page depth differs");
57023 depth = d2;
57027 if( !pPage->leaf ){
57028 pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
57029 sqlite3_snprintf(sizeof(zContext), zContext,
57030 "On page %d at right child: ", iPage);
57031 #ifndef SQLITE_OMIT_AUTOVACUUM
57032 if( pBt->autoVacuum ){
57033 checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
57035 #endif
57036 checkTreePage(pCheck, pgno, zContext, NULL, !pPage->nCell ? NULL : &nMaxKey);
57039 /* For intKey leaf pages, check that the min/max keys are in order
57040 ** with any left/parent/right pages.
57042 if( pPage->leaf && pPage->intKey ){
57043 /* if we are a left child page */
57044 if( pnParentMinKey ){
57045 /* if we are the left most child page */
57046 if( !pnParentMaxKey ){
57047 if( nMaxKey > *pnParentMinKey ){
57048 checkAppendMsg(pCheck, zContext,
57049 "Rowid %lld out of order (max larger than parent min of %lld)",
57050 nMaxKey, *pnParentMinKey);
57052 }else{
57053 if( nMinKey <= *pnParentMinKey ){
57054 checkAppendMsg(pCheck, zContext,
57055 "Rowid %lld out of order (min less than parent min of %lld)",
57056 nMinKey, *pnParentMinKey);
57058 if( nMaxKey > *pnParentMaxKey ){
57059 checkAppendMsg(pCheck, zContext,
57060 "Rowid %lld out of order (max larger than parent max of %lld)",
57061 nMaxKey, *pnParentMaxKey);
57063 *pnParentMinKey = nMaxKey;
57065 /* else if we're a right child page */
57066 } else if( pnParentMaxKey ){
57067 if( nMinKey <= *pnParentMaxKey ){
57068 checkAppendMsg(pCheck, zContext,
57069 "Rowid %lld out of order (min less than parent max of %lld)",
57070 nMinKey, *pnParentMaxKey);
57075 /* Check for complete coverage of the page
57077 data = pPage->aData;
57078 hdr = pPage->hdrOffset;
57079 hit = sqlite3PageMalloc( pBt->pageSize );
57080 if( hit==0 ){
57081 pCheck->mallocFailed = 1;
57082 }else{
57083 int contentOffset = get2byteNotZero(&data[hdr+5]);
57084 assert( contentOffset<=usableSize ); /* Enforced by btreeInitPage() */
57085 memset(hit+contentOffset, 0, usableSize-contentOffset);
57086 memset(hit, 1, contentOffset);
57087 nCell = get2byte(&data[hdr+3]);
57088 cellStart = hdr + 12 - 4*pPage->leaf;
57089 for(i=0; i<nCell; i++){
57090 int pc = get2byte(&data[cellStart+i*2]);
57091 u32 size = 65536;
57092 int j;
57093 if( pc<=usableSize-4 ){
57094 size = cellSizePtr(pPage, &data[pc]);
57096 if( (int)(pc+size-1)>=usableSize ){
57097 checkAppendMsg(pCheck, 0,
57098 "Corruption detected in cell %d on page %d",i,iPage);
57099 }else{
57100 for(j=pc+size-1; j>=pc; j--) hit[j]++;
57103 i = get2byte(&data[hdr+1]);
57104 while( i>0 ){
57105 int size, j;
57106 assert( i<=usableSize-4 ); /* Enforced by btreeInitPage() */
57107 size = get2byte(&data[i+2]);
57108 assert( i+size<=usableSize ); /* Enforced by btreeInitPage() */
57109 for(j=i+size-1; j>=i; j--) hit[j]++;
57110 j = get2byte(&data[i]);
57111 assert( j==0 || j>i+size ); /* Enforced by btreeInitPage() */
57112 assert( j<=usableSize-4 ); /* Enforced by btreeInitPage() */
57113 i = j;
57115 for(i=cnt=0; i<usableSize; i++){
57116 if( hit[i]==0 ){
57117 cnt++;
57118 }else if( hit[i]>1 ){
57119 checkAppendMsg(pCheck, 0,
57120 "Multiple uses for byte %d of page %d", i, iPage);
57121 break;
57124 if( cnt!=data[hdr+7] ){
57125 checkAppendMsg(pCheck, 0,
57126 "Fragmentation of %d bytes reported as %d on page %d",
57127 cnt, data[hdr+7], iPage);
57130 sqlite3PageFree(hit);
57131 releasePage(pPage);
57132 return depth+1;
57134 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
57136 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
57138 ** This routine does a complete check of the given BTree file. aRoot[] is
57139 ** an array of pages numbers were each page number is the root page of
57140 ** a table. nRoot is the number of entries in aRoot.
57142 ** A read-only or read-write transaction must be opened before calling
57143 ** this function.
57145 ** Write the number of error seen in *pnErr. Except for some memory
57146 ** allocation errors, an error message held in memory obtained from
57147 ** malloc is returned if *pnErr is non-zero. If *pnErr==0 then NULL is
57148 ** returned. If a memory allocation error occurs, NULL is returned.
57150 SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
57151 Btree *p, /* The btree to be checked */
57152 int *aRoot, /* An array of root pages numbers for individual trees */
57153 int nRoot, /* Number of entries in aRoot[] */
57154 int mxErr, /* Stop reporting errors after this many */
57155 int *pnErr /* Write number of errors seen to this variable */
57157 Pgno i;
57158 int nRef;
57159 IntegrityCk sCheck;
57160 BtShared *pBt = p->pBt;
57161 char zErr[100];
57163 sqlite3BtreeEnter(p);
57164 assert( p->inTrans>TRANS_NONE && pBt->inTransaction>TRANS_NONE );
57165 nRef = sqlite3PagerRefcount(pBt->pPager);
57166 sCheck.pBt = pBt;
57167 sCheck.pPager = pBt->pPager;
57168 sCheck.nPage = btreePagecount(sCheck.pBt);
57169 sCheck.mxErr = mxErr;
57170 sCheck.nErr = 0;
57171 sCheck.mallocFailed = 0;
57172 *pnErr = 0;
57173 if( sCheck.nPage==0 ){
57174 sqlite3BtreeLeave(p);
57175 return 0;
57177 sCheck.anRef = sqlite3Malloc( (sCheck.nPage+1)*sizeof(sCheck.anRef[0]) );
57178 if( !sCheck.anRef ){
57179 *pnErr = 1;
57180 sqlite3BtreeLeave(p);
57181 return 0;
57183 for(i=0; i<=sCheck.nPage; i++){ sCheck.anRef[i] = 0; }
57184 i = PENDING_BYTE_PAGE(pBt);
57185 if( i<=sCheck.nPage ){
57186 sCheck.anRef[i] = 1;
57188 sqlite3StrAccumInit(&sCheck.errMsg, zErr, sizeof(zErr), 20000);
57189 sCheck.errMsg.useMalloc = 2;
57191 /* Check the integrity of the freelist
57193 checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]),
57194 get4byte(&pBt->pPage1->aData[36]), "Main freelist: ");
57196 /* Check all the tables.
57198 for(i=0; (int)i<nRoot && sCheck.mxErr; i++){
57199 if( aRoot[i]==0 ) continue;
57200 #ifndef SQLITE_OMIT_AUTOVACUUM
57201 if( pBt->autoVacuum && aRoot[i]>1 ){
57202 checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0, 0);
57204 #endif
57205 checkTreePage(&sCheck, aRoot[i], "List of tree roots: ", NULL, NULL);
57208 /* Make sure every page in the file is referenced
57210 for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
57211 #ifdef SQLITE_OMIT_AUTOVACUUM
57212 if( sCheck.anRef[i]==0 ){
57213 checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
57215 #else
57216 /* If the database supports auto-vacuum, make sure no tables contain
57217 ** references to pointer-map pages.
57219 if( sCheck.anRef[i]==0 &&
57220 (PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){
57221 checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
57223 if( sCheck.anRef[i]!=0 &&
57224 (PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
57225 checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i);
57227 #endif
57230 /* Make sure this analysis did not leave any unref() pages.
57231 ** This is an internal consistency check; an integrity check
57232 ** of the integrity check.
57234 if( NEVER(nRef != sqlite3PagerRefcount(pBt->pPager)) ){
57235 checkAppendMsg(&sCheck, 0,
57236 "Outstanding page count goes from %d to %d during this analysis",
57237 nRef, sqlite3PagerRefcount(pBt->pPager)
57241 /* Clean up and report errors.
57243 sqlite3BtreeLeave(p);
57244 sqlite3_free(sCheck.anRef);
57245 if( sCheck.mallocFailed ){
57246 sqlite3StrAccumReset(&sCheck.errMsg);
57247 *pnErr = sCheck.nErr+1;
57248 return 0;
57250 *pnErr = sCheck.nErr;
57251 if( sCheck.nErr==0 ) sqlite3StrAccumReset(&sCheck.errMsg);
57252 return sqlite3StrAccumFinish(&sCheck.errMsg);
57254 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
57257 ** Return the full pathname of the underlying database file.
57259 ** The pager filename is invariant as long as the pager is
57260 ** open so it is safe to access without the BtShared mutex.
57262 SQLITE_PRIVATE const char *sqlite3BtreeGetFilename(Btree *p){
57263 assert( p->pBt->pPager!=0 );
57264 return sqlite3PagerFilename(p->pBt->pPager);
57268 ** Return the pathname of the journal file for this database. The return
57269 ** value of this routine is the same regardless of whether the journal file
57270 ** has been created or not.
57272 ** The pager journal filename is invariant as long as the pager is
57273 ** open so it is safe to access without the BtShared mutex.
57275 SQLITE_PRIVATE const char *sqlite3BtreeGetJournalname(Btree *p){
57276 assert( p->pBt->pPager!=0 );
57277 return sqlite3PagerJournalname(p->pBt->pPager);
57281 ** Return non-zero if a transaction is active.
57283 SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree *p){
57284 assert( p==0 || sqlite3_mutex_held(p->db->mutex) );
57285 return (p && (p->inTrans==TRANS_WRITE));
57288 #ifndef SQLITE_OMIT_WAL
57290 ** Run a checkpoint on the Btree passed as the first argument.
57292 ** Return SQLITE_LOCKED if this or any other connection has an open
57293 ** transaction on the shared-cache the argument Btree is connected to.
57295 ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
57297 SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree *p, int eMode, int *pnLog, int *pnCkpt){
57298 int rc = SQLITE_OK;
57299 if( p ){
57300 BtShared *pBt = p->pBt;
57301 sqlite3BtreeEnter(p);
57302 if( pBt->inTransaction!=TRANS_NONE ){
57303 rc = SQLITE_LOCKED;
57304 }else{
57305 rc = sqlite3PagerCheckpoint(pBt->pPager, eMode, pnLog, pnCkpt);
57307 sqlite3BtreeLeave(p);
57309 return rc;
57311 #endif
57314 ** Return non-zero if a read (or write) transaction is active.
57316 SQLITE_PRIVATE int sqlite3BtreeIsInReadTrans(Btree *p){
57317 assert( p );
57318 assert( sqlite3_mutex_held(p->db->mutex) );
57319 return p->inTrans!=TRANS_NONE;
57322 SQLITE_PRIVATE int sqlite3BtreeIsInBackup(Btree *p){
57323 assert( p );
57324 assert( sqlite3_mutex_held(p->db->mutex) );
57325 return p->nBackup!=0;
57329 ** This function returns a pointer to a blob of memory associated with
57330 ** a single shared-btree. The memory is used by client code for its own
57331 ** purposes (for example, to store a high-level schema associated with
57332 ** the shared-btree). The btree layer manages reference counting issues.
57334 ** The first time this is called on a shared-btree, nBytes bytes of memory
57335 ** are allocated, zeroed, and returned to the caller. For each subsequent
57336 ** call the nBytes parameter is ignored and a pointer to the same blob
57337 ** of memory returned.
57339 ** If the nBytes parameter is 0 and the blob of memory has not yet been
57340 ** allocated, a null pointer is returned. If the blob has already been
57341 ** allocated, it is returned as normal.
57343 ** Just before the shared-btree is closed, the function passed as the
57344 ** xFree argument when the memory allocation was made is invoked on the
57345 ** blob of allocated memory. The xFree function should not call sqlite3_free()
57346 ** on the memory, the btree layer does that.
57348 SQLITE_PRIVATE void *sqlite3BtreeSchema(Btree *p, int nBytes, void(*xFree)(void *)){
57349 BtShared *pBt = p->pBt;
57350 sqlite3BtreeEnter(p);
57351 if( !pBt->pSchema && nBytes ){
57352 pBt->pSchema = sqlite3DbMallocZero(0, nBytes);
57353 pBt->xFreeSchema = xFree;
57355 sqlite3BtreeLeave(p);
57356 return pBt->pSchema;
57360 ** Return SQLITE_LOCKED_SHAREDCACHE if another user of the same shared
57361 ** btree as the argument handle holds an exclusive lock on the
57362 ** sqlite_master table. Otherwise SQLITE_OK.
57364 SQLITE_PRIVATE int sqlite3BtreeSchemaLocked(Btree *p){
57365 int rc;
57366 assert( sqlite3_mutex_held(p->db->mutex) );
57367 sqlite3BtreeEnter(p);
57368 rc = querySharedCacheTableLock(p, MASTER_ROOT, READ_LOCK);
57369 assert( rc==SQLITE_OK || rc==SQLITE_LOCKED_SHAREDCACHE );
57370 sqlite3BtreeLeave(p);
57371 return rc;
57375 #ifndef SQLITE_OMIT_SHARED_CACHE
57377 ** Obtain a lock on the table whose root page is iTab. The
57378 ** lock is a write lock if isWritelock is true or a read lock
57379 ** if it is false.
57381 SQLITE_PRIVATE int sqlite3BtreeLockTable(Btree *p, int iTab, u8 isWriteLock){
57382 int rc = SQLITE_OK;
57383 assert( p->inTrans!=TRANS_NONE );
57384 if( p->sharable ){
57385 u8 lockType = READ_LOCK + isWriteLock;
57386 assert( READ_LOCK+1==WRITE_LOCK );
57387 assert( isWriteLock==0 || isWriteLock==1 );
57389 sqlite3BtreeEnter(p);
57390 rc = querySharedCacheTableLock(p, iTab, lockType);
57391 if( rc==SQLITE_OK ){
57392 rc = setSharedCacheTableLock(p, iTab, lockType);
57394 sqlite3BtreeLeave(p);
57396 return rc;
57398 #endif
57400 #ifndef SQLITE_OMIT_INCRBLOB
57402 ** Argument pCsr must be a cursor opened for writing on an
57403 ** INTKEY table currently pointing at a valid table entry.
57404 ** This function modifies the data stored as part of that entry.
57406 ** Only the data content may only be modified, it is not possible to
57407 ** change the length of the data stored. If this function is called with
57408 ** parameters that attempt to write past the end of the existing data,
57409 ** no modifications are made and SQLITE_CORRUPT is returned.
57411 SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void *z){
57412 int rc;
57413 assert( cursorHoldsMutex(pCsr) );
57414 assert( sqlite3_mutex_held(pCsr->pBtree->db->mutex) );
57415 assert( pCsr->isIncrblobHandle );
57417 rc = restoreCursorPosition(pCsr);
57418 if( rc!=SQLITE_OK ){
57419 return rc;
57421 assert( pCsr->eState!=CURSOR_REQUIRESEEK );
57422 if( pCsr->eState!=CURSOR_VALID ){
57423 return SQLITE_ABORT;
57426 /* Check some assumptions:
57427 ** (a) the cursor is open for writing,
57428 ** (b) there is a read/write transaction open,
57429 ** (c) the connection holds a write-lock on the table (if required),
57430 ** (d) there are no conflicting read-locks, and
57431 ** (e) the cursor points at a valid row of an intKey table.
57433 if( !pCsr->wrFlag ){
57434 return SQLITE_READONLY;
57436 assert( (pCsr->pBt->btsFlags & BTS_READ_ONLY)==0
57437 && pCsr->pBt->inTransaction==TRANS_WRITE );
57438 assert( hasSharedCacheTableLock(pCsr->pBtree, pCsr->pgnoRoot, 0, 2) );
57439 assert( !hasReadConflicts(pCsr->pBtree, pCsr->pgnoRoot) );
57440 assert( pCsr->apPage[pCsr->iPage]->intKey );
57442 return accessPayload(pCsr, offset, amt, (unsigned char *)z, 1);
57446 ** Set a flag on this cursor to cache the locations of pages from the
57447 ** overflow list for the current row. This is used by cursors opened
57448 ** for incremental blob IO only.
57450 ** This function sets a flag only. The actual page location cache
57451 ** (stored in BtCursor.aOverflow[]) is allocated and used by function
57452 ** accessPayload() (the worker function for sqlite3BtreeData() and
57453 ** sqlite3BtreePutData()).
57455 SQLITE_PRIVATE void sqlite3BtreeCacheOverflow(BtCursor *pCur){
57456 assert( cursorHoldsMutex(pCur) );
57457 assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
57458 invalidateOverflowCache(pCur);
57459 pCur->isIncrblobHandle = 1;
57461 #endif
57464 ** Set both the "read version" (single byte at byte offset 18) and
57465 ** "write version" (single byte at byte offset 19) fields in the database
57466 ** header to iVersion.
57468 SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){
57469 BtShared *pBt = pBtree->pBt;
57470 int rc; /* Return code */
57472 assert( iVersion==1 || iVersion==2 );
57474 /* If setting the version fields to 1, do not automatically open the
57475 ** WAL connection, even if the version fields are currently set to 2.
57477 pBt->btsFlags &= ~BTS_NO_WAL;
57478 if( iVersion==1 ) pBt->btsFlags |= BTS_NO_WAL;
57480 rc = sqlite3BtreeBeginTrans(pBtree, 0);
57481 if( rc==SQLITE_OK ){
57482 u8 *aData = pBt->pPage1->aData;
57483 if( aData[18]!=(u8)iVersion || aData[19]!=(u8)iVersion ){
57484 rc = sqlite3BtreeBeginTrans(pBtree, 2);
57485 if( rc==SQLITE_OK ){
57486 rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
57487 if( rc==SQLITE_OK ){
57488 aData[18] = (u8)iVersion;
57489 aData[19] = (u8)iVersion;
57495 pBt->btsFlags &= ~BTS_NO_WAL;
57496 return rc;
57499 /************** End of btree.c ***********************************************/
57500 /************** Begin file backup.c ******************************************/
57502 ** 2009 January 28
57504 ** The author disclaims copyright to this source code. In place of
57505 ** a legal notice, here is a blessing:
57507 ** May you do good and not evil.
57508 ** May you find forgiveness for yourself and forgive others.
57509 ** May you share freely, never taking more than you give.
57511 *************************************************************************
57512 ** This file contains the implementation of the sqlite3_backup_XXX()
57513 ** API functions and the related features.
57516 /* Macro to find the minimum of two numeric values.
57518 #ifndef MIN
57519 # define MIN(x,y) ((x)<(y)?(x):(y))
57520 #endif
57523 ** Structure allocated for each backup operation.
57525 struct sqlite3_backup {
57526 sqlite3* pDestDb; /* Destination database handle */
57527 Btree *pDest; /* Destination b-tree file */
57528 u32 iDestSchema; /* Original schema cookie in destination */
57529 int bDestLocked; /* True once a write-transaction is open on pDest */
57531 Pgno iNext; /* Page number of the next source page to copy */
57532 sqlite3* pSrcDb; /* Source database handle */
57533 Btree *pSrc; /* Source b-tree file */
57535 int rc; /* Backup process error code */
57537 /* These two variables are set by every call to backup_step(). They are
57538 ** read by calls to backup_remaining() and backup_pagecount().
57540 Pgno nRemaining; /* Number of pages left to copy */
57541 Pgno nPagecount; /* Total number of pages to copy */
57543 int isAttached; /* True once backup has been registered with pager */
57544 sqlite3_backup *pNext; /* Next backup associated with source pager */
57548 ** THREAD SAFETY NOTES:
57550 ** Once it has been created using backup_init(), a single sqlite3_backup
57551 ** structure may be accessed via two groups of thread-safe entry points:
57553 ** * Via the sqlite3_backup_XXX() API function backup_step() and
57554 ** backup_finish(). Both these functions obtain the source database
57555 ** handle mutex and the mutex associated with the source BtShared
57556 ** structure, in that order.
57558 ** * Via the BackupUpdate() and BackupRestart() functions, which are
57559 ** invoked by the pager layer to report various state changes in
57560 ** the page cache associated with the source database. The mutex
57561 ** associated with the source database BtShared structure will always
57562 ** be held when either of these functions are invoked.
57564 ** The other sqlite3_backup_XXX() API functions, backup_remaining() and
57565 ** backup_pagecount() are not thread-safe functions. If they are called
57566 ** while some other thread is calling backup_step() or backup_finish(),
57567 ** the values returned may be invalid. There is no way for a call to
57568 ** BackupUpdate() or BackupRestart() to interfere with backup_remaining()
57569 ** or backup_pagecount().
57571 ** Depending on the SQLite configuration, the database handles and/or
57572 ** the Btree objects may have their own mutexes that require locking.
57573 ** Non-sharable Btrees (in-memory databases for example), do not have
57574 ** associated mutexes.
57578 ** Return a pointer corresponding to database zDb (i.e. "main", "temp")
57579 ** in connection handle pDb. If such a database cannot be found, return
57580 ** a NULL pointer and write an error message to pErrorDb.
57582 ** If the "temp" database is requested, it may need to be opened by this
57583 ** function. If an error occurs while doing so, return 0 and write an
57584 ** error message to pErrorDb.
57586 static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
57587 int i = sqlite3FindDbName(pDb, zDb);
57589 if( i==1 ){
57590 Parse *pParse;
57591 int rc = 0;
57592 pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse));
57593 if( pParse==0 ){
57594 sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory");
57595 rc = SQLITE_NOMEM;
57596 }else{
57597 pParse->db = pDb;
57598 if( sqlite3OpenTempDatabase(pParse) ){
57599 sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg);
57600 rc = SQLITE_ERROR;
57602 sqlite3DbFree(pErrorDb, pParse->zErrMsg);
57603 sqlite3StackFree(pErrorDb, pParse);
57605 if( rc ){
57606 return 0;
57610 if( i<0 ){
57611 sqlite3Error(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb);
57612 return 0;
57615 return pDb->aDb[i].pBt;
57619 ** Attempt to set the page size of the destination to match the page size
57620 ** of the source.
57622 static int setDestPgsz(sqlite3_backup *p){
57623 int rc;
57624 rc = sqlite3BtreeSetPageSize(p->pDest,sqlite3BtreeGetPageSize(p->pSrc),-1,0);
57625 return rc;
57629 ** Create an sqlite3_backup process to copy the contents of zSrcDb from
57630 ** connection handle pSrcDb to zDestDb in pDestDb. If successful, return
57631 ** a pointer to the new sqlite3_backup object.
57633 ** If an error occurs, NULL is returned and an error code and error message
57634 ** stored in database handle pDestDb.
57636 SQLITE_API sqlite3_backup *sqlite3_backup_init(
57637 sqlite3* pDestDb, /* Database to write to */
57638 const char *zDestDb, /* Name of database within pDestDb */
57639 sqlite3* pSrcDb, /* Database connection to read from */
57640 const char *zSrcDb /* Name of database within pSrcDb */
57642 sqlite3_backup *p; /* Value to return */
57644 /* Lock the source database handle. The destination database
57645 ** handle is not locked in this routine, but it is locked in
57646 ** sqlite3_backup_step(). The user is required to ensure that no
57647 ** other thread accesses the destination handle for the duration
57648 ** of the backup operation. Any attempt to use the destination
57649 ** database connection while a backup is in progress may cause
57650 ** a malfunction or a deadlock.
57652 sqlite3_mutex_enter(pSrcDb->mutex);
57653 sqlite3_mutex_enter(pDestDb->mutex);
57655 if( pSrcDb==pDestDb ){
57656 sqlite3Error(
57657 pDestDb, SQLITE_ERROR, "source and destination must be distinct"
57659 p = 0;
57660 }else {
57661 /* Allocate space for a new sqlite3_backup object...
57662 ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
57663 ** call to sqlite3_backup_init() and is destroyed by a call to
57664 ** sqlite3_backup_finish(). */
57665 p = (sqlite3_backup *)sqlite3_malloc(sizeof(sqlite3_backup));
57666 if( !p ){
57667 sqlite3Error(pDestDb, SQLITE_NOMEM, 0);
57671 /* If the allocation succeeded, populate the new object. */
57672 if( p ){
57673 memset(p, 0, sizeof(sqlite3_backup));
57674 p->pSrc = findBtree(pDestDb, pSrcDb, zSrcDb);
57675 p->pDest = findBtree(pDestDb, pDestDb, zDestDb);
57676 p->pDestDb = pDestDb;
57677 p->pSrcDb = pSrcDb;
57678 p->iNext = 1;
57679 p->isAttached = 0;
57681 if( 0==p->pSrc || 0==p->pDest || setDestPgsz(p)==SQLITE_NOMEM ){
57682 /* One (or both) of the named databases did not exist or an OOM
57683 ** error was hit. The error has already been written into the
57684 ** pDestDb handle. All that is left to do here is free the
57685 ** sqlite3_backup structure.
57687 sqlite3_free(p);
57688 p = 0;
57691 if( p ){
57692 p->pSrc->nBackup++;
57695 sqlite3_mutex_leave(pDestDb->mutex);
57696 sqlite3_mutex_leave(pSrcDb->mutex);
57697 return p;
57701 ** Argument rc is an SQLite error code. Return true if this error is
57702 ** considered fatal if encountered during a backup operation. All errors
57703 ** are considered fatal except for SQLITE_BUSY and SQLITE_LOCKED.
57705 static int isFatalError(int rc){
57706 return (rc!=SQLITE_OK && rc!=SQLITE_BUSY && ALWAYS(rc!=SQLITE_LOCKED));
57710 ** Parameter zSrcData points to a buffer containing the data for
57711 ** page iSrcPg from the source database. Copy this data into the
57712 ** destination database.
57714 static int backupOnePage(sqlite3_backup *p, Pgno iSrcPg, const u8 *zSrcData){
57715 Pager * const pDestPager = sqlite3BtreePager(p->pDest);
57716 const int nSrcPgsz = sqlite3BtreeGetPageSize(p->pSrc);
57717 int nDestPgsz = sqlite3BtreeGetPageSize(p->pDest);
57718 const int nCopy = MIN(nSrcPgsz, nDestPgsz);
57719 const i64 iEnd = (i64)iSrcPg*(i64)nSrcPgsz;
57720 #ifdef SQLITE_HAS_CODEC
57721 int nSrcReserve = sqlite3BtreeGetReserve(p->pSrc);
57722 int nDestReserve = sqlite3BtreeGetReserve(p->pDest);
57723 #endif
57725 int rc = SQLITE_OK;
57726 i64 iOff;
57728 assert( p->bDestLocked );
57729 assert( !isFatalError(p->rc) );
57730 assert( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) );
57731 assert( zSrcData );
57733 /* Catch the case where the destination is an in-memory database and the
57734 ** page sizes of the source and destination differ.
57736 if( nSrcPgsz!=nDestPgsz && sqlite3PagerIsMemdb(pDestPager) ){
57737 rc = SQLITE_READONLY;
57740 #ifdef SQLITE_HAS_CODEC
57741 /* Backup is not possible if the page size of the destination is changing
57742 ** and a codec is in use.
57744 if( nSrcPgsz!=nDestPgsz && sqlite3PagerGetCodec(pDestPager)!=0 ){
57745 rc = SQLITE_READONLY;
57748 /* Backup is not possible if the number of bytes of reserve space differ
57749 ** between source and destination. If there is a difference, try to
57750 ** fix the destination to agree with the source. If that is not possible,
57751 ** then the backup cannot proceed.
57753 if( nSrcReserve!=nDestReserve ){
57754 u32 newPgsz = nSrcPgsz;
57755 rc = sqlite3PagerSetPagesize(pDestPager, &newPgsz, nSrcReserve);
57756 if( rc==SQLITE_OK && newPgsz!=nSrcPgsz ) rc = SQLITE_READONLY;
57758 #endif
57760 /* This loop runs once for each destination page spanned by the source
57761 ** page. For each iteration, variable iOff is set to the byte offset
57762 ** of the destination page.
57764 for(iOff=iEnd-(i64)nSrcPgsz; rc==SQLITE_OK && iOff<iEnd; iOff+=nDestPgsz){
57765 DbPage *pDestPg = 0;
57766 Pgno iDest = (Pgno)(iOff/nDestPgsz)+1;
57767 if( iDest==PENDING_BYTE_PAGE(p->pDest->pBt) ) continue;
57768 if( SQLITE_OK==(rc = sqlite3PagerGet(pDestPager, iDest, &pDestPg))
57769 && SQLITE_OK==(rc = sqlite3PagerWrite(pDestPg))
57771 const u8 *zIn = &zSrcData[iOff%nSrcPgsz];
57772 u8 *zDestData = sqlite3PagerGetData(pDestPg);
57773 u8 *zOut = &zDestData[iOff%nDestPgsz];
57775 /* Copy the data from the source page into the destination page.
57776 ** Then clear the Btree layer MemPage.isInit flag. Both this module
57777 ** and the pager code use this trick (clearing the first byte
57778 ** of the page 'extra' space to invalidate the Btree layers
57779 ** cached parse of the page). MemPage.isInit is marked
57780 ** "MUST BE FIRST" for this purpose.
57782 memcpy(zOut, zIn, nCopy);
57783 ((u8 *)sqlite3PagerGetExtra(pDestPg))[0] = 0;
57785 sqlite3PagerUnref(pDestPg);
57788 return rc;
57792 ** If pFile is currently larger than iSize bytes, then truncate it to
57793 ** exactly iSize bytes. If pFile is not larger than iSize bytes, then
57794 ** this function is a no-op.
57796 ** Return SQLITE_OK if everything is successful, or an SQLite error
57797 ** code if an error occurs.
57799 static int backupTruncateFile(sqlite3_file *pFile, i64 iSize){
57800 i64 iCurrent;
57801 int rc = sqlite3OsFileSize(pFile, &iCurrent);
57802 if( rc==SQLITE_OK && iCurrent>iSize ){
57803 rc = sqlite3OsTruncate(pFile, iSize);
57805 return rc;
57809 ** Register this backup object with the associated source pager for
57810 ** callbacks when pages are changed or the cache invalidated.
57812 static void attachBackupObject(sqlite3_backup *p){
57813 sqlite3_backup **pp;
57814 assert( sqlite3BtreeHoldsMutex(p->pSrc) );
57815 pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
57816 p->pNext = *pp;
57817 *pp = p;
57818 p->isAttached = 1;
57822 ** Copy nPage pages from the source b-tree to the destination.
57824 SQLITE_API int sqlite3_backup_step(sqlite3_backup *p, int nPage){
57825 int rc;
57826 int destMode; /* Destination journal mode */
57827 int pgszSrc = 0; /* Source page size */
57828 int pgszDest = 0; /* Destination page size */
57830 sqlite3_mutex_enter(p->pSrcDb->mutex);
57831 sqlite3BtreeEnter(p->pSrc);
57832 if( p->pDestDb ){
57833 sqlite3_mutex_enter(p->pDestDb->mutex);
57836 rc = p->rc;
57837 if( !isFatalError(rc) ){
57838 Pager * const pSrcPager = sqlite3BtreePager(p->pSrc); /* Source pager */
57839 Pager * const pDestPager = sqlite3BtreePager(p->pDest); /* Dest pager */
57840 int ii; /* Iterator variable */
57841 int nSrcPage = -1; /* Size of source db in pages */
57842 int bCloseTrans = 0; /* True if src db requires unlocking */
57844 /* If the source pager is currently in a write-transaction, return
57845 ** SQLITE_BUSY immediately.
57847 if( p->pDestDb && p->pSrc->pBt->inTransaction==TRANS_WRITE ){
57848 rc = SQLITE_BUSY;
57849 }else{
57850 rc = SQLITE_OK;
57853 /* Lock the destination database, if it is not locked already. */
57854 if( SQLITE_OK==rc && p->bDestLocked==0
57855 && SQLITE_OK==(rc = sqlite3BtreeBeginTrans(p->pDest, 2))
57857 p->bDestLocked = 1;
57858 sqlite3BtreeGetMeta(p->pDest, BTREE_SCHEMA_VERSION, &p->iDestSchema);
57861 /* If there is no open read-transaction on the source database, open
57862 ** one now. If a transaction is opened here, then it will be closed
57863 ** before this function exits.
57865 if( rc==SQLITE_OK && 0==sqlite3BtreeIsInReadTrans(p->pSrc) ){
57866 rc = sqlite3BtreeBeginTrans(p->pSrc, 0);
57867 bCloseTrans = 1;
57870 /* Do not allow backup if the destination database is in WAL mode
57871 ** and the page sizes are different between source and destination */
57872 pgszSrc = sqlite3BtreeGetPageSize(p->pSrc);
57873 pgszDest = sqlite3BtreeGetPageSize(p->pDest);
57874 destMode = sqlite3PagerGetJournalMode(sqlite3BtreePager(p->pDest));
57875 if( SQLITE_OK==rc && destMode==PAGER_JOURNALMODE_WAL && pgszSrc!=pgszDest ){
57876 rc = SQLITE_READONLY;
57879 /* Now that there is a read-lock on the source database, query the
57880 ** source pager for the number of pages in the database.
57882 nSrcPage = (int)sqlite3BtreeLastPage(p->pSrc);
57883 assert( nSrcPage>=0 );
57884 for(ii=0; (nPage<0 || ii<nPage) && p->iNext<=(Pgno)nSrcPage && !rc; ii++){
57885 const Pgno iSrcPg = p->iNext; /* Source page number */
57886 if( iSrcPg!=PENDING_BYTE_PAGE(p->pSrc->pBt) ){
57887 DbPage *pSrcPg; /* Source page object */
57888 rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
57889 if( rc==SQLITE_OK ){
57890 rc = backupOnePage(p, iSrcPg, sqlite3PagerGetData(pSrcPg));
57891 sqlite3PagerUnref(pSrcPg);
57894 p->iNext++;
57896 if( rc==SQLITE_OK ){
57897 p->nPagecount = nSrcPage;
57898 p->nRemaining = nSrcPage+1-p->iNext;
57899 if( p->iNext>(Pgno)nSrcPage ){
57900 rc = SQLITE_DONE;
57901 }else if( !p->isAttached ){
57902 attachBackupObject(p);
57906 /* Update the schema version field in the destination database. This
57907 ** is to make sure that the schema-version really does change in
57908 ** the case where the source and destination databases have the
57909 ** same schema version.
57911 if( rc==SQLITE_DONE ){
57912 rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1);
57913 if( rc==SQLITE_OK ){
57914 if( p->pDestDb ){
57915 sqlite3ResetInternalSchema(p->pDestDb, -1);
57917 if( destMode==PAGER_JOURNALMODE_WAL ){
57918 rc = sqlite3BtreeSetVersion(p->pDest, 2);
57921 if( rc==SQLITE_OK ){
57922 int nDestTruncate;
57923 /* Set nDestTruncate to the final number of pages in the destination
57924 ** database. The complication here is that the destination page
57925 ** size may be different to the source page size.
57927 ** If the source page size is smaller than the destination page size,
57928 ** round up. In this case the call to sqlite3OsTruncate() below will
57929 ** fix the size of the file. However it is important to call
57930 ** sqlite3PagerTruncateImage() here so that any pages in the
57931 ** destination file that lie beyond the nDestTruncate page mark are
57932 ** journalled by PagerCommitPhaseOne() before they are destroyed
57933 ** by the file truncation.
57935 assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) );
57936 assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) );
57937 if( pgszSrc<pgszDest ){
57938 int ratio = pgszDest/pgszSrc;
57939 nDestTruncate = (nSrcPage+ratio-1)/ratio;
57940 if( nDestTruncate==(int)PENDING_BYTE_PAGE(p->pDest->pBt) ){
57941 nDestTruncate--;
57943 }else{
57944 nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
57946 sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
57948 if( pgszSrc<pgszDest ){
57949 /* If the source page-size is smaller than the destination page-size,
57950 ** two extra things may need to happen:
57952 ** * The destination may need to be truncated, and
57954 ** * Data stored on the pages immediately following the
57955 ** pending-byte page in the source database may need to be
57956 ** copied into the destination database.
57958 const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
57959 sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
57960 i64 iOff;
57961 i64 iEnd;
57963 assert( pFile );
57964 assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
57965 nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
57966 && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
57969 /* This call ensures that all data required to recreate the original
57970 ** database has been stored in the journal for pDestPager and the
57971 ** journal synced to disk. So at this point we may safely modify
57972 ** the database file in any way, knowing that if a power failure
57973 ** occurs, the original database will be reconstructed from the
57974 ** journal file. */
57975 rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
57977 /* Write the extra pages and truncate the database file as required */
57978 iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
57979 for(
57980 iOff=PENDING_BYTE+pgszSrc;
57981 rc==SQLITE_OK && iOff<iEnd;
57982 iOff+=pgszSrc
57984 PgHdr *pSrcPg = 0;
57985 const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
57986 rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
57987 if( rc==SQLITE_OK ){
57988 u8 *zData = sqlite3PagerGetData(pSrcPg);
57989 rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
57991 sqlite3PagerUnref(pSrcPg);
57993 if( rc==SQLITE_OK ){
57994 rc = backupTruncateFile(pFile, iSize);
57997 /* Sync the database file to disk. */
57998 if( rc==SQLITE_OK ){
57999 rc = sqlite3PagerSync(pDestPager);
58001 }else{
58002 rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
58005 /* Finish committing the transaction to the destination database. */
58006 if( SQLITE_OK==rc
58007 && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest, 0))
58009 rc = SQLITE_DONE;
58014 /* If bCloseTrans is true, then this function opened a read transaction
58015 ** on the source database. Close the read transaction here. There is
58016 ** no need to check the return values of the btree methods here, as
58017 ** "committing" a read-only transaction cannot fail.
58019 if( bCloseTrans ){
58020 TESTONLY( int rc2 );
58021 TESTONLY( rc2 = ) sqlite3BtreeCommitPhaseOne(p->pSrc, 0);
58022 TESTONLY( rc2 |= ) sqlite3BtreeCommitPhaseTwo(p->pSrc, 0);
58023 assert( rc2==SQLITE_OK );
58026 if( rc==SQLITE_IOERR_NOMEM ){
58027 rc = SQLITE_NOMEM;
58029 p->rc = rc;
58031 if( p->pDestDb ){
58032 sqlite3_mutex_leave(p->pDestDb->mutex);
58034 sqlite3BtreeLeave(p->pSrc);
58035 sqlite3_mutex_leave(p->pSrcDb->mutex);
58036 return rc;
58040 ** Release all resources associated with an sqlite3_backup* handle.
58042 SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){
58043 sqlite3_backup **pp; /* Ptr to head of pagers backup list */
58044 MUTEX_LOGIC( sqlite3_mutex *mutex; ) /* Mutex to protect source database */
58045 int rc; /* Value to return */
58047 /* Enter the mutexes */
58048 if( p==0 ) return SQLITE_OK;
58049 sqlite3_mutex_enter(p->pSrcDb->mutex);
58050 sqlite3BtreeEnter(p->pSrc);
58051 MUTEX_LOGIC( mutex = p->pSrcDb->mutex; )
58052 if( p->pDestDb ){
58053 sqlite3_mutex_enter(p->pDestDb->mutex);
58056 /* Detach this backup from the source pager. */
58057 if( p->pDestDb ){
58058 p->pSrc->nBackup--;
58060 if( p->isAttached ){
58061 pp = sqlite3PagerBackupPtr(sqlite3BtreePager(p->pSrc));
58062 while( *pp!=p ){
58063 pp = &(*pp)->pNext;
58065 *pp = p->pNext;
58068 /* If a transaction is still open on the Btree, roll it back. */
58069 sqlite3BtreeRollback(p->pDest);
58071 /* Set the error code of the destination database handle. */
58072 rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc;
58073 sqlite3Error(p->pDestDb, rc, 0);
58075 /* Exit the mutexes and free the backup context structure. */
58076 if( p->pDestDb ){
58077 sqlite3_mutex_leave(p->pDestDb->mutex);
58079 sqlite3BtreeLeave(p->pSrc);
58080 if( p->pDestDb ){
58081 /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
58082 ** call to sqlite3_backup_init() and is destroyed by a call to
58083 ** sqlite3_backup_finish(). */
58084 sqlite3_free(p);
58086 sqlite3_mutex_leave(mutex);
58087 return rc;
58091 ** Return the number of pages still to be backed up as of the most recent
58092 ** call to sqlite3_backup_step().
58094 SQLITE_API int sqlite3_backup_remaining(sqlite3_backup *p){
58095 return p->nRemaining;
58099 ** Return the total number of pages in the source database as of the most
58100 ** recent call to sqlite3_backup_step().
58102 SQLITE_API int sqlite3_backup_pagecount(sqlite3_backup *p){
58103 return p->nPagecount;
58107 ** This function is called after the contents of page iPage of the
58108 ** source database have been modified. If page iPage has already been
58109 ** copied into the destination database, then the data written to the
58110 ** destination is now invalidated. The destination copy of iPage needs
58111 ** to be updated with the new data before the backup operation is
58112 ** complete.
58114 ** It is assumed that the mutex associated with the BtShared object
58115 ** corresponding to the source database is held when this function is
58116 ** called.
58118 SQLITE_PRIVATE void sqlite3BackupUpdate(sqlite3_backup *pBackup, Pgno iPage, const u8 *aData){
58119 sqlite3_backup *p; /* Iterator variable */
58120 for(p=pBackup; p; p=p->pNext){
58121 assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
58122 if( !isFatalError(p->rc) && iPage<p->iNext ){
58123 /* The backup process p has already copied page iPage. But now it
58124 ** has been modified by a transaction on the source pager. Copy
58125 ** the new data into the backup.
58127 int rc;
58128 assert( p->pDestDb );
58129 sqlite3_mutex_enter(p->pDestDb->mutex);
58130 rc = backupOnePage(p, iPage, aData);
58131 sqlite3_mutex_leave(p->pDestDb->mutex);
58132 assert( rc!=SQLITE_BUSY && rc!=SQLITE_LOCKED );
58133 if( rc!=SQLITE_OK ){
58134 p->rc = rc;
58141 ** Restart the backup process. This is called when the pager layer
58142 ** detects that the database has been modified by an external database
58143 ** connection. In this case there is no way of knowing which of the
58144 ** pages that have been copied into the destination database are still
58145 ** valid and which are not, so the entire process needs to be restarted.
58147 ** It is assumed that the mutex associated with the BtShared object
58148 ** corresponding to the source database is held when this function is
58149 ** called.
58151 SQLITE_PRIVATE void sqlite3BackupRestart(sqlite3_backup *pBackup){
58152 sqlite3_backup *p; /* Iterator variable */
58153 for(p=pBackup; p; p=p->pNext){
58154 assert( sqlite3_mutex_held(p->pSrc->pBt->mutex) );
58155 p->iNext = 1;
58159 #ifndef SQLITE_OMIT_VACUUM
58161 ** Copy the complete content of pBtFrom into pBtTo. A transaction
58162 ** must be active for both files.
58164 ** The size of file pTo may be reduced by this operation. If anything
58165 ** goes wrong, the transaction on pTo is rolled back. If successful, the
58166 ** transaction is committed before returning.
58168 SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *pTo, Btree *pFrom){
58169 int rc;
58170 sqlite3_file *pFd; /* File descriptor for database pTo */
58171 sqlite3_backup b;
58172 sqlite3BtreeEnter(pTo);
58173 sqlite3BtreeEnter(pFrom);
58175 assert( sqlite3BtreeIsInTrans(pTo) );
58176 pFd = sqlite3PagerFile(sqlite3BtreePager(pTo));
58177 if( pFd->pMethods ){
58178 i64 nByte = sqlite3BtreeGetPageSize(pFrom)*(i64)sqlite3BtreeLastPage(pFrom);
58179 rc = sqlite3OsFileControl(pFd, SQLITE_FCNTL_OVERWRITE, &nByte);
58180 if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK;
58181 if( rc ) goto copy_finished;
58184 /* Set up an sqlite3_backup object. sqlite3_backup.pDestDb must be set
58185 ** to 0. This is used by the implementations of sqlite3_backup_step()
58186 ** and sqlite3_backup_finish() to detect that they are being called
58187 ** from this function, not directly by the user.
58189 memset(&b, 0, sizeof(b));
58190 b.pSrcDb = pFrom->db;
58191 b.pSrc = pFrom;
58192 b.pDest = pTo;
58193 b.iNext = 1;
58195 /* 0x7FFFFFFF is the hard limit for the number of pages in a database
58196 ** file. By passing this as the number of pages to copy to
58197 ** sqlite3_backup_step(), we can guarantee that the copy finishes
58198 ** within a single call (unless an error occurs). The assert() statement
58199 ** checks this assumption - (p->rc) should be set to either SQLITE_DONE
58200 ** or an error code.
58202 sqlite3_backup_step(&b, 0x7FFFFFFF);
58203 assert( b.rc!=SQLITE_OK );
58204 rc = sqlite3_backup_finish(&b);
58205 if( rc==SQLITE_OK ){
58206 pTo->pBt->btsFlags &= ~BTS_PAGESIZE_FIXED;
58207 }else{
58208 sqlite3PagerClearCache(sqlite3BtreePager(b.pDest));
58211 assert( sqlite3BtreeIsInTrans(pTo)==0 );
58212 copy_finished:
58213 sqlite3BtreeLeave(pFrom);
58214 sqlite3BtreeLeave(pTo);
58215 return rc;
58217 #endif /* SQLITE_OMIT_VACUUM */
58219 /************** End of backup.c **********************************************/
58220 /************** Begin file vdbemem.c *****************************************/
58222 ** 2004 May 26
58224 ** The author disclaims copyright to this source code. In place of
58225 ** a legal notice, here is a blessing:
58227 ** May you do good and not evil.
58228 ** May you find forgiveness for yourself and forgive others.
58229 ** May you share freely, never taking more than you give.
58231 *************************************************************************
58233 ** This file contains code use to manipulate "Mem" structure. A "Mem"
58234 ** stores a single value in the VDBE. Mem is an opaque structure visible
58235 ** only within the VDBE. Interface routines refer to a Mem using the
58236 ** name sqlite_value
58240 ** If pMem is an object with a valid string representation, this routine
58241 ** ensures the internal encoding for the string representation is
58242 ** 'desiredEnc', one of SQLITE_UTF8, SQLITE_UTF16LE or SQLITE_UTF16BE.
58244 ** If pMem is not a string object, or the encoding of the string
58245 ** representation is already stored using the requested encoding, then this
58246 ** routine is a no-op.
58248 ** SQLITE_OK is returned if the conversion is successful (or not required).
58249 ** SQLITE_NOMEM may be returned if a malloc() fails during conversion
58250 ** between formats.
58252 SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
58253 int rc;
58254 assert( (pMem->flags&MEM_RowSet)==0 );
58255 assert( desiredEnc==SQLITE_UTF8 || desiredEnc==SQLITE_UTF16LE
58256 || desiredEnc==SQLITE_UTF16BE );
58257 if( !(pMem->flags&MEM_Str) || pMem->enc==desiredEnc ){
58258 return SQLITE_OK;
58260 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58261 #ifdef SQLITE_OMIT_UTF16
58262 return SQLITE_ERROR;
58263 #else
58265 /* MemTranslate() may return SQLITE_OK or SQLITE_NOMEM. If NOMEM is returned,
58266 ** then the encoding of the value may not have changed.
58268 rc = sqlite3VdbeMemTranslate(pMem, (u8)desiredEnc);
58269 assert(rc==SQLITE_OK || rc==SQLITE_NOMEM);
58270 assert(rc==SQLITE_OK || pMem->enc!=desiredEnc);
58271 assert(rc==SQLITE_NOMEM || pMem->enc==desiredEnc);
58272 return rc;
58273 #endif
58277 ** Make sure pMem->z points to a writable allocation of at least
58278 ** n bytes.
58280 ** If the memory cell currently contains string or blob data
58281 ** and the third argument passed to this function is true, the
58282 ** current content of the cell is preserved. Otherwise, it may
58283 ** be discarded.
58285 ** This function sets the MEM_Dyn flag and clears any xDel callback.
58286 ** It also clears MEM_Ephem and MEM_Static. If the preserve flag is
58287 ** not set, Mem.n is zeroed.
58289 SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve){
58290 assert( 1 >=
58291 ((pMem->zMalloc && pMem->zMalloc==pMem->z) ? 1 : 0) +
58292 (((pMem->flags&MEM_Dyn)&&pMem->xDel) ? 1 : 0) +
58293 ((pMem->flags&MEM_Ephem) ? 1 : 0) +
58294 ((pMem->flags&MEM_Static) ? 1 : 0)
58296 assert( (pMem->flags&MEM_RowSet)==0 );
58298 if( n<32 ) n = 32;
58299 if( sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){
58300 if( preserve && pMem->z==pMem->zMalloc ){
58301 pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
58302 preserve = 0;
58303 }else{
58304 sqlite3DbFree(pMem->db, pMem->zMalloc);
58305 pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
58309 if( pMem->z && preserve && pMem->zMalloc && pMem->z!=pMem->zMalloc ){
58310 memcpy(pMem->zMalloc, pMem->z, pMem->n);
58312 if( pMem->flags&MEM_Dyn && pMem->xDel ){
58313 pMem->xDel((void *)(pMem->z));
58316 pMem->z = pMem->zMalloc;
58317 if( pMem->z==0 ){
58318 pMem->flags = MEM_Null;
58319 }else{
58320 pMem->flags &= ~(MEM_Ephem|MEM_Static);
58322 pMem->xDel = 0;
58323 return (pMem->z ? SQLITE_OK : SQLITE_NOMEM);
58327 ** Make the given Mem object MEM_Dyn. In other words, make it so
58328 ** that any TEXT or BLOB content is stored in memory obtained from
58329 ** malloc(). In this way, we know that the memory is safe to be
58330 ** overwritten or altered.
58332 ** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails.
58334 SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
58335 int f;
58336 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58337 assert( (pMem->flags&MEM_RowSet)==0 );
58338 ExpandBlob(pMem);
58339 f = pMem->flags;
58340 if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){
58341 if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
58342 return SQLITE_NOMEM;
58344 pMem->z[pMem->n] = 0;
58345 pMem->z[pMem->n+1] = 0;
58346 pMem->flags |= MEM_Term;
58347 #ifdef SQLITE_DEBUG
58348 pMem->pScopyFrom = 0;
58349 #endif
58352 return SQLITE_OK;
58356 ** If the given Mem* has a zero-filled tail, turn it into an ordinary
58357 ** blob stored in dynamically allocated space.
58359 #ifndef SQLITE_OMIT_INCRBLOB
58360 SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
58361 if( pMem->flags & MEM_Zero ){
58362 int nByte;
58363 assert( pMem->flags&MEM_Blob );
58364 assert( (pMem->flags&MEM_RowSet)==0 );
58365 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58367 /* Set nByte to the number of bytes required to store the expanded blob. */
58368 nByte = pMem->n + pMem->u.nZero;
58369 if( nByte<=0 ){
58370 nByte = 1;
58372 if( sqlite3VdbeMemGrow(pMem, nByte, 1) ){
58373 return SQLITE_NOMEM;
58376 memset(&pMem->z[pMem->n], 0, pMem->u.nZero);
58377 pMem->n += pMem->u.nZero;
58378 pMem->flags &= ~(MEM_Zero|MEM_Term);
58380 return SQLITE_OK;
58382 #endif
58386 ** Make sure the given Mem is \u0000 terminated.
58388 SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
58389 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58390 if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){
58391 return SQLITE_OK; /* Nothing to do */
58393 if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
58394 return SQLITE_NOMEM;
58396 pMem->z[pMem->n] = 0;
58397 pMem->z[pMem->n+1] = 0;
58398 pMem->flags |= MEM_Term;
58399 return SQLITE_OK;
58403 ** Add MEM_Str to the set of representations for the given Mem. Numbers
58404 ** are converted using sqlite3_snprintf(). Converting a BLOB to a string
58405 ** is a no-op.
58407 ** Existing representations MEM_Int and MEM_Real are *not* invalidated.
58409 ** A MEM_Null value will never be passed to this function. This function is
58410 ** used for converting values to text for returning to the user (i.e. via
58411 ** sqlite3_value_text()), or for ensuring that values to be used as btree
58412 ** keys are strings. In the former case a NULL pointer is returned the
58413 ** user and the later is an internal programming error.
58415 SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){
58416 int rc = SQLITE_OK;
58417 int fg = pMem->flags;
58418 const int nByte = 32;
58420 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58421 assert( !(fg&MEM_Zero) );
58422 assert( !(fg&(MEM_Str|MEM_Blob)) );
58423 assert( fg&(MEM_Int|MEM_Real) );
58424 assert( (pMem->flags&MEM_RowSet)==0 );
58425 assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58428 if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){
58429 return SQLITE_NOMEM;
58432 /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8
58433 ** string representation of the value. Then, if the required encoding
58434 ** is UTF-16le or UTF-16be do a translation.
58436 ** FIX ME: It would be better if sqlite3_snprintf() could do UTF-16.
58438 if( fg & MEM_Int ){
58439 sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
58440 }else{
58441 assert( fg & MEM_Real );
58442 sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r);
58444 pMem->n = sqlite3Strlen30(pMem->z);
58445 pMem->enc = SQLITE_UTF8;
58446 pMem->flags |= MEM_Str|MEM_Term;
58447 sqlite3VdbeChangeEncoding(pMem, enc);
58448 return rc;
58452 ** Memory cell pMem contains the context of an aggregate function.
58453 ** This routine calls the finalize method for that function. The
58454 ** result of the aggregate is stored back into pMem.
58456 ** Return SQLITE_ERROR if the finalizer reports an error. SQLITE_OK
58457 ** otherwise.
58459 SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
58460 int rc = SQLITE_OK;
58461 if( ALWAYS(pFunc && pFunc->xFinalize) ){
58462 sqlite3_context ctx;
58463 assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
58464 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58465 memset(&ctx, 0, sizeof(ctx));
58466 ctx.s.flags = MEM_Null;
58467 ctx.s.db = pMem->db;
58468 ctx.pMem = pMem;
58469 ctx.pFunc = pFunc;
58470 pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
58471 assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
58472 sqlite3DbFree(pMem->db, pMem->zMalloc);
58473 memcpy(pMem, &ctx.s, sizeof(ctx.s));
58474 rc = ctx.isError;
58476 return rc;
58480 ** If the memory cell contains a string value that must be freed by
58481 ** invoking an external callback, free it now. Calling this function
58482 ** does not free any Mem.zMalloc buffer.
58484 SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){
58485 assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
58486 if( p->flags&MEM_Agg ){
58487 sqlite3VdbeMemFinalize(p, p->u.pDef);
58488 assert( (p->flags & MEM_Agg)==0 );
58489 sqlite3VdbeMemRelease(p);
58490 }else if( p->flags&MEM_Dyn && p->xDel ){
58491 assert( (p->flags&MEM_RowSet)==0 );
58492 p->xDel((void *)p->z);
58493 p->xDel = 0;
58494 }else if( p->flags&MEM_RowSet ){
58495 sqlite3RowSetClear(p->u.pRowSet);
58496 }else if( p->flags&MEM_Frame ){
58497 sqlite3VdbeMemSetNull(p);
58502 ** Release any memory held by the Mem. This may leave the Mem in an
58503 ** inconsistent state, for example with (Mem.z==0) and
58504 ** (Mem.type==SQLITE_TEXT).
58506 SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
58507 VdbeMemRelease(p);
58508 sqlite3DbFree(p->db, p->zMalloc);
58509 p->z = 0;
58510 p->zMalloc = 0;
58511 p->xDel = 0;
58515 ** Convert a 64-bit IEEE double into a 64-bit signed integer.
58516 ** If the double is too large, return 0x8000000000000000.
58518 ** Most systems appear to do this simply by assigning
58519 ** variables and without the extra range tests. But
58520 ** there are reports that windows throws an expection
58521 ** if the floating point value is out of range. (See ticket #2880.)
58522 ** Because we do not completely understand the problem, we will
58523 ** take the conservative approach and always do range tests
58524 ** before attempting the conversion.
58526 static i64 doubleToInt64(double r){
58527 #ifdef SQLITE_OMIT_FLOATING_POINT
58528 /* When floating-point is omitted, double and int64 are the same thing */
58529 return r;
58530 #else
58532 ** Many compilers we encounter do not define constants for the
58533 ** minimum and maximum 64-bit integers, or they define them
58534 ** inconsistently. And many do not understand the "LL" notation.
58535 ** So we define our own static constants here using nothing
58536 ** larger than a 32-bit integer constant.
58538 static const i64 maxInt = LARGEST_INT64;
58539 static const i64 minInt = SMALLEST_INT64;
58541 if( r<(double)minInt ){
58542 return minInt;
58543 }else if( r>(double)maxInt ){
58544 /* minInt is correct here - not maxInt. It turns out that assigning
58545 ** a very large positive number to an integer results in a very large
58546 ** negative integer. This makes no sense, but it is what x86 hardware
58547 ** does so for compatibility we will do the same in software. */
58548 return minInt;
58549 }else{
58550 return (i64)r;
58552 #endif
58556 ** Return some kind of integer value which is the best we can do
58557 ** at representing the value that *pMem describes as an integer.
58558 ** If pMem is an integer, then the value is exact. If pMem is
58559 ** a floating-point then the value returned is the integer part.
58560 ** If pMem is a string or blob, then we make an attempt to convert
58561 ** it into a integer and return that. If pMem represents an
58562 ** an SQL-NULL value, return 0.
58564 ** If pMem represents a string value, its encoding might be changed.
58566 SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){
58567 int flags;
58568 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58569 assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58570 flags = pMem->flags;
58571 if( flags & MEM_Int ){
58572 return pMem->u.i;
58573 }else if( flags & MEM_Real ){
58574 return doubleToInt64(pMem->r);
58575 }else if( flags & (MEM_Str|MEM_Blob) ){
58576 i64 value = 0;
58577 assert( pMem->z || pMem->n==0 );
58578 testcase( pMem->z==0 );
58579 sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc);
58580 return value;
58581 }else{
58582 return 0;
58587 ** Return the best representation of pMem that we can get into a
58588 ** double. If pMem is already a double or an integer, return its
58589 ** value. If it is a string or blob, try to convert it to a double.
58590 ** If it is a NULL, return 0.0.
58592 SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
58593 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58594 assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58595 if( pMem->flags & MEM_Real ){
58596 return pMem->r;
58597 }else if( pMem->flags & MEM_Int ){
58598 return (double)pMem->u.i;
58599 }else if( pMem->flags & (MEM_Str|MEM_Blob) ){
58600 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
58601 double val = (double)0;
58602 sqlite3AtoF(pMem->z, &val, pMem->n, pMem->enc);
58603 return val;
58604 }else{
58605 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
58606 return (double)0;
58611 ** The MEM structure is already a MEM_Real. Try to also make it a
58612 ** MEM_Int if we can.
58614 SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
58615 assert( pMem->flags & MEM_Real );
58616 assert( (pMem->flags & MEM_RowSet)==0 );
58617 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58618 assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58620 pMem->u.i = doubleToInt64(pMem->r);
58622 /* Only mark the value as an integer if
58624 ** (1) the round-trip conversion real->int->real is a no-op, and
58625 ** (2) The integer is neither the largest nor the smallest
58626 ** possible integer (ticket #3922)
58628 ** The second and third terms in the following conditional enforces
58629 ** the second condition under the assumption that addition overflow causes
58630 ** values to wrap around. On x86 hardware, the third term is always
58631 ** true and could be omitted. But we leave it in because other
58632 ** architectures might behave differently.
58634 if( pMem->r==(double)pMem->u.i && pMem->u.i>SMALLEST_INT64
58635 && ALWAYS(pMem->u.i<LARGEST_INT64) ){
58636 pMem->flags |= MEM_Int;
58641 ** Convert pMem to type integer. Invalidate any prior representations.
58643 SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem *pMem){
58644 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58645 assert( (pMem->flags & MEM_RowSet)==0 );
58646 assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58648 pMem->u.i = sqlite3VdbeIntValue(pMem);
58649 MemSetTypeFlag(pMem, MEM_Int);
58650 return SQLITE_OK;
58654 ** Convert pMem so that it is of type MEM_Real.
58655 ** Invalidate any prior representations.
58657 SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
58658 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58659 assert( EIGHT_BYTE_ALIGNMENT(pMem) );
58661 pMem->r = sqlite3VdbeRealValue(pMem);
58662 MemSetTypeFlag(pMem, MEM_Real);
58663 return SQLITE_OK;
58667 ** Convert pMem so that it has types MEM_Real or MEM_Int or both.
58668 ** Invalidate any prior representations.
58670 ** Every effort is made to force the conversion, even if the input
58671 ** is a string that does not look completely like a number. Convert
58672 ** as much of the string as we can and ignore the rest.
58674 SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
58675 if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
58676 assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
58677 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58678 if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
58679 MemSetTypeFlag(pMem, MEM_Int);
58680 }else{
58681 pMem->r = sqlite3VdbeRealValue(pMem);
58682 MemSetTypeFlag(pMem, MEM_Real);
58683 sqlite3VdbeIntegerAffinity(pMem);
58686 assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
58687 pMem->flags &= ~(MEM_Str|MEM_Blob);
58688 return SQLITE_OK;
58692 ** Delete any previous value and set the value stored in *pMem to NULL.
58694 SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){
58695 if( pMem->flags & MEM_Frame ){
58696 VdbeFrame *pFrame = pMem->u.pFrame;
58697 pFrame->pParent = pFrame->v->pDelFrame;
58698 pFrame->v->pDelFrame = pFrame;
58700 if( pMem->flags & MEM_RowSet ){
58701 sqlite3RowSetClear(pMem->u.pRowSet);
58703 MemSetTypeFlag(pMem, MEM_Null);
58704 pMem->type = SQLITE_NULL;
58708 ** Delete any previous value and set the value to be a BLOB of length
58709 ** n containing all zeros.
58711 SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
58712 sqlite3VdbeMemRelease(pMem);
58713 pMem->flags = MEM_Blob|MEM_Zero;
58714 pMem->type = SQLITE_BLOB;
58715 pMem->n = 0;
58716 if( n<0 ) n = 0;
58717 pMem->u.nZero = n;
58718 pMem->enc = SQLITE_UTF8;
58720 #ifdef SQLITE_OMIT_INCRBLOB
58721 sqlite3VdbeMemGrow(pMem, n, 0);
58722 if( pMem->z ){
58723 pMem->n = n;
58724 memset(pMem->z, 0, n);
58726 #endif
58730 ** Delete any previous value and set the value stored in *pMem to val,
58731 ** manifest type INTEGER.
58733 SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
58734 sqlite3VdbeMemRelease(pMem);
58735 pMem->u.i = val;
58736 pMem->flags = MEM_Int;
58737 pMem->type = SQLITE_INTEGER;
58740 #ifndef SQLITE_OMIT_FLOATING_POINT
58742 ** Delete any previous value and set the value stored in *pMem to val,
58743 ** manifest type REAL.
58745 SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
58746 if( sqlite3IsNaN(val) ){
58747 sqlite3VdbeMemSetNull(pMem);
58748 }else{
58749 sqlite3VdbeMemRelease(pMem);
58750 pMem->r = val;
58751 pMem->flags = MEM_Real;
58752 pMem->type = SQLITE_FLOAT;
58755 #endif
58758 ** Delete any previous value and set the value of pMem to be an
58759 ** empty boolean index.
58761 SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){
58762 sqlite3 *db = pMem->db;
58763 assert( db!=0 );
58764 assert( (pMem->flags & MEM_RowSet)==0 );
58765 sqlite3VdbeMemRelease(pMem);
58766 pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
58767 if( db->mallocFailed ){
58768 pMem->flags = MEM_Null;
58769 }else{
58770 assert( pMem->zMalloc );
58771 pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc,
58772 sqlite3DbMallocSize(db, pMem->zMalloc));
58773 assert( pMem->u.pRowSet!=0 );
58774 pMem->flags = MEM_RowSet;
58779 ** Return true if the Mem object contains a TEXT or BLOB that is
58780 ** too large - whose size exceeds SQLITE_MAX_LENGTH.
58782 SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){
58783 assert( p->db!=0 );
58784 if( p->flags & (MEM_Str|MEM_Blob) ){
58785 int n = p->n;
58786 if( p->flags & MEM_Zero ){
58787 n += p->u.nZero;
58789 return n>p->db->aLimit[SQLITE_LIMIT_LENGTH];
58791 return 0;
58794 #ifdef SQLITE_DEBUG
58796 ** This routine prepares a memory cell for modication by breaking
58797 ** its link to a shallow copy and by marking any current shallow
58798 ** copies of this cell as invalid.
58800 ** This is used for testing and debugging only - to make sure shallow
58801 ** copies are not misused.
58803 SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
58804 int i;
58805 Mem *pX;
58806 for(i=1, pX=&pVdbe->aMem[1]; i<=pVdbe->nMem; i++, pX++){
58807 if( pX->pScopyFrom==pMem ){
58808 pX->flags |= MEM_Invalid;
58809 pX->pScopyFrom = 0;
58812 pMem->pScopyFrom = 0;
58814 #endif /* SQLITE_DEBUG */
58817 ** Size of struct Mem not including the Mem.zMalloc member.
58819 #define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc))
58822 ** Make an shallow copy of pFrom into pTo. Prior contents of
58823 ** pTo are freed. The pFrom->z field is not duplicated. If
58824 ** pFrom->z is used, then pTo->z points to the same thing as pFrom->z
58825 ** and flags gets srcType (either MEM_Ephem or MEM_Static).
58827 SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
58828 assert( (pFrom->flags & MEM_RowSet)==0 );
58829 VdbeMemRelease(pTo);
58830 memcpy(pTo, pFrom, MEMCELLSIZE);
58831 pTo->xDel = 0;
58832 if( (pFrom->flags&MEM_Static)==0 ){
58833 pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
58834 assert( srcType==MEM_Ephem || srcType==MEM_Static );
58835 pTo->flags |= srcType;
58840 ** Make a full copy of pFrom into pTo. Prior contents of pTo are
58841 ** freed before the copy is made.
58843 SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
58844 int rc = SQLITE_OK;
58846 assert( (pFrom->flags & MEM_RowSet)==0 );
58847 VdbeMemRelease(pTo);
58848 memcpy(pTo, pFrom, MEMCELLSIZE);
58849 pTo->flags &= ~MEM_Dyn;
58851 if( pTo->flags&(MEM_Str|MEM_Blob) ){
58852 if( 0==(pFrom->flags&MEM_Static) ){
58853 pTo->flags |= MEM_Ephem;
58854 rc = sqlite3VdbeMemMakeWriteable(pTo);
58858 return rc;
58862 ** Transfer the contents of pFrom to pTo. Any existing value in pTo is
58863 ** freed. If pFrom contains ephemeral data, a copy is made.
58865 ** pFrom contains an SQL NULL when this routine returns.
58867 SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
58868 assert( pFrom->db==0 || sqlite3_mutex_held(pFrom->db->mutex) );
58869 assert( pTo->db==0 || sqlite3_mutex_held(pTo->db->mutex) );
58870 assert( pFrom->db==0 || pTo->db==0 || pFrom->db==pTo->db );
58872 sqlite3VdbeMemRelease(pTo);
58873 memcpy(pTo, pFrom, sizeof(Mem));
58874 pFrom->flags = MEM_Null;
58875 pFrom->xDel = 0;
58876 pFrom->zMalloc = 0;
58880 ** Change the value of a Mem to be a string or a BLOB.
58882 ** The memory management strategy depends on the value of the xDel
58883 ** parameter. If the value passed is SQLITE_TRANSIENT, then the
58884 ** string is copied into a (possibly existing) buffer managed by the
58885 ** Mem structure. Otherwise, any existing buffer is freed and the
58886 ** pointer copied.
58888 ** If the string is too large (if it exceeds the SQLITE_LIMIT_LENGTH
58889 ** size limit) then no memory allocation occurs. If the string can be
58890 ** stored without allocating memory, then it is. If a memory allocation
58891 ** is required to store the string, then value of pMem is unchanged. In
58892 ** either case, SQLITE_TOOBIG is returned.
58894 SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
58895 Mem *pMem, /* Memory cell to set to string value */
58896 const char *z, /* String pointer */
58897 int n, /* Bytes in string, or negative */
58898 u8 enc, /* Encoding of z. 0 for BLOBs */
58899 void (*xDel)(void*) /* Destructor function */
58901 int nByte = n; /* New value for pMem->n */
58902 int iLimit; /* Maximum allowed string or blob size */
58903 u16 flags = 0; /* New value for pMem->flags */
58905 assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
58906 assert( (pMem->flags & MEM_RowSet)==0 );
58908 /* If z is a NULL pointer, set pMem to contain an SQL NULL. */
58909 if( !z ){
58910 sqlite3VdbeMemSetNull(pMem);
58911 return SQLITE_OK;
58914 if( pMem->db ){
58915 iLimit = pMem->db->aLimit[SQLITE_LIMIT_LENGTH];
58916 }else{
58917 iLimit = SQLITE_MAX_LENGTH;
58919 flags = (enc==0?MEM_Blob:MEM_Str);
58920 if( nByte<0 ){
58921 assert( enc!=0 );
58922 if( enc==SQLITE_UTF8 ){
58923 for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){}
58924 }else{
58925 for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
58927 flags |= MEM_Term;
58930 /* The following block sets the new values of Mem.z and Mem.xDel. It
58931 ** also sets a flag in local variable "flags" to indicate the memory
58932 ** management (one of MEM_Dyn or MEM_Static).
58934 if( xDel==SQLITE_TRANSIENT ){
58935 int nAlloc = nByte;
58936 if( flags&MEM_Term ){
58937 nAlloc += (enc==SQLITE_UTF8?1:2);
58939 if( nByte>iLimit ){
58940 return SQLITE_TOOBIG;
58942 if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){
58943 return SQLITE_NOMEM;
58945 memcpy(pMem->z, z, nAlloc);
58946 }else if( xDel==SQLITE_DYNAMIC ){
58947 sqlite3VdbeMemRelease(pMem);
58948 pMem->zMalloc = pMem->z = (char *)z;
58949 pMem->xDel = 0;
58950 }else{
58951 sqlite3VdbeMemRelease(pMem);
58952 pMem->z = (char *)z;
58953 pMem->xDel = xDel;
58954 flags |= ((xDel==SQLITE_STATIC)?MEM_Static:MEM_Dyn);
58957 pMem->n = nByte;
58958 pMem->flags = flags;
58959 pMem->enc = (enc==0 ? SQLITE_UTF8 : enc);
58960 pMem->type = (enc==0 ? SQLITE_BLOB : SQLITE_TEXT);
58962 #ifndef SQLITE_OMIT_UTF16
58963 if( pMem->enc!=SQLITE_UTF8 && sqlite3VdbeMemHandleBom(pMem) ){
58964 return SQLITE_NOMEM;
58966 #endif
58968 if( nByte>iLimit ){
58969 return SQLITE_TOOBIG;
58972 return SQLITE_OK;
58976 ** Compare the values contained by the two memory cells, returning
58977 ** negative, zero or positive if pMem1 is less than, equal to, or greater
58978 ** than pMem2. Sorting order is NULL's first, followed by numbers (integers
58979 ** and reals) sorted numerically, followed by text ordered by the collating
58980 ** sequence pColl and finally blob's ordered by memcmp().
58982 ** Two NULL values are considered equal by this function.
58984 SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
58985 int rc;
58986 int f1, f2;
58987 int combined_flags;
58989 f1 = pMem1->flags;
58990 f2 = pMem2->flags;
58991 combined_flags = f1|f2;
58992 assert( (combined_flags & MEM_RowSet)==0 );
58994 /* If one value is NULL, it is less than the other. If both values
58995 ** are NULL, return 0.
58997 if( combined_flags&MEM_Null ){
58998 return (f2&MEM_Null) - (f1&MEM_Null);
59001 /* If one value is a number and the other is not, the number is less.
59002 ** If both are numbers, compare as reals if one is a real, or as integers
59003 ** if both values are integers.
59005 if( combined_flags&(MEM_Int|MEM_Real) ){
59006 if( !(f1&(MEM_Int|MEM_Real)) ){
59007 return 1;
59009 if( !(f2&(MEM_Int|MEM_Real)) ){
59010 return -1;
59012 if( (f1 & f2 & MEM_Int)==0 ){
59013 double r1, r2;
59014 if( (f1&MEM_Real)==0 ){
59015 r1 = (double)pMem1->u.i;
59016 }else{
59017 r1 = pMem1->r;
59019 if( (f2&MEM_Real)==0 ){
59020 r2 = (double)pMem2->u.i;
59021 }else{
59022 r2 = pMem2->r;
59024 if( r1<r2 ) return -1;
59025 if( r1>r2 ) return 1;
59026 return 0;
59027 }else{
59028 assert( f1&MEM_Int );
59029 assert( f2&MEM_Int );
59030 if( pMem1->u.i < pMem2->u.i ) return -1;
59031 if( pMem1->u.i > pMem2->u.i ) return 1;
59032 return 0;
59036 /* If one value is a string and the other is a blob, the string is less.
59037 ** If both are strings, compare using the collating functions.
59039 if( combined_flags&MEM_Str ){
59040 if( (f1 & MEM_Str)==0 ){
59041 return 1;
59043 if( (f2 & MEM_Str)==0 ){
59044 return -1;
59047 assert( pMem1->enc==pMem2->enc );
59048 assert( pMem1->enc==SQLITE_UTF8 ||
59049 pMem1->enc==SQLITE_UTF16LE || pMem1->enc==SQLITE_UTF16BE );
59051 /* The collation sequence must be defined at this point, even if
59052 ** the user deletes the collation sequence after the vdbe program is
59053 ** compiled (this was not always the case).
59055 assert( !pColl || pColl->xCmp );
59057 if( pColl ){
59058 if( pMem1->enc==pColl->enc ){
59059 /* The strings are already in the correct encoding. Call the
59060 ** comparison function directly */
59061 return pColl->xCmp(pColl->pUser,pMem1->n,pMem1->z,pMem2->n,pMem2->z);
59062 }else{
59063 const void *v1, *v2;
59064 int n1, n2;
59065 Mem c1;
59066 Mem c2;
59067 memset(&c1, 0, sizeof(c1));
59068 memset(&c2, 0, sizeof(c2));
59069 sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem);
59070 sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem);
59071 v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc);
59072 n1 = v1==0 ? 0 : c1.n;
59073 v2 = sqlite3ValueText((sqlite3_value*)&c2, pColl->enc);
59074 n2 = v2==0 ? 0 : c2.n;
59075 rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2);
59076 sqlite3VdbeMemRelease(&c1);
59077 sqlite3VdbeMemRelease(&c2);
59078 return rc;
59081 /* If a NULL pointer was passed as the collate function, fall through
59082 ** to the blob case and use memcmp(). */
59085 /* Both values must be blobs. Compare using memcmp(). */
59086 rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n);
59087 if( rc==0 ){
59088 rc = pMem1->n - pMem2->n;
59090 return rc;
59094 ** Move data out of a btree key or data field and into a Mem structure.
59095 ** The data or key is taken from the entry that pCur is currently pointing
59096 ** to. offset and amt determine what portion of the data or key to retrieve.
59097 ** key is true to get the key or false to get data. The result is written
59098 ** into the pMem element.
59100 ** The pMem structure is assumed to be uninitialized. Any prior content
59101 ** is overwritten without being freed.
59103 ** If this routine fails for any reason (malloc returns NULL or unable
59104 ** to read from the disk) then the pMem is left in an inconsistent state.
59106 SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
59107 BtCursor *pCur, /* Cursor pointing at record to retrieve. */
59108 int offset, /* Offset from the start of data to return bytes from. */
59109 int amt, /* Number of bytes to return. */
59110 int key, /* If true, retrieve from the btree key, not data. */
59111 Mem *pMem /* OUT: Return data in this Mem structure. */
59113 char *zData; /* Data from the btree layer */
59114 int available = 0; /* Number of bytes available on the local btree page */
59115 int rc = SQLITE_OK; /* Return code */
59117 assert( sqlite3BtreeCursorIsValid(pCur) );
59119 /* Note: the calls to BtreeKeyFetch() and DataFetch() below assert()
59120 ** that both the BtShared and database handle mutexes are held. */
59121 assert( (pMem->flags & MEM_RowSet)==0 );
59122 if( key ){
59123 zData = (char *)sqlite3BtreeKeyFetch(pCur, &available);
59124 }else{
59125 zData = (char *)sqlite3BtreeDataFetch(pCur, &available);
59127 assert( zData!=0 );
59129 if( offset+amt<=available && (pMem->flags&MEM_Dyn)==0 ){
59130 sqlite3VdbeMemRelease(pMem);
59131 pMem->z = &zData[offset];
59132 pMem->flags = MEM_Blob|MEM_Ephem;
59133 }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){
59134 pMem->flags = MEM_Blob|MEM_Dyn|MEM_Term;
59135 pMem->enc = 0;
59136 pMem->type = SQLITE_BLOB;
59137 if( key ){
59138 rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z);
59139 }else{
59140 rc = sqlite3BtreeData(pCur, offset, amt, pMem->z);
59142 pMem->z[amt] = 0;
59143 pMem->z[amt+1] = 0;
59144 if( rc!=SQLITE_OK ){
59145 sqlite3VdbeMemRelease(pMem);
59148 pMem->n = amt;
59150 return rc;
59153 /* This function is only available internally, it is not part of the
59154 ** external API. It works in a similar way to sqlite3_value_text(),
59155 ** except the data returned is in the encoding specified by the second
59156 ** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
59157 ** SQLITE_UTF8.
59159 ** (2006-02-16:) The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
59160 ** If that is the case, then the result must be aligned on an even byte
59161 ** boundary.
59163 SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
59164 if( !pVal ) return 0;
59166 assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
59167 assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
59168 assert( (pVal->flags & MEM_RowSet)==0 );
59170 if( pVal->flags&MEM_Null ){
59171 return 0;
59173 assert( (MEM_Blob>>3) == MEM_Str );
59174 pVal->flags |= (pVal->flags & MEM_Blob)>>3;
59175 ExpandBlob(pVal);
59176 if( pVal->flags&MEM_Str ){
59177 sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
59178 if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){
59179 assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
59180 if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
59181 return 0;
59184 sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-31275-44060 */
59185 }else{
59186 assert( (pVal->flags&MEM_Blob)==0 );
59187 sqlite3VdbeMemStringify(pVal, enc);
59188 assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
59190 assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
59191 || pVal->db->mallocFailed );
59192 if( pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) ){
59193 return pVal->z;
59194 }else{
59195 return 0;
59200 ** Create a new sqlite3_value object.
59202 SQLITE_PRIVATE sqlite3_value *sqlite3ValueNew(sqlite3 *db){
59203 Mem *p = sqlite3DbMallocZero(db, sizeof(*p));
59204 if( p ){
59205 p->flags = MEM_Null;
59206 p->type = SQLITE_NULL;
59207 p->db = db;
59209 return p;
59213 ** Create a new sqlite3_value object, containing the value of pExpr.
59215 ** This only works for very simple expressions that consist of one constant
59216 ** token (i.e. "5", "5.1", "'a string'"). If the expression can
59217 ** be converted directly into a value, then the value is allocated and
59218 ** a pointer written to *ppVal. The caller is responsible for deallocating
59219 ** the value by passing it to sqlite3ValueFree() later on. If the expression
59220 ** cannot be converted to a value, then *ppVal is set to NULL.
59222 SQLITE_PRIVATE int sqlite3ValueFromExpr(
59223 sqlite3 *db, /* The database connection */
59224 Expr *pExpr, /* The expression to evaluate */
59225 u8 enc, /* Encoding to use */
59226 u8 affinity, /* Affinity to use */
59227 sqlite3_value **ppVal /* Write the new value here */
59229 int op;
59230 char *zVal = 0;
59231 sqlite3_value *pVal = 0;
59232 int negInt = 1;
59233 const char *zNeg = "";
59235 if( !pExpr ){
59236 *ppVal = 0;
59237 return SQLITE_OK;
59239 op = pExpr->op;
59241 /* op can only be TK_REGISTER if we have compiled with SQLITE_ENABLE_STAT3.
59242 ** The ifdef here is to enable us to achieve 100% branch test coverage even
59243 ** when SQLITE_ENABLE_STAT3 is omitted.
59245 #ifdef SQLITE_ENABLE_STAT3
59246 if( op==TK_REGISTER ) op = pExpr->op2;
59247 #else
59248 if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
59249 #endif
59251 /* Handle negative integers in a single step. This is needed in the
59252 ** case when the value is -9223372036854775808.
59254 if( op==TK_UMINUS
59255 && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
59256 pExpr = pExpr->pLeft;
59257 op = pExpr->op;
59258 negInt = -1;
59259 zNeg = "-";
59262 if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
59263 pVal = sqlite3ValueNew(db);
59264 if( pVal==0 ) goto no_mem;
59265 if( ExprHasProperty(pExpr, EP_IntValue) ){
59266 sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
59267 }else{
59268 zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
59269 if( zVal==0 ) goto no_mem;
59270 sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
59271 if( op==TK_FLOAT ) pVal->type = SQLITE_FLOAT;
59273 if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
59274 sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
59275 }else{
59276 sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
59278 if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str;
59279 if( enc!=SQLITE_UTF8 ){
59280 sqlite3VdbeChangeEncoding(pVal, enc);
59282 }else if( op==TK_UMINUS ) {
59283 /* This branch happens for multiple negative signs. Ex: -(-5) */
59284 if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){
59285 sqlite3VdbeMemNumerify(pVal);
59286 if( pVal->u.i==SMALLEST_INT64 ){
59287 pVal->flags &= MEM_Int;
59288 pVal->flags |= MEM_Real;
59289 pVal->r = (double)LARGEST_INT64;
59290 }else{
59291 pVal->u.i = -pVal->u.i;
59293 pVal->r = -pVal->r;
59294 sqlite3ValueApplyAffinity(pVal, affinity, enc);
59296 }else if( op==TK_NULL ){
59297 pVal = sqlite3ValueNew(db);
59298 if( pVal==0 ) goto no_mem;
59300 #ifndef SQLITE_OMIT_BLOB_LITERAL
59301 else if( op==TK_BLOB ){
59302 int nVal;
59303 assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
59304 assert( pExpr->u.zToken[1]=='\'' );
59305 pVal = sqlite3ValueNew(db);
59306 if( !pVal ) goto no_mem;
59307 zVal = &pExpr->u.zToken[2];
59308 nVal = sqlite3Strlen30(zVal)-1;
59309 assert( zVal[nVal]=='\'' );
59310 sqlite3VdbeMemSetStr(pVal, sqlite3HexToBlob(db, zVal, nVal), nVal/2,
59311 0, SQLITE_DYNAMIC);
59313 #endif
59315 if( pVal ){
59316 sqlite3VdbeMemStoreType(pVal);
59318 *ppVal = pVal;
59319 return SQLITE_OK;
59321 no_mem:
59322 db->mallocFailed = 1;
59323 sqlite3DbFree(db, zVal);
59324 sqlite3ValueFree(pVal);
59325 *ppVal = 0;
59326 return SQLITE_NOMEM;
59330 ** Change the string value of an sqlite3_value object
59332 SQLITE_PRIVATE void sqlite3ValueSetStr(
59333 sqlite3_value *v, /* Value to be set */
59334 int n, /* Length of string z */
59335 const void *z, /* Text of the new string */
59336 u8 enc, /* Encoding to use */
59337 void (*xDel)(void*) /* Destructor for the string */
59339 if( v ) sqlite3VdbeMemSetStr((Mem *)v, z, n, enc, xDel);
59343 ** Free an sqlite3_value object
59345 SQLITE_PRIVATE void sqlite3ValueFree(sqlite3_value *v){
59346 if( !v ) return;
59347 sqlite3VdbeMemRelease((Mem *)v);
59348 sqlite3DbFree(((Mem*)v)->db, v);
59352 ** Return the number of bytes in the sqlite3_value object assuming
59353 ** that it uses the encoding "enc"
59355 SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
59356 Mem *p = (Mem*)pVal;
59357 if( (p->flags & MEM_Blob)!=0 || sqlite3ValueText(pVal, enc) ){
59358 if( p->flags & MEM_Zero ){
59359 return p->n + p->u.nZero;
59360 }else{
59361 return p->n;
59364 return 0;
59367 /************** End of vdbemem.c *********************************************/
59368 /************** Begin file vdbeaux.c *****************************************/
59370 ** 2003 September 6
59372 ** The author disclaims copyright to this source code. In place of
59373 ** a legal notice, here is a blessing:
59375 ** May you do good and not evil.
59376 ** May you find forgiveness for yourself and forgive others.
59377 ** May you share freely, never taking more than you give.
59379 *************************************************************************
59380 ** This file contains code used for creating, destroying, and populating
59381 ** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) Prior
59382 ** to version 2.8.7, all this code was combined into the vdbe.c source file.
59383 ** But that file was getting too big so this subroutines were split out.
59389 ** When debugging the code generator in a symbolic debugger, one can
59390 ** set the sqlite3VdbeAddopTrace to 1 and all opcodes will be printed
59391 ** as they are added to the instruction stream.
59393 #ifdef SQLITE_DEBUG
59394 SQLITE_PRIVATE int sqlite3VdbeAddopTrace = 0;
59395 #endif
59399 ** Create a new virtual database engine.
59401 SQLITE_PRIVATE Vdbe *sqlite3VdbeCreate(sqlite3 *db){
59402 Vdbe *p;
59403 p = sqlite3DbMallocZero(db, sizeof(Vdbe) );
59404 if( p==0 ) return 0;
59405 p->db = db;
59406 if( db->pVdbe ){
59407 db->pVdbe->pPrev = p;
59409 p->pNext = db->pVdbe;
59410 p->pPrev = 0;
59411 db->pVdbe = p;
59412 p->magic = VDBE_MAGIC_INIT;
59413 return p;
59417 ** Remember the SQL string for a prepared statement.
59419 SQLITE_PRIVATE void sqlite3VdbeSetSql(Vdbe *p, const char *z, int n, int isPrepareV2){
59420 assert( isPrepareV2==1 || isPrepareV2==0 );
59421 if( p==0 ) return;
59422 #ifdef SQLITE_OMIT_TRACE
59423 if( !isPrepareV2 ) return;
59424 #endif
59425 assert( p->zSql==0 );
59426 p->zSql = sqlite3DbStrNDup(p->db, z, n);
59427 p->isPrepareV2 = (u8)isPrepareV2;
59431 ** Return the SQL associated with a prepared statement
59433 SQLITE_API const char *sqlite3_sql(sqlite3_stmt *pStmt){
59434 Vdbe *p = (Vdbe *)pStmt;
59435 return (p && p->isPrepareV2) ? p->zSql : 0;
59439 ** Swap all content between two VDBE structures.
59441 SQLITE_PRIVATE void sqlite3VdbeSwap(Vdbe *pA, Vdbe *pB){
59442 Vdbe tmp, *pTmp;
59443 char *zTmp;
59444 tmp = *pA;
59445 *pA = *pB;
59446 *pB = tmp;
59447 pTmp = pA->pNext;
59448 pA->pNext = pB->pNext;
59449 pB->pNext = pTmp;
59450 pTmp = pA->pPrev;
59451 pA->pPrev = pB->pPrev;
59452 pB->pPrev = pTmp;
59453 zTmp = pA->zSql;
59454 pA->zSql = pB->zSql;
59455 pB->zSql = zTmp;
59456 pB->isPrepareV2 = pA->isPrepareV2;
59459 #ifdef SQLITE_DEBUG
59461 ** Turn tracing on or off
59463 SQLITE_PRIVATE void sqlite3VdbeTrace(Vdbe *p, FILE *trace){
59464 p->trace = trace;
59466 #endif
59469 ** Resize the Vdbe.aOp array so that it is at least one op larger than
59470 ** it was.
59472 ** If an out-of-memory error occurs while resizing the array, return
59473 ** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain
59474 ** unchanged (this is so that any opcodes already allocated can be
59475 ** correctly deallocated along with the rest of the Vdbe).
59477 static int growOpArray(Vdbe *p){
59478 VdbeOp *pNew;
59479 int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
59480 pNew = sqlite3DbRealloc(p->db, p->aOp, nNew*sizeof(Op));
59481 if( pNew ){
59482 p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op);
59483 p->aOp = pNew;
59485 return (pNew ? SQLITE_OK : SQLITE_NOMEM);
59489 ** Add a new instruction to the list of instructions current in the
59490 ** VDBE. Return the address of the new instruction.
59492 ** Parameters:
59494 ** p Pointer to the VDBE
59496 ** op The opcode for this instruction
59498 ** p1, p2, p3 Operands
59500 ** Use the sqlite3VdbeResolveLabel() function to fix an address and
59501 ** the sqlite3VdbeChangeP4() function to change the value of the P4
59502 ** operand.
59504 SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe *p, int op, int p1, int p2, int p3){
59505 int i;
59506 VdbeOp *pOp;
59508 i = p->nOp;
59509 assert( p->magic==VDBE_MAGIC_INIT );
59510 assert( op>0 && op<0xff );
59511 if( p->nOpAlloc<=i ){
59512 if( growOpArray(p) ){
59513 return 1;
59516 p->nOp++;
59517 pOp = &p->aOp[i];
59518 pOp->opcode = (u8)op;
59519 pOp->p5 = 0;
59520 pOp->p1 = p1;
59521 pOp->p2 = p2;
59522 pOp->p3 = p3;
59523 pOp->p4.p = 0;
59524 pOp->p4type = P4_NOTUSED;
59525 #ifdef SQLITE_DEBUG
59526 pOp->zComment = 0;
59527 if( sqlite3VdbeAddopTrace ) sqlite3VdbePrintOp(0, i, &p->aOp[i]);
59528 #endif
59529 #ifdef VDBE_PROFILE
59530 pOp->cycles = 0;
59531 pOp->cnt = 0;
59532 #endif
59533 return i;
59535 SQLITE_PRIVATE int sqlite3VdbeAddOp0(Vdbe *p, int op){
59536 return sqlite3VdbeAddOp3(p, op, 0, 0, 0);
59538 SQLITE_PRIVATE int sqlite3VdbeAddOp1(Vdbe *p, int op, int p1){
59539 return sqlite3VdbeAddOp3(p, op, p1, 0, 0);
59541 SQLITE_PRIVATE int sqlite3VdbeAddOp2(Vdbe *p, int op, int p1, int p2){
59542 return sqlite3VdbeAddOp3(p, op, p1, p2, 0);
59547 ** Add an opcode that includes the p4 value as a pointer.
59549 SQLITE_PRIVATE int sqlite3VdbeAddOp4(
59550 Vdbe *p, /* Add the opcode to this VM */
59551 int op, /* The new opcode */
59552 int p1, /* The P1 operand */
59553 int p2, /* The P2 operand */
59554 int p3, /* The P3 operand */
59555 const char *zP4, /* The P4 operand */
59556 int p4type /* P4 operand type */
59558 int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
59559 sqlite3VdbeChangeP4(p, addr, zP4, p4type);
59560 return addr;
59564 ** Add an OP_ParseSchema opcode. This routine is broken out from
59565 ** sqlite3VdbeAddOp4() since it needs to also needs to mark all btrees
59566 ** as having been used.
59568 ** The zWhere string must have been obtained from sqlite3_malloc().
59569 ** This routine will take ownership of the allocated memory.
59571 SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe *p, int iDb, char *zWhere){
59572 int j;
59573 int addr = sqlite3VdbeAddOp3(p, OP_ParseSchema, iDb, 0, 0);
59574 sqlite3VdbeChangeP4(p, addr, zWhere, P4_DYNAMIC);
59575 for(j=0; j<p->db->nDb; j++) sqlite3VdbeUsesBtree(p, j);
59579 ** Add an opcode that includes the p4 value as an integer.
59581 SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(
59582 Vdbe *p, /* Add the opcode to this VM */
59583 int op, /* The new opcode */
59584 int p1, /* The P1 operand */
59585 int p2, /* The P2 operand */
59586 int p3, /* The P3 operand */
59587 int p4 /* The P4 operand as an integer */
59589 int addr = sqlite3VdbeAddOp3(p, op, p1, p2, p3);
59590 sqlite3VdbeChangeP4(p, addr, SQLITE_INT_TO_PTR(p4), P4_INT32);
59591 return addr;
59595 ** Create a new symbolic label for an instruction that has yet to be
59596 ** coded. The symbolic label is really just a negative number. The
59597 ** label can be used as the P2 value of an operation. Later, when
59598 ** the label is resolved to a specific address, the VDBE will scan
59599 ** through its operation list and change all values of P2 which match
59600 ** the label into the resolved address.
59602 ** The VDBE knows that a P2 value is a label because labels are
59603 ** always negative and P2 values are suppose to be non-negative.
59604 ** Hence, a negative P2 value is a label that has yet to be resolved.
59606 ** Zero is returned if a malloc() fails.
59608 SQLITE_PRIVATE int sqlite3VdbeMakeLabel(Vdbe *p){
59609 int i;
59610 i = p->nLabel++;
59611 assert( p->magic==VDBE_MAGIC_INIT );
59612 if( i>=p->nLabelAlloc ){
59613 int n = p->nLabelAlloc*2 + 5;
59614 p->aLabel = sqlite3DbReallocOrFree(p->db, p->aLabel,
59615 n*sizeof(p->aLabel[0]));
59616 p->nLabelAlloc = sqlite3DbMallocSize(p->db, p->aLabel)/sizeof(p->aLabel[0]);
59618 if( p->aLabel ){
59619 p->aLabel[i] = -1;
59621 return -1-i;
59625 ** Resolve label "x" to be the address of the next instruction to
59626 ** be inserted. The parameter "x" must have been obtained from
59627 ** a prior call to sqlite3VdbeMakeLabel().
59629 SQLITE_PRIVATE void sqlite3VdbeResolveLabel(Vdbe *p, int x){
59630 int j = -1-x;
59631 assert( p->magic==VDBE_MAGIC_INIT );
59632 assert( j>=0 && j<p->nLabel );
59633 if( p->aLabel ){
59634 p->aLabel[j] = p->nOp;
59639 ** Mark the VDBE as one that can only be run one time.
59641 SQLITE_PRIVATE void sqlite3VdbeRunOnlyOnce(Vdbe *p){
59642 p->runOnlyOnce = 1;
59645 #ifdef SQLITE_DEBUG /* sqlite3AssertMayAbort() logic */
59648 ** The following type and function are used to iterate through all opcodes
59649 ** in a Vdbe main program and each of the sub-programs (triggers) it may
59650 ** invoke directly or indirectly. It should be used as follows:
59652 ** Op *pOp;
59653 ** VdbeOpIter sIter;
59655 ** memset(&sIter, 0, sizeof(sIter));
59656 ** sIter.v = v; // v is of type Vdbe*
59657 ** while( (pOp = opIterNext(&sIter)) ){
59658 ** // Do something with pOp
59659 ** }
59660 ** sqlite3DbFree(v->db, sIter.apSub);
59663 typedef struct VdbeOpIter VdbeOpIter;
59664 struct VdbeOpIter {
59665 Vdbe *v; /* Vdbe to iterate through the opcodes of */
59666 SubProgram **apSub; /* Array of subprograms */
59667 int nSub; /* Number of entries in apSub */
59668 int iAddr; /* Address of next instruction to return */
59669 int iSub; /* 0 = main program, 1 = first sub-program etc. */
59671 static Op *opIterNext(VdbeOpIter *p){
59672 Vdbe *v = p->v;
59673 Op *pRet = 0;
59674 Op *aOp;
59675 int nOp;
59677 if( p->iSub<=p->nSub ){
59679 if( p->iSub==0 ){
59680 aOp = v->aOp;
59681 nOp = v->nOp;
59682 }else{
59683 aOp = p->apSub[p->iSub-1]->aOp;
59684 nOp = p->apSub[p->iSub-1]->nOp;
59686 assert( p->iAddr<nOp );
59688 pRet = &aOp[p->iAddr];
59689 p->iAddr++;
59690 if( p->iAddr==nOp ){
59691 p->iSub++;
59692 p->iAddr = 0;
59695 if( pRet->p4type==P4_SUBPROGRAM ){
59696 int nByte = (p->nSub+1)*sizeof(SubProgram*);
59697 int j;
59698 for(j=0; j<p->nSub; j++){
59699 if( p->apSub[j]==pRet->p4.pProgram ) break;
59701 if( j==p->nSub ){
59702 p->apSub = sqlite3DbReallocOrFree(v->db, p->apSub, nByte);
59703 if( !p->apSub ){
59704 pRet = 0;
59705 }else{
59706 p->apSub[p->nSub++] = pRet->p4.pProgram;
59712 return pRet;
59716 ** Check if the program stored in the VM associated with pParse may
59717 ** throw an ABORT exception (causing the statement, but not entire transaction
59718 ** to be rolled back). This condition is true if the main program or any
59719 ** sub-programs contains any of the following:
59721 ** * OP_Halt with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
59722 ** * OP_HaltIfNull with P1=SQLITE_CONSTRAINT and P2=OE_Abort.
59723 ** * OP_Destroy
59724 ** * OP_VUpdate
59725 ** * OP_VRename
59726 ** * OP_FkCounter with P2==0 (immediate foreign key constraint)
59728 ** Then check that the value of Parse.mayAbort is true if an
59729 ** ABORT may be thrown, or false otherwise. Return true if it does
59730 ** match, or false otherwise. This function is intended to be used as
59731 ** part of an assert statement in the compiler. Similar to:
59733 ** assert( sqlite3VdbeAssertMayAbort(pParse->pVdbe, pParse->mayAbort) );
59735 SQLITE_PRIVATE int sqlite3VdbeAssertMayAbort(Vdbe *v, int mayAbort){
59736 int hasAbort = 0;
59737 Op *pOp;
59738 VdbeOpIter sIter;
59739 memset(&sIter, 0, sizeof(sIter));
59740 sIter.v = v;
59742 while( (pOp = opIterNext(&sIter))!=0 ){
59743 int opcode = pOp->opcode;
59744 if( opcode==OP_Destroy || opcode==OP_VUpdate || opcode==OP_VRename
59745 #ifndef SQLITE_OMIT_FOREIGN_KEY
59746 || (opcode==OP_FkCounter && pOp->p1==0 && pOp->p2==1)
59747 #endif
59748 || ((opcode==OP_Halt || opcode==OP_HaltIfNull)
59749 && (pOp->p1==SQLITE_CONSTRAINT && pOp->p2==OE_Abort))
59751 hasAbort = 1;
59752 break;
59755 sqlite3DbFree(v->db, sIter.apSub);
59757 /* Return true if hasAbort==mayAbort. Or if a malloc failure occured.
59758 ** If malloc failed, then the while() loop above may not have iterated
59759 ** through all opcodes and hasAbort may be set incorrectly. Return
59760 ** true for this case to prevent the assert() in the callers frame
59761 ** from failing. */
59762 return ( v->db->mallocFailed || hasAbort==mayAbort );
59764 #endif /* SQLITE_DEBUG - the sqlite3AssertMayAbort() function */
59767 ** Loop through the program looking for P2 values that are negative
59768 ** on jump instructions. Each such value is a label. Resolve the
59769 ** label by setting the P2 value to its correct non-zero value.
59771 ** This routine is called once after all opcodes have been inserted.
59773 ** Variable *pMaxFuncArgs is set to the maximum value of any P2 argument
59774 ** to an OP_Function, OP_AggStep or OP_VFilter opcode. This is used by
59775 ** sqlite3VdbeMakeReady() to size the Vdbe.apArg[] array.
59777 ** The Op.opflags field is set on all opcodes.
59779 static void resolveP2Values(Vdbe *p, int *pMaxFuncArgs){
59780 int i;
59781 int nMaxArgs = *pMaxFuncArgs;
59782 Op *pOp;
59783 int *aLabel = p->aLabel;
59784 p->readOnly = 1;
59785 for(pOp=p->aOp, i=p->nOp-1; i>=0; i--, pOp++){
59786 u8 opcode = pOp->opcode;
59788 pOp->opflags = sqlite3OpcodeProperty[opcode];
59789 if( opcode==OP_Function || opcode==OP_AggStep ){
59790 if( pOp->p5>nMaxArgs ) nMaxArgs = pOp->p5;
59791 }else if( (opcode==OP_Transaction && pOp->p2!=0) || opcode==OP_Vacuum ){
59792 p->readOnly = 0;
59793 #ifndef SQLITE_OMIT_VIRTUALTABLE
59794 }else if( opcode==OP_VUpdate ){
59795 if( pOp->p2>nMaxArgs ) nMaxArgs = pOp->p2;
59796 }else if( opcode==OP_VFilter ){
59797 int n;
59798 assert( p->nOp - i >= 3 );
59799 assert( pOp[-1].opcode==OP_Integer );
59800 n = pOp[-1].p1;
59801 if( n>nMaxArgs ) nMaxArgs = n;
59802 #endif
59803 }else if( opcode==OP_Next || opcode==OP_SorterNext ){
59804 pOp->p4.xAdvance = sqlite3BtreeNext;
59805 pOp->p4type = P4_ADVANCE;
59806 }else if( opcode==OP_Prev ){
59807 pOp->p4.xAdvance = sqlite3BtreePrevious;
59808 pOp->p4type = P4_ADVANCE;
59811 if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
59812 assert( -1-pOp->p2<p->nLabel );
59813 pOp->p2 = aLabel[-1-pOp->p2];
59816 sqlite3DbFree(p->db, p->aLabel);
59817 p->aLabel = 0;
59819 *pMaxFuncArgs = nMaxArgs;
59823 ** Return the address of the next instruction to be inserted.
59825 SQLITE_PRIVATE int sqlite3VdbeCurrentAddr(Vdbe *p){
59826 assert( p->magic==VDBE_MAGIC_INIT );
59827 return p->nOp;
59831 ** This function returns a pointer to the array of opcodes associated with
59832 ** the Vdbe passed as the first argument. It is the callers responsibility
59833 ** to arrange for the returned array to be eventually freed using the
59834 ** vdbeFreeOpArray() function.
59836 ** Before returning, *pnOp is set to the number of entries in the returned
59837 ** array. Also, *pnMaxArg is set to the larger of its current value and
59838 ** the number of entries in the Vdbe.apArg[] array required to execute the
59839 ** returned program.
59841 SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){
59842 VdbeOp *aOp = p->aOp;
59843 assert( aOp && !p->db->mallocFailed );
59845 /* Check that sqlite3VdbeUsesBtree() was not called on this VM */
59846 assert( p->btreeMask==0 );
59848 resolveP2Values(p, pnMaxArg);
59849 *pnOp = p->nOp;
59850 p->aOp = 0;
59851 return aOp;
59855 ** Add a whole list of operations to the operation stack. Return the
59856 ** address of the first operation added.
59858 SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp){
59859 int addr;
59860 assert( p->magic==VDBE_MAGIC_INIT );
59861 if( p->nOp + nOp > p->nOpAlloc && growOpArray(p) ){
59862 return 0;
59864 addr = p->nOp;
59865 if( ALWAYS(nOp>0) ){
59866 int i;
59867 VdbeOpList const *pIn = aOp;
59868 for(i=0; i<nOp; i++, pIn++){
59869 int p2 = pIn->p2;
59870 VdbeOp *pOut = &p->aOp[i+addr];
59871 pOut->opcode = pIn->opcode;
59872 pOut->p1 = pIn->p1;
59873 if( p2<0 && (sqlite3OpcodeProperty[pOut->opcode] & OPFLG_JUMP)!=0 ){
59874 pOut->p2 = addr + ADDR(p2);
59875 }else{
59876 pOut->p2 = p2;
59878 pOut->p3 = pIn->p3;
59879 pOut->p4type = P4_NOTUSED;
59880 pOut->p4.p = 0;
59881 pOut->p5 = 0;
59882 #ifdef SQLITE_DEBUG
59883 pOut->zComment = 0;
59884 if( sqlite3VdbeAddopTrace ){
59885 sqlite3VdbePrintOp(0, i+addr, &p->aOp[i+addr]);
59887 #endif
59889 p->nOp += nOp;
59891 return addr;
59895 ** Change the value of the P1 operand for a specific instruction.
59896 ** This routine is useful when a large program is loaded from a
59897 ** static array using sqlite3VdbeAddOpList but we want to make a
59898 ** few minor changes to the program.
59900 SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){
59901 assert( p!=0 );
59902 if( ((u32)p->nOp)>addr ){
59903 p->aOp[addr].p1 = val;
59908 ** Change the value of the P2 operand for a specific instruction.
59909 ** This routine is useful for setting a jump destination.
59911 SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){
59912 assert( p!=0 );
59913 if( ((u32)p->nOp)>addr ){
59914 p->aOp[addr].p2 = val;
59919 ** Change the value of the P3 operand for a specific instruction.
59921 SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){
59922 assert( p!=0 );
59923 if( ((u32)p->nOp)>addr ){
59924 p->aOp[addr].p3 = val;
59929 ** Change the value of the P5 operand for the most recently
59930 ** added operation.
59932 SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe *p, u8 val){
59933 assert( p!=0 );
59934 if( p->aOp ){
59935 assert( p->nOp>0 );
59936 p->aOp[p->nOp-1].p5 = val;
59941 ** Change the P2 operand of instruction addr so that it points to
59942 ** the address of the next instruction to be coded.
59944 SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe *p, int addr){
59945 assert( addr>=0 || p->db->mallocFailed );
59946 if( addr>=0 ) sqlite3VdbeChangeP2(p, addr, p->nOp);
59951 ** If the input FuncDef structure is ephemeral, then free it. If
59952 ** the FuncDef is not ephermal, then do nothing.
59954 static void freeEphemeralFunction(sqlite3 *db, FuncDef *pDef){
59955 if( ALWAYS(pDef) && (pDef->flags & SQLITE_FUNC_EPHEM)!=0 ){
59956 sqlite3DbFree(db, pDef);
59960 static void vdbeFreeOpArray(sqlite3 *, Op *, int);
59963 ** Delete a P4 value if necessary.
59965 static void freeP4(sqlite3 *db, int p4type, void *p4){
59966 if( p4 ){
59967 assert( db );
59968 switch( p4type ){
59969 case P4_REAL:
59970 case P4_INT64:
59971 case P4_DYNAMIC:
59972 case P4_KEYINFO:
59973 case P4_INTARRAY:
59974 case P4_KEYINFO_HANDOFF: {
59975 sqlite3DbFree(db, p4);
59976 break;
59978 case P4_MPRINTF: {
59979 if( db->pnBytesFreed==0 ) sqlite3_free(p4);
59980 break;
59982 case P4_VDBEFUNC: {
59983 VdbeFunc *pVdbeFunc = (VdbeFunc *)p4;
59984 freeEphemeralFunction(db, pVdbeFunc->pFunc);
59985 if( db->pnBytesFreed==0 ) sqlite3VdbeDeleteAuxData(pVdbeFunc, 0);
59986 sqlite3DbFree(db, pVdbeFunc);
59987 break;
59989 case P4_FUNCDEF: {
59990 freeEphemeralFunction(db, (FuncDef*)p4);
59991 break;
59993 case P4_MEM: {
59994 if( db->pnBytesFreed==0 ){
59995 sqlite3ValueFree((sqlite3_value*)p4);
59996 }else{
59997 Mem *p = (Mem*)p4;
59998 sqlite3DbFree(db, p->zMalloc);
59999 sqlite3DbFree(db, p);
60001 break;
60003 case P4_VTAB : {
60004 if( db->pnBytesFreed==0 ) sqlite3VtabUnlock((VTable *)p4);
60005 break;
60012 ** Free the space allocated for aOp and any p4 values allocated for the
60013 ** opcodes contained within. If aOp is not NULL it is assumed to contain
60014 ** nOp entries.
60016 static void vdbeFreeOpArray(sqlite3 *db, Op *aOp, int nOp){
60017 if( aOp ){
60018 Op *pOp;
60019 for(pOp=aOp; pOp<&aOp[nOp]; pOp++){
60020 freeP4(db, pOp->p4type, pOp->p4.p);
60021 #ifdef SQLITE_DEBUG
60022 sqlite3DbFree(db, pOp->zComment);
60023 #endif
60026 sqlite3DbFree(db, aOp);
60030 ** Link the SubProgram object passed as the second argument into the linked
60031 ** list at Vdbe.pSubProgram. This list is used to delete all sub-program
60032 ** objects when the VM is no longer required.
60034 SQLITE_PRIVATE void sqlite3VdbeLinkSubProgram(Vdbe *pVdbe, SubProgram *p){
60035 p->pNext = pVdbe->pProgram;
60036 pVdbe->pProgram = p;
60040 ** Change the opcode at addr into OP_Noop
60042 SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){
60043 if( p->aOp ){
60044 VdbeOp *pOp = &p->aOp[addr];
60045 sqlite3 *db = p->db;
60046 freeP4(db, pOp->p4type, pOp->p4.p);
60047 memset(pOp, 0, sizeof(pOp[0]));
60048 pOp->opcode = OP_Noop;
60053 ** Change the value of the P4 operand for a specific instruction.
60054 ** This routine is useful when a large program is loaded from a
60055 ** static array using sqlite3VdbeAddOpList but we want to make a
60056 ** few minor changes to the program.
60058 ** If n>=0 then the P4 operand is dynamic, meaning that a copy of
60059 ** the string is made into memory obtained from sqlite3_malloc().
60060 ** A value of n==0 means copy bytes of zP4 up to and including the
60061 ** first null byte. If n>0 then copy n+1 bytes of zP4.
60063 ** If n==P4_KEYINFO it means that zP4 is a pointer to a KeyInfo structure.
60064 ** A copy is made of the KeyInfo structure into memory obtained from
60065 ** sqlite3_malloc, to be freed when the Vdbe is finalized.
60066 ** n==P4_KEYINFO_HANDOFF indicates that zP4 points to a KeyInfo structure
60067 ** stored in memory that the caller has obtained from sqlite3_malloc. The
60068 ** caller should not free the allocation, it will be freed when the Vdbe is
60069 ** finalized.
60071 ** Other values of n (P4_STATIC, P4_COLLSEQ etc.) indicate that zP4 points
60072 ** to a string or structure that is guaranteed to exist for the lifetime of
60073 ** the Vdbe. In these cases we can just copy the pointer.
60075 ** If addr<0 then change P4 on the most recently inserted instruction.
60077 SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe *p, int addr, const char *zP4, int n){
60078 Op *pOp;
60079 sqlite3 *db;
60080 assert( p!=0 );
60081 db = p->db;
60082 assert( p->magic==VDBE_MAGIC_INIT );
60083 if( p->aOp==0 || db->mallocFailed ){
60084 if ( n!=P4_KEYINFO && n!=P4_VTAB ) {
60085 freeP4(db, n, (void*)*(char**)&zP4);
60087 return;
60089 assert( p->nOp>0 );
60090 assert( addr<p->nOp );
60091 if( addr<0 ){
60092 addr = p->nOp - 1;
60094 pOp = &p->aOp[addr];
60095 freeP4(db, pOp->p4type, pOp->p4.p);
60096 pOp->p4.p = 0;
60097 if( n==P4_INT32 ){
60098 /* Note: this cast is safe, because the origin data point was an int
60099 ** that was cast to a (const char *). */
60100 pOp->p4.i = SQLITE_PTR_TO_INT(zP4);
60101 pOp->p4type = P4_INT32;
60102 }else if( zP4==0 ){
60103 pOp->p4.p = 0;
60104 pOp->p4type = P4_NOTUSED;
60105 }else if( n==P4_KEYINFO ){
60106 KeyInfo *pKeyInfo;
60107 int nField, nByte;
60109 nField = ((KeyInfo*)zP4)->nField;
60110 nByte = sizeof(*pKeyInfo) + (nField-1)*sizeof(pKeyInfo->aColl[0]) + nField;
60111 pKeyInfo = sqlite3DbMallocRaw(0, nByte);
60112 pOp->p4.pKeyInfo = pKeyInfo;
60113 if( pKeyInfo ){
60114 u8 *aSortOrder;
60115 memcpy((char*)pKeyInfo, zP4, nByte - nField);
60116 aSortOrder = pKeyInfo->aSortOrder;
60117 if( aSortOrder ){
60118 pKeyInfo->aSortOrder = (unsigned char*)&pKeyInfo->aColl[nField];
60119 memcpy(pKeyInfo->aSortOrder, aSortOrder, nField);
60121 pOp->p4type = P4_KEYINFO;
60122 }else{
60123 p->db->mallocFailed = 1;
60124 pOp->p4type = P4_NOTUSED;
60126 }else if( n==P4_KEYINFO_HANDOFF ){
60127 pOp->p4.p = (void*)zP4;
60128 pOp->p4type = P4_KEYINFO;
60129 }else if( n==P4_VTAB ){
60130 pOp->p4.p = (void*)zP4;
60131 pOp->p4type = P4_VTAB;
60132 sqlite3VtabLock((VTable *)zP4);
60133 assert( ((VTable *)zP4)->db==p->db );
60134 }else if( n<0 ){
60135 pOp->p4.p = (void*)zP4;
60136 pOp->p4type = (signed char)n;
60137 }else{
60138 if( n==0 ) n = sqlite3Strlen30(zP4);
60139 pOp->p4.z = sqlite3DbStrNDup(p->db, zP4, n);
60140 pOp->p4type = P4_DYNAMIC;
60144 #ifndef NDEBUG
60146 ** Change the comment on the the most recently coded instruction. Or
60147 ** insert a No-op and add the comment to that new instruction. This
60148 ** makes the code easier to read during debugging. None of this happens
60149 ** in a production build.
60151 static void vdbeVComment(Vdbe *p, const char *zFormat, va_list ap){
60152 assert( p->nOp>0 || p->aOp==0 );
60153 assert( p->aOp==0 || p->aOp[p->nOp-1].zComment==0 || p->db->mallocFailed );
60154 if( p->nOp ){
60155 assert( p->aOp );
60156 sqlite3DbFree(p->db, p->aOp[p->nOp-1].zComment);
60157 p->aOp[p->nOp-1].zComment = sqlite3VMPrintf(p->db, zFormat, ap);
60160 SQLITE_PRIVATE void sqlite3VdbeComment(Vdbe *p, const char *zFormat, ...){
60161 va_list ap;
60162 if( p ){
60163 va_start(ap, zFormat);
60164 vdbeVComment(p, zFormat, ap);
60165 va_end(ap);
60168 SQLITE_PRIVATE void sqlite3VdbeNoopComment(Vdbe *p, const char *zFormat, ...){
60169 va_list ap;
60170 if( p ){
60171 sqlite3VdbeAddOp0(p, OP_Noop);
60172 va_start(ap, zFormat);
60173 vdbeVComment(p, zFormat, ap);
60174 va_end(ap);
60177 #endif /* NDEBUG */
60180 ** Return the opcode for a given address. If the address is -1, then
60181 ** return the most recently inserted opcode.
60183 ** If a memory allocation error has occurred prior to the calling of this
60184 ** routine, then a pointer to a dummy VdbeOp will be returned. That opcode
60185 ** is readable but not writable, though it is cast to a writable value.
60186 ** The return of a dummy opcode allows the call to continue functioning
60187 ** after a OOM fault without having to check to see if the return from
60188 ** this routine is a valid pointer. But because the dummy.opcode is 0,
60189 ** dummy will never be written to. This is verified by code inspection and
60190 ** by running with Valgrind.
60192 ** About the #ifdef SQLITE_OMIT_TRACE: Normally, this routine is never called
60193 ** unless p->nOp>0. This is because in the absense of SQLITE_OMIT_TRACE,
60194 ** an OP_Trace instruction is always inserted by sqlite3VdbeGet() as soon as
60195 ** a new VDBE is created. So we are free to set addr to p->nOp-1 without
60196 ** having to double-check to make sure that the result is non-negative. But
60197 ** if SQLITE_OMIT_TRACE is defined, the OP_Trace is omitted and we do need to
60198 ** check the value of p->nOp-1 before continuing.
60200 SQLITE_PRIVATE VdbeOp *sqlite3VdbeGetOp(Vdbe *p, int addr){
60201 /* C89 specifies that the constant "dummy" will be initialized to all
60202 ** zeros, which is correct. MSVC generates a warning, nevertheless. */
60203 static VdbeOp dummy; /* Ignore the MSVC warning about no initializer */
60204 assert( p->magic==VDBE_MAGIC_INIT );
60205 if( addr<0 ){
60206 #ifdef SQLITE_OMIT_TRACE
60207 if( p->nOp==0 ) return (VdbeOp*)&dummy;
60208 #endif
60209 addr = p->nOp - 1;
60211 assert( (addr>=0 && addr<p->nOp) || p->db->mallocFailed );
60212 if( p->db->mallocFailed ){
60213 return (VdbeOp*)&dummy;
60214 }else{
60215 return &p->aOp[addr];
60219 #if !defined(SQLITE_OMIT_EXPLAIN) || !defined(NDEBUG) \
60220 || defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
60222 ** Compute a string that describes the P4 parameter for an opcode.
60223 ** Use zTemp for any required temporary buffer space.
60225 static char *displayP4(Op *pOp, char *zTemp, int nTemp){
60226 char *zP4 = zTemp;
60227 assert( nTemp>=20 );
60228 switch( pOp->p4type ){
60229 case P4_KEYINFO_STATIC:
60230 case P4_KEYINFO: {
60231 int i, j;
60232 KeyInfo *pKeyInfo = pOp->p4.pKeyInfo;
60233 sqlite3_snprintf(nTemp, zTemp, "keyinfo(%d", pKeyInfo->nField);
60234 i = sqlite3Strlen30(zTemp);
60235 for(j=0; j<pKeyInfo->nField; j++){
60236 CollSeq *pColl = pKeyInfo->aColl[j];
60237 if( pColl ){
60238 int n = sqlite3Strlen30(pColl->zName);
60239 if( i+n>nTemp-6 ){
60240 memcpy(&zTemp[i],",...",4);
60241 break;
60243 zTemp[i++] = ',';
60244 if( pKeyInfo->aSortOrder && pKeyInfo->aSortOrder[j] ){
60245 zTemp[i++] = '-';
60247 memcpy(&zTemp[i], pColl->zName,n+1);
60248 i += n;
60249 }else if( i+4<nTemp-6 ){
60250 memcpy(&zTemp[i],",nil",4);
60251 i += 4;
60254 zTemp[i++] = ')';
60255 zTemp[i] = 0;
60256 assert( i<nTemp );
60257 break;
60259 case P4_COLLSEQ: {
60260 CollSeq *pColl = pOp->p4.pColl;
60261 sqlite3_snprintf(nTemp, zTemp, "collseq(%.20s)", pColl->zName);
60262 break;
60264 case P4_FUNCDEF: {
60265 FuncDef *pDef = pOp->p4.pFunc;
60266 sqlite3_snprintf(nTemp, zTemp, "%s(%d)", pDef->zName, pDef->nArg);
60267 break;
60269 case P4_INT64: {
60270 sqlite3_snprintf(nTemp, zTemp, "%lld", *pOp->p4.pI64);
60271 break;
60273 case P4_INT32: {
60274 sqlite3_snprintf(nTemp, zTemp, "%d", pOp->p4.i);
60275 break;
60277 case P4_REAL: {
60278 sqlite3_snprintf(nTemp, zTemp, "%.16g", *pOp->p4.pReal);
60279 break;
60281 case P4_MEM: {
60282 Mem *pMem = pOp->p4.pMem;
60283 if( pMem->flags & MEM_Str ){
60284 zP4 = pMem->z;
60285 }else if( pMem->flags & MEM_Int ){
60286 sqlite3_snprintf(nTemp, zTemp, "%lld", pMem->u.i);
60287 }else if( pMem->flags & MEM_Real ){
60288 sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->r);
60289 }else if( pMem->flags & MEM_Null ){
60290 sqlite3_snprintf(nTemp, zTemp, "NULL");
60291 }else{
60292 assert( pMem->flags & MEM_Blob );
60293 zP4 = "(blob)";
60295 break;
60297 #ifndef SQLITE_OMIT_VIRTUALTABLE
60298 case P4_VTAB: {
60299 sqlite3_vtab *pVtab = pOp->p4.pVtab->pVtab;
60300 sqlite3_snprintf(nTemp, zTemp, "vtab:%p:%p", pVtab, pVtab->pModule);
60301 break;
60303 #endif
60304 case P4_INTARRAY: {
60305 sqlite3_snprintf(nTemp, zTemp, "intarray");
60306 break;
60308 case P4_SUBPROGRAM: {
60309 sqlite3_snprintf(nTemp, zTemp, "program");
60310 break;
60312 case P4_ADVANCE: {
60313 zTemp[0] = 0;
60314 break;
60316 default: {
60317 zP4 = pOp->p4.z;
60318 if( zP4==0 ){
60319 zP4 = zTemp;
60320 zTemp[0] = 0;
60324 assert( zP4!=0 );
60325 return zP4;
60327 #endif
60330 ** Declare to the Vdbe that the BTree object at db->aDb[i] is used.
60332 ** The prepared statements need to know in advance the complete set of
60333 ** attached databases that will be use. A mask of these databases
60334 ** is maintained in p->btreeMask. The p->lockMask value is the subset of
60335 ** p->btreeMask of databases that will require a lock.
60337 SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){
60338 assert( i>=0 && i<p->db->nDb && i<(int)sizeof(yDbMask)*8 );
60339 assert( i<(int)sizeof(p->btreeMask)*8 );
60340 p->btreeMask |= ((yDbMask)1)<<i;
60341 if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){
60342 p->lockMask |= ((yDbMask)1)<<i;
60346 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
60348 ** If SQLite is compiled to support shared-cache mode and to be threadsafe,
60349 ** this routine obtains the mutex associated with each BtShared structure
60350 ** that may be accessed by the VM passed as an argument. In doing so it also
60351 ** sets the BtShared.db member of each of the BtShared structures, ensuring
60352 ** that the correct busy-handler callback is invoked if required.
60354 ** If SQLite is not threadsafe but does support shared-cache mode, then
60355 ** sqlite3BtreeEnter() is invoked to set the BtShared.db variables
60356 ** of all of BtShared structures accessible via the database handle
60357 ** associated with the VM.
60359 ** If SQLite is not threadsafe and does not support shared-cache mode, this
60360 ** function is a no-op.
60362 ** The p->btreeMask field is a bitmask of all btrees that the prepared
60363 ** statement p will ever use. Let N be the number of bits in p->btreeMask
60364 ** corresponding to btrees that use shared cache. Then the runtime of
60365 ** this routine is N*N. But as N is rarely more than 1, this should not
60366 ** be a problem.
60368 SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){
60369 int i;
60370 yDbMask mask;
60371 sqlite3 *db;
60372 Db *aDb;
60373 int nDb;
60374 if( p->lockMask==0 ) return; /* The common case */
60375 db = p->db;
60376 aDb = db->aDb;
60377 nDb = db->nDb;
60378 for(i=0, mask=1; i<nDb; i++, mask += mask){
60379 if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
60380 sqlite3BtreeEnter(aDb[i].pBt);
60384 #endif
60386 #if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
60388 ** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter().
60390 SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){
60391 int i;
60392 yDbMask mask;
60393 sqlite3 *db;
60394 Db *aDb;
60395 int nDb;
60396 if( p->lockMask==0 ) return; /* The common case */
60397 db = p->db;
60398 aDb = db->aDb;
60399 nDb = db->nDb;
60400 for(i=0, mask=1; i<nDb; i++, mask += mask){
60401 if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
60402 sqlite3BtreeLeave(aDb[i].pBt);
60406 #endif
60408 #if defined(VDBE_PROFILE) || defined(SQLITE_DEBUG)
60410 ** Print a single opcode. This routine is used for debugging only.
60412 SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
60413 char *zP4;
60414 char zPtr[50];
60415 static const char *zFormat1 = "%4d %-13s %4d %4d %4d %-4s %.2X %s\n";
60416 if( pOut==0 ) pOut = stdout;
60417 zP4 = displayP4(pOp, zPtr, sizeof(zPtr));
60418 fprintf(pOut, zFormat1, pc,
60419 sqlite3OpcodeName(pOp->opcode), pOp->p1, pOp->p2, pOp->p3, zP4, pOp->p5,
60420 #ifdef SQLITE_DEBUG
60421 pOp->zComment ? pOp->zComment : ""
60422 #else
60424 #endif
60426 fflush(pOut);
60428 #endif
60431 ** Release an array of N Mem elements
60433 static void releaseMemArray(Mem *p, int N){
60434 if( p && N ){
60435 Mem *pEnd;
60436 sqlite3 *db = p->db;
60437 u8 malloc_failed = db->mallocFailed;
60438 if( db->pnBytesFreed ){
60439 for(pEnd=&p[N]; p<pEnd; p++){
60440 sqlite3DbFree(db, p->zMalloc);
60442 return;
60444 for(pEnd=&p[N]; p<pEnd; p++){
60445 assert( (&p[1])==pEnd || p[0].db==p[1].db );
60447 /* This block is really an inlined version of sqlite3VdbeMemRelease()
60448 ** that takes advantage of the fact that the memory cell value is
60449 ** being set to NULL after releasing any dynamic resources.
60451 ** The justification for duplicating code is that according to
60452 ** callgrind, this causes a certain test case to hit the CPU 4.7
60453 ** percent less (x86 linux, gcc version 4.1.2, -O6) than if
60454 ** sqlite3MemRelease() were called from here. With -O2, this jumps
60455 ** to 6.6 percent. The test case is inserting 1000 rows into a table
60456 ** with no indexes using a single prepared INSERT statement, bind()
60457 ** and reset(). Inserts are grouped into a transaction.
60459 if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
60460 sqlite3VdbeMemRelease(p);
60461 }else if( p->zMalloc ){
60462 sqlite3DbFree(db, p->zMalloc);
60463 p->zMalloc = 0;
60466 p->flags = MEM_Invalid;
60468 db->mallocFailed = malloc_failed;
60473 ** Delete a VdbeFrame object and its contents. VdbeFrame objects are
60474 ** allocated by the OP_Program opcode in sqlite3VdbeExec().
60476 SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame *p){
60477 int i;
60478 Mem *aMem = VdbeFrameMem(p);
60479 VdbeCursor **apCsr = (VdbeCursor **)&aMem[p->nChildMem];
60480 for(i=0; i<p->nChildCsr; i++){
60481 sqlite3VdbeFreeCursor(p->v, apCsr[i]);
60483 releaseMemArray(aMem, p->nChildMem);
60484 sqlite3DbFree(p->v->db, p);
60487 #ifndef SQLITE_OMIT_EXPLAIN
60489 ** Give a listing of the program in the virtual machine.
60491 ** The interface is the same as sqlite3VdbeExec(). But instead of
60492 ** running the code, it invokes the callback once for each instruction.
60493 ** This feature is used to implement "EXPLAIN".
60495 ** When p->explain==1, each instruction is listed. When
60496 ** p->explain==2, only OP_Explain instructions are listed and these
60497 ** are shown in a different format. p->explain==2 is used to implement
60498 ** EXPLAIN QUERY PLAN.
60500 ** When p->explain==1, first the main program is listed, then each of
60501 ** the trigger subprograms are listed one by one.
60503 SQLITE_PRIVATE int sqlite3VdbeList(
60504 Vdbe *p /* The VDBE */
60506 int nRow; /* Stop when row count reaches this */
60507 int nSub = 0; /* Number of sub-vdbes seen so far */
60508 SubProgram **apSub = 0; /* Array of sub-vdbes */
60509 Mem *pSub = 0; /* Memory cell hold array of subprogs */
60510 sqlite3 *db = p->db; /* The database connection */
60511 int i; /* Loop counter */
60512 int rc = SQLITE_OK; /* Return code */
60513 Mem *pMem = &p->aMem[1]; /* First Mem of result set */
60515 assert( p->explain );
60516 assert( p->magic==VDBE_MAGIC_RUN );
60517 assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY || p->rc==SQLITE_NOMEM );
60519 /* Even though this opcode does not use dynamic strings for
60520 ** the result, result columns may become dynamic if the user calls
60521 ** sqlite3_column_text16(), causing a translation to UTF-16 encoding.
60523 releaseMemArray(pMem, 8);
60524 p->pResultSet = 0;
60526 if( p->rc==SQLITE_NOMEM ){
60527 /* This happens if a malloc() inside a call to sqlite3_column_text() or
60528 ** sqlite3_column_text16() failed. */
60529 db->mallocFailed = 1;
60530 return SQLITE_ERROR;
60533 /* When the number of output rows reaches nRow, that means the
60534 ** listing has finished and sqlite3_step() should return SQLITE_DONE.
60535 ** nRow is the sum of the number of rows in the main program, plus
60536 ** the sum of the number of rows in all trigger subprograms encountered
60537 ** so far. The nRow value will increase as new trigger subprograms are
60538 ** encountered, but p->pc will eventually catch up to nRow.
60540 nRow = p->nOp;
60541 if( p->explain==1 ){
60542 /* The first 8 memory cells are used for the result set. So we will
60543 ** commandeer the 9th cell to use as storage for an array of pointers
60544 ** to trigger subprograms. The VDBE is guaranteed to have at least 9
60545 ** cells. */
60546 assert( p->nMem>9 );
60547 pSub = &p->aMem[9];
60548 if( pSub->flags&MEM_Blob ){
60549 /* On the first call to sqlite3_step(), pSub will hold a NULL. It is
60550 ** initialized to a BLOB by the P4_SUBPROGRAM processing logic below */
60551 nSub = pSub->n/sizeof(Vdbe*);
60552 apSub = (SubProgram **)pSub->z;
60554 for(i=0; i<nSub; i++){
60555 nRow += apSub[i]->nOp;
60560 i = p->pc++;
60561 }while( i<nRow && p->explain==2 && p->aOp[i].opcode!=OP_Explain );
60562 if( i>=nRow ){
60563 p->rc = SQLITE_OK;
60564 rc = SQLITE_DONE;
60565 }else if( db->u1.isInterrupted ){
60566 p->rc = SQLITE_INTERRUPT;
60567 rc = SQLITE_ERROR;
60568 sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(p->rc));
60569 }else{
60570 char *z;
60571 Op *pOp;
60572 if( i<p->nOp ){
60573 /* The output line number is small enough that we are still in the
60574 ** main program. */
60575 pOp = &p->aOp[i];
60576 }else{
60577 /* We are currently listing subprograms. Figure out which one and
60578 ** pick up the appropriate opcode. */
60579 int j;
60580 i -= p->nOp;
60581 for(j=0; i>=apSub[j]->nOp; j++){
60582 i -= apSub[j]->nOp;
60584 pOp = &apSub[j]->aOp[i];
60586 if( p->explain==1 ){
60587 pMem->flags = MEM_Int;
60588 pMem->type = SQLITE_INTEGER;
60589 pMem->u.i = i; /* Program counter */
60590 pMem++;
60592 pMem->flags = MEM_Static|MEM_Str|MEM_Term;
60593 pMem->z = (char*)sqlite3OpcodeName(pOp->opcode); /* Opcode */
60594 assert( pMem->z!=0 );
60595 pMem->n = sqlite3Strlen30(pMem->z);
60596 pMem->type = SQLITE_TEXT;
60597 pMem->enc = SQLITE_UTF8;
60598 pMem++;
60600 /* When an OP_Program opcode is encounter (the only opcode that has
60601 ** a P4_SUBPROGRAM argument), expand the size of the array of subprograms
60602 ** kept in p->aMem[9].z to hold the new program - assuming this subprogram
60603 ** has not already been seen.
60605 if( pOp->p4type==P4_SUBPROGRAM ){
60606 int nByte = (nSub+1)*sizeof(SubProgram*);
60607 int j;
60608 for(j=0; j<nSub; j++){
60609 if( apSub[j]==pOp->p4.pProgram ) break;
60611 if( j==nSub && SQLITE_OK==sqlite3VdbeMemGrow(pSub, nByte, 1) ){
60612 apSub = (SubProgram **)pSub->z;
60613 apSub[nSub++] = pOp->p4.pProgram;
60614 pSub->flags |= MEM_Blob;
60615 pSub->n = nSub*sizeof(SubProgram*);
60620 pMem->flags = MEM_Int;
60621 pMem->u.i = pOp->p1; /* P1 */
60622 pMem->type = SQLITE_INTEGER;
60623 pMem++;
60625 pMem->flags = MEM_Int;
60626 pMem->u.i = pOp->p2; /* P2 */
60627 pMem->type = SQLITE_INTEGER;
60628 pMem++;
60630 pMem->flags = MEM_Int;
60631 pMem->u.i = pOp->p3; /* P3 */
60632 pMem->type = SQLITE_INTEGER;
60633 pMem++;
60635 if( sqlite3VdbeMemGrow(pMem, 32, 0) ){ /* P4 */
60636 assert( p->db->mallocFailed );
60637 return SQLITE_ERROR;
60639 pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
60640 z = displayP4(pOp, pMem->z, 32);
60641 if( z!=pMem->z ){
60642 sqlite3VdbeMemSetStr(pMem, z, -1, SQLITE_UTF8, 0);
60643 }else{
60644 assert( pMem->z!=0 );
60645 pMem->n = sqlite3Strlen30(pMem->z);
60646 pMem->enc = SQLITE_UTF8;
60648 pMem->type = SQLITE_TEXT;
60649 pMem++;
60651 if( p->explain==1 ){
60652 if( sqlite3VdbeMemGrow(pMem, 4, 0) ){
60653 assert( p->db->mallocFailed );
60654 return SQLITE_ERROR;
60656 pMem->flags = MEM_Dyn|MEM_Str|MEM_Term;
60657 pMem->n = 2;
60658 sqlite3_snprintf(3, pMem->z, "%.2x", pOp->p5); /* P5 */
60659 pMem->type = SQLITE_TEXT;
60660 pMem->enc = SQLITE_UTF8;
60661 pMem++;
60663 #ifdef SQLITE_DEBUG
60664 if( pOp->zComment ){
60665 pMem->flags = MEM_Str|MEM_Term;
60666 pMem->z = pOp->zComment;
60667 pMem->n = sqlite3Strlen30(pMem->z);
60668 pMem->enc = SQLITE_UTF8;
60669 pMem->type = SQLITE_TEXT;
60670 }else
60671 #endif
60673 pMem->flags = MEM_Null; /* Comment */
60674 pMem->type = SQLITE_NULL;
60678 p->nResColumn = 8 - 4*(p->explain-1);
60679 p->pResultSet = &p->aMem[1];
60680 p->rc = SQLITE_OK;
60681 rc = SQLITE_ROW;
60683 return rc;
60685 #endif /* SQLITE_OMIT_EXPLAIN */
60687 #ifdef SQLITE_DEBUG
60689 ** Print the SQL that was used to generate a VDBE program.
60691 SQLITE_PRIVATE void sqlite3VdbePrintSql(Vdbe *p){
60692 int nOp = p->nOp;
60693 VdbeOp *pOp;
60694 if( nOp<1 ) return;
60695 pOp = &p->aOp[0];
60696 if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
60697 const char *z = pOp->p4.z;
60698 while( sqlite3Isspace(*z) ) z++;
60699 printf("SQL: [%s]\n", z);
60702 #endif
60704 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
60706 ** Print an IOTRACE message showing SQL content.
60708 SQLITE_PRIVATE void sqlite3VdbeIOTraceSql(Vdbe *p){
60709 int nOp = p->nOp;
60710 VdbeOp *pOp;
60711 if( sqlite3IoTrace==0 ) return;
60712 if( nOp<1 ) return;
60713 pOp = &p->aOp[0];
60714 if( pOp->opcode==OP_Trace && pOp->p4.z!=0 ){
60715 int i, j;
60716 char z[1000];
60717 sqlite3_snprintf(sizeof(z), z, "%s", pOp->p4.z);
60718 for(i=0; sqlite3Isspace(z[i]); i++){}
60719 for(j=0; z[i]; i++){
60720 if( sqlite3Isspace(z[i]) ){
60721 if( z[i-1]!=' ' ){
60722 z[j++] = ' ';
60724 }else{
60725 z[j++] = z[i];
60728 z[j] = 0;
60729 sqlite3IoTrace("SQL %s\n", z);
60732 #endif /* !SQLITE_OMIT_TRACE && SQLITE_ENABLE_IOTRACE */
60735 ** Allocate space from a fixed size buffer and return a pointer to
60736 ** that space. If insufficient space is available, return NULL.
60738 ** The pBuf parameter is the initial value of a pointer which will
60739 ** receive the new memory. pBuf is normally NULL. If pBuf is not
60740 ** NULL, it means that memory space has already been allocated and that
60741 ** this routine should not allocate any new memory. When pBuf is not
60742 ** NULL simply return pBuf. Only allocate new memory space when pBuf
60743 ** is NULL.
60745 ** nByte is the number of bytes of space needed.
60747 ** *ppFrom points to available space and pEnd points to the end of the
60748 ** available space. When space is allocated, *ppFrom is advanced past
60749 ** the end of the allocated space.
60751 ** *pnByte is a counter of the number of bytes of space that have failed
60752 ** to allocate. If there is insufficient space in *ppFrom to satisfy the
60753 ** request, then increment *pnByte by the amount of the request.
60755 static void *allocSpace(
60756 void *pBuf, /* Where return pointer will be stored */
60757 int nByte, /* Number of bytes to allocate */
60758 u8 **ppFrom, /* IN/OUT: Allocate from *ppFrom */
60759 u8 *pEnd, /* Pointer to 1 byte past the end of *ppFrom buffer */
60760 int *pnByte /* If allocation cannot be made, increment *pnByte */
60762 assert( EIGHT_BYTE_ALIGNMENT(*ppFrom) );
60763 if( pBuf ) return pBuf;
60764 nByte = ROUND8(nByte);
60765 if( &(*ppFrom)[nByte] <= pEnd ){
60766 pBuf = (void*)*ppFrom;
60767 *ppFrom += nByte;
60768 }else{
60769 *pnByte += nByte;
60771 return pBuf;
60775 ** Rewind the VDBE back to the beginning in preparation for
60776 ** running it.
60778 SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
60779 #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
60780 int i;
60781 #endif
60782 assert( p!=0 );
60783 assert( p->magic==VDBE_MAGIC_INIT );
60785 /* There should be at least one opcode.
60787 assert( p->nOp>0 );
60789 /* Set the magic to VDBE_MAGIC_RUN sooner rather than later. */
60790 p->magic = VDBE_MAGIC_RUN;
60792 #ifdef SQLITE_DEBUG
60793 for(i=1; i<p->nMem; i++){
60794 assert( p->aMem[i].db==p->db );
60796 #endif
60797 p->pc = -1;
60798 p->rc = SQLITE_OK;
60799 p->errorAction = OE_Abort;
60800 p->magic = VDBE_MAGIC_RUN;
60801 p->nChange = 0;
60802 p->cacheCtr = 1;
60803 p->minWriteFileFormat = 255;
60804 p->iStatement = 0;
60805 p->nFkConstraint = 0;
60806 #ifdef VDBE_PROFILE
60807 for(i=0; i<p->nOp; i++){
60808 p->aOp[i].cnt = 0;
60809 p->aOp[i].cycles = 0;
60811 #endif
60815 ** Prepare a virtual machine for execution for the first time after
60816 ** creating the virtual machine. This involves things such
60817 ** as allocating stack space and initializing the program counter.
60818 ** After the VDBE has be prepped, it can be executed by one or more
60819 ** calls to sqlite3VdbeExec().
60821 ** This function may be called exact once on a each virtual machine.
60822 ** After this routine is called the VM has been "packaged" and is ready
60823 ** to run. After this routine is called, futher calls to
60824 ** sqlite3VdbeAddOp() functions are prohibited. This routine disconnects
60825 ** the Vdbe from the Parse object that helped generate it so that the
60826 ** the Vdbe becomes an independent entity and the Parse object can be
60827 ** destroyed.
60829 ** Use the sqlite3VdbeRewind() procedure to restore a virtual machine back
60830 ** to its initial state after it has been run.
60832 SQLITE_PRIVATE void sqlite3VdbeMakeReady(
60833 Vdbe *p, /* The VDBE */
60834 Parse *pParse /* Parsing context */
60836 sqlite3 *db; /* The database connection */
60837 int nVar; /* Number of parameters */
60838 int nMem; /* Number of VM memory registers */
60839 int nCursor; /* Number of cursors required */
60840 int nArg; /* Number of arguments in subprograms */
60841 int nOnce; /* Number of OP_Once instructions */
60842 int n; /* Loop counter */
60843 u8 *zCsr; /* Memory available for allocation */
60844 u8 *zEnd; /* First byte past allocated memory */
60845 int nByte; /* How much extra memory is needed */
60847 assert( p!=0 );
60848 assert( p->nOp>0 );
60849 assert( pParse!=0 );
60850 assert( p->magic==VDBE_MAGIC_INIT );
60851 db = p->db;
60852 assert( db->mallocFailed==0 );
60853 nVar = pParse->nVar;
60854 nMem = pParse->nMem;
60855 nCursor = pParse->nTab;
60856 nArg = pParse->nMaxArg;
60857 nOnce = pParse->nOnce;
60858 if( nOnce==0 ) nOnce = 1; /* Ensure at least one byte in p->aOnceFlag[] */
60860 /* For each cursor required, also allocate a memory cell. Memory
60861 ** cells (nMem+1-nCursor)..nMem, inclusive, will never be used by
60862 ** the vdbe program. Instead they are used to allocate space for
60863 ** VdbeCursor/BtCursor structures. The blob of memory associated with
60864 ** cursor 0 is stored in memory cell nMem. Memory cell (nMem-1)
60865 ** stores the blob of memory associated with cursor 1, etc.
60867 ** See also: allocateCursor().
60869 nMem += nCursor;
60871 /* Allocate space for memory registers, SQL variables, VDBE cursors and
60872 ** an array to marshal SQL function arguments in.
60874 zCsr = (u8*)&p->aOp[p->nOp]; /* Memory avaliable for allocation */
60875 zEnd = (u8*)&p->aOp[p->nOpAlloc]; /* First byte past end of zCsr[] */
60877 resolveP2Values(p, &nArg);
60878 p->usesStmtJournal = (u8)(pParse->isMultiWrite && pParse->mayAbort);
60879 if( pParse->explain && nMem<10 ){
60880 nMem = 10;
60882 memset(zCsr, 0, zEnd-zCsr);
60883 zCsr += (zCsr - (u8*)0)&7;
60884 assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
60885 p->expired = 0;
60887 /* Memory for registers, parameters, cursor, etc, is allocated in two
60888 ** passes. On the first pass, we try to reuse unused space at the
60889 ** end of the opcode array. If we are unable to satisfy all memory
60890 ** requirements by reusing the opcode array tail, then the second
60891 ** pass will fill in the rest using a fresh allocation.
60893 ** This two-pass approach that reuses as much memory as possible from
60894 ** the leftover space at the end of the opcode array can significantly
60895 ** reduce the amount of memory held by a prepared statement.
60897 do {
60898 nByte = 0;
60899 p->aMem = allocSpace(p->aMem, nMem*sizeof(Mem), &zCsr, zEnd, &nByte);
60900 p->aVar = allocSpace(p->aVar, nVar*sizeof(Mem), &zCsr, zEnd, &nByte);
60901 p->apArg = allocSpace(p->apArg, nArg*sizeof(Mem*), &zCsr, zEnd, &nByte);
60902 p->azVar = allocSpace(p->azVar, nVar*sizeof(char*), &zCsr, zEnd, &nByte);
60903 p->apCsr = allocSpace(p->apCsr, nCursor*sizeof(VdbeCursor*),
60904 &zCsr, zEnd, &nByte);
60905 p->aOnceFlag = allocSpace(p->aOnceFlag, nOnce, &zCsr, zEnd, &nByte);
60906 if( nByte ){
60907 p->pFree = sqlite3DbMallocZero(db, nByte);
60909 zCsr = p->pFree;
60910 zEnd = &zCsr[nByte];
60911 }while( nByte && !db->mallocFailed );
60913 p->nCursor = (u16)nCursor;
60914 p->nOnceFlag = nOnce;
60915 if( p->aVar ){
60916 p->nVar = (ynVar)nVar;
60917 for(n=0; n<nVar; n++){
60918 p->aVar[n].flags = MEM_Null;
60919 p->aVar[n].db = db;
60922 if( p->azVar ){
60923 p->nzVar = pParse->nzVar;
60924 memcpy(p->azVar, pParse->azVar, p->nzVar*sizeof(p->azVar[0]));
60925 memset(pParse->azVar, 0, pParse->nzVar*sizeof(pParse->azVar[0]));
60927 if( p->aMem ){
60928 p->aMem--; /* aMem[] goes from 1..nMem */
60929 p->nMem = nMem; /* not from 0..nMem-1 */
60930 for(n=1; n<=nMem; n++){
60931 p->aMem[n].flags = MEM_Invalid;
60932 p->aMem[n].db = db;
60935 p->explain = pParse->explain;
60936 sqlite3VdbeRewind(p);
60940 ** Close a VDBE cursor and release all the resources that cursor
60941 ** happens to hold.
60943 SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
60944 if( pCx==0 ){
60945 return;
60947 sqlite3VdbeSorterClose(p->db, pCx);
60948 if( pCx->pBt ){
60949 sqlite3BtreeClose(pCx->pBt);
60950 /* The pCx->pCursor will be close automatically, if it exists, by
60951 ** the call above. */
60952 }else if( pCx->pCursor ){
60953 sqlite3BtreeCloseCursor(pCx->pCursor);
60955 #ifndef SQLITE_OMIT_VIRTUALTABLE
60956 if( pCx->pVtabCursor ){
60957 sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
60958 const sqlite3_module *pModule = pCx->pModule;
60959 p->inVtabMethod = 1;
60960 pModule->xClose(pVtabCursor);
60961 p->inVtabMethod = 0;
60963 #endif
60967 ** Copy the values stored in the VdbeFrame structure to its Vdbe. This
60968 ** is used, for example, when a trigger sub-program is halted to restore
60969 ** control to the main program.
60971 SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
60972 Vdbe *v = pFrame->v;
60973 v->aOnceFlag = pFrame->aOnceFlag;
60974 v->nOnceFlag = pFrame->nOnceFlag;
60975 v->aOp = pFrame->aOp;
60976 v->nOp = pFrame->nOp;
60977 v->aMem = pFrame->aMem;
60978 v->nMem = pFrame->nMem;
60979 v->apCsr = pFrame->apCsr;
60980 v->nCursor = pFrame->nCursor;
60981 v->db->lastRowid = pFrame->lastRowid;
60982 v->nChange = pFrame->nChange;
60983 return pFrame->pc;
60987 ** Close all cursors.
60989 ** Also release any dynamic memory held by the VM in the Vdbe.aMem memory
60990 ** cell array. This is necessary as the memory cell array may contain
60991 ** pointers to VdbeFrame objects, which may in turn contain pointers to
60992 ** open cursors.
60994 static void closeAllCursors(Vdbe *p){
60995 if( p->pFrame ){
60996 VdbeFrame *pFrame;
60997 for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
60998 sqlite3VdbeFrameRestore(pFrame);
61000 p->pFrame = 0;
61001 p->nFrame = 0;
61003 if( p->apCsr ){
61004 int i;
61005 for(i=0; i<p->nCursor; i++){
61006 VdbeCursor *pC = p->apCsr[i];
61007 if( pC ){
61008 sqlite3VdbeFreeCursor(p, pC);
61009 p->apCsr[i] = 0;
61013 if( p->aMem ){
61014 releaseMemArray(&p->aMem[1], p->nMem);
61016 while( p->pDelFrame ){
61017 VdbeFrame *pDel = p->pDelFrame;
61018 p->pDelFrame = pDel->pParent;
61019 sqlite3VdbeFrameDelete(pDel);
61024 ** Clean up the VM after execution.
61026 ** This routine will automatically close any cursors, lists, and/or
61027 ** sorters that were left open. It also deletes the values of
61028 ** variables in the aVar[] array.
61030 static void Cleanup(Vdbe *p){
61031 sqlite3 *db = p->db;
61033 #ifdef SQLITE_DEBUG
61034 /* Execute assert() statements to ensure that the Vdbe.apCsr[] and
61035 ** Vdbe.aMem[] arrays have already been cleaned up. */
61036 int i;
61037 if( p->apCsr ) for(i=0; i<p->nCursor; i++) assert( p->apCsr[i]==0 );
61038 if( p->aMem ){
61039 for(i=1; i<=p->nMem; i++) assert( p->aMem[i].flags==MEM_Invalid );
61041 #endif
61043 sqlite3DbFree(db, p->zErrMsg);
61044 p->zErrMsg = 0;
61045 p->pResultSet = 0;
61049 ** Set the number of result columns that will be returned by this SQL
61050 ** statement. This is now set at compile time, rather than during
61051 ** execution of the vdbe program so that sqlite3_column_count() can
61052 ** be called on an SQL statement before sqlite3_step().
61054 SQLITE_PRIVATE void sqlite3VdbeSetNumCols(Vdbe *p, int nResColumn){
61055 Mem *pColName;
61056 int n;
61057 sqlite3 *db = p->db;
61059 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
61060 sqlite3DbFree(db, p->aColName);
61061 n = nResColumn*COLNAME_N;
61062 p->nResColumn = (u16)nResColumn;
61063 p->aColName = pColName = (Mem*)sqlite3DbMallocZero(db, sizeof(Mem)*n );
61064 if( p->aColName==0 ) return;
61065 while( n-- > 0 ){
61066 pColName->flags = MEM_Null;
61067 pColName->db = p->db;
61068 pColName++;
61073 ** Set the name of the idx'th column to be returned by the SQL statement.
61074 ** zName must be a pointer to a nul terminated string.
61076 ** This call must be made after a call to sqlite3VdbeSetNumCols().
61078 ** The final parameter, xDel, must be one of SQLITE_DYNAMIC, SQLITE_STATIC
61079 ** or SQLITE_TRANSIENT. If it is SQLITE_DYNAMIC, then the buffer pointed
61080 ** to by zName will be freed by sqlite3DbFree() when the vdbe is destroyed.
61082 SQLITE_PRIVATE int sqlite3VdbeSetColName(
61083 Vdbe *p, /* Vdbe being configured */
61084 int idx, /* Index of column zName applies to */
61085 int var, /* One of the COLNAME_* constants */
61086 const char *zName, /* Pointer to buffer containing name */
61087 void (*xDel)(void*) /* Memory management strategy for zName */
61089 int rc;
61090 Mem *pColName;
61091 assert( idx<p->nResColumn );
61092 assert( var<COLNAME_N );
61093 if( p->db->mallocFailed ){
61094 assert( !zName || xDel!=SQLITE_DYNAMIC );
61095 return SQLITE_NOMEM;
61097 assert( p->aColName!=0 );
61098 pColName = &(p->aColName[idx+var*p->nResColumn]);
61099 rc = sqlite3VdbeMemSetStr(pColName, zName, -1, SQLITE_UTF8, xDel);
61100 assert( rc!=0 || !zName || (pColName->flags&MEM_Term)!=0 );
61101 return rc;
61105 ** A read or write transaction may or may not be active on database handle
61106 ** db. If a transaction is active, commit it. If there is a
61107 ** write-transaction spanning more than one database file, this routine
61108 ** takes care of the master journal trickery.
61110 static int vdbeCommit(sqlite3 *db, Vdbe *p){
61111 int i;
61112 int nTrans = 0; /* Number of databases with an active write-transaction */
61113 int rc = SQLITE_OK;
61114 int needXcommit = 0;
61116 #ifdef SQLITE_OMIT_VIRTUALTABLE
61117 /* With this option, sqlite3VtabSync() is defined to be simply
61118 ** SQLITE_OK so p is not used.
61120 UNUSED_PARAMETER(p);
61121 #endif
61123 /* Before doing anything else, call the xSync() callback for any
61124 ** virtual module tables written in this transaction. This has to
61125 ** be done before determining whether a master journal file is
61126 ** required, as an xSync() callback may add an attached database
61127 ** to the transaction.
61129 rc = sqlite3VtabSync(db, &p->zErrMsg);
61131 /* This loop determines (a) if the commit hook should be invoked and
61132 ** (b) how many database files have open write transactions, not
61133 ** including the temp database. (b) is important because if more than
61134 ** one database file has an open write transaction, a master journal
61135 ** file is required for an atomic commit.
61137 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
61138 Btree *pBt = db->aDb[i].pBt;
61139 if( sqlite3BtreeIsInTrans(pBt) ){
61140 needXcommit = 1;
61141 if( i!=1 ) nTrans++;
61142 rc = sqlite3PagerExclusiveLock(sqlite3BtreePager(pBt));
61145 if( rc!=SQLITE_OK ){
61146 return rc;
61149 /* If there are any write-transactions at all, invoke the commit hook */
61150 if( needXcommit && db->xCommitCallback ){
61151 rc = db->xCommitCallback(db->pCommitArg);
61152 if( rc ){
61153 return SQLITE_CONSTRAINT;
61157 /* The simple case - no more than one database file (not counting the
61158 ** TEMP database) has a transaction active. There is no need for the
61159 ** master-journal.
61161 ** If the return value of sqlite3BtreeGetFilename() is a zero length
61162 ** string, it means the main database is :memory: or a temp file. In
61163 ** that case we do not support atomic multi-file commits, so use the
61164 ** simple case then too.
61166 if( 0==sqlite3Strlen30(sqlite3BtreeGetFilename(db->aDb[0].pBt))
61167 || nTrans<=1
61169 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
61170 Btree *pBt = db->aDb[i].pBt;
61171 if( pBt ){
61172 rc = sqlite3BtreeCommitPhaseOne(pBt, 0);
61176 /* Do the commit only if all databases successfully complete phase 1.
61177 ** If one of the BtreeCommitPhaseOne() calls fails, this indicates an
61178 ** IO error while deleting or truncating a journal file. It is unlikely,
61179 ** but could happen. In this case abandon processing and return the error.
61181 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
61182 Btree *pBt = db->aDb[i].pBt;
61183 if( pBt ){
61184 rc = sqlite3BtreeCommitPhaseTwo(pBt, 0);
61187 if( rc==SQLITE_OK ){
61188 sqlite3VtabCommit(db);
61192 /* The complex case - There is a multi-file write-transaction active.
61193 ** This requires a master journal file to ensure the transaction is
61194 ** committed atomicly.
61196 #ifndef SQLITE_OMIT_DISKIO
61197 else{
61198 sqlite3_vfs *pVfs = db->pVfs;
61199 int needSync = 0;
61200 char *zMaster = 0; /* File-name for the master journal */
61201 char const *zMainFile = sqlite3BtreeGetFilename(db->aDb[0].pBt);
61202 sqlite3_file *pMaster = 0;
61203 i64 offset = 0;
61204 int res;
61205 int retryCount = 0;
61206 int nMainFile;
61208 /* Select a master journal file name */
61209 nMainFile = sqlite3Strlen30(zMainFile);
61210 zMaster = sqlite3MPrintf(db, "%s-mjXXXXXX9XXz", zMainFile);
61211 if( zMaster==0 ) return SQLITE_NOMEM;
61212 do {
61213 u32 iRandom;
61214 if( retryCount ){
61215 if( retryCount>100 ){
61216 sqlite3_log(SQLITE_FULL, "MJ delete: %s", zMaster);
61217 sqlite3OsDelete(pVfs, zMaster, 0);
61218 break;
61219 }else if( retryCount==1 ){
61220 sqlite3_log(SQLITE_FULL, "MJ collide: %s", zMaster);
61223 retryCount++;
61224 sqlite3_randomness(sizeof(iRandom), &iRandom);
61225 sqlite3_snprintf(13, &zMaster[nMainFile], "-mj%06X9%02X",
61226 (iRandom>>8)&0xffffff, iRandom&0xff);
61227 /* The antipenultimate character of the master journal name must
61228 ** be "9" to avoid name collisions when using 8+3 filenames. */
61229 assert( zMaster[sqlite3Strlen30(zMaster)-3]=='9' );
61230 sqlite3FileSuffix3(zMainFile, zMaster);
61231 rc = sqlite3OsAccess(pVfs, zMaster, SQLITE_ACCESS_EXISTS, &res);
61232 }while( rc==SQLITE_OK && res );
61233 if( rc==SQLITE_OK ){
61234 /* Open the master journal. */
61235 rc = sqlite3OsOpenMalloc(pVfs, zMaster, &pMaster,
61236 SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE|
61237 SQLITE_OPEN_EXCLUSIVE|SQLITE_OPEN_MASTER_JOURNAL, 0
61240 if( rc!=SQLITE_OK ){
61241 sqlite3DbFree(db, zMaster);
61242 return rc;
61245 /* Write the name of each database file in the transaction into the new
61246 ** master journal file. If an error occurs at this point close
61247 ** and delete the master journal file. All the individual journal files
61248 ** still have 'null' as the master journal pointer, so they will roll
61249 ** back independently if a failure occurs.
61251 for(i=0; i<db->nDb; i++){
61252 Btree *pBt = db->aDb[i].pBt;
61253 if( sqlite3BtreeIsInTrans(pBt) ){
61254 char const *zFile = sqlite3BtreeGetJournalname(pBt);
61255 if( zFile==0 ){
61256 continue; /* Ignore TEMP and :memory: databases */
61258 assert( zFile[0]!=0 );
61259 if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){
61260 needSync = 1;
61262 rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset);
61263 offset += sqlite3Strlen30(zFile)+1;
61264 if( rc!=SQLITE_OK ){
61265 sqlite3OsCloseFree(pMaster);
61266 sqlite3OsDelete(pVfs, zMaster, 0);
61267 sqlite3DbFree(db, zMaster);
61268 return rc;
61273 /* Sync the master journal file. If the IOCAP_SEQUENTIAL device
61274 ** flag is set this is not required.
61276 if( needSync
61277 && 0==(sqlite3OsDeviceCharacteristics(pMaster)&SQLITE_IOCAP_SEQUENTIAL)
61278 && SQLITE_OK!=(rc = sqlite3OsSync(pMaster, SQLITE_SYNC_NORMAL))
61280 sqlite3OsCloseFree(pMaster);
61281 sqlite3OsDelete(pVfs, zMaster, 0);
61282 sqlite3DbFree(db, zMaster);
61283 return rc;
61286 /* Sync all the db files involved in the transaction. The same call
61287 ** sets the master journal pointer in each individual journal. If
61288 ** an error occurs here, do not delete the master journal file.
61290 ** If the error occurs during the first call to
61291 ** sqlite3BtreeCommitPhaseOne(), then there is a chance that the
61292 ** master journal file will be orphaned. But we cannot delete it,
61293 ** in case the master journal file name was written into the journal
61294 ** file before the failure occurred.
61296 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
61297 Btree *pBt = db->aDb[i].pBt;
61298 if( pBt ){
61299 rc = sqlite3BtreeCommitPhaseOne(pBt, zMaster);
61302 sqlite3OsCloseFree(pMaster);
61303 assert( rc!=SQLITE_BUSY );
61304 if( rc!=SQLITE_OK ){
61305 sqlite3DbFree(db, zMaster);
61306 return rc;
61309 /* Delete the master journal file. This commits the transaction. After
61310 ** doing this the directory is synced again before any individual
61311 ** transaction files are deleted.
61313 rc = sqlite3OsDelete(pVfs, zMaster, 1);
61314 sqlite3DbFree(db, zMaster);
61315 zMaster = 0;
61316 if( rc ){
61317 return rc;
61320 /* All files and directories have already been synced, so the following
61321 ** calls to sqlite3BtreeCommitPhaseTwo() are only closing files and
61322 ** deleting or truncating journals. If something goes wrong while
61323 ** this is happening we don't really care. The integrity of the
61324 ** transaction is already guaranteed, but some stray 'cold' journals
61325 ** may be lying around. Returning an error code won't help matters.
61327 disable_simulated_io_errors();
61328 sqlite3BeginBenignMalloc();
61329 for(i=0; i<db->nDb; i++){
61330 Btree *pBt = db->aDb[i].pBt;
61331 if( pBt ){
61332 sqlite3BtreeCommitPhaseTwo(pBt, 1);
61335 sqlite3EndBenignMalloc();
61336 enable_simulated_io_errors();
61338 sqlite3VtabCommit(db);
61340 #endif
61342 return rc;
61346 ** This routine checks that the sqlite3.activeVdbeCnt count variable
61347 ** matches the number of vdbe's in the list sqlite3.pVdbe that are
61348 ** currently active. An assertion fails if the two counts do not match.
61349 ** This is an internal self-check only - it is not an essential processing
61350 ** step.
61352 ** This is a no-op if NDEBUG is defined.
61354 #ifndef NDEBUG
61355 static void checkActiveVdbeCnt(sqlite3 *db){
61356 Vdbe *p;
61357 int cnt = 0;
61358 int nWrite = 0;
61359 p = db->pVdbe;
61360 while( p ){
61361 if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){
61362 cnt++;
61363 if( p->readOnly==0 ) nWrite++;
61365 p = p->pNext;
61367 assert( cnt==db->activeVdbeCnt );
61368 assert( nWrite==db->writeVdbeCnt );
61370 #else
61371 #define checkActiveVdbeCnt(x)
61372 #endif
61375 ** For every Btree that in database connection db which
61376 ** has been modified, "trip" or invalidate each cursor in
61377 ** that Btree might have been modified so that the cursor
61378 ** can never be used again. This happens when a rollback
61379 *** occurs. We have to trip all the other cursors, even
61380 ** cursor from other VMs in different database connections,
61381 ** so that none of them try to use the data at which they
61382 ** were pointing and which now may have been changed due
61383 ** to the rollback.
61385 ** Remember that a rollback can delete tables complete and
61386 ** reorder rootpages. So it is not sufficient just to save
61387 ** the state of the cursor. We have to invalidate the cursor
61388 ** so that it is never used again.
61390 static void invalidateCursorsOnModifiedBtrees(sqlite3 *db){
61391 int i;
61392 for(i=0; i<db->nDb; i++){
61393 Btree *p = db->aDb[i].pBt;
61394 if( p && sqlite3BtreeIsInTrans(p) ){
61395 sqlite3BtreeTripAllCursors(p, SQLITE_ABORT);
61401 ** If the Vdbe passed as the first argument opened a statement-transaction,
61402 ** close it now. Argument eOp must be either SAVEPOINT_ROLLBACK or
61403 ** SAVEPOINT_RELEASE. If it is SAVEPOINT_ROLLBACK, then the statement
61404 ** transaction is rolled back. If eOp is SAVEPOINT_RELEASE, then the
61405 ** statement transaction is commtted.
61407 ** If an IO error occurs, an SQLITE_IOERR_XXX error code is returned.
61408 ** Otherwise SQLITE_OK.
61410 SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *p, int eOp){
61411 sqlite3 *const db = p->db;
61412 int rc = SQLITE_OK;
61414 /* If p->iStatement is greater than zero, then this Vdbe opened a
61415 ** statement transaction that should be closed here. The only exception
61416 ** is that an IO error may have occured, causing an emergency rollback.
61417 ** In this case (db->nStatement==0), and there is nothing to do.
61419 if( db->nStatement && p->iStatement ){
61420 int i;
61421 const int iSavepoint = p->iStatement-1;
61423 assert( eOp==SAVEPOINT_ROLLBACK || eOp==SAVEPOINT_RELEASE);
61424 assert( db->nStatement>0 );
61425 assert( p->iStatement==(db->nStatement+db->nSavepoint) );
61427 for(i=0; i<db->nDb; i++){
61428 int rc2 = SQLITE_OK;
61429 Btree *pBt = db->aDb[i].pBt;
61430 if( pBt ){
61431 if( eOp==SAVEPOINT_ROLLBACK ){
61432 rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_ROLLBACK, iSavepoint);
61434 if( rc2==SQLITE_OK ){
61435 rc2 = sqlite3BtreeSavepoint(pBt, SAVEPOINT_RELEASE, iSavepoint);
61437 if( rc==SQLITE_OK ){
61438 rc = rc2;
61442 db->nStatement--;
61443 p->iStatement = 0;
61445 if( rc==SQLITE_OK ){
61446 if( eOp==SAVEPOINT_ROLLBACK ){
61447 rc = sqlite3VtabSavepoint(db, SAVEPOINT_ROLLBACK, iSavepoint);
61449 if( rc==SQLITE_OK ){
61450 rc = sqlite3VtabSavepoint(db, SAVEPOINT_RELEASE, iSavepoint);
61454 /* If the statement transaction is being rolled back, also restore the
61455 ** database handles deferred constraint counter to the value it had when
61456 ** the statement transaction was opened. */
61457 if( eOp==SAVEPOINT_ROLLBACK ){
61458 db->nDeferredCons = p->nStmtDefCons;
61461 return rc;
61465 ** This function is called when a transaction opened by the database
61466 ** handle associated with the VM passed as an argument is about to be
61467 ** committed. If there are outstanding deferred foreign key constraint
61468 ** violations, return SQLITE_ERROR. Otherwise, SQLITE_OK.
61470 ** If there are outstanding FK violations and this function returns
61471 ** SQLITE_ERROR, set the result of the VM to SQLITE_CONSTRAINT and write
61472 ** an error message to it. Then return SQLITE_ERROR.
61474 #ifndef SQLITE_OMIT_FOREIGN_KEY
61475 SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *p, int deferred){
61476 sqlite3 *db = p->db;
61477 if( (deferred && db->nDeferredCons>0) || (!deferred && p->nFkConstraint>0) ){
61478 p->rc = SQLITE_CONSTRAINT;
61479 p->errorAction = OE_Abort;
61480 sqlite3SetString(&p->zErrMsg, db, "foreign key constraint failed");
61481 return SQLITE_ERROR;
61483 return SQLITE_OK;
61485 #endif
61488 ** This routine is called the when a VDBE tries to halt. If the VDBE
61489 ** has made changes and is in autocommit mode, then commit those
61490 ** changes. If a rollback is needed, then do the rollback.
61492 ** This routine is the only way to move the state of a VM from
61493 ** SQLITE_MAGIC_RUN to SQLITE_MAGIC_HALT. It is harmless to
61494 ** call this on a VM that is in the SQLITE_MAGIC_HALT state.
61496 ** Return an error code. If the commit could not complete because of
61497 ** lock contention, return SQLITE_BUSY. If SQLITE_BUSY is returned, it
61498 ** means the close did not happen and needs to be repeated.
61500 SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe *p){
61501 int rc; /* Used to store transient return codes */
61502 sqlite3 *db = p->db;
61504 /* This function contains the logic that determines if a statement or
61505 ** transaction will be committed or rolled back as a result of the
61506 ** execution of this virtual machine.
61508 ** If any of the following errors occur:
61510 ** SQLITE_NOMEM
61511 ** SQLITE_IOERR
61512 ** SQLITE_FULL
61513 ** SQLITE_INTERRUPT
61515 ** Then the internal cache might have been left in an inconsistent
61516 ** state. We need to rollback the statement transaction, if there is
61517 ** one, or the complete transaction if there is no statement transaction.
61520 if( p->db->mallocFailed ){
61521 p->rc = SQLITE_NOMEM;
61523 if( p->aOnceFlag ) memset(p->aOnceFlag, 0, p->nOnceFlag);
61524 closeAllCursors(p);
61525 if( p->magic!=VDBE_MAGIC_RUN ){
61526 return SQLITE_OK;
61528 checkActiveVdbeCnt(db);
61530 /* No commit or rollback needed if the program never started */
61531 if( p->pc>=0 ){
61532 int mrc; /* Primary error code from p->rc */
61533 int eStatementOp = 0;
61534 int isSpecialError; /* Set to true if a 'special' error */
61536 /* Lock all btrees used by the statement */
61537 sqlite3VdbeEnter(p);
61539 /* Check for one of the special errors */
61540 mrc = p->rc & 0xff;
61541 assert( p->rc!=SQLITE_IOERR_BLOCKED ); /* This error no longer exists */
61542 isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR
61543 || mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL;
61544 if( isSpecialError ){
61545 /* If the query was read-only and the error code is SQLITE_INTERRUPT,
61546 ** no rollback is necessary. Otherwise, at least a savepoint
61547 ** transaction must be rolled back to restore the database to a
61548 ** consistent state.
61550 ** Even if the statement is read-only, it is important to perform
61551 ** a statement or transaction rollback operation. If the error
61552 ** occured while writing to the journal, sub-journal or database
61553 ** file as part of an effort to free up cache space (see function
61554 ** pagerStress() in pager.c), the rollback is required to restore
61555 ** the pager to a consistent state.
61557 if( !p->readOnly || mrc!=SQLITE_INTERRUPT ){
61558 if( (mrc==SQLITE_NOMEM || mrc==SQLITE_FULL) && p->usesStmtJournal ){
61559 eStatementOp = SAVEPOINT_ROLLBACK;
61560 }else{
61561 /* We are forced to roll back the active transaction. Before doing
61562 ** so, abort any other statements this handle currently has active.
61564 invalidateCursorsOnModifiedBtrees(db);
61565 sqlite3RollbackAll(db);
61566 sqlite3CloseSavepoints(db);
61567 db->autoCommit = 1;
61572 /* Check for immediate foreign key violations. */
61573 if( p->rc==SQLITE_OK ){
61574 sqlite3VdbeCheckFk(p, 0);
61577 /* If the auto-commit flag is set and this is the only active writer
61578 ** VM, then we do either a commit or rollback of the current transaction.
61580 ** Note: This block also runs if one of the special errors handled
61581 ** above has occurred.
61583 if( !sqlite3VtabInSync(db)
61584 && db->autoCommit
61585 && db->writeVdbeCnt==(p->readOnly==0)
61587 if( p->rc==SQLITE_OK || (p->errorAction==OE_Fail && !isSpecialError) ){
61588 rc = sqlite3VdbeCheckFk(p, 1);
61589 if( rc!=SQLITE_OK ){
61590 if( NEVER(p->readOnly) ){
61591 sqlite3VdbeLeave(p);
61592 return SQLITE_ERROR;
61594 rc = SQLITE_CONSTRAINT;
61595 }else{
61596 /* The auto-commit flag is true, the vdbe program was successful
61597 ** or hit an 'OR FAIL' constraint and there are no deferred foreign
61598 ** key constraints to hold up the transaction. This means a commit
61599 ** is required. */
61600 rc = vdbeCommit(db, p);
61602 if( rc==SQLITE_BUSY && p->readOnly ){
61603 sqlite3VdbeLeave(p);
61604 return SQLITE_BUSY;
61605 }else if( rc!=SQLITE_OK ){
61606 p->rc = rc;
61607 sqlite3RollbackAll(db);
61608 }else{
61609 db->nDeferredCons = 0;
61610 sqlite3CommitInternalChanges(db);
61612 }else{
61613 sqlite3RollbackAll(db);
61615 db->nStatement = 0;
61616 }else if( eStatementOp==0 ){
61617 if( p->rc==SQLITE_OK || p->errorAction==OE_Fail ){
61618 eStatementOp = SAVEPOINT_RELEASE;
61619 }else if( p->errorAction==OE_Abort ){
61620 eStatementOp = SAVEPOINT_ROLLBACK;
61621 }else{
61622 invalidateCursorsOnModifiedBtrees(db);
61623 sqlite3RollbackAll(db);
61624 sqlite3CloseSavepoints(db);
61625 db->autoCommit = 1;
61629 /* If eStatementOp is non-zero, then a statement transaction needs to
61630 ** be committed or rolled back. Call sqlite3VdbeCloseStatement() to
61631 ** do so. If this operation returns an error, and the current statement
61632 ** error code is SQLITE_OK or SQLITE_CONSTRAINT, then promote the
61633 ** current statement error code.
61635 if( eStatementOp ){
61636 rc = sqlite3VdbeCloseStatement(p, eStatementOp);
61637 if( rc ){
61638 if( p->rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT ){
61639 p->rc = rc;
61640 sqlite3DbFree(db, p->zErrMsg);
61641 p->zErrMsg = 0;
61643 invalidateCursorsOnModifiedBtrees(db);
61644 sqlite3RollbackAll(db);
61645 sqlite3CloseSavepoints(db);
61646 db->autoCommit = 1;
61650 /* If this was an INSERT, UPDATE or DELETE and no statement transaction
61651 ** has been rolled back, update the database connection change-counter.
61653 if( p->changeCntOn ){
61654 if( eStatementOp!=SAVEPOINT_ROLLBACK ){
61655 sqlite3VdbeSetChanges(db, p->nChange);
61656 }else{
61657 sqlite3VdbeSetChanges(db, 0);
61659 p->nChange = 0;
61662 /* Rollback or commit any schema changes that occurred. */
61663 if( p->rc!=SQLITE_OK && db->flags&SQLITE_InternChanges ){
61664 sqlite3ResetInternalSchema(db, -1);
61665 db->flags = (db->flags | SQLITE_InternChanges);
61668 /* Release the locks */
61669 sqlite3VdbeLeave(p);
61672 /* We have successfully halted and closed the VM. Record this fact. */
61673 if( p->pc>=0 ){
61674 db->activeVdbeCnt--;
61675 if( !p->readOnly ){
61676 db->writeVdbeCnt--;
61678 assert( db->activeVdbeCnt>=db->writeVdbeCnt );
61680 p->magic = VDBE_MAGIC_HALT;
61681 checkActiveVdbeCnt(db);
61682 if( p->db->mallocFailed ){
61683 p->rc = SQLITE_NOMEM;
61686 /* If the auto-commit flag is set to true, then any locks that were held
61687 ** by connection db have now been released. Call sqlite3ConnectionUnlocked()
61688 ** to invoke any required unlock-notify callbacks.
61690 if( db->autoCommit ){
61691 sqlite3ConnectionUnlocked(db);
61694 assert( db->activeVdbeCnt>0 || db->autoCommit==0 || db->nStatement==0 );
61695 return (p->rc==SQLITE_BUSY ? SQLITE_BUSY : SQLITE_OK);
61700 ** Each VDBE holds the result of the most recent sqlite3_step() call
61701 ** in p->rc. This routine sets that result back to SQLITE_OK.
61703 SQLITE_PRIVATE void sqlite3VdbeResetStepResult(Vdbe *p){
61704 p->rc = SQLITE_OK;
61708 ** Copy the error code and error message belonging to the VDBE passed
61709 ** as the first argument to its database handle (so that they will be
61710 ** returned by calls to sqlite3_errcode() and sqlite3_errmsg()).
61712 ** This function does not clear the VDBE error code or message, just
61713 ** copies them to the database handle.
61715 SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){
61716 sqlite3 *db = p->db;
61717 int rc = p->rc;
61718 if( p->zErrMsg ){
61719 u8 mallocFailed = db->mallocFailed;
61720 sqlite3BeginBenignMalloc();
61721 sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT);
61722 sqlite3EndBenignMalloc();
61723 db->mallocFailed = mallocFailed;
61724 db->errCode = rc;
61725 }else{
61726 sqlite3Error(db, rc, 0);
61728 return rc;
61732 ** Clean up a VDBE after execution but do not delete the VDBE just yet.
61733 ** Write any error messages into *pzErrMsg. Return the result code.
61735 ** After this routine is run, the VDBE should be ready to be executed
61736 ** again.
61738 ** To look at it another way, this routine resets the state of the
61739 ** virtual machine from VDBE_MAGIC_RUN or VDBE_MAGIC_HALT back to
61740 ** VDBE_MAGIC_INIT.
61742 SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
61743 sqlite3 *db;
61744 db = p->db;
61746 /* If the VM did not run to completion or if it encountered an
61747 ** error, then it might not have been halted properly. So halt
61748 ** it now.
61750 sqlite3VdbeHalt(p);
61752 /* If the VDBE has be run even partially, then transfer the error code
61753 ** and error message from the VDBE into the main database structure. But
61754 ** if the VDBE has just been set to run but has not actually executed any
61755 ** instructions yet, leave the main database error information unchanged.
61757 if( p->pc>=0 ){
61758 sqlite3VdbeTransferError(p);
61759 sqlite3DbFree(db, p->zErrMsg);
61760 p->zErrMsg = 0;
61761 if( p->runOnlyOnce ) p->expired = 1;
61762 }else if( p->rc && p->expired ){
61763 /* The expired flag was set on the VDBE before the first call
61764 ** to sqlite3_step(). For consistency (since sqlite3_step() was
61765 ** called), set the database error in this case as well.
61767 sqlite3Error(db, p->rc, 0);
61768 sqlite3ValueSetStr(db->pErr, -1, p->zErrMsg, SQLITE_UTF8, SQLITE_TRANSIENT);
61769 sqlite3DbFree(db, p->zErrMsg);
61770 p->zErrMsg = 0;
61773 /* Reclaim all memory used by the VDBE
61775 Cleanup(p);
61777 /* Save profiling information from this VDBE run.
61779 #ifdef VDBE_PROFILE
61781 FILE *out = fopen("vdbe_profile.out", "a");
61782 if( out ){
61783 int i;
61784 fprintf(out, "---- ");
61785 for(i=0; i<p->nOp; i++){
61786 fprintf(out, "%02x", p->aOp[i].opcode);
61788 fprintf(out, "\n");
61789 for(i=0; i<p->nOp; i++){
61790 fprintf(out, "%6d %10lld %8lld ",
61791 p->aOp[i].cnt,
61792 p->aOp[i].cycles,
61793 p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
61795 sqlite3VdbePrintOp(out, i, &p->aOp[i]);
61797 fclose(out);
61800 #endif
61801 p->magic = VDBE_MAGIC_INIT;
61802 return p->rc & db->errMask;
61806 ** Clean up and delete a VDBE after execution. Return an integer which is
61807 ** the result code. Write any error message text into *pzErrMsg.
61809 SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){
61810 int rc = SQLITE_OK;
61811 if( p->magic==VDBE_MAGIC_RUN || p->magic==VDBE_MAGIC_HALT ){
61812 rc = sqlite3VdbeReset(p);
61813 assert( (rc & p->db->errMask)==rc );
61815 sqlite3VdbeDelete(p);
61816 return rc;
61820 ** Call the destructor for each auxdata entry in pVdbeFunc for which
61821 ** the corresponding bit in mask is clear. Auxdata entries beyond 31
61822 ** are always destroyed. To destroy all auxdata entries, call this
61823 ** routine with mask==0.
61825 SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(VdbeFunc *pVdbeFunc, int mask){
61826 int i;
61827 for(i=0; i<pVdbeFunc->nAux; i++){
61828 struct AuxData *pAux = &pVdbeFunc->apAux[i];
61829 if( (i>31 || !(mask&(((u32)1)<<i))) && pAux->pAux ){
61830 if( pAux->xDelete ){
61831 pAux->xDelete(pAux->pAux);
61833 pAux->pAux = 0;
61839 ** Free all memory associated with the Vdbe passed as the second argument.
61840 ** The difference between this function and sqlite3VdbeDelete() is that
61841 ** VdbeDelete() also unlinks the Vdbe from the list of VMs associated with
61842 ** the database connection.
61844 SQLITE_PRIVATE void sqlite3VdbeDeleteObject(sqlite3 *db, Vdbe *p){
61845 SubProgram *pSub, *pNext;
61846 int i;
61847 assert( p->db==0 || p->db==db );
61848 releaseMemArray(p->aVar, p->nVar);
61849 releaseMemArray(p->aColName, p->nResColumn*COLNAME_N);
61850 for(pSub=p->pProgram; pSub; pSub=pNext){
61851 pNext = pSub->pNext;
61852 vdbeFreeOpArray(db, pSub->aOp, pSub->nOp);
61853 sqlite3DbFree(db, pSub);
61855 for(i=p->nzVar-1; i>=0; i--) sqlite3DbFree(db, p->azVar[i]);
61856 vdbeFreeOpArray(db, p->aOp, p->nOp);
61857 sqlite3DbFree(db, p->aLabel);
61858 sqlite3DbFree(db, p->aColName);
61859 sqlite3DbFree(db, p->zSql);
61860 sqlite3DbFree(db, p->pFree);
61861 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
61862 sqlite3DbFree(db, p->zExplain);
61863 sqlite3DbFree(db, p->pExplain);
61864 #endif
61865 sqlite3DbFree(db, p);
61869 ** Delete an entire VDBE.
61871 SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
61872 sqlite3 *db;
61874 if( NEVER(p==0) ) return;
61875 db = p->db;
61876 if( p->pPrev ){
61877 p->pPrev->pNext = p->pNext;
61878 }else{
61879 assert( db->pVdbe==p );
61880 db->pVdbe = p->pNext;
61882 if( p->pNext ){
61883 p->pNext->pPrev = p->pPrev;
61885 p->magic = VDBE_MAGIC_DEAD;
61886 p->db = 0;
61887 sqlite3VdbeDeleteObject(db, p);
61891 ** Make sure the cursor p is ready to read or write the row to which it
61892 ** was last positioned. Return an error code if an OOM fault or I/O error
61893 ** prevents us from positioning the cursor to its correct position.
61895 ** If a MoveTo operation is pending on the given cursor, then do that
61896 ** MoveTo now. If no move is pending, check to see if the row has been
61897 ** deleted out from under the cursor and if it has, mark the row as
61898 ** a NULL row.
61900 ** If the cursor is already pointing to the correct row and that row has
61901 ** not been deleted out from under the cursor, then this routine is a no-op.
61903 SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){
61904 if( p->deferredMoveto ){
61905 int res, rc;
61906 #ifdef SQLITE_TEST
61907 extern int sqlite3_search_count;
61908 #endif
61909 assert( p->isTable );
61910 rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res);
61911 if( rc ) return rc;
61912 p->lastRowid = p->movetoTarget;
61913 if( res!=0 ) return SQLITE_CORRUPT_BKPT;
61914 p->rowidIsValid = 1;
61915 #ifdef SQLITE_TEST
61916 sqlite3_search_count++;
61917 #endif
61918 p->deferredMoveto = 0;
61919 p->cacheStatus = CACHE_STALE;
61920 }else if( ALWAYS(p->pCursor) ){
61921 int hasMoved;
61922 int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved);
61923 if( rc ) return rc;
61924 if( hasMoved ){
61925 p->cacheStatus = CACHE_STALE;
61926 p->nullRow = 1;
61929 return SQLITE_OK;
61933 ** The following functions:
61935 ** sqlite3VdbeSerialType()
61936 ** sqlite3VdbeSerialTypeLen()
61937 ** sqlite3VdbeSerialLen()
61938 ** sqlite3VdbeSerialPut()
61939 ** sqlite3VdbeSerialGet()
61941 ** encapsulate the code that serializes values for storage in SQLite
61942 ** data and index records. Each serialized value consists of a
61943 ** 'serial-type' and a blob of data. The serial type is an 8-byte unsigned
61944 ** integer, stored as a varint.
61946 ** In an SQLite index record, the serial type is stored directly before
61947 ** the blob of data that it corresponds to. In a table record, all serial
61948 ** types are stored at the start of the record, and the blobs of data at
61949 ** the end. Hence these functions allow the caller to handle the
61950 ** serial-type and data blob seperately.
61952 ** The following table describes the various storage classes for data:
61954 ** serial type bytes of data type
61955 ** -------------- --------------- ---------------
61956 ** 0 0 NULL
61957 ** 1 1 signed integer
61958 ** 2 2 signed integer
61959 ** 3 3 signed integer
61960 ** 4 4 signed integer
61961 ** 5 6 signed integer
61962 ** 6 8 signed integer
61963 ** 7 8 IEEE float
61964 ** 8 0 Integer constant 0
61965 ** 9 0 Integer constant 1
61966 ** 10,11 reserved for expansion
61967 ** N>=12 and even (N-12)/2 BLOB
61968 ** N>=13 and odd (N-13)/2 text
61970 ** The 8 and 9 types were added in 3.3.0, file format 4. Prior versions
61971 ** of SQLite will not understand those serial types.
61975 ** Return the serial-type for the value stored in pMem.
61977 SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
61978 int flags = pMem->flags;
61979 int n;
61981 if( flags&MEM_Null ){
61982 return 0;
61984 if( flags&MEM_Int ){
61985 /* Figure out whether to use 1, 2, 4, 6 or 8 bytes. */
61986 # define MAX_6BYTE ((((i64)0x00008000)<<32)-1)
61987 i64 i = pMem->u.i;
61988 u64 u;
61989 if( file_format>=4 && (i&1)==i ){
61990 return 8+(u32)i;
61992 if( i<0 ){
61993 if( i<(-MAX_6BYTE) ) return 6;
61994 /* Previous test prevents: u = -(-9223372036854775808) */
61995 u = -i;
61996 }else{
61997 u = i;
61999 if( u<=127 ) return 1;
62000 if( u<=32767 ) return 2;
62001 if( u<=8388607 ) return 3;
62002 if( u<=2147483647 ) return 4;
62003 if( u<=MAX_6BYTE ) return 5;
62004 return 6;
62006 if( flags&MEM_Real ){
62007 return 7;
62009 assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) );
62010 n = pMem->n;
62011 if( flags & MEM_Zero ){
62012 n += pMem->u.nZero;
62014 assert( n>=0 );
62015 return ((n*2) + 12 + ((flags&MEM_Str)!=0));
62019 ** Return the length of the data corresponding to the supplied serial-type.
62021 SQLITE_PRIVATE u32 sqlite3VdbeSerialTypeLen(u32 serial_type){
62022 if( serial_type>=12 ){
62023 return (serial_type-12)/2;
62024 }else{
62025 static const u8 aSize[] = { 0, 1, 2, 3, 4, 6, 8, 8, 0, 0, 0, 0 };
62026 return aSize[serial_type];
62031 ** If we are on an architecture with mixed-endian floating
62032 ** points (ex: ARM7) then swap the lower 4 bytes with the
62033 ** upper 4 bytes. Return the result.
62035 ** For most architectures, this is a no-op.
62037 ** (later): It is reported to me that the mixed-endian problem
62038 ** on ARM7 is an issue with GCC, not with the ARM7 chip. It seems
62039 ** that early versions of GCC stored the two words of a 64-bit
62040 ** float in the wrong order. And that error has been propagated
62041 ** ever since. The blame is not necessarily with GCC, though.
62042 ** GCC might have just copying the problem from a prior compiler.
62043 ** I am also told that newer versions of GCC that follow a different
62044 ** ABI get the byte order right.
62046 ** Developers using SQLite on an ARM7 should compile and run their
62047 ** application using -DSQLITE_DEBUG=1 at least once. With DEBUG
62048 ** enabled, some asserts below will ensure that the byte order of
62049 ** floating point values is correct.
62051 ** (2007-08-30) Frank van Vugt has studied this problem closely
62052 ** and has send his findings to the SQLite developers. Frank
62053 ** writes that some Linux kernels offer floating point hardware
62054 ** emulation that uses only 32-bit mantissas instead of a full
62055 ** 48-bits as required by the IEEE standard. (This is the
62056 ** CONFIG_FPE_FASTFPE option.) On such systems, floating point
62057 ** byte swapping becomes very complicated. To avoid problems,
62058 ** the necessary byte swapping is carried out using a 64-bit integer
62059 ** rather than a 64-bit float. Frank assures us that the code here
62060 ** works for him. We, the developers, have no way to independently
62061 ** verify this, but Frank seems to know what he is talking about
62062 ** so we trust him.
62064 #ifdef SQLITE_MIXED_ENDIAN_64BIT_FLOAT
62065 static u64 floatSwap(u64 in){
62066 union {
62067 u64 r;
62068 u32 i[2];
62069 } u;
62070 u32 t;
62072 u.r = in;
62073 t = u.i[0];
62074 u.i[0] = u.i[1];
62075 u.i[1] = t;
62076 return u.r;
62078 # define swapMixedEndianFloat(X) X = floatSwap(X)
62079 #else
62080 # define swapMixedEndianFloat(X)
62081 #endif
62084 ** Write the serialized data blob for the value stored in pMem into
62085 ** buf. It is assumed that the caller has allocated sufficient space.
62086 ** Return the number of bytes written.
62088 ** nBuf is the amount of space left in buf[]. nBuf must always be
62089 ** large enough to hold the entire field. Except, if the field is
62090 ** a blob with a zero-filled tail, then buf[] might be just the right
62091 ** size to hold everything except for the zero-filled tail. If buf[]
62092 ** is only big enough to hold the non-zero prefix, then only write that
62093 ** prefix into buf[]. But if buf[] is large enough to hold both the
62094 ** prefix and the tail then write the prefix and set the tail to all
62095 ** zeros.
62097 ** Return the number of bytes actually written into buf[]. The number
62098 ** of bytes in the zero-filled tail is included in the return value only
62099 ** if those bytes were zeroed in buf[].
62101 SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, int nBuf, Mem *pMem, int file_format){
62102 u32 serial_type = sqlite3VdbeSerialType(pMem, file_format);
62103 u32 len;
62105 /* Integer and Real */
62106 if( serial_type<=7 && serial_type>0 ){
62107 u64 v;
62108 u32 i;
62109 if( serial_type==7 ){
62110 assert( sizeof(v)==sizeof(pMem->r) );
62111 memcpy(&v, &pMem->r, sizeof(v));
62112 swapMixedEndianFloat(v);
62113 }else{
62114 v = pMem->u.i;
62116 len = i = sqlite3VdbeSerialTypeLen(serial_type);
62117 assert( len<=(u32)nBuf );
62118 while( i-- ){
62119 buf[i] = (u8)(v&0xFF);
62120 v >>= 8;
62122 return len;
62125 /* String or blob */
62126 if( serial_type>=12 ){
62127 assert( pMem->n + ((pMem->flags & MEM_Zero)?pMem->u.nZero:0)
62128 == (int)sqlite3VdbeSerialTypeLen(serial_type) );
62129 assert( pMem->n<=nBuf );
62130 len = pMem->n;
62131 memcpy(buf, pMem->z, len);
62132 if( pMem->flags & MEM_Zero ){
62133 len += pMem->u.nZero;
62134 assert( nBuf>=0 );
62135 if( len > (u32)nBuf ){
62136 len = (u32)nBuf;
62138 memset(&buf[pMem->n], 0, len-pMem->n);
62140 return len;
62143 /* NULL or constants 0 or 1 */
62144 return 0;
62148 ** Deserialize the data blob pointed to by buf as serial type serial_type
62149 ** and store the result in pMem. Return the number of bytes read.
62151 SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
62152 const unsigned char *buf, /* Buffer to deserialize from */
62153 u32 serial_type, /* Serial type to deserialize */
62154 Mem *pMem /* Memory cell to write value into */
62156 switch( serial_type ){
62157 case 10: /* Reserved for future use */
62158 case 11: /* Reserved for future use */
62159 case 0: { /* NULL */
62160 pMem->flags = MEM_Null;
62161 break;
62163 case 1: { /* 1-byte signed integer */
62164 pMem->u.i = (signed char)buf[0];
62165 pMem->flags = MEM_Int;
62166 return 1;
62168 case 2: { /* 2-byte signed integer */
62169 pMem->u.i = (((signed char)buf[0])<<8) | buf[1];
62170 pMem->flags = MEM_Int;
62171 return 2;
62173 case 3: { /* 3-byte signed integer */
62174 pMem->u.i = (((signed char)buf[0])<<16) | (buf[1]<<8) | buf[2];
62175 pMem->flags = MEM_Int;
62176 return 3;
62178 case 4: { /* 4-byte signed integer */
62179 pMem->u.i = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
62180 pMem->flags = MEM_Int;
62181 return 4;
62183 case 5: { /* 6-byte signed integer */
62184 u64 x = (((signed char)buf[0])<<8) | buf[1];
62185 u32 y = (buf[2]<<24) | (buf[3]<<16) | (buf[4]<<8) | buf[5];
62186 x = (x<<32) | y;
62187 pMem->u.i = *(i64*)&x;
62188 pMem->flags = MEM_Int;
62189 return 6;
62191 case 6: /* 8-byte signed integer */
62192 case 7: { /* IEEE floating point */
62193 u64 x;
62194 u32 y;
62195 #if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
62196 /* Verify that integers and floating point values use the same
62197 ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
62198 ** defined that 64-bit floating point values really are mixed
62199 ** endian.
62201 static const u64 t1 = ((u64)0x3ff00000)<<32;
62202 static const double r1 = 1.0;
62203 u64 t2 = t1;
62204 swapMixedEndianFloat(t2);
62205 assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
62206 #endif
62208 x = (buf[0]<<24) | (buf[1]<<16) | (buf[2]<<8) | buf[3];
62209 y = (buf[4]<<24) | (buf[5]<<16) | (buf[6]<<8) | buf[7];
62210 x = (x<<32) | y;
62211 if( serial_type==6 ){
62212 pMem->u.i = *(i64*)&x;
62213 pMem->flags = MEM_Int;
62214 }else{
62215 assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
62216 swapMixedEndianFloat(x);
62217 memcpy(&pMem->r, &x, sizeof(x));
62218 pMem->flags = sqlite3IsNaN(pMem->r) ? MEM_Null : MEM_Real;
62220 return 8;
62222 case 8: /* Integer 0 */
62223 case 9: { /* Integer 1 */
62224 pMem->u.i = serial_type-8;
62225 pMem->flags = MEM_Int;
62226 return 0;
62228 default: {
62229 u32 len = (serial_type-12)/2;
62230 pMem->z = (char *)buf;
62231 pMem->n = len;
62232 pMem->xDel = 0;
62233 if( serial_type&0x01 ){
62234 pMem->flags = MEM_Str | MEM_Ephem;
62235 }else{
62236 pMem->flags = MEM_Blob | MEM_Ephem;
62238 return len;
62241 return 0;
62245 ** This routine is used to allocate sufficient space for an UnpackedRecord
62246 ** structure large enough to be used with sqlite3VdbeRecordUnpack() if
62247 ** the first argument is a pointer to KeyInfo structure pKeyInfo.
62249 ** The space is either allocated using sqlite3DbMallocRaw() or from within
62250 ** the unaligned buffer passed via the second and third arguments (presumably
62251 ** stack space). If the former, then *ppFree is set to a pointer that should
62252 ** be eventually freed by the caller using sqlite3DbFree(). Or, if the
62253 ** allocation comes from the pSpace/szSpace buffer, *ppFree is set to NULL
62254 ** before returning.
62256 ** If an OOM error occurs, NULL is returned.
62258 SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(
62259 KeyInfo *pKeyInfo, /* Description of the record */
62260 char *pSpace, /* Unaligned space available */
62261 int szSpace, /* Size of pSpace[] in bytes */
62262 char **ppFree /* OUT: Caller should free this pointer */
62264 UnpackedRecord *p; /* Unpacked record to return */
62265 int nOff; /* Increment pSpace by nOff to align it */
62266 int nByte; /* Number of bytes required for *p */
62268 /* We want to shift the pointer pSpace up such that it is 8-byte aligned.
62269 ** Thus, we need to calculate a value, nOff, between 0 and 7, to shift
62270 ** it by. If pSpace is already 8-byte aligned, nOff should be zero.
62272 nOff = (8 - (SQLITE_PTR_TO_INT(pSpace) & 7)) & 7;
62273 nByte = ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*(pKeyInfo->nField+1);
62274 if( nByte>szSpace+nOff ){
62275 p = (UnpackedRecord *)sqlite3DbMallocRaw(pKeyInfo->db, nByte);
62276 *ppFree = (char *)p;
62277 if( !p ) return 0;
62278 }else{
62279 p = (UnpackedRecord*)&pSpace[nOff];
62280 *ppFree = 0;
62283 p->aMem = (Mem*)&((char*)p)[ROUND8(sizeof(UnpackedRecord))];
62284 p->pKeyInfo = pKeyInfo;
62285 p->nField = pKeyInfo->nField + 1;
62286 return p;
62290 ** Given the nKey-byte encoding of a record in pKey[], populate the
62291 ** UnpackedRecord structure indicated by the fourth argument with the
62292 ** contents of the decoded record.
62294 SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(
62295 KeyInfo *pKeyInfo, /* Information about the record format */
62296 int nKey, /* Size of the binary record */
62297 const void *pKey, /* The binary record */
62298 UnpackedRecord *p /* Populate this structure before returning. */
62300 const unsigned char *aKey = (const unsigned char *)pKey;
62301 int d;
62302 u32 idx; /* Offset in aKey[] to read from */
62303 u16 u; /* Unsigned loop counter */
62304 u32 szHdr;
62305 Mem *pMem = p->aMem;
62307 p->flags = 0;
62308 assert( EIGHT_BYTE_ALIGNMENT(pMem) );
62309 idx = getVarint32(aKey, szHdr);
62310 d = szHdr;
62311 u = 0;
62312 while( idx<szHdr && u<p->nField && d<=nKey ){
62313 u32 serial_type;
62315 idx += getVarint32(&aKey[idx], serial_type);
62316 pMem->enc = pKeyInfo->enc;
62317 pMem->db = pKeyInfo->db;
62318 /* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */
62319 pMem->zMalloc = 0;
62320 d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
62321 pMem++;
62322 u++;
62324 assert( u<=pKeyInfo->nField + 1 );
62325 p->nField = u;
62329 ** This function compares the two table rows or index records
62330 ** specified by {nKey1, pKey1} and pPKey2. It returns a negative, zero
62331 ** or positive integer if key1 is less than, equal to or
62332 ** greater than key2. The {nKey1, pKey1} key must be a blob
62333 ** created by th OP_MakeRecord opcode of the VDBE. The pPKey2
62334 ** key must be a parsed key such as obtained from
62335 ** sqlite3VdbeParseRecord.
62337 ** Key1 and Key2 do not have to contain the same number of fields.
62338 ** The key with fewer fields is usually compares less than the
62339 ** longer key. However if the UNPACKED_INCRKEY flags in pPKey2 is set
62340 ** and the common prefixes are equal, then key1 is less than key2.
62341 ** Or if the UNPACKED_MATCH_PREFIX flag is set and the prefixes are
62342 ** equal, then the keys are considered to be equal and
62343 ** the parts beyond the common prefix are ignored.
62345 SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
62346 int nKey1, const void *pKey1, /* Left key */
62347 UnpackedRecord *pPKey2 /* Right key */
62349 int d1; /* Offset into aKey[] of next data element */
62350 u32 idx1; /* Offset into aKey[] of next header element */
62351 u32 szHdr1; /* Number of bytes in header */
62352 int i = 0;
62353 int nField;
62354 int rc = 0;
62355 const unsigned char *aKey1 = (const unsigned char *)pKey1;
62356 KeyInfo *pKeyInfo;
62357 Mem mem1;
62359 pKeyInfo = pPKey2->pKeyInfo;
62360 mem1.enc = pKeyInfo->enc;
62361 mem1.db = pKeyInfo->db;
62362 /* mem1.flags = 0; // Will be initialized by sqlite3VdbeSerialGet() */
62363 VVA_ONLY( mem1.zMalloc = 0; ) /* Only needed by assert() statements */
62365 /* Compilers may complain that mem1.u.i is potentially uninitialized.
62366 ** We could initialize it, as shown here, to silence those complaints.
62367 ** But in fact, mem1.u.i will never actually be used uninitialized, and doing
62368 ** the unnecessary initialization has a measurable negative performance
62369 ** impact, since this routine is a very high runner. And so, we choose
62370 ** to ignore the compiler warnings and leave this variable uninitialized.
62372 /* mem1.u.i = 0; // not needed, here to silence compiler warning */
62374 idx1 = getVarint32(aKey1, szHdr1);
62375 d1 = szHdr1;
62376 nField = pKeyInfo->nField;
62377 while( idx1<szHdr1 && i<pPKey2->nField ){
62378 u32 serial_type1;
62380 /* Read the serial types for the next element in each key. */
62381 idx1 += getVarint32( aKey1+idx1, serial_type1 );
62382 if( d1>=nKey1 && sqlite3VdbeSerialTypeLen(serial_type1)>0 ) break;
62384 /* Extract the values to be compared.
62386 d1 += sqlite3VdbeSerialGet(&aKey1[d1], serial_type1, &mem1);
62388 /* Do the comparison
62390 rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i],
62391 i<nField ? pKeyInfo->aColl[i] : 0);
62392 if( rc!=0 ){
62393 assert( mem1.zMalloc==0 ); /* See comment below */
62395 /* Invert the result if we are using DESC sort order. */
62396 if( pKeyInfo->aSortOrder && i<nField && pKeyInfo->aSortOrder[i] ){
62397 rc = -rc;
62400 /* If the PREFIX_SEARCH flag is set and all fields except the final
62401 ** rowid field were equal, then clear the PREFIX_SEARCH flag and set
62402 ** pPKey2->rowid to the value of the rowid field in (pKey1, nKey1).
62403 ** This is used by the OP_IsUnique opcode.
62405 if( (pPKey2->flags & UNPACKED_PREFIX_SEARCH) && i==(pPKey2->nField-1) ){
62406 assert( idx1==szHdr1 && rc );
62407 assert( mem1.flags & MEM_Int );
62408 pPKey2->flags &= ~UNPACKED_PREFIX_SEARCH;
62409 pPKey2->rowid = mem1.u.i;
62412 return rc;
62414 i++;
62417 /* No memory allocation is ever used on mem1. Prove this using
62418 ** the following assert(). If the assert() fails, it indicates a
62419 ** memory leak and a need to call sqlite3VdbeMemRelease(&mem1).
62421 assert( mem1.zMalloc==0 );
62423 /* rc==0 here means that one of the keys ran out of fields and
62424 ** all the fields up to that point were equal. If the UNPACKED_INCRKEY
62425 ** flag is set, then break the tie by treating key2 as larger.
62426 ** If the UPACKED_PREFIX_MATCH flag is set, then keys with common prefixes
62427 ** are considered to be equal. Otherwise, the longer key is the
62428 ** larger. As it happens, the pPKey2 will always be the longer
62429 ** if there is a difference.
62431 assert( rc==0 );
62432 if( pPKey2->flags & UNPACKED_INCRKEY ){
62433 rc = -1;
62434 }else if( pPKey2->flags & UNPACKED_PREFIX_MATCH ){
62435 /* Leave rc==0 */
62436 }else if( idx1<szHdr1 ){
62437 rc = 1;
62439 return rc;
62444 ** pCur points at an index entry created using the OP_MakeRecord opcode.
62445 ** Read the rowid (the last field in the record) and store it in *rowid.
62446 ** Return SQLITE_OK if everything works, or an error code otherwise.
62448 ** pCur might be pointing to text obtained from a corrupt database file.
62449 ** So the content cannot be trusted. Do appropriate checks on the content.
62451 SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
62452 i64 nCellKey = 0;
62453 int rc;
62454 u32 szHdr; /* Size of the header */
62455 u32 typeRowid; /* Serial type of the rowid */
62456 u32 lenRowid; /* Size of the rowid */
62457 Mem m, v;
62459 UNUSED_PARAMETER(db);
62461 /* Get the size of the index entry. Only indices entries of less
62462 ** than 2GiB are support - anything large must be database corruption.
62463 ** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so
62464 ** this code can safely assume that nCellKey is 32-bits
62466 assert( sqlite3BtreeCursorIsValid(pCur) );
62467 VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey);
62468 assert( rc==SQLITE_OK ); /* pCur is always valid so KeySize cannot fail */
62469 assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey );
62471 /* Read in the complete content of the index entry */
62472 memset(&m, 0, sizeof(m));
62473 rc = sqlite3VdbeMemFromBtree(pCur, 0, (int)nCellKey, 1, &m);
62474 if( rc ){
62475 return rc;
62478 /* The index entry must begin with a header size */
62479 (void)getVarint32((u8*)m.z, szHdr);
62480 testcase( szHdr==3 );
62481 testcase( szHdr==m.n );
62482 if( unlikely(szHdr<3 || (int)szHdr>m.n) ){
62483 goto idx_rowid_corruption;
62486 /* The last field of the index should be an integer - the ROWID.
62487 ** Verify that the last entry really is an integer. */
62488 (void)getVarint32((u8*)&m.z[szHdr-1], typeRowid);
62489 testcase( typeRowid==1 );
62490 testcase( typeRowid==2 );
62491 testcase( typeRowid==3 );
62492 testcase( typeRowid==4 );
62493 testcase( typeRowid==5 );
62494 testcase( typeRowid==6 );
62495 testcase( typeRowid==8 );
62496 testcase( typeRowid==9 );
62497 if( unlikely(typeRowid<1 || typeRowid>9 || typeRowid==7) ){
62498 goto idx_rowid_corruption;
62500 lenRowid = sqlite3VdbeSerialTypeLen(typeRowid);
62501 testcase( (u32)m.n==szHdr+lenRowid );
62502 if( unlikely((u32)m.n<szHdr+lenRowid) ){
62503 goto idx_rowid_corruption;
62506 /* Fetch the integer off the end of the index record */
62507 sqlite3VdbeSerialGet((u8*)&m.z[m.n-lenRowid], typeRowid, &v);
62508 *rowid = v.u.i;
62509 sqlite3VdbeMemRelease(&m);
62510 return SQLITE_OK;
62512 /* Jump here if database corruption is detected after m has been
62513 ** allocated. Free the m object and return SQLITE_CORRUPT. */
62514 idx_rowid_corruption:
62515 testcase( m.zMalloc!=0 );
62516 sqlite3VdbeMemRelease(&m);
62517 return SQLITE_CORRUPT_BKPT;
62521 ** Compare the key of the index entry that cursor pC is pointing to against
62522 ** the key string in pUnpacked. Write into *pRes a number
62523 ** that is negative, zero, or positive if pC is less than, equal to,
62524 ** or greater than pUnpacked. Return SQLITE_OK on success.
62526 ** pUnpacked is either created without a rowid or is truncated so that it
62527 ** omits the rowid at the end. The rowid at the end of the index entry
62528 ** is ignored as well. Hence, this routine only compares the prefixes
62529 ** of the keys prior to the final rowid, not the entire key.
62531 SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(
62532 VdbeCursor *pC, /* The cursor to compare against */
62533 UnpackedRecord *pUnpacked, /* Unpacked version of key to compare against */
62534 int *res /* Write the comparison result here */
62536 i64 nCellKey = 0;
62537 int rc;
62538 BtCursor *pCur = pC->pCursor;
62539 Mem m;
62541 assert( sqlite3BtreeCursorIsValid(pCur) );
62542 VVA_ONLY(rc =) sqlite3BtreeKeySize(pCur, &nCellKey);
62543 assert( rc==SQLITE_OK ); /* pCur is always valid so KeySize cannot fail */
62544 /* nCellKey will always be between 0 and 0xffffffff because of the say
62545 ** that btreeParseCellPtr() and sqlite3GetVarint32() are implemented */
62546 if( nCellKey<=0 || nCellKey>0x7fffffff ){
62547 *res = 0;
62548 return SQLITE_CORRUPT_BKPT;
62550 memset(&m, 0, sizeof(m));
62551 rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (int)nCellKey, 1, &m);
62552 if( rc ){
62553 return rc;
62555 assert( pUnpacked->flags & UNPACKED_PREFIX_MATCH );
62556 *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked);
62557 sqlite3VdbeMemRelease(&m);
62558 return SQLITE_OK;
62562 ** This routine sets the value to be returned by subsequent calls to
62563 ** sqlite3_changes() on the database handle 'db'.
62565 SQLITE_PRIVATE void sqlite3VdbeSetChanges(sqlite3 *db, int nChange){
62566 assert( sqlite3_mutex_held(db->mutex) );
62567 db->nChange = nChange;
62568 db->nTotalChange += nChange;
62572 ** Set a flag in the vdbe to update the change counter when it is finalised
62573 ** or reset.
62575 SQLITE_PRIVATE void sqlite3VdbeCountChanges(Vdbe *v){
62576 v->changeCntOn = 1;
62580 ** Mark every prepared statement associated with a database connection
62581 ** as expired.
62583 ** An expired statement means that recompilation of the statement is
62584 ** recommend. Statements expire when things happen that make their
62585 ** programs obsolete. Removing user-defined functions or collating
62586 ** sequences, or changing an authorization function are the types of
62587 ** things that make prepared statements obsolete.
62589 SQLITE_PRIVATE void sqlite3ExpirePreparedStatements(sqlite3 *db){
62590 Vdbe *p;
62591 for(p = db->pVdbe; p; p=p->pNext){
62592 p->expired = 1;
62597 ** Return the database associated with the Vdbe.
62599 SQLITE_PRIVATE sqlite3 *sqlite3VdbeDb(Vdbe *v){
62600 return v->db;
62604 ** Return a pointer to an sqlite3_value structure containing the value bound
62605 ** parameter iVar of VM v. Except, if the value is an SQL NULL, return
62606 ** 0 instead. Unless it is NULL, apply affinity aff (one of the SQLITE_AFF_*
62607 ** constants) to the value before returning it.
62609 ** The returned value must be freed by the caller using sqlite3ValueFree().
62611 SQLITE_PRIVATE sqlite3_value *sqlite3VdbeGetValue(Vdbe *v, int iVar, u8 aff){
62612 assert( iVar>0 );
62613 if( v ){
62614 Mem *pMem = &v->aVar[iVar-1];
62615 if( 0==(pMem->flags & MEM_Null) ){
62616 sqlite3_value *pRet = sqlite3ValueNew(v->db);
62617 if( pRet ){
62618 sqlite3VdbeMemCopy((Mem *)pRet, pMem);
62619 sqlite3ValueApplyAffinity(pRet, aff, SQLITE_UTF8);
62620 sqlite3VdbeMemStoreType((Mem *)pRet);
62622 return pRet;
62625 return 0;
62629 ** Configure SQL variable iVar so that binding a new value to it signals
62630 ** to sqlite3_reoptimize() that re-preparing the statement may result
62631 ** in a better query plan.
62633 SQLITE_PRIVATE void sqlite3VdbeSetVarmask(Vdbe *v, int iVar){
62634 assert( iVar>0 );
62635 if( iVar>32 ){
62636 v->expmask = 0xffffffff;
62637 }else{
62638 v->expmask |= ((u32)1 << (iVar-1));
62642 /************** End of vdbeaux.c *********************************************/
62643 /************** Begin file vdbeapi.c *****************************************/
62645 ** 2004 May 26
62647 ** The author disclaims copyright to this source code. In place of
62648 ** a legal notice, here is a blessing:
62650 ** May you do good and not evil.
62651 ** May you find forgiveness for yourself and forgive others.
62652 ** May you share freely, never taking more than you give.
62654 *************************************************************************
62656 ** This file contains code use to implement APIs that are part of the
62657 ** VDBE.
62660 #ifndef SQLITE_OMIT_DEPRECATED
62662 ** Return TRUE (non-zero) of the statement supplied as an argument needs
62663 ** to be recompiled. A statement needs to be recompiled whenever the
62664 ** execution environment changes in a way that would alter the program
62665 ** that sqlite3_prepare() generates. For example, if new functions or
62666 ** collating sequences are registered or if an authorizer function is
62667 ** added or changed.
62669 SQLITE_API int sqlite3_expired(sqlite3_stmt *pStmt){
62670 Vdbe *p = (Vdbe*)pStmt;
62671 return p==0 || p->expired;
62673 #endif
62676 ** Check on a Vdbe to make sure it has not been finalized. Log
62677 ** an error and return true if it has been finalized (or is otherwise
62678 ** invalid). Return false if it is ok.
62680 static int vdbeSafety(Vdbe *p){
62681 if( p->db==0 ){
62682 sqlite3_log(SQLITE_MISUSE, "API called with finalized prepared statement");
62683 return 1;
62684 }else{
62685 return 0;
62688 static int vdbeSafetyNotNull(Vdbe *p){
62689 if( p==0 ){
62690 sqlite3_log(SQLITE_MISUSE, "API called with NULL prepared statement");
62691 return 1;
62692 }else{
62693 return vdbeSafety(p);
62698 ** The following routine destroys a virtual machine that is created by
62699 ** the sqlite3_compile() routine. The integer returned is an SQLITE_
62700 ** success/failure code that describes the result of executing the virtual
62701 ** machine.
62703 ** This routine sets the error code and string returned by
62704 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
62706 SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){
62707 int rc;
62708 if( pStmt==0 ){
62709 /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
62710 ** pointer is a harmless no-op. */
62711 rc = SQLITE_OK;
62712 }else{
62713 Vdbe *v = (Vdbe*)pStmt;
62714 sqlite3 *db = v->db;
62715 #if SQLITE_THREADSAFE
62716 sqlite3_mutex *mutex;
62717 #endif
62718 if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;
62719 #if SQLITE_THREADSAFE
62720 mutex = v->db->mutex;
62721 #endif
62722 sqlite3_mutex_enter(mutex);
62723 rc = sqlite3VdbeFinalize(v);
62724 rc = sqlite3ApiExit(db, rc);
62725 sqlite3_mutex_leave(mutex);
62727 return rc;
62731 ** Terminate the current execution of an SQL statement and reset it
62732 ** back to its starting state so that it can be reused. A success code from
62733 ** the prior execution is returned.
62735 ** This routine sets the error code and string returned by
62736 ** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
62738 SQLITE_API int sqlite3_reset(sqlite3_stmt *pStmt){
62739 int rc;
62740 if( pStmt==0 ){
62741 rc = SQLITE_OK;
62742 }else{
62743 Vdbe *v = (Vdbe*)pStmt;
62744 sqlite3_mutex_enter(v->db->mutex);
62745 rc = sqlite3VdbeReset(v);
62746 sqlite3VdbeRewind(v);
62747 assert( (rc & (v->db->errMask))==rc );
62748 rc = sqlite3ApiExit(v->db, rc);
62749 sqlite3_mutex_leave(v->db->mutex);
62751 return rc;
62755 ** Set all the parameters in the compiled SQL statement to NULL.
62757 SQLITE_API int sqlite3_clear_bindings(sqlite3_stmt *pStmt){
62758 int i;
62759 int rc = SQLITE_OK;
62760 Vdbe *p = (Vdbe*)pStmt;
62761 #if SQLITE_THREADSAFE
62762 sqlite3_mutex *mutex = ((Vdbe*)pStmt)->db->mutex;
62763 #endif
62764 sqlite3_mutex_enter(mutex);
62765 for(i=0; i<p->nVar; i++){
62766 sqlite3VdbeMemRelease(&p->aVar[i]);
62767 p->aVar[i].flags = MEM_Null;
62769 if( p->isPrepareV2 && p->expmask ){
62770 p->expired = 1;
62772 sqlite3_mutex_leave(mutex);
62773 return rc;
62777 /**************************** sqlite3_value_ *******************************
62778 ** The following routines extract information from a Mem or sqlite3_value
62779 ** structure.
62781 SQLITE_API const void *sqlite3_value_blob(sqlite3_value *pVal){
62782 Mem *p = (Mem*)pVal;
62783 if( p->flags & (MEM_Blob|MEM_Str) ){
62784 sqlite3VdbeMemExpandBlob(p);
62785 p->flags &= ~MEM_Str;
62786 p->flags |= MEM_Blob;
62787 return p->n ? p->z : 0;
62788 }else{
62789 return sqlite3_value_text(pVal);
62792 SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){
62793 return sqlite3ValueBytes(pVal, SQLITE_UTF8);
62795 SQLITE_API int sqlite3_value_bytes16(sqlite3_value *pVal){
62796 return sqlite3ValueBytes(pVal, SQLITE_UTF16NATIVE);
62798 SQLITE_API double sqlite3_value_double(sqlite3_value *pVal){
62799 return sqlite3VdbeRealValue((Mem*)pVal);
62801 SQLITE_API int sqlite3_value_int(sqlite3_value *pVal){
62802 return (int)sqlite3VdbeIntValue((Mem*)pVal);
62804 SQLITE_API sqlite_int64 sqlite3_value_int64(sqlite3_value *pVal){
62805 return sqlite3VdbeIntValue((Mem*)pVal);
62807 SQLITE_API const unsigned char *sqlite3_value_text(sqlite3_value *pVal){
62808 return (const unsigned char *)sqlite3ValueText(pVal, SQLITE_UTF8);
62810 #ifndef SQLITE_OMIT_UTF16
62811 SQLITE_API const void *sqlite3_value_text16(sqlite3_value* pVal){
62812 return sqlite3ValueText(pVal, SQLITE_UTF16NATIVE);
62814 SQLITE_API const void *sqlite3_value_text16be(sqlite3_value *pVal){
62815 return sqlite3ValueText(pVal, SQLITE_UTF16BE);
62817 SQLITE_API const void *sqlite3_value_text16le(sqlite3_value *pVal){
62818 return sqlite3ValueText(pVal, SQLITE_UTF16LE);
62820 #endif /* SQLITE_OMIT_UTF16 */
62821 SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
62822 return pVal->type;
62825 /**************************** sqlite3_result_ *******************************
62826 ** The following routines are used by user-defined functions to specify
62827 ** the function result.
62829 ** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
62830 ** result as a string or blob but if the string or blob is too large, it
62831 ** then sets the error code to SQLITE_TOOBIG
62833 static void setResultStrOrError(
62834 sqlite3_context *pCtx, /* Function context */
62835 const char *z, /* String pointer */
62836 int n, /* Bytes in string, or negative */
62837 u8 enc, /* Encoding of z. 0 for BLOBs */
62838 void (*xDel)(void*) /* Destructor function */
62840 if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
62841 sqlite3_result_error_toobig(pCtx);
62844 SQLITE_API void sqlite3_result_blob(
62845 sqlite3_context *pCtx,
62846 const void *z,
62847 int n,
62848 void (*xDel)(void *)
62850 assert( n>=0 );
62851 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62852 setResultStrOrError(pCtx, z, n, 0, xDel);
62854 SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
62855 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62856 sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
62858 SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
62859 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62860 pCtx->isError = SQLITE_ERROR;
62861 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
62863 #ifndef SQLITE_OMIT_UTF16
62864 SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
62865 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62866 pCtx->isError = SQLITE_ERROR;
62867 sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
62869 #endif
62870 SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
62871 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62872 sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
62874 SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
62875 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62876 sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
62878 SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){
62879 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62880 sqlite3VdbeMemSetNull(&pCtx->s);
62882 SQLITE_API void sqlite3_result_text(
62883 sqlite3_context *pCtx,
62884 const char *z,
62885 int n,
62886 void (*xDel)(void *)
62888 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62889 setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
62891 #ifndef SQLITE_OMIT_UTF16
62892 SQLITE_API void sqlite3_result_text16(
62893 sqlite3_context *pCtx,
62894 const void *z,
62895 int n,
62896 void (*xDel)(void *)
62898 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62899 setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
62901 SQLITE_API void sqlite3_result_text16be(
62902 sqlite3_context *pCtx,
62903 const void *z,
62904 int n,
62905 void (*xDel)(void *)
62907 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62908 setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
62910 SQLITE_API void sqlite3_result_text16le(
62911 sqlite3_context *pCtx,
62912 const void *z,
62913 int n,
62914 void (*xDel)(void *)
62916 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62917 setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
62919 #endif /* SQLITE_OMIT_UTF16 */
62920 SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
62921 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62922 sqlite3VdbeMemCopy(&pCtx->s, pValue);
62924 SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
62925 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62926 sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
62928 SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
62929 pCtx->isError = errCode;
62930 if( pCtx->s.flags & MEM_Null ){
62931 sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1,
62932 SQLITE_UTF8, SQLITE_STATIC);
62936 /* Force an SQLITE_TOOBIG error. */
62937 SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){
62938 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62939 pCtx->isError = SQLITE_TOOBIG;
62940 sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1,
62941 SQLITE_UTF8, SQLITE_STATIC);
62944 /* An SQLITE_NOMEM error. */
62945 SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){
62946 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
62947 sqlite3VdbeMemSetNull(&pCtx->s);
62948 pCtx->isError = SQLITE_NOMEM;
62949 pCtx->s.db->mallocFailed = 1;
62953 ** This function is called after a transaction has been committed. It
62954 ** invokes callbacks registered with sqlite3_wal_hook() as required.
62956 static int doWalCallbacks(sqlite3 *db){
62957 int rc = SQLITE_OK;
62958 #ifndef SQLITE_OMIT_WAL
62959 int i;
62960 for(i=0; i<db->nDb; i++){
62961 Btree *pBt = db->aDb[i].pBt;
62962 if( pBt ){
62963 int nEntry = sqlite3PagerWalCallback(sqlite3BtreePager(pBt));
62964 if( db->xWalCallback && nEntry>0 && rc==SQLITE_OK ){
62965 rc = db->xWalCallback(db->pWalArg, db, db->aDb[i].zName, nEntry);
62969 #endif
62970 return rc;
62974 ** Execute the statement pStmt, either until a row of data is ready, the
62975 ** statement is completely executed or an error occurs.
62977 ** This routine implements the bulk of the logic behind the sqlite_step()
62978 ** API. The only thing omitted is the automatic recompile if a
62979 ** schema change has occurred. That detail is handled by the
62980 ** outer sqlite3_step() wrapper procedure.
62982 static int sqlite3Step(Vdbe *p){
62983 sqlite3 *db;
62984 int rc;
62986 assert(p);
62987 if( p->magic!=VDBE_MAGIC_RUN ){
62988 /* We used to require that sqlite3_reset() be called before retrying
62989 ** sqlite3_step() after any error or after SQLITE_DONE. But beginning
62990 ** with version 3.7.0, we changed this so that sqlite3_reset() would
62991 ** be called automatically instead of throwing the SQLITE_MISUSE error.
62992 ** This "automatic-reset" change is not technically an incompatibility,
62993 ** since any application that receives an SQLITE_MISUSE is broken by
62994 ** definition.
62996 ** Nevertheless, some published applications that were originally written
62997 ** for version 3.6.23 or earlier do in fact depend on SQLITE_MISUSE
62998 ** returns, and those were broken by the automatic-reset change. As a
62999 ** a work-around, the SQLITE_OMIT_AUTORESET compile-time restores the
63000 ** legacy behavior of returning SQLITE_MISUSE for cases where the
63001 ** previous sqlite3_step() returned something other than a SQLITE_LOCKED
63002 ** or SQLITE_BUSY error.
63004 #ifdef SQLITE_OMIT_AUTORESET
63005 if( p->rc==SQLITE_BUSY || p->rc==SQLITE_LOCKED ){
63006 sqlite3_reset((sqlite3_stmt*)p);
63007 }else{
63008 return SQLITE_MISUSE_BKPT;
63010 #else
63011 sqlite3_reset((sqlite3_stmt*)p);
63012 #endif
63015 /* Check that malloc() has not failed. If it has, return early. */
63016 db = p->db;
63017 if( db->mallocFailed ){
63018 p->rc = SQLITE_NOMEM;
63019 return SQLITE_NOMEM;
63022 if( p->pc<=0 && p->expired ){
63023 p->rc = SQLITE_SCHEMA;
63024 rc = SQLITE_ERROR;
63025 goto end_of_step;
63027 if( p->pc<0 ){
63028 /* If there are no other statements currently running, then
63029 ** reset the interrupt flag. This prevents a call to sqlite3_interrupt
63030 ** from interrupting a statement that has not yet started.
63032 if( db->activeVdbeCnt==0 ){
63033 db->u1.isInterrupted = 0;
63036 assert( db->writeVdbeCnt>0 || db->autoCommit==0 || db->nDeferredCons==0 );
63038 #ifndef SQLITE_OMIT_TRACE
63039 if( db->xProfile && !db->init.busy ){
63040 sqlite3OsCurrentTimeInt64(db->pVfs, &p->startTime);
63042 #endif
63044 db->activeVdbeCnt++;
63045 if( p->readOnly==0 ) db->writeVdbeCnt++;
63046 p->pc = 0;
63048 #ifndef SQLITE_OMIT_EXPLAIN
63049 if( p->explain ){
63050 rc = sqlite3VdbeList(p);
63051 }else
63052 #endif /* SQLITE_OMIT_EXPLAIN */
63054 db->vdbeExecCnt++;
63055 rc = sqlite3VdbeExec(p);
63056 db->vdbeExecCnt--;
63059 #ifndef SQLITE_OMIT_TRACE
63060 /* Invoke the profile callback if there is one
63062 if( rc!=SQLITE_ROW && db->xProfile && !db->init.busy && p->zSql ){
63063 sqlite3_int64 iNow;
63064 sqlite3OsCurrentTimeInt64(db->pVfs, &iNow);
63065 db->xProfile(db->pProfileArg, p->zSql, (iNow - p->startTime)*1000000);
63067 #endif
63069 if( rc==SQLITE_DONE ){
63070 assert( p->rc==SQLITE_OK );
63071 p->rc = doWalCallbacks(db);
63072 if( p->rc!=SQLITE_OK ){
63073 rc = SQLITE_ERROR;
63077 db->errCode = rc;
63078 if( SQLITE_NOMEM==sqlite3ApiExit(p->db, p->rc) ){
63079 p->rc = SQLITE_NOMEM;
63081 end_of_step:
63082 /* At this point local variable rc holds the value that should be
63083 ** returned if this statement was compiled using the legacy
63084 ** sqlite3_prepare() interface. According to the docs, this can only
63085 ** be one of the values in the first assert() below. Variable p->rc
63086 ** contains the value that would be returned if sqlite3_finalize()
63087 ** were called on statement p.
63089 assert( rc==SQLITE_ROW || rc==SQLITE_DONE || rc==SQLITE_ERROR
63090 || rc==SQLITE_BUSY || rc==SQLITE_MISUSE
63092 assert( p->rc!=SQLITE_ROW && p->rc!=SQLITE_DONE );
63093 if( p->isPrepareV2 && rc!=SQLITE_ROW && rc!=SQLITE_DONE ){
63094 /* If this statement was prepared using sqlite3_prepare_v2(), and an
63095 ** error has occured, then return the error code in p->rc to the
63096 ** caller. Set the error code in the database handle to the same value.
63098 rc = sqlite3VdbeTransferError(p);
63100 return (rc&db->errMask);
63104 ** The maximum number of times that a statement will try to reparse
63105 ** itself before giving up and returning SQLITE_SCHEMA.
63107 #ifndef SQLITE_MAX_SCHEMA_RETRY
63108 # define SQLITE_MAX_SCHEMA_RETRY 5
63109 #endif
63112 ** This is the top-level implementation of sqlite3_step(). Call
63113 ** sqlite3Step() to do most of the work. If a schema error occurs,
63114 ** call sqlite3Reprepare() and try again.
63116 SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
63117 int rc = SQLITE_OK; /* Result from sqlite3Step() */
63118 int rc2 = SQLITE_OK; /* Result from sqlite3Reprepare() */
63119 Vdbe *v = (Vdbe*)pStmt; /* the prepared statement */
63120 int cnt = 0; /* Counter to prevent infinite loop of reprepares */
63121 sqlite3 *db; /* The database connection */
63123 if( vdbeSafetyNotNull(v) ){
63124 return SQLITE_MISUSE_BKPT;
63126 db = v->db;
63127 sqlite3_mutex_enter(db->mutex);
63128 while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
63129 && cnt++ < SQLITE_MAX_SCHEMA_RETRY
63130 && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
63131 sqlite3_reset(pStmt);
63132 assert( v->expired==0 );
63134 if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){
63135 /* This case occurs after failing to recompile an sql statement.
63136 ** The error message from the SQL compiler has already been loaded
63137 ** into the database handle. This block copies the error message
63138 ** from the database handle into the statement and sets the statement
63139 ** program counter to 0 to ensure that when the statement is
63140 ** finalized or reset the parser error message is available via
63141 ** sqlite3_errmsg() and sqlite3_errcode().
63143 const char *zErr = (const char *)sqlite3_value_text(db->pErr);
63144 sqlite3DbFree(db, v->zErrMsg);
63145 if( !db->mallocFailed ){
63146 v->zErrMsg = sqlite3DbStrDup(db, zErr);
63147 v->rc = rc2;
63148 } else {
63149 v->zErrMsg = 0;
63150 v->rc = rc = SQLITE_NOMEM;
63153 rc = sqlite3ApiExit(db, rc);
63154 sqlite3_mutex_leave(db->mutex);
63155 return rc;
63159 ** Extract the user data from a sqlite3_context structure and return a
63160 ** pointer to it.
63162 SQLITE_API void *sqlite3_user_data(sqlite3_context *p){
63163 assert( p && p->pFunc );
63164 return p->pFunc->pUserData;
63168 ** Extract the user data from a sqlite3_context structure and return a
63169 ** pointer to it.
63171 ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
63172 ** returns a copy of the pointer to the database connection (the 1st
63173 ** parameter) of the sqlite3_create_function() and
63174 ** sqlite3_create_function16() routines that originally registered the
63175 ** application defined function.
63177 SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
63178 assert( p && p->pFunc );
63179 return p->s.db;
63183 ** The following is the implementation of an SQL function that always
63184 ** fails with an error message stating that the function is used in the
63185 ** wrong context. The sqlite3_overload_function() API might construct
63186 ** SQL function that use this routine so that the functions will exist
63187 ** for name resolution but are actually overloaded by the xFindFunction
63188 ** method of virtual tables.
63190 SQLITE_PRIVATE void sqlite3InvalidFunction(
63191 sqlite3_context *context, /* The function calling context */
63192 int NotUsed, /* Number of arguments to the function */
63193 sqlite3_value **NotUsed2 /* Value of each argument */
63195 const char *zName = context->pFunc->zName;
63196 char *zErr;
63197 UNUSED_PARAMETER2(NotUsed, NotUsed2);
63198 zErr = sqlite3_mprintf(
63199 "unable to use function %s in the requested context", zName);
63200 sqlite3_result_error(context, zErr, -1);
63201 sqlite3_free(zErr);
63205 ** Allocate or return the aggregate context for a user function. A new
63206 ** context is allocated on the first call. Subsequent calls return the
63207 ** same context that was returned on prior calls.
63209 SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
63210 Mem *pMem;
63211 assert( p && p->pFunc && p->pFunc->xStep );
63212 assert( sqlite3_mutex_held(p->s.db->mutex) );
63213 pMem = p->pMem;
63214 testcase( nByte<0 );
63215 if( (pMem->flags & MEM_Agg)==0 ){
63216 if( nByte<=0 ){
63217 sqlite3VdbeMemReleaseExternal(pMem);
63218 pMem->flags = MEM_Null;
63219 pMem->z = 0;
63220 }else{
63221 sqlite3VdbeMemGrow(pMem, nByte, 0);
63222 pMem->flags = MEM_Agg;
63223 pMem->u.pDef = p->pFunc;
63224 if( pMem->z ){
63225 memset(pMem->z, 0, nByte);
63229 return (void*)pMem->z;
63233 ** Return the auxilary data pointer, if any, for the iArg'th argument to
63234 ** the user-function defined by pCtx.
63236 SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
63237 VdbeFunc *pVdbeFunc;
63239 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
63240 pVdbeFunc = pCtx->pVdbeFunc;
63241 if( !pVdbeFunc || iArg>=pVdbeFunc->nAux || iArg<0 ){
63242 return 0;
63244 return pVdbeFunc->apAux[iArg].pAux;
63248 ** Set the auxilary data pointer and delete function, for the iArg'th
63249 ** argument to the user-function defined by pCtx. Any previous value is
63250 ** deleted by calling the delete function specified when it was set.
63252 SQLITE_API void sqlite3_set_auxdata(
63253 sqlite3_context *pCtx,
63254 int iArg,
63255 void *pAux,
63256 void (*xDelete)(void*)
63258 struct AuxData *pAuxData;
63259 VdbeFunc *pVdbeFunc;
63260 if( iArg<0 ) goto failed;
63262 assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
63263 pVdbeFunc = pCtx->pVdbeFunc;
63264 if( !pVdbeFunc || pVdbeFunc->nAux<=iArg ){
63265 int nAux = (pVdbeFunc ? pVdbeFunc->nAux : 0);
63266 int nMalloc = sizeof(VdbeFunc) + sizeof(struct AuxData)*iArg;
63267 pVdbeFunc = sqlite3DbRealloc(pCtx->s.db, pVdbeFunc, nMalloc);
63268 if( !pVdbeFunc ){
63269 goto failed;
63271 pCtx->pVdbeFunc = pVdbeFunc;
63272 memset(&pVdbeFunc->apAux[nAux], 0, sizeof(struct AuxData)*(iArg+1-nAux));
63273 pVdbeFunc->nAux = iArg+1;
63274 pVdbeFunc->pFunc = pCtx->pFunc;
63277 pAuxData = &pVdbeFunc->apAux[iArg];
63278 if( pAuxData->pAux && pAuxData->xDelete ){
63279 pAuxData->xDelete(pAuxData->pAux);
63281 pAuxData->pAux = pAux;
63282 pAuxData->xDelete = xDelete;
63283 return;
63285 failed:
63286 if( xDelete ){
63287 xDelete(pAux);
63291 #ifndef SQLITE_OMIT_DEPRECATED
63293 ** Return the number of times the Step function of a aggregate has been
63294 ** called.
63296 ** This function is deprecated. Do not use it for new code. It is
63297 ** provide only to avoid breaking legacy code. New aggregate function
63298 ** implementations should keep their own counts within their aggregate
63299 ** context.
63301 SQLITE_API int sqlite3_aggregate_count(sqlite3_context *p){
63302 assert( p && p->pMem && p->pFunc && p->pFunc->xStep );
63303 return p->pMem->n;
63305 #endif
63308 ** Return the number of columns in the result set for the statement pStmt.
63310 SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt){
63311 Vdbe *pVm = (Vdbe *)pStmt;
63312 return pVm ? pVm->nResColumn : 0;
63316 ** Return the number of values available from the current row of the
63317 ** currently executing statement pStmt.
63319 SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt){
63320 Vdbe *pVm = (Vdbe *)pStmt;
63321 if( pVm==0 || pVm->pResultSet==0 ) return 0;
63322 return pVm->nResColumn;
63327 ** Check to see if column iCol of the given statement is valid. If
63328 ** it is, return a pointer to the Mem for the value of that column.
63329 ** If iCol is not valid, return a pointer to a Mem which has a value
63330 ** of NULL.
63332 static Mem *columnMem(sqlite3_stmt *pStmt, int i){
63333 Vdbe *pVm;
63334 Mem *pOut;
63336 pVm = (Vdbe *)pStmt;
63337 if( pVm && pVm->pResultSet!=0 && i<pVm->nResColumn && i>=0 ){
63338 sqlite3_mutex_enter(pVm->db->mutex);
63339 pOut = &pVm->pResultSet[i];
63340 }else{
63341 /* If the value passed as the second argument is out of range, return
63342 ** a pointer to the following static Mem object which contains the
63343 ** value SQL NULL. Even though the Mem structure contains an element
63344 ** of type i64, on certain architectures (x86) with certain compiler
63345 ** switches (-Os), gcc may align this Mem object on a 4-byte boundary
63346 ** instead of an 8-byte one. This all works fine, except that when
63347 ** running with SQLITE_DEBUG defined the SQLite code sometimes assert()s
63348 ** that a Mem structure is located on an 8-byte boundary. To prevent
63349 ** these assert()s from failing, when building with SQLITE_DEBUG defined
63350 ** using gcc, we force nullMem to be 8-byte aligned using the magical
63351 ** __attribute__((aligned(8))) macro. */
63352 static const Mem nullMem
63353 #if defined(SQLITE_DEBUG) && defined(__GNUC__)
63354 __attribute__((aligned(8)))
63355 #endif
63356 = {0, "", (double)0, {0}, 0, MEM_Null, SQLITE_NULL, 0,
63357 #ifdef SQLITE_DEBUG
63358 0, 0, /* pScopyFrom, pFiller */
63359 #endif
63360 0, 0 };
63362 if( pVm && ALWAYS(pVm->db) ){
63363 sqlite3_mutex_enter(pVm->db->mutex);
63364 sqlite3Error(pVm->db, SQLITE_RANGE, 0);
63366 pOut = (Mem*)&nullMem;
63368 return pOut;
63372 ** This function is called after invoking an sqlite3_value_XXX function on a
63373 ** column value (i.e. a value returned by evaluating an SQL expression in the
63374 ** select list of a SELECT statement) that may cause a malloc() failure. If
63375 ** malloc() has failed, the threads mallocFailed flag is cleared and the result
63376 ** code of statement pStmt set to SQLITE_NOMEM.
63378 ** Specifically, this is called from within:
63380 ** sqlite3_column_int()
63381 ** sqlite3_column_int64()
63382 ** sqlite3_column_text()
63383 ** sqlite3_column_text16()
63384 ** sqlite3_column_real()
63385 ** sqlite3_column_bytes()
63386 ** sqlite3_column_bytes16()
63387 ** sqiite3_column_blob()
63389 static void columnMallocFailure(sqlite3_stmt *pStmt)
63391 /* If malloc() failed during an encoding conversion within an
63392 ** sqlite3_column_XXX API, then set the return code of the statement to
63393 ** SQLITE_NOMEM. The next call to _step() (if any) will return SQLITE_ERROR
63394 ** and _finalize() will return NOMEM.
63396 Vdbe *p = (Vdbe *)pStmt;
63397 if( p ){
63398 p->rc = sqlite3ApiExit(p->db, p->rc);
63399 sqlite3_mutex_leave(p->db->mutex);
63403 /**************************** sqlite3_column_ *******************************
63404 ** The following routines are used to access elements of the current row
63405 ** in the result set.
63407 SQLITE_API const void *sqlite3_column_blob(sqlite3_stmt *pStmt, int i){
63408 const void *val;
63409 val = sqlite3_value_blob( columnMem(pStmt,i) );
63410 /* Even though there is no encoding conversion, value_blob() might
63411 ** need to call malloc() to expand the result of a zeroblob()
63412 ** expression.
63414 columnMallocFailure(pStmt);
63415 return val;
63417 SQLITE_API int sqlite3_column_bytes(sqlite3_stmt *pStmt, int i){
63418 int val = sqlite3_value_bytes( columnMem(pStmt,i) );
63419 columnMallocFailure(pStmt);
63420 return val;
63422 SQLITE_API int sqlite3_column_bytes16(sqlite3_stmt *pStmt, int i){
63423 int val = sqlite3_value_bytes16( columnMem(pStmt,i) );
63424 columnMallocFailure(pStmt);
63425 return val;
63427 SQLITE_API double sqlite3_column_double(sqlite3_stmt *pStmt, int i){
63428 double val = sqlite3_value_double( columnMem(pStmt,i) );
63429 columnMallocFailure(pStmt);
63430 return val;
63432 SQLITE_API int sqlite3_column_int(sqlite3_stmt *pStmt, int i){
63433 int val = sqlite3_value_int( columnMem(pStmt,i) );
63434 columnMallocFailure(pStmt);
63435 return val;
63437 SQLITE_API sqlite_int64 sqlite3_column_int64(sqlite3_stmt *pStmt, int i){
63438 sqlite_int64 val = sqlite3_value_int64( columnMem(pStmt,i) );
63439 columnMallocFailure(pStmt);
63440 return val;
63442 SQLITE_API const unsigned char *sqlite3_column_text(sqlite3_stmt *pStmt, int i){
63443 const unsigned char *val = sqlite3_value_text( columnMem(pStmt,i) );
63444 columnMallocFailure(pStmt);
63445 return val;
63447 SQLITE_API sqlite3_value *sqlite3_column_value(sqlite3_stmt *pStmt, int i){
63448 Mem *pOut = columnMem(pStmt, i);
63449 if( pOut->flags&MEM_Static ){
63450 pOut->flags &= ~MEM_Static;
63451 pOut->flags |= MEM_Ephem;
63453 columnMallocFailure(pStmt);
63454 return (sqlite3_value *)pOut;
63456 #ifndef SQLITE_OMIT_UTF16
63457 SQLITE_API const void *sqlite3_column_text16(sqlite3_stmt *pStmt, int i){
63458 const void *val = sqlite3_value_text16( columnMem(pStmt,i) );
63459 columnMallocFailure(pStmt);
63460 return val;
63462 #endif /* SQLITE_OMIT_UTF16 */
63463 SQLITE_API int sqlite3_column_type(sqlite3_stmt *pStmt, int i){
63464 int iType = sqlite3_value_type( columnMem(pStmt,i) );
63465 columnMallocFailure(pStmt);
63466 return iType;
63469 /* The following function is experimental and subject to change or
63470 ** removal */
63471 /*int sqlite3_column_numeric_type(sqlite3_stmt *pStmt, int i){
63472 ** return sqlite3_value_numeric_type( columnMem(pStmt,i) );
63477 ** Convert the N-th element of pStmt->pColName[] into a string using
63478 ** xFunc() then return that string. If N is out of range, return 0.
63480 ** There are up to 5 names for each column. useType determines which
63481 ** name is returned. Here are the names:
63483 ** 0 The column name as it should be displayed for output
63484 ** 1 The datatype name for the column
63485 ** 2 The name of the database that the column derives from
63486 ** 3 The name of the table that the column derives from
63487 ** 4 The name of the table column that the result column derives from
63489 ** If the result is not a simple column reference (if it is an expression
63490 ** or a constant) then useTypes 2, 3, and 4 return NULL.
63492 static const void *columnName(
63493 sqlite3_stmt *pStmt,
63494 int N,
63495 const void *(*xFunc)(Mem*),
63496 int useType
63498 const void *ret = 0;
63499 Vdbe *p = (Vdbe *)pStmt;
63500 int n;
63501 sqlite3 *db = p->db;
63503 assert( db!=0 );
63504 n = sqlite3_column_count(pStmt);
63505 if( N<n && N>=0 ){
63506 N += useType*n;
63507 sqlite3_mutex_enter(db->mutex);
63508 assert( db->mallocFailed==0 );
63509 ret = xFunc(&p->aColName[N]);
63510 /* A malloc may have failed inside of the xFunc() call. If this
63511 ** is the case, clear the mallocFailed flag and return NULL.
63513 if( db->mallocFailed ){
63514 db->mallocFailed = 0;
63515 ret = 0;
63517 sqlite3_mutex_leave(db->mutex);
63519 return ret;
63523 ** Return the name of the Nth column of the result set returned by SQL
63524 ** statement pStmt.
63526 SQLITE_API const char *sqlite3_column_name(sqlite3_stmt *pStmt, int N){
63527 return columnName(
63528 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_NAME);
63530 #ifndef SQLITE_OMIT_UTF16
63531 SQLITE_API const void *sqlite3_column_name16(sqlite3_stmt *pStmt, int N){
63532 return columnName(
63533 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_NAME);
63535 #endif
63538 ** Constraint: If you have ENABLE_COLUMN_METADATA then you must
63539 ** not define OMIT_DECLTYPE.
63541 #if defined(SQLITE_OMIT_DECLTYPE) && defined(SQLITE_ENABLE_COLUMN_METADATA)
63542 # error "Must not define both SQLITE_OMIT_DECLTYPE \
63543 and SQLITE_ENABLE_COLUMN_METADATA"
63544 #endif
63546 #ifndef SQLITE_OMIT_DECLTYPE
63548 ** Return the column declaration type (if applicable) of the 'i'th column
63549 ** of the result set of SQL statement pStmt.
63551 SQLITE_API const char *sqlite3_column_decltype(sqlite3_stmt *pStmt, int N){
63552 return columnName(
63553 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DECLTYPE);
63555 #ifndef SQLITE_OMIT_UTF16
63556 SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
63557 return columnName(
63558 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DECLTYPE);
63560 #endif /* SQLITE_OMIT_UTF16 */
63561 #endif /* SQLITE_OMIT_DECLTYPE */
63563 #ifdef SQLITE_ENABLE_COLUMN_METADATA
63565 ** Return the name of the database from which a result column derives.
63566 ** NULL is returned if the result column is an expression or constant or
63567 ** anything else which is not an unabiguous reference to a database column.
63569 SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
63570 return columnName(
63571 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_DATABASE);
63573 #ifndef SQLITE_OMIT_UTF16
63574 SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N){
63575 return columnName(
63576 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_DATABASE);
63578 #endif /* SQLITE_OMIT_UTF16 */
63581 ** Return the name of the table from which a result column derives.
63582 ** NULL is returned if the result column is an expression or constant or
63583 ** anything else which is not an unabiguous reference to a database column.
63585 SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
63586 return columnName(
63587 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_TABLE);
63589 #ifndef SQLITE_OMIT_UTF16
63590 SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
63591 return columnName(
63592 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_TABLE);
63594 #endif /* SQLITE_OMIT_UTF16 */
63597 ** Return the name of the table column from which a result column derives.
63598 ** NULL is returned if the result column is an expression or constant or
63599 ** anything else which is not an unabiguous reference to a database column.
63601 SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
63602 return columnName(
63603 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text, COLNAME_COLUMN);
63605 #ifndef SQLITE_OMIT_UTF16
63606 SQLITE_API const void *sqlite3_column_origin_name16(sqlite3_stmt *pStmt, int N){
63607 return columnName(
63608 pStmt, N, (const void*(*)(Mem*))sqlite3_value_text16, COLNAME_COLUMN);
63610 #endif /* SQLITE_OMIT_UTF16 */
63611 #endif /* SQLITE_ENABLE_COLUMN_METADATA */
63614 /******************************* sqlite3_bind_ ***************************
63616 ** Routines used to attach values to wildcards in a compiled SQL statement.
63619 ** Unbind the value bound to variable i in virtual machine p. This is the
63620 ** the same as binding a NULL value to the column. If the "i" parameter is
63621 ** out of range, then SQLITE_RANGE is returned. Othewise SQLITE_OK.
63623 ** A successful evaluation of this routine acquires the mutex on p.
63624 ** the mutex is released if any kind of error occurs.
63626 ** The error code stored in database p->db is overwritten with the return
63627 ** value in any case.
63629 static int vdbeUnbind(Vdbe *p, int i){
63630 Mem *pVar;
63631 if( vdbeSafetyNotNull(p) ){
63632 return SQLITE_MISUSE_BKPT;
63634 sqlite3_mutex_enter(p->db->mutex);
63635 if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
63636 sqlite3Error(p->db, SQLITE_MISUSE, 0);
63637 sqlite3_mutex_leave(p->db->mutex);
63638 sqlite3_log(SQLITE_MISUSE,
63639 "bind on a busy prepared statement: [%s]", p->zSql);
63640 return SQLITE_MISUSE_BKPT;
63642 if( i<1 || i>p->nVar ){
63643 sqlite3Error(p->db, SQLITE_RANGE, 0);
63644 sqlite3_mutex_leave(p->db->mutex);
63645 return SQLITE_RANGE;
63647 i--;
63648 pVar = &p->aVar[i];
63649 sqlite3VdbeMemRelease(pVar);
63650 pVar->flags = MEM_Null;
63651 sqlite3Error(p->db, SQLITE_OK, 0);
63653 /* If the bit corresponding to this variable in Vdbe.expmask is set, then
63654 ** binding a new value to this variable invalidates the current query plan.
63656 ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
63657 ** parameter in the WHERE clause might influence the choice of query plan
63658 ** for a statement, then the statement will be automatically recompiled,
63659 ** as if there had been a schema change, on the first sqlite3_step() call
63660 ** following any change to the bindings of that parameter.
63662 if( p->isPrepareV2 &&
63663 ((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
63665 p->expired = 1;
63667 return SQLITE_OK;
63671 ** Bind a text or BLOB value.
63673 static int bindText(
63674 sqlite3_stmt *pStmt, /* The statement to bind against */
63675 int i, /* Index of the parameter to bind */
63676 const void *zData, /* Pointer to the data to be bound */
63677 int nData, /* Number of bytes of data to be bound */
63678 void (*xDel)(void*), /* Destructor for the data */
63679 u8 encoding /* Encoding for the data */
63681 Vdbe *p = (Vdbe *)pStmt;
63682 Mem *pVar;
63683 int rc;
63685 rc = vdbeUnbind(p, i);
63686 if( rc==SQLITE_OK ){
63687 if( zData!=0 ){
63688 pVar = &p->aVar[i-1];
63689 rc = sqlite3VdbeMemSetStr(pVar, zData, nData, encoding, xDel);
63690 if( rc==SQLITE_OK && encoding!=0 ){
63691 rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
63693 sqlite3Error(p->db, rc, 0);
63694 rc = sqlite3ApiExit(p->db, rc);
63696 sqlite3_mutex_leave(p->db->mutex);
63697 }else if( xDel!=SQLITE_STATIC && xDel!=SQLITE_TRANSIENT ){
63698 xDel((void*)zData);
63700 return rc;
63705 ** Bind a blob value to an SQL statement variable.
63707 SQLITE_API int sqlite3_bind_blob(
63708 sqlite3_stmt *pStmt,
63709 int i,
63710 const void *zData,
63711 int nData,
63712 void (*xDel)(void*)
63714 return bindText(pStmt, i, zData, nData, xDel, 0);
63716 SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
63717 int rc;
63718 Vdbe *p = (Vdbe *)pStmt;
63719 rc = vdbeUnbind(p, i);
63720 if( rc==SQLITE_OK ){
63721 sqlite3VdbeMemSetDouble(&p->aVar[i-1], rValue);
63722 sqlite3_mutex_leave(p->db->mutex);
63724 return rc;
63726 SQLITE_API int sqlite3_bind_int(sqlite3_stmt *p, int i, int iValue){
63727 return sqlite3_bind_int64(p, i, (i64)iValue);
63729 SQLITE_API int sqlite3_bind_int64(sqlite3_stmt *pStmt, int i, sqlite_int64 iValue){
63730 int rc;
63731 Vdbe *p = (Vdbe *)pStmt;
63732 rc = vdbeUnbind(p, i);
63733 if( rc==SQLITE_OK ){
63734 sqlite3VdbeMemSetInt64(&p->aVar[i-1], iValue);
63735 sqlite3_mutex_leave(p->db->mutex);
63737 return rc;
63739 SQLITE_API int sqlite3_bind_null(sqlite3_stmt *pStmt, int i){
63740 int rc;
63741 Vdbe *p = (Vdbe*)pStmt;
63742 rc = vdbeUnbind(p, i);
63743 if( rc==SQLITE_OK ){
63744 sqlite3_mutex_leave(p->db->mutex);
63746 return rc;
63748 SQLITE_API int sqlite3_bind_text(
63749 sqlite3_stmt *pStmt,
63750 int i,
63751 const char *zData,
63752 int nData,
63753 void (*xDel)(void*)
63755 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
63757 #ifndef SQLITE_OMIT_UTF16
63758 SQLITE_API int sqlite3_bind_text16(
63759 sqlite3_stmt *pStmt,
63760 int i,
63761 const void *zData,
63762 int nData,
63763 void (*xDel)(void*)
63765 return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
63767 #endif /* SQLITE_OMIT_UTF16 */
63768 SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
63769 int rc;
63770 switch( pValue->type ){
63771 case SQLITE_INTEGER: {
63772 rc = sqlite3_bind_int64(pStmt, i, pValue->u.i);
63773 break;
63775 case SQLITE_FLOAT: {
63776 rc = sqlite3_bind_double(pStmt, i, pValue->r);
63777 break;
63779 case SQLITE_BLOB: {
63780 if( pValue->flags & MEM_Zero ){
63781 rc = sqlite3_bind_zeroblob(pStmt, i, pValue->u.nZero);
63782 }else{
63783 rc = sqlite3_bind_blob(pStmt, i, pValue->z, pValue->n,SQLITE_TRANSIENT);
63785 break;
63787 case SQLITE_TEXT: {
63788 rc = bindText(pStmt,i, pValue->z, pValue->n, SQLITE_TRANSIENT,
63789 pValue->enc);
63790 break;
63792 default: {
63793 rc = sqlite3_bind_null(pStmt, i);
63794 break;
63797 return rc;
63799 SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt *pStmt, int i, int n){
63800 int rc;
63801 Vdbe *p = (Vdbe *)pStmt;
63802 rc = vdbeUnbind(p, i);
63803 if( rc==SQLITE_OK ){
63804 sqlite3VdbeMemSetZeroBlob(&p->aVar[i-1], n);
63805 sqlite3_mutex_leave(p->db->mutex);
63807 return rc;
63811 ** Return the number of wildcards that can be potentially bound to.
63812 ** This routine is added to support DBD::SQLite.
63814 SQLITE_API int sqlite3_bind_parameter_count(sqlite3_stmt *pStmt){
63815 Vdbe *p = (Vdbe*)pStmt;
63816 return p ? p->nVar : 0;
63820 ** Return the name of a wildcard parameter. Return NULL if the index
63821 ** is out of range or if the wildcard is unnamed.
63823 ** The result is always UTF-8.
63825 SQLITE_API const char *sqlite3_bind_parameter_name(sqlite3_stmt *pStmt, int i){
63826 Vdbe *p = (Vdbe*)pStmt;
63827 if( p==0 || i<1 || i>p->nzVar ){
63828 return 0;
63830 return p->azVar[i-1];
63834 ** Given a wildcard parameter name, return the index of the variable
63835 ** with that name. If there is no variable with the given name,
63836 ** return 0.
63838 SQLITE_PRIVATE int sqlite3VdbeParameterIndex(Vdbe *p, const char *zName, int nName){
63839 int i;
63840 if( p==0 ){
63841 return 0;
63843 if( zName ){
63844 for(i=0; i<p->nzVar; i++){
63845 const char *z = p->azVar[i];
63846 if( z && memcmp(z,zName,nName)==0 && z[nName]==0 ){
63847 return i+1;
63851 return 0;
63853 SQLITE_API int sqlite3_bind_parameter_index(sqlite3_stmt *pStmt, const char *zName){
63854 return sqlite3VdbeParameterIndex((Vdbe*)pStmt, zName, sqlite3Strlen30(zName));
63858 ** Transfer all bindings from the first statement over to the second.
63860 SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
63861 Vdbe *pFrom = (Vdbe*)pFromStmt;
63862 Vdbe *pTo = (Vdbe*)pToStmt;
63863 int i;
63864 assert( pTo->db==pFrom->db );
63865 assert( pTo->nVar==pFrom->nVar );
63866 sqlite3_mutex_enter(pTo->db->mutex);
63867 for(i=0; i<pFrom->nVar; i++){
63868 sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);
63870 sqlite3_mutex_leave(pTo->db->mutex);
63871 return SQLITE_OK;
63874 #ifndef SQLITE_OMIT_DEPRECATED
63876 ** Deprecated external interface. Internal/core SQLite code
63877 ** should call sqlite3TransferBindings.
63879 ** Is is misuse to call this routine with statements from different
63880 ** database connections. But as this is a deprecated interface, we
63881 ** will not bother to check for that condition.
63883 ** If the two statements contain a different number of bindings, then
63884 ** an SQLITE_ERROR is returned. Nothing else can go wrong, so otherwise
63885 ** SQLITE_OK is returned.
63887 SQLITE_API int sqlite3_transfer_bindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){
63888 Vdbe *pFrom = (Vdbe*)pFromStmt;
63889 Vdbe *pTo = (Vdbe*)pToStmt;
63890 if( pFrom->nVar!=pTo->nVar ){
63891 return SQLITE_ERROR;
63893 if( pTo->isPrepareV2 && pTo->expmask ){
63894 pTo->expired = 1;
63896 if( pFrom->isPrepareV2 && pFrom->expmask ){
63897 pFrom->expired = 1;
63899 return sqlite3TransferBindings(pFromStmt, pToStmt);
63901 #endif
63904 ** Return the sqlite3* database handle to which the prepared statement given
63905 ** in the argument belongs. This is the same database handle that was
63906 ** the first argument to the sqlite3_prepare() that was used to create
63907 ** the statement in the first place.
63909 SQLITE_API sqlite3 *sqlite3_db_handle(sqlite3_stmt *pStmt){
63910 return pStmt ? ((Vdbe*)pStmt)->db : 0;
63914 ** Return true if the prepared statement is guaranteed to not modify the
63915 ** database.
63917 SQLITE_API int sqlite3_stmt_readonly(sqlite3_stmt *pStmt){
63918 return pStmt ? ((Vdbe*)pStmt)->readOnly : 1;
63922 ** Return true if the prepared statement is in need of being reset.
63924 SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
63925 Vdbe *v = (Vdbe*)pStmt;
63926 return v!=0 && v->pc>0 && v->magic==VDBE_MAGIC_RUN;
63930 ** Return a pointer to the next prepared statement after pStmt associated
63931 ** with database connection pDb. If pStmt is NULL, return the first
63932 ** prepared statement for the database connection. Return NULL if there
63933 ** are no more.
63935 SQLITE_API sqlite3_stmt *sqlite3_next_stmt(sqlite3 *pDb, sqlite3_stmt *pStmt){
63936 sqlite3_stmt *pNext;
63937 sqlite3_mutex_enter(pDb->mutex);
63938 if( pStmt==0 ){
63939 pNext = (sqlite3_stmt*)pDb->pVdbe;
63940 }else{
63941 pNext = (sqlite3_stmt*)((Vdbe*)pStmt)->pNext;
63943 sqlite3_mutex_leave(pDb->mutex);
63944 return pNext;
63948 ** Return the value of a status counter for a prepared statement
63950 SQLITE_API int sqlite3_stmt_status(sqlite3_stmt *pStmt, int op, int resetFlag){
63951 Vdbe *pVdbe = (Vdbe*)pStmt;
63952 int v = pVdbe->aCounter[op-1];
63953 if( resetFlag ) pVdbe->aCounter[op-1] = 0;
63954 return v;
63957 /************** End of vdbeapi.c *********************************************/
63958 /************** Begin file vdbetrace.c ***************************************/
63960 ** 2009 November 25
63962 ** The author disclaims copyright to this source code. In place of
63963 ** a legal notice, here is a blessing:
63965 ** May you do good and not evil.
63966 ** May you find forgiveness for yourself and forgive others.
63967 ** May you share freely, never taking more than you give.
63969 *************************************************************************
63971 ** This file contains code used to insert the values of host parameters
63972 ** (aka "wildcards") into the SQL text output by sqlite3_trace().
63974 ** The Vdbe parse-tree explainer is also found here.
63977 #ifndef SQLITE_OMIT_TRACE
63980 ** zSql is a zero-terminated string of UTF-8 SQL text. Return the number of
63981 ** bytes in this text up to but excluding the first character in
63982 ** a host parameter. If the text contains no host parameters, return
63983 ** the total number of bytes in the text.
63985 static int findNextHostParameter(const char *zSql, int *pnToken){
63986 int tokenType;
63987 int nTotal = 0;
63988 int n;
63990 *pnToken = 0;
63991 while( zSql[0] ){
63992 n = sqlite3GetToken((u8*)zSql, &tokenType);
63993 assert( n>0 && tokenType!=TK_ILLEGAL );
63994 if( tokenType==TK_VARIABLE ){
63995 *pnToken = n;
63996 break;
63998 nTotal += n;
63999 zSql += n;
64001 return nTotal;
64005 ** This function returns a pointer to a nul-terminated string in memory
64006 ** obtained from sqlite3DbMalloc(). If sqlite3.vdbeExecCnt is 1, then the
64007 ** string contains a copy of zRawSql but with host parameters expanded to
64008 ** their current bindings. Or, if sqlite3.vdbeExecCnt is greater than 1,
64009 ** then the returned string holds a copy of zRawSql with "-- " prepended
64010 ** to each line of text.
64012 ** The calling function is responsible for making sure the memory returned
64013 ** is eventually freed.
64015 ** ALGORITHM: Scan the input string looking for host parameters in any of
64016 ** these forms: ?, ?N, $A, @A, :A. Take care to avoid text within
64017 ** string literals, quoted identifier names, and comments. For text forms,
64018 ** the host parameter index is found by scanning the perpared
64019 ** statement for the corresponding OP_Variable opcode. Once the host
64020 ** parameter index is known, locate the value in p->aVar[]. Then render
64021 ** the value as a literal in place of the host parameter name.
64023 SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
64024 Vdbe *p, /* The prepared statement being evaluated */
64025 const char *zRawSql /* Raw text of the SQL statement */
64027 sqlite3 *db; /* The database connection */
64028 int idx = 0; /* Index of a host parameter */
64029 int nextIndex = 1; /* Index of next ? host parameter */
64030 int n; /* Length of a token prefix */
64031 int nToken; /* Length of the parameter token */
64032 int i; /* Loop counter */
64033 Mem *pVar; /* Value of a host parameter */
64034 StrAccum out; /* Accumulate the output here */
64035 char zBase[100]; /* Initial working space */
64037 db = p->db;
64038 sqlite3StrAccumInit(&out, zBase, sizeof(zBase),
64039 db->aLimit[SQLITE_LIMIT_LENGTH]);
64040 out.db = db;
64041 if( db->vdbeExecCnt>1 ){
64042 while( *zRawSql ){
64043 const char *zStart = zRawSql;
64044 while( *(zRawSql++)!='\n' && *zRawSql );
64045 sqlite3StrAccumAppend(&out, "-- ", 3);
64046 sqlite3StrAccumAppend(&out, zStart, (int)(zRawSql-zStart));
64048 }else{
64049 while( zRawSql[0] ){
64050 n = findNextHostParameter(zRawSql, &nToken);
64051 assert( n>0 );
64052 sqlite3StrAccumAppend(&out, zRawSql, n);
64053 zRawSql += n;
64054 assert( zRawSql[0] || nToken==0 );
64055 if( nToken==0 ) break;
64056 if( zRawSql[0]=='?' ){
64057 if( nToken>1 ){
64058 assert( sqlite3Isdigit(zRawSql[1]) );
64059 sqlite3GetInt32(&zRawSql[1], &idx);
64060 }else{
64061 idx = nextIndex;
64063 }else{
64064 assert( zRawSql[0]==':' || zRawSql[0]=='$' || zRawSql[0]=='@' );
64065 testcase( zRawSql[0]==':' );
64066 testcase( zRawSql[0]=='$' );
64067 testcase( zRawSql[0]=='@' );
64068 idx = sqlite3VdbeParameterIndex(p, zRawSql, nToken);
64069 assert( idx>0 );
64071 zRawSql += nToken;
64072 nextIndex = idx + 1;
64073 assert( idx>0 && idx<=p->nVar );
64074 pVar = &p->aVar[idx-1];
64075 if( pVar->flags & MEM_Null ){
64076 sqlite3StrAccumAppend(&out, "NULL", 4);
64077 }else if( pVar->flags & MEM_Int ){
64078 sqlite3XPrintf(&out, "%lld", pVar->u.i);
64079 }else if( pVar->flags & MEM_Real ){
64080 sqlite3XPrintf(&out, "%!.15g", pVar->r);
64081 }else if( pVar->flags & MEM_Str ){
64082 #ifndef SQLITE_OMIT_UTF16
64083 u8 enc = ENC(db);
64084 if( enc!=SQLITE_UTF8 ){
64085 Mem utf8;
64086 memset(&utf8, 0, sizeof(utf8));
64087 utf8.db = db;
64088 sqlite3VdbeMemSetStr(&utf8, pVar->z, pVar->n, enc, SQLITE_STATIC);
64089 sqlite3VdbeChangeEncoding(&utf8, SQLITE_UTF8);
64090 sqlite3XPrintf(&out, "'%.*q'", utf8.n, utf8.z);
64091 sqlite3VdbeMemRelease(&utf8);
64092 }else
64093 #endif
64095 sqlite3XPrintf(&out, "'%.*q'", pVar->n, pVar->z);
64097 }else if( pVar->flags & MEM_Zero ){
64098 sqlite3XPrintf(&out, "zeroblob(%d)", pVar->u.nZero);
64099 }else{
64100 assert( pVar->flags & MEM_Blob );
64101 sqlite3StrAccumAppend(&out, "x'", 2);
64102 for(i=0; i<pVar->n; i++){
64103 sqlite3XPrintf(&out, "%02x", pVar->z[i]&0xff);
64105 sqlite3StrAccumAppend(&out, "'", 1);
64109 return sqlite3StrAccumFinish(&out);
64112 #endif /* #ifndef SQLITE_OMIT_TRACE */
64114 /*****************************************************************************
64115 ** The following code implements the data-structure explaining logic
64116 ** for the Vdbe.
64119 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
64122 ** Allocate a new Explain object
64124 SQLITE_PRIVATE void sqlite3ExplainBegin(Vdbe *pVdbe){
64125 if( pVdbe ){
64126 sqlite3BeginBenignMalloc();
64127 Explain *p = sqlite3_malloc( sizeof(Explain) );
64128 if( p ){
64129 memset(p, 0, sizeof(*p));
64130 p->pVdbe = pVdbe;
64131 sqlite3_free(pVdbe->pExplain);
64132 pVdbe->pExplain = p;
64133 sqlite3StrAccumInit(&p->str, p->zBase, sizeof(p->zBase),
64134 SQLITE_MAX_LENGTH);
64135 p->str.useMalloc = 2;
64136 }else{
64137 sqlite3EndBenignMalloc();
64143 ** Return true if the Explain ends with a new-line.
64145 static int endsWithNL(Explain *p){
64146 return p && p->str.zText && p->str.nChar
64147 && p->str.zText[p->str.nChar-1]=='\n';
64151 ** Append text to the indentation
64153 SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe *pVdbe, const char *zFormat, ...){
64154 Explain *p;
64155 if( pVdbe && (p = pVdbe->pExplain)!=0 ){
64156 va_list ap;
64157 if( p->nIndent && endsWithNL(p) ){
64158 int n = p->nIndent;
64159 if( n>ArraySize(p->aIndent) ) n = ArraySize(p->aIndent);
64160 sqlite3AppendSpace(&p->str, p->aIndent[n-1]);
64162 va_start(ap, zFormat);
64163 sqlite3VXPrintf(&p->str, 1, zFormat, ap);
64164 va_end(ap);
64169 ** Append a '\n' if there is not already one.
64171 SQLITE_PRIVATE void sqlite3ExplainNL(Vdbe *pVdbe){
64172 Explain *p;
64173 if( pVdbe && (p = pVdbe->pExplain)!=0 && !endsWithNL(p) ){
64174 sqlite3StrAccumAppend(&p->str, "\n", 1);
64179 ** Push a new indentation level. Subsequent lines will be indented
64180 ** so that they begin at the current cursor position.
64182 SQLITE_PRIVATE void sqlite3ExplainPush(Vdbe *pVdbe){
64183 Explain *p;
64184 if( pVdbe && (p = pVdbe->pExplain)!=0 ){
64185 if( p->str.zText && p->nIndent<ArraySize(p->aIndent) ){
64186 const char *z = p->str.zText;
64187 int i = p->str.nChar-1;
64188 int x;
64189 while( i>=0 && z[i]!='\n' ){ i--; }
64190 x = (p->str.nChar - 1) - i;
64191 if( p->nIndent && x<p->aIndent[p->nIndent-1] ){
64192 x = p->aIndent[p->nIndent-1];
64194 p->aIndent[p->nIndent] = x;
64196 p->nIndent++;
64201 ** Pop the indentation stack by one level.
64203 SQLITE_PRIVATE void sqlite3ExplainPop(Vdbe *p){
64204 if( p && p->pExplain ) p->pExplain->nIndent--;
64208 ** Free the indentation structure
64210 SQLITE_PRIVATE void sqlite3ExplainFinish(Vdbe *pVdbe){
64211 if( pVdbe && pVdbe->pExplain ){
64212 sqlite3_free(pVdbe->zExplain);
64213 sqlite3ExplainNL(pVdbe);
64214 pVdbe->zExplain = sqlite3StrAccumFinish(&pVdbe->pExplain->str);
64215 sqlite3_free(pVdbe->pExplain);
64216 pVdbe->pExplain = 0;
64217 sqlite3EndBenignMalloc();
64222 ** Return the explanation of a virtual machine.
64224 SQLITE_PRIVATE const char *sqlite3VdbeExplanation(Vdbe *pVdbe){
64225 return (pVdbe && pVdbe->zExplain) ? pVdbe->zExplain : 0;
64227 #endif /* defined(SQLITE_DEBUG) */
64229 /************** End of vdbetrace.c *******************************************/
64230 /************** Begin file vdbe.c ********************************************/
64232 ** 2001 September 15
64234 ** The author disclaims copyright to this source code. In place of
64235 ** a legal notice, here is a blessing:
64237 ** May you do good and not evil.
64238 ** May you find forgiveness for yourself and forgive others.
64239 ** May you share freely, never taking more than you give.
64241 *************************************************************************
64242 ** The code in this file implements execution method of the
64243 ** Virtual Database Engine (VDBE). A separate file ("vdbeaux.c")
64244 ** handles housekeeping details such as creating and deleting
64245 ** VDBE instances. This file is solely interested in executing
64246 ** the VDBE program.
64248 ** In the external interface, an "sqlite3_stmt*" is an opaque pointer
64249 ** to a VDBE.
64251 ** The SQL parser generates a program which is then executed by
64252 ** the VDBE to do the work of the SQL statement. VDBE programs are
64253 ** similar in form to assembly language. The program consists of
64254 ** a linear sequence of operations. Each operation has an opcode
64255 ** and 5 operands. Operands P1, P2, and P3 are integers. Operand P4
64256 ** is a null-terminated string. Operand P5 is an unsigned character.
64257 ** Few opcodes use all 5 operands.
64259 ** Computation results are stored on a set of registers numbered beginning
64260 ** with 1 and going up to Vdbe.nMem. Each register can store
64261 ** either an integer, a null-terminated string, a floating point
64262 ** number, or the SQL "NULL" value. An implicit conversion from one
64263 ** type to the other occurs as necessary.
64265 ** Most of the code in this file is taken up by the sqlite3VdbeExec()
64266 ** function which does the work of interpreting a VDBE program.
64267 ** But other routines are also provided to help in building up
64268 ** a program instruction by instruction.
64270 ** Various scripts scan this source file in order to generate HTML
64271 ** documentation, headers files, or other derived files. The formatting
64272 ** of the code in this file is, therefore, important. See other comments
64273 ** in this file for details. If in doubt, do not deviate from existing
64274 ** commenting and indentation practices when changing or adding code.
64278 ** Invoke this macro on memory cells just prior to changing the
64279 ** value of the cell. This macro verifies that shallow copies are
64280 ** not misused.
64282 #ifdef SQLITE_DEBUG
64283 # define memAboutToChange(P,M) sqlite3VdbeMemAboutToChange(P,M)
64284 #else
64285 # define memAboutToChange(P,M)
64286 #endif
64289 ** The following global variable is incremented every time a cursor
64290 ** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test
64291 ** procedures use this information to make sure that indices are
64292 ** working correctly. This variable has no function other than to
64293 ** help verify the correct operation of the library.
64295 #ifdef SQLITE_TEST
64296 SQLITE_API int sqlite3_search_count = 0;
64297 #endif
64300 ** When this global variable is positive, it gets decremented once before
64301 ** each instruction in the VDBE. When it reaches zero, the u1.isInterrupted
64302 ** field of the sqlite3 structure is set in order to simulate an interrupt.
64304 ** This facility is used for testing purposes only. It does not function
64305 ** in an ordinary build.
64307 #ifdef SQLITE_TEST
64308 SQLITE_API int sqlite3_interrupt_count = 0;
64309 #endif
64312 ** The next global variable is incremented each type the OP_Sort opcode
64313 ** is executed. The test procedures use this information to make sure that
64314 ** sorting is occurring or not occurring at appropriate times. This variable
64315 ** has no function other than to help verify the correct operation of the
64316 ** library.
64318 #ifdef SQLITE_TEST
64319 SQLITE_API int sqlite3_sort_count = 0;
64320 #endif
64323 ** The next global variable records the size of the largest MEM_Blob
64324 ** or MEM_Str that has been used by a VDBE opcode. The test procedures
64325 ** use this information to make sure that the zero-blob functionality
64326 ** is working correctly. This variable has no function other than to
64327 ** help verify the correct operation of the library.
64329 #ifdef SQLITE_TEST
64330 SQLITE_API int sqlite3_max_blobsize = 0;
64331 static void updateMaxBlobsize(Mem *p){
64332 if( (p->flags & (MEM_Str|MEM_Blob))!=0 && p->n>sqlite3_max_blobsize ){
64333 sqlite3_max_blobsize = p->n;
64336 #endif
64339 ** The next global variable is incremented each type the OP_Found opcode
64340 ** is executed. This is used to test whether or not the foreign key
64341 ** operation implemented using OP_FkIsZero is working. This variable
64342 ** has no function other than to help verify the correct operation of the
64343 ** library.
64345 #ifdef SQLITE_TEST
64346 SQLITE_API int sqlite3_found_count = 0;
64347 #endif
64350 ** Test a register to see if it exceeds the current maximum blob size.
64351 ** If it does, record the new maximum blob size.
64353 #if defined(SQLITE_TEST) && !defined(SQLITE_OMIT_BUILTIN_TEST)
64354 # define UPDATE_MAX_BLOBSIZE(P) updateMaxBlobsize(P)
64355 #else
64356 # define UPDATE_MAX_BLOBSIZE(P)
64357 #endif
64360 ** Convert the given register into a string if it isn't one
64361 ** already. Return non-zero if a malloc() fails.
64363 #define Stringify(P, enc) \
64364 if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \
64365 { goto no_mem; }
64368 ** An ephemeral string value (signified by the MEM_Ephem flag) contains
64369 ** a pointer to a dynamically allocated string where some other entity
64370 ** is responsible for deallocating that string. Because the register
64371 ** does not control the string, it might be deleted without the register
64372 ** knowing it.
64374 ** This routine converts an ephemeral string into a dynamically allocated
64375 ** string that the register itself controls. In other words, it
64376 ** converts an MEM_Ephem string into an MEM_Dyn string.
64378 #define Deephemeralize(P) \
64379 if( ((P)->flags&MEM_Ephem)!=0 \
64380 && sqlite3VdbeMemMakeWriteable(P) ){ goto no_mem;}
64382 /* Return true if the cursor was opened using the OP_OpenSorter opcode. */
64383 #ifdef SQLITE_OMIT_MERGE_SORT
64384 # define isSorter(x) 0
64385 #else
64386 # define isSorter(x) ((x)->pSorter!=0)
64387 #endif
64390 ** Argument pMem points at a register that will be passed to a
64391 ** user-defined function or returned to the user as the result of a query.
64392 ** This routine sets the pMem->type variable used by the sqlite3_value_*()
64393 ** routines.
64395 SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem){
64396 int flags = pMem->flags;
64397 if( flags & MEM_Null ){
64398 pMem->type = SQLITE_NULL;
64400 else if( flags & MEM_Int ){
64401 pMem->type = SQLITE_INTEGER;
64403 else if( flags & MEM_Real ){
64404 pMem->type = SQLITE_FLOAT;
64406 else if( flags & MEM_Str ){
64407 pMem->type = SQLITE_TEXT;
64408 }else{
64409 pMem->type = SQLITE_BLOB;
64414 ** Allocate VdbeCursor number iCur. Return a pointer to it. Return NULL
64415 ** if we run out of memory.
64417 static VdbeCursor *allocateCursor(
64418 Vdbe *p, /* The virtual machine */
64419 int iCur, /* Index of the new VdbeCursor */
64420 int nField, /* Number of fields in the table or index */
64421 int iDb, /* Database the cursor belongs to, or -1 */
64422 int isBtreeCursor /* True for B-Tree. False for pseudo-table or vtab */
64424 /* Find the memory cell that will be used to store the blob of memory
64425 ** required for this VdbeCursor structure. It is convenient to use a
64426 ** vdbe memory cell to manage the memory allocation required for a
64427 ** VdbeCursor structure for the following reasons:
64429 ** * Sometimes cursor numbers are used for a couple of different
64430 ** purposes in a vdbe program. The different uses might require
64431 ** different sized allocations. Memory cells provide growable
64432 ** allocations.
64434 ** * When using ENABLE_MEMORY_MANAGEMENT, memory cell buffers can
64435 ** be freed lazily via the sqlite3_release_memory() API. This
64436 ** minimizes the number of malloc calls made by the system.
64438 ** Memory cells for cursors are allocated at the top of the address
64439 ** space. Memory cell (p->nMem) corresponds to cursor 0. Space for
64440 ** cursor 1 is managed by memory cell (p->nMem-1), etc.
64442 Mem *pMem = &p->aMem[p->nMem-iCur];
64444 int nByte;
64445 VdbeCursor *pCx = 0;
64446 nByte =
64447 ROUND8(sizeof(VdbeCursor)) +
64448 (isBtreeCursor?sqlite3BtreeCursorSize():0) +
64449 2*nField*sizeof(u32);
64451 assert( iCur<p->nCursor );
64452 if( p->apCsr[iCur] ){
64453 sqlite3VdbeFreeCursor(p, p->apCsr[iCur]);
64454 p->apCsr[iCur] = 0;
64456 if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){
64457 p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z;
64458 memset(pCx, 0, sizeof(VdbeCursor));
64459 pCx->iDb = iDb;
64460 pCx->nField = nField;
64461 if( nField ){
64462 pCx->aType = (u32 *)&pMem->z[ROUND8(sizeof(VdbeCursor))];
64464 if( isBtreeCursor ){
64465 pCx->pCursor = (BtCursor*)
64466 &pMem->z[ROUND8(sizeof(VdbeCursor))+2*nField*sizeof(u32)];
64467 sqlite3BtreeCursorZero(pCx->pCursor);
64470 return pCx;
64474 ** Try to convert a value into a numeric representation if we can
64475 ** do so without loss of information. In other words, if the string
64476 ** looks like a number, convert it into a number. If it does not
64477 ** look like a number, leave it alone.
64479 static void applyNumericAffinity(Mem *pRec){
64480 if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){
64481 double rValue;
64482 i64 iValue;
64483 u8 enc = pRec->enc;
64484 if( (pRec->flags&MEM_Str)==0 ) return;
64485 if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
64486 if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
64487 pRec->u.i = iValue;
64488 pRec->flags |= MEM_Int;
64489 }else{
64490 pRec->r = rValue;
64491 pRec->flags |= MEM_Real;
64497 ** Processing is determine by the affinity parameter:
64499 ** SQLITE_AFF_INTEGER:
64500 ** SQLITE_AFF_REAL:
64501 ** SQLITE_AFF_NUMERIC:
64502 ** Try to convert pRec to an integer representation or a
64503 ** floating-point representation if an integer representation
64504 ** is not possible. Note that the integer representation is
64505 ** always preferred, even if the affinity is REAL, because
64506 ** an integer representation is more space efficient on disk.
64508 ** SQLITE_AFF_TEXT:
64509 ** Convert pRec to a text representation.
64511 ** SQLITE_AFF_NONE:
64512 ** No-op. pRec is unchanged.
64514 static void applyAffinity(
64515 Mem *pRec, /* The value to apply affinity to */
64516 char affinity, /* The affinity to be applied */
64517 u8 enc /* Use this text encoding */
64519 if( affinity==SQLITE_AFF_TEXT ){
64520 /* Only attempt the conversion to TEXT if there is an integer or real
64521 ** representation (blob and NULL do not get converted) but no string
64522 ** representation.
64524 if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){
64525 sqlite3VdbeMemStringify(pRec, enc);
64527 pRec->flags &= ~(MEM_Real|MEM_Int);
64528 }else if( affinity!=SQLITE_AFF_NONE ){
64529 assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
64530 || affinity==SQLITE_AFF_NUMERIC );
64531 applyNumericAffinity(pRec);
64532 if( pRec->flags & MEM_Real ){
64533 sqlite3VdbeIntegerAffinity(pRec);
64539 ** Try to convert the type of a function argument or a result column
64540 ** into a numeric representation. Use either INTEGER or REAL whichever
64541 ** is appropriate. But only do the conversion if it is possible without
64542 ** loss of information and return the revised type of the argument.
64544 SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){
64545 Mem *pMem = (Mem*)pVal;
64546 if( pMem->type==SQLITE_TEXT ){
64547 applyNumericAffinity(pMem);
64548 sqlite3VdbeMemStoreType(pMem);
64550 return pMem->type;
64554 ** Exported version of applyAffinity(). This one works on sqlite3_value*,
64555 ** not the internal Mem* type.
64557 SQLITE_PRIVATE void sqlite3ValueApplyAffinity(
64558 sqlite3_value *pVal,
64559 u8 affinity,
64560 u8 enc
64562 applyAffinity((Mem *)pVal, affinity, enc);
64565 #ifdef SQLITE_DEBUG
64567 ** Write a nice string representation of the contents of cell pMem
64568 ** into buffer zBuf, length nBuf.
64570 SQLITE_PRIVATE void sqlite3VdbeMemPrettyPrint(Mem *pMem, char *zBuf){
64571 char *zCsr = zBuf;
64572 int f = pMem->flags;
64574 static const char *const encnames[] = {"(X)", "(8)", "(16LE)", "(16BE)"};
64576 if( f&MEM_Blob ){
64577 int i;
64578 char c;
64579 if( f & MEM_Dyn ){
64580 c = 'z';
64581 assert( (f & (MEM_Static|MEM_Ephem))==0 );
64582 }else if( f & MEM_Static ){
64583 c = 't';
64584 assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
64585 }else if( f & MEM_Ephem ){
64586 c = 'e';
64587 assert( (f & (MEM_Static|MEM_Dyn))==0 );
64588 }else{
64589 c = 's';
64592 sqlite3_snprintf(100, zCsr, "%c", c);
64593 zCsr += sqlite3Strlen30(zCsr);
64594 sqlite3_snprintf(100, zCsr, "%d[", pMem->n);
64595 zCsr += sqlite3Strlen30(zCsr);
64596 for(i=0; i<16 && i<pMem->n; i++){
64597 sqlite3_snprintf(100, zCsr, "%02X", ((int)pMem->z[i] & 0xFF));
64598 zCsr += sqlite3Strlen30(zCsr);
64600 for(i=0; i<16 && i<pMem->n; i++){
64601 char z = pMem->z[i];
64602 if( z<32 || z>126 ) *zCsr++ = '.';
64603 else *zCsr++ = z;
64606 sqlite3_snprintf(100, zCsr, "]%s", encnames[pMem->enc]);
64607 zCsr += sqlite3Strlen30(zCsr);
64608 if( f & MEM_Zero ){
64609 sqlite3_snprintf(100, zCsr,"+%dz",pMem->u.nZero);
64610 zCsr += sqlite3Strlen30(zCsr);
64612 *zCsr = '\0';
64613 }else if( f & MEM_Str ){
64614 int j, k;
64615 zBuf[0] = ' ';
64616 if( f & MEM_Dyn ){
64617 zBuf[1] = 'z';
64618 assert( (f & (MEM_Static|MEM_Ephem))==0 );
64619 }else if( f & MEM_Static ){
64620 zBuf[1] = 't';
64621 assert( (f & (MEM_Dyn|MEM_Ephem))==0 );
64622 }else if( f & MEM_Ephem ){
64623 zBuf[1] = 'e';
64624 assert( (f & (MEM_Static|MEM_Dyn))==0 );
64625 }else{
64626 zBuf[1] = 's';
64628 k = 2;
64629 sqlite3_snprintf(100, &zBuf[k], "%d", pMem->n);
64630 k += sqlite3Strlen30(&zBuf[k]);
64631 zBuf[k++] = '[';
64632 for(j=0; j<15 && j<pMem->n; j++){
64633 u8 c = pMem->z[j];
64634 if( c>=0x20 && c<0x7f ){
64635 zBuf[k++] = c;
64636 }else{
64637 zBuf[k++] = '.';
64640 zBuf[k++] = ']';
64641 sqlite3_snprintf(100,&zBuf[k], encnames[pMem->enc]);
64642 k += sqlite3Strlen30(&zBuf[k]);
64643 zBuf[k++] = 0;
64646 #endif
64648 #ifdef SQLITE_DEBUG
64650 ** Print the value of a register for tracing purposes:
64652 static void memTracePrint(FILE *out, Mem *p){
64653 if( p->flags & MEM_Null ){
64654 fprintf(out, " NULL");
64655 }else if( (p->flags & (MEM_Int|MEM_Str))==(MEM_Int|MEM_Str) ){
64656 fprintf(out, " si:%lld", p->u.i);
64657 }else if( p->flags & MEM_Int ){
64658 fprintf(out, " i:%lld", p->u.i);
64659 #ifndef SQLITE_OMIT_FLOATING_POINT
64660 }else if( p->flags & MEM_Real ){
64661 fprintf(out, " r:%g", p->r);
64662 #endif
64663 }else if( p->flags & MEM_RowSet ){
64664 fprintf(out, " (rowset)");
64665 }else{
64666 char zBuf[200];
64667 sqlite3VdbeMemPrettyPrint(p, zBuf);
64668 fprintf(out, " ");
64669 fprintf(out, "%s", zBuf);
64672 static void registerTrace(FILE *out, int iReg, Mem *p){
64673 fprintf(out, "REG[%d] = ", iReg);
64674 memTracePrint(out, p);
64675 fprintf(out, "\n");
64677 #endif
64679 #ifdef SQLITE_DEBUG
64680 # define REGISTER_TRACE(R,M) if(p->trace)registerTrace(p->trace,R,M)
64681 #else
64682 # define REGISTER_TRACE(R,M)
64683 #endif
64686 #ifdef VDBE_PROFILE
64689 ** hwtime.h contains inline assembler code for implementing
64690 ** high-performance timing routines.
64692 /************** Include hwtime.h in the middle of vdbe.c *********************/
64693 /************** Begin file hwtime.h ******************************************/
64695 ** 2008 May 27
64697 ** The author disclaims copyright to this source code. In place of
64698 ** a legal notice, here is a blessing:
64700 ** May you do good and not evil.
64701 ** May you find forgiveness for yourself and forgive others.
64702 ** May you share freely, never taking more than you give.
64704 ******************************************************************************
64706 ** This file contains inline asm code for retrieving "high-performance"
64707 ** counters for x86 class CPUs.
64709 #ifndef _HWTIME_H_
64710 #define _HWTIME_H_
64713 ** The following routine only works on pentium-class (or newer) processors.
64714 ** It uses the RDTSC opcode to read the cycle count value out of the
64715 ** processor and returns that value. This can be used for high-res
64716 ** profiling.
64718 #if (defined(__GNUC__) || defined(_MSC_VER)) && \
64719 (defined(i386) || defined(__i386__) || defined(_M_IX86))
64721 #if defined(__GNUC__)
64723 __inline__ sqlite_uint64 sqlite3Hwtime(void){
64724 unsigned int lo, hi;
64725 __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
64726 return (sqlite_uint64)hi << 32 | lo;
64729 #elif defined(_MSC_VER)
64731 __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
64732 __asm {
64733 rdtsc
64734 ret ; return value at EDX:EAX
64738 #endif
64740 #elif (defined(__GNUC__) && defined(__x86_64__))
64742 __inline__ sqlite_uint64 sqlite3Hwtime(void){
64743 unsigned long val;
64744 __asm__ __volatile__ ("rdtsc" : "=A" (val));
64745 return val;
64748 #elif (defined(__GNUC__) && defined(__ppc__))
64750 __inline__ sqlite_uint64 sqlite3Hwtime(void){
64751 unsigned long long retval;
64752 unsigned long junk;
64753 __asm__ __volatile__ ("\n\
64754 1: mftbu %1\n\
64755 mftb %L0\n\
64756 mftbu %0\n\
64757 cmpw %0,%1\n\
64758 bne 1b"
64759 : "=r" (retval), "=r" (junk));
64760 return retval;
64763 #else
64765 #error Need implementation of sqlite3Hwtime() for your platform.
64768 ** To compile without implementing sqlite3Hwtime() for your platform,
64769 ** you can remove the above #error and use the following
64770 ** stub function. You will lose timing support for many
64771 ** of the debugging and testing utilities, but it should at
64772 ** least compile and run.
64774 SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
64776 #endif
64778 #endif /* !defined(_HWTIME_H_) */
64780 /************** End of hwtime.h **********************************************/
64781 /************** Continuing where we left off in vdbe.c ***********************/
64783 #endif
64786 ** The CHECK_FOR_INTERRUPT macro defined here looks to see if the
64787 ** sqlite3_interrupt() routine has been called. If it has been, then
64788 ** processing of the VDBE program is interrupted.
64790 ** This macro added to every instruction that does a jump in order to
64791 ** implement a loop. This test used to be on every single instruction,
64792 ** but that meant we more testing than we needed. By only testing the
64793 ** flag on jump instructions, we get a (small) speed improvement.
64795 #define CHECK_FOR_INTERRUPT \
64796 if( db->u1.isInterrupted ) goto abort_due_to_interrupt;
64799 #ifndef NDEBUG
64801 ** This function is only called from within an assert() expression. It
64802 ** checks that the sqlite3.nTransaction variable is correctly set to
64803 ** the number of non-transaction savepoints currently in the
64804 ** linked list starting at sqlite3.pSavepoint.
64806 ** Usage:
64808 ** assert( checkSavepointCount(db) );
64810 static int checkSavepointCount(sqlite3 *db){
64811 int n = 0;
64812 Savepoint *p;
64813 for(p=db->pSavepoint; p; p=p->pNext) n++;
64814 assert( n==(db->nSavepoint + db->isTransactionSavepoint) );
64815 return 1;
64817 #endif
64820 ** Transfer error message text from an sqlite3_vtab.zErrMsg (text stored
64821 ** in memory obtained from sqlite3_malloc) into a Vdbe.zErrMsg (text stored
64822 ** in memory obtained from sqlite3DbMalloc).
64824 static void importVtabErrMsg(Vdbe *p, sqlite3_vtab *pVtab){
64825 sqlite3 *db = p->db;
64826 sqlite3DbFree(db, p->zErrMsg);
64827 p->zErrMsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
64828 sqlite3_free(pVtab->zErrMsg);
64829 pVtab->zErrMsg = 0;
64834 ** Execute as much of a VDBE program as we can then return.
64836 ** sqlite3VdbeMakeReady() must be called before this routine in order to
64837 ** close the program with a final OP_Halt and to set up the callbacks
64838 ** and the error message pointer.
64840 ** Whenever a row or result data is available, this routine will either
64841 ** invoke the result callback (if there is one) or return with
64842 ** SQLITE_ROW.
64844 ** If an attempt is made to open a locked database, then this routine
64845 ** will either invoke the busy callback (if there is one) or it will
64846 ** return SQLITE_BUSY.
64848 ** If an error occurs, an error message is written to memory obtained
64849 ** from sqlite3_malloc() and p->zErrMsg is made to point to that memory.
64850 ** The error code is stored in p->rc and this routine returns SQLITE_ERROR.
64852 ** If the callback ever returns non-zero, then the program exits
64853 ** immediately. There will be no error message but the p->rc field is
64854 ** set to SQLITE_ABORT and this routine will return SQLITE_ERROR.
64856 ** A memory allocation error causes p->rc to be set to SQLITE_NOMEM and this
64857 ** routine to return SQLITE_ERROR.
64859 ** Other fatal errors return SQLITE_ERROR.
64861 ** After this routine has finished, sqlite3VdbeFinalize() should be
64862 ** used to clean up the mess that was left behind.
64864 SQLITE_PRIVATE int sqlite3VdbeExec(
64865 Vdbe *p /* The VDBE */
64867 int pc=0; /* The program counter */
64868 Op *aOp = p->aOp; /* Copy of p->aOp */
64869 Op *pOp; /* Current operation */
64870 int rc = SQLITE_OK; /* Value to return */
64871 sqlite3 *db = p->db; /* The database */
64872 u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */
64873 u8 encoding = ENC(db); /* The database encoding */
64874 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
64875 int checkProgress; /* True if progress callbacks are enabled */
64876 int nProgressOps = 0; /* Opcodes executed since progress callback. */
64877 #endif
64878 Mem *aMem = p->aMem; /* Copy of p->aMem */
64879 Mem *pIn1 = 0; /* 1st input operand */
64880 Mem *pIn2 = 0; /* 2nd input operand */
64881 Mem *pIn3 = 0; /* 3rd input operand */
64882 Mem *pOut = 0; /* Output operand */
64883 int iCompare = 0; /* Result of last OP_Compare operation */
64884 int *aPermute = 0; /* Permutation of columns for OP_Compare */
64885 i64 lastRowid = db->lastRowid; /* Saved value of the last insert ROWID */
64886 #ifdef VDBE_PROFILE
64887 u64 start; /* CPU clock count at start of opcode */
64888 int origPc; /* Program counter at start of opcode */
64889 #endif
64890 /********************************************************************
64891 ** Automatically generated code
64893 ** The following union is automatically generated by the
64894 ** vdbe-compress.tcl script. The purpose of this union is to
64895 ** reduce the amount of stack space required by this function.
64896 ** See comments in the vdbe-compress.tcl script for details.
64898 union vdbeExecUnion {
64899 struct OP_Yield_stack_vars {
64900 int pcDest;
64901 } aa;
64902 struct OP_Null_stack_vars {
64903 int cnt;
64904 } ab;
64905 struct OP_Variable_stack_vars {
64906 Mem *pVar; /* Value being transferred */
64907 } ac;
64908 struct OP_Move_stack_vars {
64909 char *zMalloc; /* Holding variable for allocated memory */
64910 int n; /* Number of registers left to copy */
64911 int p1; /* Register to copy from */
64912 int p2; /* Register to copy to */
64913 } ad;
64914 struct OP_ResultRow_stack_vars {
64915 Mem *pMem;
64916 int i;
64917 } ae;
64918 struct OP_Concat_stack_vars {
64919 i64 nByte;
64920 } af;
64921 struct OP_Remainder_stack_vars {
64922 int flags; /* Combined MEM_* flags from both inputs */
64923 i64 iA; /* Integer value of left operand */
64924 i64 iB; /* Integer value of right operand */
64925 double rA; /* Real value of left operand */
64926 double rB; /* Real value of right operand */
64927 } ag;
64928 struct OP_Function_stack_vars {
64929 int i;
64930 Mem *pArg;
64931 sqlite3_context ctx;
64932 sqlite3_value **apVal;
64933 int n;
64934 } ah;
64935 struct OP_ShiftRight_stack_vars {
64936 i64 iA;
64937 u64 uA;
64938 i64 iB;
64939 u8 op;
64940 } ai;
64941 struct OP_Ge_stack_vars {
64942 int res; /* Result of the comparison of pIn1 against pIn3 */
64943 char affinity; /* Affinity to use for comparison */
64944 u16 flags1; /* Copy of initial value of pIn1->flags */
64945 u16 flags3; /* Copy of initial value of pIn3->flags */
64946 } aj;
64947 struct OP_Compare_stack_vars {
64948 int n;
64949 int i;
64950 int p1;
64951 int p2;
64952 const KeyInfo *pKeyInfo;
64953 int idx;
64954 CollSeq *pColl; /* Collating sequence to use on this term */
64955 int bRev; /* True for DESCENDING sort order */
64956 } ak;
64957 struct OP_Or_stack_vars {
64958 int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
64959 int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
64960 } al;
64961 struct OP_IfNot_stack_vars {
64962 int c;
64963 } am;
64964 struct OP_Column_stack_vars {
64965 u32 payloadSize; /* Number of bytes in the record */
64966 i64 payloadSize64; /* Number of bytes in the record */
64967 int p1; /* P1 value of the opcode */
64968 int p2; /* column number to retrieve */
64969 VdbeCursor *pC; /* The VDBE cursor */
64970 char *zRec; /* Pointer to complete record-data */
64971 BtCursor *pCrsr; /* The BTree cursor */
64972 u32 *aType; /* aType[i] holds the numeric type of the i-th column */
64973 u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */
64974 int nField; /* number of fields in the record */
64975 int len; /* The length of the serialized data for the column */
64976 int i; /* Loop counter */
64977 char *zData; /* Part of the record being decoded */
64978 Mem *pDest; /* Where to write the extracted value */
64979 Mem sMem; /* For storing the record being decoded */
64980 u8 *zIdx; /* Index into header */
64981 u8 *zEndHdr; /* Pointer to first byte after the header */
64982 u32 offset; /* Offset into the data */
64983 u32 szField; /* Number of bytes in the content of a field */
64984 int szHdr; /* Size of the header size field at start of record */
64985 int avail; /* Number of bytes of available data */
64986 u32 t; /* A type code from the record header */
64987 Mem *pReg; /* PseudoTable input register */
64988 } an;
64989 struct OP_Affinity_stack_vars {
64990 const char *zAffinity; /* The affinity to be applied */
64991 char cAff; /* A single character of affinity */
64992 } ao;
64993 struct OP_MakeRecord_stack_vars {
64994 u8 *zNewRecord; /* A buffer to hold the data for the new record */
64995 Mem *pRec; /* The new record */
64996 u64 nData; /* Number of bytes of data space */
64997 int nHdr; /* Number of bytes of header space */
64998 i64 nByte; /* Data space required for this record */
64999 int nZero; /* Number of zero bytes at the end of the record */
65000 int nVarint; /* Number of bytes in a varint */
65001 u32 serial_type; /* Type field */
65002 Mem *pData0; /* First field to be combined into the record */
65003 Mem *pLast; /* Last field of the record */
65004 int nField; /* Number of fields in the record */
65005 char *zAffinity; /* The affinity string for the record */
65006 int file_format; /* File format to use for encoding */
65007 int i; /* Space used in zNewRecord[] */
65008 int len; /* Length of a field */
65009 } ap;
65010 struct OP_Count_stack_vars {
65011 i64 nEntry;
65012 BtCursor *pCrsr;
65013 } aq;
65014 struct OP_Savepoint_stack_vars {
65015 int p1; /* Value of P1 operand */
65016 char *zName; /* Name of savepoint */
65017 int nName;
65018 Savepoint *pNew;
65019 Savepoint *pSavepoint;
65020 Savepoint *pTmp;
65021 int iSavepoint;
65022 int ii;
65023 } ar;
65024 struct OP_AutoCommit_stack_vars {
65025 int desiredAutoCommit;
65026 int iRollback;
65027 int turnOnAC;
65028 } as;
65029 struct OP_Transaction_stack_vars {
65030 Btree *pBt;
65031 } at;
65032 struct OP_ReadCookie_stack_vars {
65033 int iMeta;
65034 int iDb;
65035 int iCookie;
65036 } au;
65037 struct OP_SetCookie_stack_vars {
65038 Db *pDb;
65039 } av;
65040 struct OP_VerifyCookie_stack_vars {
65041 int iMeta;
65042 int iGen;
65043 Btree *pBt;
65044 } aw;
65045 struct OP_OpenWrite_stack_vars {
65046 int nField;
65047 KeyInfo *pKeyInfo;
65048 int p2;
65049 int iDb;
65050 int wrFlag;
65051 Btree *pX;
65052 VdbeCursor *pCur;
65053 Db *pDb;
65054 } ax;
65055 struct OP_OpenEphemeral_stack_vars {
65056 VdbeCursor *pCx;
65057 } ay;
65058 struct OP_SorterOpen_stack_vars {
65059 VdbeCursor *pCx;
65060 } az;
65061 struct OP_OpenPseudo_stack_vars {
65062 VdbeCursor *pCx;
65063 } ba;
65064 struct OP_SeekGt_stack_vars {
65065 int res;
65066 int oc;
65067 VdbeCursor *pC;
65068 UnpackedRecord r;
65069 int nField;
65070 i64 iKey; /* The rowid we are to seek to */
65071 } bb;
65072 struct OP_Seek_stack_vars {
65073 VdbeCursor *pC;
65074 } bc;
65075 struct OP_Found_stack_vars {
65076 int alreadyExists;
65077 VdbeCursor *pC;
65078 int res;
65079 char *pFree;
65080 UnpackedRecord *pIdxKey;
65081 UnpackedRecord r;
65082 char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
65083 } bd;
65084 struct OP_IsUnique_stack_vars {
65085 u16 ii;
65086 VdbeCursor *pCx;
65087 BtCursor *pCrsr;
65088 u16 nField;
65089 Mem *aMx;
65090 UnpackedRecord r; /* B-Tree index search key */
65091 i64 R; /* Rowid stored in register P3 */
65092 } be;
65093 struct OP_NotExists_stack_vars {
65094 VdbeCursor *pC;
65095 BtCursor *pCrsr;
65096 int res;
65097 u64 iKey;
65098 } bf;
65099 struct OP_NewRowid_stack_vars {
65100 i64 v; /* The new rowid */
65101 VdbeCursor *pC; /* Cursor of table to get the new rowid */
65102 int res; /* Result of an sqlite3BtreeLast() */
65103 int cnt; /* Counter to limit the number of searches */
65104 Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */
65105 VdbeFrame *pFrame; /* Root frame of VDBE */
65106 } bg;
65107 struct OP_InsertInt_stack_vars {
65108 Mem *pData; /* MEM cell holding data for the record to be inserted */
65109 Mem *pKey; /* MEM cell holding key for the record */
65110 i64 iKey; /* The integer ROWID or key for the record to be inserted */
65111 VdbeCursor *pC; /* Cursor to table into which insert is written */
65112 int nZero; /* Number of zero-bytes to append */
65113 int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */
65114 const char *zDb; /* database name - used by the update hook */
65115 const char *zTbl; /* Table name - used by the opdate hook */
65116 int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
65117 } bh;
65118 struct OP_Delete_stack_vars {
65119 i64 iKey;
65120 VdbeCursor *pC;
65121 } bi;
65122 struct OP_SorterCompare_stack_vars {
65123 VdbeCursor *pC;
65124 int res;
65125 } bj;
65126 struct OP_SorterData_stack_vars {
65127 VdbeCursor *pC;
65128 } bk;
65129 struct OP_RowData_stack_vars {
65130 VdbeCursor *pC;
65131 BtCursor *pCrsr;
65132 u32 n;
65133 i64 n64;
65134 } bl;
65135 struct OP_Rowid_stack_vars {
65136 VdbeCursor *pC;
65137 i64 v;
65138 sqlite3_vtab *pVtab;
65139 const sqlite3_module *pModule;
65140 } bm;
65141 struct OP_NullRow_stack_vars {
65142 VdbeCursor *pC;
65143 } bn;
65144 struct OP_Last_stack_vars {
65145 VdbeCursor *pC;
65146 BtCursor *pCrsr;
65147 int res;
65148 } bo;
65149 struct OP_Rewind_stack_vars {
65150 VdbeCursor *pC;
65151 BtCursor *pCrsr;
65152 int res;
65153 } bp;
65154 struct OP_Next_stack_vars {
65155 VdbeCursor *pC;
65156 int res;
65157 } bq;
65158 struct OP_IdxInsert_stack_vars {
65159 VdbeCursor *pC;
65160 BtCursor *pCrsr;
65161 int nKey;
65162 const char *zKey;
65163 } br;
65164 struct OP_IdxDelete_stack_vars {
65165 VdbeCursor *pC;
65166 BtCursor *pCrsr;
65167 int res;
65168 UnpackedRecord r;
65169 } bs;
65170 struct OP_IdxRowid_stack_vars {
65171 BtCursor *pCrsr;
65172 VdbeCursor *pC;
65173 i64 rowid;
65174 } bt;
65175 struct OP_IdxGE_stack_vars {
65176 VdbeCursor *pC;
65177 int res;
65178 UnpackedRecord r;
65179 } bu;
65180 struct OP_Destroy_stack_vars {
65181 int iMoved;
65182 int iCnt;
65183 Vdbe *pVdbe;
65184 int iDb;
65185 } bv;
65186 struct OP_Clear_stack_vars {
65187 int nChange;
65188 } bw;
65189 struct OP_CreateTable_stack_vars {
65190 int pgno;
65191 int flags;
65192 Db *pDb;
65193 } bx;
65194 struct OP_ParseSchema_stack_vars {
65195 int iDb;
65196 const char *zMaster;
65197 char *zSql;
65198 InitData initData;
65199 } by;
65200 struct OP_IntegrityCk_stack_vars {
65201 int nRoot; /* Number of tables to check. (Number of root pages.) */
65202 int *aRoot; /* Array of rootpage numbers for tables to be checked */
65203 int j; /* Loop counter */
65204 int nErr; /* Number of errors reported */
65205 char *z; /* Text of the error report */
65206 Mem *pnErr; /* Register keeping track of errors remaining */
65207 } bz;
65208 struct OP_RowSetRead_stack_vars {
65209 i64 val;
65210 } ca;
65211 struct OP_RowSetTest_stack_vars {
65212 int iSet;
65213 int exists;
65214 } cb;
65215 struct OP_Program_stack_vars {
65216 int nMem; /* Number of memory registers for sub-program */
65217 int nByte; /* Bytes of runtime space required for sub-program */
65218 Mem *pRt; /* Register to allocate runtime space */
65219 Mem *pMem; /* Used to iterate through memory cells */
65220 Mem *pEnd; /* Last memory cell in new array */
65221 VdbeFrame *pFrame; /* New vdbe frame to execute in */
65222 SubProgram *pProgram; /* Sub-program to execute */
65223 void *t; /* Token identifying trigger */
65224 } cc;
65225 struct OP_Param_stack_vars {
65226 VdbeFrame *pFrame;
65227 Mem *pIn;
65228 } cd;
65229 struct OP_MemMax_stack_vars {
65230 Mem *pIn1;
65231 VdbeFrame *pFrame;
65232 } ce;
65233 struct OP_AggStep_stack_vars {
65234 int n;
65235 int i;
65236 Mem *pMem;
65237 Mem *pRec;
65238 sqlite3_context ctx;
65239 sqlite3_value **apVal;
65240 } cf;
65241 struct OP_AggFinal_stack_vars {
65242 Mem *pMem;
65243 } cg;
65244 struct OP_Checkpoint_stack_vars {
65245 int i; /* Loop counter */
65246 int aRes[3]; /* Results */
65247 Mem *pMem; /* Write results here */
65248 } ch;
65249 struct OP_JournalMode_stack_vars {
65250 Btree *pBt; /* Btree to change journal mode of */
65251 Pager *pPager; /* Pager associated with pBt */
65252 int eNew; /* New journal mode */
65253 int eOld; /* The old journal mode */
65254 const char *zFilename; /* Name of database file for pPager */
65255 } ci;
65256 struct OP_IncrVacuum_stack_vars {
65257 Btree *pBt;
65258 } cj;
65259 struct OP_VBegin_stack_vars {
65260 VTable *pVTab;
65261 } ck;
65262 struct OP_VOpen_stack_vars {
65263 VdbeCursor *pCur;
65264 sqlite3_vtab_cursor *pVtabCursor;
65265 sqlite3_vtab *pVtab;
65266 sqlite3_module *pModule;
65267 } cl;
65268 struct OP_VFilter_stack_vars {
65269 int nArg;
65270 int iQuery;
65271 const sqlite3_module *pModule;
65272 Mem *pQuery;
65273 Mem *pArgc;
65274 sqlite3_vtab_cursor *pVtabCursor;
65275 sqlite3_vtab *pVtab;
65276 VdbeCursor *pCur;
65277 int res;
65278 int i;
65279 Mem **apArg;
65280 } cm;
65281 struct OP_VColumn_stack_vars {
65282 sqlite3_vtab *pVtab;
65283 const sqlite3_module *pModule;
65284 Mem *pDest;
65285 sqlite3_context sContext;
65286 } cn;
65287 struct OP_VNext_stack_vars {
65288 sqlite3_vtab *pVtab;
65289 const sqlite3_module *pModule;
65290 int res;
65291 VdbeCursor *pCur;
65292 } co;
65293 struct OP_VRename_stack_vars {
65294 sqlite3_vtab *pVtab;
65295 Mem *pName;
65296 } cp;
65297 struct OP_VUpdate_stack_vars {
65298 sqlite3_vtab *pVtab;
65299 sqlite3_module *pModule;
65300 int nArg;
65301 int i;
65302 sqlite_int64 rowid;
65303 Mem **apArg;
65304 Mem *pX;
65305 } cq;
65306 struct OP_Trace_stack_vars {
65307 char *zTrace;
65308 char *z;
65309 } cr;
65310 } u;
65311 /* End automatically generated code
65312 ********************************************************************/
65314 assert( p->magic==VDBE_MAGIC_RUN ); /* sqlite3_step() verifies this */
65315 sqlite3VdbeEnter(p);
65316 if( p->rc==SQLITE_NOMEM ){
65317 /* This happens if a malloc() inside a call to sqlite3_column_text() or
65318 ** sqlite3_column_text16() failed. */
65319 goto no_mem;
65321 assert( p->rc==SQLITE_OK || p->rc==SQLITE_BUSY );
65322 p->rc = SQLITE_OK;
65323 assert( p->explain==0 );
65324 p->pResultSet = 0;
65325 db->busyHandler.nBusy = 0;
65326 CHECK_FOR_INTERRUPT;
65327 sqlite3VdbeIOTraceSql(p);
65328 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
65329 checkProgress = db->xProgress!=0;
65330 #endif
65331 #ifdef SQLITE_DEBUG
65332 sqlite3BeginBenignMalloc();
65333 if( p->pc==0 && (p->db->flags & SQLITE_VdbeListing)!=0 ){
65334 int i;
65335 printf("VDBE Program Listing:\n");
65336 sqlite3VdbePrintSql(p);
65337 for(i=0; i<p->nOp; i++){
65338 sqlite3VdbePrintOp(stdout, i, &aOp[i]);
65341 sqlite3EndBenignMalloc();
65342 #endif
65343 for(pc=p->pc; rc==SQLITE_OK; pc++){
65344 assert( pc>=0 && pc<p->nOp );
65345 if( db->mallocFailed ) goto no_mem;
65346 #ifdef VDBE_PROFILE
65347 origPc = pc;
65348 start = sqlite3Hwtime();
65349 #endif
65350 pOp = &aOp[pc];
65352 /* Only allow tracing if SQLITE_DEBUG is defined.
65354 #ifdef SQLITE_DEBUG
65355 if( p->trace ){
65356 if( pc==0 ){
65357 printf("VDBE Execution Trace:\n");
65358 sqlite3VdbePrintSql(p);
65360 sqlite3VdbePrintOp(p->trace, pc, pOp);
65362 #endif
65365 /* Check to see if we need to simulate an interrupt. This only happens
65366 ** if we have a special test build.
65368 #ifdef SQLITE_TEST
65369 if( sqlite3_interrupt_count>0 ){
65370 sqlite3_interrupt_count--;
65371 if( sqlite3_interrupt_count==0 ){
65372 sqlite3_interrupt(db);
65375 #endif
65377 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
65378 /* Call the progress callback if it is configured and the required number
65379 ** of VDBE ops have been executed (either since this invocation of
65380 ** sqlite3VdbeExec() or since last time the progress callback was called).
65381 ** If the progress callback returns non-zero, exit the virtual machine with
65382 ** a return code SQLITE_ABORT.
65384 if( checkProgress ){
65385 if( db->nProgressOps==nProgressOps ){
65386 int prc;
65387 prc = db->xProgress(db->pProgressArg);
65388 if( prc!=0 ){
65389 rc = SQLITE_INTERRUPT;
65390 goto vdbe_error_halt;
65392 nProgressOps = 0;
65394 nProgressOps++;
65396 #endif
65398 /* On any opcode with the "out2-prerelase" tag, free any
65399 ** external allocations out of mem[p2] and set mem[p2] to be
65400 ** an undefined integer. Opcodes will either fill in the integer
65401 ** value or convert mem[p2] to a different type.
65403 assert( pOp->opflags==sqlite3OpcodeProperty[pOp->opcode] );
65404 if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){
65405 assert( pOp->p2>0 );
65406 assert( pOp->p2<=p->nMem );
65407 pOut = &aMem[pOp->p2];
65408 memAboutToChange(p, pOut);
65409 VdbeMemRelease(pOut);
65410 pOut->flags = MEM_Int;
65413 /* Sanity checking on other operands */
65414 #ifdef SQLITE_DEBUG
65415 if( (pOp->opflags & OPFLG_IN1)!=0 ){
65416 assert( pOp->p1>0 );
65417 assert( pOp->p1<=p->nMem );
65418 assert( memIsValid(&aMem[pOp->p1]) );
65419 REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]);
65421 if( (pOp->opflags & OPFLG_IN2)!=0 ){
65422 assert( pOp->p2>0 );
65423 assert( pOp->p2<=p->nMem );
65424 assert( memIsValid(&aMem[pOp->p2]) );
65425 REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]);
65427 if( (pOp->opflags & OPFLG_IN3)!=0 ){
65428 assert( pOp->p3>0 );
65429 assert( pOp->p3<=p->nMem );
65430 assert( memIsValid(&aMem[pOp->p3]) );
65431 REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]);
65433 if( (pOp->opflags & OPFLG_OUT2)!=0 ){
65434 assert( pOp->p2>0 );
65435 assert( pOp->p2<=p->nMem );
65436 memAboutToChange(p, &aMem[pOp->p2]);
65438 if( (pOp->opflags & OPFLG_OUT3)!=0 ){
65439 assert( pOp->p3>0 );
65440 assert( pOp->p3<=p->nMem );
65441 memAboutToChange(p, &aMem[pOp->p3]);
65443 #endif
65445 switch( pOp->opcode ){
65447 /*****************************************************************************
65448 ** What follows is a massive switch statement where each case implements a
65449 ** separate instruction in the virtual machine. If we follow the usual
65450 ** indentation conventions, each case should be indented by 6 spaces. But
65451 ** that is a lot of wasted space on the left margin. So the code within
65452 ** the switch statement will break with convention and be flush-left. Another
65453 ** big comment (similar to this one) will mark the point in the code where
65454 ** we transition back to normal indentation.
65456 ** The formatting of each case is important. The makefile for SQLite
65457 ** generates two C files "opcodes.h" and "opcodes.c" by scanning this
65458 ** file looking for lines that begin with "case OP_". The opcodes.h files
65459 ** will be filled with #defines that give unique integer values to each
65460 ** opcode and the opcodes.c file is filled with an array of strings where
65461 ** each string is the symbolic name for the corresponding opcode. If the
65462 ** case statement is followed by a comment of the form "/# same as ... #/"
65463 ** that comment is used to determine the particular value of the opcode.
65465 ** Other keywords in the comment that follows each case are used to
65466 ** construct the OPFLG_INITIALIZER value that initializes opcodeProperty[].
65467 ** Keywords include: in1, in2, in3, out2_prerelease, out2, out3. See
65468 ** the mkopcodeh.awk script for additional information.
65470 ** Documentation about VDBE opcodes is generated by scanning this file
65471 ** for lines of that contain "Opcode:". That line and all subsequent
65472 ** comment lines are used in the generation of the opcode.html documentation
65473 ** file.
65475 ** SUMMARY:
65477 ** Formatting is important to scripts that scan this file.
65478 ** Do not deviate from the formatting style currently in use.
65480 *****************************************************************************/
65482 /* Opcode: Goto * P2 * * *
65484 ** An unconditional jump to address P2.
65485 ** The next instruction executed will be
65486 ** the one at index P2 from the beginning of
65487 ** the program.
65489 case OP_Goto: { /* jump */
65490 CHECK_FOR_INTERRUPT;
65491 pc = pOp->p2 - 1;
65492 break;
65495 /* Opcode: Gosub P1 P2 * * *
65497 ** Write the current address onto register P1
65498 ** and then jump to address P2.
65500 case OP_Gosub: { /* jump */
65501 assert( pOp->p1>0 && pOp->p1<=p->nMem );
65502 pIn1 = &aMem[pOp->p1];
65503 assert( (pIn1->flags & MEM_Dyn)==0 );
65504 memAboutToChange(p, pIn1);
65505 pIn1->flags = MEM_Int;
65506 pIn1->u.i = pc;
65507 REGISTER_TRACE(pOp->p1, pIn1);
65508 pc = pOp->p2 - 1;
65509 break;
65512 /* Opcode: Return P1 * * * *
65514 ** Jump to the next instruction after the address in register P1.
65516 case OP_Return: { /* in1 */
65517 pIn1 = &aMem[pOp->p1];
65518 assert( pIn1->flags & MEM_Int );
65519 pc = (int)pIn1->u.i;
65520 break;
65523 /* Opcode: Yield P1 * * * *
65525 ** Swap the program counter with the value in register P1.
65527 case OP_Yield: { /* in1 */
65528 #if 0 /* local variables moved into u.aa */
65529 int pcDest;
65530 #endif /* local variables moved into u.aa */
65531 pIn1 = &aMem[pOp->p1];
65532 assert( (pIn1->flags & MEM_Dyn)==0 );
65533 pIn1->flags = MEM_Int;
65534 u.aa.pcDest = (int)pIn1->u.i;
65535 pIn1->u.i = pc;
65536 REGISTER_TRACE(pOp->p1, pIn1);
65537 pc = u.aa.pcDest;
65538 break;
65541 /* Opcode: HaltIfNull P1 P2 P3 P4 *
65543 ** Check the value in register P3. If it is NULL then Halt using
65544 ** parameter P1, P2, and P4 as if this were a Halt instruction. If the
65545 ** value in register P3 is not NULL, then this routine is a no-op.
65547 case OP_HaltIfNull: { /* in3 */
65548 pIn3 = &aMem[pOp->p3];
65549 if( (pIn3->flags & MEM_Null)==0 ) break;
65550 /* Fall through into OP_Halt */
65553 /* Opcode: Halt P1 P2 * P4 *
65555 ** Exit immediately. All open cursors, etc are closed
65556 ** automatically.
65558 ** P1 is the result code returned by sqlite3_exec(), sqlite3_reset(),
65559 ** or sqlite3_finalize(). For a normal halt, this should be SQLITE_OK (0).
65560 ** For errors, it can be some other value. If P1!=0 then P2 will determine
65561 ** whether or not to rollback the current transaction. Do not rollback
65562 ** if P2==OE_Fail. Do the rollback if P2==OE_Rollback. If P2==OE_Abort,
65563 ** then back out all changes that have occurred during this execution of the
65564 ** VDBE, but do not rollback the transaction.
65566 ** If P4 is not null then it is an error message string.
65568 ** There is an implied "Halt 0 0 0" instruction inserted at the very end of
65569 ** every program. So a jump past the last instruction of the program
65570 ** is the same as executing Halt.
65572 case OP_Halt: {
65573 if( pOp->p1==SQLITE_OK && p->pFrame ){
65574 /* Halt the sub-program. Return control to the parent frame. */
65575 VdbeFrame *pFrame = p->pFrame;
65576 p->pFrame = pFrame->pParent;
65577 p->nFrame--;
65578 sqlite3VdbeSetChanges(db, p->nChange);
65579 pc = sqlite3VdbeFrameRestore(pFrame);
65580 lastRowid = db->lastRowid;
65581 if( pOp->p2==OE_Ignore ){
65582 /* Instruction pc is the OP_Program that invoked the sub-program
65583 ** currently being halted. If the p2 instruction of this OP_Halt
65584 ** instruction is set to OE_Ignore, then the sub-program is throwing
65585 ** an IGNORE exception. In this case jump to the address specified
65586 ** as the p2 of the calling OP_Program. */
65587 pc = p->aOp[pc].p2-1;
65589 aOp = p->aOp;
65590 aMem = p->aMem;
65591 break;
65594 p->rc = pOp->p1;
65595 p->errorAction = (u8)pOp->p2;
65596 p->pc = pc;
65597 if( pOp->p4.z ){
65598 assert( p->rc!=SQLITE_OK );
65599 sqlite3SetString(&p->zErrMsg, db, "%s", pOp->p4.z);
65600 testcase( sqlite3GlobalConfig.xLog!=0 );
65601 sqlite3_log(pOp->p1, "abort at %d in [%s]: %s", pc, p->zSql, pOp->p4.z);
65602 }else if( p->rc ){
65603 testcase( sqlite3GlobalConfig.xLog!=0 );
65604 sqlite3_log(pOp->p1, "constraint failed at %d in [%s]", pc, p->zSql);
65606 rc = sqlite3VdbeHalt(p);
65607 assert( rc==SQLITE_BUSY || rc==SQLITE_OK || rc==SQLITE_ERROR );
65608 if( rc==SQLITE_BUSY ){
65609 p->rc = rc = SQLITE_BUSY;
65610 }else{
65611 assert( rc==SQLITE_OK || p->rc==SQLITE_CONSTRAINT );
65612 assert( rc==SQLITE_OK || db->nDeferredCons>0 );
65613 rc = p->rc ? SQLITE_ERROR : SQLITE_DONE;
65615 goto vdbe_return;
65618 /* Opcode: Integer P1 P2 * * *
65620 ** The 32-bit integer value P1 is written into register P2.
65622 case OP_Integer: { /* out2-prerelease */
65623 pOut->u.i = pOp->p1;
65624 break;
65627 /* Opcode: Int64 * P2 * P4 *
65629 ** P4 is a pointer to a 64-bit integer value.
65630 ** Write that value into register P2.
65632 case OP_Int64: { /* out2-prerelease */
65633 assert( pOp->p4.pI64!=0 );
65634 pOut->u.i = *pOp->p4.pI64;
65635 break;
65638 #ifndef SQLITE_OMIT_FLOATING_POINT
65639 /* Opcode: Real * P2 * P4 *
65641 ** P4 is a pointer to a 64-bit floating point value.
65642 ** Write that value into register P2.
65644 case OP_Real: { /* same as TK_FLOAT, out2-prerelease */
65645 pOut->flags = MEM_Real;
65646 assert( !sqlite3IsNaN(*pOp->p4.pReal) );
65647 pOut->r = *pOp->p4.pReal;
65648 break;
65650 #endif
65652 /* Opcode: String8 * P2 * P4 *
65654 ** P4 points to a nul terminated UTF-8 string. This opcode is transformed
65655 ** into an OP_String before it is executed for the first time.
65657 case OP_String8: { /* same as TK_STRING, out2-prerelease */
65658 assert( pOp->p4.z!=0 );
65659 pOp->opcode = OP_String;
65660 pOp->p1 = sqlite3Strlen30(pOp->p4.z);
65662 #ifndef SQLITE_OMIT_UTF16
65663 if( encoding!=SQLITE_UTF8 ){
65664 rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC);
65665 if( rc==SQLITE_TOOBIG ) goto too_big;
65666 if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem;
65667 assert( pOut->zMalloc==pOut->z );
65668 assert( pOut->flags & MEM_Dyn );
65669 pOut->zMalloc = 0;
65670 pOut->flags |= MEM_Static;
65671 pOut->flags &= ~MEM_Dyn;
65672 if( pOp->p4type==P4_DYNAMIC ){
65673 sqlite3DbFree(db, pOp->p4.z);
65675 pOp->p4type = P4_DYNAMIC;
65676 pOp->p4.z = pOut->z;
65677 pOp->p1 = pOut->n;
65679 #endif
65680 if( pOp->p1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
65681 goto too_big;
65683 /* Fall through to the next case, OP_String */
65686 /* Opcode: String P1 P2 * P4 *
65688 ** The string value P4 of length P1 (bytes) is stored in register P2.
65690 case OP_String: { /* out2-prerelease */
65691 assert( pOp->p4.z!=0 );
65692 pOut->flags = MEM_Str|MEM_Static|MEM_Term;
65693 pOut->z = pOp->p4.z;
65694 pOut->n = pOp->p1;
65695 pOut->enc = encoding;
65696 UPDATE_MAX_BLOBSIZE(pOut);
65697 break;
65700 /* Opcode: Null * P2 P3 * *
65702 ** Write a NULL into registers P2. If P3 greater than P2, then also write
65703 ** NULL into register P3 and ever register in between P2 and P3. If P3
65704 ** is less than P2 (typically P3 is zero) then only register P2 is
65705 ** set to NULL
65707 case OP_Null: { /* out2-prerelease */
65708 #if 0 /* local variables moved into u.ab */
65709 int cnt;
65710 #endif /* local variables moved into u.ab */
65711 u.ab.cnt = pOp->p3-pOp->p2;
65712 assert( pOp->p3<=p->nMem );
65713 pOut->flags = MEM_Null;
65714 while( u.ab.cnt>0 ){
65715 pOut++;
65716 memAboutToChange(p, pOut);
65717 VdbeMemRelease(pOut);
65718 pOut->flags = MEM_Null;
65719 u.ab.cnt--;
65721 break;
65725 /* Opcode: Blob P1 P2 * P4
65727 ** P4 points to a blob of data P1 bytes long. Store this
65728 ** blob in register P2.
65730 case OP_Blob: { /* out2-prerelease */
65731 assert( pOp->p1 <= SQLITE_MAX_LENGTH );
65732 sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0);
65733 pOut->enc = encoding;
65734 UPDATE_MAX_BLOBSIZE(pOut);
65735 break;
65738 /* Opcode: Variable P1 P2 * P4 *
65740 ** Transfer the values of bound parameter P1 into register P2
65742 ** If the parameter is named, then its name appears in P4 and P3==1.
65743 ** The P4 value is used by sqlite3_bind_parameter_name().
65745 case OP_Variable: { /* out2-prerelease */
65746 #if 0 /* local variables moved into u.ac */
65747 Mem *pVar; /* Value being transferred */
65748 #endif /* local variables moved into u.ac */
65750 assert( pOp->p1>0 && pOp->p1<=p->nVar );
65751 assert( pOp->p4.z==0 || pOp->p4.z==p->azVar[pOp->p1-1] );
65752 u.ac.pVar = &p->aVar[pOp->p1 - 1];
65753 if( sqlite3VdbeMemTooBig(u.ac.pVar) ){
65754 goto too_big;
65756 sqlite3VdbeMemShallowCopy(pOut, u.ac.pVar, MEM_Static);
65757 UPDATE_MAX_BLOBSIZE(pOut);
65758 break;
65761 /* Opcode: Move P1 P2 P3 * *
65763 ** Move the values in register P1..P1+P3-1 over into
65764 ** registers P2..P2+P3-1. Registers P1..P1+P1-1 are
65765 ** left holding a NULL. It is an error for register ranges
65766 ** P1..P1+P3-1 and P2..P2+P3-1 to overlap.
65768 case OP_Move: {
65769 #if 0 /* local variables moved into u.ad */
65770 char *zMalloc; /* Holding variable for allocated memory */
65771 int n; /* Number of registers left to copy */
65772 int p1; /* Register to copy from */
65773 int p2; /* Register to copy to */
65774 #endif /* local variables moved into u.ad */
65776 u.ad.n = pOp->p3;
65777 u.ad.p1 = pOp->p1;
65778 u.ad.p2 = pOp->p2;
65779 assert( u.ad.n>0 && u.ad.p1>0 && u.ad.p2>0 );
65780 assert( u.ad.p1+u.ad.n<=u.ad.p2 || u.ad.p2+u.ad.n<=u.ad.p1 );
65782 pIn1 = &aMem[u.ad.p1];
65783 pOut = &aMem[u.ad.p2];
65784 while( u.ad.n-- ){
65785 assert( pOut<=&aMem[p->nMem] );
65786 assert( pIn1<=&aMem[p->nMem] );
65787 assert( memIsValid(pIn1) );
65788 memAboutToChange(p, pOut);
65789 u.ad.zMalloc = pOut->zMalloc;
65790 pOut->zMalloc = 0;
65791 sqlite3VdbeMemMove(pOut, pIn1);
65792 #ifdef SQLITE_DEBUG
65793 if( pOut->pScopyFrom>=&aMem[u.ad.p1] && pOut->pScopyFrom<&aMem[u.ad.p1+pOp->p3] ){
65794 pOut->pScopyFrom += u.ad.p1 - pOp->p2;
65796 #endif
65797 pIn1->zMalloc = u.ad.zMalloc;
65798 REGISTER_TRACE(u.ad.p2++, pOut);
65799 pIn1++;
65800 pOut++;
65802 break;
65805 /* Opcode: Copy P1 P2 * * *
65807 ** Make a copy of register P1 into register P2.
65809 ** This instruction makes a deep copy of the value. A duplicate
65810 ** is made of any string or blob constant. See also OP_SCopy.
65812 case OP_Copy: { /* in1, out2 */
65813 pIn1 = &aMem[pOp->p1];
65814 pOut = &aMem[pOp->p2];
65815 assert( pOut!=pIn1 );
65816 sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
65817 Deephemeralize(pOut);
65818 REGISTER_TRACE(pOp->p2, pOut);
65819 break;
65822 /* Opcode: SCopy P1 P2 * * *
65824 ** Make a shallow copy of register P1 into register P2.
65826 ** This instruction makes a shallow copy of the value. If the value
65827 ** is a string or blob, then the copy is only a pointer to the
65828 ** original and hence if the original changes so will the copy.
65829 ** Worse, if the original is deallocated, the copy becomes invalid.
65830 ** Thus the program must guarantee that the original will not change
65831 ** during the lifetime of the copy. Use OP_Copy to make a complete
65832 ** copy.
65834 case OP_SCopy: { /* in1, out2 */
65835 pIn1 = &aMem[pOp->p1];
65836 pOut = &aMem[pOp->p2];
65837 assert( pOut!=pIn1 );
65838 sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
65839 #ifdef SQLITE_DEBUG
65840 if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1;
65841 #endif
65842 REGISTER_TRACE(pOp->p2, pOut);
65843 break;
65846 /* Opcode: ResultRow P1 P2 * * *
65848 ** The registers P1 through P1+P2-1 contain a single row of
65849 ** results. This opcode causes the sqlite3_step() call to terminate
65850 ** with an SQLITE_ROW return code and it sets up the sqlite3_stmt
65851 ** structure to provide access to the top P1 values as the result
65852 ** row.
65854 case OP_ResultRow: {
65855 #if 0 /* local variables moved into u.ae */
65856 Mem *pMem;
65857 int i;
65858 #endif /* local variables moved into u.ae */
65859 assert( p->nResColumn==pOp->p2 );
65860 assert( pOp->p1>0 );
65861 assert( pOp->p1+pOp->p2<=p->nMem+1 );
65863 /* If this statement has violated immediate foreign key constraints, do
65864 ** not return the number of rows modified. And do not RELEASE the statement
65865 ** transaction. It needs to be rolled back. */
65866 if( SQLITE_OK!=(rc = sqlite3VdbeCheckFk(p, 0)) ){
65867 assert( db->flags&SQLITE_CountRows );
65868 assert( p->usesStmtJournal );
65869 break;
65872 /* If the SQLITE_CountRows flag is set in sqlite3.flags mask, then
65873 ** DML statements invoke this opcode to return the number of rows
65874 ** modified to the user. This is the only way that a VM that
65875 ** opens a statement transaction may invoke this opcode.
65877 ** In case this is such a statement, close any statement transaction
65878 ** opened by this VM before returning control to the user. This is to
65879 ** ensure that statement-transactions are always nested, not overlapping.
65880 ** If the open statement-transaction is not closed here, then the user
65881 ** may step another VM that opens its own statement transaction. This
65882 ** may lead to overlapping statement transactions.
65884 ** The statement transaction is never a top-level transaction. Hence
65885 ** the RELEASE call below can never fail.
65887 assert( p->iStatement==0 || db->flags&SQLITE_CountRows );
65888 rc = sqlite3VdbeCloseStatement(p, SAVEPOINT_RELEASE);
65889 if( NEVER(rc!=SQLITE_OK) ){
65890 break;
65893 /* Invalidate all ephemeral cursor row caches */
65894 p->cacheCtr = (p->cacheCtr + 2)|1;
65896 /* Make sure the results of the current row are \000 terminated
65897 ** and have an assigned type. The results are de-ephemeralized as
65898 ** a side effect.
65900 u.ae.pMem = p->pResultSet = &aMem[pOp->p1];
65901 for(u.ae.i=0; u.ae.i<pOp->p2; u.ae.i++){
65902 assert( memIsValid(&u.ae.pMem[u.ae.i]) );
65903 Deephemeralize(&u.ae.pMem[u.ae.i]);
65904 assert( (u.ae.pMem[u.ae.i].flags & MEM_Ephem)==0
65905 || (u.ae.pMem[u.ae.i].flags & (MEM_Str|MEM_Blob))==0 );
65906 sqlite3VdbeMemNulTerminate(&u.ae.pMem[u.ae.i]);
65907 sqlite3VdbeMemStoreType(&u.ae.pMem[u.ae.i]);
65908 REGISTER_TRACE(pOp->p1+u.ae.i, &u.ae.pMem[u.ae.i]);
65910 if( db->mallocFailed ) goto no_mem;
65912 /* Return SQLITE_ROW
65914 p->pc = pc + 1;
65915 rc = SQLITE_ROW;
65916 goto vdbe_return;
65919 /* Opcode: Concat P1 P2 P3 * *
65921 ** Add the text in register P1 onto the end of the text in
65922 ** register P2 and store the result in register P3.
65923 ** If either the P1 or P2 text are NULL then store NULL in P3.
65925 ** P3 = P2 || P1
65927 ** It is illegal for P1 and P3 to be the same register. Sometimes,
65928 ** if P3 is the same register as P2, the implementation is able
65929 ** to avoid a memcpy().
65931 case OP_Concat: { /* same as TK_CONCAT, in1, in2, out3 */
65932 #if 0 /* local variables moved into u.af */
65933 i64 nByte;
65934 #endif /* local variables moved into u.af */
65936 pIn1 = &aMem[pOp->p1];
65937 pIn2 = &aMem[pOp->p2];
65938 pOut = &aMem[pOp->p3];
65939 assert( pIn1!=pOut );
65940 if( (pIn1->flags | pIn2->flags) & MEM_Null ){
65941 sqlite3VdbeMemSetNull(pOut);
65942 break;
65944 if( ExpandBlob(pIn1) || ExpandBlob(pIn2) ) goto no_mem;
65945 Stringify(pIn1, encoding);
65946 Stringify(pIn2, encoding);
65947 u.af.nByte = pIn1->n + pIn2->n;
65948 if( u.af.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
65949 goto too_big;
65951 MemSetTypeFlag(pOut, MEM_Str);
65952 if( sqlite3VdbeMemGrow(pOut, (int)u.af.nByte+2, pOut==pIn2) ){
65953 goto no_mem;
65955 if( pOut!=pIn2 ){
65956 memcpy(pOut->z, pIn2->z, pIn2->n);
65958 memcpy(&pOut->z[pIn2->n], pIn1->z, pIn1->n);
65959 pOut->z[u.af.nByte] = 0;
65960 pOut->z[u.af.nByte+1] = 0;
65961 pOut->flags |= MEM_Term;
65962 pOut->n = (int)u.af.nByte;
65963 pOut->enc = encoding;
65964 UPDATE_MAX_BLOBSIZE(pOut);
65965 break;
65968 /* Opcode: Add P1 P2 P3 * *
65970 ** Add the value in register P1 to the value in register P2
65971 ** and store the result in register P3.
65972 ** If either input is NULL, the result is NULL.
65974 /* Opcode: Multiply P1 P2 P3 * *
65977 ** Multiply the value in register P1 by the value in register P2
65978 ** and store the result in register P3.
65979 ** If either input is NULL, the result is NULL.
65981 /* Opcode: Subtract P1 P2 P3 * *
65983 ** Subtract the value in register P1 from the value in register P2
65984 ** and store the result in register P3.
65985 ** If either input is NULL, the result is NULL.
65987 /* Opcode: Divide P1 P2 P3 * *
65989 ** Divide the value in register P1 by the value in register P2
65990 ** and store the result in register P3 (P3=P2/P1). If the value in
65991 ** register P1 is zero, then the result is NULL. If either input is
65992 ** NULL, the result is NULL.
65994 /* Opcode: Remainder P1 P2 P3 * *
65996 ** Compute the remainder after integer division of the value in
65997 ** register P1 by the value in register P2 and store the result in P3.
65998 ** If the value in register P2 is zero the result is NULL.
65999 ** If either operand is NULL, the result is NULL.
66001 case OP_Add: /* same as TK_PLUS, in1, in2, out3 */
66002 case OP_Subtract: /* same as TK_MINUS, in1, in2, out3 */
66003 case OP_Multiply: /* same as TK_STAR, in1, in2, out3 */
66004 case OP_Divide: /* same as TK_SLASH, in1, in2, out3 */
66005 case OP_Remainder: { /* same as TK_REM, in1, in2, out3 */
66006 #if 0 /* local variables moved into u.ag */
66007 int flags; /* Combined MEM_* flags from both inputs */
66008 i64 iA; /* Integer value of left operand */
66009 i64 iB; /* Integer value of right operand */
66010 double rA; /* Real value of left operand */
66011 double rB; /* Real value of right operand */
66012 #endif /* local variables moved into u.ag */
66014 pIn1 = &aMem[pOp->p1];
66015 applyNumericAffinity(pIn1);
66016 pIn2 = &aMem[pOp->p2];
66017 applyNumericAffinity(pIn2);
66018 pOut = &aMem[pOp->p3];
66019 u.ag.flags = pIn1->flags | pIn2->flags;
66020 if( (u.ag.flags & MEM_Null)!=0 ) goto arithmetic_result_is_null;
66021 if( (pIn1->flags & pIn2->flags & MEM_Int)==MEM_Int ){
66022 u.ag.iA = pIn1->u.i;
66023 u.ag.iB = pIn2->u.i;
66024 switch( pOp->opcode ){
66025 case OP_Add: if( sqlite3AddInt64(&u.ag.iB,u.ag.iA) ) goto fp_math; break;
66026 case OP_Subtract: if( sqlite3SubInt64(&u.ag.iB,u.ag.iA) ) goto fp_math; break;
66027 case OP_Multiply: if( sqlite3MulInt64(&u.ag.iB,u.ag.iA) ) goto fp_math; break;
66028 case OP_Divide: {
66029 if( u.ag.iA==0 ) goto arithmetic_result_is_null;
66030 if( u.ag.iA==-1 && u.ag.iB==SMALLEST_INT64 ) goto fp_math;
66031 u.ag.iB /= u.ag.iA;
66032 break;
66034 default: {
66035 if( u.ag.iA==0 ) goto arithmetic_result_is_null;
66036 if( u.ag.iA==-1 ) u.ag.iA = 1;
66037 u.ag.iB %= u.ag.iA;
66038 break;
66041 pOut->u.i = u.ag.iB;
66042 MemSetTypeFlag(pOut, MEM_Int);
66043 }else{
66044 fp_math:
66045 u.ag.rA = sqlite3VdbeRealValue(pIn1);
66046 u.ag.rB = sqlite3VdbeRealValue(pIn2);
66047 switch( pOp->opcode ){
66048 case OP_Add: u.ag.rB += u.ag.rA; break;
66049 case OP_Subtract: u.ag.rB -= u.ag.rA; break;
66050 case OP_Multiply: u.ag.rB *= u.ag.rA; break;
66051 case OP_Divide: {
66052 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
66053 if( u.ag.rA==(double)0 ) goto arithmetic_result_is_null;
66054 u.ag.rB /= u.ag.rA;
66055 break;
66057 default: {
66058 u.ag.iA = (i64)u.ag.rA;
66059 u.ag.iB = (i64)u.ag.rB;
66060 if( u.ag.iA==0 ) goto arithmetic_result_is_null;
66061 if( u.ag.iA==-1 ) u.ag.iA = 1;
66062 u.ag.rB = (double)(u.ag.iB % u.ag.iA);
66063 break;
66066 #ifdef SQLITE_OMIT_FLOATING_POINT
66067 pOut->u.i = u.ag.rB;
66068 MemSetTypeFlag(pOut, MEM_Int);
66069 #else
66070 if( sqlite3IsNaN(u.ag.rB) ){
66071 goto arithmetic_result_is_null;
66073 pOut->r = u.ag.rB;
66074 MemSetTypeFlag(pOut, MEM_Real);
66075 if( (u.ag.flags & MEM_Real)==0 ){
66076 sqlite3VdbeIntegerAffinity(pOut);
66078 #endif
66080 break;
66082 arithmetic_result_is_null:
66083 sqlite3VdbeMemSetNull(pOut);
66084 break;
66087 /* Opcode: CollSeq * * P4
66089 ** P4 is a pointer to a CollSeq struct. If the next call to a user function
66090 ** or aggregate calls sqlite3GetFuncCollSeq(), this collation sequence will
66091 ** be returned. This is used by the built-in min(), max() and nullif()
66092 ** functions.
66094 ** The interface used by the implementation of the aforementioned functions
66095 ** to retrieve the collation sequence set by this opcode is not available
66096 ** publicly, only to user functions defined in func.c.
66098 case OP_CollSeq: {
66099 assert( pOp->p4type==P4_COLLSEQ );
66100 break;
66103 /* Opcode: Function P1 P2 P3 P4 P5
66105 ** Invoke a user function (P4 is a pointer to a Function structure that
66106 ** defines the function) with P5 arguments taken from register P2 and
66107 ** successors. The result of the function is stored in register P3.
66108 ** Register P3 must not be one of the function inputs.
66110 ** P1 is a 32-bit bitmask indicating whether or not each argument to the
66111 ** function was determined to be constant at compile time. If the first
66112 ** argument was constant then bit 0 of P1 is set. This is used to determine
66113 ** whether meta data associated with a user function argument using the
66114 ** sqlite3_set_auxdata() API may be safely retained until the next
66115 ** invocation of this opcode.
66117 ** See also: AggStep and AggFinal
66119 case OP_Function: {
66120 #if 0 /* local variables moved into u.ah */
66121 int i;
66122 Mem *pArg;
66123 sqlite3_context ctx;
66124 sqlite3_value **apVal;
66125 int n;
66126 #endif /* local variables moved into u.ah */
66128 u.ah.n = pOp->p5;
66129 u.ah.apVal = p->apArg;
66130 assert( u.ah.apVal || u.ah.n==0 );
66131 assert( pOp->p3>0 && pOp->p3<=p->nMem );
66132 pOut = &aMem[pOp->p3];
66133 memAboutToChange(p, pOut);
66135 assert( u.ah.n==0 || (pOp->p2>0 && pOp->p2+u.ah.n<=p->nMem+1) );
66136 assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+u.ah.n );
66137 u.ah.pArg = &aMem[pOp->p2];
66138 for(u.ah.i=0; u.ah.i<u.ah.n; u.ah.i++, u.ah.pArg++){
66139 assert( memIsValid(u.ah.pArg) );
66140 u.ah.apVal[u.ah.i] = u.ah.pArg;
66141 Deephemeralize(u.ah.pArg);
66142 sqlite3VdbeMemStoreType(u.ah.pArg);
66143 REGISTER_TRACE(pOp->p2+u.ah.i, u.ah.pArg);
66146 assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC );
66147 if( pOp->p4type==P4_FUNCDEF ){
66148 u.ah.ctx.pFunc = pOp->p4.pFunc;
66149 u.ah.ctx.pVdbeFunc = 0;
66150 }else{
66151 u.ah.ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc;
66152 u.ah.ctx.pFunc = u.ah.ctx.pVdbeFunc->pFunc;
66155 u.ah.ctx.s.flags = MEM_Null;
66156 u.ah.ctx.s.db = db;
66157 u.ah.ctx.s.xDel = 0;
66158 u.ah.ctx.s.zMalloc = 0;
66160 /* The output cell may already have a buffer allocated. Move
66161 ** the pointer to u.ah.ctx.s so in case the user-function can use
66162 ** the already allocated buffer instead of allocating a new one.
66164 sqlite3VdbeMemMove(&u.ah.ctx.s, pOut);
66165 MemSetTypeFlag(&u.ah.ctx.s, MEM_Null);
66167 u.ah.ctx.isError = 0;
66168 if( u.ah.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
66169 assert( pOp>aOp );
66170 assert( pOp[-1].p4type==P4_COLLSEQ );
66171 assert( pOp[-1].opcode==OP_CollSeq );
66172 u.ah.ctx.pColl = pOp[-1].p4.pColl;
66174 db->lastRowid = lastRowid;
66175 (*u.ah.ctx.pFunc->xFunc)(&u.ah.ctx, u.ah.n, u.ah.apVal); /* IMP: R-24505-23230 */
66176 lastRowid = db->lastRowid;
66178 /* If any auxiliary data functions have been called by this user function,
66179 ** immediately call the destructor for any non-static values.
66181 if( u.ah.ctx.pVdbeFunc ){
66182 sqlite3VdbeDeleteAuxData(u.ah.ctx.pVdbeFunc, pOp->p1);
66183 pOp->p4.pVdbeFunc = u.ah.ctx.pVdbeFunc;
66184 pOp->p4type = P4_VDBEFUNC;
66187 if( db->mallocFailed ){
66188 /* Even though a malloc() has failed, the implementation of the
66189 ** user function may have called an sqlite3_result_XXX() function
66190 ** to return a value. The following call releases any resources
66191 ** associated with such a value.
66193 sqlite3VdbeMemRelease(&u.ah.ctx.s);
66194 goto no_mem;
66197 /* If the function returned an error, throw an exception */
66198 if( u.ah.ctx.isError ){
66199 sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.ah.ctx.s));
66200 rc = u.ah.ctx.isError;
66203 /* Copy the result of the function into register P3 */
66204 sqlite3VdbeChangeEncoding(&u.ah.ctx.s, encoding);
66205 sqlite3VdbeMemMove(pOut, &u.ah.ctx.s);
66206 if( sqlite3VdbeMemTooBig(pOut) ){
66207 goto too_big;
66210 #if 0
66211 /* The app-defined function has done something that as caused this
66212 ** statement to expire. (Perhaps the function called sqlite3_exec()
66213 ** with a CREATE TABLE statement.)
66215 if( p->expired ) rc = SQLITE_ABORT;
66216 #endif
66218 REGISTER_TRACE(pOp->p3, pOut);
66219 UPDATE_MAX_BLOBSIZE(pOut);
66220 break;
66223 /* Opcode: BitAnd P1 P2 P3 * *
66225 ** Take the bit-wise AND of the values in register P1 and P2 and
66226 ** store the result in register P3.
66227 ** If either input is NULL, the result is NULL.
66229 /* Opcode: BitOr P1 P2 P3 * *
66231 ** Take the bit-wise OR of the values in register P1 and P2 and
66232 ** store the result in register P3.
66233 ** If either input is NULL, the result is NULL.
66235 /* Opcode: ShiftLeft P1 P2 P3 * *
66237 ** Shift the integer value in register P2 to the left by the
66238 ** number of bits specified by the integer in register P1.
66239 ** Store the result in register P3.
66240 ** If either input is NULL, the result is NULL.
66242 /* Opcode: ShiftRight P1 P2 P3 * *
66244 ** Shift the integer value in register P2 to the right by the
66245 ** number of bits specified by the integer in register P1.
66246 ** Store the result in register P3.
66247 ** If either input is NULL, the result is NULL.
66249 case OP_BitAnd: /* same as TK_BITAND, in1, in2, out3 */
66250 case OP_BitOr: /* same as TK_BITOR, in1, in2, out3 */
66251 case OP_ShiftLeft: /* same as TK_LSHIFT, in1, in2, out3 */
66252 case OP_ShiftRight: { /* same as TK_RSHIFT, in1, in2, out3 */
66253 #if 0 /* local variables moved into u.ai */
66254 i64 iA;
66255 u64 uA;
66256 i64 iB;
66257 u8 op;
66258 #endif /* local variables moved into u.ai */
66260 pIn1 = &aMem[pOp->p1];
66261 pIn2 = &aMem[pOp->p2];
66262 pOut = &aMem[pOp->p3];
66263 if( (pIn1->flags | pIn2->flags) & MEM_Null ){
66264 sqlite3VdbeMemSetNull(pOut);
66265 break;
66267 u.ai.iA = sqlite3VdbeIntValue(pIn2);
66268 u.ai.iB = sqlite3VdbeIntValue(pIn1);
66269 u.ai.op = pOp->opcode;
66270 if( u.ai.op==OP_BitAnd ){
66271 u.ai.iA &= u.ai.iB;
66272 }else if( u.ai.op==OP_BitOr ){
66273 u.ai.iA |= u.ai.iB;
66274 }else if( u.ai.iB!=0 ){
66275 assert( u.ai.op==OP_ShiftRight || u.ai.op==OP_ShiftLeft );
66277 /* If shifting by a negative amount, shift in the other direction */
66278 if( u.ai.iB<0 ){
66279 assert( OP_ShiftRight==OP_ShiftLeft+1 );
66280 u.ai.op = 2*OP_ShiftLeft + 1 - u.ai.op;
66281 u.ai.iB = u.ai.iB>(-64) ? -u.ai.iB : 64;
66284 if( u.ai.iB>=64 ){
66285 u.ai.iA = (u.ai.iA>=0 || u.ai.op==OP_ShiftLeft) ? 0 : -1;
66286 }else{
66287 memcpy(&u.ai.uA, &u.ai.iA, sizeof(u.ai.uA));
66288 if( u.ai.op==OP_ShiftLeft ){
66289 u.ai.uA <<= u.ai.iB;
66290 }else{
66291 u.ai.uA >>= u.ai.iB;
66292 /* Sign-extend on a right shift of a negative number */
66293 if( u.ai.iA<0 ) u.ai.uA |= ((((u64)0xffffffff)<<32)|0xffffffff) << (64-u.ai.iB);
66295 memcpy(&u.ai.iA, &u.ai.uA, sizeof(u.ai.iA));
66298 pOut->u.i = u.ai.iA;
66299 MemSetTypeFlag(pOut, MEM_Int);
66300 break;
66303 /* Opcode: AddImm P1 P2 * * *
66305 ** Add the constant P2 to the value in register P1.
66306 ** The result is always an integer.
66308 ** To force any register to be an integer, just add 0.
66310 case OP_AddImm: { /* in1 */
66311 pIn1 = &aMem[pOp->p1];
66312 memAboutToChange(p, pIn1);
66313 sqlite3VdbeMemIntegerify(pIn1);
66314 pIn1->u.i += pOp->p2;
66315 break;
66318 /* Opcode: MustBeInt P1 P2 * * *
66320 ** Force the value in register P1 to be an integer. If the value
66321 ** in P1 is not an integer and cannot be converted into an integer
66322 ** without data loss, then jump immediately to P2, or if P2==0
66323 ** raise an SQLITE_MISMATCH exception.
66325 case OP_MustBeInt: { /* jump, in1 */
66326 pIn1 = &aMem[pOp->p1];
66327 applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
66328 if( (pIn1->flags & MEM_Int)==0 ){
66329 if( pOp->p2==0 ){
66330 rc = SQLITE_MISMATCH;
66331 goto abort_due_to_error;
66332 }else{
66333 pc = pOp->p2 - 1;
66335 }else{
66336 MemSetTypeFlag(pIn1, MEM_Int);
66338 break;
66341 #ifndef SQLITE_OMIT_FLOATING_POINT
66342 /* Opcode: RealAffinity P1 * * * *
66344 ** If register P1 holds an integer convert it to a real value.
66346 ** This opcode is used when extracting information from a column that
66347 ** has REAL affinity. Such column values may still be stored as
66348 ** integers, for space efficiency, but after extraction we want them
66349 ** to have only a real value.
66351 case OP_RealAffinity: { /* in1 */
66352 pIn1 = &aMem[pOp->p1];
66353 if( pIn1->flags & MEM_Int ){
66354 sqlite3VdbeMemRealify(pIn1);
66356 break;
66358 #endif
66360 #ifndef SQLITE_OMIT_CAST
66361 /* Opcode: ToText P1 * * * *
66363 ** Force the value in register P1 to be text.
66364 ** If the value is numeric, convert it to a string using the
66365 ** equivalent of printf(). Blob values are unchanged and
66366 ** are afterwards simply interpreted as text.
66368 ** A NULL value is not changed by this routine. It remains NULL.
66370 case OP_ToText: { /* same as TK_TO_TEXT, in1 */
66371 pIn1 = &aMem[pOp->p1];
66372 memAboutToChange(p, pIn1);
66373 if( pIn1->flags & MEM_Null ) break;
66374 assert( MEM_Str==(MEM_Blob>>3) );
66375 pIn1->flags |= (pIn1->flags&MEM_Blob)>>3;
66376 applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
66377 rc = ExpandBlob(pIn1);
66378 assert( pIn1->flags & MEM_Str || db->mallocFailed );
66379 pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
66380 UPDATE_MAX_BLOBSIZE(pIn1);
66381 break;
66384 /* Opcode: ToBlob P1 * * * *
66386 ** Force the value in register P1 to be a BLOB.
66387 ** If the value is numeric, convert it to a string first.
66388 ** Strings are simply reinterpreted as blobs with no change
66389 ** to the underlying data.
66391 ** A NULL value is not changed by this routine. It remains NULL.
66393 case OP_ToBlob: { /* same as TK_TO_BLOB, in1 */
66394 pIn1 = &aMem[pOp->p1];
66395 if( pIn1->flags & MEM_Null ) break;
66396 if( (pIn1->flags & MEM_Blob)==0 ){
66397 applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
66398 assert( pIn1->flags & MEM_Str || db->mallocFailed );
66399 MemSetTypeFlag(pIn1, MEM_Blob);
66400 }else{
66401 pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob);
66403 UPDATE_MAX_BLOBSIZE(pIn1);
66404 break;
66407 /* Opcode: ToNumeric P1 * * * *
66409 ** Force the value in register P1 to be numeric (either an
66410 ** integer or a floating-point number.)
66411 ** If the value is text or blob, try to convert it to an using the
66412 ** equivalent of atoi() or atof() and store 0 if no such conversion
66413 ** is possible.
66415 ** A NULL value is not changed by this routine. It remains NULL.
66417 case OP_ToNumeric: { /* same as TK_TO_NUMERIC, in1 */
66418 pIn1 = &aMem[pOp->p1];
66419 sqlite3VdbeMemNumerify(pIn1);
66420 break;
66422 #endif /* SQLITE_OMIT_CAST */
66424 /* Opcode: ToInt P1 * * * *
66426 ** Force the value in register P1 to be an integer. If
66427 ** The value is currently a real number, drop its fractional part.
66428 ** If the value is text or blob, try to convert it to an integer using the
66429 ** equivalent of atoi() and store 0 if no such conversion is possible.
66431 ** A NULL value is not changed by this routine. It remains NULL.
66433 case OP_ToInt: { /* same as TK_TO_INT, in1 */
66434 pIn1 = &aMem[pOp->p1];
66435 if( (pIn1->flags & MEM_Null)==0 ){
66436 sqlite3VdbeMemIntegerify(pIn1);
66438 break;
66441 #if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT)
66442 /* Opcode: ToReal P1 * * * *
66444 ** Force the value in register P1 to be a floating point number.
66445 ** If The value is currently an integer, convert it.
66446 ** If the value is text or blob, try to convert it to an integer using the
66447 ** equivalent of atoi() and store 0.0 if no such conversion is possible.
66449 ** A NULL value is not changed by this routine. It remains NULL.
66451 case OP_ToReal: { /* same as TK_TO_REAL, in1 */
66452 pIn1 = &aMem[pOp->p1];
66453 memAboutToChange(p, pIn1);
66454 if( (pIn1->flags & MEM_Null)==0 ){
66455 sqlite3VdbeMemRealify(pIn1);
66457 break;
66459 #endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */
66461 /* Opcode: Lt P1 P2 P3 P4 P5
66463 ** Compare the values in register P1 and P3. If reg(P3)<reg(P1) then
66464 ** jump to address P2.
66466 ** If the SQLITE_JUMPIFNULL bit of P5 is set and either reg(P1) or
66467 ** reg(P3) is NULL then take the jump. If the SQLITE_JUMPIFNULL
66468 ** bit is clear then fall through if either operand is NULL.
66470 ** The SQLITE_AFF_MASK portion of P5 must be an affinity character -
66471 ** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made
66472 ** to coerce both inputs according to this affinity before the
66473 ** comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
66474 ** affinity is used. Note that the affinity conversions are stored
66475 ** back into the input registers P1 and P3. So this opcode can cause
66476 ** persistent changes to registers P1 and P3.
66478 ** Once any conversions have taken place, and neither value is NULL,
66479 ** the values are compared. If both values are blobs then memcmp() is
66480 ** used to determine the results of the comparison. If both values
66481 ** are text, then the appropriate collating function specified in
66482 ** P4 is used to do the comparison. If P4 is not specified then
66483 ** memcmp() is used to compare text string. If both values are
66484 ** numeric, then a numeric comparison is used. If the two values
66485 ** are of different types, then numbers are considered less than
66486 ** strings and strings are considered less than blobs.
66488 ** If the SQLITE_STOREP2 bit of P5 is set, then do not jump. Instead,
66489 ** store a boolean result (either 0, or 1, or NULL) in register P2.
66491 /* Opcode: Ne P1 P2 P3 P4 P5
66493 ** This works just like the Lt opcode except that the jump is taken if
66494 ** the operands in registers P1 and P3 are not equal. See the Lt opcode for
66495 ** additional information.
66497 ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
66498 ** true or false and is never NULL. If both operands are NULL then the result
66499 ** of comparison is false. If either operand is NULL then the result is true.
66500 ** If neither operand is NULL the result is the same as it would be if
66501 ** the SQLITE_NULLEQ flag were omitted from P5.
66503 /* Opcode: Eq P1 P2 P3 P4 P5
66505 ** This works just like the Lt opcode except that the jump is taken if
66506 ** the operands in registers P1 and P3 are equal.
66507 ** See the Lt opcode for additional information.
66509 ** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
66510 ** true or false and is never NULL. If both operands are NULL then the result
66511 ** of comparison is true. If either operand is NULL then the result is false.
66512 ** If neither operand is NULL the result is the same as it would be if
66513 ** the SQLITE_NULLEQ flag were omitted from P5.
66515 /* Opcode: Le P1 P2 P3 P4 P5
66517 ** This works just like the Lt opcode except that the jump is taken if
66518 ** the content of register P3 is less than or equal to the content of
66519 ** register P1. See the Lt opcode for additional information.
66521 /* Opcode: Gt P1 P2 P3 P4 P5
66523 ** This works just like the Lt opcode except that the jump is taken if
66524 ** the content of register P3 is greater than the content of
66525 ** register P1. See the Lt opcode for additional information.
66527 /* Opcode: Ge P1 P2 P3 P4 P5
66529 ** This works just like the Lt opcode except that the jump is taken if
66530 ** the content of register P3 is greater than or equal to the content of
66531 ** register P1. See the Lt opcode for additional information.
66533 case OP_Eq: /* same as TK_EQ, jump, in1, in3 */
66534 case OP_Ne: /* same as TK_NE, jump, in1, in3 */
66535 case OP_Lt: /* same as TK_LT, jump, in1, in3 */
66536 case OP_Le: /* same as TK_LE, jump, in1, in3 */
66537 case OP_Gt: /* same as TK_GT, jump, in1, in3 */
66538 case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
66539 #if 0 /* local variables moved into u.aj */
66540 int res; /* Result of the comparison of pIn1 against pIn3 */
66541 char affinity; /* Affinity to use for comparison */
66542 u16 flags1; /* Copy of initial value of pIn1->flags */
66543 u16 flags3; /* Copy of initial value of pIn3->flags */
66544 #endif /* local variables moved into u.aj */
66546 pIn1 = &aMem[pOp->p1];
66547 pIn3 = &aMem[pOp->p3];
66548 u.aj.flags1 = pIn1->flags;
66549 u.aj.flags3 = pIn3->flags;
66550 if( (u.aj.flags1 | u.aj.flags3)&MEM_Null ){
66551 /* One or both operands are NULL */
66552 if( pOp->p5 & SQLITE_NULLEQ ){
66553 /* If SQLITE_NULLEQ is set (which will only happen if the operator is
66554 ** OP_Eq or OP_Ne) then take the jump or not depending on whether
66555 ** or not both operands are null.
66557 assert( pOp->opcode==OP_Eq || pOp->opcode==OP_Ne );
66558 u.aj.res = (u.aj.flags1 & u.aj.flags3 & MEM_Null)==0;
66559 }else{
66560 /* SQLITE_NULLEQ is clear and at least one operand is NULL,
66561 ** then the result is always NULL.
66562 ** The jump is taken if the SQLITE_JUMPIFNULL bit is set.
66564 if( pOp->p5 & SQLITE_STOREP2 ){
66565 pOut = &aMem[pOp->p2];
66566 MemSetTypeFlag(pOut, MEM_Null);
66567 REGISTER_TRACE(pOp->p2, pOut);
66568 }else if( pOp->p5 & SQLITE_JUMPIFNULL ){
66569 pc = pOp->p2-1;
66571 break;
66573 }else{
66574 /* Neither operand is NULL. Do a comparison. */
66575 u.aj.affinity = pOp->p5 & SQLITE_AFF_MASK;
66576 if( u.aj.affinity ){
66577 applyAffinity(pIn1, u.aj.affinity, encoding);
66578 applyAffinity(pIn3, u.aj.affinity, encoding);
66579 if( db->mallocFailed ) goto no_mem;
66582 assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 );
66583 ExpandBlob(pIn1);
66584 ExpandBlob(pIn3);
66585 u.aj.res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
66587 switch( pOp->opcode ){
66588 case OP_Eq: u.aj.res = u.aj.res==0; break;
66589 case OP_Ne: u.aj.res = u.aj.res!=0; break;
66590 case OP_Lt: u.aj.res = u.aj.res<0; break;
66591 case OP_Le: u.aj.res = u.aj.res<=0; break;
66592 case OP_Gt: u.aj.res = u.aj.res>0; break;
66593 default: u.aj.res = u.aj.res>=0; break;
66596 if( pOp->p5 & SQLITE_STOREP2 ){
66597 pOut = &aMem[pOp->p2];
66598 memAboutToChange(p, pOut);
66599 MemSetTypeFlag(pOut, MEM_Int);
66600 pOut->u.i = u.aj.res;
66601 REGISTER_TRACE(pOp->p2, pOut);
66602 }else if( u.aj.res ){
66603 pc = pOp->p2-1;
66606 /* Undo any changes made by applyAffinity() to the input registers. */
66607 pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (u.aj.flags1&MEM_TypeMask);
66608 pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (u.aj.flags3&MEM_TypeMask);
66609 break;
66612 /* Opcode: Permutation * * * P4 *
66614 ** Set the permutation used by the OP_Compare operator to be the array
66615 ** of integers in P4.
66617 ** The permutation is only valid until the next OP_Permutation, OP_Compare,
66618 ** OP_Halt, or OP_ResultRow. Typically the OP_Permutation should occur
66619 ** immediately prior to the OP_Compare.
66621 case OP_Permutation: {
66622 assert( pOp->p4type==P4_INTARRAY );
66623 assert( pOp->p4.ai );
66624 aPermute = pOp->p4.ai;
66625 break;
66628 /* Opcode: Compare P1 P2 P3 P4 *
66630 ** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this
66631 ** vector "A") and in reg(P2)..reg(P2+P3-1) ("B"). Save the result of
66632 ** the comparison for use by the next OP_Jump instruct.
66634 ** P4 is a KeyInfo structure that defines collating sequences and sort
66635 ** orders for the comparison. The permutation applies to registers
66636 ** only. The KeyInfo elements are used sequentially.
66638 ** The comparison is a sort comparison, so NULLs compare equal,
66639 ** NULLs are less than numbers, numbers are less than strings,
66640 ** and strings are less than blobs.
66642 case OP_Compare: {
66643 #if 0 /* local variables moved into u.ak */
66644 int n;
66645 int i;
66646 int p1;
66647 int p2;
66648 const KeyInfo *pKeyInfo;
66649 int idx;
66650 CollSeq *pColl; /* Collating sequence to use on this term */
66651 int bRev; /* True for DESCENDING sort order */
66652 #endif /* local variables moved into u.ak */
66654 u.ak.n = pOp->p3;
66655 u.ak.pKeyInfo = pOp->p4.pKeyInfo;
66656 assert( u.ak.n>0 );
66657 assert( u.ak.pKeyInfo!=0 );
66658 u.ak.p1 = pOp->p1;
66659 u.ak.p2 = pOp->p2;
66660 #if SQLITE_DEBUG
66661 if( aPermute ){
66662 int k, mx = 0;
66663 for(k=0; k<u.ak.n; k++) if( aPermute[k]>mx ) mx = aPermute[k];
66664 assert( u.ak.p1>0 && u.ak.p1+mx<=p->nMem+1 );
66665 assert( u.ak.p2>0 && u.ak.p2+mx<=p->nMem+1 );
66666 }else{
66667 assert( u.ak.p1>0 && u.ak.p1+u.ak.n<=p->nMem+1 );
66668 assert( u.ak.p2>0 && u.ak.p2+u.ak.n<=p->nMem+1 );
66670 #endif /* SQLITE_DEBUG */
66671 for(u.ak.i=0; u.ak.i<u.ak.n; u.ak.i++){
66672 u.ak.idx = aPermute ? aPermute[u.ak.i] : u.ak.i;
66673 assert( memIsValid(&aMem[u.ak.p1+u.ak.idx]) );
66674 assert( memIsValid(&aMem[u.ak.p2+u.ak.idx]) );
66675 REGISTER_TRACE(u.ak.p1+u.ak.idx, &aMem[u.ak.p1+u.ak.idx]);
66676 REGISTER_TRACE(u.ak.p2+u.ak.idx, &aMem[u.ak.p2+u.ak.idx]);
66677 assert( u.ak.i<u.ak.pKeyInfo->nField );
66678 u.ak.pColl = u.ak.pKeyInfo->aColl[u.ak.i];
66679 u.ak.bRev = u.ak.pKeyInfo->aSortOrder[u.ak.i];
66680 iCompare = sqlite3MemCompare(&aMem[u.ak.p1+u.ak.idx], &aMem[u.ak.p2+u.ak.idx], u.ak.pColl);
66681 if( iCompare ){
66682 if( u.ak.bRev ) iCompare = -iCompare;
66683 break;
66686 aPermute = 0;
66687 break;
66690 /* Opcode: Jump P1 P2 P3 * *
66692 ** Jump to the instruction at address P1, P2, or P3 depending on whether
66693 ** in the most recent OP_Compare instruction the P1 vector was less than
66694 ** equal to, or greater than the P2 vector, respectively.
66696 case OP_Jump: { /* jump */
66697 if( iCompare<0 ){
66698 pc = pOp->p1 - 1;
66699 }else if( iCompare==0 ){
66700 pc = pOp->p2 - 1;
66701 }else{
66702 pc = pOp->p3 - 1;
66704 break;
66707 /* Opcode: And P1 P2 P3 * *
66709 ** Take the logical AND of the values in registers P1 and P2 and
66710 ** write the result into register P3.
66712 ** If either P1 or P2 is 0 (false) then the result is 0 even if
66713 ** the other input is NULL. A NULL and true or two NULLs give
66714 ** a NULL output.
66716 /* Opcode: Or P1 P2 P3 * *
66718 ** Take the logical OR of the values in register P1 and P2 and
66719 ** store the answer in register P3.
66721 ** If either P1 or P2 is nonzero (true) then the result is 1 (true)
66722 ** even if the other input is NULL. A NULL and false or two NULLs
66723 ** give a NULL output.
66725 case OP_And: /* same as TK_AND, in1, in2, out3 */
66726 case OP_Or: { /* same as TK_OR, in1, in2, out3 */
66727 #if 0 /* local variables moved into u.al */
66728 int v1; /* Left operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
66729 int v2; /* Right operand: 0==FALSE, 1==TRUE, 2==UNKNOWN or NULL */
66730 #endif /* local variables moved into u.al */
66732 pIn1 = &aMem[pOp->p1];
66733 if( pIn1->flags & MEM_Null ){
66734 u.al.v1 = 2;
66735 }else{
66736 u.al.v1 = sqlite3VdbeIntValue(pIn1)!=0;
66738 pIn2 = &aMem[pOp->p2];
66739 if( pIn2->flags & MEM_Null ){
66740 u.al.v2 = 2;
66741 }else{
66742 u.al.v2 = sqlite3VdbeIntValue(pIn2)!=0;
66744 if( pOp->opcode==OP_And ){
66745 static const unsigned char and_logic[] = { 0, 0, 0, 0, 1, 2, 0, 2, 2 };
66746 u.al.v1 = and_logic[u.al.v1*3+u.al.v2];
66747 }else{
66748 static const unsigned char or_logic[] = { 0, 1, 2, 1, 1, 1, 2, 1, 2 };
66749 u.al.v1 = or_logic[u.al.v1*3+u.al.v2];
66751 pOut = &aMem[pOp->p3];
66752 if( u.al.v1==2 ){
66753 MemSetTypeFlag(pOut, MEM_Null);
66754 }else{
66755 pOut->u.i = u.al.v1;
66756 MemSetTypeFlag(pOut, MEM_Int);
66758 break;
66761 /* Opcode: Not P1 P2 * * *
66763 ** Interpret the value in register P1 as a boolean value. Store the
66764 ** boolean complement in register P2. If the value in register P1 is
66765 ** NULL, then a NULL is stored in P2.
66767 case OP_Not: { /* same as TK_NOT, in1, out2 */
66768 pIn1 = &aMem[pOp->p1];
66769 pOut = &aMem[pOp->p2];
66770 if( pIn1->flags & MEM_Null ){
66771 sqlite3VdbeMemSetNull(pOut);
66772 }else{
66773 sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1));
66775 break;
66778 /* Opcode: BitNot P1 P2 * * *
66780 ** Interpret the content of register P1 as an integer. Store the
66781 ** ones-complement of the P1 value into register P2. If P1 holds
66782 ** a NULL then store a NULL in P2.
66784 case OP_BitNot: { /* same as TK_BITNOT, in1, out2 */
66785 pIn1 = &aMem[pOp->p1];
66786 pOut = &aMem[pOp->p2];
66787 if( pIn1->flags & MEM_Null ){
66788 sqlite3VdbeMemSetNull(pOut);
66789 }else{
66790 sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1));
66792 break;
66795 /* Opcode: Once P1 P2 * * *
66797 ** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise,
66798 ** set the flag and fall through to the next instruction.
66800 ** See also: JumpOnce
66802 case OP_Once: { /* jump */
66803 assert( pOp->p1<p->nOnceFlag );
66804 if( p->aOnceFlag[pOp->p1] ){
66805 pc = pOp->p2-1;
66806 }else{
66807 p->aOnceFlag[pOp->p1] = 1;
66809 break;
66812 /* Opcode: If P1 P2 P3 * *
66814 ** Jump to P2 if the value in register P1 is true. The value
66815 ** is considered true if it is numeric and non-zero. If the value
66816 ** in P1 is NULL then take the jump if P3 is non-zero.
66818 /* Opcode: IfNot P1 P2 P3 * *
66820 ** Jump to P2 if the value in register P1 is False. The value
66821 ** is considered false if it has a numeric value of zero. If the value
66822 ** in P1 is NULL then take the jump if P3 is zero.
66824 case OP_If: /* jump, in1 */
66825 case OP_IfNot: { /* jump, in1 */
66826 #if 0 /* local variables moved into u.am */
66827 int c;
66828 #endif /* local variables moved into u.am */
66829 pIn1 = &aMem[pOp->p1];
66830 if( pIn1->flags & MEM_Null ){
66831 u.am.c = pOp->p3;
66832 }else{
66833 #ifdef SQLITE_OMIT_FLOATING_POINT
66834 u.am.c = sqlite3VdbeIntValue(pIn1)!=0;
66835 #else
66836 u.am.c = sqlite3VdbeRealValue(pIn1)!=0.0;
66837 #endif
66838 if( pOp->opcode==OP_IfNot ) u.am.c = !u.am.c;
66840 if( u.am.c ){
66841 pc = pOp->p2-1;
66843 break;
66846 /* Opcode: IsNull P1 P2 * * *
66848 ** Jump to P2 if the value in register P1 is NULL.
66850 case OP_IsNull: { /* same as TK_ISNULL, jump, in1 */
66851 pIn1 = &aMem[pOp->p1];
66852 if( (pIn1->flags & MEM_Null)!=0 ){
66853 pc = pOp->p2 - 1;
66855 break;
66858 /* Opcode: NotNull P1 P2 * * *
66860 ** Jump to P2 if the value in register P1 is not NULL.
66862 case OP_NotNull: { /* same as TK_NOTNULL, jump, in1 */
66863 pIn1 = &aMem[pOp->p1];
66864 if( (pIn1->flags & MEM_Null)==0 ){
66865 pc = pOp->p2 - 1;
66867 break;
66870 /* Opcode: Column P1 P2 P3 P4 P5
66872 ** Interpret the data that cursor P1 points to as a structure built using
66873 ** the MakeRecord instruction. (See the MakeRecord opcode for additional
66874 ** information about the format of the data.) Extract the P2-th column
66875 ** from this record. If there are less that (P2+1)
66876 ** values in the record, extract a NULL.
66878 ** The value extracted is stored in register P3.
66880 ** If the column contains fewer than P2 fields, then extract a NULL. Or,
66881 ** if the P4 argument is a P4_MEM use the value of the P4 argument as
66882 ** the result.
66884 ** If the OPFLAG_CLEARCACHE bit is set on P5 and P1 is a pseudo-table cursor,
66885 ** then the cache of the cursor is reset prior to extracting the column.
66886 ** The first OP_Column against a pseudo-table after the value of the content
66887 ** register has changed should have this bit set.
66889 case OP_Column: {
66890 #if 0 /* local variables moved into u.an */
66891 u32 payloadSize; /* Number of bytes in the record */
66892 i64 payloadSize64; /* Number of bytes in the record */
66893 int p1; /* P1 value of the opcode */
66894 int p2; /* column number to retrieve */
66895 VdbeCursor *pC; /* The VDBE cursor */
66896 char *zRec; /* Pointer to complete record-data */
66897 BtCursor *pCrsr; /* The BTree cursor */
66898 u32 *aType; /* aType[i] holds the numeric type of the i-th column */
66899 u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */
66900 int nField; /* number of fields in the record */
66901 int len; /* The length of the serialized data for the column */
66902 int i; /* Loop counter */
66903 char *zData; /* Part of the record being decoded */
66904 Mem *pDest; /* Where to write the extracted value */
66905 Mem sMem; /* For storing the record being decoded */
66906 u8 *zIdx; /* Index into header */
66907 u8 *zEndHdr; /* Pointer to first byte after the header */
66908 u32 offset; /* Offset into the data */
66909 u32 szField; /* Number of bytes in the content of a field */
66910 int szHdr; /* Size of the header size field at start of record */
66911 int avail; /* Number of bytes of available data */
66912 u32 t; /* A type code from the record header */
66913 Mem *pReg; /* PseudoTable input register */
66914 #endif /* local variables moved into u.an */
66917 u.an.p1 = pOp->p1;
66918 u.an.p2 = pOp->p2;
66919 u.an.pC = 0;
66920 memset(&u.an.sMem, 0, sizeof(u.an.sMem));
66921 assert( u.an.p1<p->nCursor );
66922 assert( pOp->p3>0 && pOp->p3<=p->nMem );
66923 u.an.pDest = &aMem[pOp->p3];
66924 memAboutToChange(p, u.an.pDest);
66925 u.an.zRec = 0;
66927 /* This block sets the variable u.an.payloadSize to be the total number of
66928 ** bytes in the record.
66930 ** u.an.zRec is set to be the complete text of the record if it is available.
66931 ** The complete record text is always available for pseudo-tables
66932 ** If the record is stored in a cursor, the complete record text
66933 ** might be available in the u.an.pC->aRow cache. Or it might not be.
66934 ** If the data is unavailable, u.an.zRec is set to NULL.
66936 ** We also compute the number of columns in the record. For cursors,
66937 ** the number of columns is stored in the VdbeCursor.nField element.
66939 u.an.pC = p->apCsr[u.an.p1];
66940 assert( u.an.pC!=0 );
66941 #ifndef SQLITE_OMIT_VIRTUALTABLE
66942 assert( u.an.pC->pVtabCursor==0 );
66943 #endif
66944 u.an.pCrsr = u.an.pC->pCursor;
66945 if( u.an.pCrsr!=0 ){
66946 /* The record is stored in a B-Tree */
66947 rc = sqlite3VdbeCursorMoveto(u.an.pC);
66948 if( rc ) goto abort_due_to_error;
66949 if( u.an.pC->nullRow ){
66950 u.an.payloadSize = 0;
66951 }else if( u.an.pC->cacheStatus==p->cacheCtr ){
66952 u.an.payloadSize = u.an.pC->payloadSize;
66953 u.an.zRec = (char*)u.an.pC->aRow;
66954 }else if( u.an.pC->isIndex ){
66955 assert( sqlite3BtreeCursorIsValid(u.an.pCrsr) );
66956 VVA_ONLY(rc =) sqlite3BtreeKeySize(u.an.pCrsr, &u.an.payloadSize64);
66957 assert( rc==SQLITE_OK ); /* True because of CursorMoveto() call above */
66958 /* sqlite3BtreeParseCellPtr() uses getVarint32() to extract the
66959 ** payload size, so it is impossible for u.an.payloadSize64 to be
66960 ** larger than 32 bits. */
66961 assert( (u.an.payloadSize64 & SQLITE_MAX_U32)==(u64)u.an.payloadSize64 );
66962 u.an.payloadSize = (u32)u.an.payloadSize64;
66963 }else{
66964 assert( sqlite3BtreeCursorIsValid(u.an.pCrsr) );
66965 VVA_ONLY(rc =) sqlite3BtreeDataSize(u.an.pCrsr, &u.an.payloadSize);
66966 assert( rc==SQLITE_OK ); /* DataSize() cannot fail */
66968 }else if( ALWAYS(u.an.pC->pseudoTableReg>0) ){
66969 u.an.pReg = &aMem[u.an.pC->pseudoTableReg];
66970 assert( u.an.pReg->flags & MEM_Blob );
66971 assert( memIsValid(u.an.pReg) );
66972 u.an.payloadSize = u.an.pReg->n;
66973 u.an.zRec = u.an.pReg->z;
66974 u.an.pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr;
66975 assert( u.an.payloadSize==0 || u.an.zRec!=0 );
66976 }else{
66977 /* Consider the row to be NULL */
66978 u.an.payloadSize = 0;
66981 /* If u.an.payloadSize is 0, then just store a NULL. This can happen because of
66982 ** nullRow or because of a corrupt database. */
66983 if( u.an.payloadSize==0 ){
66984 MemSetTypeFlag(u.an.pDest, MEM_Null);
66985 goto op_column_out;
66987 assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 );
66988 if( u.an.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
66989 goto too_big;
66992 u.an.nField = u.an.pC->nField;
66993 assert( u.an.p2<u.an.nField );
66995 /* Read and parse the table header. Store the results of the parse
66996 ** into the record header cache fields of the cursor.
66998 u.an.aType = u.an.pC->aType;
66999 if( u.an.pC->cacheStatus==p->cacheCtr ){
67000 u.an.aOffset = u.an.pC->aOffset;
67001 }else{
67002 assert(u.an.aType);
67003 u.an.avail = 0;
67004 u.an.pC->aOffset = u.an.aOffset = &u.an.aType[u.an.nField];
67005 u.an.pC->payloadSize = u.an.payloadSize;
67006 u.an.pC->cacheStatus = p->cacheCtr;
67008 /* Figure out how many bytes are in the header */
67009 if( u.an.zRec ){
67010 u.an.zData = u.an.zRec;
67011 }else{
67012 if( u.an.pC->isIndex ){
67013 u.an.zData = (char*)sqlite3BtreeKeyFetch(u.an.pCrsr, &u.an.avail);
67014 }else{
67015 u.an.zData = (char*)sqlite3BtreeDataFetch(u.an.pCrsr, &u.an.avail);
67017 /* If KeyFetch()/DataFetch() managed to get the entire payload,
67018 ** save the payload in the u.an.pC->aRow cache. That will save us from
67019 ** having to make additional calls to fetch the content portion of
67020 ** the record.
67022 assert( u.an.avail>=0 );
67023 if( u.an.payloadSize <= (u32)u.an.avail ){
67024 u.an.zRec = u.an.zData;
67025 u.an.pC->aRow = (u8*)u.an.zData;
67026 }else{
67027 u.an.pC->aRow = 0;
67030 /* The following assert is true in all cases accept when
67031 ** the database file has been corrupted externally.
67032 ** assert( u.an.zRec!=0 || u.an.avail>=u.an.payloadSize || u.an.avail>=9 ); */
67033 u.an.szHdr = getVarint32((u8*)u.an.zData, u.an.offset);
67035 /* Make sure a corrupt database has not given us an oversize header.
67036 ** Do this now to avoid an oversize memory allocation.
67038 ** Type entries can be between 1 and 5 bytes each. But 4 and 5 byte
67039 ** types use so much data space that there can only be 4096 and 32 of
67040 ** them, respectively. So the maximum header length results from a
67041 ** 3-byte type for each of the maximum of 32768 columns plus three
67042 ** extra bytes for the header length itself. 32768*3 + 3 = 98307.
67044 if( u.an.offset > 98307 ){
67045 rc = SQLITE_CORRUPT_BKPT;
67046 goto op_column_out;
67049 /* Compute in u.an.len the number of bytes of data we need to read in order
67050 ** to get u.an.nField type values. u.an.offset is an upper bound on this. But
67051 ** u.an.nField might be significantly less than the true number of columns
67052 ** in the table, and in that case, 5*u.an.nField+3 might be smaller than u.an.offset.
67053 ** We want to minimize u.an.len in order to limit the size of the memory
67054 ** allocation, especially if a corrupt database file has caused u.an.offset
67055 ** to be oversized. Offset is limited to 98307 above. But 98307 might
67056 ** still exceed Robson memory allocation limits on some configurations.
67057 ** On systems that cannot tolerate large memory allocations, u.an.nField*5+3
67058 ** will likely be much smaller since u.an.nField will likely be less than
67059 ** 20 or so. This insures that Robson memory allocation limits are
67060 ** not exceeded even for corrupt database files.
67062 u.an.len = u.an.nField*5 + 3;
67063 if( u.an.len > (int)u.an.offset ) u.an.len = (int)u.an.offset;
67065 /* The KeyFetch() or DataFetch() above are fast and will get the entire
67066 ** record header in most cases. But they will fail to get the complete
67067 ** record header if the record header does not fit on a single page
67068 ** in the B-Tree. When that happens, use sqlite3VdbeMemFromBtree() to
67069 ** acquire the complete header text.
67071 if( !u.an.zRec && u.an.avail<u.an.len ){
67072 u.an.sMem.flags = 0;
67073 u.an.sMem.db = 0;
67074 rc = sqlite3VdbeMemFromBtree(u.an.pCrsr, 0, u.an.len, u.an.pC->isIndex, &u.an.sMem);
67075 if( rc!=SQLITE_OK ){
67076 goto op_column_out;
67078 u.an.zData = u.an.sMem.z;
67080 u.an.zEndHdr = (u8 *)&u.an.zData[u.an.len];
67081 u.an.zIdx = (u8 *)&u.an.zData[u.an.szHdr];
67083 /* Scan the header and use it to fill in the u.an.aType[] and u.an.aOffset[]
67084 ** arrays. u.an.aType[u.an.i] will contain the type integer for the u.an.i-th
67085 ** column and u.an.aOffset[u.an.i] will contain the u.an.offset from the beginning
67086 ** of the record to the start of the data for the u.an.i-th column
67088 for(u.an.i=0; u.an.i<u.an.nField; u.an.i++){
67089 if( u.an.zIdx<u.an.zEndHdr ){
67090 u.an.aOffset[u.an.i] = u.an.offset;
67091 if( u.an.zIdx[0]<0x80 ){
67092 u.an.t = u.an.zIdx[0];
67093 u.an.zIdx++;
67094 }else{
67095 u.an.zIdx += sqlite3GetVarint32(u.an.zIdx, &u.an.t);
67097 u.an.aType[u.an.i] = u.an.t;
67098 u.an.szField = sqlite3VdbeSerialTypeLen(u.an.t);
67099 u.an.offset += u.an.szField;
67100 if( u.an.offset<u.an.szField ){ /* True if u.an.offset overflows */
67101 u.an.zIdx = &u.an.zEndHdr[1]; /* Forces SQLITE_CORRUPT return below */
67102 break;
67104 }else{
67105 /* If u.an.i is less that u.an.nField, then there are less fields in this
67106 ** record than SetNumColumns indicated there are columns in the
67107 ** table. Set the u.an.offset for any extra columns not present in
67108 ** the record to 0. This tells code below to store a NULL
67109 ** instead of deserializing a value from the record.
67111 u.an.aOffset[u.an.i] = 0;
67114 sqlite3VdbeMemRelease(&u.an.sMem);
67115 u.an.sMem.flags = MEM_Null;
67117 /* If we have read more header data than was contained in the header,
67118 ** or if the end of the last field appears to be past the end of the
67119 ** record, or if the end of the last field appears to be before the end
67120 ** of the record (when all fields present), then we must be dealing
67121 ** with a corrupt database.
67123 if( (u.an.zIdx > u.an.zEndHdr) || (u.an.offset > u.an.payloadSize)
67124 || (u.an.zIdx==u.an.zEndHdr && u.an.offset!=u.an.payloadSize) ){
67125 rc = SQLITE_CORRUPT_BKPT;
67126 goto op_column_out;
67130 /* Get the column information. If u.an.aOffset[u.an.p2] is non-zero, then
67131 ** deserialize the value from the record. If u.an.aOffset[u.an.p2] is zero,
67132 ** then there are not enough fields in the record to satisfy the
67133 ** request. In this case, set the value NULL or to P4 if P4 is
67134 ** a pointer to a Mem object.
67136 if( u.an.aOffset[u.an.p2] ){
67137 assert( rc==SQLITE_OK );
67138 if( u.an.zRec ){
67139 VdbeMemRelease(u.an.pDest);
67140 sqlite3VdbeSerialGet((u8 *)&u.an.zRec[u.an.aOffset[u.an.p2]], u.an.aType[u.an.p2], u.an.pDest);
67141 }else{
67142 u.an.len = sqlite3VdbeSerialTypeLen(u.an.aType[u.an.p2]);
67143 sqlite3VdbeMemMove(&u.an.sMem, u.an.pDest);
67144 rc = sqlite3VdbeMemFromBtree(u.an.pCrsr, u.an.aOffset[u.an.p2], u.an.len, u.an.pC->isIndex, &u.an.sMem);
67145 if( rc!=SQLITE_OK ){
67146 goto op_column_out;
67148 u.an.zData = u.an.sMem.z;
67149 sqlite3VdbeSerialGet((u8*)u.an.zData, u.an.aType[u.an.p2], u.an.pDest);
67151 u.an.pDest->enc = encoding;
67152 }else{
67153 if( pOp->p4type==P4_MEM ){
67154 sqlite3VdbeMemShallowCopy(u.an.pDest, pOp->p4.pMem, MEM_Static);
67155 }else{
67156 MemSetTypeFlag(u.an.pDest, MEM_Null);
67160 /* If we dynamically allocated space to hold the data (in the
67161 ** sqlite3VdbeMemFromBtree() call above) then transfer control of that
67162 ** dynamically allocated space over to the u.an.pDest structure.
67163 ** This prevents a memory copy.
67165 if( u.an.sMem.zMalloc ){
67166 assert( u.an.sMem.z==u.an.sMem.zMalloc );
67167 assert( !(u.an.pDest->flags & MEM_Dyn) );
67168 assert( !(u.an.pDest->flags & (MEM_Blob|MEM_Str)) || u.an.pDest->z==u.an.sMem.z );
67169 u.an.pDest->flags &= ~(MEM_Ephem|MEM_Static);
67170 u.an.pDest->flags |= MEM_Term;
67171 u.an.pDest->z = u.an.sMem.z;
67172 u.an.pDest->zMalloc = u.an.sMem.zMalloc;
67175 rc = sqlite3VdbeMemMakeWriteable(u.an.pDest);
67177 op_column_out:
67178 UPDATE_MAX_BLOBSIZE(u.an.pDest);
67179 REGISTER_TRACE(pOp->p3, u.an.pDest);
67180 break;
67183 /* Opcode: Affinity P1 P2 * P4 *
67185 ** Apply affinities to a range of P2 registers starting with P1.
67187 ** P4 is a string that is P2 characters long. The nth character of the
67188 ** string indicates the column affinity that should be used for the nth
67189 ** memory cell in the range.
67191 case OP_Affinity: {
67192 #if 0 /* local variables moved into u.ao */
67193 const char *zAffinity; /* The affinity to be applied */
67194 char cAff; /* A single character of affinity */
67195 #endif /* local variables moved into u.ao */
67197 u.ao.zAffinity = pOp->p4.z;
67198 assert( u.ao.zAffinity!=0 );
67199 assert( u.ao.zAffinity[pOp->p2]==0 );
67200 pIn1 = &aMem[pOp->p1];
67201 while( (u.ao.cAff = *(u.ao.zAffinity++))!=0 ){
67202 assert( pIn1 <= &p->aMem[p->nMem] );
67203 assert( memIsValid(pIn1) );
67204 ExpandBlob(pIn1);
67205 applyAffinity(pIn1, u.ao.cAff, encoding);
67206 pIn1++;
67208 break;
67211 /* Opcode: MakeRecord P1 P2 P3 P4 *
67213 ** Convert P2 registers beginning with P1 into the [record format]
67214 ** use as a data record in a database table or as a key
67215 ** in an index. The OP_Column opcode can decode the record later.
67217 ** P4 may be a string that is P2 characters long. The nth character of the
67218 ** string indicates the column affinity that should be used for the nth
67219 ** field of the index key.
67221 ** The mapping from character to affinity is given by the SQLITE_AFF_
67222 ** macros defined in sqliteInt.h.
67224 ** If P4 is NULL then all index fields have the affinity NONE.
67226 case OP_MakeRecord: {
67227 #if 0 /* local variables moved into u.ap */
67228 u8 *zNewRecord; /* A buffer to hold the data for the new record */
67229 Mem *pRec; /* The new record */
67230 u64 nData; /* Number of bytes of data space */
67231 int nHdr; /* Number of bytes of header space */
67232 i64 nByte; /* Data space required for this record */
67233 int nZero; /* Number of zero bytes at the end of the record */
67234 int nVarint; /* Number of bytes in a varint */
67235 u32 serial_type; /* Type field */
67236 Mem *pData0; /* First field to be combined into the record */
67237 Mem *pLast; /* Last field of the record */
67238 int nField; /* Number of fields in the record */
67239 char *zAffinity; /* The affinity string for the record */
67240 int file_format; /* File format to use for encoding */
67241 int i; /* Space used in zNewRecord[] */
67242 int len; /* Length of a field */
67243 #endif /* local variables moved into u.ap */
67245 /* Assuming the record contains N fields, the record format looks
67246 ** like this:
67248 ** ------------------------------------------------------------------------
67249 ** | hdr-size | type 0 | type 1 | ... | type N-1 | data0 | ... | data N-1 |
67250 ** ------------------------------------------------------------------------
67252 ** Data(0) is taken from register P1. Data(1) comes from register P1+1
67253 ** and so froth.
67255 ** Each type field is a varint representing the serial type of the
67256 ** corresponding data element (see sqlite3VdbeSerialType()). The
67257 ** hdr-size field is also a varint which is the offset from the beginning
67258 ** of the record to data0.
67260 u.ap.nData = 0; /* Number of bytes of data space */
67261 u.ap.nHdr = 0; /* Number of bytes of header space */
67262 u.ap.nZero = 0; /* Number of zero bytes at the end of the record */
67263 u.ap.nField = pOp->p1;
67264 u.ap.zAffinity = pOp->p4.z;
67265 assert( u.ap.nField>0 && pOp->p2>0 && pOp->p2+u.ap.nField<=p->nMem+1 );
67266 u.ap.pData0 = &aMem[u.ap.nField];
67267 u.ap.nField = pOp->p2;
67268 u.ap.pLast = &u.ap.pData0[u.ap.nField-1];
67269 u.ap.file_format = p->minWriteFileFormat;
67271 /* Identify the output register */
67272 assert( pOp->p3<pOp->p1 || pOp->p3>=pOp->p1+pOp->p2 );
67273 pOut = &aMem[pOp->p3];
67274 memAboutToChange(p, pOut);
67276 /* Loop through the elements that will make up the record to figure
67277 ** out how much space is required for the new record.
67279 for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){
67280 assert( memIsValid(u.ap.pRec) );
67281 if( u.ap.zAffinity ){
67282 applyAffinity(u.ap.pRec, u.ap.zAffinity[u.ap.pRec-u.ap.pData0], encoding);
67284 if( u.ap.pRec->flags&MEM_Zero && u.ap.pRec->n>0 ){
67285 sqlite3VdbeMemExpandBlob(u.ap.pRec);
67287 u.ap.serial_type = sqlite3VdbeSerialType(u.ap.pRec, u.ap.file_format);
67288 u.ap.len = sqlite3VdbeSerialTypeLen(u.ap.serial_type);
67289 u.ap.nData += u.ap.len;
67290 u.ap.nHdr += sqlite3VarintLen(u.ap.serial_type);
67291 if( u.ap.pRec->flags & MEM_Zero ){
67292 /* Only pure zero-filled BLOBs can be input to this Opcode.
67293 ** We do not allow blobs with a prefix and a zero-filled tail. */
67294 u.ap.nZero += u.ap.pRec->u.nZero;
67295 }else if( u.ap.len ){
67296 u.ap.nZero = 0;
67300 /* Add the initial header varint and total the size */
67301 u.ap.nHdr += u.ap.nVarint = sqlite3VarintLen(u.ap.nHdr);
67302 if( u.ap.nVarint<sqlite3VarintLen(u.ap.nHdr) ){
67303 u.ap.nHdr++;
67305 u.ap.nByte = u.ap.nHdr+u.ap.nData-u.ap.nZero;
67306 if( u.ap.nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
67307 goto too_big;
67310 /* Make sure the output register has a buffer large enough to store
67311 ** the new record. The output register (pOp->p3) is not allowed to
67312 ** be one of the input registers (because the following call to
67313 ** sqlite3VdbeMemGrow() could clobber the value before it is used).
67315 if( sqlite3VdbeMemGrow(pOut, (int)u.ap.nByte, 0) ){
67316 goto no_mem;
67318 u.ap.zNewRecord = (u8 *)pOut->z;
67320 /* Write the record */
67321 u.ap.i = putVarint32(u.ap.zNewRecord, u.ap.nHdr);
67322 for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){
67323 u.ap.serial_type = sqlite3VdbeSerialType(u.ap.pRec, u.ap.file_format);
67324 u.ap.i += putVarint32(&u.ap.zNewRecord[u.ap.i], u.ap.serial_type); /* serial type */
67326 for(u.ap.pRec=u.ap.pData0; u.ap.pRec<=u.ap.pLast; u.ap.pRec++){ /* serial data */
67327 u.ap.i += sqlite3VdbeSerialPut(&u.ap.zNewRecord[u.ap.i], (int)(u.ap.nByte-u.ap.i), u.ap.pRec,u.ap.file_format);
67329 assert( u.ap.i==u.ap.nByte );
67331 assert( pOp->p3>0 && pOp->p3<=p->nMem );
67332 pOut->n = (int)u.ap.nByte;
67333 pOut->flags = MEM_Blob | MEM_Dyn;
67334 pOut->xDel = 0;
67335 if( u.ap.nZero ){
67336 pOut->u.nZero = u.ap.nZero;
67337 pOut->flags |= MEM_Zero;
67339 pOut->enc = SQLITE_UTF8; /* In case the blob is ever converted to text */
67340 REGISTER_TRACE(pOp->p3, pOut);
67341 UPDATE_MAX_BLOBSIZE(pOut);
67342 break;
67345 /* Opcode: Count P1 P2 * * *
67347 ** Store the number of entries (an integer value) in the table or index
67348 ** opened by cursor P1 in register P2
67350 #ifndef SQLITE_OMIT_BTREECOUNT
67351 case OP_Count: { /* out2-prerelease */
67352 #if 0 /* local variables moved into u.aq */
67353 i64 nEntry;
67354 BtCursor *pCrsr;
67355 #endif /* local variables moved into u.aq */
67357 u.aq.pCrsr = p->apCsr[pOp->p1]->pCursor;
67358 if( ALWAYS(u.aq.pCrsr) ){
67359 rc = sqlite3BtreeCount(u.aq.pCrsr, &u.aq.nEntry);
67360 }else{
67361 u.aq.nEntry = 0;
67363 pOut->u.i = u.aq.nEntry;
67364 break;
67366 #endif
67368 /* Opcode: Savepoint P1 * * P4 *
67370 ** Open, release or rollback the savepoint named by parameter P4, depending
67371 ** on the value of P1. To open a new savepoint, P1==0. To release (commit) an
67372 ** existing savepoint, P1==1, or to rollback an existing savepoint P1==2.
67374 case OP_Savepoint: {
67375 #if 0 /* local variables moved into u.ar */
67376 int p1; /* Value of P1 operand */
67377 char *zName; /* Name of savepoint */
67378 int nName;
67379 Savepoint *pNew;
67380 Savepoint *pSavepoint;
67381 Savepoint *pTmp;
67382 int iSavepoint;
67383 int ii;
67384 #endif /* local variables moved into u.ar */
67386 u.ar.p1 = pOp->p1;
67387 u.ar.zName = pOp->p4.z;
67389 /* Assert that the u.ar.p1 parameter is valid. Also that if there is no open
67390 ** transaction, then there cannot be any savepoints.
67392 assert( db->pSavepoint==0 || db->autoCommit==0 );
67393 assert( u.ar.p1==SAVEPOINT_BEGIN||u.ar.p1==SAVEPOINT_RELEASE||u.ar.p1==SAVEPOINT_ROLLBACK );
67394 assert( db->pSavepoint || db->isTransactionSavepoint==0 );
67395 assert( checkSavepointCount(db) );
67397 if( u.ar.p1==SAVEPOINT_BEGIN ){
67398 if( db->writeVdbeCnt>0 ){
67399 /* A new savepoint cannot be created if there are active write
67400 ** statements (i.e. open read/write incremental blob handles).
67402 sqlite3SetString(&p->zErrMsg, db, "cannot open savepoint - "
67403 "SQL statements in progress");
67404 rc = SQLITE_BUSY;
67405 }else{
67406 u.ar.nName = sqlite3Strlen30(u.ar.zName);
67408 #ifndef SQLITE_OMIT_VIRTUALTABLE
67409 /* This call is Ok even if this savepoint is actually a transaction
67410 ** savepoint (and therefore should not prompt xSavepoint()) callbacks.
67411 ** If this is a transaction savepoint being opened, it is guaranteed
67412 ** that the db->aVTrans[] array is empty. */
67413 assert( db->autoCommit==0 || db->nVTrans==0 );
67414 rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN,
67415 db->nStatement+db->nSavepoint);
67416 if( rc!=SQLITE_OK ) goto abort_due_to_error;
67417 #endif
67419 /* Create a new savepoint structure. */
67420 u.ar.pNew = sqlite3DbMallocRaw(db, sizeof(Savepoint)+u.ar.nName+1);
67421 if( u.ar.pNew ){
67422 u.ar.pNew->zName = (char *)&u.ar.pNew[1];
67423 memcpy(u.ar.pNew->zName, u.ar.zName, u.ar.nName+1);
67425 /* If there is no open transaction, then mark this as a special
67426 ** "transaction savepoint". */
67427 if( db->autoCommit ){
67428 db->autoCommit = 0;
67429 db->isTransactionSavepoint = 1;
67430 }else{
67431 db->nSavepoint++;
67434 /* Link the new savepoint into the database handle's list. */
67435 u.ar.pNew->pNext = db->pSavepoint;
67436 db->pSavepoint = u.ar.pNew;
67437 u.ar.pNew->nDeferredCons = db->nDeferredCons;
67440 }else{
67441 u.ar.iSavepoint = 0;
67443 /* Find the named savepoint. If there is no such savepoint, then an
67444 ** an error is returned to the user. */
67445 for(
67446 u.ar.pSavepoint = db->pSavepoint;
67447 u.ar.pSavepoint && sqlite3StrICmp(u.ar.pSavepoint->zName, u.ar.zName);
67448 u.ar.pSavepoint = u.ar.pSavepoint->pNext
67450 u.ar.iSavepoint++;
67452 if( !u.ar.pSavepoint ){
67453 sqlite3SetString(&p->zErrMsg, db, "no such savepoint: %s", u.ar.zName);
67454 rc = SQLITE_ERROR;
67455 }else if(
67456 db->writeVdbeCnt>0 || (u.ar.p1==SAVEPOINT_ROLLBACK && db->activeVdbeCnt>1)
67458 /* It is not possible to release (commit) a savepoint if there are
67459 ** active write statements. It is not possible to rollback a savepoint
67460 ** if there are any active statements at all.
67462 sqlite3SetString(&p->zErrMsg, db,
67463 "cannot %s savepoint - SQL statements in progress",
67464 (u.ar.p1==SAVEPOINT_ROLLBACK ? "rollback": "release")
67466 rc = SQLITE_BUSY;
67467 }else{
67469 /* Determine whether or not this is a transaction savepoint. If so,
67470 ** and this is a RELEASE command, then the current transaction
67471 ** is committed.
67473 int isTransaction = u.ar.pSavepoint->pNext==0 && db->isTransactionSavepoint;
67474 if( isTransaction && u.ar.p1==SAVEPOINT_RELEASE ){
67475 if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
67476 goto vdbe_return;
67478 db->autoCommit = 1;
67479 if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
67480 p->pc = pc;
67481 db->autoCommit = 0;
67482 p->rc = rc = SQLITE_BUSY;
67483 goto vdbe_return;
67485 db->isTransactionSavepoint = 0;
67486 rc = p->rc;
67487 }else{
67488 u.ar.iSavepoint = db->nSavepoint - u.ar.iSavepoint - 1;
67489 for(u.ar.ii=0; u.ar.ii<db->nDb; u.ar.ii++){
67490 rc = sqlite3BtreeSavepoint(db->aDb[u.ar.ii].pBt, u.ar.p1, u.ar.iSavepoint);
67491 if( rc!=SQLITE_OK ){
67492 goto abort_due_to_error;
67495 if( u.ar.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){
67496 sqlite3ExpirePreparedStatements(db);
67497 sqlite3ResetInternalSchema(db, -1);
67498 db->flags = (db->flags | SQLITE_InternChanges);
67502 /* Regardless of whether this is a RELEASE or ROLLBACK, destroy all
67503 ** savepoints nested inside of the savepoint being operated on. */
67504 while( db->pSavepoint!=u.ar.pSavepoint ){
67505 u.ar.pTmp = db->pSavepoint;
67506 db->pSavepoint = u.ar.pTmp->pNext;
67507 sqlite3DbFree(db, u.ar.pTmp);
67508 db->nSavepoint--;
67511 /* If it is a RELEASE, then destroy the savepoint being operated on
67512 ** too. If it is a ROLLBACK TO, then set the number of deferred
67513 ** constraint violations present in the database to the value stored
67514 ** when the savepoint was created. */
67515 if( u.ar.p1==SAVEPOINT_RELEASE ){
67516 assert( u.ar.pSavepoint==db->pSavepoint );
67517 db->pSavepoint = u.ar.pSavepoint->pNext;
67518 sqlite3DbFree(db, u.ar.pSavepoint);
67519 if( !isTransaction ){
67520 db->nSavepoint--;
67522 }else{
67523 db->nDeferredCons = u.ar.pSavepoint->nDeferredCons;
67526 if( !isTransaction ){
67527 rc = sqlite3VtabSavepoint(db, u.ar.p1, u.ar.iSavepoint);
67528 if( rc!=SQLITE_OK ) goto abort_due_to_error;
67533 break;
67536 /* Opcode: AutoCommit P1 P2 * * *
67538 ** Set the database auto-commit flag to P1 (1 or 0). If P2 is true, roll
67539 ** back any currently active btree transactions. If there are any active
67540 ** VMs (apart from this one), then a ROLLBACK fails. A COMMIT fails if
67541 ** there are active writing VMs or active VMs that use shared cache.
67543 ** This instruction causes the VM to halt.
67545 case OP_AutoCommit: {
67546 #if 0 /* local variables moved into u.as */
67547 int desiredAutoCommit;
67548 int iRollback;
67549 int turnOnAC;
67550 #endif /* local variables moved into u.as */
67552 u.as.desiredAutoCommit = pOp->p1;
67553 u.as.iRollback = pOp->p2;
67554 u.as.turnOnAC = u.as.desiredAutoCommit && !db->autoCommit;
67555 assert( u.as.desiredAutoCommit==1 || u.as.desiredAutoCommit==0 );
67556 assert( u.as.desiredAutoCommit==1 || u.as.iRollback==0 );
67557 assert( db->activeVdbeCnt>0 ); /* At least this one VM is active */
67559 if( u.as.turnOnAC && u.as.iRollback && db->activeVdbeCnt>1 ){
67560 /* If this instruction implements a ROLLBACK and other VMs are
67561 ** still running, and a transaction is active, return an error indicating
67562 ** that the other VMs must complete first.
67564 sqlite3SetString(&p->zErrMsg, db, "cannot rollback transaction - "
67565 "SQL statements in progress");
67566 rc = SQLITE_BUSY;
67567 }else if( u.as.turnOnAC && !u.as.iRollback && db->writeVdbeCnt>0 ){
67568 /* If this instruction implements a COMMIT and other VMs are writing
67569 ** return an error indicating that the other VMs must complete first.
67571 sqlite3SetString(&p->zErrMsg, db, "cannot commit transaction - "
67572 "SQL statements in progress");
67573 rc = SQLITE_BUSY;
67574 }else if( u.as.desiredAutoCommit!=db->autoCommit ){
67575 if( u.as.iRollback ){
67576 assert( u.as.desiredAutoCommit==1 );
67577 sqlite3RollbackAll(db);
67578 db->autoCommit = 1;
67579 }else if( (rc = sqlite3VdbeCheckFk(p, 1))!=SQLITE_OK ){
67580 goto vdbe_return;
67581 }else{
67582 db->autoCommit = (u8)u.as.desiredAutoCommit;
67583 if( sqlite3VdbeHalt(p)==SQLITE_BUSY ){
67584 p->pc = pc;
67585 db->autoCommit = (u8)(1-u.as.desiredAutoCommit);
67586 p->rc = rc = SQLITE_BUSY;
67587 goto vdbe_return;
67590 assert( db->nStatement==0 );
67591 sqlite3CloseSavepoints(db);
67592 if( p->rc==SQLITE_OK ){
67593 rc = SQLITE_DONE;
67594 }else{
67595 rc = SQLITE_ERROR;
67597 goto vdbe_return;
67598 }else{
67599 sqlite3SetString(&p->zErrMsg, db,
67600 (!u.as.desiredAutoCommit)?"cannot start a transaction within a transaction":(
67601 (u.as.iRollback)?"cannot rollback - no transaction is active":
67602 "cannot commit - no transaction is active"));
67604 rc = SQLITE_ERROR;
67606 break;
67609 /* Opcode: Transaction P1 P2 * * *
67611 ** Begin a transaction. The transaction ends when a Commit or Rollback
67612 ** opcode is encountered. Depending on the ON CONFLICT setting, the
67613 ** transaction might also be rolled back if an error is encountered.
67615 ** P1 is the index of the database file on which the transaction is
67616 ** started. Index 0 is the main database file and index 1 is the
67617 ** file used for temporary tables. Indices of 2 or more are used for
67618 ** attached databases.
67620 ** If P2 is non-zero, then a write-transaction is started. A RESERVED lock is
67621 ** obtained on the database file when a write-transaction is started. No
67622 ** other process can start another write transaction while this transaction is
67623 ** underway. Starting a write transaction also creates a rollback journal. A
67624 ** write transaction must be started before any changes can be made to the
67625 ** database. If P2 is 2 or greater then an EXCLUSIVE lock is also obtained
67626 ** on the file.
67628 ** If a write-transaction is started and the Vdbe.usesStmtJournal flag is
67629 ** true (this flag is set if the Vdbe may modify more than one row and may
67630 ** throw an ABORT exception), a statement transaction may also be opened.
67631 ** More specifically, a statement transaction is opened iff the database
67632 ** connection is currently not in autocommit mode, or if there are other
67633 ** active statements. A statement transaction allows the affects of this
67634 ** VDBE to be rolled back after an error without having to roll back the
67635 ** entire transaction. If no error is encountered, the statement transaction
67636 ** will automatically commit when the VDBE halts.
67638 ** If P2 is zero, then a read-lock is obtained on the database file.
67640 case OP_Transaction: {
67641 #if 0 /* local variables moved into u.at */
67642 Btree *pBt;
67643 #endif /* local variables moved into u.at */
67645 assert( pOp->p1>=0 && pOp->p1<db->nDb );
67646 assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67647 u.at.pBt = db->aDb[pOp->p1].pBt;
67649 if( u.at.pBt ){
67650 rc = sqlite3BtreeBeginTrans(u.at.pBt, pOp->p2);
67651 if( rc==SQLITE_BUSY ){
67652 p->pc = pc;
67653 p->rc = rc = SQLITE_BUSY;
67654 goto vdbe_return;
67656 if( rc!=SQLITE_OK ){
67657 goto abort_due_to_error;
67660 if( pOp->p2 && p->usesStmtJournal
67661 && (db->autoCommit==0 || db->activeVdbeCnt>1)
67663 assert( sqlite3BtreeIsInTrans(u.at.pBt) );
67664 if( p->iStatement==0 ){
67665 assert( db->nStatement>=0 && db->nSavepoint>=0 );
67666 db->nStatement++;
67667 p->iStatement = db->nSavepoint + db->nStatement;
67670 rc = sqlite3VtabSavepoint(db, SAVEPOINT_BEGIN, p->iStatement-1);
67671 if( rc==SQLITE_OK ){
67672 rc = sqlite3BtreeBeginStmt(u.at.pBt, p->iStatement);
67675 /* Store the current value of the database handles deferred constraint
67676 ** counter. If the statement transaction needs to be rolled back,
67677 ** the value of this counter needs to be restored too. */
67678 p->nStmtDefCons = db->nDeferredCons;
67681 break;
67684 /* Opcode: ReadCookie P1 P2 P3 * *
67686 ** Read cookie number P3 from database P1 and write it into register P2.
67687 ** P3==1 is the schema version. P3==2 is the database format.
67688 ** P3==3 is the recommended pager cache size, and so forth. P1==0 is
67689 ** the main database file and P1==1 is the database file used to store
67690 ** temporary tables.
67692 ** There must be a read-lock on the database (either a transaction
67693 ** must be started or there must be an open cursor) before
67694 ** executing this instruction.
67696 case OP_ReadCookie: { /* out2-prerelease */
67697 #if 0 /* local variables moved into u.au */
67698 int iMeta;
67699 int iDb;
67700 int iCookie;
67701 #endif /* local variables moved into u.au */
67703 u.au.iDb = pOp->p1;
67704 u.au.iCookie = pOp->p3;
67705 assert( pOp->p3<SQLITE_N_BTREE_META );
67706 assert( u.au.iDb>=0 && u.au.iDb<db->nDb );
67707 assert( db->aDb[u.au.iDb].pBt!=0 );
67708 assert( (p->btreeMask & (((yDbMask)1)<<u.au.iDb))!=0 );
67710 sqlite3BtreeGetMeta(db->aDb[u.au.iDb].pBt, u.au.iCookie, (u32 *)&u.au.iMeta);
67711 pOut->u.i = u.au.iMeta;
67712 break;
67715 /* Opcode: SetCookie P1 P2 P3 * *
67717 ** Write the content of register P3 (interpreted as an integer)
67718 ** into cookie number P2 of database P1. P2==1 is the schema version.
67719 ** P2==2 is the database format. P2==3 is the recommended pager cache
67720 ** size, and so forth. P1==0 is the main database file and P1==1 is the
67721 ** database file used to store temporary tables.
67723 ** A transaction must be started before executing this opcode.
67725 case OP_SetCookie: { /* in3 */
67726 #if 0 /* local variables moved into u.av */
67727 Db *pDb;
67728 #endif /* local variables moved into u.av */
67729 assert( pOp->p2<SQLITE_N_BTREE_META );
67730 assert( pOp->p1>=0 && pOp->p1<db->nDb );
67731 assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67732 u.av.pDb = &db->aDb[pOp->p1];
67733 assert( u.av.pDb->pBt!=0 );
67734 assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
67735 pIn3 = &aMem[pOp->p3];
67736 sqlite3VdbeMemIntegerify(pIn3);
67737 /* See note about index shifting on OP_ReadCookie */
67738 rc = sqlite3BtreeUpdateMeta(u.av.pDb->pBt, pOp->p2, (int)pIn3->u.i);
67739 if( pOp->p2==BTREE_SCHEMA_VERSION ){
67740 /* When the schema cookie changes, record the new cookie internally */
67741 u.av.pDb->pSchema->schema_cookie = (int)pIn3->u.i;
67742 db->flags |= SQLITE_InternChanges;
67743 }else if( pOp->p2==BTREE_FILE_FORMAT ){
67744 /* Record changes in the file format */
67745 u.av.pDb->pSchema->file_format = (u8)pIn3->u.i;
67747 if( pOp->p1==1 ){
67748 /* Invalidate all prepared statements whenever the TEMP database
67749 ** schema is changed. Ticket #1644 */
67750 sqlite3ExpirePreparedStatements(db);
67751 p->expired = 0;
67753 break;
67756 /* Opcode: VerifyCookie P1 P2 P3 * *
67758 ** Check the value of global database parameter number 0 (the
67759 ** schema version) and make sure it is equal to P2 and that the
67760 ** generation counter on the local schema parse equals P3.
67762 ** P1 is the database number which is 0 for the main database file
67763 ** and 1 for the file holding temporary tables and some higher number
67764 ** for auxiliary databases.
67766 ** The cookie changes its value whenever the database schema changes.
67767 ** This operation is used to detect when that the cookie has changed
67768 ** and that the current process needs to reread the schema.
67770 ** Either a transaction needs to have been started or an OP_Open needs
67771 ** to be executed (to establish a read lock) before this opcode is
67772 ** invoked.
67774 case OP_VerifyCookie: {
67775 #if 0 /* local variables moved into u.aw */
67776 int iMeta;
67777 int iGen;
67778 Btree *pBt;
67779 #endif /* local variables moved into u.aw */
67781 assert( pOp->p1>=0 && pOp->p1<db->nDb );
67782 assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
67783 assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
67784 u.aw.pBt = db->aDb[pOp->p1].pBt;
67785 if( u.aw.pBt ){
67786 sqlite3BtreeGetMeta(u.aw.pBt, BTREE_SCHEMA_VERSION, (u32 *)&u.aw.iMeta);
67787 u.aw.iGen = db->aDb[pOp->p1].pSchema->iGeneration;
67788 }else{
67789 u.aw.iGen = u.aw.iMeta = 0;
67791 if( u.aw.iMeta!=pOp->p2 || u.aw.iGen!=pOp->p3 ){
67792 sqlite3DbFree(db, p->zErrMsg);
67793 p->zErrMsg = sqlite3DbStrDup(db, "database schema has changed");
67794 /* If the schema-cookie from the database file matches the cookie
67795 ** stored with the in-memory representation of the schema, do
67796 ** not reload the schema from the database file.
67798 ** If virtual-tables are in use, this is not just an optimization.
67799 ** Often, v-tables store their data in other SQLite tables, which
67800 ** are queried from within xNext() and other v-table methods using
67801 ** prepared queries. If such a query is out-of-date, we do not want to
67802 ** discard the database schema, as the user code implementing the
67803 ** v-table would have to be ready for the sqlite3_vtab structure itself
67804 ** to be invalidated whenever sqlite3_step() is called from within
67805 ** a v-table method.
67807 if( db->aDb[pOp->p1].pSchema->schema_cookie!=u.aw.iMeta ){
67808 sqlite3ResetInternalSchema(db, pOp->p1);
67811 p->expired = 1;
67812 rc = SQLITE_SCHEMA;
67814 break;
67817 /* Opcode: OpenRead P1 P2 P3 P4 P5
67819 ** Open a read-only cursor for the database table whose root page is
67820 ** P2 in a database file. The database file is determined by P3.
67821 ** P3==0 means the main database, P3==1 means the database used for
67822 ** temporary tables, and P3>1 means used the corresponding attached
67823 ** database. Give the new cursor an identifier of P1. The P1
67824 ** values need not be contiguous but all P1 values should be small integers.
67825 ** It is an error for P1 to be negative.
67827 ** If P5!=0 then use the content of register P2 as the root page, not
67828 ** the value of P2 itself.
67830 ** There will be a read lock on the database whenever there is an
67831 ** open cursor. If the database was unlocked prior to this instruction
67832 ** then a read lock is acquired as part of this instruction. A read
67833 ** lock allows other processes to read the database but prohibits
67834 ** any other process from modifying the database. The read lock is
67835 ** released when all cursors are closed. If this instruction attempts
67836 ** to get a read lock but fails, the script terminates with an
67837 ** SQLITE_BUSY error code.
67839 ** The P4 value may be either an integer (P4_INT32) or a pointer to
67840 ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo
67841 ** structure, then said structure defines the content and collating
67842 ** sequence of the index being opened. Otherwise, if P4 is an integer
67843 ** value, it is set to the number of columns in the table.
67845 ** See also OpenWrite.
67847 /* Opcode: OpenWrite P1 P2 P3 P4 P5
67849 ** Open a read/write cursor named P1 on the table or index whose root
67850 ** page is P2. Or if P5!=0 use the content of register P2 to find the
67851 ** root page.
67853 ** The P4 value may be either an integer (P4_INT32) or a pointer to
67854 ** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo
67855 ** structure, then said structure defines the content and collating
67856 ** sequence of the index being opened. Otherwise, if P4 is an integer
67857 ** value, it is set to the number of columns in the table, or to the
67858 ** largest index of any column of the table that is actually used.
67860 ** This instruction works just like OpenRead except that it opens the cursor
67861 ** in read/write mode. For a given table, there can be one or more read-only
67862 ** cursors or a single read/write cursor but not both.
67864 ** See also OpenRead.
67866 case OP_OpenRead:
67867 case OP_OpenWrite: {
67868 #if 0 /* local variables moved into u.ax */
67869 int nField;
67870 KeyInfo *pKeyInfo;
67871 int p2;
67872 int iDb;
67873 int wrFlag;
67874 Btree *pX;
67875 VdbeCursor *pCur;
67876 Db *pDb;
67877 #endif /* local variables moved into u.ax */
67879 if( p->expired ){
67880 rc = SQLITE_ABORT;
67881 break;
67884 u.ax.nField = 0;
67885 u.ax.pKeyInfo = 0;
67886 u.ax.p2 = pOp->p2;
67887 u.ax.iDb = pOp->p3;
67888 assert( u.ax.iDb>=0 && u.ax.iDb<db->nDb );
67889 assert( (p->btreeMask & (((yDbMask)1)<<u.ax.iDb))!=0 );
67890 u.ax.pDb = &db->aDb[u.ax.iDb];
67891 u.ax.pX = u.ax.pDb->pBt;
67892 assert( u.ax.pX!=0 );
67893 if( pOp->opcode==OP_OpenWrite ){
67894 u.ax.wrFlag = 1;
67895 assert( sqlite3SchemaMutexHeld(db, u.ax.iDb, 0) );
67896 if( u.ax.pDb->pSchema->file_format < p->minWriteFileFormat ){
67897 p->minWriteFileFormat = u.ax.pDb->pSchema->file_format;
67899 }else{
67900 u.ax.wrFlag = 0;
67902 if( pOp->p5 ){
67903 assert( u.ax.p2>0 );
67904 assert( u.ax.p2<=p->nMem );
67905 pIn2 = &aMem[u.ax.p2];
67906 assert( memIsValid(pIn2) );
67907 assert( (pIn2->flags & MEM_Int)!=0 );
67908 sqlite3VdbeMemIntegerify(pIn2);
67909 u.ax.p2 = (int)pIn2->u.i;
67910 /* The u.ax.p2 value always comes from a prior OP_CreateTable opcode and
67911 ** that opcode will always set the u.ax.p2 value to 2 or more or else fail.
67912 ** If there were a failure, the prepared statement would have halted
67913 ** before reaching this instruction. */
67914 if( NEVER(u.ax.p2<2) ) {
67915 rc = SQLITE_CORRUPT_BKPT;
67916 goto abort_due_to_error;
67919 if( pOp->p4type==P4_KEYINFO ){
67920 u.ax.pKeyInfo = pOp->p4.pKeyInfo;
67921 u.ax.pKeyInfo->enc = ENC(p->db);
67922 u.ax.nField = u.ax.pKeyInfo->nField+1;
67923 }else if( pOp->p4type==P4_INT32 ){
67924 u.ax.nField = pOp->p4.i;
67926 assert( pOp->p1>=0 );
67927 u.ax.pCur = allocateCursor(p, pOp->p1, u.ax.nField, u.ax.iDb, 1);
67928 if( u.ax.pCur==0 ) goto no_mem;
67929 u.ax.pCur->nullRow = 1;
67930 u.ax.pCur->isOrdered = 1;
67931 rc = sqlite3BtreeCursor(u.ax.pX, u.ax.p2, u.ax.wrFlag, u.ax.pKeyInfo, u.ax.pCur->pCursor);
67932 u.ax.pCur->pKeyInfo = u.ax.pKeyInfo;
67934 /* Since it performs no memory allocation or IO, the only value that
67935 ** sqlite3BtreeCursor() may return is SQLITE_OK. */
67936 assert( rc==SQLITE_OK );
67938 /* Set the VdbeCursor.isTable and isIndex variables. Previous versions of
67939 ** SQLite used to check if the root-page flags were sane at this point
67940 ** and report database corruption if they were not, but this check has
67941 ** since moved into the btree layer. */
67942 u.ax.pCur->isTable = pOp->p4type!=P4_KEYINFO;
67943 u.ax.pCur->isIndex = !u.ax.pCur->isTable;
67944 break;
67947 /* Opcode: OpenEphemeral P1 P2 * P4 P5
67949 ** Open a new cursor P1 to a transient table.
67950 ** The cursor is always opened read/write even if
67951 ** the main database is read-only. The ephemeral
67952 ** table is deleted automatically when the cursor is closed.
67954 ** P2 is the number of columns in the ephemeral table.
67955 ** The cursor points to a BTree table if P4==0 and to a BTree index
67956 ** if P4 is not 0. If P4 is not NULL, it points to a KeyInfo structure
67957 ** that defines the format of keys in the index.
67959 ** This opcode was once called OpenTemp. But that created
67960 ** confusion because the term "temp table", might refer either
67961 ** to a TEMP table at the SQL level, or to a table opened by
67962 ** this opcode. Then this opcode was call OpenVirtual. But
67963 ** that created confusion with the whole virtual-table idea.
67965 ** The P5 parameter can be a mask of the BTREE_* flags defined
67966 ** in btree.h. These flags control aspects of the operation of
67967 ** the btree. The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are
67968 ** added automatically.
67970 /* Opcode: OpenAutoindex P1 P2 * P4 *
67972 ** This opcode works the same as OP_OpenEphemeral. It has a
67973 ** different name to distinguish its use. Tables created using
67974 ** by this opcode will be used for automatically created transient
67975 ** indices in joins.
67977 case OP_OpenAutoindex:
67978 case OP_OpenEphemeral: {
67979 #if 0 /* local variables moved into u.ay */
67980 VdbeCursor *pCx;
67981 #endif /* local variables moved into u.ay */
67982 static const int vfsFlags =
67983 SQLITE_OPEN_READWRITE |
67984 SQLITE_OPEN_CREATE |
67985 SQLITE_OPEN_EXCLUSIVE |
67986 SQLITE_OPEN_DELETEONCLOSE |
67987 SQLITE_OPEN_TRANSIENT_DB;
67989 assert( pOp->p1>=0 );
67990 u.ay.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
67991 if( u.ay.pCx==0 ) goto no_mem;
67992 u.ay.pCx->nullRow = 1;
67993 rc = sqlite3BtreeOpen(db->pVfs, 0, db, &u.ay.pCx->pBt,
67994 BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags);
67995 if( rc==SQLITE_OK ){
67996 rc = sqlite3BtreeBeginTrans(u.ay.pCx->pBt, 1);
67998 if( rc==SQLITE_OK ){
67999 /* If a transient index is required, create it by calling
68000 ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before
68001 ** opening it. If a transient table is required, just use the
68002 ** automatically created table with root-page 1 (an BLOB_INTKEY table).
68004 if( pOp->p4.pKeyInfo ){
68005 int pgno;
68006 assert( pOp->p4type==P4_KEYINFO );
68007 rc = sqlite3BtreeCreateTable(u.ay.pCx->pBt, &pgno, BTREE_BLOBKEY | pOp->p5);
68008 if( rc==SQLITE_OK ){
68009 assert( pgno==MASTER_ROOT+1 );
68010 rc = sqlite3BtreeCursor(u.ay.pCx->pBt, pgno, 1,
68011 (KeyInfo*)pOp->p4.z, u.ay.pCx->pCursor);
68012 u.ay.pCx->pKeyInfo = pOp->p4.pKeyInfo;
68013 u.ay.pCx->pKeyInfo->enc = ENC(p->db);
68015 u.ay.pCx->isTable = 0;
68016 }else{
68017 rc = sqlite3BtreeCursor(u.ay.pCx->pBt, MASTER_ROOT, 1, 0, u.ay.pCx->pCursor);
68018 u.ay.pCx->isTable = 1;
68021 u.ay.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
68022 u.ay.pCx->isIndex = !u.ay.pCx->isTable;
68023 break;
68026 /* Opcode: OpenSorter P1 P2 * P4 *
68028 ** This opcode works like OP_OpenEphemeral except that it opens
68029 ** a transient index that is specifically designed to sort large
68030 ** tables using an external merge-sort algorithm.
68032 case OP_SorterOpen: {
68033 #if 0 /* local variables moved into u.az */
68034 VdbeCursor *pCx;
68035 #endif /* local variables moved into u.az */
68036 #ifndef SQLITE_OMIT_MERGE_SORT
68037 u.az.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
68038 if( u.az.pCx==0 ) goto no_mem;
68039 u.az.pCx->pKeyInfo = pOp->p4.pKeyInfo;
68040 u.az.pCx->pKeyInfo->enc = ENC(p->db);
68041 u.az.pCx->isSorter = 1;
68042 rc = sqlite3VdbeSorterInit(db, u.az.pCx);
68043 #else
68044 pOp->opcode = OP_OpenEphemeral;
68045 pc--;
68046 #endif
68047 break;
68050 /* Opcode: OpenPseudo P1 P2 P3 * *
68052 ** Open a new cursor that points to a fake table that contains a single
68053 ** row of data. The content of that one row in the content of memory
68054 ** register P2. In other words, cursor P1 becomes an alias for the
68055 ** MEM_Blob content contained in register P2.
68057 ** A pseudo-table created by this opcode is used to hold a single
68058 ** row output from the sorter so that the row can be decomposed into
68059 ** individual columns using the OP_Column opcode. The OP_Column opcode
68060 ** is the only cursor opcode that works with a pseudo-table.
68062 ** P3 is the number of fields in the records that will be stored by
68063 ** the pseudo-table.
68065 case OP_OpenPseudo: {
68066 #if 0 /* local variables moved into u.ba */
68067 VdbeCursor *pCx;
68068 #endif /* local variables moved into u.ba */
68070 assert( pOp->p1>=0 );
68071 u.ba.pCx = allocateCursor(p, pOp->p1, pOp->p3, -1, 0);
68072 if( u.ba.pCx==0 ) goto no_mem;
68073 u.ba.pCx->nullRow = 1;
68074 u.ba.pCx->pseudoTableReg = pOp->p2;
68075 u.ba.pCx->isTable = 1;
68076 u.ba.pCx->isIndex = 0;
68077 break;
68080 /* Opcode: Close P1 * * * *
68082 ** Close a cursor previously opened as P1. If P1 is not
68083 ** currently open, this instruction is a no-op.
68085 case OP_Close: {
68086 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68087 sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
68088 p->apCsr[pOp->p1] = 0;
68089 break;
68092 /* Opcode: SeekGe P1 P2 P3 P4 *
68094 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
68095 ** use the value in register P3 as the key. If cursor P1 refers
68096 ** to an SQL index, then P3 is the first in an array of P4 registers
68097 ** that are used as an unpacked index key.
68099 ** Reposition cursor P1 so that it points to the smallest entry that
68100 ** is greater than or equal to the key value. If there are no records
68101 ** greater than or equal to the key and P2 is not zero, then jump to P2.
68103 ** See also: Found, NotFound, Distinct, SeekLt, SeekGt, SeekLe
68105 /* Opcode: SeekGt P1 P2 P3 P4 *
68107 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
68108 ** use the value in register P3 as a key. If cursor P1 refers
68109 ** to an SQL index, then P3 is the first in an array of P4 registers
68110 ** that are used as an unpacked index key.
68112 ** Reposition cursor P1 so that it points to the smallest entry that
68113 ** is greater than the key value. If there are no records greater than
68114 ** the key and P2 is not zero, then jump to P2.
68116 ** See also: Found, NotFound, Distinct, SeekLt, SeekGe, SeekLe
68118 /* Opcode: SeekLt P1 P2 P3 P4 *
68120 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
68121 ** use the value in register P3 as a key. If cursor P1 refers
68122 ** to an SQL index, then P3 is the first in an array of P4 registers
68123 ** that are used as an unpacked index key.
68125 ** Reposition cursor P1 so that it points to the largest entry that
68126 ** is less than the key value. If there are no records less than
68127 ** the key and P2 is not zero, then jump to P2.
68129 ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLe
68131 /* Opcode: SeekLe P1 P2 P3 P4 *
68133 ** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
68134 ** use the value in register P3 as a key. If cursor P1 refers
68135 ** to an SQL index, then P3 is the first in an array of P4 registers
68136 ** that are used as an unpacked index key.
68138 ** Reposition cursor P1 so that it points to the largest entry that
68139 ** is less than or equal to the key value. If there are no records
68140 ** less than or equal to the key and P2 is not zero, then jump to P2.
68142 ** See also: Found, NotFound, Distinct, SeekGt, SeekGe, SeekLt
68144 case OP_SeekLt: /* jump, in3 */
68145 case OP_SeekLe: /* jump, in3 */
68146 case OP_SeekGe: /* jump, in3 */
68147 case OP_SeekGt: { /* jump, in3 */
68148 #if 0 /* local variables moved into u.bb */
68149 int res;
68150 int oc;
68151 VdbeCursor *pC;
68152 UnpackedRecord r;
68153 int nField;
68154 i64 iKey; /* The rowid we are to seek to */
68155 #endif /* local variables moved into u.bb */
68157 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68158 assert( pOp->p2!=0 );
68159 u.bb.pC = p->apCsr[pOp->p1];
68160 assert( u.bb.pC!=0 );
68161 assert( u.bb.pC->pseudoTableReg==0 );
68162 assert( OP_SeekLe == OP_SeekLt+1 );
68163 assert( OP_SeekGe == OP_SeekLt+2 );
68164 assert( OP_SeekGt == OP_SeekLt+3 );
68165 assert( u.bb.pC->isOrdered );
68166 if( ALWAYS(u.bb.pC->pCursor!=0) ){
68167 u.bb.oc = pOp->opcode;
68168 u.bb.pC->nullRow = 0;
68169 if( u.bb.pC->isTable ){
68170 /* The input value in P3 might be of any type: integer, real, string,
68171 ** blob, or NULL. But it needs to be an integer before we can do
68172 ** the seek, so covert it. */
68173 pIn3 = &aMem[pOp->p3];
68174 applyNumericAffinity(pIn3);
68175 u.bb.iKey = sqlite3VdbeIntValue(pIn3);
68176 u.bb.pC->rowidIsValid = 0;
68178 /* If the P3 value could not be converted into an integer without
68179 ** loss of information, then special processing is required... */
68180 if( (pIn3->flags & MEM_Int)==0 ){
68181 if( (pIn3->flags & MEM_Real)==0 ){
68182 /* If the P3 value cannot be converted into any kind of a number,
68183 ** then the seek is not possible, so jump to P2 */
68184 pc = pOp->p2 - 1;
68185 break;
68187 /* If we reach this point, then the P3 value must be a floating
68188 ** point number. */
68189 assert( (pIn3->flags & MEM_Real)!=0 );
68191 if( u.bb.iKey==SMALLEST_INT64 && (pIn3->r<(double)u.bb.iKey || pIn3->r>0) ){
68192 /* The P3 value is too large in magnitude to be expressed as an
68193 ** integer. */
68194 u.bb.res = 1;
68195 if( pIn3->r<0 ){
68196 if( u.bb.oc>=OP_SeekGe ){ assert( u.bb.oc==OP_SeekGe || u.bb.oc==OP_SeekGt );
68197 rc = sqlite3BtreeFirst(u.bb.pC->pCursor, &u.bb.res);
68198 if( rc!=SQLITE_OK ) goto abort_due_to_error;
68200 }else{
68201 if( u.bb.oc<=OP_SeekLe ){ assert( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekLe );
68202 rc = sqlite3BtreeLast(u.bb.pC->pCursor, &u.bb.res);
68203 if( rc!=SQLITE_OK ) goto abort_due_to_error;
68206 if( u.bb.res ){
68207 pc = pOp->p2 - 1;
68209 break;
68210 }else if( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekGe ){
68211 /* Use the ceiling() function to convert real->int */
68212 if( pIn3->r > (double)u.bb.iKey ) u.bb.iKey++;
68213 }else{
68214 /* Use the floor() function to convert real->int */
68215 assert( u.bb.oc==OP_SeekLe || u.bb.oc==OP_SeekGt );
68216 if( pIn3->r < (double)u.bb.iKey ) u.bb.iKey--;
68219 rc = sqlite3BtreeMovetoUnpacked(u.bb.pC->pCursor, 0, (u64)u.bb.iKey, 0, &u.bb.res);
68220 if( rc!=SQLITE_OK ){
68221 goto abort_due_to_error;
68223 if( u.bb.res==0 ){
68224 u.bb.pC->rowidIsValid = 1;
68225 u.bb.pC->lastRowid = u.bb.iKey;
68227 }else{
68228 u.bb.nField = pOp->p4.i;
68229 assert( pOp->p4type==P4_INT32 );
68230 assert( u.bb.nField>0 );
68231 u.bb.r.pKeyInfo = u.bb.pC->pKeyInfo;
68232 u.bb.r.nField = (u16)u.bb.nField;
68234 /* The next line of code computes as follows, only faster:
68235 ** if( u.bb.oc==OP_SeekGt || u.bb.oc==OP_SeekLe ){
68236 ** u.bb.r.flags = UNPACKED_INCRKEY;
68237 ** }else{
68238 ** u.bb.r.flags = 0;
68239 ** }
68241 u.bb.r.flags = (u16)(UNPACKED_INCRKEY * (1 & (u.bb.oc - OP_SeekLt)));
68242 assert( u.bb.oc!=OP_SeekGt || u.bb.r.flags==UNPACKED_INCRKEY );
68243 assert( u.bb.oc!=OP_SeekLe || u.bb.r.flags==UNPACKED_INCRKEY );
68244 assert( u.bb.oc!=OP_SeekGe || u.bb.r.flags==0 );
68245 assert( u.bb.oc!=OP_SeekLt || u.bb.r.flags==0 );
68247 u.bb.r.aMem = &aMem[pOp->p3];
68248 #ifdef SQLITE_DEBUG
68249 { int i; for(i=0; i<u.bb.r.nField; i++) assert( memIsValid(&u.bb.r.aMem[i]) ); }
68250 #endif
68251 ExpandBlob(u.bb.r.aMem);
68252 rc = sqlite3BtreeMovetoUnpacked(u.bb.pC->pCursor, &u.bb.r, 0, 0, &u.bb.res);
68253 if( rc!=SQLITE_OK ){
68254 goto abort_due_to_error;
68256 u.bb.pC->rowidIsValid = 0;
68258 u.bb.pC->deferredMoveto = 0;
68259 u.bb.pC->cacheStatus = CACHE_STALE;
68260 #ifdef SQLITE_TEST
68261 sqlite3_search_count++;
68262 #endif
68263 if( u.bb.oc>=OP_SeekGe ){ assert( u.bb.oc==OP_SeekGe || u.bb.oc==OP_SeekGt );
68264 if( u.bb.res<0 || (u.bb.res==0 && u.bb.oc==OP_SeekGt) ){
68265 rc = sqlite3BtreeNext(u.bb.pC->pCursor, &u.bb.res);
68266 if( rc!=SQLITE_OK ) goto abort_due_to_error;
68267 u.bb.pC->rowidIsValid = 0;
68268 }else{
68269 u.bb.res = 0;
68271 }else{
68272 assert( u.bb.oc==OP_SeekLt || u.bb.oc==OP_SeekLe );
68273 if( u.bb.res>0 || (u.bb.res==0 && u.bb.oc==OP_SeekLt) ){
68274 rc = sqlite3BtreePrevious(u.bb.pC->pCursor, &u.bb.res);
68275 if( rc!=SQLITE_OK ) goto abort_due_to_error;
68276 u.bb.pC->rowidIsValid = 0;
68277 }else{
68278 /* u.bb.res might be negative because the table is empty. Check to
68279 ** see if this is the case.
68281 u.bb.res = sqlite3BtreeEof(u.bb.pC->pCursor);
68284 assert( pOp->p2>0 );
68285 if( u.bb.res ){
68286 pc = pOp->p2 - 1;
68288 }else{
68289 /* This happens when attempting to open the sqlite3_master table
68290 ** for read access returns SQLITE_EMPTY. In this case always
68291 ** take the jump (since there are no records in the table).
68293 pc = pOp->p2 - 1;
68295 break;
68298 /* Opcode: Seek P1 P2 * * *
68300 ** P1 is an open table cursor and P2 is a rowid integer. Arrange
68301 ** for P1 to move so that it points to the rowid given by P2.
68303 ** This is actually a deferred seek. Nothing actually happens until
68304 ** the cursor is used to read a record. That way, if no reads
68305 ** occur, no unnecessary I/O happens.
68307 case OP_Seek: { /* in2 */
68308 #if 0 /* local variables moved into u.bc */
68309 VdbeCursor *pC;
68310 #endif /* local variables moved into u.bc */
68312 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68313 u.bc.pC = p->apCsr[pOp->p1];
68314 assert( u.bc.pC!=0 );
68315 if( ALWAYS(u.bc.pC->pCursor!=0) ){
68316 assert( u.bc.pC->isTable );
68317 u.bc.pC->nullRow = 0;
68318 pIn2 = &aMem[pOp->p2];
68319 u.bc.pC->movetoTarget = sqlite3VdbeIntValue(pIn2);
68320 u.bc.pC->rowidIsValid = 0;
68321 u.bc.pC->deferredMoveto = 1;
68323 break;
68327 /* Opcode: Found P1 P2 P3 P4 *
68329 ** If P4==0 then register P3 holds a blob constructed by MakeRecord. If
68330 ** P4>0 then register P3 is the first of P4 registers that form an unpacked
68331 ** record.
68333 ** Cursor P1 is on an index btree. If the record identified by P3 and P4
68334 ** is a prefix of any entry in P1 then a jump is made to P2 and
68335 ** P1 is left pointing at the matching entry.
68337 /* Opcode: NotFound P1 P2 P3 P4 *
68339 ** If P4==0 then register P3 holds a blob constructed by MakeRecord. If
68340 ** P4>0 then register P3 is the first of P4 registers that form an unpacked
68341 ** record.
68343 ** Cursor P1 is on an index btree. If the record identified by P3 and P4
68344 ** is not the prefix of any entry in P1 then a jump is made to P2. If P1
68345 ** does contain an entry whose prefix matches the P3/P4 record then control
68346 ** falls through to the next instruction and P1 is left pointing at the
68347 ** matching entry.
68349 ** See also: Found, NotExists, IsUnique
68351 case OP_NotFound: /* jump, in3 */
68352 case OP_Found: { /* jump, in3 */
68353 #if 0 /* local variables moved into u.bd */
68354 int alreadyExists;
68355 VdbeCursor *pC;
68356 int res;
68357 char *pFree;
68358 UnpackedRecord *pIdxKey;
68359 UnpackedRecord r;
68360 char aTempRec[ROUND8(sizeof(UnpackedRecord)) + sizeof(Mem)*3 + 7];
68361 #endif /* local variables moved into u.bd */
68363 #ifdef SQLITE_TEST
68364 sqlite3_found_count++;
68365 #endif
68367 u.bd.alreadyExists = 0;
68368 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68369 assert( pOp->p4type==P4_INT32 );
68370 u.bd.pC = p->apCsr[pOp->p1];
68371 assert( u.bd.pC!=0 );
68372 pIn3 = &aMem[pOp->p3];
68373 if( ALWAYS(u.bd.pC->pCursor!=0) ){
68375 assert( u.bd.pC->isTable==0 );
68376 if( pOp->p4.i>0 ){
68377 u.bd.r.pKeyInfo = u.bd.pC->pKeyInfo;
68378 u.bd.r.nField = (u16)pOp->p4.i;
68379 u.bd.r.aMem = pIn3;
68380 #ifdef SQLITE_DEBUG
68381 { int i; for(i=0; i<u.bd.r.nField; i++) assert( memIsValid(&u.bd.r.aMem[i]) ); }
68382 #endif
68383 u.bd.r.flags = UNPACKED_PREFIX_MATCH;
68384 u.bd.pIdxKey = &u.bd.r;
68385 }else{
68386 u.bd.pIdxKey = sqlite3VdbeAllocUnpackedRecord(
68387 u.bd.pC->pKeyInfo, u.bd.aTempRec, sizeof(u.bd.aTempRec), &u.bd.pFree
68389 if( u.bd.pIdxKey==0 ) goto no_mem;
68390 assert( pIn3->flags & MEM_Blob );
68391 assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */
68392 sqlite3VdbeRecordUnpack(u.bd.pC->pKeyInfo, pIn3->n, pIn3->z, u.bd.pIdxKey);
68393 u.bd.pIdxKey->flags |= UNPACKED_PREFIX_MATCH;
68395 rc = sqlite3BtreeMovetoUnpacked(u.bd.pC->pCursor, u.bd.pIdxKey, 0, 0, &u.bd.res);
68396 if( pOp->p4.i==0 ){
68397 sqlite3DbFree(db, u.bd.pFree);
68399 if( rc!=SQLITE_OK ){
68400 break;
68402 u.bd.alreadyExists = (u.bd.res==0);
68403 u.bd.pC->deferredMoveto = 0;
68404 u.bd.pC->cacheStatus = CACHE_STALE;
68406 if( pOp->opcode==OP_Found ){
68407 if( u.bd.alreadyExists ) pc = pOp->p2 - 1;
68408 }else{
68409 if( !u.bd.alreadyExists ) pc = pOp->p2 - 1;
68411 break;
68414 /* Opcode: IsUnique P1 P2 P3 P4 *
68416 ** Cursor P1 is open on an index b-tree - that is to say, a btree which
68417 ** no data and where the key are records generated by OP_MakeRecord with
68418 ** the list field being the integer ROWID of the entry that the index
68419 ** entry refers to.
68421 ** The P3 register contains an integer record number. Call this record
68422 ** number R. Register P4 is the first in a set of N contiguous registers
68423 ** that make up an unpacked index key that can be used with cursor P1.
68424 ** The value of N can be inferred from the cursor. N includes the rowid
68425 ** value appended to the end of the index record. This rowid value may
68426 ** or may not be the same as R.
68428 ** If any of the N registers beginning with register P4 contains a NULL
68429 ** value, jump immediately to P2.
68431 ** Otherwise, this instruction checks if cursor P1 contains an entry
68432 ** where the first (N-1) fields match but the rowid value at the end
68433 ** of the index entry is not R. If there is no such entry, control jumps
68434 ** to instruction P2. Otherwise, the rowid of the conflicting index
68435 ** entry is copied to register P3 and control falls through to the next
68436 ** instruction.
68438 ** See also: NotFound, NotExists, Found
68440 case OP_IsUnique: { /* jump, in3 */
68441 #if 0 /* local variables moved into u.be */
68442 u16 ii;
68443 VdbeCursor *pCx;
68444 BtCursor *pCrsr;
68445 u16 nField;
68446 Mem *aMx;
68447 UnpackedRecord r; /* B-Tree index search key */
68448 i64 R; /* Rowid stored in register P3 */
68449 #endif /* local variables moved into u.be */
68451 pIn3 = &aMem[pOp->p3];
68452 u.be.aMx = &aMem[pOp->p4.i];
68453 /* Assert that the values of parameters P1 and P4 are in range. */
68454 assert( pOp->p4type==P4_INT32 );
68455 assert( pOp->p4.i>0 && pOp->p4.i<=p->nMem );
68456 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68458 /* Find the index cursor. */
68459 u.be.pCx = p->apCsr[pOp->p1];
68460 assert( u.be.pCx->deferredMoveto==0 );
68461 u.be.pCx->seekResult = 0;
68462 u.be.pCx->cacheStatus = CACHE_STALE;
68463 u.be.pCrsr = u.be.pCx->pCursor;
68465 /* If any of the values are NULL, take the jump. */
68466 u.be.nField = u.be.pCx->pKeyInfo->nField;
68467 for(u.be.ii=0; u.be.ii<u.be.nField; u.be.ii++){
68468 if( u.be.aMx[u.be.ii].flags & MEM_Null ){
68469 pc = pOp->p2 - 1;
68470 u.be.pCrsr = 0;
68471 break;
68474 assert( (u.be.aMx[u.be.nField].flags & MEM_Null)==0 );
68476 if( u.be.pCrsr!=0 ){
68477 /* Populate the index search key. */
68478 u.be.r.pKeyInfo = u.be.pCx->pKeyInfo;
68479 u.be.r.nField = u.be.nField + 1;
68480 u.be.r.flags = UNPACKED_PREFIX_SEARCH;
68481 u.be.r.aMem = u.be.aMx;
68482 #ifdef SQLITE_DEBUG
68483 { int i; for(i=0; i<u.be.r.nField; i++) assert( memIsValid(&u.be.r.aMem[i]) ); }
68484 #endif
68486 /* Extract the value of u.be.R from register P3. */
68487 sqlite3VdbeMemIntegerify(pIn3);
68488 u.be.R = pIn3->u.i;
68490 /* Search the B-Tree index. If no conflicting record is found, jump
68491 ** to P2. Otherwise, copy the rowid of the conflicting record to
68492 ** register P3 and fall through to the next instruction. */
68493 rc = sqlite3BtreeMovetoUnpacked(u.be.pCrsr, &u.be.r, 0, 0, &u.be.pCx->seekResult);
68494 if( (u.be.r.flags & UNPACKED_PREFIX_SEARCH) || u.be.r.rowid==u.be.R ){
68495 pc = pOp->p2 - 1;
68496 }else{
68497 pIn3->u.i = u.be.r.rowid;
68500 break;
68503 /* Opcode: NotExists P1 P2 P3 * *
68505 ** Use the content of register P3 as an integer key. If a record
68506 ** with that key does not exist in table of P1, then jump to P2.
68507 ** If the record does exist, then fall through. The cursor is left
68508 ** pointing to the record if it exists.
68510 ** The difference between this operation and NotFound is that this
68511 ** operation assumes the key is an integer and that P1 is a table whereas
68512 ** NotFound assumes key is a blob constructed from MakeRecord and
68513 ** P1 is an index.
68515 ** See also: Found, NotFound, IsUnique
68517 case OP_NotExists: { /* jump, in3 */
68518 #if 0 /* local variables moved into u.bf */
68519 VdbeCursor *pC;
68520 BtCursor *pCrsr;
68521 int res;
68522 u64 iKey;
68523 #endif /* local variables moved into u.bf */
68525 pIn3 = &aMem[pOp->p3];
68526 assert( pIn3->flags & MEM_Int );
68527 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68528 u.bf.pC = p->apCsr[pOp->p1];
68529 assert( u.bf.pC!=0 );
68530 assert( u.bf.pC->isTable );
68531 assert( u.bf.pC->pseudoTableReg==0 );
68532 u.bf.pCrsr = u.bf.pC->pCursor;
68533 if( ALWAYS(u.bf.pCrsr!=0) ){
68534 u.bf.res = 0;
68535 u.bf.iKey = pIn3->u.i;
68536 rc = sqlite3BtreeMovetoUnpacked(u.bf.pCrsr, 0, u.bf.iKey, 0, &u.bf.res);
68537 u.bf.pC->lastRowid = pIn3->u.i;
68538 u.bf.pC->rowidIsValid = u.bf.res==0 ?1:0;
68539 u.bf.pC->nullRow = 0;
68540 u.bf.pC->cacheStatus = CACHE_STALE;
68541 u.bf.pC->deferredMoveto = 0;
68542 if( u.bf.res!=0 ){
68543 pc = pOp->p2 - 1;
68544 assert( u.bf.pC->rowidIsValid==0 );
68546 u.bf.pC->seekResult = u.bf.res;
68547 }else{
68548 /* This happens when an attempt to open a read cursor on the
68549 ** sqlite_master table returns SQLITE_EMPTY.
68551 pc = pOp->p2 - 1;
68552 assert( u.bf.pC->rowidIsValid==0 );
68553 u.bf.pC->seekResult = 0;
68555 break;
68558 /* Opcode: Sequence P1 P2 * * *
68560 ** Find the next available sequence number for cursor P1.
68561 ** Write the sequence number into register P2.
68562 ** The sequence number on the cursor is incremented after this
68563 ** instruction.
68565 case OP_Sequence: { /* out2-prerelease */
68566 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68567 assert( p->apCsr[pOp->p1]!=0 );
68568 pOut->u.i = p->apCsr[pOp->p1]->seqCount++;
68569 break;
68573 /* Opcode: NewRowid P1 P2 P3 * *
68575 ** Get a new integer record number (a.k.a "rowid") used as the key to a table.
68576 ** The record number is not previously used as a key in the database
68577 ** table that cursor P1 points to. The new record number is written
68578 ** written to register P2.
68580 ** If P3>0 then P3 is a register in the root frame of this VDBE that holds
68581 ** the largest previously generated record number. No new record numbers are
68582 ** allowed to be less than this value. When this value reaches its maximum,
68583 ** an SQLITE_FULL error is generated. The P3 register is updated with the '
68584 ** generated record number. This P3 mechanism is used to help implement the
68585 ** AUTOINCREMENT feature.
68587 case OP_NewRowid: { /* out2-prerelease */
68588 #if 0 /* local variables moved into u.bg */
68589 i64 v; /* The new rowid */
68590 VdbeCursor *pC; /* Cursor of table to get the new rowid */
68591 int res; /* Result of an sqlite3BtreeLast() */
68592 int cnt; /* Counter to limit the number of searches */
68593 Mem *pMem; /* Register holding largest rowid for AUTOINCREMENT */
68594 VdbeFrame *pFrame; /* Root frame of VDBE */
68595 #endif /* local variables moved into u.bg */
68597 u.bg.v = 0;
68598 u.bg.res = 0;
68599 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68600 u.bg.pC = p->apCsr[pOp->p1];
68601 assert( u.bg.pC!=0 );
68602 if( NEVER(u.bg.pC->pCursor==0) ){
68603 /* The zero initialization above is all that is needed */
68604 }else{
68605 /* The next rowid or record number (different terms for the same
68606 ** thing) is obtained in a two-step algorithm.
68608 ** First we attempt to find the largest existing rowid and add one
68609 ** to that. But if the largest existing rowid is already the maximum
68610 ** positive integer, we have to fall through to the second
68611 ** probabilistic algorithm
68613 ** The second algorithm is to select a rowid at random and see if
68614 ** it already exists in the table. If it does not exist, we have
68615 ** succeeded. If the random rowid does exist, we select a new one
68616 ** and try again, up to 100 times.
68618 assert( u.bg.pC->isTable );
68620 #ifdef SQLITE_32BIT_ROWID
68621 # define MAX_ROWID 0x7fffffff
68622 #else
68623 /* Some compilers complain about constants of the form 0x7fffffffffffffff.
68624 ** Others complain about 0x7ffffffffffffffffLL. The following macro seems
68625 ** to provide the constant while making all compilers happy.
68627 # define MAX_ROWID (i64)( (((u64)0x7fffffff)<<32) | (u64)0xffffffff )
68628 #endif
68630 if( !u.bg.pC->useRandomRowid ){
68631 u.bg.v = sqlite3BtreeGetCachedRowid(u.bg.pC->pCursor);
68632 if( u.bg.v==0 ){
68633 rc = sqlite3BtreeLast(u.bg.pC->pCursor, &u.bg.res);
68634 if( rc!=SQLITE_OK ){
68635 goto abort_due_to_error;
68637 if( u.bg.res ){
68638 u.bg.v = 1; /* IMP: R-61914-48074 */
68639 }else{
68640 assert( sqlite3BtreeCursorIsValid(u.bg.pC->pCursor) );
68641 rc = sqlite3BtreeKeySize(u.bg.pC->pCursor, &u.bg.v);
68642 assert( rc==SQLITE_OK ); /* Cannot fail following BtreeLast() */
68643 if( u.bg.v==MAX_ROWID ){
68644 u.bg.pC->useRandomRowid = 1;
68645 }else{
68646 u.bg.v++; /* IMP: R-29538-34987 */
68651 #ifndef SQLITE_OMIT_AUTOINCREMENT
68652 if( pOp->p3 ){
68653 /* Assert that P3 is a valid memory cell. */
68654 assert( pOp->p3>0 );
68655 if( p->pFrame ){
68656 for(u.bg.pFrame=p->pFrame; u.bg.pFrame->pParent; u.bg.pFrame=u.bg.pFrame->pParent);
68657 /* Assert that P3 is a valid memory cell. */
68658 assert( pOp->p3<=u.bg.pFrame->nMem );
68659 u.bg.pMem = &u.bg.pFrame->aMem[pOp->p3];
68660 }else{
68661 /* Assert that P3 is a valid memory cell. */
68662 assert( pOp->p3<=p->nMem );
68663 u.bg.pMem = &aMem[pOp->p3];
68664 memAboutToChange(p, u.bg.pMem);
68666 assert( memIsValid(u.bg.pMem) );
68668 REGISTER_TRACE(pOp->p3, u.bg.pMem);
68669 sqlite3VdbeMemIntegerify(u.bg.pMem);
68670 assert( (u.bg.pMem->flags & MEM_Int)!=0 ); /* mem(P3) holds an integer */
68671 if( u.bg.pMem->u.i==MAX_ROWID || u.bg.pC->useRandomRowid ){
68672 rc = SQLITE_FULL; /* IMP: R-12275-61338 */
68673 goto abort_due_to_error;
68675 if( u.bg.v<u.bg.pMem->u.i+1 ){
68676 u.bg.v = u.bg.pMem->u.i + 1;
68678 u.bg.pMem->u.i = u.bg.v;
68680 #endif
68682 sqlite3BtreeSetCachedRowid(u.bg.pC->pCursor, u.bg.v<MAX_ROWID ? u.bg.v+1 : 0);
68684 if( u.bg.pC->useRandomRowid ){
68685 /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the
68686 ** largest possible integer (9223372036854775807) then the database
68687 ** engine starts picking positive candidate ROWIDs at random until
68688 ** it finds one that is not previously used. */
68689 assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is
68690 ** an AUTOINCREMENT table. */
68691 /* on the first attempt, simply do one more than previous */
68692 u.bg.v = lastRowid;
68693 u.bg.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
68694 u.bg.v++; /* ensure non-zero */
68695 u.bg.cnt = 0;
68696 while( ((rc = sqlite3BtreeMovetoUnpacked(u.bg.pC->pCursor, 0, (u64)u.bg.v,
68697 0, &u.bg.res))==SQLITE_OK)
68698 && (u.bg.res==0)
68699 && (++u.bg.cnt<100)){
68700 /* collision - try another random rowid */
68701 sqlite3_randomness(sizeof(u.bg.v), &u.bg.v);
68702 if( u.bg.cnt<5 ){
68703 /* try "small" random rowids for the initial attempts */
68704 u.bg.v &= 0xffffff;
68705 }else{
68706 u.bg.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
68708 u.bg.v++; /* ensure non-zero */
68710 if( rc==SQLITE_OK && u.bg.res==0 ){
68711 rc = SQLITE_FULL; /* IMP: R-38219-53002 */
68712 goto abort_due_to_error;
68714 assert( u.bg.v>0 ); /* EV: R-40812-03570 */
68716 u.bg.pC->rowidIsValid = 0;
68717 u.bg.pC->deferredMoveto = 0;
68718 u.bg.pC->cacheStatus = CACHE_STALE;
68720 pOut->u.i = u.bg.v;
68721 break;
68724 /* Opcode: Insert P1 P2 P3 P4 P5
68726 ** Write an entry into the table of cursor P1. A new entry is
68727 ** created if it doesn't already exist or the data for an existing
68728 ** entry is overwritten. The data is the value MEM_Blob stored in register
68729 ** number P2. The key is stored in register P3. The key must
68730 ** be a MEM_Int.
68732 ** If the OPFLAG_NCHANGE flag of P5 is set, then the row change count is
68733 ** incremented (otherwise not). If the OPFLAG_LASTROWID flag of P5 is set,
68734 ** then rowid is stored for subsequent return by the
68735 ** sqlite3_last_insert_rowid() function (otherwise it is unmodified).
68737 ** If the OPFLAG_USESEEKRESULT flag of P5 is set and if the result of
68738 ** the last seek operation (OP_NotExists) was a success, then this
68739 ** operation will not attempt to find the appropriate row before doing
68740 ** the insert but will instead overwrite the row that the cursor is
68741 ** currently pointing to. Presumably, the prior OP_NotExists opcode
68742 ** has already positioned the cursor correctly. This is an optimization
68743 ** that boosts performance by avoiding redundant seeks.
68745 ** If the OPFLAG_ISUPDATE flag is set, then this opcode is part of an
68746 ** UPDATE operation. Otherwise (if the flag is clear) then this opcode
68747 ** is part of an INSERT operation. The difference is only important to
68748 ** the update hook.
68750 ** Parameter P4 may point to a string containing the table-name, or
68751 ** may be NULL. If it is not NULL, then the update-hook
68752 ** (sqlite3.xUpdateCallback) is invoked following a successful insert.
68754 ** (WARNING/TODO: If P1 is a pseudo-cursor and P2 is dynamically
68755 ** allocated, then ownership of P2 is transferred to the pseudo-cursor
68756 ** and register P2 becomes ephemeral. If the cursor is changed, the
68757 ** value of register P2 will then change. Make sure this does not
68758 ** cause any problems.)
68760 ** This instruction only works on tables. The equivalent instruction
68761 ** for indices is OP_IdxInsert.
68763 /* Opcode: InsertInt P1 P2 P3 P4 P5
68765 ** This works exactly like OP_Insert except that the key is the
68766 ** integer value P3, not the value of the integer stored in register P3.
68768 case OP_Insert:
68769 case OP_InsertInt: {
68770 #if 0 /* local variables moved into u.bh */
68771 Mem *pData; /* MEM cell holding data for the record to be inserted */
68772 Mem *pKey; /* MEM cell holding key for the record */
68773 i64 iKey; /* The integer ROWID or key for the record to be inserted */
68774 VdbeCursor *pC; /* Cursor to table into which insert is written */
68775 int nZero; /* Number of zero-bytes to append */
68776 int seekResult; /* Result of prior seek or 0 if no USESEEKRESULT flag */
68777 const char *zDb; /* database name - used by the update hook */
68778 const char *zTbl; /* Table name - used by the opdate hook */
68779 int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
68780 #endif /* local variables moved into u.bh */
68782 u.bh.pData = &aMem[pOp->p2];
68783 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68784 assert( memIsValid(u.bh.pData) );
68785 u.bh.pC = p->apCsr[pOp->p1];
68786 assert( u.bh.pC!=0 );
68787 assert( u.bh.pC->pCursor!=0 );
68788 assert( u.bh.pC->pseudoTableReg==0 );
68789 assert( u.bh.pC->isTable );
68790 REGISTER_TRACE(pOp->p2, u.bh.pData);
68792 if( pOp->opcode==OP_Insert ){
68793 u.bh.pKey = &aMem[pOp->p3];
68794 assert( u.bh.pKey->flags & MEM_Int );
68795 assert( memIsValid(u.bh.pKey) );
68796 REGISTER_TRACE(pOp->p3, u.bh.pKey);
68797 u.bh.iKey = u.bh.pKey->u.i;
68798 }else{
68799 assert( pOp->opcode==OP_InsertInt );
68800 u.bh.iKey = pOp->p3;
68803 if( pOp->p5 & OPFLAG_NCHANGE ) p->nChange++;
68804 if( pOp->p5 & OPFLAG_LASTROWID ) db->lastRowid = lastRowid = u.bh.iKey;
68805 if( u.bh.pData->flags & MEM_Null ){
68806 u.bh.pData->z = 0;
68807 u.bh.pData->n = 0;
68808 }else{
68809 assert( u.bh.pData->flags & (MEM_Blob|MEM_Str) );
68811 u.bh.seekResult = ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bh.pC->seekResult : 0);
68812 if( u.bh.pData->flags & MEM_Zero ){
68813 u.bh.nZero = u.bh.pData->u.nZero;
68814 }else{
68815 u.bh.nZero = 0;
68817 sqlite3BtreeSetCachedRowid(u.bh.pC->pCursor, 0);
68818 rc = sqlite3BtreeInsert(u.bh.pC->pCursor, 0, u.bh.iKey,
68819 u.bh.pData->z, u.bh.pData->n, u.bh.nZero,
68820 pOp->p5 & OPFLAG_APPEND, u.bh.seekResult
68822 u.bh.pC->rowidIsValid = 0;
68823 u.bh.pC->deferredMoveto = 0;
68824 u.bh.pC->cacheStatus = CACHE_STALE;
68826 /* Invoke the update-hook if required. */
68827 if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
68828 u.bh.zDb = db->aDb[u.bh.pC->iDb].zName;
68829 u.bh.zTbl = pOp->p4.z;
68830 u.bh.op = ((pOp->p5 & OPFLAG_ISUPDATE) ? SQLITE_UPDATE : SQLITE_INSERT);
68831 assert( u.bh.pC->isTable );
68832 db->xUpdateCallback(db->pUpdateArg, u.bh.op, u.bh.zDb, u.bh.zTbl, u.bh.iKey);
68833 assert( u.bh.pC->iDb>=0 );
68835 break;
68838 /* Opcode: Delete P1 P2 * P4 *
68840 ** Delete the record at which the P1 cursor is currently pointing.
68842 ** The cursor will be left pointing at either the next or the previous
68843 ** record in the table. If it is left pointing at the next record, then
68844 ** the next Next instruction will be a no-op. Hence it is OK to delete
68845 ** a record from within an Next loop.
68847 ** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
68848 ** incremented (otherwise not).
68850 ** P1 must not be pseudo-table. It has to be a real table with
68851 ** multiple rows.
68853 ** If P4 is not NULL, then it is the name of the table that P1 is
68854 ** pointing to. The update hook will be invoked, if it exists.
68855 ** If P4 is not NULL then the P1 cursor must have been positioned
68856 ** using OP_NotFound prior to invoking this opcode.
68858 case OP_Delete: {
68859 #if 0 /* local variables moved into u.bi */
68860 i64 iKey;
68861 VdbeCursor *pC;
68862 #endif /* local variables moved into u.bi */
68864 u.bi.iKey = 0;
68865 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68866 u.bi.pC = p->apCsr[pOp->p1];
68867 assert( u.bi.pC!=0 );
68868 assert( u.bi.pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */
68870 /* If the update-hook will be invoked, set u.bi.iKey to the rowid of the
68871 ** row being deleted.
68873 if( db->xUpdateCallback && pOp->p4.z ){
68874 assert( u.bi.pC->isTable );
68875 assert( u.bi.pC->rowidIsValid ); /* lastRowid set by previous OP_NotFound */
68876 u.bi.iKey = u.bi.pC->lastRowid;
68879 /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or
68880 ** OP_Column on the same table without any intervening operations that
68881 ** might move or invalidate the cursor. Hence cursor u.bi.pC is always pointing
68882 ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation
68883 ** below is always a no-op and cannot fail. We will run it anyhow, though,
68884 ** to guard against future changes to the code generator.
68886 assert( u.bi.pC->deferredMoveto==0 );
68887 rc = sqlite3VdbeCursorMoveto(u.bi.pC);
68888 if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
68890 sqlite3BtreeSetCachedRowid(u.bi.pC->pCursor, 0);
68891 rc = sqlite3BtreeDelete(u.bi.pC->pCursor);
68892 u.bi.pC->cacheStatus = CACHE_STALE;
68894 /* Invoke the update-hook if required. */
68895 if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z ){
68896 const char *zDb = db->aDb[u.bi.pC->iDb].zName;
68897 const char *zTbl = pOp->p4.z;
68898 db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE, zDb, zTbl, u.bi.iKey);
68899 assert( u.bi.pC->iDb>=0 );
68901 if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++;
68902 break;
68904 /* Opcode: ResetCount * * * * *
68906 ** The value of the change counter is copied to the database handle
68907 ** change counter (returned by subsequent calls to sqlite3_changes()).
68908 ** Then the VMs internal change counter resets to 0.
68909 ** This is used by trigger programs.
68911 case OP_ResetCount: {
68912 sqlite3VdbeSetChanges(db, p->nChange);
68913 p->nChange = 0;
68914 break;
68917 /* Opcode: SorterCompare P1 P2 P3
68919 ** P1 is a sorter cursor. This instruction compares the record blob in
68920 ** register P3 with the entry that the sorter cursor currently points to.
68921 ** If, excluding the rowid fields at the end, the two records are a match,
68922 ** fall through to the next instruction. Otherwise, jump to instruction P2.
68924 case OP_SorterCompare: {
68925 #if 0 /* local variables moved into u.bj */
68926 VdbeCursor *pC;
68927 int res;
68928 #endif /* local variables moved into u.bj */
68930 u.bj.pC = p->apCsr[pOp->p1];
68931 assert( isSorter(u.bj.pC) );
68932 pIn3 = &aMem[pOp->p3];
68933 rc = sqlite3VdbeSorterCompare(u.bj.pC, pIn3, &u.bj.res);
68934 if( u.bj.res ){
68935 pc = pOp->p2-1;
68937 break;
68940 /* Opcode: SorterData P1 P2 * * *
68942 ** Write into register P2 the current sorter data for sorter cursor P1.
68944 case OP_SorterData: {
68945 #if 0 /* local variables moved into u.bk */
68946 VdbeCursor *pC;
68947 #endif /* local variables moved into u.bk */
68948 #ifndef SQLITE_OMIT_MERGE_SORT
68949 pOut = &aMem[pOp->p2];
68950 u.bk.pC = p->apCsr[pOp->p1];
68951 assert( u.bk.pC->isSorter );
68952 rc = sqlite3VdbeSorterRowkey(u.bk.pC, pOut);
68953 #else
68954 pOp->opcode = OP_RowKey;
68955 pc--;
68956 #endif
68957 break;
68960 /* Opcode: RowData P1 P2 * * *
68962 ** Write into register P2 the complete row data for cursor P1.
68963 ** There is no interpretation of the data.
68964 ** It is just copied onto the P2 register exactly as
68965 ** it is found in the database file.
68967 ** If the P1 cursor must be pointing to a valid row (not a NULL row)
68968 ** of a real table, not a pseudo-table.
68970 /* Opcode: RowKey P1 P2 * * *
68972 ** Write into register P2 the complete row key for cursor P1.
68973 ** There is no interpretation of the data.
68974 ** The key is copied onto the P3 register exactly as
68975 ** it is found in the database file.
68977 ** If the P1 cursor must be pointing to a valid row (not a NULL row)
68978 ** of a real table, not a pseudo-table.
68980 case OP_RowKey:
68981 case OP_RowData: {
68982 #if 0 /* local variables moved into u.bl */
68983 VdbeCursor *pC;
68984 BtCursor *pCrsr;
68985 u32 n;
68986 i64 n64;
68987 #endif /* local variables moved into u.bl */
68989 pOut = &aMem[pOp->p2];
68990 memAboutToChange(p, pOut);
68992 /* Note that RowKey and RowData are really exactly the same instruction */
68993 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
68994 u.bl.pC = p->apCsr[pOp->p1];
68995 assert( u.bl.pC->isSorter==0 );
68996 assert( u.bl.pC->isTable || pOp->opcode!=OP_RowData );
68997 assert( u.bl.pC->isIndex || pOp->opcode==OP_RowData );
68998 assert( u.bl.pC!=0 );
68999 assert( u.bl.pC->nullRow==0 );
69000 assert( u.bl.pC->pseudoTableReg==0 );
69001 assert( !u.bl.pC->isSorter );
69002 assert( u.bl.pC->pCursor!=0 );
69003 u.bl.pCrsr = u.bl.pC->pCursor;
69004 assert( sqlite3BtreeCursorIsValid(u.bl.pCrsr) );
69006 /* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or
69007 ** OP_Rewind/Op_Next with no intervening instructions that might invalidate
69008 ** the cursor. Hence the following sqlite3VdbeCursorMoveto() call is always
69009 ** a no-op and can never fail. But we leave it in place as a safety.
69011 assert( u.bl.pC->deferredMoveto==0 );
69012 rc = sqlite3VdbeCursorMoveto(u.bl.pC);
69013 if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
69015 if( u.bl.pC->isIndex ){
69016 assert( !u.bl.pC->isTable );
69017 VVA_ONLY(rc =) sqlite3BtreeKeySize(u.bl.pCrsr, &u.bl.n64);
69018 assert( rc==SQLITE_OK ); /* True because of CursorMoveto() call above */
69019 if( u.bl.n64>db->aLimit[SQLITE_LIMIT_LENGTH] ){
69020 goto too_big;
69022 u.bl.n = (u32)u.bl.n64;
69023 }else{
69024 VVA_ONLY(rc =) sqlite3BtreeDataSize(u.bl.pCrsr, &u.bl.n);
69025 assert( rc==SQLITE_OK ); /* DataSize() cannot fail */
69026 if( u.bl.n>(u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
69027 goto too_big;
69030 if( sqlite3VdbeMemGrow(pOut, u.bl.n, 0) ){
69031 goto no_mem;
69033 pOut->n = u.bl.n;
69034 MemSetTypeFlag(pOut, MEM_Blob);
69035 if( u.bl.pC->isIndex ){
69036 rc = sqlite3BtreeKey(u.bl.pCrsr, 0, u.bl.n, pOut->z);
69037 }else{
69038 rc = sqlite3BtreeData(u.bl.pCrsr, 0, u.bl.n, pOut->z);
69040 pOut->enc = SQLITE_UTF8; /* In case the blob is ever cast to text */
69041 UPDATE_MAX_BLOBSIZE(pOut);
69042 break;
69045 /* Opcode: Rowid P1 P2 * * *
69047 ** Store in register P2 an integer which is the key of the table entry that
69048 ** P1 is currently point to.
69050 ** P1 can be either an ordinary table or a virtual table. There used to
69051 ** be a separate OP_VRowid opcode for use with virtual tables, but this
69052 ** one opcode now works for both table types.
69054 case OP_Rowid: { /* out2-prerelease */
69055 #if 0 /* local variables moved into u.bm */
69056 VdbeCursor *pC;
69057 i64 v;
69058 sqlite3_vtab *pVtab;
69059 const sqlite3_module *pModule;
69060 #endif /* local variables moved into u.bm */
69062 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69063 u.bm.pC = p->apCsr[pOp->p1];
69064 assert( u.bm.pC!=0 );
69065 assert( u.bm.pC->pseudoTableReg==0 );
69066 if( u.bm.pC->nullRow ){
69067 pOut->flags = MEM_Null;
69068 break;
69069 }else if( u.bm.pC->deferredMoveto ){
69070 u.bm.v = u.bm.pC->movetoTarget;
69071 #ifndef SQLITE_OMIT_VIRTUALTABLE
69072 }else if( u.bm.pC->pVtabCursor ){
69073 u.bm.pVtab = u.bm.pC->pVtabCursor->pVtab;
69074 u.bm.pModule = u.bm.pVtab->pModule;
69075 assert( u.bm.pModule->xRowid );
69076 rc = u.bm.pModule->xRowid(u.bm.pC->pVtabCursor, &u.bm.v);
69077 importVtabErrMsg(p, u.bm.pVtab);
69078 #endif /* SQLITE_OMIT_VIRTUALTABLE */
69079 }else{
69080 assert( u.bm.pC->pCursor!=0 );
69081 rc = sqlite3VdbeCursorMoveto(u.bm.pC);
69082 if( rc ) goto abort_due_to_error;
69083 if( u.bm.pC->rowidIsValid ){
69084 u.bm.v = u.bm.pC->lastRowid;
69085 }else{
69086 rc = sqlite3BtreeKeySize(u.bm.pC->pCursor, &u.bm.v);
69087 assert( rc==SQLITE_OK ); /* Always so because of CursorMoveto() above */
69090 pOut->u.i = u.bm.v;
69091 break;
69094 /* Opcode: NullRow P1 * * * *
69096 ** Move the cursor P1 to a null row. Any OP_Column operations
69097 ** that occur while the cursor is on the null row will always
69098 ** write a NULL.
69100 case OP_NullRow: {
69101 #if 0 /* local variables moved into u.bn */
69102 VdbeCursor *pC;
69103 #endif /* local variables moved into u.bn */
69105 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69106 u.bn.pC = p->apCsr[pOp->p1];
69107 assert( u.bn.pC!=0 );
69108 u.bn.pC->nullRow = 1;
69109 u.bn.pC->rowidIsValid = 0;
69110 assert( u.bn.pC->pCursor || u.bn.pC->pVtabCursor );
69111 if( u.bn.pC->pCursor ){
69112 sqlite3BtreeClearCursor(u.bn.pC->pCursor);
69114 break;
69117 /* Opcode: Last P1 P2 * * *
69119 ** The next use of the Rowid or Column or Next instruction for P1
69120 ** will refer to the last entry in the database table or index.
69121 ** If the table or index is empty and P2>0, then jump immediately to P2.
69122 ** If P2 is 0 or if the table or index is not empty, fall through
69123 ** to the following instruction.
69125 case OP_Last: { /* jump */
69126 #if 0 /* local variables moved into u.bo */
69127 VdbeCursor *pC;
69128 BtCursor *pCrsr;
69129 int res;
69130 #endif /* local variables moved into u.bo */
69132 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69133 u.bo.pC = p->apCsr[pOp->p1];
69134 assert( u.bo.pC!=0 );
69135 u.bo.pCrsr = u.bo.pC->pCursor;
69136 u.bo.res = 0;
69137 if( ALWAYS(u.bo.pCrsr!=0) ){
69138 rc = sqlite3BtreeLast(u.bo.pCrsr, &u.bo.res);
69140 u.bo.pC->nullRow = (u8)u.bo.res;
69141 u.bo.pC->deferredMoveto = 0;
69142 u.bo.pC->rowidIsValid = 0;
69143 u.bo.pC->cacheStatus = CACHE_STALE;
69144 if( pOp->p2>0 && u.bo.res ){
69145 pc = pOp->p2 - 1;
69147 break;
69151 /* Opcode: Sort P1 P2 * * *
69153 ** This opcode does exactly the same thing as OP_Rewind except that
69154 ** it increments an undocumented global variable used for testing.
69156 ** Sorting is accomplished by writing records into a sorting index,
69157 ** then rewinding that index and playing it back from beginning to
69158 ** end. We use the OP_Sort opcode instead of OP_Rewind to do the
69159 ** rewinding so that the global variable will be incremented and
69160 ** regression tests can determine whether or not the optimizer is
69161 ** correctly optimizing out sorts.
69163 case OP_SorterSort: /* jump */
69164 #ifdef SQLITE_OMIT_MERGE_SORT
69165 pOp->opcode = OP_Sort;
69166 #endif
69167 case OP_Sort: { /* jump */
69168 #ifdef SQLITE_TEST
69169 sqlite3_sort_count++;
69170 sqlite3_search_count--;
69171 #endif
69172 p->aCounter[SQLITE_STMTSTATUS_SORT-1]++;
69173 /* Fall through into OP_Rewind */
69175 /* Opcode: Rewind P1 P2 * * *
69177 ** The next use of the Rowid or Column or Next instruction for P1
69178 ** will refer to the first entry in the database table or index.
69179 ** If the table or index is empty and P2>0, then jump immediately to P2.
69180 ** If P2 is 0 or if the table or index is not empty, fall through
69181 ** to the following instruction.
69183 case OP_Rewind: { /* jump */
69184 #if 0 /* local variables moved into u.bp */
69185 VdbeCursor *pC;
69186 BtCursor *pCrsr;
69187 int res;
69188 #endif /* local variables moved into u.bp */
69190 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69191 u.bp.pC = p->apCsr[pOp->p1];
69192 assert( u.bp.pC!=0 );
69193 assert( u.bp.pC->isSorter==(pOp->opcode==OP_SorterSort) );
69194 u.bp.res = 1;
69195 if( isSorter(u.bp.pC) ){
69196 rc = sqlite3VdbeSorterRewind(db, u.bp.pC, &u.bp.res);
69197 }else{
69198 u.bp.pCrsr = u.bp.pC->pCursor;
69199 assert( u.bp.pCrsr );
69200 rc = sqlite3BtreeFirst(u.bp.pCrsr, &u.bp.res);
69201 u.bp.pC->atFirst = u.bp.res==0 ?1:0;
69202 u.bp.pC->deferredMoveto = 0;
69203 u.bp.pC->cacheStatus = CACHE_STALE;
69204 u.bp.pC->rowidIsValid = 0;
69206 u.bp.pC->nullRow = (u8)u.bp.res;
69207 assert( pOp->p2>0 && pOp->p2<p->nOp );
69208 if( u.bp.res ){
69209 pc = pOp->p2 - 1;
69211 break;
69214 /* Opcode: Next P1 P2 * P4 P5
69216 ** Advance cursor P1 so that it points to the next key/data pair in its
69217 ** table or index. If there are no more key/value pairs then fall through
69218 ** to the following instruction. But if the cursor advance was successful,
69219 ** jump immediately to P2.
69221 ** The P1 cursor must be for a real table, not a pseudo-table.
69223 ** P4 is always of type P4_ADVANCE. The function pointer points to
69224 ** sqlite3BtreeNext().
69226 ** If P5 is positive and the jump is taken, then event counter
69227 ** number P5-1 in the prepared statement is incremented.
69229 ** See also: Prev
69231 /* Opcode: Prev P1 P2 * * P5
69233 ** Back up cursor P1 so that it points to the previous key/data pair in its
69234 ** table or index. If there is no previous key/value pairs then fall through
69235 ** to the following instruction. But if the cursor backup was successful,
69236 ** jump immediately to P2.
69238 ** The P1 cursor must be for a real table, not a pseudo-table.
69240 ** P4 is always of type P4_ADVANCE. The function pointer points to
69241 ** sqlite3BtreePrevious().
69243 ** If P5 is positive and the jump is taken, then event counter
69244 ** number P5-1 in the prepared statement is incremented.
69246 case OP_SorterNext: /* jump */
69247 #ifdef SQLITE_OMIT_MERGE_SORT
69248 pOp->opcode = OP_Next;
69249 #endif
69250 case OP_Prev: /* jump */
69251 case OP_Next: { /* jump */
69252 #if 0 /* local variables moved into u.bq */
69253 VdbeCursor *pC;
69254 int res;
69255 #endif /* local variables moved into u.bq */
69257 CHECK_FOR_INTERRUPT;
69258 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69259 assert( pOp->p5<=ArraySize(p->aCounter) );
69260 u.bq.pC = p->apCsr[pOp->p1];
69261 if( u.bq.pC==0 ){
69262 break; /* See ticket #2273 */
69264 assert( u.bq.pC->isSorter==(pOp->opcode==OP_SorterNext) );
69265 if( isSorter(u.bq.pC) ){
69266 assert( pOp->opcode==OP_SorterNext );
69267 rc = sqlite3VdbeSorterNext(db, u.bq.pC, &u.bq.res);
69268 }else{
69269 u.bq.res = 1;
69270 assert( u.bq.pC->deferredMoveto==0 );
69271 assert( u.bq.pC->pCursor );
69272 assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext );
69273 assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious );
69274 rc = pOp->p4.xAdvance(u.bq.pC->pCursor, &u.bq.res);
69276 u.bq.pC->nullRow = (u8)u.bq.res;
69277 u.bq.pC->cacheStatus = CACHE_STALE;
69278 if( u.bq.res==0 ){
69279 pc = pOp->p2 - 1;
69280 if( pOp->p5 ) p->aCounter[pOp->p5-1]++;
69281 #ifdef SQLITE_TEST
69282 sqlite3_search_count++;
69283 #endif
69285 u.bq.pC->rowidIsValid = 0;
69286 break;
69289 /* Opcode: IdxInsert P1 P2 P3 * P5
69291 ** Register P2 holds an SQL index key made using the
69292 ** MakeRecord instructions. This opcode writes that key
69293 ** into the index P1. Data for the entry is nil.
69295 ** P3 is a flag that provides a hint to the b-tree layer that this
69296 ** insert is likely to be an append.
69298 ** This instruction only works for indices. The equivalent instruction
69299 ** for tables is OP_Insert.
69301 case OP_SorterInsert: /* in2 */
69302 #ifdef SQLITE_OMIT_MERGE_SORT
69303 pOp->opcode = OP_IdxInsert;
69304 #endif
69305 case OP_IdxInsert: { /* in2 */
69306 #if 0 /* local variables moved into u.br */
69307 VdbeCursor *pC;
69308 BtCursor *pCrsr;
69309 int nKey;
69310 const char *zKey;
69311 #endif /* local variables moved into u.br */
69313 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69314 u.br.pC = p->apCsr[pOp->p1];
69315 assert( u.br.pC!=0 );
69316 assert( u.br.pC->isSorter==(pOp->opcode==OP_SorterInsert) );
69317 pIn2 = &aMem[pOp->p2];
69318 assert( pIn2->flags & MEM_Blob );
69319 u.br.pCrsr = u.br.pC->pCursor;
69320 if( ALWAYS(u.br.pCrsr!=0) ){
69321 assert( u.br.pC->isTable==0 );
69322 rc = ExpandBlob(pIn2);
69323 if( rc==SQLITE_OK ){
69324 if( isSorter(u.br.pC) ){
69325 rc = sqlite3VdbeSorterWrite(db, u.br.pC, pIn2);
69326 }else{
69327 u.br.nKey = pIn2->n;
69328 u.br.zKey = pIn2->z;
69329 rc = sqlite3BtreeInsert(u.br.pCrsr, u.br.zKey, u.br.nKey, "", 0, 0, pOp->p3,
69330 ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.br.pC->seekResult : 0)
69332 assert( u.br.pC->deferredMoveto==0 );
69333 u.br.pC->cacheStatus = CACHE_STALE;
69337 break;
69340 /* Opcode: IdxDelete P1 P2 P3 * *
69342 ** The content of P3 registers starting at register P2 form
69343 ** an unpacked index key. This opcode removes that entry from the
69344 ** index opened by cursor P1.
69346 case OP_IdxDelete: {
69347 #if 0 /* local variables moved into u.bs */
69348 VdbeCursor *pC;
69349 BtCursor *pCrsr;
69350 int res;
69351 UnpackedRecord r;
69352 #endif /* local variables moved into u.bs */
69354 assert( pOp->p3>0 );
69355 assert( pOp->p2>0 && pOp->p2+pOp->p3<=p->nMem+1 );
69356 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69357 u.bs.pC = p->apCsr[pOp->p1];
69358 assert( u.bs.pC!=0 );
69359 u.bs.pCrsr = u.bs.pC->pCursor;
69360 if( ALWAYS(u.bs.pCrsr!=0) ){
69361 u.bs.r.pKeyInfo = u.bs.pC->pKeyInfo;
69362 u.bs.r.nField = (u16)pOp->p3;
69363 u.bs.r.flags = 0;
69364 u.bs.r.aMem = &aMem[pOp->p2];
69365 #ifdef SQLITE_DEBUG
69366 { int i; for(i=0; i<u.bs.r.nField; i++) assert( memIsValid(&u.bs.r.aMem[i]) ); }
69367 #endif
69368 rc = sqlite3BtreeMovetoUnpacked(u.bs.pCrsr, &u.bs.r, 0, 0, &u.bs.res);
69369 if( rc==SQLITE_OK && u.bs.res==0 ){
69370 rc = sqlite3BtreeDelete(u.bs.pCrsr);
69372 assert( u.bs.pC->deferredMoveto==0 );
69373 u.bs.pC->cacheStatus = CACHE_STALE;
69375 break;
69378 /* Opcode: IdxRowid P1 P2 * * *
69380 ** Write into register P2 an integer which is the last entry in the record at
69381 ** the end of the index key pointed to by cursor P1. This integer should be
69382 ** the rowid of the table entry to which this index entry points.
69384 ** See also: Rowid, MakeRecord.
69386 case OP_IdxRowid: { /* out2-prerelease */
69387 #if 0 /* local variables moved into u.bt */
69388 BtCursor *pCrsr;
69389 VdbeCursor *pC;
69390 i64 rowid;
69391 #endif /* local variables moved into u.bt */
69393 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69394 u.bt.pC = p->apCsr[pOp->p1];
69395 assert( u.bt.pC!=0 );
69396 u.bt.pCrsr = u.bt.pC->pCursor;
69397 pOut->flags = MEM_Null;
69398 if( ALWAYS(u.bt.pCrsr!=0) ){
69399 rc = sqlite3VdbeCursorMoveto(u.bt.pC);
69400 if( NEVER(rc) ) goto abort_due_to_error;
69401 assert( u.bt.pC->deferredMoveto==0 );
69402 assert( u.bt.pC->isTable==0 );
69403 if( !u.bt.pC->nullRow ){
69404 rc = sqlite3VdbeIdxRowid(db, u.bt.pCrsr, &u.bt.rowid);
69405 if( rc!=SQLITE_OK ){
69406 goto abort_due_to_error;
69408 pOut->u.i = u.bt.rowid;
69409 pOut->flags = MEM_Int;
69412 break;
69415 /* Opcode: IdxGE P1 P2 P3 P4 P5
69417 ** The P4 register values beginning with P3 form an unpacked index
69418 ** key that omits the ROWID. Compare this key value against the index
69419 ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
69421 ** If the P1 index entry is greater than or equal to the key value
69422 ** then jump to P2. Otherwise fall through to the next instruction.
69424 ** If P5 is non-zero then the key value is increased by an epsilon
69425 ** prior to the comparison. This make the opcode work like IdxGT except
69426 ** that if the key from register P3 is a prefix of the key in the cursor,
69427 ** the result is false whereas it would be true with IdxGT.
69429 /* Opcode: IdxLT P1 P2 P3 P4 P5
69431 ** The P4 register values beginning with P3 form an unpacked index
69432 ** key that omits the ROWID. Compare this key value against the index
69433 ** that P1 is currently pointing to, ignoring the ROWID on the P1 index.
69435 ** If the P1 index entry is less than the key value then jump to P2.
69436 ** Otherwise fall through to the next instruction.
69438 ** If P5 is non-zero then the key value is increased by an epsilon prior
69439 ** to the comparison. This makes the opcode work like IdxLE.
69441 case OP_IdxLT: /* jump */
69442 case OP_IdxGE: { /* jump */
69443 #if 0 /* local variables moved into u.bu */
69444 VdbeCursor *pC;
69445 int res;
69446 UnpackedRecord r;
69447 #endif /* local variables moved into u.bu */
69449 assert( pOp->p1>=0 && pOp->p1<p->nCursor );
69450 u.bu.pC = p->apCsr[pOp->p1];
69451 assert( u.bu.pC!=0 );
69452 assert( u.bu.pC->isOrdered );
69453 if( ALWAYS(u.bu.pC->pCursor!=0) ){
69454 assert( u.bu.pC->deferredMoveto==0 );
69455 assert( pOp->p5==0 || pOp->p5==1 );
69456 assert( pOp->p4type==P4_INT32 );
69457 u.bu.r.pKeyInfo = u.bu.pC->pKeyInfo;
69458 u.bu.r.nField = (u16)pOp->p4.i;
69459 if( pOp->p5 ){
69460 u.bu.r.flags = UNPACKED_INCRKEY | UNPACKED_PREFIX_MATCH;
69461 }else{
69462 u.bu.r.flags = UNPACKED_PREFIX_MATCH;
69464 u.bu.r.aMem = &aMem[pOp->p3];
69465 #ifdef SQLITE_DEBUG
69466 { int i; for(i=0; i<u.bu.r.nField; i++) assert( memIsValid(&u.bu.r.aMem[i]) ); }
69467 #endif
69468 rc = sqlite3VdbeIdxKeyCompare(u.bu.pC, &u.bu.r, &u.bu.res);
69469 if( pOp->opcode==OP_IdxLT ){
69470 u.bu.res = -u.bu.res;
69471 }else{
69472 assert( pOp->opcode==OP_IdxGE );
69473 u.bu.res++;
69475 if( u.bu.res>0 ){
69476 pc = pOp->p2 - 1 ;
69479 break;
69482 /* Opcode: Destroy P1 P2 P3 * *
69484 ** Delete an entire database table or index whose root page in the database
69485 ** file is given by P1.
69487 ** The table being destroyed is in the main database file if P3==0. If
69488 ** P3==1 then the table to be clear is in the auxiliary database file
69489 ** that is used to store tables create using CREATE TEMPORARY TABLE.
69491 ** If AUTOVACUUM is enabled then it is possible that another root page
69492 ** might be moved into the newly deleted root page in order to keep all
69493 ** root pages contiguous at the beginning of the database. The former
69494 ** value of the root page that moved - its value before the move occurred -
69495 ** is stored in register P2. If no page
69496 ** movement was required (because the table being dropped was already
69497 ** the last one in the database) then a zero is stored in register P2.
69498 ** If AUTOVACUUM is disabled then a zero is stored in register P2.
69500 ** See also: Clear
69502 case OP_Destroy: { /* out2-prerelease */
69503 #if 0 /* local variables moved into u.bv */
69504 int iMoved;
69505 int iCnt;
69506 Vdbe *pVdbe;
69507 int iDb;
69508 #endif /* local variables moved into u.bv */
69509 #ifndef SQLITE_OMIT_VIRTUALTABLE
69510 u.bv.iCnt = 0;
69511 for(u.bv.pVdbe=db->pVdbe; u.bv.pVdbe; u.bv.pVdbe = u.bv.pVdbe->pNext){
69512 if( u.bv.pVdbe->magic==VDBE_MAGIC_RUN && u.bv.pVdbe->inVtabMethod<2 && u.bv.pVdbe->pc>=0 ){
69513 u.bv.iCnt++;
69516 #else
69517 u.bv.iCnt = db->activeVdbeCnt;
69518 #endif
69519 pOut->flags = MEM_Null;
69520 if( u.bv.iCnt>1 ){
69521 rc = SQLITE_LOCKED;
69522 p->errorAction = OE_Abort;
69523 }else{
69524 u.bv.iDb = pOp->p3;
69525 assert( u.bv.iCnt==1 );
69526 assert( (p->btreeMask & (((yDbMask)1)<<u.bv.iDb))!=0 );
69527 rc = sqlite3BtreeDropTable(db->aDb[u.bv.iDb].pBt, pOp->p1, &u.bv.iMoved);
69528 pOut->flags = MEM_Int;
69529 pOut->u.i = u.bv.iMoved;
69530 #ifndef SQLITE_OMIT_AUTOVACUUM
69531 if( rc==SQLITE_OK && u.bv.iMoved!=0 ){
69532 sqlite3RootPageMoved(db, u.bv.iDb, u.bv.iMoved, pOp->p1);
69533 /* All OP_Destroy operations occur on the same btree */
69534 assert( resetSchemaOnFault==0 || resetSchemaOnFault==u.bv.iDb+1 );
69535 resetSchemaOnFault = u.bv.iDb+1;
69537 #endif
69539 break;
69542 /* Opcode: Clear P1 P2 P3
69544 ** Delete all contents of the database table or index whose root page
69545 ** in the database file is given by P1. But, unlike Destroy, do not
69546 ** remove the table or index from the database file.
69548 ** The table being clear is in the main database file if P2==0. If
69549 ** P2==1 then the table to be clear is in the auxiliary database file
69550 ** that is used to store tables create using CREATE TEMPORARY TABLE.
69552 ** If the P3 value is non-zero, then the table referred to must be an
69553 ** intkey table (an SQL table, not an index). In this case the row change
69554 ** count is incremented by the number of rows in the table being cleared.
69555 ** If P3 is greater than zero, then the value stored in register P3 is
69556 ** also incremented by the number of rows in the table being cleared.
69558 ** See also: Destroy
69560 case OP_Clear: {
69561 #if 0 /* local variables moved into u.bw */
69562 int nChange;
69563 #endif /* local variables moved into u.bw */
69565 u.bw.nChange = 0;
69566 assert( (p->btreeMask & (((yDbMask)1)<<pOp->p2))!=0 );
69567 rc = sqlite3BtreeClearTable(
69568 db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bw.nChange : 0)
69570 if( pOp->p3 ){
69571 p->nChange += u.bw.nChange;
69572 if( pOp->p3>0 ){
69573 assert( memIsValid(&aMem[pOp->p3]) );
69574 memAboutToChange(p, &aMem[pOp->p3]);
69575 aMem[pOp->p3].u.i += u.bw.nChange;
69578 break;
69581 /* Opcode: CreateTable P1 P2 * * *
69583 ** Allocate a new table in the main database file if P1==0 or in the
69584 ** auxiliary database file if P1==1 or in an attached database if
69585 ** P1>1. Write the root page number of the new table into
69586 ** register P2
69588 ** The difference between a table and an index is this: A table must
69589 ** have a 4-byte integer key and can have arbitrary data. An index
69590 ** has an arbitrary key but no data.
69592 ** See also: CreateIndex
69594 /* Opcode: CreateIndex P1 P2 * * *
69596 ** Allocate a new index in the main database file if P1==0 or in the
69597 ** auxiliary database file if P1==1 or in an attached database if
69598 ** P1>1. Write the root page number of the new table into
69599 ** register P2.
69601 ** See documentation on OP_CreateTable for additional information.
69603 case OP_CreateIndex: /* out2-prerelease */
69604 case OP_CreateTable: { /* out2-prerelease */
69605 #if 0 /* local variables moved into u.bx */
69606 int pgno;
69607 int flags;
69608 Db *pDb;
69609 #endif /* local variables moved into u.bx */
69611 u.bx.pgno = 0;
69612 assert( pOp->p1>=0 && pOp->p1<db->nDb );
69613 assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
69614 u.bx.pDb = &db->aDb[pOp->p1];
69615 assert( u.bx.pDb->pBt!=0 );
69616 if( pOp->opcode==OP_CreateTable ){
69617 /* u.bx.flags = BTREE_INTKEY; */
69618 u.bx.flags = BTREE_INTKEY;
69619 }else{
69620 u.bx.flags = BTREE_BLOBKEY;
69622 rc = sqlite3BtreeCreateTable(u.bx.pDb->pBt, &u.bx.pgno, u.bx.flags);
69623 pOut->u.i = u.bx.pgno;
69624 break;
69627 /* Opcode: ParseSchema P1 * * P4 *
69629 ** Read and parse all entries from the SQLITE_MASTER table of database P1
69630 ** that match the WHERE clause P4.
69632 ** This opcode invokes the parser to create a new virtual machine,
69633 ** then runs the new virtual machine. It is thus a re-entrant opcode.
69635 case OP_ParseSchema: {
69636 #if 0 /* local variables moved into u.by */
69637 int iDb;
69638 const char *zMaster;
69639 char *zSql;
69640 InitData initData;
69641 #endif /* local variables moved into u.by */
69643 /* Any prepared statement that invokes this opcode will hold mutexes
69644 ** on every btree. This is a prerequisite for invoking
69645 ** sqlite3InitCallback().
69647 #ifdef SQLITE_DEBUG
69648 for(u.by.iDb=0; u.by.iDb<db->nDb; u.by.iDb++){
69649 assert( u.by.iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[u.by.iDb].pBt) );
69651 #endif
69653 u.by.iDb = pOp->p1;
69654 assert( u.by.iDb>=0 && u.by.iDb<db->nDb );
69655 assert( DbHasProperty(db, u.by.iDb, DB_SchemaLoaded) );
69656 /* Used to be a conditional */ {
69657 u.by.zMaster = SCHEMA_TABLE(u.by.iDb);
69658 u.by.initData.db = db;
69659 u.by.initData.iDb = pOp->p1;
69660 u.by.initData.pzErrMsg = &p->zErrMsg;
69661 u.by.zSql = sqlite3MPrintf(db,
69662 "SELECT name, rootpage, sql FROM '%q'.%s WHERE %s ORDER BY rowid",
69663 db->aDb[u.by.iDb].zName, u.by.zMaster, pOp->p4.z);
69664 if( u.by.zSql==0 ){
69665 rc = SQLITE_NOMEM;
69666 }else{
69667 assert( db->init.busy==0 );
69668 db->init.busy = 1;
69669 u.by.initData.rc = SQLITE_OK;
69670 assert( !db->mallocFailed );
69671 rc = sqlite3_exec(db, u.by.zSql, sqlite3InitCallback, &u.by.initData, 0);
69672 if( rc==SQLITE_OK ) rc = u.by.initData.rc;
69673 sqlite3DbFree(db, u.by.zSql);
69674 db->init.busy = 0;
69677 if( rc==SQLITE_NOMEM ){
69678 goto no_mem;
69680 break;
69683 #if !defined(SQLITE_OMIT_ANALYZE)
69684 /* Opcode: LoadAnalysis P1 * * * *
69686 ** Read the sqlite_stat1 table for database P1 and load the content
69687 ** of that table into the internal index hash table. This will cause
69688 ** the analysis to be used when preparing all subsequent queries.
69690 case OP_LoadAnalysis: {
69691 assert( pOp->p1>=0 && pOp->p1<db->nDb );
69692 rc = sqlite3AnalysisLoad(db, pOp->p1);
69693 break;
69695 #endif /* !defined(SQLITE_OMIT_ANALYZE) */
69697 /* Opcode: DropTable P1 * * P4 *
69699 ** Remove the internal (in-memory) data structures that describe
69700 ** the table named P4 in database P1. This is called after a table
69701 ** is dropped in order to keep the internal representation of the
69702 ** schema consistent with what is on disk.
69704 case OP_DropTable: {
69705 sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z);
69706 break;
69709 /* Opcode: DropIndex P1 * * P4 *
69711 ** Remove the internal (in-memory) data structures that describe
69712 ** the index named P4 in database P1. This is called after an index
69713 ** is dropped in order to keep the internal representation of the
69714 ** schema consistent with what is on disk.
69716 case OP_DropIndex: {
69717 sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z);
69718 break;
69721 /* Opcode: DropTrigger P1 * * P4 *
69723 ** Remove the internal (in-memory) data structures that describe
69724 ** the trigger named P4 in database P1. This is called after a trigger
69725 ** is dropped in order to keep the internal representation of the
69726 ** schema consistent with what is on disk.
69728 case OP_DropTrigger: {
69729 sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z);
69730 break;
69734 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
69735 /* Opcode: IntegrityCk P1 P2 P3 * P5
69737 ** Do an analysis of the currently open database. Store in
69738 ** register P1 the text of an error message describing any problems.
69739 ** If no problems are found, store a NULL in register P1.
69741 ** The register P3 contains the maximum number of allowed errors.
69742 ** At most reg(P3) errors will be reported.
69743 ** In other words, the analysis stops as soon as reg(P1) errors are
69744 ** seen. Reg(P1) is updated with the number of errors remaining.
69746 ** The root page numbers of all tables in the database are integer
69747 ** stored in reg(P1), reg(P1+1), reg(P1+2), .... There are P2 tables
69748 ** total.
69750 ** If P5 is not zero, the check is done on the auxiliary database
69751 ** file, not the main database file.
69753 ** This opcode is used to implement the integrity_check pragma.
69755 case OP_IntegrityCk: {
69756 #if 0 /* local variables moved into u.bz */
69757 int nRoot; /* Number of tables to check. (Number of root pages.) */
69758 int *aRoot; /* Array of rootpage numbers for tables to be checked */
69759 int j; /* Loop counter */
69760 int nErr; /* Number of errors reported */
69761 char *z; /* Text of the error report */
69762 Mem *pnErr; /* Register keeping track of errors remaining */
69763 #endif /* local variables moved into u.bz */
69765 u.bz.nRoot = pOp->p2;
69766 assert( u.bz.nRoot>0 );
69767 u.bz.aRoot = sqlite3DbMallocRaw(db, sizeof(int)*(u.bz.nRoot+1) );
69768 if( u.bz.aRoot==0 ) goto no_mem;
69769 assert( pOp->p3>0 && pOp->p3<=p->nMem );
69770 u.bz.pnErr = &aMem[pOp->p3];
69771 assert( (u.bz.pnErr->flags & MEM_Int)!=0 );
69772 assert( (u.bz.pnErr->flags & (MEM_Str|MEM_Blob))==0 );
69773 pIn1 = &aMem[pOp->p1];
69774 for(u.bz.j=0; u.bz.j<u.bz.nRoot; u.bz.j++){
69775 u.bz.aRoot[u.bz.j] = (int)sqlite3VdbeIntValue(&pIn1[u.bz.j]);
69777 u.bz.aRoot[u.bz.j] = 0;
69778 assert( pOp->p5<db->nDb );
69779 assert( (p->btreeMask & (((yDbMask)1)<<pOp->p5))!=0 );
69780 u.bz.z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, u.bz.aRoot, u.bz.nRoot,
69781 (int)u.bz.pnErr->u.i, &u.bz.nErr);
69782 sqlite3DbFree(db, u.bz.aRoot);
69783 u.bz.pnErr->u.i -= u.bz.nErr;
69784 sqlite3VdbeMemSetNull(pIn1);
69785 if( u.bz.nErr==0 ){
69786 assert( u.bz.z==0 );
69787 }else if( u.bz.z==0 ){
69788 goto no_mem;
69789 }else{
69790 sqlite3VdbeMemSetStr(pIn1, u.bz.z, -1, SQLITE_UTF8, sqlite3_free);
69792 UPDATE_MAX_BLOBSIZE(pIn1);
69793 sqlite3VdbeChangeEncoding(pIn1, encoding);
69794 break;
69796 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
69798 /* Opcode: RowSetAdd P1 P2 * * *
69800 ** Insert the integer value held by register P2 into a boolean index
69801 ** held in register P1.
69803 ** An assertion fails if P2 is not an integer.
69805 case OP_RowSetAdd: { /* in1, in2 */
69806 pIn1 = &aMem[pOp->p1];
69807 pIn2 = &aMem[pOp->p2];
69808 assert( (pIn2->flags & MEM_Int)!=0 );
69809 if( (pIn1->flags & MEM_RowSet)==0 ){
69810 sqlite3VdbeMemSetRowSet(pIn1);
69811 if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
69813 sqlite3RowSetInsert(pIn1->u.pRowSet, pIn2->u.i);
69814 break;
69817 /* Opcode: RowSetRead P1 P2 P3 * *
69819 ** Extract the smallest value from boolean index P1 and put that value into
69820 ** register P3. Or, if boolean index P1 is initially empty, leave P3
69821 ** unchanged and jump to instruction P2.
69823 case OP_RowSetRead: { /* jump, in1, out3 */
69824 #if 0 /* local variables moved into u.ca */
69825 i64 val;
69826 #endif /* local variables moved into u.ca */
69827 CHECK_FOR_INTERRUPT;
69828 pIn1 = &aMem[pOp->p1];
69829 if( (pIn1->flags & MEM_RowSet)==0
69830 || sqlite3RowSetNext(pIn1->u.pRowSet, &u.ca.val)==0
69832 /* The boolean index is empty */
69833 sqlite3VdbeMemSetNull(pIn1);
69834 pc = pOp->p2 - 1;
69835 }else{
69836 /* A value was pulled from the index */
69837 sqlite3VdbeMemSetInt64(&aMem[pOp->p3], u.ca.val);
69839 break;
69842 /* Opcode: RowSetTest P1 P2 P3 P4
69844 ** Register P3 is assumed to hold a 64-bit integer value. If register P1
69845 ** contains a RowSet object and that RowSet object contains
69846 ** the value held in P3, jump to register P2. Otherwise, insert the
69847 ** integer in P3 into the RowSet and continue on to the
69848 ** next opcode.
69850 ** The RowSet object is optimized for the case where successive sets
69851 ** of integers, where each set contains no duplicates. Each set
69852 ** of values is identified by a unique P4 value. The first set
69853 ** must have P4==0, the final set P4=-1. P4 must be either -1 or
69854 ** non-negative. For non-negative values of P4 only the lower 4
69855 ** bits are significant.
69857 ** This allows optimizations: (a) when P4==0 there is no need to test
69858 ** the rowset object for P3, as it is guaranteed not to contain it,
69859 ** (b) when P4==-1 there is no need to insert the value, as it will
69860 ** never be tested for, and (c) when a value that is part of set X is
69861 ** inserted, there is no need to search to see if the same value was
69862 ** previously inserted as part of set X (only if it was previously
69863 ** inserted as part of some other set).
69865 case OP_RowSetTest: { /* jump, in1, in3 */
69866 #if 0 /* local variables moved into u.cb */
69867 int iSet;
69868 int exists;
69869 #endif /* local variables moved into u.cb */
69871 pIn1 = &aMem[pOp->p1];
69872 pIn3 = &aMem[pOp->p3];
69873 u.cb.iSet = pOp->p4.i;
69874 assert( pIn3->flags&MEM_Int );
69876 /* If there is anything other than a rowset object in memory cell P1,
69877 ** delete it now and initialize P1 with an empty rowset
69879 if( (pIn1->flags & MEM_RowSet)==0 ){
69880 sqlite3VdbeMemSetRowSet(pIn1);
69881 if( (pIn1->flags & MEM_RowSet)==0 ) goto no_mem;
69884 assert( pOp->p4type==P4_INT32 );
69885 assert( u.cb.iSet==-1 || u.cb.iSet>=0 );
69886 if( u.cb.iSet ){
69887 u.cb.exists = sqlite3RowSetTest(pIn1->u.pRowSet,
69888 (u8)(u.cb.iSet>=0 ? u.cb.iSet & 0xf : 0xff),
69889 pIn3->u.i);
69890 if( u.cb.exists ){
69891 pc = pOp->p2 - 1;
69892 break;
69895 if( u.cb.iSet>=0 ){
69896 sqlite3RowSetInsert(pIn1->u.pRowSet, pIn3->u.i);
69898 break;
69902 #ifndef SQLITE_OMIT_TRIGGER
69904 /* Opcode: Program P1 P2 P3 P4 *
69906 ** Execute the trigger program passed as P4 (type P4_SUBPROGRAM).
69908 ** P1 contains the address of the memory cell that contains the first memory
69909 ** cell in an array of values used as arguments to the sub-program. P2
69910 ** contains the address to jump to if the sub-program throws an IGNORE
69911 ** exception using the RAISE() function. Register P3 contains the address
69912 ** of a memory cell in this (the parent) VM that is used to allocate the
69913 ** memory required by the sub-vdbe at runtime.
69915 ** P4 is a pointer to the VM containing the trigger program.
69917 case OP_Program: { /* jump */
69918 #if 0 /* local variables moved into u.cc */
69919 int nMem; /* Number of memory registers for sub-program */
69920 int nByte; /* Bytes of runtime space required for sub-program */
69921 Mem *pRt; /* Register to allocate runtime space */
69922 Mem *pMem; /* Used to iterate through memory cells */
69923 Mem *pEnd; /* Last memory cell in new array */
69924 VdbeFrame *pFrame; /* New vdbe frame to execute in */
69925 SubProgram *pProgram; /* Sub-program to execute */
69926 void *t; /* Token identifying trigger */
69927 #endif /* local variables moved into u.cc */
69929 u.cc.pProgram = pOp->p4.pProgram;
69930 u.cc.pRt = &aMem[pOp->p3];
69931 assert( u.cc.pProgram->nOp>0 );
69933 /* If the p5 flag is clear, then recursive invocation of triggers is
69934 ** disabled for backwards compatibility (p5 is set if this sub-program
69935 ** is really a trigger, not a foreign key action, and the flag set
69936 ** and cleared by the "PRAGMA recursive_triggers" command is clear).
69938 ** It is recursive invocation of triggers, at the SQL level, that is
69939 ** disabled. In some cases a single trigger may generate more than one
69940 ** SubProgram (if the trigger may be executed with more than one different
69941 ** ON CONFLICT algorithm). SubProgram structures associated with a
69942 ** single trigger all have the same value for the SubProgram.token
69943 ** variable. */
69944 if( pOp->p5 ){
69945 u.cc.t = u.cc.pProgram->token;
69946 for(u.cc.pFrame=p->pFrame; u.cc.pFrame && u.cc.pFrame->token!=u.cc.t; u.cc.pFrame=u.cc.pFrame->pParent);
69947 if( u.cc.pFrame ) break;
69950 if( p->nFrame>=db->aLimit[SQLITE_LIMIT_TRIGGER_DEPTH] ){
69951 rc = SQLITE_ERROR;
69952 sqlite3SetString(&p->zErrMsg, db, "too many levels of trigger recursion");
69953 break;
69956 /* Register u.cc.pRt is used to store the memory required to save the state
69957 ** of the current program, and the memory required at runtime to execute
69958 ** the trigger program. If this trigger has been fired before, then u.cc.pRt
69959 ** is already allocated. Otherwise, it must be initialized. */
69960 if( (u.cc.pRt->flags&MEM_Frame)==0 ){
69961 /* SubProgram.nMem is set to the number of memory cells used by the
69962 ** program stored in SubProgram.aOp. As well as these, one memory
69963 ** cell is required for each cursor used by the program. Set local
69964 ** variable u.cc.nMem (and later, VdbeFrame.nChildMem) to this value.
69966 u.cc.nMem = u.cc.pProgram->nMem + u.cc.pProgram->nCsr;
69967 u.cc.nByte = ROUND8(sizeof(VdbeFrame))
69968 + u.cc.nMem * sizeof(Mem)
69969 + u.cc.pProgram->nCsr * sizeof(VdbeCursor *)
69970 + u.cc.pProgram->nOnce * sizeof(u8);
69971 u.cc.pFrame = sqlite3DbMallocZero(db, u.cc.nByte);
69972 if( !u.cc.pFrame ){
69973 goto no_mem;
69975 sqlite3VdbeMemRelease(u.cc.pRt);
69976 u.cc.pRt->flags = MEM_Frame;
69977 u.cc.pRt->u.pFrame = u.cc.pFrame;
69979 u.cc.pFrame->v = p;
69980 u.cc.pFrame->nChildMem = u.cc.nMem;
69981 u.cc.pFrame->nChildCsr = u.cc.pProgram->nCsr;
69982 u.cc.pFrame->pc = pc;
69983 u.cc.pFrame->aMem = p->aMem;
69984 u.cc.pFrame->nMem = p->nMem;
69985 u.cc.pFrame->apCsr = p->apCsr;
69986 u.cc.pFrame->nCursor = p->nCursor;
69987 u.cc.pFrame->aOp = p->aOp;
69988 u.cc.pFrame->nOp = p->nOp;
69989 u.cc.pFrame->token = u.cc.pProgram->token;
69990 u.cc.pFrame->aOnceFlag = p->aOnceFlag;
69991 u.cc.pFrame->nOnceFlag = p->nOnceFlag;
69993 u.cc.pEnd = &VdbeFrameMem(u.cc.pFrame)[u.cc.pFrame->nChildMem];
69994 for(u.cc.pMem=VdbeFrameMem(u.cc.pFrame); u.cc.pMem!=u.cc.pEnd; u.cc.pMem++){
69995 u.cc.pMem->flags = MEM_Invalid;
69996 u.cc.pMem->db = db;
69998 }else{
69999 u.cc.pFrame = u.cc.pRt->u.pFrame;
70000 assert( u.cc.pProgram->nMem+u.cc.pProgram->nCsr==u.cc.pFrame->nChildMem );
70001 assert( u.cc.pProgram->nCsr==u.cc.pFrame->nChildCsr );
70002 assert( pc==u.cc.pFrame->pc );
70005 p->nFrame++;
70006 u.cc.pFrame->pParent = p->pFrame;
70007 u.cc.pFrame->lastRowid = lastRowid;
70008 u.cc.pFrame->nChange = p->nChange;
70009 p->nChange = 0;
70010 p->pFrame = u.cc.pFrame;
70011 p->aMem = aMem = &VdbeFrameMem(u.cc.pFrame)[-1];
70012 p->nMem = u.cc.pFrame->nChildMem;
70013 p->nCursor = (u16)u.cc.pFrame->nChildCsr;
70014 p->apCsr = (VdbeCursor **)&aMem[p->nMem+1];
70015 p->aOp = aOp = u.cc.pProgram->aOp;
70016 p->nOp = u.cc.pProgram->nOp;
70017 p->aOnceFlag = (u8 *)&p->apCsr[p->nCursor];
70018 p->nOnceFlag = u.cc.pProgram->nOnce;
70019 p->nOp = u.cc.pProgram->nOp;
70020 pc = -1;
70021 memset(p->aOnceFlag, 0, p->nOnceFlag);
70023 break;
70026 /* Opcode: Param P1 P2 * * *
70028 ** This opcode is only ever present in sub-programs called via the
70029 ** OP_Program instruction. Copy a value currently stored in a memory
70030 ** cell of the calling (parent) frame to cell P2 in the current frames
70031 ** address space. This is used by trigger programs to access the new.*
70032 ** and old.* values.
70034 ** The address of the cell in the parent frame is determined by adding
70035 ** the value of the P1 argument to the value of the P1 argument to the
70036 ** calling OP_Program instruction.
70038 case OP_Param: { /* out2-prerelease */
70039 #if 0 /* local variables moved into u.cd */
70040 VdbeFrame *pFrame;
70041 Mem *pIn;
70042 #endif /* local variables moved into u.cd */
70043 u.cd.pFrame = p->pFrame;
70044 u.cd.pIn = &u.cd.pFrame->aMem[pOp->p1 + u.cd.pFrame->aOp[u.cd.pFrame->pc].p1];
70045 sqlite3VdbeMemShallowCopy(pOut, u.cd.pIn, MEM_Ephem);
70046 break;
70049 #endif /* #ifndef SQLITE_OMIT_TRIGGER */
70051 #ifndef SQLITE_OMIT_FOREIGN_KEY
70052 /* Opcode: FkCounter P1 P2 * * *
70054 ** Increment a "constraint counter" by P2 (P2 may be negative or positive).
70055 ** If P1 is non-zero, the database constraint counter is incremented
70056 ** (deferred foreign key constraints). Otherwise, if P1 is zero, the
70057 ** statement counter is incremented (immediate foreign key constraints).
70059 case OP_FkCounter: {
70060 if( pOp->p1 ){
70061 db->nDeferredCons += pOp->p2;
70062 }else{
70063 p->nFkConstraint += pOp->p2;
70065 break;
70068 /* Opcode: FkIfZero P1 P2 * * *
70070 ** This opcode tests if a foreign key constraint-counter is currently zero.
70071 ** If so, jump to instruction P2. Otherwise, fall through to the next
70072 ** instruction.
70074 ** If P1 is non-zero, then the jump is taken if the database constraint-counter
70075 ** is zero (the one that counts deferred constraint violations). If P1 is
70076 ** zero, the jump is taken if the statement constraint-counter is zero
70077 ** (immediate foreign key constraint violations).
70079 case OP_FkIfZero: { /* jump */
70080 if( pOp->p1 ){
70081 if( db->nDeferredCons==0 ) pc = pOp->p2-1;
70082 }else{
70083 if( p->nFkConstraint==0 ) pc = pOp->p2-1;
70085 break;
70087 #endif /* #ifndef SQLITE_OMIT_FOREIGN_KEY */
70089 #ifndef SQLITE_OMIT_AUTOINCREMENT
70090 /* Opcode: MemMax P1 P2 * * *
70092 ** P1 is a register in the root frame of this VM (the root frame is
70093 ** different from the current frame if this instruction is being executed
70094 ** within a sub-program). Set the value of register P1 to the maximum of
70095 ** its current value and the value in register P2.
70097 ** This instruction throws an error if the memory cell is not initially
70098 ** an integer.
70100 case OP_MemMax: { /* in2 */
70101 #if 0 /* local variables moved into u.ce */
70102 Mem *pIn1;
70103 VdbeFrame *pFrame;
70104 #endif /* local variables moved into u.ce */
70105 if( p->pFrame ){
70106 for(u.ce.pFrame=p->pFrame; u.ce.pFrame->pParent; u.ce.pFrame=u.ce.pFrame->pParent);
70107 u.ce.pIn1 = &u.ce.pFrame->aMem[pOp->p1];
70108 }else{
70109 u.ce.pIn1 = &aMem[pOp->p1];
70111 assert( memIsValid(u.ce.pIn1) );
70112 sqlite3VdbeMemIntegerify(u.ce.pIn1);
70113 pIn2 = &aMem[pOp->p2];
70114 sqlite3VdbeMemIntegerify(pIn2);
70115 if( u.ce.pIn1->u.i<pIn2->u.i){
70116 u.ce.pIn1->u.i = pIn2->u.i;
70118 break;
70120 #endif /* SQLITE_OMIT_AUTOINCREMENT */
70122 /* Opcode: IfPos P1 P2 * * *
70124 ** If the value of register P1 is 1 or greater, jump to P2.
70126 ** It is illegal to use this instruction on a register that does
70127 ** not contain an integer. An assertion fault will result if you try.
70129 case OP_IfPos: { /* jump, in1 */
70130 pIn1 = &aMem[pOp->p1];
70131 assert( pIn1->flags&MEM_Int );
70132 if( pIn1->u.i>0 ){
70133 pc = pOp->p2 - 1;
70135 break;
70138 /* Opcode: IfNeg P1 P2 * * *
70140 ** If the value of register P1 is less than zero, jump to P2.
70142 ** It is illegal to use this instruction on a register that does
70143 ** not contain an integer. An assertion fault will result if you try.
70145 case OP_IfNeg: { /* jump, in1 */
70146 pIn1 = &aMem[pOp->p1];
70147 assert( pIn1->flags&MEM_Int );
70148 if( pIn1->u.i<0 ){
70149 pc = pOp->p2 - 1;
70151 break;
70154 /* Opcode: IfZero P1 P2 P3 * *
70156 ** The register P1 must contain an integer. Add literal P3 to the
70157 ** value in register P1. If the result is exactly 0, jump to P2.
70159 ** It is illegal to use this instruction on a register that does
70160 ** not contain an integer. An assertion fault will result if you try.
70162 case OP_IfZero: { /* jump, in1 */
70163 pIn1 = &aMem[pOp->p1];
70164 assert( pIn1->flags&MEM_Int );
70165 pIn1->u.i += pOp->p3;
70166 if( pIn1->u.i==0 ){
70167 pc = pOp->p2 - 1;
70169 break;
70172 /* Opcode: AggStep * P2 P3 P4 P5
70174 ** Execute the step function for an aggregate. The
70175 ** function has P5 arguments. P4 is a pointer to the FuncDef
70176 ** structure that specifies the function. Use register
70177 ** P3 as the accumulator.
70179 ** The P5 arguments are taken from register P2 and its
70180 ** successors.
70182 case OP_AggStep: {
70183 #if 0 /* local variables moved into u.cf */
70184 int n;
70185 int i;
70186 Mem *pMem;
70187 Mem *pRec;
70188 sqlite3_context ctx;
70189 sqlite3_value **apVal;
70190 #endif /* local variables moved into u.cf */
70192 u.cf.n = pOp->p5;
70193 assert( u.cf.n>=0 );
70194 u.cf.pRec = &aMem[pOp->p2];
70195 u.cf.apVal = p->apArg;
70196 assert( u.cf.apVal || u.cf.n==0 );
70197 for(u.cf.i=0; u.cf.i<u.cf.n; u.cf.i++, u.cf.pRec++){
70198 assert( memIsValid(u.cf.pRec) );
70199 u.cf.apVal[u.cf.i] = u.cf.pRec;
70200 memAboutToChange(p, u.cf.pRec);
70201 sqlite3VdbeMemStoreType(u.cf.pRec);
70203 u.cf.ctx.pFunc = pOp->p4.pFunc;
70204 assert( pOp->p3>0 && pOp->p3<=p->nMem );
70205 u.cf.ctx.pMem = u.cf.pMem = &aMem[pOp->p3];
70206 u.cf.pMem->n++;
70207 u.cf.ctx.s.flags = MEM_Null;
70208 u.cf.ctx.s.z = 0;
70209 u.cf.ctx.s.zMalloc = 0;
70210 u.cf.ctx.s.xDel = 0;
70211 u.cf.ctx.s.db = db;
70212 u.cf.ctx.isError = 0;
70213 u.cf.ctx.pColl = 0;
70214 if( u.cf.ctx.pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
70215 assert( pOp>p->aOp );
70216 assert( pOp[-1].p4type==P4_COLLSEQ );
70217 assert( pOp[-1].opcode==OP_CollSeq );
70218 u.cf.ctx.pColl = pOp[-1].p4.pColl;
70220 (u.cf.ctx.pFunc->xStep)(&u.cf.ctx, u.cf.n, u.cf.apVal); /* IMP: R-24505-23230 */
70221 if( u.cf.ctx.isError ){
70222 sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cf.ctx.s));
70223 rc = u.cf.ctx.isError;
70226 sqlite3VdbeMemRelease(&u.cf.ctx.s);
70228 break;
70231 /* Opcode: AggFinal P1 P2 * P4 *
70233 ** Execute the finalizer function for an aggregate. P1 is
70234 ** the memory location that is the accumulator for the aggregate.
70236 ** P2 is the number of arguments that the step function takes and
70237 ** P4 is a pointer to the FuncDef for this function. The P2
70238 ** argument is not used by this opcode. It is only there to disambiguate
70239 ** functions that can take varying numbers of arguments. The
70240 ** P4 argument is only needed for the degenerate case where
70241 ** the step function was not previously called.
70243 case OP_AggFinal: {
70244 #if 0 /* local variables moved into u.cg */
70245 Mem *pMem;
70246 #endif /* local variables moved into u.cg */
70247 assert( pOp->p1>0 && pOp->p1<=p->nMem );
70248 u.cg.pMem = &aMem[pOp->p1];
70249 assert( (u.cg.pMem->flags & ~(MEM_Null|MEM_Agg))==0 );
70250 rc = sqlite3VdbeMemFinalize(u.cg.pMem, pOp->p4.pFunc);
70251 if( rc ){
70252 sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(u.cg.pMem));
70254 sqlite3VdbeChangeEncoding(u.cg.pMem, encoding);
70255 UPDATE_MAX_BLOBSIZE(u.cg.pMem);
70256 if( sqlite3VdbeMemTooBig(u.cg.pMem) ){
70257 goto too_big;
70259 break;
70262 #ifndef SQLITE_OMIT_WAL
70263 /* Opcode: Checkpoint P1 P2 P3 * *
70265 ** Checkpoint database P1. This is a no-op if P1 is not currently in
70266 ** WAL mode. Parameter P2 is one of SQLITE_CHECKPOINT_PASSIVE, FULL
70267 ** or RESTART. Write 1 or 0 into mem[P3] if the checkpoint returns
70268 ** SQLITE_BUSY or not, respectively. Write the number of pages in the
70269 ** WAL after the checkpoint into mem[P3+1] and the number of pages
70270 ** in the WAL that have been checkpointed after the checkpoint
70271 ** completes into mem[P3+2]. However on an error, mem[P3+1] and
70272 ** mem[P3+2] are initialized to -1.
70274 case OP_Checkpoint: {
70275 #if 0 /* local variables moved into u.ch */
70276 int i; /* Loop counter */
70277 int aRes[3]; /* Results */
70278 Mem *pMem; /* Write results here */
70279 #endif /* local variables moved into u.ch */
70281 u.ch.aRes[0] = 0;
70282 u.ch.aRes[1] = u.ch.aRes[2] = -1;
70283 assert( pOp->p2==SQLITE_CHECKPOINT_PASSIVE
70284 || pOp->p2==SQLITE_CHECKPOINT_FULL
70285 || pOp->p2==SQLITE_CHECKPOINT_RESTART
70287 rc = sqlite3Checkpoint(db, pOp->p1, pOp->p2, &u.ch.aRes[1], &u.ch.aRes[2]);
70288 if( rc==SQLITE_BUSY ){
70289 rc = SQLITE_OK;
70290 u.ch.aRes[0] = 1;
70292 for(u.ch.i=0, u.ch.pMem = &aMem[pOp->p3]; u.ch.i<3; u.ch.i++, u.ch.pMem++){
70293 sqlite3VdbeMemSetInt64(u.ch.pMem, (i64)u.ch.aRes[u.ch.i]);
70295 break;
70297 #endif
70299 #ifndef SQLITE_OMIT_PRAGMA
70300 /* Opcode: JournalMode P1 P2 P3 * P5
70302 ** Change the journal mode of database P1 to P3. P3 must be one of the
70303 ** PAGER_JOURNALMODE_XXX values. If changing between the various rollback
70304 ** modes (delete, truncate, persist, off and memory), this is a simple
70305 ** operation. No IO is required.
70307 ** If changing into or out of WAL mode the procedure is more complicated.
70309 ** Write a string containing the final journal-mode to register P2.
70311 case OP_JournalMode: { /* out2-prerelease */
70312 #if 0 /* local variables moved into u.ci */
70313 Btree *pBt; /* Btree to change journal mode of */
70314 Pager *pPager; /* Pager associated with pBt */
70315 int eNew; /* New journal mode */
70316 int eOld; /* The old journal mode */
70317 const char *zFilename; /* Name of database file for pPager */
70318 #endif /* local variables moved into u.ci */
70320 u.ci.eNew = pOp->p3;
70321 assert( u.ci.eNew==PAGER_JOURNALMODE_DELETE
70322 || u.ci.eNew==PAGER_JOURNALMODE_TRUNCATE
70323 || u.ci.eNew==PAGER_JOURNALMODE_PERSIST
70324 || u.ci.eNew==PAGER_JOURNALMODE_OFF
70325 || u.ci.eNew==PAGER_JOURNALMODE_MEMORY
70326 || u.ci.eNew==PAGER_JOURNALMODE_WAL
70327 || u.ci.eNew==PAGER_JOURNALMODE_QUERY
70329 assert( pOp->p1>=0 && pOp->p1<db->nDb );
70331 u.ci.pBt = db->aDb[pOp->p1].pBt;
70332 u.ci.pPager = sqlite3BtreePager(u.ci.pBt);
70333 u.ci.eOld = sqlite3PagerGetJournalMode(u.ci.pPager);
70334 if( u.ci.eNew==PAGER_JOURNALMODE_QUERY ) u.ci.eNew = u.ci.eOld;
70335 if( !sqlite3PagerOkToChangeJournalMode(u.ci.pPager) ) u.ci.eNew = u.ci.eOld;
70337 #ifndef SQLITE_OMIT_WAL
70338 u.ci.zFilename = sqlite3PagerFilename(u.ci.pPager);
70340 /* Do not allow a transition to journal_mode=WAL for a database
70341 ** in temporary storage or if the VFS does not support shared memory
70343 if( u.ci.eNew==PAGER_JOURNALMODE_WAL
70344 && (sqlite3Strlen30(u.ci.zFilename)==0 /* Temp file */
70345 || !sqlite3PagerWalSupported(u.ci.pPager)) /* No shared-memory support */
70347 u.ci.eNew = u.ci.eOld;
70350 if( (u.ci.eNew!=u.ci.eOld)
70351 && (u.ci.eOld==PAGER_JOURNALMODE_WAL || u.ci.eNew==PAGER_JOURNALMODE_WAL)
70353 if( !db->autoCommit || db->activeVdbeCnt>1 ){
70354 rc = SQLITE_ERROR;
70355 sqlite3SetString(&p->zErrMsg, db,
70356 "cannot change %s wal mode from within a transaction",
70357 (u.ci.eNew==PAGER_JOURNALMODE_WAL ? "into" : "out of")
70359 break;
70360 }else{
70362 if( u.ci.eOld==PAGER_JOURNALMODE_WAL ){
70363 /* If leaving WAL mode, close the log file. If successful, the call
70364 ** to PagerCloseWal() checkpoints and deletes the write-ahead-log
70365 ** file. An EXCLUSIVE lock may still be held on the database file
70366 ** after a successful return.
70368 rc = sqlite3PagerCloseWal(u.ci.pPager);
70369 if( rc==SQLITE_OK ){
70370 sqlite3PagerSetJournalMode(u.ci.pPager, u.ci.eNew);
70372 }else if( u.ci.eOld==PAGER_JOURNALMODE_MEMORY ){
70373 /* Cannot transition directly from MEMORY to WAL. Use mode OFF
70374 ** as an intermediate */
70375 sqlite3PagerSetJournalMode(u.ci.pPager, PAGER_JOURNALMODE_OFF);
70378 /* Open a transaction on the database file. Regardless of the journal
70379 ** mode, this transaction always uses a rollback journal.
70381 assert( sqlite3BtreeIsInTrans(u.ci.pBt)==0 );
70382 if( rc==SQLITE_OK ){
70383 rc = sqlite3BtreeSetVersion(u.ci.pBt, (u.ci.eNew==PAGER_JOURNALMODE_WAL ? 2 : 1));
70387 #endif /* ifndef SQLITE_OMIT_WAL */
70389 if( rc ){
70390 u.ci.eNew = u.ci.eOld;
70392 u.ci.eNew = sqlite3PagerSetJournalMode(u.ci.pPager, u.ci.eNew);
70394 pOut = &aMem[pOp->p2];
70395 pOut->flags = MEM_Str|MEM_Static|MEM_Term;
70396 pOut->z = (char *)sqlite3JournalModename(u.ci.eNew);
70397 pOut->n = sqlite3Strlen30(pOut->z);
70398 pOut->enc = SQLITE_UTF8;
70399 sqlite3VdbeChangeEncoding(pOut, encoding);
70400 break;
70402 #endif /* SQLITE_OMIT_PRAGMA */
70404 #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
70405 /* Opcode: Vacuum * * * * *
70407 ** Vacuum the entire database. This opcode will cause other virtual
70408 ** machines to be created and run. It may not be called from within
70409 ** a transaction.
70411 case OP_Vacuum: {
70412 rc = sqlite3RunVacuum(&p->zErrMsg, db);
70413 break;
70415 #endif
70417 #if !defined(SQLITE_OMIT_AUTOVACUUM)
70418 /* Opcode: IncrVacuum P1 P2 * * *
70420 ** Perform a single step of the incremental vacuum procedure on
70421 ** the P1 database. If the vacuum has finished, jump to instruction
70422 ** P2. Otherwise, fall through to the next instruction.
70424 case OP_IncrVacuum: { /* jump */
70425 #if 0 /* local variables moved into u.cj */
70426 Btree *pBt;
70427 #endif /* local variables moved into u.cj */
70429 assert( pOp->p1>=0 && pOp->p1<db->nDb );
70430 assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
70431 u.cj.pBt = db->aDb[pOp->p1].pBt;
70432 rc = sqlite3BtreeIncrVacuum(u.cj.pBt);
70433 if( rc==SQLITE_DONE ){
70434 pc = pOp->p2 - 1;
70435 rc = SQLITE_OK;
70437 break;
70439 #endif
70441 /* Opcode: Expire P1 * * * *
70443 ** Cause precompiled statements to become expired. An expired statement
70444 ** fails with an error code of SQLITE_SCHEMA if it is ever executed
70445 ** (via sqlite3_step()).
70447 ** If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
70448 ** then only the currently executing statement is affected.
70450 case OP_Expire: {
70451 if( !pOp->p1 ){
70452 sqlite3ExpirePreparedStatements(db);
70453 }else{
70454 p->expired = 1;
70456 break;
70459 #ifndef SQLITE_OMIT_SHARED_CACHE
70460 /* Opcode: TableLock P1 P2 P3 P4 *
70462 ** Obtain a lock on a particular table. This instruction is only used when
70463 ** the shared-cache feature is enabled.
70465 ** P1 is the index of the database in sqlite3.aDb[] of the database
70466 ** on which the lock is acquired. A readlock is obtained if P3==0 or
70467 ** a write lock if P3==1.
70469 ** P2 contains the root-page of the table to lock.
70471 ** P4 contains a pointer to the name of the table being locked. This is only
70472 ** used to generate an error message if the lock cannot be obtained.
70474 case OP_TableLock: {
70475 u8 isWriteLock = (u8)pOp->p3;
70476 if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){
70477 int p1 = pOp->p1;
70478 assert( p1>=0 && p1<db->nDb );
70479 assert( (p->btreeMask & (((yDbMask)1)<<p1))!=0 );
70480 assert( isWriteLock==0 || isWriteLock==1 );
70481 rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock);
70482 if( (rc&0xFF)==SQLITE_LOCKED ){
70483 const char *z = pOp->p4.z;
70484 sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z);
70487 break;
70489 #endif /* SQLITE_OMIT_SHARED_CACHE */
70491 #ifndef SQLITE_OMIT_VIRTUALTABLE
70492 /* Opcode: VBegin * * * P4 *
70494 ** P4 may be a pointer to an sqlite3_vtab structure. If so, call the
70495 ** xBegin method for that table.
70497 ** Also, whether or not P4 is set, check that this is not being called from
70498 ** within a callback to a virtual table xSync() method. If it is, the error
70499 ** code will be set to SQLITE_LOCKED.
70501 case OP_VBegin: {
70502 #if 0 /* local variables moved into u.ck */
70503 VTable *pVTab;
70504 #endif /* local variables moved into u.ck */
70505 u.ck.pVTab = pOp->p4.pVtab;
70506 rc = sqlite3VtabBegin(db, u.ck.pVTab);
70507 if( u.ck.pVTab ) importVtabErrMsg(p, u.ck.pVTab->pVtab);
70508 break;
70510 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70512 #ifndef SQLITE_OMIT_VIRTUALTABLE
70513 /* Opcode: VCreate P1 * * P4 *
70515 ** P4 is the name of a virtual table in database P1. Call the xCreate method
70516 ** for that table.
70518 case OP_VCreate: {
70519 rc = sqlite3VtabCallCreate(db, pOp->p1, pOp->p4.z, &p->zErrMsg);
70520 break;
70522 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70524 #ifndef SQLITE_OMIT_VIRTUALTABLE
70525 /* Opcode: VDestroy P1 * * P4 *
70527 ** P4 is the name of a virtual table in database P1. Call the xDestroy method
70528 ** of that table.
70530 case OP_VDestroy: {
70531 p->inVtabMethod = 2;
70532 rc = sqlite3VtabCallDestroy(db, pOp->p1, pOp->p4.z);
70533 p->inVtabMethod = 0;
70534 break;
70536 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70538 #ifndef SQLITE_OMIT_VIRTUALTABLE
70539 /* Opcode: VOpen P1 * * P4 *
70541 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
70542 ** P1 is a cursor number. This opcode opens a cursor to the virtual
70543 ** table and stores that cursor in P1.
70545 case OP_VOpen: {
70546 #if 0 /* local variables moved into u.cl */
70547 VdbeCursor *pCur;
70548 sqlite3_vtab_cursor *pVtabCursor;
70549 sqlite3_vtab *pVtab;
70550 sqlite3_module *pModule;
70551 #endif /* local variables moved into u.cl */
70553 u.cl.pCur = 0;
70554 u.cl.pVtabCursor = 0;
70555 u.cl.pVtab = pOp->p4.pVtab->pVtab;
70556 u.cl.pModule = (sqlite3_module *)u.cl.pVtab->pModule;
70557 assert(u.cl.pVtab && u.cl.pModule);
70558 rc = u.cl.pModule->xOpen(u.cl.pVtab, &u.cl.pVtabCursor);
70559 importVtabErrMsg(p, u.cl.pVtab);
70560 if( SQLITE_OK==rc ){
70561 /* Initialize sqlite3_vtab_cursor base class */
70562 u.cl.pVtabCursor->pVtab = u.cl.pVtab;
70564 /* Initialise vdbe cursor object */
70565 u.cl.pCur = allocateCursor(p, pOp->p1, 0, -1, 0);
70566 if( u.cl.pCur ){
70567 u.cl.pCur->pVtabCursor = u.cl.pVtabCursor;
70568 u.cl.pCur->pModule = u.cl.pVtabCursor->pVtab->pModule;
70569 }else{
70570 db->mallocFailed = 1;
70571 u.cl.pModule->xClose(u.cl.pVtabCursor);
70574 break;
70576 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70578 #ifndef SQLITE_OMIT_VIRTUALTABLE
70579 /* Opcode: VFilter P1 P2 P3 P4 *
70581 ** P1 is a cursor opened using VOpen. P2 is an address to jump to if
70582 ** the filtered result set is empty.
70584 ** P4 is either NULL or a string that was generated by the xBestIndex
70585 ** method of the module. The interpretation of the P4 string is left
70586 ** to the module implementation.
70588 ** This opcode invokes the xFilter method on the virtual table specified
70589 ** by P1. The integer query plan parameter to xFilter is stored in register
70590 ** P3. Register P3+1 stores the argc parameter to be passed to the
70591 ** xFilter method. Registers P3+2..P3+1+argc are the argc
70592 ** additional parameters which are passed to
70593 ** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.
70595 ** A jump is made to P2 if the result set after filtering would be empty.
70597 case OP_VFilter: { /* jump */
70598 #if 0 /* local variables moved into u.cm */
70599 int nArg;
70600 int iQuery;
70601 const sqlite3_module *pModule;
70602 Mem *pQuery;
70603 Mem *pArgc;
70604 sqlite3_vtab_cursor *pVtabCursor;
70605 sqlite3_vtab *pVtab;
70606 VdbeCursor *pCur;
70607 int res;
70608 int i;
70609 Mem **apArg;
70610 #endif /* local variables moved into u.cm */
70612 u.cm.pQuery = &aMem[pOp->p3];
70613 u.cm.pArgc = &u.cm.pQuery[1];
70614 u.cm.pCur = p->apCsr[pOp->p1];
70615 assert( memIsValid(u.cm.pQuery) );
70616 REGISTER_TRACE(pOp->p3, u.cm.pQuery);
70617 assert( u.cm.pCur->pVtabCursor );
70618 u.cm.pVtabCursor = u.cm.pCur->pVtabCursor;
70619 u.cm.pVtab = u.cm.pVtabCursor->pVtab;
70620 u.cm.pModule = u.cm.pVtab->pModule;
70622 /* Grab the index number and argc parameters */
70623 assert( (u.cm.pQuery->flags&MEM_Int)!=0 && u.cm.pArgc->flags==MEM_Int );
70624 u.cm.nArg = (int)u.cm.pArgc->u.i;
70625 u.cm.iQuery = (int)u.cm.pQuery->u.i;
70627 /* Invoke the xFilter method */
70629 u.cm.res = 0;
70630 u.cm.apArg = p->apArg;
70631 for(u.cm.i = 0; u.cm.i<u.cm.nArg; u.cm.i++){
70632 u.cm.apArg[u.cm.i] = &u.cm.pArgc[u.cm.i+1];
70633 sqlite3VdbeMemStoreType(u.cm.apArg[u.cm.i]);
70636 p->inVtabMethod = 1;
70637 rc = u.cm.pModule->xFilter(u.cm.pVtabCursor, u.cm.iQuery, pOp->p4.z, u.cm.nArg, u.cm.apArg);
70638 p->inVtabMethod = 0;
70639 importVtabErrMsg(p, u.cm.pVtab);
70640 if( rc==SQLITE_OK ){
70641 u.cm.res = u.cm.pModule->xEof(u.cm.pVtabCursor);
70644 if( u.cm.res ){
70645 pc = pOp->p2 - 1;
70648 u.cm.pCur->nullRow = 0;
70650 break;
70652 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70654 #ifndef SQLITE_OMIT_VIRTUALTABLE
70655 /* Opcode: VColumn P1 P2 P3 * *
70657 ** Store the value of the P2-th column of
70658 ** the row of the virtual-table that the
70659 ** P1 cursor is pointing to into register P3.
70661 case OP_VColumn: {
70662 #if 0 /* local variables moved into u.cn */
70663 sqlite3_vtab *pVtab;
70664 const sqlite3_module *pModule;
70665 Mem *pDest;
70666 sqlite3_context sContext;
70667 #endif /* local variables moved into u.cn */
70669 VdbeCursor *pCur = p->apCsr[pOp->p1];
70670 assert( pCur->pVtabCursor );
70671 assert( pOp->p3>0 && pOp->p3<=p->nMem );
70672 u.cn.pDest = &aMem[pOp->p3];
70673 memAboutToChange(p, u.cn.pDest);
70674 if( pCur->nullRow ){
70675 sqlite3VdbeMemSetNull(u.cn.pDest);
70676 break;
70678 u.cn.pVtab = pCur->pVtabCursor->pVtab;
70679 u.cn.pModule = u.cn.pVtab->pModule;
70680 assert( u.cn.pModule->xColumn );
70681 memset(&u.cn.sContext, 0, sizeof(u.cn.sContext));
70683 /* The output cell may already have a buffer allocated. Move
70684 ** the current contents to u.cn.sContext.s so in case the user-function
70685 ** can use the already allocated buffer instead of allocating a
70686 ** new one.
70688 sqlite3VdbeMemMove(&u.cn.sContext.s, u.cn.pDest);
70689 MemSetTypeFlag(&u.cn.sContext.s, MEM_Null);
70691 rc = u.cn.pModule->xColumn(pCur->pVtabCursor, &u.cn.sContext, pOp->p2);
70692 importVtabErrMsg(p, u.cn.pVtab);
70693 if( u.cn.sContext.isError ){
70694 rc = u.cn.sContext.isError;
70697 /* Copy the result of the function to the P3 register. We
70698 ** do this regardless of whether or not an error occurred to ensure any
70699 ** dynamic allocation in u.cn.sContext.s (a Mem struct) is released.
70701 sqlite3VdbeChangeEncoding(&u.cn.sContext.s, encoding);
70702 sqlite3VdbeMemMove(u.cn.pDest, &u.cn.sContext.s);
70703 REGISTER_TRACE(pOp->p3, u.cn.pDest);
70704 UPDATE_MAX_BLOBSIZE(u.cn.pDest);
70706 if( sqlite3VdbeMemTooBig(u.cn.pDest) ){
70707 goto too_big;
70709 break;
70711 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70713 #ifndef SQLITE_OMIT_VIRTUALTABLE
70714 /* Opcode: VNext P1 P2 * * *
70716 ** Advance virtual table P1 to the next row in its result set and
70717 ** jump to instruction P2. Or, if the virtual table has reached
70718 ** the end of its result set, then fall through to the next instruction.
70720 case OP_VNext: { /* jump */
70721 #if 0 /* local variables moved into u.co */
70722 sqlite3_vtab *pVtab;
70723 const sqlite3_module *pModule;
70724 int res;
70725 VdbeCursor *pCur;
70726 #endif /* local variables moved into u.co */
70728 u.co.res = 0;
70729 u.co.pCur = p->apCsr[pOp->p1];
70730 assert( u.co.pCur->pVtabCursor );
70731 if( u.co.pCur->nullRow ){
70732 break;
70734 u.co.pVtab = u.co.pCur->pVtabCursor->pVtab;
70735 u.co.pModule = u.co.pVtab->pModule;
70736 assert( u.co.pModule->xNext );
70738 /* Invoke the xNext() method of the module. There is no way for the
70739 ** underlying implementation to return an error if one occurs during
70740 ** xNext(). Instead, if an error occurs, true is returned (indicating that
70741 ** data is available) and the error code returned when xColumn or
70742 ** some other method is next invoked on the save virtual table cursor.
70744 p->inVtabMethod = 1;
70745 rc = u.co.pModule->xNext(u.co.pCur->pVtabCursor);
70746 p->inVtabMethod = 0;
70747 importVtabErrMsg(p, u.co.pVtab);
70748 if( rc==SQLITE_OK ){
70749 u.co.res = u.co.pModule->xEof(u.co.pCur->pVtabCursor);
70752 if( !u.co.res ){
70753 /* If there is data, jump to P2 */
70754 pc = pOp->p2 - 1;
70756 break;
70758 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70760 #ifndef SQLITE_OMIT_VIRTUALTABLE
70761 /* Opcode: VRename P1 * * P4 *
70763 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
70764 ** This opcode invokes the corresponding xRename method. The value
70765 ** in register P1 is passed as the zName argument to the xRename method.
70767 case OP_VRename: {
70768 #if 0 /* local variables moved into u.cp */
70769 sqlite3_vtab *pVtab;
70770 Mem *pName;
70771 #endif /* local variables moved into u.cp */
70773 u.cp.pVtab = pOp->p4.pVtab->pVtab;
70774 u.cp.pName = &aMem[pOp->p1];
70775 assert( u.cp.pVtab->pModule->xRename );
70776 assert( memIsValid(u.cp.pName) );
70777 REGISTER_TRACE(pOp->p1, u.cp.pName);
70778 assert( u.cp.pName->flags & MEM_Str );
70779 testcase( u.cp.pName->enc==SQLITE_UTF8 );
70780 testcase( u.cp.pName->enc==SQLITE_UTF16BE );
70781 testcase( u.cp.pName->enc==SQLITE_UTF16LE );
70782 rc = sqlite3VdbeChangeEncoding(u.cp.pName, SQLITE_UTF8);
70783 if( rc==SQLITE_OK ){
70784 rc = u.cp.pVtab->pModule->xRename(u.cp.pVtab, u.cp.pName->z);
70785 importVtabErrMsg(p, u.cp.pVtab);
70786 p->expired = 0;
70788 break;
70790 #endif
70792 #ifndef SQLITE_OMIT_VIRTUALTABLE
70793 /* Opcode: VUpdate P1 P2 P3 P4 *
70795 ** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
70796 ** This opcode invokes the corresponding xUpdate method. P2 values
70797 ** are contiguous memory cells starting at P3 to pass to the xUpdate
70798 ** invocation. The value in register (P3+P2-1) corresponds to the
70799 ** p2th element of the argv array passed to xUpdate.
70801 ** The xUpdate method will do a DELETE or an INSERT or both.
70802 ** The argv[0] element (which corresponds to memory cell P3)
70803 ** is the rowid of a row to delete. If argv[0] is NULL then no
70804 ** deletion occurs. The argv[1] element is the rowid of the new
70805 ** row. This can be NULL to have the virtual table select the new
70806 ** rowid for itself. The subsequent elements in the array are
70807 ** the values of columns in the new row.
70809 ** If P2==1 then no insert is performed. argv[0] is the rowid of
70810 ** a row to delete.
70812 ** P1 is a boolean flag. If it is set to true and the xUpdate call
70813 ** is successful, then the value returned by sqlite3_last_insert_rowid()
70814 ** is set to the value of the rowid for the row just inserted.
70816 case OP_VUpdate: {
70817 #if 0 /* local variables moved into u.cq */
70818 sqlite3_vtab *pVtab;
70819 sqlite3_module *pModule;
70820 int nArg;
70821 int i;
70822 sqlite_int64 rowid;
70823 Mem **apArg;
70824 Mem *pX;
70825 #endif /* local variables moved into u.cq */
70827 assert( pOp->p2==1 || pOp->p5==OE_Fail || pOp->p5==OE_Rollback
70828 || pOp->p5==OE_Abort || pOp->p5==OE_Ignore || pOp->p5==OE_Replace
70830 u.cq.pVtab = pOp->p4.pVtab->pVtab;
70831 u.cq.pModule = (sqlite3_module *)u.cq.pVtab->pModule;
70832 u.cq.nArg = pOp->p2;
70833 assert( pOp->p4type==P4_VTAB );
70834 if( ALWAYS(u.cq.pModule->xUpdate) ){
70835 u8 vtabOnConflict = db->vtabOnConflict;
70836 u.cq.apArg = p->apArg;
70837 u.cq.pX = &aMem[pOp->p3];
70838 for(u.cq.i=0; u.cq.i<u.cq.nArg; u.cq.i++){
70839 assert( memIsValid(u.cq.pX) );
70840 memAboutToChange(p, u.cq.pX);
70841 sqlite3VdbeMemStoreType(u.cq.pX);
70842 u.cq.apArg[u.cq.i] = u.cq.pX;
70843 u.cq.pX++;
70845 db->vtabOnConflict = pOp->p5;
70846 rc = u.cq.pModule->xUpdate(u.cq.pVtab, u.cq.nArg, u.cq.apArg, &u.cq.rowid);
70847 db->vtabOnConflict = vtabOnConflict;
70848 importVtabErrMsg(p, u.cq.pVtab);
70849 if( rc==SQLITE_OK && pOp->p1 ){
70850 assert( u.cq.nArg>1 && u.cq.apArg[0] && (u.cq.apArg[0]->flags&MEM_Null) );
70851 db->lastRowid = lastRowid = u.cq.rowid;
70853 if( rc==SQLITE_CONSTRAINT && pOp->p4.pVtab->bConstraint ){
70854 if( pOp->p5==OE_Ignore ){
70855 rc = SQLITE_OK;
70856 }else{
70857 p->errorAction = ((pOp->p5==OE_Replace) ? OE_Abort : pOp->p5);
70859 }else{
70860 p->nChange++;
70863 break;
70865 #endif /* SQLITE_OMIT_VIRTUALTABLE */
70867 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
70868 /* Opcode: Pagecount P1 P2 * * *
70870 ** Write the current number of pages in database P1 to memory cell P2.
70872 case OP_Pagecount: { /* out2-prerelease */
70873 pOut->u.i = sqlite3BtreeLastPage(db->aDb[pOp->p1].pBt);
70874 break;
70876 #endif
70879 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
70880 /* Opcode: MaxPgcnt P1 P2 P3 * *
70882 ** Try to set the maximum page count for database P1 to the value in P3.
70883 ** Do not let the maximum page count fall below the current page count and
70884 ** do not change the maximum page count value if P3==0.
70886 ** Store the maximum page count after the change in register P2.
70888 case OP_MaxPgcnt: { /* out2-prerelease */
70889 unsigned int newMax;
70890 Btree *pBt;
70892 pBt = db->aDb[pOp->p1].pBt;
70893 newMax = 0;
70894 if( pOp->p3 ){
70895 newMax = sqlite3BtreeLastPage(pBt);
70896 if( newMax < (unsigned)pOp->p3 ) newMax = (unsigned)pOp->p3;
70898 pOut->u.i = sqlite3BtreeMaxPageCount(pBt, newMax);
70899 break;
70901 #endif
70904 #ifndef SQLITE_OMIT_TRACE
70905 /* Opcode: Trace * * * P4 *
70907 ** If tracing is enabled (by the sqlite3_trace()) interface, then
70908 ** the UTF-8 string contained in P4 is emitted on the trace callback.
70910 case OP_Trace: {
70911 #if 0 /* local variables moved into u.cr */
70912 char *zTrace;
70913 char *z;
70914 #endif /* local variables moved into u.cr */
70916 if( db->xTrace && (u.cr.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0 ){
70917 u.cr.z = sqlite3VdbeExpandSql(p, u.cr.zTrace);
70918 db->xTrace(db->pTraceArg, u.cr.z);
70919 sqlite3DbFree(db, u.cr.z);
70921 #ifdef SQLITE_DEBUG
70922 if( (db->flags & SQLITE_SqlTrace)!=0
70923 && (u.cr.zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql))!=0
70925 sqlite3DebugPrintf("SQL-trace: %s\n", u.cr.zTrace);
70927 #endif /* SQLITE_DEBUG */
70928 break;
70930 #endif
70933 /* Opcode: Noop * * * * *
70935 ** Do nothing. This instruction is often useful as a jump
70936 ** destination.
70939 ** The magic Explain opcode are only inserted when explain==2 (which
70940 ** is to say when the EXPLAIN QUERY PLAN syntax is used.)
70941 ** This opcode records information from the optimizer. It is the
70942 ** the same as a no-op. This opcodesnever appears in a real VM program.
70944 default: { /* This is really OP_Noop and OP_Explain */
70945 assert( pOp->opcode==OP_Noop || pOp->opcode==OP_Explain );
70946 break;
70949 /*****************************************************************************
70950 ** The cases of the switch statement above this line should all be indented
70951 ** by 6 spaces. But the left-most 6 spaces have been removed to improve the
70952 ** readability. From this point on down, the normal indentation rules are
70953 ** restored.
70954 *****************************************************************************/
70957 #ifdef VDBE_PROFILE
70959 u64 elapsed = sqlite3Hwtime() - start;
70960 pOp->cycles += elapsed;
70961 pOp->cnt++;
70962 #if 0
70963 fprintf(stdout, "%10llu ", elapsed);
70964 sqlite3VdbePrintOp(stdout, origPc, &aOp[origPc]);
70965 #endif
70967 #endif
70969 /* The following code adds nothing to the actual functionality
70970 ** of the program. It is only here for testing and debugging.
70971 ** On the other hand, it does burn CPU cycles every time through
70972 ** the evaluator loop. So we can leave it out when NDEBUG is defined.
70974 #ifndef NDEBUG
70975 assert( pc>=-1 && pc<p->nOp );
70977 #ifdef SQLITE_DEBUG
70978 if( p->trace ){
70979 if( rc!=0 ) fprintf(p->trace,"rc=%d\n",rc);
70980 if( pOp->opflags & (OPFLG_OUT2_PRERELEASE|OPFLG_OUT2) ){
70981 registerTrace(p->trace, pOp->p2, &aMem[pOp->p2]);
70983 if( pOp->opflags & OPFLG_OUT3 ){
70984 registerTrace(p->trace, pOp->p3, &aMem[pOp->p3]);
70987 #endif /* SQLITE_DEBUG */
70988 #endif /* NDEBUG */
70989 } /* The end of the for(;;) loop the loops through opcodes */
70991 /* If we reach this point, it means that execution is finished with
70992 ** an error of some kind.
70994 vdbe_error_halt:
70995 assert( rc );
70996 p->rc = rc;
70997 testcase( sqlite3GlobalConfig.xLog!=0 );
70998 sqlite3_log(rc, "statement aborts at %d: [%s] %s",
70999 pc, p->zSql, p->zErrMsg);
71000 sqlite3VdbeHalt(p);
71001 if( rc==SQLITE_IOERR_NOMEM ) db->mallocFailed = 1;
71002 rc = SQLITE_ERROR;
71003 if( resetSchemaOnFault>0 ){
71004 sqlite3ResetInternalSchema(db, resetSchemaOnFault-1);
71007 /* This is the only way out of this procedure. We have to
71008 ** release the mutexes on btrees that were acquired at the
71009 ** top. */
71010 vdbe_return:
71011 db->lastRowid = lastRowid;
71012 sqlite3VdbeLeave(p);
71013 return rc;
71015 /* Jump to here if a string or blob larger than SQLITE_MAX_LENGTH
71016 ** is encountered.
71018 too_big:
71019 sqlite3SetString(&p->zErrMsg, db, "string or blob too big");
71020 rc = SQLITE_TOOBIG;
71021 goto vdbe_error_halt;
71023 /* Jump to here if a malloc() fails.
71025 no_mem:
71026 db->mallocFailed = 1;
71027 sqlite3SetString(&p->zErrMsg, db, "out of memory");
71028 rc = SQLITE_NOMEM;
71029 goto vdbe_error_halt;
71031 /* Jump to here for any other kind of fatal error. The "rc" variable
71032 ** should hold the error number.
71034 abort_due_to_error:
71035 assert( p->zErrMsg==0 );
71036 if( db->mallocFailed ) rc = SQLITE_NOMEM;
71037 if( rc!=SQLITE_IOERR_NOMEM ){
71038 sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
71040 goto vdbe_error_halt;
71042 /* Jump to here if the sqlite3_interrupt() API sets the interrupt
71043 ** flag.
71045 abort_due_to_interrupt:
71046 assert( db->u1.isInterrupted );
71047 rc = SQLITE_INTERRUPT;
71048 p->rc = rc;
71049 sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3ErrStr(rc));
71050 goto vdbe_error_halt;
71053 /************** End of vdbe.c ************************************************/
71054 /************** Begin file vdbeblob.c ****************************************/
71056 ** 2007 May 1
71058 ** The author disclaims copyright to this source code. In place of
71059 ** a legal notice, here is a blessing:
71061 ** May you do good and not evil.
71062 ** May you find forgiveness for yourself and forgive others.
71063 ** May you share freely, never taking more than you give.
71065 *************************************************************************
71067 ** This file contains code used to implement incremental BLOB I/O.
71071 #ifndef SQLITE_OMIT_INCRBLOB
71074 ** Valid sqlite3_blob* handles point to Incrblob structures.
71076 typedef struct Incrblob Incrblob;
71077 struct Incrblob {
71078 int flags; /* Copy of "flags" passed to sqlite3_blob_open() */
71079 int nByte; /* Size of open blob, in bytes */
71080 int iOffset; /* Byte offset of blob in cursor data */
71081 int iCol; /* Table column this handle is open on */
71082 BtCursor *pCsr; /* Cursor pointing at blob row */
71083 sqlite3_stmt *pStmt; /* Statement holding cursor open */
71084 sqlite3 *db; /* The associated database */
71089 ** This function is used by both blob_open() and blob_reopen(). It seeks
71090 ** the b-tree cursor associated with blob handle p to point to row iRow.
71091 ** If successful, SQLITE_OK is returned and subsequent calls to
71092 ** sqlite3_blob_read() or sqlite3_blob_write() access the specified row.
71094 ** If an error occurs, or if the specified row does not exist or does not
71095 ** contain a value of type TEXT or BLOB in the column nominated when the
71096 ** blob handle was opened, then an error code is returned and *pzErr may
71097 ** be set to point to a buffer containing an error message. It is the
71098 ** responsibility of the caller to free the error message buffer using
71099 ** sqlite3DbFree().
71101 ** If an error does occur, then the b-tree cursor is closed. All subsequent
71102 ** calls to sqlite3_blob_read(), blob_write() or blob_reopen() will
71103 ** immediately return SQLITE_ABORT.
71105 static int blobSeekToRow(Incrblob *p, sqlite3_int64 iRow, char **pzErr){
71106 int rc; /* Error code */
71107 char *zErr = 0; /* Error message */
71108 Vdbe *v = (Vdbe *)p->pStmt;
71110 /* Set the value of the SQL statements only variable to integer iRow.
71111 ** This is done directly instead of using sqlite3_bind_int64() to avoid
71112 ** triggering asserts related to mutexes.
71114 assert( v->aVar[0].flags&MEM_Int );
71115 v->aVar[0].u.i = iRow;
71117 rc = sqlite3_step(p->pStmt);
71118 if( rc==SQLITE_ROW ){
71119 u32 type = v->apCsr[0]->aType[p->iCol];
71120 if( type<12 ){
71121 zErr = sqlite3MPrintf(p->db, "cannot open value of type %s",
71122 type==0?"null": type==7?"real": "integer"
71124 rc = SQLITE_ERROR;
71125 sqlite3_finalize(p->pStmt);
71126 p->pStmt = 0;
71127 }else{
71128 p->iOffset = v->apCsr[0]->aOffset[p->iCol];
71129 p->nByte = sqlite3VdbeSerialTypeLen(type);
71130 p->pCsr = v->apCsr[0]->pCursor;
71131 sqlite3BtreeEnterCursor(p->pCsr);
71132 sqlite3BtreeCacheOverflow(p->pCsr);
71133 sqlite3BtreeLeaveCursor(p->pCsr);
71137 if( rc==SQLITE_ROW ){
71138 rc = SQLITE_OK;
71139 }else if( p->pStmt ){
71140 rc = sqlite3_finalize(p->pStmt);
71141 p->pStmt = 0;
71142 if( rc==SQLITE_OK ){
71143 zErr = sqlite3MPrintf(p->db, "no such rowid: %lld", iRow);
71144 rc = SQLITE_ERROR;
71145 }else{
71146 zErr = sqlite3MPrintf(p->db, "%s", sqlite3_errmsg(p->db));
71150 assert( rc!=SQLITE_OK || zErr==0 );
71151 assert( rc!=SQLITE_ROW && rc!=SQLITE_DONE );
71153 *pzErr = zErr;
71154 return rc;
71158 ** Open a blob handle.
71160 SQLITE_API int sqlite3_blob_open(
71161 sqlite3* db, /* The database connection */
71162 const char *zDb, /* The attached database containing the blob */
71163 const char *zTable, /* The table containing the blob */
71164 const char *zColumn, /* The column containing the blob */
71165 sqlite_int64 iRow, /* The row containing the glob */
71166 int flags, /* True -> read/write access, false -> read-only */
71167 sqlite3_blob **ppBlob /* Handle for accessing the blob returned here */
71169 int nAttempt = 0;
71170 int iCol; /* Index of zColumn in row-record */
71172 /* This VDBE program seeks a btree cursor to the identified
71173 ** db/table/row entry. The reason for using a vdbe program instead
71174 ** of writing code to use the b-tree layer directly is that the
71175 ** vdbe program will take advantage of the various transaction,
71176 ** locking and error handling infrastructure built into the vdbe.
71178 ** After seeking the cursor, the vdbe executes an OP_ResultRow.
71179 ** Code external to the Vdbe then "borrows" the b-tree cursor and
71180 ** uses it to implement the blob_read(), blob_write() and
71181 ** blob_bytes() functions.
71183 ** The sqlite3_blob_close() function finalizes the vdbe program,
71184 ** which closes the b-tree cursor and (possibly) commits the
71185 ** transaction.
71187 static const VdbeOpList openBlob[] = {
71188 {OP_Transaction, 0, 0, 0}, /* 0: Start a transaction */
71189 {OP_VerifyCookie, 0, 0, 0}, /* 1: Check the schema cookie */
71190 {OP_TableLock, 0, 0, 0}, /* 2: Acquire a read or write lock */
71192 /* One of the following two instructions is replaced by an OP_Noop. */
71193 {OP_OpenRead, 0, 0, 0}, /* 3: Open cursor 0 for reading */
71194 {OP_OpenWrite, 0, 0, 0}, /* 4: Open cursor 0 for read/write */
71196 {OP_Variable, 1, 1, 1}, /* 5: Push the rowid to the stack */
71197 {OP_NotExists, 0, 10, 1}, /* 6: Seek the cursor */
71198 {OP_Column, 0, 0, 1}, /* 7 */
71199 {OP_ResultRow, 1, 0, 0}, /* 8 */
71200 {OP_Goto, 0, 5, 0}, /* 9 */
71201 {OP_Close, 0, 0, 0}, /* 10 */
71202 {OP_Halt, 0, 0, 0}, /* 11 */
71205 int rc = SQLITE_OK;
71206 char *zErr = 0;
71207 Table *pTab;
71208 Parse *pParse = 0;
71209 Incrblob *pBlob = 0;
71211 flags = !!flags; /* flags = (flags ? 1 : 0); */
71212 *ppBlob = 0;
71214 sqlite3_mutex_enter(db->mutex);
71216 pBlob = (Incrblob *)sqlite3DbMallocZero(db, sizeof(Incrblob));
71217 if( !pBlob ) goto blob_open_out;
71218 pParse = sqlite3StackAllocRaw(db, sizeof(*pParse));
71219 if( !pParse ) goto blob_open_out;
71221 do {
71222 memset(pParse, 0, sizeof(Parse));
71223 pParse->db = db;
71224 sqlite3DbFree(db, zErr);
71225 zErr = 0;
71227 sqlite3BtreeEnterAll(db);
71228 pTab = sqlite3LocateTable(pParse, 0, zTable, zDb);
71229 if( pTab && IsVirtual(pTab) ){
71230 pTab = 0;
71231 sqlite3ErrorMsg(pParse, "cannot open virtual table: %s", zTable);
71233 #ifndef SQLITE_OMIT_VIEW
71234 if( pTab && pTab->pSelect ){
71235 pTab = 0;
71236 sqlite3ErrorMsg(pParse, "cannot open view: %s", zTable);
71238 #endif
71239 if( !pTab ){
71240 if( pParse->zErrMsg ){
71241 sqlite3DbFree(db, zErr);
71242 zErr = pParse->zErrMsg;
71243 pParse->zErrMsg = 0;
71245 rc = SQLITE_ERROR;
71246 sqlite3BtreeLeaveAll(db);
71247 goto blob_open_out;
71250 /* Now search pTab for the exact column. */
71251 for(iCol=0; iCol<pTab->nCol; iCol++) {
71252 if( sqlite3StrICmp(pTab->aCol[iCol].zName, zColumn)==0 ){
71253 break;
71256 if( iCol==pTab->nCol ){
71257 sqlite3DbFree(db, zErr);
71258 zErr = sqlite3MPrintf(db, "no such column: \"%s\"", zColumn);
71259 rc = SQLITE_ERROR;
71260 sqlite3BtreeLeaveAll(db);
71261 goto blob_open_out;
71264 /* If the value is being opened for writing, check that the
71265 ** column is not indexed, and that it is not part of a foreign key.
71266 ** It is against the rules to open a column to which either of these
71267 ** descriptions applies for writing. */
71268 if( flags ){
71269 const char *zFault = 0;
71270 Index *pIdx;
71271 #ifndef SQLITE_OMIT_FOREIGN_KEY
71272 if( db->flags&SQLITE_ForeignKeys ){
71273 /* Check that the column is not part of an FK child key definition. It
71274 ** is not necessary to check if it is part of a parent key, as parent
71275 ** key columns must be indexed. The check below will pick up this
71276 ** case. */
71277 FKey *pFKey;
71278 for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
71279 int j;
71280 for(j=0; j<pFKey->nCol; j++){
71281 if( pFKey->aCol[j].iFrom==iCol ){
71282 zFault = "foreign key";
71287 #endif
71288 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
71289 int j;
71290 for(j=0; j<pIdx->nColumn; j++){
71291 if( pIdx->aiColumn[j]==iCol ){
71292 zFault = "indexed";
71296 if( zFault ){
71297 sqlite3DbFree(db, zErr);
71298 zErr = sqlite3MPrintf(db, "cannot open %s column for writing", zFault);
71299 rc = SQLITE_ERROR;
71300 sqlite3BtreeLeaveAll(db);
71301 goto blob_open_out;
71305 pBlob->pStmt = (sqlite3_stmt *)sqlite3VdbeCreate(db);
71306 assert( pBlob->pStmt || db->mallocFailed );
71307 if( pBlob->pStmt ){
71308 Vdbe *v = (Vdbe *)pBlob->pStmt;
71309 int iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
71311 sqlite3VdbeAddOpList(v, sizeof(openBlob)/sizeof(VdbeOpList), openBlob);
71314 /* Configure the OP_Transaction */
71315 sqlite3VdbeChangeP1(v, 0, iDb);
71316 sqlite3VdbeChangeP2(v, 0, flags);
71318 /* Configure the OP_VerifyCookie */
71319 sqlite3VdbeChangeP1(v, 1, iDb);
71320 sqlite3VdbeChangeP2(v, 1, pTab->pSchema->schema_cookie);
71321 sqlite3VdbeChangeP3(v, 1, pTab->pSchema->iGeneration);
71323 /* Make sure a mutex is held on the table to be accessed */
71324 sqlite3VdbeUsesBtree(v, iDb);
71326 /* Configure the OP_TableLock instruction */
71327 #ifdef SQLITE_OMIT_SHARED_CACHE
71328 sqlite3VdbeChangeToNoop(v, 2);
71329 #else
71330 sqlite3VdbeChangeP1(v, 2, iDb);
71331 sqlite3VdbeChangeP2(v, 2, pTab->tnum);
71332 sqlite3VdbeChangeP3(v, 2, flags);
71333 sqlite3VdbeChangeP4(v, 2, pTab->zName, P4_TRANSIENT);
71334 #endif
71336 /* Remove either the OP_OpenWrite or OpenRead. Set the P2
71337 ** parameter of the other to pTab->tnum. */
71338 sqlite3VdbeChangeToNoop(v, 4 - flags);
71339 sqlite3VdbeChangeP2(v, 3 + flags, pTab->tnum);
71340 sqlite3VdbeChangeP3(v, 3 + flags, iDb);
71342 /* Configure the number of columns. Configure the cursor to
71343 ** think that the table has one more column than it really
71344 ** does. An OP_Column to retrieve this imaginary column will
71345 ** always return an SQL NULL. This is useful because it means
71346 ** we can invoke OP_Column to fill in the vdbe cursors type
71347 ** and offset cache without causing any IO.
71349 sqlite3VdbeChangeP4(v, 3+flags, SQLITE_INT_TO_PTR(pTab->nCol+1),P4_INT32);
71350 sqlite3VdbeChangeP2(v, 7, pTab->nCol);
71351 if( !db->mallocFailed ){
71352 pParse->nVar = 1;
71353 pParse->nMem = 1;
71354 pParse->nTab = 1;
71355 sqlite3VdbeMakeReady(v, pParse);
71359 pBlob->flags = flags;
71360 pBlob->iCol = iCol;
71361 pBlob->db = db;
71362 sqlite3BtreeLeaveAll(db);
71363 if( db->mallocFailed ){
71364 goto blob_open_out;
71366 sqlite3_bind_int64(pBlob->pStmt, 1, iRow);
71367 rc = blobSeekToRow(pBlob, iRow, &zErr);
71368 } while( (++nAttempt)<5 && rc==SQLITE_SCHEMA );
71370 blob_open_out:
71371 if( rc==SQLITE_OK && db->mallocFailed==0 ){
71372 *ppBlob = (sqlite3_blob *)pBlob;
71373 }else{
71374 if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt);
71375 sqlite3DbFree(db, pBlob);
71377 sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
71378 sqlite3DbFree(db, zErr);
71379 sqlite3StackFree(db, pParse);
71380 rc = sqlite3ApiExit(db, rc);
71381 sqlite3_mutex_leave(db->mutex);
71382 return rc;
71386 ** Close a blob handle that was previously created using
71387 ** sqlite3_blob_open().
71389 SQLITE_API int sqlite3_blob_close(sqlite3_blob *pBlob){
71390 Incrblob *p = (Incrblob *)pBlob;
71391 int rc;
71392 sqlite3 *db;
71394 if( p ){
71395 db = p->db;
71396 sqlite3_mutex_enter(db->mutex);
71397 rc = sqlite3_finalize(p->pStmt);
71398 sqlite3DbFree(db, p);
71399 sqlite3_mutex_leave(db->mutex);
71400 }else{
71401 rc = SQLITE_OK;
71403 return rc;
71407 ** Perform a read or write operation on a blob
71409 static int blobReadWrite(
71410 sqlite3_blob *pBlob,
71411 void *z,
71412 int n,
71413 int iOffset,
71414 int (*xCall)(BtCursor*, u32, u32, void*)
71416 int rc;
71417 Incrblob *p = (Incrblob *)pBlob;
71418 Vdbe *v;
71419 sqlite3 *db;
71421 if( p==0 ) return SQLITE_MISUSE_BKPT;
71422 db = p->db;
71423 sqlite3_mutex_enter(db->mutex);
71424 v = (Vdbe*)p->pStmt;
71426 if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
71427 /* Request is out of range. Return a transient error. */
71428 rc = SQLITE_ERROR;
71429 sqlite3Error(db, SQLITE_ERROR, 0);
71430 }else if( v==0 ){
71431 /* If there is no statement handle, then the blob-handle has
71432 ** already been invalidated. Return SQLITE_ABORT in this case.
71434 rc = SQLITE_ABORT;
71435 }else{
71436 /* Call either BtreeData() or BtreePutData(). If SQLITE_ABORT is
71437 ** returned, clean-up the statement handle.
71439 assert( db == v->db );
71440 sqlite3BtreeEnterCursor(p->pCsr);
71441 rc = xCall(p->pCsr, iOffset+p->iOffset, n, z);
71442 sqlite3BtreeLeaveCursor(p->pCsr);
71443 if( rc==SQLITE_ABORT ){
71444 sqlite3VdbeFinalize(v);
71445 p->pStmt = 0;
71446 }else{
71447 db->errCode = rc;
71448 v->rc = rc;
71451 rc = sqlite3ApiExit(db, rc);
71452 sqlite3_mutex_leave(db->mutex);
71453 return rc;
71457 ** Read data from a blob handle.
71459 SQLITE_API int sqlite3_blob_read(sqlite3_blob *pBlob, void *z, int n, int iOffset){
71460 return blobReadWrite(pBlob, z, n, iOffset, sqlite3BtreeData);
71464 ** Write data to a blob handle.
71466 SQLITE_API int sqlite3_blob_write(sqlite3_blob *pBlob, const void *z, int n, int iOffset){
71467 return blobReadWrite(pBlob, (void *)z, n, iOffset, sqlite3BtreePutData);
71471 ** Query a blob handle for the size of the data.
71473 ** The Incrblob.nByte field is fixed for the lifetime of the Incrblob
71474 ** so no mutex is required for access.
71476 SQLITE_API int sqlite3_blob_bytes(sqlite3_blob *pBlob){
71477 Incrblob *p = (Incrblob *)pBlob;
71478 return (p && p->pStmt) ? p->nByte : 0;
71482 ** Move an existing blob handle to point to a different row of the same
71483 ** database table.
71485 ** If an error occurs, or if the specified row does not exist or does not
71486 ** contain a blob or text value, then an error code is returned and the
71487 ** database handle error code and message set. If this happens, then all
71488 ** subsequent calls to sqlite3_blob_xxx() functions (except blob_close())
71489 ** immediately return SQLITE_ABORT.
71491 SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
71492 int rc;
71493 Incrblob *p = (Incrblob *)pBlob;
71494 sqlite3 *db;
71496 if( p==0 ) return SQLITE_MISUSE_BKPT;
71497 db = p->db;
71498 sqlite3_mutex_enter(db->mutex);
71500 if( p->pStmt==0 ){
71501 /* If there is no statement handle, then the blob-handle has
71502 ** already been invalidated. Return SQLITE_ABORT in this case.
71504 rc = SQLITE_ABORT;
71505 }else{
71506 char *zErr;
71507 rc = blobSeekToRow(p, iRow, &zErr);
71508 if( rc!=SQLITE_OK ){
71509 sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
71510 sqlite3DbFree(db, zErr);
71512 assert( rc!=SQLITE_SCHEMA );
71515 rc = sqlite3ApiExit(db, rc);
71516 assert( rc==SQLITE_OK || p->pStmt==0 );
71517 sqlite3_mutex_leave(db->mutex);
71518 return rc;
71521 #endif /* #ifndef SQLITE_OMIT_INCRBLOB */
71523 /************** End of vdbeblob.c ********************************************/
71524 /************** Begin file vdbesort.c ****************************************/
71526 ** 2011 July 9
71528 ** The author disclaims copyright to this source code. In place of
71529 ** a legal notice, here is a blessing:
71531 ** May you do good and not evil.
71532 ** May you find forgiveness for yourself and forgive others.
71533 ** May you share freely, never taking more than you give.
71535 *************************************************************************
71536 ** This file contains code for the VdbeSorter object, used in concert with
71537 ** a VdbeCursor to sort large numbers of keys (as may be required, for
71538 ** example, by CREATE INDEX statements on tables too large to fit in main
71539 ** memory).
71543 #ifndef SQLITE_OMIT_MERGE_SORT
71545 typedef struct VdbeSorterIter VdbeSorterIter;
71546 typedef struct SorterRecord SorterRecord;
71549 ** NOTES ON DATA STRUCTURE USED FOR N-WAY MERGES:
71551 ** As keys are added to the sorter, they are written to disk in a series
71552 ** of sorted packed-memory-arrays (PMAs). The size of each PMA is roughly
71553 ** the same as the cache-size allowed for temporary databases. In order
71554 ** to allow the caller to extract keys from the sorter in sorted order,
71555 ** all PMAs currently stored on disk must be merged together. This comment
71556 ** describes the data structure used to do so. The structure supports
71557 ** merging any number of arrays in a single pass with no redundant comparison
71558 ** operations.
71560 ** The aIter[] array contains an iterator for each of the PMAs being merged.
71561 ** An aIter[] iterator either points to a valid key or else is at EOF. For
71562 ** the purposes of the paragraphs below, we assume that the array is actually
71563 ** N elements in size, where N is the smallest power of 2 greater to or equal
71564 ** to the number of iterators being merged. The extra aIter[] elements are
71565 ** treated as if they are empty (always at EOF).
71567 ** The aTree[] array is also N elements in size. The value of N is stored in
71568 ** the VdbeSorter.nTree variable.
71570 ** The final (N/2) elements of aTree[] contain the results of comparing
71571 ** pairs of iterator keys together. Element i contains the result of
71572 ** comparing aIter[2*i-N] and aIter[2*i-N+1]. Whichever key is smaller, the
71573 ** aTree element is set to the index of it.
71575 ** For the purposes of this comparison, EOF is considered greater than any
71576 ** other key value. If the keys are equal (only possible with two EOF
71577 ** values), it doesn't matter which index is stored.
71579 ** The (N/4) elements of aTree[] that preceed the final (N/2) described
71580 ** above contains the index of the smallest of each block of 4 iterators.
71581 ** And so on. So that aTree[1] contains the index of the iterator that
71582 ** currently points to the smallest key value. aTree[0] is unused.
71584 ** Example:
71586 ** aIter[0] -> Banana
71587 ** aIter[1] -> Feijoa
71588 ** aIter[2] -> Elderberry
71589 ** aIter[3] -> Currant
71590 ** aIter[4] -> Grapefruit
71591 ** aIter[5] -> Apple
71592 ** aIter[6] -> Durian
71593 ** aIter[7] -> EOF
71595 ** aTree[] = { X, 5 0, 5 0, 3, 5, 6 }
71597 ** The current element is "Apple" (the value of the key indicated by
71598 ** iterator 5). When the Next() operation is invoked, iterator 5 will
71599 ** be advanced to the next key in its segment. Say the next key is
71600 ** "Eggplant":
71602 ** aIter[5] -> Eggplant
71604 ** The contents of aTree[] are updated first by comparing the new iterator
71605 ** 5 key to the current key of iterator 4 (still "Grapefruit"). The iterator
71606 ** 5 value is still smaller, so aTree[6] is set to 5. And so on up the tree.
71607 ** The value of iterator 6 - "Durian" - is now smaller than that of iterator
71608 ** 5, so aTree[3] is set to 6. Key 0 is smaller than key 6 (Banana<Durian),
71609 ** so the value written into element 1 of the array is 0. As follows:
71611 ** aTree[] = { X, 0 0, 6 0, 3, 5, 6 }
71613 ** In other words, each time we advance to the next sorter element, log2(N)
71614 ** key comparison operations are required, where N is the number of segments
71615 ** being merged (rounded up to the next power of 2).
71617 struct VdbeSorter {
71618 int nInMemory; /* Current size of pRecord list as PMA */
71619 int nTree; /* Used size of aTree/aIter (power of 2) */
71620 VdbeSorterIter *aIter; /* Array of iterators to merge */
71621 int *aTree; /* Current state of incremental merge */
71622 i64 iWriteOff; /* Current write offset within file pTemp1 */
71623 i64 iReadOff; /* Current read offset within file pTemp1 */
71624 sqlite3_file *pTemp1; /* PMA file 1 */
71625 int nPMA; /* Number of PMAs stored in pTemp1 */
71626 SorterRecord *pRecord; /* Head of in-memory record list */
71627 int mnPmaSize; /* Minimum PMA size, in bytes */
71628 int mxPmaSize; /* Maximum PMA size, in bytes. 0==no limit */
71629 UnpackedRecord *pUnpacked; /* Used to unpack keys */
71633 ** The following type is an iterator for a PMA. It caches the current key in
71634 ** variables nKey/aKey. If the iterator is at EOF, pFile==0.
71636 struct VdbeSorterIter {
71637 i64 iReadOff; /* Current read offset */
71638 i64 iEof; /* 1 byte past EOF for this iterator */
71639 sqlite3_file *pFile; /* File iterator is reading from */
71640 int nAlloc; /* Bytes of space at aAlloc */
71641 u8 *aAlloc; /* Allocated space */
71642 int nKey; /* Number of bytes in key */
71643 u8 *aKey; /* Pointer to current key */
71647 ** A structure to store a single record. All in-memory records are connected
71648 ** together into a linked list headed at VdbeSorter.pRecord using the
71649 ** SorterRecord.pNext pointer.
71651 struct SorterRecord {
71652 void *pVal;
71653 int nVal;
71654 SorterRecord *pNext;
71657 /* Minimum allowable value for the VdbeSorter.nWorking variable */
71658 #define SORTER_MIN_WORKING 10
71660 /* Maximum number of segments to merge in a single pass. */
71661 #define SORTER_MAX_MERGE_COUNT 16
71664 ** Free all memory belonging to the VdbeSorterIter object passed as the second
71665 ** argument. All structure fields are set to zero before returning.
71667 static void vdbeSorterIterZero(sqlite3 *db, VdbeSorterIter *pIter){
71668 sqlite3DbFree(db, pIter->aAlloc);
71669 memset(pIter, 0, sizeof(VdbeSorterIter));
71673 ** Advance iterator pIter to the next key in its PMA. Return SQLITE_OK if
71674 ** no error occurs, or an SQLite error code if one does.
71676 static int vdbeSorterIterNext(
71677 sqlite3 *db, /* Database handle (for sqlite3DbMalloc() ) */
71678 VdbeSorterIter *pIter /* Iterator to advance */
71680 int rc; /* Return Code */
71681 int nRead; /* Number of bytes read */
71682 int nRec = 0; /* Size of record in bytes */
71683 int iOff = 0; /* Size of serialized size varint in bytes */
71685 assert( pIter->iEof>=pIter->iReadOff );
71686 if( pIter->iEof-pIter->iReadOff>5 ){
71687 nRead = 5;
71688 }else{
71689 nRead = (int)(pIter->iEof - pIter->iReadOff);
71691 if( nRead<=0 ){
71692 /* This is an EOF condition */
71693 vdbeSorterIterZero(db, pIter);
71694 return SQLITE_OK;
71697 rc = sqlite3OsRead(pIter->pFile, pIter->aAlloc, nRead, pIter->iReadOff);
71698 if( rc==SQLITE_OK ){
71699 iOff = getVarint32(pIter->aAlloc, nRec);
71700 if( (iOff+nRec)>nRead ){
71701 int nRead2; /* Number of extra bytes to read */
71702 if( (iOff+nRec)>pIter->nAlloc ){
71703 int nNew = pIter->nAlloc*2;
71704 while( (iOff+nRec)>nNew ) nNew = nNew*2;
71705 pIter->aAlloc = sqlite3DbReallocOrFree(db, pIter->aAlloc, nNew);
71706 if( !pIter->aAlloc ) return SQLITE_NOMEM;
71707 pIter->nAlloc = nNew;
71710 nRead2 = iOff + nRec - nRead;
71711 rc = sqlite3OsRead(
71712 pIter->pFile, &pIter->aAlloc[nRead], nRead2, pIter->iReadOff+nRead
71717 assert( rc!=SQLITE_OK || nRec>0 );
71718 pIter->iReadOff += iOff+nRec;
71719 pIter->nKey = nRec;
71720 pIter->aKey = &pIter->aAlloc[iOff];
71721 return rc;
71725 ** Write a single varint, value iVal, to file-descriptor pFile. Return
71726 ** SQLITE_OK if successful, or an SQLite error code if some error occurs.
71728 ** The value of *piOffset when this function is called is used as the byte
71729 ** offset in file pFile to write to. Before returning, *piOffset is
71730 ** incremented by the number of bytes written.
71732 static int vdbeSorterWriteVarint(
71733 sqlite3_file *pFile, /* File to write to */
71734 i64 iVal, /* Value to write as a varint */
71735 i64 *piOffset /* IN/OUT: Write offset in file pFile */
71737 u8 aVarint[9]; /* Buffer large enough for a varint */
71738 int nVarint; /* Number of used bytes in varint */
71739 int rc; /* Result of write() call */
71741 nVarint = sqlite3PutVarint(aVarint, iVal);
71742 rc = sqlite3OsWrite(pFile, aVarint, nVarint, *piOffset);
71743 *piOffset += nVarint;
71745 return rc;
71749 ** Read a single varint from file-descriptor pFile. Return SQLITE_OK if
71750 ** successful, or an SQLite error code if some error occurs.
71752 ** The value of *piOffset when this function is called is used as the
71753 ** byte offset in file pFile from whence to read the varint. If successful
71754 ** (i.e. if no IO error occurs), then *piOffset is set to the offset of
71755 ** the first byte past the end of the varint before returning. *piVal is
71756 ** set to the integer value read. If an error occurs, the final values of
71757 ** both *piOffset and *piVal are undefined.
71759 static int vdbeSorterReadVarint(
71760 sqlite3_file *pFile, /* File to read from */
71761 i64 *piOffset, /* IN/OUT: Read offset in pFile */
71762 i64 *piVal /* OUT: Value read from file */
71764 u8 aVarint[9]; /* Buffer large enough for a varint */
71765 i64 iOff = *piOffset; /* Offset in file to read from */
71766 int rc; /* Return code */
71768 rc = sqlite3OsRead(pFile, aVarint, 9, iOff);
71769 if( rc==SQLITE_OK ){
71770 *piOffset += getVarint(aVarint, (u64 *)piVal);
71773 return rc;
71777 ** Initialize iterator pIter to scan through the PMA stored in file pFile
71778 ** starting at offset iStart and ending at offset iEof-1. This function
71779 ** leaves the iterator pointing to the first key in the PMA (or EOF if the
71780 ** PMA is empty).
71782 static int vdbeSorterIterInit(
71783 sqlite3 *db, /* Database handle */
71784 VdbeSorter *pSorter, /* Sorter object */
71785 i64 iStart, /* Start offset in pFile */
71786 VdbeSorterIter *pIter, /* Iterator to populate */
71787 i64 *pnByte /* IN/OUT: Increment this value by PMA size */
71789 int rc;
71791 assert( pSorter->iWriteOff>iStart );
71792 assert( pIter->aAlloc==0 );
71793 pIter->pFile = pSorter->pTemp1;
71794 pIter->iReadOff = iStart;
71795 pIter->nAlloc = 128;
71796 pIter->aAlloc = (u8 *)sqlite3DbMallocRaw(db, pIter->nAlloc);
71797 if( !pIter->aAlloc ){
71798 rc = SQLITE_NOMEM;
71799 }else{
71800 i64 nByte; /* Total size of PMA in bytes */
71801 rc = vdbeSorterReadVarint(pSorter->pTemp1, &pIter->iReadOff, &nByte);
71802 *pnByte += nByte;
71803 pIter->iEof = pIter->iReadOff + nByte;
71805 if( rc==SQLITE_OK ){
71806 rc = vdbeSorterIterNext(db, pIter);
71808 return rc;
71813 ** Compare key1 (buffer pKey1, size nKey1 bytes) with key2 (buffer pKey2,
71814 ** size nKey2 bytes). Argument pKeyInfo supplies the collation functions
71815 ** used by the comparison. If an error occurs, return an SQLite error code.
71816 ** Otherwise, return SQLITE_OK and set *pRes to a negative, zero or positive
71817 ** value, depending on whether key1 is smaller, equal to or larger than key2.
71819 ** If the bOmitRowid argument is non-zero, assume both keys end in a rowid
71820 ** field. For the purposes of the comparison, ignore it. Also, if bOmitRowid
71821 ** is true and key1 contains even a single NULL value, it is considered to
71822 ** be less than key2. Even if key2 also contains NULL values.
71824 ** If pKey2 is passed a NULL pointer, then it is assumed that the pCsr->aSpace
71825 ** has been allocated and contains an unpacked record that is used as key2.
71827 static void vdbeSorterCompare(
71828 VdbeCursor *pCsr, /* Cursor object (for pKeyInfo) */
71829 int bOmitRowid, /* Ignore rowid field at end of keys */
71830 void *pKey1, int nKey1, /* Left side of comparison */
71831 void *pKey2, int nKey2, /* Right side of comparison */
71832 int *pRes /* OUT: Result of comparison */
71834 KeyInfo *pKeyInfo = pCsr->pKeyInfo;
71835 VdbeSorter *pSorter = pCsr->pSorter;
71836 UnpackedRecord *r2 = pSorter->pUnpacked;
71837 int i;
71839 if( pKey2 ){
71840 sqlite3VdbeRecordUnpack(pKeyInfo, nKey2, pKey2, r2);
71843 if( bOmitRowid ){
71844 r2->nField = pKeyInfo->nField;
71845 assert( r2->nField>0 );
71846 for(i=0; i<r2->nField; i++){
71847 if( r2->aMem[i].flags & MEM_Null ){
71848 *pRes = -1;
71849 return;
71852 r2->flags |= UNPACKED_PREFIX_MATCH;
71855 *pRes = sqlite3VdbeRecordCompare(nKey1, pKey1, r2);
71859 ** This function is called to compare two iterator keys when merging
71860 ** multiple b-tree segments. Parameter iOut is the index of the aTree[]
71861 ** value to recalculate.
71863 static int vdbeSorterDoCompare(VdbeCursor *pCsr, int iOut){
71864 VdbeSorter *pSorter = pCsr->pSorter;
71865 int i1;
71866 int i2;
71867 int iRes;
71868 VdbeSorterIter *p1;
71869 VdbeSorterIter *p2;
71871 assert( iOut<pSorter->nTree && iOut>0 );
71873 if( iOut>=(pSorter->nTree/2) ){
71874 i1 = (iOut - pSorter->nTree/2) * 2;
71875 i2 = i1 + 1;
71876 }else{
71877 i1 = pSorter->aTree[iOut*2];
71878 i2 = pSorter->aTree[iOut*2+1];
71881 p1 = &pSorter->aIter[i1];
71882 p2 = &pSorter->aIter[i2];
71884 if( p1->pFile==0 ){
71885 iRes = i2;
71886 }else if( p2->pFile==0 ){
71887 iRes = i1;
71888 }else{
71889 int res;
71890 assert( pCsr->pSorter->pUnpacked!=0 ); /* allocated in vdbeSorterMerge() */
71891 vdbeSorterCompare(
71892 pCsr, 0, p1->aKey, p1->nKey, p2->aKey, p2->nKey, &res
71894 if( res<=0 ){
71895 iRes = i1;
71896 }else{
71897 iRes = i2;
71901 pSorter->aTree[iOut] = iRes;
71902 return SQLITE_OK;
71906 ** Initialize the temporary index cursor just opened as a sorter cursor.
71908 SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *db, VdbeCursor *pCsr){
71909 int pgsz; /* Page size of main database */
71910 int mxCache; /* Cache size */
71911 VdbeSorter *pSorter; /* The new sorter */
71912 char *d; /* Dummy */
71914 assert( pCsr->pKeyInfo && pCsr->pBt==0 );
71915 pCsr->pSorter = pSorter = sqlite3DbMallocZero(db, sizeof(VdbeSorter));
71916 if( pSorter==0 ){
71917 return SQLITE_NOMEM;
71920 pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pCsr->pKeyInfo, 0, 0, &d);
71921 if( pSorter->pUnpacked==0 ) return SQLITE_NOMEM;
71922 assert( pSorter->pUnpacked==(UnpackedRecord *)d );
71924 if( !sqlite3TempInMemory(db) ){
71925 pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
71926 pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
71927 mxCache = db->aDb[0].pSchema->cache_size;
71928 if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
71929 pSorter->mxPmaSize = mxCache * pgsz;
71932 return SQLITE_OK;
71936 ** Free the list of sorted records starting at pRecord.
71938 static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){
71939 SorterRecord *p;
71940 SorterRecord *pNext;
71941 for(p=pRecord; p; p=pNext){
71942 pNext = p->pNext;
71943 sqlite3DbFree(db, p);
71948 ** Free any cursor components allocated by sqlite3VdbeSorterXXX routines.
71950 SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){
71951 VdbeSorter *pSorter = pCsr->pSorter;
71952 if( pSorter ){
71953 if( pSorter->aIter ){
71954 int i;
71955 for(i=0; i<pSorter->nTree; i++){
71956 vdbeSorterIterZero(db, &pSorter->aIter[i]);
71958 sqlite3DbFree(db, pSorter->aIter);
71960 if( pSorter->pTemp1 ){
71961 sqlite3OsCloseFree(pSorter->pTemp1);
71963 vdbeSorterRecordFree(db, pSorter->pRecord);
71964 sqlite3DbFree(db, pSorter->pUnpacked);
71965 sqlite3DbFree(db, pSorter);
71966 pCsr->pSorter = 0;
71971 ** Allocate space for a file-handle and open a temporary file. If successful,
71972 ** set *ppFile to point to the malloc'd file-handle and return SQLITE_OK.
71973 ** Otherwise, set *ppFile to 0 and return an SQLite error code.
71975 static int vdbeSorterOpenTempFile(sqlite3 *db, sqlite3_file **ppFile){
71976 int dummy;
71977 return sqlite3OsOpenMalloc(db->pVfs, 0, ppFile,
71978 SQLITE_OPEN_TEMP_JOURNAL |
71979 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
71980 SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE, &dummy
71985 ** Merge the two sorted lists p1 and p2 into a single list.
71986 ** Set *ppOut to the head of the new list.
71988 static void vdbeSorterMerge(
71989 VdbeCursor *pCsr, /* For pKeyInfo */
71990 SorterRecord *p1, /* First list to merge */
71991 SorterRecord *p2, /* Second list to merge */
71992 SorterRecord **ppOut /* OUT: Head of merged list */
71994 SorterRecord *pFinal = 0;
71995 SorterRecord **pp = &pFinal;
71996 void *pVal2 = p2 ? p2->pVal : 0;
71998 while( p1 && p2 ){
71999 int res;
72000 vdbeSorterCompare(pCsr, 0, p1->pVal, p1->nVal, pVal2, p2->nVal, &res);
72001 if( res<=0 ){
72002 *pp = p1;
72003 pp = &p1->pNext;
72004 p1 = p1->pNext;
72005 pVal2 = 0;
72006 }else{
72007 *pp = p2;
72008 pp = &p2->pNext;
72009 p2 = p2->pNext;
72010 if( p2==0 ) break;
72011 pVal2 = p2->pVal;
72014 *pp = p1 ? p1 : p2;
72015 *ppOut = pFinal;
72019 ** Sort the linked list of records headed at pCsr->pRecord. Return SQLITE_OK
72020 ** if successful, or an SQLite error code (i.e. SQLITE_NOMEM) if an error
72021 ** occurs.
72023 static int vdbeSorterSort(VdbeCursor *pCsr){
72024 int i;
72025 SorterRecord **aSlot;
72026 SorterRecord *p;
72027 VdbeSorter *pSorter = pCsr->pSorter;
72029 aSlot = (SorterRecord **)sqlite3MallocZero(64 * sizeof(SorterRecord *));
72030 if( !aSlot ){
72031 return SQLITE_NOMEM;
72034 p = pSorter->pRecord;
72035 while( p ){
72036 SorterRecord *pNext = p->pNext;
72037 p->pNext = 0;
72038 for(i=0; aSlot[i]; i++){
72039 vdbeSorterMerge(pCsr, p, aSlot[i], &p);
72040 aSlot[i] = 0;
72042 aSlot[i] = p;
72043 p = pNext;
72046 p = 0;
72047 for(i=0; i<64; i++){
72048 vdbeSorterMerge(pCsr, p, aSlot[i], &p);
72050 pSorter->pRecord = p;
72052 sqlite3_free(aSlot);
72053 return SQLITE_OK;
72058 ** Write the current contents of the in-memory linked-list to a PMA. Return
72059 ** SQLITE_OK if successful, or an SQLite error code otherwise.
72061 ** The format of a PMA is:
72063 ** * A varint. This varint contains the total number of bytes of content
72064 ** in the PMA (not including the varint itself).
72066 ** * One or more records packed end-to-end in order of ascending keys.
72067 ** Each record consists of a varint followed by a blob of data (the
72068 ** key). The varint is the number of bytes in the blob of data.
72070 static int vdbeSorterListToPMA(sqlite3 *db, VdbeCursor *pCsr){
72071 int rc = SQLITE_OK; /* Return code */
72072 VdbeSorter *pSorter = pCsr->pSorter;
72074 if( pSorter->nInMemory==0 ){
72075 assert( pSorter->pRecord==0 );
72076 return rc;
72079 rc = vdbeSorterSort(pCsr);
72081 /* If the first temporary PMA file has not been opened, open it now. */
72082 if( rc==SQLITE_OK && pSorter->pTemp1==0 ){
72083 rc = vdbeSorterOpenTempFile(db, &pSorter->pTemp1);
72084 assert( rc!=SQLITE_OK || pSorter->pTemp1 );
72085 assert( pSorter->iWriteOff==0 );
72086 assert( pSorter->nPMA==0 );
72089 if( rc==SQLITE_OK ){
72090 i64 iOff = pSorter->iWriteOff;
72091 SorterRecord *p;
72092 SorterRecord *pNext = 0;
72093 static const char eightZeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
72095 pSorter->nPMA++;
72096 rc = vdbeSorterWriteVarint(pSorter->pTemp1, pSorter->nInMemory, &iOff);
72097 for(p=pSorter->pRecord; rc==SQLITE_OK && p; p=pNext){
72098 pNext = p->pNext;
72099 rc = vdbeSorterWriteVarint(pSorter->pTemp1, p->nVal, &iOff);
72101 if( rc==SQLITE_OK ){
72102 rc = sqlite3OsWrite(pSorter->pTemp1, p->pVal, p->nVal, iOff);
72103 iOff += p->nVal;
72106 sqlite3DbFree(db, p);
72109 /* This assert verifies that unless an error has occurred, the size of
72110 ** the PMA on disk is the same as the expected size stored in
72111 ** pSorter->nInMemory. */
72112 assert( rc!=SQLITE_OK || pSorter->nInMemory==(
72113 iOff-pSorter->iWriteOff-sqlite3VarintLen(pSorter->nInMemory)
72116 pSorter->iWriteOff = iOff;
72117 if( rc==SQLITE_OK ){
72118 /* Terminate each file with 8 extra bytes so that from any offset
72119 ** in the file we can always read 9 bytes without a SHORT_READ error */
72120 rc = sqlite3OsWrite(pSorter->pTemp1, eightZeros, 8, iOff);
72122 pSorter->pRecord = p;
72125 return rc;
72129 ** Add a record to the sorter.
72131 SQLITE_PRIVATE int sqlite3VdbeSorterWrite(
72132 sqlite3 *db, /* Database handle */
72133 VdbeCursor *pCsr, /* Sorter cursor */
72134 Mem *pVal /* Memory cell containing record */
72136 VdbeSorter *pSorter = pCsr->pSorter;
72137 int rc = SQLITE_OK; /* Return Code */
72138 SorterRecord *pNew; /* New list element */
72140 assert( pSorter );
72141 pSorter->nInMemory += sqlite3VarintLen(pVal->n) + pVal->n;
72143 pNew = (SorterRecord *)sqlite3DbMallocRaw(db, pVal->n + sizeof(SorterRecord));
72144 if( pNew==0 ){
72145 rc = SQLITE_NOMEM;
72146 }else{
72147 pNew->pVal = (void *)&pNew[1];
72148 memcpy(pNew->pVal, pVal->z, pVal->n);
72149 pNew->nVal = pVal->n;
72150 pNew->pNext = pSorter->pRecord;
72151 pSorter->pRecord = pNew;
72154 /* See if the contents of the sorter should now be written out. They
72155 ** are written out when either of the following are true:
72157 ** * The total memory allocated for the in-memory list is greater
72158 ** than (page-size * cache-size), or
72160 ** * The total memory allocated for the in-memory list is greater
72161 ** than (page-size * 10) and sqlite3HeapNearlyFull() returns true.
72163 if( rc==SQLITE_OK && pSorter->mxPmaSize>0 && (
72164 (pSorter->nInMemory>pSorter->mxPmaSize)
72165 || (pSorter->nInMemory>pSorter->mnPmaSize && sqlite3HeapNearlyFull())
72167 rc = vdbeSorterListToPMA(db, pCsr);
72168 pSorter->nInMemory = 0;
72171 return rc;
72175 ** Helper function for sqlite3VdbeSorterRewind().
72177 static int vdbeSorterInitMerge(
72178 sqlite3 *db, /* Database handle */
72179 VdbeCursor *pCsr, /* Cursor handle for this sorter */
72180 i64 *pnByte /* Sum of bytes in all opened PMAs */
72182 VdbeSorter *pSorter = pCsr->pSorter;
72183 int rc = SQLITE_OK; /* Return code */
72184 int i; /* Used to iterator through aIter[] */
72185 i64 nByte = 0; /* Total bytes in all opened PMAs */
72187 /* Initialize the iterators. */
72188 for(i=0; i<SORTER_MAX_MERGE_COUNT; i++){
72189 VdbeSorterIter *pIter = &pSorter->aIter[i];
72190 rc = vdbeSorterIterInit(db, pSorter, pSorter->iReadOff, pIter, &nByte);
72191 pSorter->iReadOff = pIter->iEof;
72192 assert( rc!=SQLITE_OK || pSorter->iReadOff<=pSorter->iWriteOff );
72193 if( rc!=SQLITE_OK || pSorter->iReadOff>=pSorter->iWriteOff ) break;
72196 /* Initialize the aTree[] array. */
72197 for(i=pSorter->nTree-1; rc==SQLITE_OK && i>0; i--){
72198 rc = vdbeSorterDoCompare(pCsr, i);
72201 *pnByte = nByte;
72202 return rc;
72206 ** Once the sorter has been populated, this function is called to prepare
72207 ** for iterating through its contents in sorted order.
72209 SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
72210 VdbeSorter *pSorter = pCsr->pSorter;
72211 int rc; /* Return code */
72212 sqlite3_file *pTemp2 = 0; /* Second temp file to use */
72213 i64 iWrite2 = 0; /* Write offset for pTemp2 */
72214 int nIter; /* Number of iterators used */
72215 int nByte; /* Bytes of space required for aIter/aTree */
72216 int N = 2; /* Power of 2 >= nIter */
72218 assert( pSorter );
72220 /* If no data has been written to disk, then do not do so now. Instead,
72221 ** sort the VdbeSorter.pRecord list. The vdbe layer will read data directly
72222 ** from the in-memory list. */
72223 if( pSorter->nPMA==0 ){
72224 *pbEof = !pSorter->pRecord;
72225 assert( pSorter->aTree==0 );
72226 return vdbeSorterSort(pCsr);
72229 /* Write the current b-tree to a PMA. Close the b-tree cursor. */
72230 rc = vdbeSorterListToPMA(db, pCsr);
72231 if( rc!=SQLITE_OK ) return rc;
72233 /* Allocate space for aIter[] and aTree[]. */
72234 nIter = pSorter->nPMA;
72235 if( nIter>SORTER_MAX_MERGE_COUNT ) nIter = SORTER_MAX_MERGE_COUNT;
72236 assert( nIter>0 );
72237 while( N<nIter ) N += N;
72238 nByte = N * (sizeof(int) + sizeof(VdbeSorterIter));
72239 pSorter->aIter = (VdbeSorterIter *)sqlite3DbMallocZero(db, nByte);
72240 if( !pSorter->aIter ) return SQLITE_NOMEM;
72241 pSorter->aTree = (int *)&pSorter->aIter[N];
72242 pSorter->nTree = N;
72244 do {
72245 int iNew; /* Index of new, merged, PMA */
72247 for(iNew=0;
72248 rc==SQLITE_OK && iNew*SORTER_MAX_MERGE_COUNT<pSorter->nPMA;
72249 iNew++
72251 i64 nWrite; /* Number of bytes in new PMA */
72253 /* If there are SORTER_MAX_MERGE_COUNT or less PMAs in file pTemp1,
72254 ** initialize an iterator for each of them and break out of the loop.
72255 ** These iterators will be incrementally merged as the VDBE layer calls
72256 ** sqlite3VdbeSorterNext().
72258 ** Otherwise, if pTemp1 contains more than SORTER_MAX_MERGE_COUNT PMAs,
72259 ** initialize interators for SORTER_MAX_MERGE_COUNT of them. These PMAs
72260 ** are merged into a single PMA that is written to file pTemp2.
72262 rc = vdbeSorterInitMerge(db, pCsr, &nWrite);
72263 assert( rc!=SQLITE_OK || pSorter->aIter[ pSorter->aTree[1] ].pFile );
72264 if( rc!=SQLITE_OK || pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
72265 break;
72268 /* Open the second temp file, if it is not already open. */
72269 if( pTemp2==0 ){
72270 assert( iWrite2==0 );
72271 rc = vdbeSorterOpenTempFile(db, &pTemp2);
72274 if( rc==SQLITE_OK ){
72275 rc = vdbeSorterWriteVarint(pTemp2, nWrite, &iWrite2);
72278 if( rc==SQLITE_OK ){
72279 int bEof = 0;
72280 while( rc==SQLITE_OK && bEof==0 ){
72281 int nToWrite;
72282 VdbeSorterIter *pIter = &pSorter->aIter[ pSorter->aTree[1] ];
72283 assert( pIter->pFile );
72284 nToWrite = pIter->nKey + sqlite3VarintLen(pIter->nKey);
72285 rc = sqlite3OsWrite(pTemp2, pIter->aAlloc, nToWrite, iWrite2);
72286 iWrite2 += nToWrite;
72287 if( rc==SQLITE_OK ){
72288 rc = sqlite3VdbeSorterNext(db, pCsr, &bEof);
72294 if( pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
72295 break;
72296 }else{
72297 sqlite3_file *pTmp = pSorter->pTemp1;
72298 pSorter->nPMA = iNew;
72299 pSorter->pTemp1 = pTemp2;
72300 pTemp2 = pTmp;
72301 pSorter->iWriteOff = iWrite2;
72302 pSorter->iReadOff = 0;
72303 iWrite2 = 0;
72305 }while( rc==SQLITE_OK );
72307 if( pTemp2 ){
72308 sqlite3OsCloseFree(pTemp2);
72310 *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
72311 return rc;
72315 ** Advance to the next element in the sorter.
72317 SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
72318 VdbeSorter *pSorter = pCsr->pSorter;
72319 int rc; /* Return code */
72321 if( pSorter->aTree ){
72322 int iPrev = pSorter->aTree[1];/* Index of iterator to advance */
72323 int i; /* Index of aTree[] to recalculate */
72325 rc = vdbeSorterIterNext(db, &pSorter->aIter[iPrev]);
72326 for(i=(pSorter->nTree+iPrev)/2; rc==SQLITE_OK && i>0; i=i/2){
72327 rc = vdbeSorterDoCompare(pCsr, i);
72330 *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
72331 }else{
72332 SorterRecord *pFree = pSorter->pRecord;
72333 pSorter->pRecord = pFree->pNext;
72334 pFree->pNext = 0;
72335 vdbeSorterRecordFree(db, pFree);
72336 *pbEof = !pSorter->pRecord;
72337 rc = SQLITE_OK;
72339 return rc;
72343 ** Return a pointer to a buffer owned by the sorter that contains the
72344 ** current key.
72346 static void *vdbeSorterRowkey(
72347 VdbeSorter *pSorter, /* Sorter object */
72348 int *pnKey /* OUT: Size of current key in bytes */
72350 void *pKey;
72351 if( pSorter->aTree ){
72352 VdbeSorterIter *pIter;
72353 pIter = &pSorter->aIter[ pSorter->aTree[1] ];
72354 *pnKey = pIter->nKey;
72355 pKey = pIter->aKey;
72356 }else{
72357 *pnKey = pSorter->pRecord->nVal;
72358 pKey = pSorter->pRecord->pVal;
72360 return pKey;
72364 ** Copy the current sorter key into the memory cell pOut.
72366 SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *pCsr, Mem *pOut){
72367 VdbeSorter *pSorter = pCsr->pSorter;
72368 void *pKey; int nKey; /* Sorter key to copy into pOut */
72370 pKey = vdbeSorterRowkey(pSorter, &nKey);
72371 if( sqlite3VdbeMemGrow(pOut, nKey, 0) ){
72372 return SQLITE_NOMEM;
72374 pOut->n = nKey;
72375 MemSetTypeFlag(pOut, MEM_Blob);
72376 memcpy(pOut->z, pKey, nKey);
72378 return SQLITE_OK;
72382 ** Compare the key in memory cell pVal with the key that the sorter cursor
72383 ** passed as the first argument currently points to. For the purposes of
72384 ** the comparison, ignore the rowid field at the end of each record.
72386 ** If an error occurs, return an SQLite error code (i.e. SQLITE_NOMEM).
72387 ** Otherwise, set *pRes to a negative, zero or positive value if the
72388 ** key in pVal is smaller than, equal to or larger than the current sorter
72389 ** key.
72391 SQLITE_PRIVATE int sqlite3VdbeSorterCompare(
72392 VdbeCursor *pCsr, /* Sorter cursor */
72393 Mem *pVal, /* Value to compare to current sorter key */
72394 int *pRes /* OUT: Result of comparison */
72396 VdbeSorter *pSorter = pCsr->pSorter;
72397 void *pKey; int nKey; /* Sorter key to compare pVal with */
72399 pKey = vdbeSorterRowkey(pSorter, &nKey);
72400 vdbeSorterCompare(pCsr, 1, pVal->z, pVal->n, pKey, nKey, pRes);
72401 return SQLITE_OK;
72404 #endif /* #ifndef SQLITE_OMIT_MERGE_SORT */
72406 /************** End of vdbesort.c ********************************************/
72407 /************** Begin file journal.c *****************************************/
72409 ** 2007 August 22
72411 ** The author disclaims copyright to this source code. In place of
72412 ** a legal notice, here is a blessing:
72414 ** May you do good and not evil.
72415 ** May you find forgiveness for yourself and forgive others.
72416 ** May you share freely, never taking more than you give.
72418 *************************************************************************
72420 ** This file implements a special kind of sqlite3_file object used
72421 ** by SQLite to create journal files if the atomic-write optimization
72422 ** is enabled.
72424 ** The distinctive characteristic of this sqlite3_file is that the
72425 ** actual on disk file is created lazily. When the file is created,
72426 ** the caller specifies a buffer size for an in-memory buffer to
72427 ** be used to service read() and write() requests. The actual file
72428 ** on disk is not created or populated until either:
72430 ** 1) The in-memory representation grows too large for the allocated
72431 ** buffer, or
72432 ** 2) The sqlite3JournalCreate() function is called.
72434 #ifdef SQLITE_ENABLE_ATOMIC_WRITE
72438 ** A JournalFile object is a subclass of sqlite3_file used by
72439 ** as an open file handle for journal files.
72441 struct JournalFile {
72442 sqlite3_io_methods *pMethod; /* I/O methods on journal files */
72443 int nBuf; /* Size of zBuf[] in bytes */
72444 char *zBuf; /* Space to buffer journal writes */
72445 int iSize; /* Amount of zBuf[] currently used */
72446 int flags; /* xOpen flags */
72447 sqlite3_vfs *pVfs; /* The "real" underlying VFS */
72448 sqlite3_file *pReal; /* The "real" underlying file descriptor */
72449 const char *zJournal; /* Name of the journal file */
72451 typedef struct JournalFile JournalFile;
72454 ** If it does not already exists, create and populate the on-disk file
72455 ** for JournalFile p.
72457 static int createFile(JournalFile *p){
72458 int rc = SQLITE_OK;
72459 if( !p->pReal ){
72460 sqlite3_file *pReal = (sqlite3_file *)&p[1];
72461 rc = sqlite3OsOpen(p->pVfs, p->zJournal, pReal, p->flags, 0);
72462 if( rc==SQLITE_OK ){
72463 p->pReal = pReal;
72464 if( p->iSize>0 ){
72465 assert(p->iSize<=p->nBuf);
72466 rc = sqlite3OsWrite(p->pReal, p->zBuf, p->iSize, 0);
72470 return rc;
72474 ** Close the file.
72476 static int jrnlClose(sqlite3_file *pJfd){
72477 JournalFile *p = (JournalFile *)pJfd;
72478 if( p->pReal ){
72479 sqlite3OsClose(p->pReal);
72481 sqlite3_free(p->zBuf);
72482 return SQLITE_OK;
72486 ** Read data from the file.
72488 static int jrnlRead(
72489 sqlite3_file *pJfd, /* The journal file from which to read */
72490 void *zBuf, /* Put the results here */
72491 int iAmt, /* Number of bytes to read */
72492 sqlite_int64 iOfst /* Begin reading at this offset */
72494 int rc = SQLITE_OK;
72495 JournalFile *p = (JournalFile *)pJfd;
72496 if( p->pReal ){
72497 rc = sqlite3OsRead(p->pReal, zBuf, iAmt, iOfst);
72498 }else if( (iAmt+iOfst)>p->iSize ){
72499 rc = SQLITE_IOERR_SHORT_READ;
72500 }else{
72501 memcpy(zBuf, &p->zBuf[iOfst], iAmt);
72503 return rc;
72507 ** Write data to the file.
72509 static int jrnlWrite(
72510 sqlite3_file *pJfd, /* The journal file into which to write */
72511 const void *zBuf, /* Take data to be written from here */
72512 int iAmt, /* Number of bytes to write */
72513 sqlite_int64 iOfst /* Begin writing at this offset into the file */
72515 int rc = SQLITE_OK;
72516 JournalFile *p = (JournalFile *)pJfd;
72517 if( !p->pReal && (iOfst+iAmt)>p->nBuf ){
72518 rc = createFile(p);
72520 if( rc==SQLITE_OK ){
72521 if( p->pReal ){
72522 rc = sqlite3OsWrite(p->pReal, zBuf, iAmt, iOfst);
72523 }else{
72524 memcpy(&p->zBuf[iOfst], zBuf, iAmt);
72525 if( p->iSize<(iOfst+iAmt) ){
72526 p->iSize = (iOfst+iAmt);
72530 return rc;
72534 ** Truncate the file.
72536 static int jrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
72537 int rc = SQLITE_OK;
72538 JournalFile *p = (JournalFile *)pJfd;
72539 if( p->pReal ){
72540 rc = sqlite3OsTruncate(p->pReal, size);
72541 }else if( size<p->iSize ){
72542 p->iSize = size;
72544 return rc;
72548 ** Sync the file.
72550 static int jrnlSync(sqlite3_file *pJfd, int flags){
72551 int rc;
72552 JournalFile *p = (JournalFile *)pJfd;
72553 if( p->pReal ){
72554 rc = sqlite3OsSync(p->pReal, flags);
72555 }else{
72556 rc = SQLITE_OK;
72558 return rc;
72562 ** Query the size of the file in bytes.
72564 static int jrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
72565 int rc = SQLITE_OK;
72566 JournalFile *p = (JournalFile *)pJfd;
72567 if( p->pReal ){
72568 rc = sqlite3OsFileSize(p->pReal, pSize);
72569 }else{
72570 *pSize = (sqlite_int64) p->iSize;
72572 return rc;
72576 ** Table of methods for JournalFile sqlite3_file object.
72578 static struct sqlite3_io_methods JournalFileMethods = {
72579 1, /* iVersion */
72580 jrnlClose, /* xClose */
72581 jrnlRead, /* xRead */
72582 jrnlWrite, /* xWrite */
72583 jrnlTruncate, /* xTruncate */
72584 jrnlSync, /* xSync */
72585 jrnlFileSize, /* xFileSize */
72586 0, /* xLock */
72587 0, /* xUnlock */
72588 0, /* xCheckReservedLock */
72589 0, /* xFileControl */
72590 0, /* xSectorSize */
72591 0, /* xDeviceCharacteristics */
72592 0, /* xShmMap */
72593 0, /* xShmLock */
72594 0, /* xShmBarrier */
72595 0 /* xShmUnmap */
72599 ** Open a journal file.
72601 SQLITE_PRIVATE int sqlite3JournalOpen(
72602 sqlite3_vfs *pVfs, /* The VFS to use for actual file I/O */
72603 const char *zName, /* Name of the journal file */
72604 sqlite3_file *pJfd, /* Preallocated, blank file handle */
72605 int flags, /* Opening flags */
72606 int nBuf /* Bytes buffered before opening the file */
72608 JournalFile *p = (JournalFile *)pJfd;
72609 memset(p, 0, sqlite3JournalSize(pVfs));
72610 if( nBuf>0 ){
72611 p->zBuf = sqlite3MallocZero(nBuf);
72612 if( !p->zBuf ){
72613 return SQLITE_NOMEM;
72615 }else{
72616 return sqlite3OsOpen(pVfs, zName, pJfd, flags, 0);
72618 p->pMethod = &JournalFileMethods;
72619 p->nBuf = nBuf;
72620 p->flags = flags;
72621 p->zJournal = zName;
72622 p->pVfs = pVfs;
72623 return SQLITE_OK;
72627 ** If the argument p points to a JournalFile structure, and the underlying
72628 ** file has not yet been created, create it now.
72630 SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *p){
72631 if( p->pMethods!=&JournalFileMethods ){
72632 return SQLITE_OK;
72634 return createFile((JournalFile *)p);
72638 ** Return the number of bytes required to store a JournalFile that uses vfs
72639 ** pVfs to create the underlying on-disk files.
72641 SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *pVfs){
72642 return (pVfs->szOsFile+sizeof(JournalFile));
72644 #endif
72646 /************** End of journal.c *********************************************/
72647 /************** Begin file memjournal.c **************************************/
72649 ** 2008 October 7
72651 ** The author disclaims copyright to this source code. In place of
72652 ** a legal notice, here is a blessing:
72654 ** May you do good and not evil.
72655 ** May you find forgiveness for yourself and forgive others.
72656 ** May you share freely, never taking more than you give.
72658 *************************************************************************
72660 ** This file contains code use to implement an in-memory rollback journal.
72661 ** The in-memory rollback journal is used to journal transactions for
72662 ** ":memory:" databases and when the journal_mode=MEMORY pragma is used.
72665 /* Forward references to internal structures */
72666 typedef struct MemJournal MemJournal;
72667 typedef struct FilePoint FilePoint;
72668 typedef struct FileChunk FileChunk;
72670 /* Space to hold the rollback journal is allocated in increments of
72671 ** this many bytes.
72673 ** The size chosen is a little less than a power of two. That way,
72674 ** the FileChunk object will have a size that almost exactly fills
72675 ** a power-of-two allocation. This mimimizes wasted space in power-of-two
72676 ** memory allocators.
72678 #define JOURNAL_CHUNKSIZE ((int)(1024-sizeof(FileChunk*)))
72680 /* Macro to find the minimum of two numeric values.
72682 #ifndef MIN
72683 # define MIN(x,y) ((x)<(y)?(x):(y))
72684 #endif
72687 ** The rollback journal is composed of a linked list of these structures.
72689 struct FileChunk {
72690 FileChunk *pNext; /* Next chunk in the journal */
72691 u8 zChunk[JOURNAL_CHUNKSIZE]; /* Content of this chunk */
72695 ** An instance of this object serves as a cursor into the rollback journal.
72696 ** The cursor can be either for reading or writing.
72698 struct FilePoint {
72699 sqlite3_int64 iOffset; /* Offset from the beginning of the file */
72700 FileChunk *pChunk; /* Specific chunk into which cursor points */
72704 ** This subclass is a subclass of sqlite3_file. Each open memory-journal
72705 ** is an instance of this class.
72707 struct MemJournal {
72708 sqlite3_io_methods *pMethod; /* Parent class. MUST BE FIRST */
72709 FileChunk *pFirst; /* Head of in-memory chunk-list */
72710 FilePoint endpoint; /* Pointer to the end of the file */
72711 FilePoint readpoint; /* Pointer to the end of the last xRead() */
72715 ** Read data from the in-memory journal file. This is the implementation
72716 ** of the sqlite3_vfs.xRead method.
72718 static int memjrnlRead(
72719 sqlite3_file *pJfd, /* The journal file from which to read */
72720 void *zBuf, /* Put the results here */
72721 int iAmt, /* Number of bytes to read */
72722 sqlite_int64 iOfst /* Begin reading at this offset */
72724 MemJournal *p = (MemJournal *)pJfd;
72725 u8 *zOut = zBuf;
72726 int nRead = iAmt;
72727 int iChunkOffset;
72728 FileChunk *pChunk;
72730 /* SQLite never tries to read past the end of a rollback journal file */
72731 assert( iOfst+iAmt<=p->endpoint.iOffset );
72733 if( p->readpoint.iOffset!=iOfst || iOfst==0 ){
72734 sqlite3_int64 iOff = 0;
72735 for(pChunk=p->pFirst;
72736 ALWAYS(pChunk) && (iOff+JOURNAL_CHUNKSIZE)<=iOfst;
72737 pChunk=pChunk->pNext
72739 iOff += JOURNAL_CHUNKSIZE;
72741 }else{
72742 pChunk = p->readpoint.pChunk;
72745 iChunkOffset = (int)(iOfst%JOURNAL_CHUNKSIZE);
72746 do {
72747 int iSpace = JOURNAL_CHUNKSIZE - iChunkOffset;
72748 int nCopy = MIN(nRead, (JOURNAL_CHUNKSIZE - iChunkOffset));
72749 memcpy(zOut, &pChunk->zChunk[iChunkOffset], nCopy);
72750 zOut += nCopy;
72751 nRead -= iSpace;
72752 iChunkOffset = 0;
72753 } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 );
72754 p->readpoint.iOffset = iOfst+iAmt;
72755 p->readpoint.pChunk = pChunk;
72757 return SQLITE_OK;
72761 ** Write data to the file.
72763 static int memjrnlWrite(
72764 sqlite3_file *pJfd, /* The journal file into which to write */
72765 const void *zBuf, /* Take data to be written from here */
72766 int iAmt, /* Number of bytes to write */
72767 sqlite_int64 iOfst /* Begin writing at this offset into the file */
72769 MemJournal *p = (MemJournal *)pJfd;
72770 int nWrite = iAmt;
72771 u8 *zWrite = (u8 *)zBuf;
72773 /* An in-memory journal file should only ever be appended to. Random
72774 ** access writes are not required by sqlite.
72776 assert( iOfst==p->endpoint.iOffset );
72777 UNUSED_PARAMETER(iOfst);
72779 while( nWrite>0 ){
72780 FileChunk *pChunk = p->endpoint.pChunk;
72781 int iChunkOffset = (int)(p->endpoint.iOffset%JOURNAL_CHUNKSIZE);
72782 int iSpace = MIN(nWrite, JOURNAL_CHUNKSIZE - iChunkOffset);
72784 if( iChunkOffset==0 ){
72785 /* New chunk is required to extend the file. */
72786 FileChunk *pNew = sqlite3_malloc(sizeof(FileChunk));
72787 if( !pNew ){
72788 return SQLITE_IOERR_NOMEM;
72790 pNew->pNext = 0;
72791 if( pChunk ){
72792 assert( p->pFirst );
72793 pChunk->pNext = pNew;
72794 }else{
72795 assert( !p->pFirst );
72796 p->pFirst = pNew;
72798 p->endpoint.pChunk = pNew;
72801 memcpy(&p->endpoint.pChunk->zChunk[iChunkOffset], zWrite, iSpace);
72802 zWrite += iSpace;
72803 nWrite -= iSpace;
72804 p->endpoint.iOffset += iSpace;
72807 return SQLITE_OK;
72811 ** Truncate the file.
72813 static int memjrnlTruncate(sqlite3_file *pJfd, sqlite_int64 size){
72814 MemJournal *p = (MemJournal *)pJfd;
72815 FileChunk *pChunk;
72816 assert(size==0);
72817 UNUSED_PARAMETER(size);
72818 pChunk = p->pFirst;
72819 while( pChunk ){
72820 FileChunk *pTmp = pChunk;
72821 pChunk = pChunk->pNext;
72822 sqlite3_free(pTmp);
72824 sqlite3MemJournalOpen(pJfd);
72825 return SQLITE_OK;
72829 ** Close the file.
72831 static int memjrnlClose(sqlite3_file *pJfd){
72832 memjrnlTruncate(pJfd, 0);
72833 return SQLITE_OK;
72838 ** Sync the file.
72840 ** Syncing an in-memory journal is a no-op. And, in fact, this routine
72841 ** is never called in a working implementation. This implementation
72842 ** exists purely as a contingency, in case some malfunction in some other
72843 ** part of SQLite causes Sync to be called by mistake.
72845 static int memjrnlSync(sqlite3_file *NotUsed, int NotUsed2){
72846 UNUSED_PARAMETER2(NotUsed, NotUsed2);
72847 return SQLITE_OK;
72851 ** Query the size of the file in bytes.
72853 static int memjrnlFileSize(sqlite3_file *pJfd, sqlite_int64 *pSize){
72854 MemJournal *p = (MemJournal *)pJfd;
72855 *pSize = (sqlite_int64) p->endpoint.iOffset;
72856 return SQLITE_OK;
72860 ** Table of methods for MemJournal sqlite3_file object.
72862 static const struct sqlite3_io_methods MemJournalMethods = {
72863 1, /* iVersion */
72864 memjrnlClose, /* xClose */
72865 memjrnlRead, /* xRead */
72866 memjrnlWrite, /* xWrite */
72867 memjrnlTruncate, /* xTruncate */
72868 memjrnlSync, /* xSync */
72869 memjrnlFileSize, /* xFileSize */
72870 0, /* xLock */
72871 0, /* xUnlock */
72872 0, /* xCheckReservedLock */
72873 0, /* xFileControl */
72874 0, /* xSectorSize */
72875 0, /* xDeviceCharacteristics */
72876 0, /* xShmMap */
72877 0, /* xShmLock */
72878 0, /* xShmBarrier */
72879 0 /* xShmUnlock */
72883 ** Open a journal file.
72885 SQLITE_PRIVATE void sqlite3MemJournalOpen(sqlite3_file *pJfd){
72886 MemJournal *p = (MemJournal *)pJfd;
72887 assert( EIGHT_BYTE_ALIGNMENT(p) );
72888 memset(p, 0, sqlite3MemJournalSize());
72889 p->pMethod = (sqlite3_io_methods*)&MemJournalMethods;
72893 ** Return true if the file-handle passed as an argument is
72894 ** an in-memory journal
72896 SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){
72897 return pJfd->pMethods==&MemJournalMethods;
72901 ** Return the number of bytes required to store a MemJournal file descriptor.
72903 SQLITE_PRIVATE int sqlite3MemJournalSize(void){
72904 return sizeof(MemJournal);
72907 /************** End of memjournal.c ******************************************/
72908 /************** Begin file walker.c ******************************************/
72910 ** 2008 August 16
72912 ** The author disclaims copyright to this source code. In place of
72913 ** a legal notice, here is a blessing:
72915 ** May you do good and not evil.
72916 ** May you find forgiveness for yourself and forgive others.
72917 ** May you share freely, never taking more than you give.
72919 *************************************************************************
72920 ** This file contains routines used for walking the parser tree for
72921 ** an SQL statement.
72923 /* #include <stdlib.h> */
72924 /* #include <string.h> */
72928 ** Walk an expression tree. Invoke the callback once for each node
72929 ** of the expression, while decending. (In other words, the callback
72930 ** is invoked before visiting children.)
72932 ** The return value from the callback should be one of the WRC_*
72933 ** constants to specify how to proceed with the walk.
72935 ** WRC_Continue Continue descending down the tree.
72937 ** WRC_Prune Do not descend into child nodes. But allow
72938 ** the walk to continue with sibling nodes.
72940 ** WRC_Abort Do no more callbacks. Unwind the stack and
72941 ** return the top-level walk call.
72943 ** The return value from this routine is WRC_Abort to abandon the tree walk
72944 ** and WRC_Continue to continue.
72946 SQLITE_PRIVATE int sqlite3WalkExpr(Walker *pWalker, Expr *pExpr){
72947 int rc;
72948 if( pExpr==0 ) return WRC_Continue;
72949 testcase( ExprHasProperty(pExpr, EP_TokenOnly) );
72950 testcase( ExprHasProperty(pExpr, EP_Reduced) );
72951 rc = pWalker->xExprCallback(pWalker, pExpr);
72952 if( rc==WRC_Continue
72953 && !ExprHasAnyProperty(pExpr,EP_TokenOnly) ){
72954 if( sqlite3WalkExpr(pWalker, pExpr->pLeft) ) return WRC_Abort;
72955 if( sqlite3WalkExpr(pWalker, pExpr->pRight) ) return WRC_Abort;
72956 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
72957 if( sqlite3WalkSelect(pWalker, pExpr->x.pSelect) ) return WRC_Abort;
72958 }else{
72959 if( sqlite3WalkExprList(pWalker, pExpr->x.pList) ) return WRC_Abort;
72962 return rc & WRC_Abort;
72966 ** Call sqlite3WalkExpr() for every expression in list p or until
72967 ** an abort request is seen.
72969 SQLITE_PRIVATE int sqlite3WalkExprList(Walker *pWalker, ExprList *p){
72970 int i;
72971 struct ExprList_item *pItem;
72972 if( p ){
72973 for(i=p->nExpr, pItem=p->a; i>0; i--, pItem++){
72974 if( sqlite3WalkExpr(pWalker, pItem->pExpr) ) return WRC_Abort;
72977 return WRC_Continue;
72981 ** Walk all expressions associated with SELECT statement p. Do
72982 ** not invoke the SELECT callback on p, but do (of course) invoke
72983 ** any expr callbacks and SELECT callbacks that come from subqueries.
72984 ** Return WRC_Abort or WRC_Continue.
72986 SQLITE_PRIVATE int sqlite3WalkSelectExpr(Walker *pWalker, Select *p){
72987 if( sqlite3WalkExprList(pWalker, p->pEList) ) return WRC_Abort;
72988 if( sqlite3WalkExpr(pWalker, p->pWhere) ) return WRC_Abort;
72989 if( sqlite3WalkExprList(pWalker, p->pGroupBy) ) return WRC_Abort;
72990 if( sqlite3WalkExpr(pWalker, p->pHaving) ) return WRC_Abort;
72991 if( sqlite3WalkExprList(pWalker, p->pOrderBy) ) return WRC_Abort;
72992 if( sqlite3WalkExpr(pWalker, p->pLimit) ) return WRC_Abort;
72993 if( sqlite3WalkExpr(pWalker, p->pOffset) ) return WRC_Abort;
72994 return WRC_Continue;
72998 ** Walk the parse trees associated with all subqueries in the
72999 ** FROM clause of SELECT statement p. Do not invoke the select
73000 ** callback on p, but do invoke it on each FROM clause subquery
73001 ** and on any subqueries further down in the tree. Return
73002 ** WRC_Abort or WRC_Continue;
73004 SQLITE_PRIVATE int sqlite3WalkSelectFrom(Walker *pWalker, Select *p){
73005 SrcList *pSrc;
73006 int i;
73007 struct SrcList_item *pItem;
73009 pSrc = p->pSrc;
73010 if( ALWAYS(pSrc) ){
73011 for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
73012 if( sqlite3WalkSelect(pWalker, pItem->pSelect) ){
73013 return WRC_Abort;
73017 return WRC_Continue;
73021 ** Call sqlite3WalkExpr() for every expression in Select statement p.
73022 ** Invoke sqlite3WalkSelect() for subqueries in the FROM clause and
73023 ** on the compound select chain, p->pPrior.
73025 ** Return WRC_Continue under normal conditions. Return WRC_Abort if
73026 ** there is an abort request.
73028 ** If the Walker does not have an xSelectCallback() then this routine
73029 ** is a no-op returning WRC_Continue.
73031 SQLITE_PRIVATE int sqlite3WalkSelect(Walker *pWalker, Select *p){
73032 int rc;
73033 if( p==0 || pWalker->xSelectCallback==0 ) return WRC_Continue;
73034 rc = WRC_Continue;
73035 while( p ){
73036 rc = pWalker->xSelectCallback(pWalker, p);
73037 if( rc ) break;
73038 if( sqlite3WalkSelectExpr(pWalker, p) ) return WRC_Abort;
73039 if( sqlite3WalkSelectFrom(pWalker, p) ) return WRC_Abort;
73040 p = p->pPrior;
73042 return rc & WRC_Abort;
73045 /************** End of walker.c **********************************************/
73046 /************** Begin file resolve.c *****************************************/
73048 ** 2008 August 18
73050 ** The author disclaims copyright to this source code. In place of
73051 ** a legal notice, here is a blessing:
73053 ** May you do good and not evil.
73054 ** May you find forgiveness for yourself and forgive others.
73055 ** May you share freely, never taking more than you give.
73057 *************************************************************************
73059 ** This file contains routines used for walking the parser tree and
73060 ** resolve all identifiers by associating them with a particular
73061 ** table and column.
73063 /* #include <stdlib.h> */
73064 /* #include <string.h> */
73067 ** Turn the pExpr expression into an alias for the iCol-th column of the
73068 ** result set in pEList.
73070 ** If the result set column is a simple column reference, then this routine
73071 ** makes an exact copy. But for any other kind of expression, this
73072 ** routine make a copy of the result set column as the argument to the
73073 ** TK_AS operator. The TK_AS operator causes the expression to be
73074 ** evaluated just once and then reused for each alias.
73076 ** The reason for suppressing the TK_AS term when the expression is a simple
73077 ** column reference is so that the column reference will be recognized as
73078 ** usable by indices within the WHERE clause processing logic.
73080 ** Hack: The TK_AS operator is inhibited if zType[0]=='G'. This means
73081 ** that in a GROUP BY clause, the expression is evaluated twice. Hence:
73083 ** SELECT random()%5 AS x, count(*) FROM tab GROUP BY x
73085 ** Is equivalent to:
73087 ** SELECT random()%5 AS x, count(*) FROM tab GROUP BY random()%5
73089 ** The result of random()%5 in the GROUP BY clause is probably different
73090 ** from the result in the result-set. We might fix this someday. Or
73091 ** then again, we might not...
73093 static void resolveAlias(
73094 Parse *pParse, /* Parsing context */
73095 ExprList *pEList, /* A result set */
73096 int iCol, /* A column in the result set. 0..pEList->nExpr-1 */
73097 Expr *pExpr, /* Transform this into an alias to the result set */
73098 const char *zType /* "GROUP" or "ORDER" or "" */
73100 Expr *pOrig; /* The iCol-th column of the result set */
73101 Expr *pDup; /* Copy of pOrig */
73102 sqlite3 *db; /* The database connection */
73104 assert( iCol>=0 && iCol<pEList->nExpr );
73105 pOrig = pEList->a[iCol].pExpr;
73106 assert( pOrig!=0 );
73107 assert( pOrig->flags & EP_Resolved );
73108 db = pParse->db;
73109 if( pOrig->op!=TK_COLUMN && zType[0]!='G' ){
73110 pDup = sqlite3ExprDup(db, pOrig, 0);
73111 pDup = sqlite3PExpr(pParse, TK_AS, pDup, 0, 0);
73112 if( pDup==0 ) return;
73113 if( pEList->a[iCol].iAlias==0 ){
73114 pEList->a[iCol].iAlias = (u16)(++pParse->nAlias);
73116 pDup->iTable = pEList->a[iCol].iAlias;
73117 }else if( ExprHasProperty(pOrig, EP_IntValue) || pOrig->u.zToken==0 ){
73118 pDup = sqlite3ExprDup(db, pOrig, 0);
73119 if( pDup==0 ) return;
73120 }else{
73121 char *zToken = pOrig->u.zToken;
73122 assert( zToken!=0 );
73123 pOrig->u.zToken = 0;
73124 pDup = sqlite3ExprDup(db, pOrig, 0);
73125 pOrig->u.zToken = zToken;
73126 if( pDup==0 ) return;
73127 assert( (pDup->flags & (EP_Reduced|EP_TokenOnly))==0 );
73128 pDup->flags2 |= EP2_MallocedToken;
73129 pDup->u.zToken = sqlite3DbStrDup(db, zToken);
73131 if( pExpr->flags & EP_ExpCollate ){
73132 pDup->pColl = pExpr->pColl;
73133 pDup->flags |= EP_ExpCollate;
73136 /* Before calling sqlite3ExprDelete(), set the EP_Static flag. This
73137 ** prevents ExprDelete() from deleting the Expr structure itself,
73138 ** allowing it to be repopulated by the memcpy() on the following line.
73140 ExprSetProperty(pExpr, EP_Static);
73141 sqlite3ExprDelete(db, pExpr);
73142 memcpy(pExpr, pDup, sizeof(*pExpr));
73143 sqlite3DbFree(db, pDup);
73148 ** Return TRUE if the name zCol occurs anywhere in the USING clause.
73150 ** Return FALSE if the USING clause is NULL or if it does not contain
73151 ** zCol.
73153 static int nameInUsingClause(IdList *pUsing, const char *zCol){
73154 if( pUsing ){
73155 int k;
73156 for(k=0; k<pUsing->nId; k++){
73157 if( sqlite3StrICmp(pUsing->a[k].zName, zCol)==0 ) return 1;
73160 return 0;
73165 ** Given the name of a column of the form X.Y.Z or Y.Z or just Z, look up
73166 ** that name in the set of source tables in pSrcList and make the pExpr
73167 ** expression node refer back to that source column. The following changes
73168 ** are made to pExpr:
73170 ** pExpr->iDb Set the index in db->aDb[] of the database X
73171 ** (even if X is implied).
73172 ** pExpr->iTable Set to the cursor number for the table obtained
73173 ** from pSrcList.
73174 ** pExpr->pTab Points to the Table structure of X.Y (even if
73175 ** X and/or Y are implied.)
73176 ** pExpr->iColumn Set to the column number within the table.
73177 ** pExpr->op Set to TK_COLUMN.
73178 ** pExpr->pLeft Any expression this points to is deleted
73179 ** pExpr->pRight Any expression this points to is deleted.
73181 ** The zDb variable is the name of the database (the "X"). This value may be
73182 ** NULL meaning that name is of the form Y.Z or Z. Any available database
73183 ** can be used. The zTable variable is the name of the table (the "Y"). This
73184 ** value can be NULL if zDb is also NULL. If zTable is NULL it
73185 ** means that the form of the name is Z and that columns from any table
73186 ** can be used.
73188 ** If the name cannot be resolved unambiguously, leave an error message
73189 ** in pParse and return WRC_Abort. Return WRC_Prune on success.
73191 static int lookupName(
73192 Parse *pParse, /* The parsing context */
73193 const char *zDb, /* Name of the database containing table, or NULL */
73194 const char *zTab, /* Name of table containing column, or NULL */
73195 const char *zCol, /* Name of the column. */
73196 NameContext *pNC, /* The name context used to resolve the name */
73197 Expr *pExpr /* Make this EXPR node point to the selected column */
73199 int i, j; /* Loop counters */
73200 int cnt = 0; /* Number of matching column names */
73201 int cntTab = 0; /* Number of matching table names */
73202 sqlite3 *db = pParse->db; /* The database connection */
73203 struct SrcList_item *pItem; /* Use for looping over pSrcList items */
73204 struct SrcList_item *pMatch = 0; /* The matching pSrcList item */
73205 NameContext *pTopNC = pNC; /* First namecontext in the list */
73206 Schema *pSchema = 0; /* Schema of the expression */
73207 int isTrigger = 0;
73209 assert( pNC ); /* the name context cannot be NULL. */
73210 assert( zCol ); /* The Z in X.Y.Z cannot be NULL */
73211 assert( ~ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
73213 /* Initialize the node to no-match */
73214 pExpr->iTable = -1;
73215 pExpr->pTab = 0;
73216 ExprSetIrreducible(pExpr);
73218 /* Start at the inner-most context and move outward until a match is found */
73219 while( pNC && cnt==0 ){
73220 ExprList *pEList;
73221 SrcList *pSrcList = pNC->pSrcList;
73223 if( pSrcList ){
73224 for(i=0, pItem=pSrcList->a; i<pSrcList->nSrc; i++, pItem++){
73225 Table *pTab;
73226 int iDb;
73227 Column *pCol;
73229 pTab = pItem->pTab;
73230 assert( pTab!=0 && pTab->zName!=0 );
73231 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
73232 assert( pTab->nCol>0 );
73233 if( zTab ){
73234 if( pItem->zAlias ){
73235 char *zTabName = pItem->zAlias;
73236 if( sqlite3StrICmp(zTabName, zTab)!=0 ) continue;
73237 }else{
73238 char *zTabName = pTab->zName;
73239 if( NEVER(zTabName==0) || sqlite3StrICmp(zTabName, zTab)!=0 ){
73240 continue;
73242 if( zDb!=0 && sqlite3StrICmp(db->aDb[iDb].zName, zDb)!=0 ){
73243 continue;
73247 if( 0==(cntTab++) ){
73248 pExpr->iTable = pItem->iCursor;
73249 pExpr->pTab = pTab;
73250 pSchema = pTab->pSchema;
73251 pMatch = pItem;
73253 for(j=0, pCol=pTab->aCol; j<pTab->nCol; j++, pCol++){
73254 if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
73255 /* If there has been exactly one prior match and this match
73256 ** is for the right-hand table of a NATURAL JOIN or is in a
73257 ** USING clause, then skip this match.
73259 if( cnt==1 ){
73260 if( pItem->jointype & JT_NATURAL ) continue;
73261 if( nameInUsingClause(pItem->pUsing, zCol) ) continue;
73263 cnt++;
73264 pExpr->iTable = pItem->iCursor;
73265 pExpr->pTab = pTab;
73266 pMatch = pItem;
73267 pSchema = pTab->pSchema;
73268 /* Substitute the rowid (column -1) for the INTEGER PRIMARY KEY */
73269 pExpr->iColumn = j==pTab->iPKey ? -1 : (i16)j;
73270 break;
73276 #ifndef SQLITE_OMIT_TRIGGER
73277 /* If we have not already resolved the name, then maybe
73278 ** it is a new.* or old.* trigger argument reference
73280 if( zDb==0 && zTab!=0 && cnt==0 && pParse->pTriggerTab!=0 ){
73281 int op = pParse->eTriggerOp;
73282 Table *pTab = 0;
73283 assert( op==TK_DELETE || op==TK_UPDATE || op==TK_INSERT );
73284 if( op!=TK_DELETE && sqlite3StrICmp("new",zTab) == 0 ){
73285 pExpr->iTable = 1;
73286 pTab = pParse->pTriggerTab;
73287 }else if( op!=TK_INSERT && sqlite3StrICmp("old",zTab)==0 ){
73288 pExpr->iTable = 0;
73289 pTab = pParse->pTriggerTab;
73292 if( pTab ){
73293 int iCol;
73294 pSchema = pTab->pSchema;
73295 cntTab++;
73296 for(iCol=0; iCol<pTab->nCol; iCol++){
73297 Column *pCol = &pTab->aCol[iCol];
73298 if( sqlite3StrICmp(pCol->zName, zCol)==0 ){
73299 if( iCol==pTab->iPKey ){
73300 iCol = -1;
73302 break;
73305 if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) ){
73306 iCol = -1; /* IMP: R-44911-55124 */
73308 if( iCol<pTab->nCol ){
73309 cnt++;
73310 if( iCol<0 ){
73311 pExpr->affinity = SQLITE_AFF_INTEGER;
73312 }else if( pExpr->iTable==0 ){
73313 testcase( iCol==31 );
73314 testcase( iCol==32 );
73315 pParse->oldmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
73316 }else{
73317 testcase( iCol==31 );
73318 testcase( iCol==32 );
73319 pParse->newmask |= (iCol>=32 ? 0xffffffff : (((u32)1)<<iCol));
73321 pExpr->iColumn = (i16)iCol;
73322 pExpr->pTab = pTab;
73323 isTrigger = 1;
73327 #endif /* !defined(SQLITE_OMIT_TRIGGER) */
73330 ** Perhaps the name is a reference to the ROWID
73332 if( cnt==0 && cntTab==1 && sqlite3IsRowid(zCol) ){
73333 cnt = 1;
73334 pExpr->iColumn = -1; /* IMP: R-44911-55124 */
73335 pExpr->affinity = SQLITE_AFF_INTEGER;
73339 ** If the input is of the form Z (not Y.Z or X.Y.Z) then the name Z
73340 ** might refer to an result-set alias. This happens, for example, when
73341 ** we are resolving names in the WHERE clause of the following command:
73343 ** SELECT a+b AS x FROM table WHERE x<10;
73345 ** In cases like this, replace pExpr with a copy of the expression that
73346 ** forms the result set entry ("a+b" in the example) and return immediately.
73347 ** Note that the expression in the result set should have already been
73348 ** resolved by the time the WHERE clause is resolved.
73350 if( cnt==0 && (pEList = pNC->pEList)!=0 && zTab==0 ){
73351 for(j=0; j<pEList->nExpr; j++){
73352 char *zAs = pEList->a[j].zName;
73353 if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
73354 Expr *pOrig;
73355 assert( pExpr->pLeft==0 && pExpr->pRight==0 );
73356 assert( pExpr->x.pList==0 );
73357 assert( pExpr->x.pSelect==0 );
73358 pOrig = pEList->a[j].pExpr;
73359 if( !pNC->allowAgg && ExprHasProperty(pOrig, EP_Agg) ){
73360 sqlite3ErrorMsg(pParse, "misuse of aliased aggregate %s", zAs);
73361 return WRC_Abort;
73363 resolveAlias(pParse, pEList, j, pExpr, "");
73364 cnt = 1;
73365 pMatch = 0;
73366 assert( zTab==0 && zDb==0 );
73367 goto lookupname_end;
73372 /* Advance to the next name context. The loop will exit when either
73373 ** we have a match (cnt>0) or when we run out of name contexts.
73375 if( cnt==0 ){
73376 pNC = pNC->pNext;
73381 ** If X and Y are NULL (in other words if only the column name Z is
73382 ** supplied) and the value of Z is enclosed in double-quotes, then
73383 ** Z is a string literal if it doesn't match any column names. In that
73384 ** case, we need to return right away and not make any changes to
73385 ** pExpr.
73387 ** Because no reference was made to outer contexts, the pNC->nRef
73388 ** fields are not changed in any context.
73390 if( cnt==0 && zTab==0 && ExprHasProperty(pExpr,EP_DblQuoted) ){
73391 pExpr->op = TK_STRING;
73392 pExpr->pTab = 0;
73393 return WRC_Prune;
73397 ** cnt==0 means there was not match. cnt>1 means there were two or
73398 ** more matches. Either way, we have an error.
73400 if( cnt!=1 ){
73401 const char *zErr;
73402 zErr = cnt==0 ? "no such column" : "ambiguous column name";
73403 if( zDb ){
73404 sqlite3ErrorMsg(pParse, "%s: %s.%s.%s", zErr, zDb, zTab, zCol);
73405 }else if( zTab ){
73406 sqlite3ErrorMsg(pParse, "%s: %s.%s", zErr, zTab, zCol);
73407 }else{
73408 sqlite3ErrorMsg(pParse, "%s: %s", zErr, zCol);
73410 pParse->checkSchema = 1;
73411 pTopNC->nErr++;
73414 /* If a column from a table in pSrcList is referenced, then record
73415 ** this fact in the pSrcList.a[].colUsed bitmask. Column 0 causes
73416 ** bit 0 to be set. Column 1 sets bit 1. And so forth. If the
73417 ** column number is greater than the number of bits in the bitmask
73418 ** then set the high-order bit of the bitmask.
73420 if( pExpr->iColumn>=0 && pMatch!=0 ){
73421 int n = pExpr->iColumn;
73422 testcase( n==BMS-1 );
73423 if( n>=BMS ){
73424 n = BMS-1;
73426 assert( pMatch->iCursor==pExpr->iTable );
73427 pMatch->colUsed |= ((Bitmask)1)<<n;
73430 /* Clean up and return
73432 sqlite3ExprDelete(db, pExpr->pLeft);
73433 pExpr->pLeft = 0;
73434 sqlite3ExprDelete(db, pExpr->pRight);
73435 pExpr->pRight = 0;
73436 pExpr->op = (isTrigger ? TK_TRIGGER : TK_COLUMN);
73437 lookupname_end:
73438 if( cnt==1 ){
73439 assert( pNC!=0 );
73440 sqlite3AuthRead(pParse, pExpr, pSchema, pNC->pSrcList);
73441 /* Increment the nRef value on all name contexts from TopNC up to
73442 ** the point where the name matched. */
73443 for(;;){
73444 assert( pTopNC!=0 );
73445 pTopNC->nRef++;
73446 if( pTopNC==pNC ) break;
73447 pTopNC = pTopNC->pNext;
73449 return WRC_Prune;
73450 } else {
73451 return WRC_Abort;
73456 ** Allocate and return a pointer to an expression to load the column iCol
73457 ** from datasource iSrc in SrcList pSrc.
73459 SQLITE_PRIVATE Expr *sqlite3CreateColumnExpr(sqlite3 *db, SrcList *pSrc, int iSrc, int iCol){
73460 Expr *p = sqlite3ExprAlloc(db, TK_COLUMN, 0, 0);
73461 if( p ){
73462 struct SrcList_item *pItem = &pSrc->a[iSrc];
73463 p->pTab = pItem->pTab;
73464 p->iTable = pItem->iCursor;
73465 if( p->pTab->iPKey==iCol ){
73466 p->iColumn = -1;
73467 }else{
73468 p->iColumn = (ynVar)iCol;
73469 testcase( iCol==BMS );
73470 testcase( iCol==BMS-1 );
73471 pItem->colUsed |= ((Bitmask)1)<<(iCol>=BMS ? BMS-1 : iCol);
73473 ExprSetProperty(p, EP_Resolved);
73475 return p;
73479 ** This routine is callback for sqlite3WalkExpr().
73481 ** Resolve symbolic names into TK_COLUMN operators for the current
73482 ** node in the expression tree. Return 0 to continue the search down
73483 ** the tree or 2 to abort the tree walk.
73485 ** This routine also does error checking and name resolution for
73486 ** function names. The operator for aggregate functions is changed
73487 ** to TK_AGG_FUNCTION.
73489 static int resolveExprStep(Walker *pWalker, Expr *pExpr){
73490 NameContext *pNC;
73491 Parse *pParse;
73493 pNC = pWalker->u.pNC;
73494 assert( pNC!=0 );
73495 pParse = pNC->pParse;
73496 assert( pParse==pWalker->pParse );
73498 if( ExprHasAnyProperty(pExpr, EP_Resolved) ) return WRC_Prune;
73499 ExprSetProperty(pExpr, EP_Resolved);
73500 #ifndef NDEBUG
73501 if( pNC->pSrcList && pNC->pSrcList->nAlloc>0 ){
73502 SrcList *pSrcList = pNC->pSrcList;
73503 int i;
73504 for(i=0; i<pNC->pSrcList->nSrc; i++){
73505 assert( pSrcList->a[i].iCursor>=0 && pSrcList->a[i].iCursor<pParse->nTab);
73508 #endif
73509 switch( pExpr->op ){
73511 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
73512 /* The special operator TK_ROW means use the rowid for the first
73513 ** column in the FROM clause. This is used by the LIMIT and ORDER BY
73514 ** clause processing on UPDATE and DELETE statements.
73516 case TK_ROW: {
73517 SrcList *pSrcList = pNC->pSrcList;
73518 struct SrcList_item *pItem;
73519 assert( pSrcList && pSrcList->nSrc==1 );
73520 pItem = pSrcList->a;
73521 pExpr->op = TK_COLUMN;
73522 pExpr->pTab = pItem->pTab;
73523 pExpr->iTable = pItem->iCursor;
73524 pExpr->iColumn = -1;
73525 pExpr->affinity = SQLITE_AFF_INTEGER;
73526 break;
73528 #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
73530 /* A lone identifier is the name of a column.
73532 case TK_ID: {
73533 return lookupName(pParse, 0, 0, pExpr->u.zToken, pNC, pExpr);
73536 /* A table name and column name: ID.ID
73537 ** Or a database, table and column: ID.ID.ID
73539 case TK_DOT: {
73540 const char *zColumn;
73541 const char *zTable;
73542 const char *zDb;
73543 Expr *pRight;
73545 /* if( pSrcList==0 ) break; */
73546 pRight = pExpr->pRight;
73547 if( pRight->op==TK_ID ){
73548 zDb = 0;
73549 zTable = pExpr->pLeft->u.zToken;
73550 zColumn = pRight->u.zToken;
73551 }else{
73552 assert( pRight->op==TK_DOT );
73553 zDb = pExpr->pLeft->u.zToken;
73554 zTable = pRight->pLeft->u.zToken;
73555 zColumn = pRight->pRight->u.zToken;
73557 return lookupName(pParse, zDb, zTable, zColumn, pNC, pExpr);
73560 /* Resolve function names
73562 case TK_CONST_FUNC:
73563 case TK_FUNCTION: {
73564 ExprList *pList = pExpr->x.pList; /* The argument list */
73565 int n = pList ? pList->nExpr : 0; /* Number of arguments */
73566 int no_such_func = 0; /* True if no such function exists */
73567 int wrong_num_args = 0; /* True if wrong number of arguments */
73568 int is_agg = 0; /* True if is an aggregate function */
73569 int auth; /* Authorization to use the function */
73570 int nId; /* Number of characters in function name */
73571 const char *zId; /* The function name. */
73572 FuncDef *pDef; /* Information about the function */
73573 u8 enc = ENC(pParse->db); /* The database encoding */
73575 testcase( pExpr->op==TK_CONST_FUNC );
73576 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
73577 zId = pExpr->u.zToken;
73578 nId = sqlite3Strlen30(zId);
73579 pDef = sqlite3FindFunction(pParse->db, zId, nId, n, enc, 0);
73580 if( pDef==0 ){
73581 pDef = sqlite3FindFunction(pParse->db, zId, nId, -1, enc, 0);
73582 if( pDef==0 ){
73583 no_such_func = 1;
73584 }else{
73585 wrong_num_args = 1;
73587 }else{
73588 is_agg = pDef->xFunc==0;
73590 #ifndef SQLITE_OMIT_AUTHORIZATION
73591 if( pDef ){
73592 auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
73593 if( auth!=SQLITE_OK ){
73594 if( auth==SQLITE_DENY ){
73595 sqlite3ErrorMsg(pParse, "not authorized to use function: %s",
73596 pDef->zName);
73597 pNC->nErr++;
73599 pExpr->op = TK_NULL;
73600 return WRC_Prune;
73603 #endif
73604 if( is_agg && !pNC->allowAgg ){
73605 sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId);
73606 pNC->nErr++;
73607 is_agg = 0;
73608 }else if( no_such_func ){
73609 sqlite3ErrorMsg(pParse, "no such function: %.*s", nId, zId);
73610 pNC->nErr++;
73611 }else if( wrong_num_args ){
73612 sqlite3ErrorMsg(pParse,"wrong number of arguments to function %.*s()",
73613 nId, zId);
73614 pNC->nErr++;
73616 if( is_agg ){
73617 pExpr->op = TK_AGG_FUNCTION;
73618 pNC->hasAgg = 1;
73620 if( is_agg ) pNC->allowAgg = 0;
73621 sqlite3WalkExprList(pWalker, pList);
73622 if( is_agg ) pNC->allowAgg = 1;
73623 /* FIX ME: Compute pExpr->affinity based on the expected return
73624 ** type of the function
73626 return WRC_Prune;
73628 #ifndef SQLITE_OMIT_SUBQUERY
73629 case TK_SELECT:
73630 case TK_EXISTS: testcase( pExpr->op==TK_EXISTS );
73631 #endif
73632 case TK_IN: {
73633 testcase( pExpr->op==TK_IN );
73634 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
73635 int nRef = pNC->nRef;
73636 #ifndef SQLITE_OMIT_CHECK
73637 if( pNC->isCheck ){
73638 sqlite3ErrorMsg(pParse,"subqueries prohibited in CHECK constraints");
73640 #endif
73641 sqlite3WalkSelect(pWalker, pExpr->x.pSelect);
73642 assert( pNC->nRef>=nRef );
73643 if( nRef!=pNC->nRef ){
73644 ExprSetProperty(pExpr, EP_VarSelect);
73647 break;
73649 #ifndef SQLITE_OMIT_CHECK
73650 case TK_VARIABLE: {
73651 if( pNC->isCheck ){
73652 sqlite3ErrorMsg(pParse,"parameters prohibited in CHECK constraints");
73654 break;
73656 #endif
73658 return (pParse->nErr || pParse->db->mallocFailed) ? WRC_Abort : WRC_Continue;
73662 ** pEList is a list of expressions which are really the result set of the
73663 ** a SELECT statement. pE is a term in an ORDER BY or GROUP BY clause.
73664 ** This routine checks to see if pE is a simple identifier which corresponds
73665 ** to the AS-name of one of the terms of the expression list. If it is,
73666 ** this routine return an integer between 1 and N where N is the number of
73667 ** elements in pEList, corresponding to the matching entry. If there is
73668 ** no match, or if pE is not a simple identifier, then this routine
73669 ** return 0.
73671 ** pEList has been resolved. pE has not.
73673 static int resolveAsName(
73674 Parse *pParse, /* Parsing context for error messages */
73675 ExprList *pEList, /* List of expressions to scan */
73676 Expr *pE /* Expression we are trying to match */
73678 int i; /* Loop counter */
73680 UNUSED_PARAMETER(pParse);
73682 if( pE->op==TK_ID ){
73683 char *zCol = pE->u.zToken;
73684 for(i=0; i<pEList->nExpr; i++){
73685 char *zAs = pEList->a[i].zName;
73686 if( zAs!=0 && sqlite3StrICmp(zAs, zCol)==0 ){
73687 return i+1;
73691 return 0;
73695 ** pE is a pointer to an expression which is a single term in the
73696 ** ORDER BY of a compound SELECT. The expression has not been
73697 ** name resolved.
73699 ** At the point this routine is called, we already know that the
73700 ** ORDER BY term is not an integer index into the result set. That
73701 ** case is handled by the calling routine.
73703 ** Attempt to match pE against result set columns in the left-most
73704 ** SELECT statement. Return the index i of the matching column,
73705 ** as an indication to the caller that it should sort by the i-th column.
73706 ** The left-most column is 1. In other words, the value returned is the
73707 ** same integer value that would be used in the SQL statement to indicate
73708 ** the column.
73710 ** If there is no match, return 0. Return -1 if an error occurs.
73712 static int resolveOrderByTermToExprList(
73713 Parse *pParse, /* Parsing context for error messages */
73714 Select *pSelect, /* The SELECT statement with the ORDER BY clause */
73715 Expr *pE /* The specific ORDER BY term */
73717 int i; /* Loop counter */
73718 ExprList *pEList; /* The columns of the result set */
73719 NameContext nc; /* Name context for resolving pE */
73720 sqlite3 *db; /* Database connection */
73721 int rc; /* Return code from subprocedures */
73722 u8 savedSuppErr; /* Saved value of db->suppressErr */
73724 assert( sqlite3ExprIsInteger(pE, &i)==0 );
73725 pEList = pSelect->pEList;
73727 /* Resolve all names in the ORDER BY term expression
73729 memset(&nc, 0, sizeof(nc));
73730 nc.pParse = pParse;
73731 nc.pSrcList = pSelect->pSrc;
73732 nc.pEList = pEList;
73733 nc.allowAgg = 1;
73734 nc.nErr = 0;
73735 db = pParse->db;
73736 savedSuppErr = db->suppressErr;
73737 db->suppressErr = 1;
73738 rc = sqlite3ResolveExprNames(&nc, pE);
73739 db->suppressErr = savedSuppErr;
73740 if( rc ) return 0;
73742 /* Try to match the ORDER BY expression against an expression
73743 ** in the result set. Return an 1-based index of the matching
73744 ** result-set entry.
73746 for(i=0; i<pEList->nExpr; i++){
73747 if( sqlite3ExprCompare(pEList->a[i].pExpr, pE)<2 ){
73748 return i+1;
73752 /* If no match, return 0. */
73753 return 0;
73757 ** Generate an ORDER BY or GROUP BY term out-of-range error.
73759 static void resolveOutOfRangeError(
73760 Parse *pParse, /* The error context into which to write the error */
73761 const char *zType, /* "ORDER" or "GROUP" */
73762 int i, /* The index (1-based) of the term out of range */
73763 int mx /* Largest permissible value of i */
73765 sqlite3ErrorMsg(pParse,
73766 "%r %s BY term out of range - should be "
73767 "between 1 and %d", i, zType, mx);
73771 ** Analyze the ORDER BY clause in a compound SELECT statement. Modify
73772 ** each term of the ORDER BY clause is a constant integer between 1
73773 ** and N where N is the number of columns in the compound SELECT.
73775 ** ORDER BY terms that are already an integer between 1 and N are
73776 ** unmodified. ORDER BY terms that are integers outside the range of
73777 ** 1 through N generate an error. ORDER BY terms that are expressions
73778 ** are matched against result set expressions of compound SELECT
73779 ** beginning with the left-most SELECT and working toward the right.
73780 ** At the first match, the ORDER BY expression is transformed into
73781 ** the integer column number.
73783 ** Return the number of errors seen.
73785 static int resolveCompoundOrderBy(
73786 Parse *pParse, /* Parsing context. Leave error messages here */
73787 Select *pSelect /* The SELECT statement containing the ORDER BY */
73789 int i;
73790 ExprList *pOrderBy;
73791 ExprList *pEList;
73792 sqlite3 *db;
73793 int moreToDo = 1;
73795 pOrderBy = pSelect->pOrderBy;
73796 if( pOrderBy==0 ) return 0;
73797 db = pParse->db;
73798 #if SQLITE_MAX_COLUMN
73799 if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
73800 sqlite3ErrorMsg(pParse, "too many terms in ORDER BY clause");
73801 return 1;
73803 #endif
73804 for(i=0; i<pOrderBy->nExpr; i++){
73805 pOrderBy->a[i].done = 0;
73807 pSelect->pNext = 0;
73808 while( pSelect->pPrior ){
73809 pSelect->pPrior->pNext = pSelect;
73810 pSelect = pSelect->pPrior;
73812 while( pSelect && moreToDo ){
73813 struct ExprList_item *pItem;
73814 moreToDo = 0;
73815 pEList = pSelect->pEList;
73816 assert( pEList!=0 );
73817 for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
73818 int iCol = -1;
73819 Expr *pE, *pDup;
73820 if( pItem->done ) continue;
73821 pE = pItem->pExpr;
73822 if( sqlite3ExprIsInteger(pE, &iCol) ){
73823 if( iCol<=0 || iCol>pEList->nExpr ){
73824 resolveOutOfRangeError(pParse, "ORDER", i+1, pEList->nExpr);
73825 return 1;
73827 }else{
73828 iCol = resolveAsName(pParse, pEList, pE);
73829 if( iCol==0 ){
73830 pDup = sqlite3ExprDup(db, pE, 0);
73831 if( !db->mallocFailed ){
73832 assert(pDup);
73833 iCol = resolveOrderByTermToExprList(pParse, pSelect, pDup);
73835 sqlite3ExprDelete(db, pDup);
73838 if( iCol>0 ){
73839 CollSeq *pColl = pE->pColl;
73840 int flags = pE->flags & EP_ExpCollate;
73841 sqlite3ExprDelete(db, pE);
73842 pItem->pExpr = pE = sqlite3Expr(db, TK_INTEGER, 0);
73843 if( pE==0 ) return 1;
73844 pE->pColl = pColl;
73845 pE->flags |= EP_IntValue | flags;
73846 pE->u.iValue = iCol;
73847 pItem->iOrderByCol = (u16)iCol;
73848 pItem->done = 1;
73849 }else{
73850 moreToDo = 1;
73853 pSelect = pSelect->pNext;
73855 for(i=0; i<pOrderBy->nExpr; i++){
73856 if( pOrderBy->a[i].done==0 ){
73857 sqlite3ErrorMsg(pParse, "%r ORDER BY term does not match any "
73858 "column in the result set", i+1);
73859 return 1;
73862 return 0;
73866 ** Check every term in the ORDER BY or GROUP BY clause pOrderBy of
73867 ** the SELECT statement pSelect. If any term is reference to a
73868 ** result set expression (as determined by the ExprList.a.iCol field)
73869 ** then convert that term into a copy of the corresponding result set
73870 ** column.
73872 ** If any errors are detected, add an error message to pParse and
73873 ** return non-zero. Return zero if no errors are seen.
73875 SQLITE_PRIVATE int sqlite3ResolveOrderGroupBy(
73876 Parse *pParse, /* Parsing context. Leave error messages here */
73877 Select *pSelect, /* The SELECT statement containing the clause */
73878 ExprList *pOrderBy, /* The ORDER BY or GROUP BY clause to be processed */
73879 const char *zType /* "ORDER" or "GROUP" */
73881 int i;
73882 sqlite3 *db = pParse->db;
73883 ExprList *pEList;
73884 struct ExprList_item *pItem;
73886 if( pOrderBy==0 || pParse->db->mallocFailed ) return 0;
73887 #if SQLITE_MAX_COLUMN
73888 if( pOrderBy->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
73889 sqlite3ErrorMsg(pParse, "too many terms in %s BY clause", zType);
73890 return 1;
73892 #endif
73893 pEList = pSelect->pEList;
73894 assert( pEList!=0 ); /* sqlite3SelectNew() guarantees this */
73895 for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
73896 if( pItem->iOrderByCol ){
73897 if( pItem->iOrderByCol>pEList->nExpr ){
73898 resolveOutOfRangeError(pParse, zType, i+1, pEList->nExpr);
73899 return 1;
73901 resolveAlias(pParse, pEList, pItem->iOrderByCol-1, pItem->pExpr, zType);
73904 return 0;
73908 ** pOrderBy is an ORDER BY or GROUP BY clause in SELECT statement pSelect.
73909 ** The Name context of the SELECT statement is pNC. zType is either
73910 ** "ORDER" or "GROUP" depending on which type of clause pOrderBy is.
73912 ** This routine resolves each term of the clause into an expression.
73913 ** If the order-by term is an integer I between 1 and N (where N is the
73914 ** number of columns in the result set of the SELECT) then the expression
73915 ** in the resolution is a copy of the I-th result-set expression. If
73916 ** the order-by term is an identify that corresponds to the AS-name of
73917 ** a result-set expression, then the term resolves to a copy of the
73918 ** result-set expression. Otherwise, the expression is resolved in
73919 ** the usual way - using sqlite3ResolveExprNames().
73921 ** This routine returns the number of errors. If errors occur, then
73922 ** an appropriate error message might be left in pParse. (OOM errors
73923 ** excepted.)
73925 static int resolveOrderGroupBy(
73926 NameContext *pNC, /* The name context of the SELECT statement */
73927 Select *pSelect, /* The SELECT statement holding pOrderBy */
73928 ExprList *pOrderBy, /* An ORDER BY or GROUP BY clause to resolve */
73929 const char *zType /* Either "ORDER" or "GROUP", as appropriate */
73931 int i; /* Loop counter */
73932 int iCol; /* Column number */
73933 struct ExprList_item *pItem; /* A term of the ORDER BY clause */
73934 Parse *pParse; /* Parsing context */
73935 int nResult; /* Number of terms in the result set */
73937 if( pOrderBy==0 ) return 0;
73938 nResult = pSelect->pEList->nExpr;
73939 pParse = pNC->pParse;
73940 for(i=0, pItem=pOrderBy->a; i<pOrderBy->nExpr; i++, pItem++){
73941 Expr *pE = pItem->pExpr;
73942 iCol = resolveAsName(pParse, pSelect->pEList, pE);
73943 if( iCol>0 ){
73944 /* If an AS-name match is found, mark this ORDER BY column as being
73945 ** a copy of the iCol-th result-set column. The subsequent call to
73946 ** sqlite3ResolveOrderGroupBy() will convert the expression to a
73947 ** copy of the iCol-th result-set expression. */
73948 pItem->iOrderByCol = (u16)iCol;
73949 continue;
73951 if( sqlite3ExprIsInteger(pE, &iCol) ){
73952 /* The ORDER BY term is an integer constant. Again, set the column
73953 ** number so that sqlite3ResolveOrderGroupBy() will convert the
73954 ** order-by term to a copy of the result-set expression */
73955 if( iCol<1 ){
73956 resolveOutOfRangeError(pParse, zType, i+1, nResult);
73957 return 1;
73959 pItem->iOrderByCol = (u16)iCol;
73960 continue;
73963 /* Otherwise, treat the ORDER BY term as an ordinary expression */
73964 pItem->iOrderByCol = 0;
73965 if( sqlite3ResolveExprNames(pNC, pE) ){
73966 return 1;
73969 return sqlite3ResolveOrderGroupBy(pParse, pSelect, pOrderBy, zType);
73973 ** Resolve names in the SELECT statement p and all of its descendents.
73975 static int resolveSelectStep(Walker *pWalker, Select *p){
73976 NameContext *pOuterNC; /* Context that contains this SELECT */
73977 NameContext sNC; /* Name context of this SELECT */
73978 int isCompound; /* True if p is a compound select */
73979 int nCompound; /* Number of compound terms processed so far */
73980 Parse *pParse; /* Parsing context */
73981 ExprList *pEList; /* Result set expression list */
73982 int i; /* Loop counter */
73983 ExprList *pGroupBy; /* The GROUP BY clause */
73984 Select *pLeftmost; /* Left-most of SELECT of a compound */
73985 sqlite3 *db; /* Database connection */
73988 assert( p!=0 );
73989 if( p->selFlags & SF_Resolved ){
73990 return WRC_Prune;
73992 pOuterNC = pWalker->u.pNC;
73993 pParse = pWalker->pParse;
73994 db = pParse->db;
73996 /* Normally sqlite3SelectExpand() will be called first and will have
73997 ** already expanded this SELECT. However, if this is a subquery within
73998 ** an expression, sqlite3ResolveExprNames() will be called without a
73999 ** prior call to sqlite3SelectExpand(). When that happens, let
74000 ** sqlite3SelectPrep() do all of the processing for this SELECT.
74001 ** sqlite3SelectPrep() will invoke both sqlite3SelectExpand() and
74002 ** this routine in the correct order.
74004 if( (p->selFlags & SF_Expanded)==0 ){
74005 sqlite3SelectPrep(pParse, p, pOuterNC);
74006 return (pParse->nErr || db->mallocFailed) ? WRC_Abort : WRC_Prune;
74009 isCompound = p->pPrior!=0;
74010 nCompound = 0;
74011 pLeftmost = p;
74012 while( p ){
74013 assert( (p->selFlags & SF_Expanded)!=0 );
74014 assert( (p->selFlags & SF_Resolved)==0 );
74015 p->selFlags |= SF_Resolved;
74017 /* Resolve the expressions in the LIMIT and OFFSET clauses. These
74018 ** are not allowed to refer to any names, so pass an empty NameContext.
74020 memset(&sNC, 0, sizeof(sNC));
74021 sNC.pParse = pParse;
74022 if( sqlite3ResolveExprNames(&sNC, p->pLimit) ||
74023 sqlite3ResolveExprNames(&sNC, p->pOffset) ){
74024 return WRC_Abort;
74027 /* Set up the local name-context to pass to sqlite3ResolveExprNames() to
74028 ** resolve the result-set expression list.
74030 sNC.allowAgg = 1;
74031 sNC.pSrcList = p->pSrc;
74032 sNC.pNext = pOuterNC;
74034 /* Resolve names in the result set. */
74035 pEList = p->pEList;
74036 assert( pEList!=0 );
74037 for(i=0; i<pEList->nExpr; i++){
74038 Expr *pX = pEList->a[i].pExpr;
74039 if( sqlite3ResolveExprNames(&sNC, pX) ){
74040 return WRC_Abort;
74044 /* Recursively resolve names in all subqueries
74046 for(i=0; i<p->pSrc->nSrc; i++){
74047 struct SrcList_item *pItem = &p->pSrc->a[i];
74048 if( pItem->pSelect ){
74049 NameContext *pNC; /* Used to iterate name contexts */
74050 int nRef = 0; /* Refcount for pOuterNC and outer contexts */
74051 const char *zSavedContext = pParse->zAuthContext;
74053 /* Count the total number of references to pOuterNC and all of its
74054 ** parent contexts. After resolving references to expressions in
74055 ** pItem->pSelect, check if this value has changed. If so, then
74056 ** SELECT statement pItem->pSelect must be correlated. Set the
74057 ** pItem->isCorrelated flag if this is the case. */
74058 for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef += pNC->nRef;
74060 if( pItem->zName ) pParse->zAuthContext = pItem->zName;
74061 sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC);
74062 pParse->zAuthContext = zSavedContext;
74063 if( pParse->nErr || db->mallocFailed ) return WRC_Abort;
74065 for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef -= pNC->nRef;
74066 assert( pItem->isCorrelated==0 && nRef<=0 );
74067 pItem->isCorrelated = (nRef!=0);
74071 /* If there are no aggregate functions in the result-set, and no GROUP BY
74072 ** expression, do not allow aggregates in any of the other expressions.
74074 assert( (p->selFlags & SF_Aggregate)==0 );
74075 pGroupBy = p->pGroupBy;
74076 if( pGroupBy || sNC.hasAgg ){
74077 p->selFlags |= SF_Aggregate;
74078 }else{
74079 sNC.allowAgg = 0;
74082 /* If a HAVING clause is present, then there must be a GROUP BY clause.
74084 if( p->pHaving && !pGroupBy ){
74085 sqlite3ErrorMsg(pParse, "a GROUP BY clause is required before HAVING");
74086 return WRC_Abort;
74089 /* Add the expression list to the name-context before parsing the
74090 ** other expressions in the SELECT statement. This is so that
74091 ** expressions in the WHERE clause (etc.) can refer to expressions by
74092 ** aliases in the result set.
74094 ** Minor point: If this is the case, then the expression will be
74095 ** re-evaluated for each reference to it.
74097 sNC.pEList = p->pEList;
74098 if( sqlite3ResolveExprNames(&sNC, p->pWhere) ||
74099 sqlite3ResolveExprNames(&sNC, p->pHaving)
74101 return WRC_Abort;
74104 /* The ORDER BY and GROUP BY clauses may not refer to terms in
74105 ** outer queries
74107 sNC.pNext = 0;
74108 sNC.allowAgg = 1;
74110 /* Process the ORDER BY clause for singleton SELECT statements.
74111 ** The ORDER BY clause for compounds SELECT statements is handled
74112 ** below, after all of the result-sets for all of the elements of
74113 ** the compound have been resolved.
74115 if( !isCompound && resolveOrderGroupBy(&sNC, p, p->pOrderBy, "ORDER") ){
74116 return WRC_Abort;
74118 if( db->mallocFailed ){
74119 return WRC_Abort;
74122 /* Resolve the GROUP BY clause. At the same time, make sure
74123 ** the GROUP BY clause does not contain aggregate functions.
74125 if( pGroupBy ){
74126 struct ExprList_item *pItem;
74128 if( resolveOrderGroupBy(&sNC, p, pGroupBy, "GROUP") || db->mallocFailed ){
74129 return WRC_Abort;
74131 for(i=0, pItem=pGroupBy->a; i<pGroupBy->nExpr; i++, pItem++){
74132 if( ExprHasProperty(pItem->pExpr, EP_Agg) ){
74133 sqlite3ErrorMsg(pParse, "aggregate functions are not allowed in "
74134 "the GROUP BY clause");
74135 return WRC_Abort;
74140 /* Advance to the next term of the compound
74142 p = p->pPrior;
74143 nCompound++;
74146 /* Resolve the ORDER BY on a compound SELECT after all terms of
74147 ** the compound have been resolved.
74149 if( isCompound && resolveCompoundOrderBy(pParse, pLeftmost) ){
74150 return WRC_Abort;
74153 return WRC_Prune;
74157 ** This routine walks an expression tree and resolves references to
74158 ** table columns and result-set columns. At the same time, do error
74159 ** checking on function usage and set a flag if any aggregate functions
74160 ** are seen.
74162 ** To resolve table columns references we look for nodes (or subtrees) of the
74163 ** form X.Y.Z or Y.Z or just Z where
74165 ** X: The name of a database. Ex: "main" or "temp" or
74166 ** the symbolic name assigned to an ATTACH-ed database.
74168 ** Y: The name of a table in a FROM clause. Or in a trigger
74169 ** one of the special names "old" or "new".
74171 ** Z: The name of a column in table Y.
74173 ** The node at the root of the subtree is modified as follows:
74175 ** Expr.op Changed to TK_COLUMN
74176 ** Expr.pTab Points to the Table object for X.Y
74177 ** Expr.iColumn The column index in X.Y. -1 for the rowid.
74178 ** Expr.iTable The VDBE cursor number for X.Y
74181 ** To resolve result-set references, look for expression nodes of the
74182 ** form Z (with no X and Y prefix) where the Z matches the right-hand
74183 ** size of an AS clause in the result-set of a SELECT. The Z expression
74184 ** is replaced by a copy of the left-hand side of the result-set expression.
74185 ** Table-name and function resolution occurs on the substituted expression
74186 ** tree. For example, in:
74188 ** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY x;
74190 ** The "x" term of the order by is replaced by "a+b" to render:
74192 ** SELECT a+b AS x, c+d AS y FROM t1 ORDER BY a+b;
74194 ** Function calls are checked to make sure that the function is
74195 ** defined and that the correct number of arguments are specified.
74196 ** If the function is an aggregate function, then the pNC->hasAgg is
74197 ** set and the opcode is changed from TK_FUNCTION to TK_AGG_FUNCTION.
74198 ** If an expression contains aggregate functions then the EP_Agg
74199 ** property on the expression is set.
74201 ** An error message is left in pParse if anything is amiss. The number
74202 ** if errors is returned.
74204 SQLITE_PRIVATE int sqlite3ResolveExprNames(
74205 NameContext *pNC, /* Namespace to resolve expressions in. */
74206 Expr *pExpr /* The expression to be analyzed. */
74208 int savedHasAgg;
74209 Walker w;
74211 if( pExpr==0 ) return 0;
74212 #if SQLITE_MAX_EXPR_DEPTH>0
74214 Parse *pParse = pNC->pParse;
74215 if( sqlite3ExprCheckHeight(pParse, pExpr->nHeight+pNC->pParse->nHeight) ){
74216 return 1;
74218 pParse->nHeight += pExpr->nHeight;
74220 #endif
74221 savedHasAgg = pNC->hasAgg;
74222 pNC->hasAgg = 0;
74223 w.xExprCallback = resolveExprStep;
74224 w.xSelectCallback = resolveSelectStep;
74225 w.pParse = pNC->pParse;
74226 w.u.pNC = pNC;
74227 sqlite3WalkExpr(&w, pExpr);
74228 #if SQLITE_MAX_EXPR_DEPTH>0
74229 pNC->pParse->nHeight -= pExpr->nHeight;
74230 #endif
74231 if( pNC->nErr>0 || w.pParse->nErr>0 ){
74232 ExprSetProperty(pExpr, EP_Error);
74234 if( pNC->hasAgg ){
74235 ExprSetProperty(pExpr, EP_Agg);
74236 }else if( savedHasAgg ){
74237 pNC->hasAgg = 1;
74239 return ExprHasProperty(pExpr, EP_Error);
74244 ** Resolve all names in all expressions of a SELECT and in all
74245 ** decendents of the SELECT, including compounds off of p->pPrior,
74246 ** subqueries in expressions, and subqueries used as FROM clause
74247 ** terms.
74249 ** See sqlite3ResolveExprNames() for a description of the kinds of
74250 ** transformations that occur.
74252 ** All SELECT statements should have been expanded using
74253 ** sqlite3SelectExpand() prior to invoking this routine.
74255 SQLITE_PRIVATE void sqlite3ResolveSelectNames(
74256 Parse *pParse, /* The parser context */
74257 Select *p, /* The SELECT statement being coded. */
74258 NameContext *pOuterNC /* Name context for parent SELECT statement */
74260 Walker w;
74262 assert( p!=0 );
74263 w.xExprCallback = resolveExprStep;
74264 w.xSelectCallback = resolveSelectStep;
74265 w.pParse = pParse;
74266 w.u.pNC = pOuterNC;
74267 sqlite3WalkSelect(&w, p);
74270 /************** End of resolve.c *********************************************/
74271 /************** Begin file expr.c ********************************************/
74273 ** 2001 September 15
74275 ** The author disclaims copyright to this source code. In place of
74276 ** a legal notice, here is a blessing:
74278 ** May you do good and not evil.
74279 ** May you find forgiveness for yourself and forgive others.
74280 ** May you share freely, never taking more than you give.
74282 *************************************************************************
74283 ** This file contains routines used for analyzing expressions and
74284 ** for generating VDBE code that evaluates expressions in SQLite.
74288 ** Return the 'affinity' of the expression pExpr if any.
74290 ** If pExpr is a column, a reference to a column via an 'AS' alias,
74291 ** or a sub-select with a column as the return value, then the
74292 ** affinity of that column is returned. Otherwise, 0x00 is returned,
74293 ** indicating no affinity for the expression.
74295 ** i.e. the WHERE clause expresssions in the following statements all
74296 ** have an affinity:
74298 ** CREATE TABLE t1(a);
74299 ** SELECT * FROM t1 WHERE a;
74300 ** SELECT a AS b FROM t1 WHERE b;
74301 ** SELECT * FROM t1 WHERE (select a from t1);
74303 SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr){
74304 int op = pExpr->op;
74305 if( op==TK_SELECT ){
74306 assert( pExpr->flags&EP_xIsSelect );
74307 return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
74309 #ifndef SQLITE_OMIT_CAST
74310 if( op==TK_CAST ){
74311 assert( !ExprHasProperty(pExpr, EP_IntValue) );
74312 return sqlite3AffinityType(pExpr->u.zToken);
74314 #endif
74315 if( (op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER)
74316 && pExpr->pTab!=0
74318 /* op==TK_REGISTER && pExpr->pTab!=0 happens when pExpr was originally
74319 ** a TK_COLUMN but was previously evaluated and cached in a register */
74320 int j = pExpr->iColumn;
74321 if( j<0 ) return SQLITE_AFF_INTEGER;
74322 assert( pExpr->pTab && j<pExpr->pTab->nCol );
74323 return pExpr->pTab->aCol[j].affinity;
74325 return pExpr->affinity;
74329 ** Set the explicit collating sequence for an expression to the
74330 ** collating sequence supplied in the second argument.
74332 SQLITE_PRIVATE Expr *sqlite3ExprSetColl(Expr *pExpr, CollSeq *pColl){
74333 if( pExpr && pColl ){
74334 pExpr->pColl = pColl;
74335 pExpr->flags |= EP_ExpCollate;
74337 return pExpr;
74341 ** Set the collating sequence for expression pExpr to be the collating
74342 ** sequence named by pToken. Return a pointer to the revised expression.
74343 ** The collating sequence is marked as "explicit" using the EP_ExpCollate
74344 ** flag. An explicit collating sequence will override implicit
74345 ** collating sequences.
74347 SQLITE_PRIVATE Expr *sqlite3ExprSetCollByToken(Parse *pParse, Expr *pExpr, Token *pCollName){
74348 char *zColl = 0; /* Dequoted name of collation sequence */
74349 CollSeq *pColl;
74350 sqlite3 *db = pParse->db;
74351 zColl = sqlite3NameFromToken(db, pCollName);
74352 pColl = sqlite3LocateCollSeq(pParse, zColl);
74353 sqlite3ExprSetColl(pExpr, pColl);
74354 sqlite3DbFree(db, zColl);
74355 return pExpr;
74359 ** Return the default collation sequence for the expression pExpr. If
74360 ** there is no default collation type, return 0.
74362 SQLITE_PRIVATE CollSeq *sqlite3ExprCollSeq(Parse *pParse, Expr *pExpr){
74363 CollSeq *pColl = 0;
74364 Expr *p = pExpr;
74365 while( p ){
74366 int op;
74367 pColl = p->pColl;
74368 if( pColl ) break;
74369 op = p->op;
74370 if( p->pTab!=0 && (
74371 op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_REGISTER || op==TK_TRIGGER
74373 /* op==TK_REGISTER && p->pTab!=0 happens when pExpr was originally
74374 ** a TK_COLUMN but was previously evaluated and cached in a register */
74375 const char *zColl;
74376 int j = p->iColumn;
74377 if( j>=0 ){
74378 sqlite3 *db = pParse->db;
74379 zColl = p->pTab->aCol[j].zColl;
74380 pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
74381 pExpr->pColl = pColl;
74383 break;
74385 if( op!=TK_CAST && op!=TK_UPLUS ){
74386 break;
74388 p = p->pLeft;
74390 if( sqlite3CheckCollSeq(pParse, pColl) ){
74391 pColl = 0;
74393 return pColl;
74397 ** pExpr is an operand of a comparison operator. aff2 is the
74398 ** type affinity of the other operand. This routine returns the
74399 ** type affinity that should be used for the comparison operator.
74401 SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2){
74402 char aff1 = sqlite3ExprAffinity(pExpr);
74403 if( aff1 && aff2 ){
74404 /* Both sides of the comparison are columns. If one has numeric
74405 ** affinity, use that. Otherwise use no affinity.
74407 if( sqlite3IsNumericAffinity(aff1) || sqlite3IsNumericAffinity(aff2) ){
74408 return SQLITE_AFF_NUMERIC;
74409 }else{
74410 return SQLITE_AFF_NONE;
74412 }else if( !aff1 && !aff2 ){
74413 /* Neither side of the comparison is a column. Compare the
74414 ** results directly.
74416 return SQLITE_AFF_NONE;
74417 }else{
74418 /* One side is a column, the other is not. Use the columns affinity. */
74419 assert( aff1==0 || aff2==0 );
74420 return (aff1 + aff2);
74425 ** pExpr is a comparison operator. Return the type affinity that should
74426 ** be applied to both operands prior to doing the comparison.
74428 static char comparisonAffinity(Expr *pExpr){
74429 char aff;
74430 assert( pExpr->op==TK_EQ || pExpr->op==TK_IN || pExpr->op==TK_LT ||
74431 pExpr->op==TK_GT || pExpr->op==TK_GE || pExpr->op==TK_LE ||
74432 pExpr->op==TK_NE || pExpr->op==TK_IS || pExpr->op==TK_ISNOT );
74433 assert( pExpr->pLeft );
74434 aff = sqlite3ExprAffinity(pExpr->pLeft);
74435 if( pExpr->pRight ){
74436 aff = sqlite3CompareAffinity(pExpr->pRight, aff);
74437 }else if( ExprHasProperty(pExpr, EP_xIsSelect) ){
74438 aff = sqlite3CompareAffinity(pExpr->x.pSelect->pEList->a[0].pExpr, aff);
74439 }else if( !aff ){
74440 aff = SQLITE_AFF_NONE;
74442 return aff;
74446 ** pExpr is a comparison expression, eg. '=', '<', IN(...) etc.
74447 ** idx_affinity is the affinity of an indexed column. Return true
74448 ** if the index with affinity idx_affinity may be used to implement
74449 ** the comparison in pExpr.
74451 SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity){
74452 char aff = comparisonAffinity(pExpr);
74453 switch( aff ){
74454 case SQLITE_AFF_NONE:
74455 return 1;
74456 case SQLITE_AFF_TEXT:
74457 return idx_affinity==SQLITE_AFF_TEXT;
74458 default:
74459 return sqlite3IsNumericAffinity(idx_affinity);
74464 ** Return the P5 value that should be used for a binary comparison
74465 ** opcode (OP_Eq, OP_Ge etc.) used to compare pExpr1 and pExpr2.
74467 static u8 binaryCompareP5(Expr *pExpr1, Expr *pExpr2, int jumpIfNull){
74468 u8 aff = (char)sqlite3ExprAffinity(pExpr2);
74469 aff = (u8)sqlite3CompareAffinity(pExpr1, aff) | (u8)jumpIfNull;
74470 return aff;
74474 ** Return a pointer to the collation sequence that should be used by
74475 ** a binary comparison operator comparing pLeft and pRight.
74477 ** If the left hand expression has a collating sequence type, then it is
74478 ** used. Otherwise the collation sequence for the right hand expression
74479 ** is used, or the default (BINARY) if neither expression has a collating
74480 ** type.
74482 ** Argument pRight (but not pLeft) may be a null pointer. In this case,
74483 ** it is not considered.
74485 SQLITE_PRIVATE CollSeq *sqlite3BinaryCompareCollSeq(
74486 Parse *pParse,
74487 Expr *pLeft,
74488 Expr *pRight
74490 CollSeq *pColl;
74491 assert( pLeft );
74492 if( pLeft->flags & EP_ExpCollate ){
74493 assert( pLeft->pColl );
74494 pColl = pLeft->pColl;
74495 }else if( pRight && pRight->flags & EP_ExpCollate ){
74496 assert( pRight->pColl );
74497 pColl = pRight->pColl;
74498 }else{
74499 pColl = sqlite3ExprCollSeq(pParse, pLeft);
74500 if( !pColl ){
74501 pColl = sqlite3ExprCollSeq(pParse, pRight);
74504 return pColl;
74508 ** Generate code for a comparison operator.
74510 static int codeCompare(
74511 Parse *pParse, /* The parsing (and code generating) context */
74512 Expr *pLeft, /* The left operand */
74513 Expr *pRight, /* The right operand */
74514 int opcode, /* The comparison opcode */
74515 int in1, int in2, /* Register holding operands */
74516 int dest, /* Jump here if true. */
74517 int jumpIfNull /* If true, jump if either operand is NULL */
74519 int p5;
74520 int addr;
74521 CollSeq *p4;
74523 p4 = sqlite3BinaryCompareCollSeq(pParse, pLeft, pRight);
74524 p5 = binaryCompareP5(pLeft, pRight, jumpIfNull);
74525 addr = sqlite3VdbeAddOp4(pParse->pVdbe, opcode, in2, dest, in1,
74526 (void*)p4, P4_COLLSEQ);
74527 sqlite3VdbeChangeP5(pParse->pVdbe, (u8)p5);
74528 return addr;
74531 #if SQLITE_MAX_EXPR_DEPTH>0
74533 ** Check that argument nHeight is less than or equal to the maximum
74534 ** expression depth allowed. If it is not, leave an error message in
74535 ** pParse.
74537 SQLITE_PRIVATE int sqlite3ExprCheckHeight(Parse *pParse, int nHeight){
74538 int rc = SQLITE_OK;
74539 int mxHeight = pParse->db->aLimit[SQLITE_LIMIT_EXPR_DEPTH];
74540 if( nHeight>mxHeight ){
74541 sqlite3ErrorMsg(pParse,
74542 "Expression tree is too large (maximum depth %d)", mxHeight
74544 rc = SQLITE_ERROR;
74546 return rc;
74549 /* The following three functions, heightOfExpr(), heightOfExprList()
74550 ** and heightOfSelect(), are used to determine the maximum height
74551 ** of any expression tree referenced by the structure passed as the
74552 ** first argument.
74554 ** If this maximum height is greater than the current value pointed
74555 ** to by pnHeight, the second parameter, then set *pnHeight to that
74556 ** value.
74558 static void heightOfExpr(Expr *p, int *pnHeight){
74559 if( p ){
74560 if( p->nHeight>*pnHeight ){
74561 *pnHeight = p->nHeight;
74565 static void heightOfExprList(ExprList *p, int *pnHeight){
74566 if( p ){
74567 int i;
74568 for(i=0; i<p->nExpr; i++){
74569 heightOfExpr(p->a[i].pExpr, pnHeight);
74573 static void heightOfSelect(Select *p, int *pnHeight){
74574 if( p ){
74575 heightOfExpr(p->pWhere, pnHeight);
74576 heightOfExpr(p->pHaving, pnHeight);
74577 heightOfExpr(p->pLimit, pnHeight);
74578 heightOfExpr(p->pOffset, pnHeight);
74579 heightOfExprList(p->pEList, pnHeight);
74580 heightOfExprList(p->pGroupBy, pnHeight);
74581 heightOfExprList(p->pOrderBy, pnHeight);
74582 heightOfSelect(p->pPrior, pnHeight);
74587 ** Set the Expr.nHeight variable in the structure passed as an
74588 ** argument. An expression with no children, Expr.pList or
74589 ** Expr.pSelect member has a height of 1. Any other expression
74590 ** has a height equal to the maximum height of any other
74591 ** referenced Expr plus one.
74593 static void exprSetHeight(Expr *p){
74594 int nHeight = 0;
74595 heightOfExpr(p->pLeft, &nHeight);
74596 heightOfExpr(p->pRight, &nHeight);
74597 if( ExprHasProperty(p, EP_xIsSelect) ){
74598 heightOfSelect(p->x.pSelect, &nHeight);
74599 }else{
74600 heightOfExprList(p->x.pList, &nHeight);
74602 p->nHeight = nHeight + 1;
74606 ** Set the Expr.nHeight variable using the exprSetHeight() function. If
74607 ** the height is greater than the maximum allowed expression depth,
74608 ** leave an error in pParse.
74610 SQLITE_PRIVATE void sqlite3ExprSetHeight(Parse *pParse, Expr *p){
74611 exprSetHeight(p);
74612 sqlite3ExprCheckHeight(pParse, p->nHeight);
74616 ** Return the maximum height of any expression tree referenced
74617 ** by the select statement passed as an argument.
74619 SQLITE_PRIVATE int sqlite3SelectExprHeight(Select *p){
74620 int nHeight = 0;
74621 heightOfSelect(p, &nHeight);
74622 return nHeight;
74624 #else
74625 #define exprSetHeight(y)
74626 #endif /* SQLITE_MAX_EXPR_DEPTH>0 */
74629 ** This routine is the core allocator for Expr nodes.
74631 ** Construct a new expression node and return a pointer to it. Memory
74632 ** for this node and for the pToken argument is a single allocation
74633 ** obtained from sqlite3DbMalloc(). The calling function
74634 ** is responsible for making sure the node eventually gets freed.
74636 ** If dequote is true, then the token (if it exists) is dequoted.
74637 ** If dequote is false, no dequoting is performance. The deQuote
74638 ** parameter is ignored if pToken is NULL or if the token does not
74639 ** appear to be quoted. If the quotes were of the form "..." (double-quotes)
74640 ** then the EP_DblQuoted flag is set on the expression node.
74642 ** Special case: If op==TK_INTEGER and pToken points to a string that
74643 ** can be translated into a 32-bit integer, then the token is not
74644 ** stored in u.zToken. Instead, the integer values is written
74645 ** into u.iValue and the EP_IntValue flag is set. No extra storage
74646 ** is allocated to hold the integer text and the dequote flag is ignored.
74648 SQLITE_PRIVATE Expr *sqlite3ExprAlloc(
74649 sqlite3 *db, /* Handle for sqlite3DbMallocZero() (may be null) */
74650 int op, /* Expression opcode */
74651 const Token *pToken, /* Token argument. Might be NULL */
74652 int dequote /* True to dequote */
74654 Expr *pNew;
74655 int nExtra = 0;
74656 int iValue = 0;
74658 if( pToken ){
74659 if( op!=TK_INTEGER || pToken->z==0
74660 || sqlite3GetInt32(pToken->z, &iValue)==0 ){
74661 nExtra = pToken->n+1;
74662 assert( iValue>=0 );
74665 pNew = sqlite3DbMallocZero(db, sizeof(Expr)+nExtra);
74666 if( pNew ){
74667 pNew->op = (u8)op;
74668 pNew->iAgg = -1;
74669 if( pToken ){
74670 if( nExtra==0 ){
74671 pNew->flags |= EP_IntValue;
74672 pNew->u.iValue = iValue;
74673 }else{
74674 int c;
74675 pNew->u.zToken = (char*)&pNew[1];
74676 assert( pToken->z!=0 || pToken->n==0 );
74677 if( pToken->n ) memcpy(pNew->u.zToken, pToken->z, pToken->n);
74678 pNew->u.zToken[pToken->n] = 0;
74679 if( dequote && nExtra>=3
74680 && ((c = pToken->z[0])=='\'' || c=='"' || c=='[' || c=='`') ){
74681 sqlite3Dequote(pNew->u.zToken);
74682 if( c=='"' ) pNew->flags |= EP_DblQuoted;
74686 #if SQLITE_MAX_EXPR_DEPTH>0
74687 pNew->nHeight = 1;
74688 #endif
74690 return pNew;
74694 ** Allocate a new expression node from a zero-terminated token that has
74695 ** already been dequoted.
74697 SQLITE_PRIVATE Expr *sqlite3Expr(
74698 sqlite3 *db, /* Handle for sqlite3DbMallocZero() (may be null) */
74699 int op, /* Expression opcode */
74700 const char *zToken /* Token argument. Might be NULL */
74702 Token x;
74703 x.z = zToken;
74704 x.n = zToken ? sqlite3Strlen30(zToken) : 0;
74705 return sqlite3ExprAlloc(db, op, &x, 0);
74709 ** Attach subtrees pLeft and pRight to the Expr node pRoot.
74711 ** If pRoot==NULL that means that a memory allocation error has occurred.
74712 ** In that case, delete the subtrees pLeft and pRight.
74714 SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(
74715 sqlite3 *db,
74716 Expr *pRoot,
74717 Expr *pLeft,
74718 Expr *pRight
74720 if( pRoot==0 ){
74721 assert( db->mallocFailed );
74722 sqlite3ExprDelete(db, pLeft);
74723 sqlite3ExprDelete(db, pRight);
74724 }else{
74725 if( pRight ){
74726 pRoot->pRight = pRight;
74727 if( pRight->flags & EP_ExpCollate ){
74728 pRoot->flags |= EP_ExpCollate;
74729 pRoot->pColl = pRight->pColl;
74732 if( pLeft ){
74733 pRoot->pLeft = pLeft;
74734 if( pLeft->flags & EP_ExpCollate ){
74735 pRoot->flags |= EP_ExpCollate;
74736 pRoot->pColl = pLeft->pColl;
74739 exprSetHeight(pRoot);
74744 ** Allocate a Expr node which joins as many as two subtrees.
74746 ** One or both of the subtrees can be NULL. Return a pointer to the new
74747 ** Expr node. Or, if an OOM error occurs, set pParse->db->mallocFailed,
74748 ** free the subtrees and return NULL.
74750 SQLITE_PRIVATE Expr *sqlite3PExpr(
74751 Parse *pParse, /* Parsing context */
74752 int op, /* Expression opcode */
74753 Expr *pLeft, /* Left operand */
74754 Expr *pRight, /* Right operand */
74755 const Token *pToken /* Argument token */
74757 Expr *p = sqlite3ExprAlloc(pParse->db, op, pToken, 1);
74758 sqlite3ExprAttachSubtrees(pParse->db, p, pLeft, pRight);
74759 if( p ) {
74760 sqlite3ExprCheckHeight(pParse, p->nHeight);
74762 return p;
74766 ** Join two expressions using an AND operator. If either expression is
74767 ** NULL, then just return the other expression.
74769 SQLITE_PRIVATE Expr *sqlite3ExprAnd(sqlite3 *db, Expr *pLeft, Expr *pRight){
74770 if( pLeft==0 ){
74771 return pRight;
74772 }else if( pRight==0 ){
74773 return pLeft;
74774 }else{
74775 Expr *pNew = sqlite3ExprAlloc(db, TK_AND, 0, 0);
74776 sqlite3ExprAttachSubtrees(db, pNew, pLeft, pRight);
74777 return pNew;
74782 ** Construct a new expression node for a function with multiple
74783 ** arguments.
74785 SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *pToken){
74786 Expr *pNew;
74787 sqlite3 *db = pParse->db;
74788 assert( pToken );
74789 pNew = sqlite3ExprAlloc(db, TK_FUNCTION, pToken, 1);
74790 if( pNew==0 ){
74791 sqlite3ExprListDelete(db, pList); /* Avoid memory leak when malloc fails */
74792 return 0;
74794 pNew->x.pList = pList;
74795 assert( !ExprHasProperty(pNew, EP_xIsSelect) );
74796 sqlite3ExprSetHeight(pParse, pNew);
74797 return pNew;
74801 ** Assign a variable number to an expression that encodes a wildcard
74802 ** in the original SQL statement.
74804 ** Wildcards consisting of a single "?" are assigned the next sequential
74805 ** variable number.
74807 ** Wildcards of the form "?nnn" are assigned the number "nnn". We make
74808 ** sure "nnn" is not too be to avoid a denial of service attack when
74809 ** the SQL statement comes from an external source.
74811 ** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number
74812 ** as the previous instance of the same wildcard. Or if this is the first
74813 ** instance of the wildcard, the next sequenial variable number is
74814 ** assigned.
74816 SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
74817 sqlite3 *db = pParse->db;
74818 const char *z;
74820 if( pExpr==0 ) return;
74821 assert( !ExprHasAnyProperty(pExpr, EP_IntValue|EP_Reduced|EP_TokenOnly) );
74822 z = pExpr->u.zToken;
74823 assert( z!=0 );
74824 assert( z[0]!=0 );
74825 if( z[1]==0 ){
74826 /* Wildcard of the form "?". Assign the next variable number */
74827 assert( z[0]=='?' );
74828 pExpr->iColumn = (ynVar)(++pParse->nVar);
74829 }else{
74830 ynVar x = 0;
74831 u32 n = sqlite3Strlen30(z);
74832 if( z[0]=='?' ){
74833 /* Wildcard of the form "?nnn". Convert "nnn" to an integer and
74834 ** use it as the variable number */
74835 i64 i;
74836 int bOk = 0==sqlite3Atoi64(&z[1], &i, n-1, SQLITE_UTF8);
74837 pExpr->iColumn = x = (ynVar)i;
74838 testcase( i==0 );
74839 testcase( i==1 );
74840 testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 );
74841 testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] );
74842 if( bOk==0 || i<1 || i>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
74843 sqlite3ErrorMsg(pParse, "variable number must be between ?1 and ?%d",
74844 db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]);
74845 x = 0;
74847 if( i>pParse->nVar ){
74848 pParse->nVar = (int)i;
74850 }else{
74851 /* Wildcards like ":aaa", "$aaa" or "@aaa". Reuse the same variable
74852 ** number as the prior appearance of the same name, or if the name
74853 ** has never appeared before, reuse the same variable number
74855 ynVar i;
74856 for(i=0; i<pParse->nzVar; i++){
74857 if( pParse->azVar[i] && memcmp(pParse->azVar[i],z,n+1)==0 ){
74858 pExpr->iColumn = x = (ynVar)i+1;
74859 break;
74862 if( x==0 ) x = pExpr->iColumn = (ynVar)(++pParse->nVar);
74864 if( x>0 ){
74865 if( x>pParse->nzVar ){
74866 char **a;
74867 a = sqlite3DbRealloc(db, pParse->azVar, x*sizeof(a[0]));
74868 if( a==0 ) return; /* Error reported through db->mallocFailed */
74869 pParse->azVar = a;
74870 memset(&a[pParse->nzVar], 0, (x-pParse->nzVar)*sizeof(a[0]));
74871 pParse->nzVar = x;
74873 if( z[0]!='?' || pParse->azVar[x-1]==0 ){
74874 sqlite3DbFree(db, pParse->azVar[x-1]);
74875 pParse->azVar[x-1] = sqlite3DbStrNDup(db, z, n);
74879 if( !pParse->nErr && pParse->nVar>db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] ){
74880 sqlite3ErrorMsg(pParse, "too many SQL variables");
74885 ** Recursively delete an expression tree.
74887 SQLITE_PRIVATE void sqlite3ExprDelete(sqlite3 *db, Expr *p){
74888 if( p==0 ) return;
74889 /* Sanity check: Assert that the IntValue is non-negative if it exists */
74890 assert( !ExprHasProperty(p, EP_IntValue) || p->u.iValue>=0 );
74891 if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
74892 sqlite3ExprDelete(db, p->pLeft);
74893 sqlite3ExprDelete(db, p->pRight);
74894 if( !ExprHasProperty(p, EP_Reduced) && (p->flags2 & EP2_MallocedToken)!=0 ){
74895 sqlite3DbFree(db, p->u.zToken);
74897 if( ExprHasProperty(p, EP_xIsSelect) ){
74898 sqlite3SelectDelete(db, p->x.pSelect);
74899 }else{
74900 sqlite3ExprListDelete(db, p->x.pList);
74903 if( !ExprHasProperty(p, EP_Static) ){
74904 sqlite3DbFree(db, p);
74909 ** Return the number of bytes allocated for the expression structure
74910 ** passed as the first argument. This is always one of EXPR_FULLSIZE,
74911 ** EXPR_REDUCEDSIZE or EXPR_TOKENONLYSIZE.
74913 static int exprStructSize(Expr *p){
74914 if( ExprHasProperty(p, EP_TokenOnly) ) return EXPR_TOKENONLYSIZE;
74915 if( ExprHasProperty(p, EP_Reduced) ) return EXPR_REDUCEDSIZE;
74916 return EXPR_FULLSIZE;
74920 ** The dupedExpr*Size() routines each return the number of bytes required
74921 ** to store a copy of an expression or expression tree. They differ in
74922 ** how much of the tree is measured.
74924 ** dupedExprStructSize() Size of only the Expr structure
74925 ** dupedExprNodeSize() Size of Expr + space for token
74926 ** dupedExprSize() Expr + token + subtree components
74928 ***************************************************************************
74930 ** The dupedExprStructSize() function returns two values OR-ed together:
74931 ** (1) the space required for a copy of the Expr structure only and
74932 ** (2) the EP_xxx flags that indicate what the structure size should be.
74933 ** The return values is always one of:
74935 ** EXPR_FULLSIZE
74936 ** EXPR_REDUCEDSIZE | EP_Reduced
74937 ** EXPR_TOKENONLYSIZE | EP_TokenOnly
74939 ** The size of the structure can be found by masking the return value
74940 ** of this routine with 0xfff. The flags can be found by masking the
74941 ** return value with EP_Reduced|EP_TokenOnly.
74943 ** Note that with flags==EXPRDUP_REDUCE, this routines works on full-size
74944 ** (unreduced) Expr objects as they or originally constructed by the parser.
74945 ** During expression analysis, extra information is computed and moved into
74946 ** later parts of teh Expr object and that extra information might get chopped
74947 ** off if the expression is reduced. Note also that it does not work to
74948 ** make a EXPRDUP_REDUCE copy of a reduced expression. It is only legal
74949 ** to reduce a pristine expression tree from the parser. The implementation
74950 ** of dupedExprStructSize() contain multiple assert() statements that attempt
74951 ** to enforce this constraint.
74953 static int dupedExprStructSize(Expr *p, int flags){
74954 int nSize;
74955 assert( flags==EXPRDUP_REDUCE || flags==0 ); /* Only one flag value allowed */
74956 if( 0==(flags&EXPRDUP_REDUCE) ){
74957 nSize = EXPR_FULLSIZE;
74958 }else{
74959 assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
74960 assert( !ExprHasProperty(p, EP_FromJoin) );
74961 assert( (p->flags2 & EP2_MallocedToken)==0 );
74962 assert( (p->flags2 & EP2_Irreducible)==0 );
74963 if( p->pLeft || p->pRight || p->pColl || p->x.pList ){
74964 nSize = EXPR_REDUCEDSIZE | EP_Reduced;
74965 }else{
74966 nSize = EXPR_TOKENONLYSIZE | EP_TokenOnly;
74969 return nSize;
74973 ** This function returns the space in bytes required to store the copy
74974 ** of the Expr structure and a copy of the Expr.u.zToken string (if that
74975 ** string is defined.)
74977 static int dupedExprNodeSize(Expr *p, int flags){
74978 int nByte = dupedExprStructSize(p, flags) & 0xfff;
74979 if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
74980 nByte += sqlite3Strlen30(p->u.zToken)+1;
74982 return ROUND8(nByte);
74986 ** Return the number of bytes required to create a duplicate of the
74987 ** expression passed as the first argument. The second argument is a
74988 ** mask containing EXPRDUP_XXX flags.
74990 ** The value returned includes space to create a copy of the Expr struct
74991 ** itself and the buffer referred to by Expr.u.zToken, if any.
74993 ** If the EXPRDUP_REDUCE flag is set, then the return value includes
74994 ** space to duplicate all Expr nodes in the tree formed by Expr.pLeft
74995 ** and Expr.pRight variables (but not for any structures pointed to or
74996 ** descended from the Expr.x.pList or Expr.x.pSelect variables).
74998 static int dupedExprSize(Expr *p, int flags){
74999 int nByte = 0;
75000 if( p ){
75001 nByte = dupedExprNodeSize(p, flags);
75002 if( flags&EXPRDUP_REDUCE ){
75003 nByte += dupedExprSize(p->pLeft, flags) + dupedExprSize(p->pRight, flags);
75006 return nByte;
75010 ** This function is similar to sqlite3ExprDup(), except that if pzBuffer
75011 ** is not NULL then *pzBuffer is assumed to point to a buffer large enough
75012 ** to store the copy of expression p, the copies of p->u.zToken
75013 ** (if applicable), and the copies of the p->pLeft and p->pRight expressions,
75014 ** if any. Before returning, *pzBuffer is set to the first byte passed the
75015 ** portion of the buffer copied into by this function.
75017 static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
75018 Expr *pNew = 0; /* Value to return */
75019 if( p ){
75020 const int isReduced = (flags&EXPRDUP_REDUCE);
75021 u8 *zAlloc;
75022 u32 staticFlag = 0;
75024 assert( pzBuffer==0 || isReduced );
75026 /* Figure out where to write the new Expr structure. */
75027 if( pzBuffer ){
75028 zAlloc = *pzBuffer;
75029 staticFlag = EP_Static;
75030 }else{
75031 zAlloc = sqlite3DbMallocRaw(db, dupedExprSize(p, flags));
75033 pNew = (Expr *)zAlloc;
75035 if( pNew ){
75036 /* Set nNewSize to the size allocated for the structure pointed to
75037 ** by pNew. This is either EXPR_FULLSIZE, EXPR_REDUCEDSIZE or
75038 ** EXPR_TOKENONLYSIZE. nToken is set to the number of bytes consumed
75039 ** by the copy of the p->u.zToken string (if any).
75041 const unsigned nStructSize = dupedExprStructSize(p, flags);
75042 const int nNewSize = nStructSize & 0xfff;
75043 int nToken;
75044 if( !ExprHasProperty(p, EP_IntValue) && p->u.zToken ){
75045 nToken = sqlite3Strlen30(p->u.zToken) + 1;
75046 }else{
75047 nToken = 0;
75049 if( isReduced ){
75050 assert( ExprHasProperty(p, EP_Reduced)==0 );
75051 memcpy(zAlloc, p, nNewSize);
75052 }else{
75053 int nSize = exprStructSize(p);
75054 memcpy(zAlloc, p, nSize);
75055 memset(&zAlloc[nSize], 0, EXPR_FULLSIZE-nSize);
75058 /* Set the EP_Reduced, EP_TokenOnly, and EP_Static flags appropriately. */
75059 pNew->flags &= ~(EP_Reduced|EP_TokenOnly|EP_Static);
75060 pNew->flags |= nStructSize & (EP_Reduced|EP_TokenOnly);
75061 pNew->flags |= staticFlag;
75063 /* Copy the p->u.zToken string, if any. */
75064 if( nToken ){
75065 char *zToken = pNew->u.zToken = (char*)&zAlloc[nNewSize];
75066 memcpy(zToken, p->u.zToken, nToken);
75069 if( 0==((p->flags|pNew->flags) & EP_TokenOnly) ){
75070 /* Fill in the pNew->x.pSelect or pNew->x.pList member. */
75071 if( ExprHasProperty(p, EP_xIsSelect) ){
75072 pNew->x.pSelect = sqlite3SelectDup(db, p->x.pSelect, isReduced);
75073 }else{
75074 pNew->x.pList = sqlite3ExprListDup(db, p->x.pList, isReduced);
75078 /* Fill in pNew->pLeft and pNew->pRight. */
75079 if( ExprHasAnyProperty(pNew, EP_Reduced|EP_TokenOnly) ){
75080 zAlloc += dupedExprNodeSize(p, flags);
75081 if( ExprHasProperty(pNew, EP_Reduced) ){
75082 pNew->pLeft = exprDup(db, p->pLeft, EXPRDUP_REDUCE, &zAlloc);
75083 pNew->pRight = exprDup(db, p->pRight, EXPRDUP_REDUCE, &zAlloc);
75085 if( pzBuffer ){
75086 *pzBuffer = zAlloc;
75088 }else{
75089 pNew->flags2 = 0;
75090 if( !ExprHasAnyProperty(p, EP_TokenOnly) ){
75091 pNew->pLeft = sqlite3ExprDup(db, p->pLeft, 0);
75092 pNew->pRight = sqlite3ExprDup(db, p->pRight, 0);
75098 return pNew;
75102 ** The following group of routines make deep copies of expressions,
75103 ** expression lists, ID lists, and select statements. The copies can
75104 ** be deleted (by being passed to their respective ...Delete() routines)
75105 ** without effecting the originals.
75107 ** The expression list, ID, and source lists return by sqlite3ExprListDup(),
75108 ** sqlite3IdListDup(), and sqlite3SrcListDup() can not be further expanded
75109 ** by subsequent calls to sqlite*ListAppend() routines.
75111 ** Any tables that the SrcList might point to are not duplicated.
75113 ** The flags parameter contains a combination of the EXPRDUP_XXX flags.
75114 ** If the EXPRDUP_REDUCE flag is set, then the structure returned is a
75115 ** truncated version of the usual Expr structure that will be stored as
75116 ** part of the in-memory representation of the database schema.
75118 SQLITE_PRIVATE Expr *sqlite3ExprDup(sqlite3 *db, Expr *p, int flags){
75119 return exprDup(db, p, flags, 0);
75121 SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3 *db, ExprList *p, int flags){
75122 ExprList *pNew;
75123 struct ExprList_item *pItem, *pOldItem;
75124 int i;
75125 if( p==0 ) return 0;
75126 pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
75127 if( pNew==0 ) return 0;
75128 pNew->iECursor = 0;
75129 pNew->nExpr = pNew->nAlloc = p->nExpr;
75130 pNew->a = pItem = sqlite3DbMallocRaw(db, p->nExpr*sizeof(p->a[0]) );
75131 if( pItem==0 ){
75132 sqlite3DbFree(db, pNew);
75133 return 0;
75135 pOldItem = p->a;
75136 for(i=0; i<p->nExpr; i++, pItem++, pOldItem++){
75137 Expr *pOldExpr = pOldItem->pExpr;
75138 pItem->pExpr = sqlite3ExprDup(db, pOldExpr, flags);
75139 pItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
75140 pItem->zSpan = sqlite3DbStrDup(db, pOldItem->zSpan);
75141 pItem->sortOrder = pOldItem->sortOrder;
75142 pItem->done = 0;
75143 pItem->iOrderByCol = pOldItem->iOrderByCol;
75144 pItem->iAlias = pOldItem->iAlias;
75146 return pNew;
75150 ** If cursors, triggers, views and subqueries are all omitted from
75151 ** the build, then none of the following routines, except for
75152 ** sqlite3SelectDup(), can be called. sqlite3SelectDup() is sometimes
75153 ** called with a NULL argument.
75155 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER) \
75156 || !defined(SQLITE_OMIT_SUBQUERY)
75157 SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3 *db, SrcList *p, int flags){
75158 SrcList *pNew;
75159 int i;
75160 int nByte;
75161 if( p==0 ) return 0;
75162 nByte = sizeof(*p) + (p->nSrc>0 ? sizeof(p->a[0]) * (p->nSrc-1) : 0);
75163 pNew = sqlite3DbMallocRaw(db, nByte );
75164 if( pNew==0 ) return 0;
75165 pNew->nSrc = pNew->nAlloc = p->nSrc;
75166 for(i=0; i<p->nSrc; i++){
75167 struct SrcList_item *pNewItem = &pNew->a[i];
75168 struct SrcList_item *pOldItem = &p->a[i];
75169 Table *pTab;
75170 pNewItem->zDatabase = sqlite3DbStrDup(db, pOldItem->zDatabase);
75171 pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
75172 pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
75173 pNewItem->jointype = pOldItem->jointype;
75174 pNewItem->iCursor = pOldItem->iCursor;
75175 pNewItem->addrFillSub = pOldItem->addrFillSub;
75176 pNewItem->regReturn = pOldItem->regReturn;
75177 pNewItem->isCorrelated = pOldItem->isCorrelated;
75178 pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex);
75179 pNewItem->notIndexed = pOldItem->notIndexed;
75180 pNewItem->pIndex = pOldItem->pIndex;
75181 pTab = pNewItem->pTab = pOldItem->pTab;
75182 if( pTab ){
75183 pTab->nRef++;
75185 pNewItem->pSelect = sqlite3SelectDup(db, pOldItem->pSelect, flags);
75186 pNewItem->pOn = sqlite3ExprDup(db, pOldItem->pOn, flags);
75187 pNewItem->pUsing = sqlite3IdListDup(db, pOldItem->pUsing);
75188 pNewItem->colUsed = pOldItem->colUsed;
75190 return pNew;
75192 SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3 *db, IdList *p){
75193 IdList *pNew;
75194 int i;
75195 if( p==0 ) return 0;
75196 pNew = sqlite3DbMallocRaw(db, sizeof(*pNew) );
75197 if( pNew==0 ) return 0;
75198 pNew->nId = pNew->nAlloc = p->nId;
75199 pNew->a = sqlite3DbMallocRaw(db, p->nId*sizeof(p->a[0]) );
75200 if( pNew->a==0 ){
75201 sqlite3DbFree(db, pNew);
75202 return 0;
75204 for(i=0; i<p->nId; i++){
75205 struct IdList_item *pNewItem = &pNew->a[i];
75206 struct IdList_item *pOldItem = &p->a[i];
75207 pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
75208 pNewItem->idx = pOldItem->idx;
75210 return pNew;
75212 SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
75213 Select *pNew, *pPrior;
75214 if( p==0 ) return 0;
75215 pNew = sqlite3DbMallocRaw(db, sizeof(*p) );
75216 if( pNew==0 ) return 0;
75217 pNew->pEList = sqlite3ExprListDup(db, p->pEList, flags);
75218 pNew->pSrc = sqlite3SrcListDup(db, p->pSrc, flags);
75219 pNew->pWhere = sqlite3ExprDup(db, p->pWhere, flags);
75220 pNew->pGroupBy = sqlite3ExprListDup(db, p->pGroupBy, flags);
75221 pNew->pHaving = sqlite3ExprDup(db, p->pHaving, flags);
75222 pNew->pOrderBy = sqlite3ExprListDup(db, p->pOrderBy, flags);
75223 pNew->op = p->op;
75224 pNew->pPrior = pPrior = sqlite3SelectDup(db, p->pPrior, flags);
75225 if( pPrior ) pPrior->pNext = pNew;
75226 pNew->pNext = 0;
75227 pNew->pLimit = sqlite3ExprDup(db, p->pLimit, flags);
75228 pNew->pOffset = sqlite3ExprDup(db, p->pOffset, flags);
75229 pNew->iLimit = 0;
75230 pNew->iOffset = 0;
75231 pNew->selFlags = p->selFlags & ~SF_UsesEphemeral;
75232 pNew->pRightmost = 0;
75233 pNew->addrOpenEphm[0] = -1;
75234 pNew->addrOpenEphm[1] = -1;
75235 pNew->addrOpenEphm[2] = -1;
75236 return pNew;
75238 #else
75239 SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
75240 assert( p==0 );
75241 return 0;
75243 #endif
75247 ** Add a new element to the end of an expression list. If pList is
75248 ** initially NULL, then create a new expression list.
75250 ** If a memory allocation error occurs, the entire list is freed and
75251 ** NULL is returned. If non-NULL is returned, then it is guaranteed
75252 ** that the new entry was successfully appended.
75254 SQLITE_PRIVATE ExprList *sqlite3ExprListAppend(
75255 Parse *pParse, /* Parsing context */
75256 ExprList *pList, /* List to which to append. Might be NULL */
75257 Expr *pExpr /* Expression to be appended. Might be NULL */
75259 sqlite3 *db = pParse->db;
75260 if( pList==0 ){
75261 pList = sqlite3DbMallocZero(db, sizeof(ExprList) );
75262 if( pList==0 ){
75263 goto no_mem;
75265 assert( pList->nAlloc==0 );
75267 if( pList->nAlloc<=pList->nExpr ){
75268 struct ExprList_item *a;
75269 int n = pList->nAlloc*2 + 4;
75270 a = sqlite3DbRealloc(db, pList->a, n*sizeof(pList->a[0]));
75271 if( a==0 ){
75272 goto no_mem;
75274 pList->a = a;
75275 pList->nAlloc = sqlite3DbMallocSize(db, a)/sizeof(a[0]);
75277 assert( pList->a!=0 );
75278 if( 1 ){
75279 struct ExprList_item *pItem = &pList->a[pList->nExpr++];
75280 memset(pItem, 0, sizeof(*pItem));
75281 pItem->pExpr = pExpr;
75283 return pList;
75285 no_mem:
75286 /* Avoid leaking memory if malloc has failed. */
75287 sqlite3ExprDelete(db, pExpr);
75288 sqlite3ExprListDelete(db, pList);
75289 return 0;
75293 ** Set the ExprList.a[].zName element of the most recently added item
75294 ** on the expression list.
75296 ** pList might be NULL following an OOM error. But pName should never be
75297 ** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag
75298 ** is set.
75300 SQLITE_PRIVATE void sqlite3ExprListSetName(
75301 Parse *pParse, /* Parsing context */
75302 ExprList *pList, /* List to which to add the span. */
75303 Token *pName, /* Name to be added */
75304 int dequote /* True to cause the name to be dequoted */
75306 assert( pList!=0 || pParse->db->mallocFailed!=0 );
75307 if( pList ){
75308 struct ExprList_item *pItem;
75309 assert( pList->nExpr>0 );
75310 pItem = &pList->a[pList->nExpr-1];
75311 assert( pItem->zName==0 );
75312 pItem->zName = sqlite3DbStrNDup(pParse->db, pName->z, pName->n);
75313 if( dequote && pItem->zName ) sqlite3Dequote(pItem->zName);
75318 ** Set the ExprList.a[].zSpan element of the most recently added item
75319 ** on the expression list.
75321 ** pList might be NULL following an OOM error. But pSpan should never be
75322 ** NULL. If a memory allocation fails, the pParse->db->mallocFailed flag
75323 ** is set.
75325 SQLITE_PRIVATE void sqlite3ExprListSetSpan(
75326 Parse *pParse, /* Parsing context */
75327 ExprList *pList, /* List to which to add the span. */
75328 ExprSpan *pSpan /* The span to be added */
75330 sqlite3 *db = pParse->db;
75331 assert( pList!=0 || db->mallocFailed!=0 );
75332 if( pList ){
75333 struct ExprList_item *pItem = &pList->a[pList->nExpr-1];
75334 assert( pList->nExpr>0 );
75335 assert( db->mallocFailed || pItem->pExpr==pSpan->pExpr );
75336 sqlite3DbFree(db, pItem->zSpan);
75337 pItem->zSpan = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
75338 (int)(pSpan->zEnd - pSpan->zStart));
75343 ** If the expression list pEList contains more than iLimit elements,
75344 ** leave an error message in pParse.
75346 SQLITE_PRIVATE void sqlite3ExprListCheckLength(
75347 Parse *pParse,
75348 ExprList *pEList,
75349 const char *zObject
75351 int mx = pParse->db->aLimit[SQLITE_LIMIT_COLUMN];
75352 testcase( pEList && pEList->nExpr==mx );
75353 testcase( pEList && pEList->nExpr==mx+1 );
75354 if( pEList && pEList->nExpr>mx ){
75355 sqlite3ErrorMsg(pParse, "too many columns in %s", zObject);
75360 ** Delete an entire expression list.
75362 SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
75363 int i;
75364 struct ExprList_item *pItem;
75365 if( pList==0 ) return;
75366 assert( pList->a!=0 || (pList->nExpr==0 && pList->nAlloc==0) );
75367 assert( pList->nExpr<=pList->nAlloc );
75368 for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
75369 sqlite3ExprDelete(db, pItem->pExpr);
75370 sqlite3DbFree(db, pItem->zName);
75371 sqlite3DbFree(db, pItem->zSpan);
75373 sqlite3DbFree(db, pList->a);
75374 sqlite3DbFree(db, pList);
75378 ** These routines are Walker callbacks. Walker.u.pi is a pointer
75379 ** to an integer. These routines are checking an expression to see
75380 ** if it is a constant. Set *Walker.u.pi to 0 if the expression is
75381 ** not constant.
75383 ** These callback routines are used to implement the following:
75385 ** sqlite3ExprIsConstant()
75386 ** sqlite3ExprIsConstantNotJoin()
75387 ** sqlite3ExprIsConstantOrFunction()
75390 static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
75392 /* If pWalker->u.i is 3 then any term of the expression that comes from
75393 ** the ON or USING clauses of a join disqualifies the expression
75394 ** from being considered constant. */
75395 if( pWalker->u.i==3 && ExprHasAnyProperty(pExpr, EP_FromJoin) ){
75396 pWalker->u.i = 0;
75397 return WRC_Abort;
75400 switch( pExpr->op ){
75401 /* Consider functions to be constant if all their arguments are constant
75402 ** and pWalker->u.i==2 */
75403 case TK_FUNCTION:
75404 if( pWalker->u.i==2 ) return 0;
75405 /* Fall through */
75406 case TK_ID:
75407 case TK_COLUMN:
75408 case TK_AGG_FUNCTION:
75409 case TK_AGG_COLUMN:
75410 testcase( pExpr->op==TK_ID );
75411 testcase( pExpr->op==TK_COLUMN );
75412 testcase( pExpr->op==TK_AGG_FUNCTION );
75413 testcase( pExpr->op==TK_AGG_COLUMN );
75414 pWalker->u.i = 0;
75415 return WRC_Abort;
75416 default:
75417 testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
75418 testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
75419 return WRC_Continue;
75422 static int selectNodeIsConstant(Walker *pWalker, Select *NotUsed){
75423 UNUSED_PARAMETER(NotUsed);
75424 pWalker->u.i = 0;
75425 return WRC_Abort;
75427 static int exprIsConst(Expr *p, int initFlag){
75428 Walker w;
75429 w.u.i = initFlag;
75430 w.xExprCallback = exprNodeIsConstant;
75431 w.xSelectCallback = selectNodeIsConstant;
75432 sqlite3WalkExpr(&w, p);
75433 return w.u.i;
75437 ** Walk an expression tree. Return 1 if the expression is constant
75438 ** and 0 if it involves variables or function calls.
75440 ** For the purposes of this function, a double-quoted string (ex: "abc")
75441 ** is considered a variable but a single-quoted string (ex: 'abc') is
75442 ** a constant.
75444 SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
75445 return exprIsConst(p, 1);
75449 ** Walk an expression tree. Return 1 if the expression is constant
75450 ** that does no originate from the ON or USING clauses of a join.
75451 ** Return 0 if it involves variables or function calls or terms from
75452 ** an ON or USING clause.
75454 SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
75455 return exprIsConst(p, 3);
75459 ** Walk an expression tree. Return 1 if the expression is constant
75460 ** or a function call with constant arguments. Return and 0 if there
75461 ** are any variables.
75463 ** For the purposes of this function, a double-quoted string (ex: "abc")
75464 ** is considered a variable but a single-quoted string (ex: 'abc') is
75465 ** a constant.
75467 SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p){
75468 return exprIsConst(p, 2);
75472 ** If the expression p codes a constant integer that is small enough
75473 ** to fit in a 32-bit integer, return 1 and put the value of the integer
75474 ** in *pValue. If the expression is not an integer or if it is too big
75475 ** to fit in a signed 32-bit integer, return 0 and leave *pValue unchanged.
75477 SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr *p, int *pValue){
75478 int rc = 0;
75480 /* If an expression is an integer literal that fits in a signed 32-bit
75481 ** integer, then the EP_IntValue flag will have already been set */
75482 assert( p->op!=TK_INTEGER || (p->flags & EP_IntValue)!=0
75483 || sqlite3GetInt32(p->u.zToken, &rc)==0 );
75485 if( p->flags & EP_IntValue ){
75486 *pValue = p->u.iValue;
75487 return 1;
75489 switch( p->op ){
75490 case TK_UPLUS: {
75491 rc = sqlite3ExprIsInteger(p->pLeft, pValue);
75492 break;
75494 case TK_UMINUS: {
75495 int v;
75496 if( sqlite3ExprIsInteger(p->pLeft, &v) ){
75497 *pValue = -v;
75498 rc = 1;
75500 break;
75502 default: break;
75504 return rc;
75508 ** Return FALSE if there is no chance that the expression can be NULL.
75510 ** If the expression might be NULL or if the expression is too complex
75511 ** to tell return TRUE.
75513 ** This routine is used as an optimization, to skip OP_IsNull opcodes
75514 ** when we know that a value cannot be NULL. Hence, a false positive
75515 ** (returning TRUE when in fact the expression can never be NULL) might
75516 ** be a small performance hit but is otherwise harmless. On the other
75517 ** hand, a false negative (returning FALSE when the result could be NULL)
75518 ** will likely result in an incorrect answer. So when in doubt, return
75519 ** TRUE.
75521 SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
75522 u8 op;
75523 while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
75524 op = p->op;
75525 if( op==TK_REGISTER ) op = p->op2;
75526 switch( op ){
75527 case TK_INTEGER:
75528 case TK_STRING:
75529 case TK_FLOAT:
75530 case TK_BLOB:
75531 return 0;
75532 default:
75533 return 1;
75538 ** Generate an OP_IsNull instruction that tests register iReg and jumps
75539 ** to location iDest if the value in iReg is NULL. The value in iReg
75540 ** was computed by pExpr. If we can look at pExpr at compile-time and
75541 ** determine that it can never generate a NULL, then the OP_IsNull operation
75542 ** can be omitted.
75544 SQLITE_PRIVATE void sqlite3ExprCodeIsNullJump(
75545 Vdbe *v, /* The VDBE under construction */
75546 const Expr *pExpr, /* Only generate OP_IsNull if this expr can be NULL */
75547 int iReg, /* Test the value in this register for NULL */
75548 int iDest /* Jump here if the value is null */
75550 if( sqlite3ExprCanBeNull(pExpr) ){
75551 sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iDest);
75556 ** Return TRUE if the given expression is a constant which would be
75557 ** unchanged by OP_Affinity with the affinity given in the second
75558 ** argument.
75560 ** This routine is used to determine if the OP_Affinity operation
75561 ** can be omitted. When in doubt return FALSE. A false negative
75562 ** is harmless. A false positive, however, can result in the wrong
75563 ** answer.
75565 SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr *p, char aff){
75566 u8 op;
75567 if( aff==SQLITE_AFF_NONE ) return 1;
75568 while( p->op==TK_UPLUS || p->op==TK_UMINUS ){ p = p->pLeft; }
75569 op = p->op;
75570 if( op==TK_REGISTER ) op = p->op2;
75571 switch( op ){
75572 case TK_INTEGER: {
75573 return aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC;
75575 case TK_FLOAT: {
75576 return aff==SQLITE_AFF_REAL || aff==SQLITE_AFF_NUMERIC;
75578 case TK_STRING: {
75579 return aff==SQLITE_AFF_TEXT;
75581 case TK_BLOB: {
75582 return 1;
75584 case TK_COLUMN: {
75585 assert( p->iTable>=0 ); /* p cannot be part of a CHECK constraint */
75586 return p->iColumn<0
75587 && (aff==SQLITE_AFF_INTEGER || aff==SQLITE_AFF_NUMERIC);
75589 default: {
75590 return 0;
75596 ** Return TRUE if the given string is a row-id column name.
75598 SQLITE_PRIVATE int sqlite3IsRowid(const char *z){
75599 if( sqlite3StrICmp(z, "_ROWID_")==0 ) return 1;
75600 if( sqlite3StrICmp(z, "ROWID")==0 ) return 1;
75601 if( sqlite3StrICmp(z, "OID")==0 ) return 1;
75602 return 0;
75606 ** Return true if we are able to the IN operator optimization on a
75607 ** query of the form
75609 ** x IN (SELECT ...)
75611 ** Where the SELECT... clause is as specified by the parameter to this
75612 ** routine.
75614 ** The Select object passed in has already been preprocessed and no
75615 ** errors have been found.
75617 #ifndef SQLITE_OMIT_SUBQUERY
75618 static int isCandidateForInOpt(Select *p){
75619 SrcList *pSrc;
75620 ExprList *pEList;
75621 Table *pTab;
75622 if( p==0 ) return 0; /* right-hand side of IN is SELECT */
75623 if( p->pPrior ) return 0; /* Not a compound SELECT */
75624 if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
75625 testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
75626 testcase( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
75627 return 0; /* No DISTINCT keyword and no aggregate functions */
75629 assert( p->pGroupBy==0 ); /* Has no GROUP BY clause */
75630 if( p->pLimit ) return 0; /* Has no LIMIT clause */
75631 assert( p->pOffset==0 ); /* No LIMIT means no OFFSET */
75632 if( p->pWhere ) return 0; /* Has no WHERE clause */
75633 pSrc = p->pSrc;
75634 assert( pSrc!=0 );
75635 if( pSrc->nSrc!=1 ) return 0; /* Single term in FROM clause */
75636 if( pSrc->a[0].pSelect ) return 0; /* FROM is not a subquery or view */
75637 pTab = pSrc->a[0].pTab;
75638 if( NEVER(pTab==0) ) return 0;
75639 assert( pTab->pSelect==0 ); /* FROM clause is not a view */
75640 if( IsVirtual(pTab) ) return 0; /* FROM clause not a virtual table */
75641 pEList = p->pEList;
75642 if( pEList->nExpr!=1 ) return 0; /* One column in the result set */
75643 if( pEList->a[0].pExpr->op!=TK_COLUMN ) return 0; /* Result is a column */
75644 return 1;
75646 #endif /* SQLITE_OMIT_SUBQUERY */
75649 ** Code an OP_Once instruction and allocate space for its flag. Return the
75650 ** address of the new instruction.
75652 SQLITE_PRIVATE int sqlite3CodeOnce(Parse *pParse){
75653 Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */
75654 return sqlite3VdbeAddOp1(v, OP_Once, pParse->nOnce++);
75658 ** This function is used by the implementation of the IN (...) operator.
75659 ** It's job is to find or create a b-tree structure that may be used
75660 ** either to test for membership of the (...) set or to iterate through
75661 ** its members, skipping duplicates.
75663 ** The index of the cursor opened on the b-tree (database table, database index
75664 ** or ephermal table) is stored in pX->iTable before this function returns.
75665 ** The returned value of this function indicates the b-tree type, as follows:
75667 ** IN_INDEX_ROWID - The cursor was opened on a database table.
75668 ** IN_INDEX_INDEX - The cursor was opened on a database index.
75669 ** IN_INDEX_EPH - The cursor was opened on a specially created and
75670 ** populated epheremal table.
75672 ** An existing b-tree may only be used if the SELECT is of the simple
75673 ** form:
75675 ** SELECT <column> FROM <table>
75677 ** If the prNotFound parameter is 0, then the b-tree will be used to iterate
75678 ** through the set members, skipping any duplicates. In this case an
75679 ** epheremal table must be used unless the selected <column> is guaranteed
75680 ** to be unique - either because it is an INTEGER PRIMARY KEY or it
75681 ** has a UNIQUE constraint or UNIQUE index.
75683 ** If the prNotFound parameter is not 0, then the b-tree will be used
75684 ** for fast set membership tests. In this case an epheremal table must
75685 ** be used unless <column> is an INTEGER PRIMARY KEY or an index can
75686 ** be found with <column> as its left-most column.
75688 ** When the b-tree is being used for membership tests, the calling function
75689 ** needs to know whether or not the structure contains an SQL NULL
75690 ** value in order to correctly evaluate expressions like "X IN (Y, Z)".
75691 ** If there is any chance that the (...) might contain a NULL value at
75692 ** runtime, then a register is allocated and the register number written
75693 ** to *prNotFound. If there is no chance that the (...) contains a
75694 ** NULL value, then *prNotFound is left unchanged.
75696 ** If a register is allocated and its location stored in *prNotFound, then
75697 ** its initial value is NULL. If the (...) does not remain constant
75698 ** for the duration of the query (i.e. the SELECT within the (...)
75699 ** is a correlated subquery) then the value of the allocated register is
75700 ** reset to NULL each time the subquery is rerun. This allows the
75701 ** caller to use vdbe code equivalent to the following:
75703 ** if( register==NULL ){
75704 ** has_null = <test if data structure contains null>
75705 ** register = 1
75706 ** }
75708 ** in order to avoid running the <test if data structure contains null>
75709 ** test more often than is necessary.
75711 #ifndef SQLITE_OMIT_SUBQUERY
75712 SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){
75713 Select *p; /* SELECT to the right of IN operator */
75714 int eType = 0; /* Type of RHS table. IN_INDEX_* */
75715 int iTab = pParse->nTab++; /* Cursor of the RHS table */
75716 int mustBeUnique = (prNotFound==0); /* True if RHS must be unique */
75717 Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */
75719 assert( pX->op==TK_IN );
75721 /* Check to see if an existing table or index can be used to
75722 ** satisfy the query. This is preferable to generating a new
75723 ** ephemeral table.
75725 p = (ExprHasProperty(pX, EP_xIsSelect) ? pX->x.pSelect : 0);
75726 if( ALWAYS(pParse->nErr==0) && isCandidateForInOpt(p) ){
75727 sqlite3 *db = pParse->db; /* Database connection */
75728 Table *pTab; /* Table <table>. */
75729 Expr *pExpr; /* Expression <column> */
75730 int iCol; /* Index of column <column> */
75731 int iDb; /* Database idx for pTab */
75733 assert( p ); /* Because of isCandidateForInOpt(p) */
75734 assert( p->pEList!=0 ); /* Because of isCandidateForInOpt(p) */
75735 assert( p->pEList->a[0].pExpr!=0 ); /* Because of isCandidateForInOpt(p) */
75736 assert( p->pSrc!=0 ); /* Because of isCandidateForInOpt(p) */
75737 pTab = p->pSrc->a[0].pTab;
75738 pExpr = p->pEList->a[0].pExpr;
75739 iCol = pExpr->iColumn;
75741 /* Code an OP_VerifyCookie and OP_TableLock for <table>. */
75742 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
75743 sqlite3CodeVerifySchema(pParse, iDb);
75744 sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
75746 /* This function is only called from two places. In both cases the vdbe
75747 ** has already been allocated. So assume sqlite3GetVdbe() is always
75748 ** successful here.
75750 assert(v);
75751 if( iCol<0 ){
75752 int iAddr;
75754 iAddr = sqlite3CodeOnce(pParse);
75756 sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
75757 eType = IN_INDEX_ROWID;
75759 sqlite3VdbeJumpHere(v, iAddr);
75760 }else{
75761 Index *pIdx; /* Iterator variable */
75763 /* The collation sequence used by the comparison. If an index is to
75764 ** be used in place of a temp-table, it must be ordered according
75765 ** to this collation sequence. */
75766 CollSeq *pReq = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pExpr);
75768 /* Check that the affinity that will be used to perform the
75769 ** comparison is the same as the affinity of the column. If
75770 ** it is not, it is not possible to use any index.
75772 char aff = comparisonAffinity(pX);
75773 int affinity_ok = (pTab->aCol[iCol].affinity==aff||aff==SQLITE_AFF_NONE);
75775 for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){
75776 if( (pIdx->aiColumn[0]==iCol)
75777 && sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq
75778 && (!mustBeUnique || (pIdx->nColumn==1 && pIdx->onError!=OE_None))
75780 int iAddr;
75781 char *pKey;
75783 pKey = (char *)sqlite3IndexKeyinfo(pParse, pIdx);
75784 iAddr = sqlite3CodeOnce(pParse);
75786 sqlite3VdbeAddOp4(v, OP_OpenRead, iTab, pIdx->tnum, iDb,
75787 pKey,P4_KEYINFO_HANDOFF);
75788 VdbeComment((v, "%s", pIdx->zName));
75789 eType = IN_INDEX_INDEX;
75791 sqlite3VdbeJumpHere(v, iAddr);
75792 if( prNotFound && !pTab->aCol[iCol].notNull ){
75793 *prNotFound = ++pParse->nMem;
75794 sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
75801 if( eType==0 ){
75802 /* Could not found an existing table or index to use as the RHS b-tree.
75803 ** We will have to generate an ephemeral table to do the job.
75805 double savedNQueryLoop = pParse->nQueryLoop;
75806 int rMayHaveNull = 0;
75807 eType = IN_INDEX_EPH;
75808 if( prNotFound ){
75809 *prNotFound = rMayHaveNull = ++pParse->nMem;
75810 sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
75811 }else{
75812 testcase( pParse->nQueryLoop>(double)1 );
75813 pParse->nQueryLoop = (double)1;
75814 if( pX->pLeft->iColumn<0 && !ExprHasAnyProperty(pX, EP_xIsSelect) ){
75815 eType = IN_INDEX_ROWID;
75818 sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID);
75819 pParse->nQueryLoop = savedNQueryLoop;
75820 }else{
75821 pX->iTable = iTab;
75823 return eType;
75825 #endif
75828 ** Generate code for scalar subqueries used as a subquery expression, EXISTS,
75829 ** or IN operators. Examples:
75831 ** (SELECT a FROM b) -- subquery
75832 ** EXISTS (SELECT a FROM b) -- EXISTS subquery
75833 ** x IN (4,5,11) -- IN operator with list on right-hand side
75834 ** x IN (SELECT a FROM b) -- IN operator with subquery on the right
75836 ** The pExpr parameter describes the expression that contains the IN
75837 ** operator or subquery.
75839 ** If parameter isRowid is non-zero, then expression pExpr is guaranteed
75840 ** to be of the form "<rowid> IN (?, ?, ?)", where <rowid> is a reference
75841 ** to some integer key column of a table B-Tree. In this case, use an
75842 ** intkey B-Tree to store the set of IN(...) values instead of the usual
75843 ** (slower) variable length keys B-Tree.
75845 ** If rMayHaveNull is non-zero, that means that the operation is an IN
75846 ** (not a SELECT or EXISTS) and that the RHS might contains NULLs.
75847 ** Furthermore, the IN is in a WHERE clause and that we really want
75848 ** to iterate over the RHS of the IN operator in order to quickly locate
75849 ** all corresponding LHS elements. All this routine does is initialize
75850 ** the register given by rMayHaveNull to NULL. Calling routines will take
75851 ** care of changing this register value to non-NULL if the RHS is NULL-free.
75853 ** If rMayHaveNull is zero, that means that the subquery is being used
75854 ** for membership testing only. There is no need to initialize any
75855 ** registers to indicate the presense or absence of NULLs on the RHS.
75857 ** For a SELECT or EXISTS operator, return the register that holds the
75858 ** result. For IN operators or if an error occurs, the return value is 0.
75860 #ifndef SQLITE_OMIT_SUBQUERY
75861 SQLITE_PRIVATE int sqlite3CodeSubselect(
75862 Parse *pParse, /* Parsing context */
75863 Expr *pExpr, /* The IN, SELECT, or EXISTS operator */
75864 int rMayHaveNull, /* Register that records whether NULLs exist in RHS */
75865 int isRowid /* If true, LHS of IN operator is a rowid */
75867 int testAddr = -1; /* One-time test address */
75868 int rReg = 0; /* Register storing resulting */
75869 Vdbe *v = sqlite3GetVdbe(pParse);
75870 if( NEVER(v==0) ) return 0;
75871 sqlite3ExprCachePush(pParse);
75873 /* This code must be run in its entirety every time it is encountered
75874 ** if any of the following is true:
75876 ** * The right-hand side is a correlated subquery
75877 ** * The right-hand side is an expression list containing variables
75878 ** * We are inside a trigger
75880 ** If all of the above are false, then we can run this code just once
75881 ** save the results, and reuse the same result on subsequent invocations.
75883 if( !ExprHasAnyProperty(pExpr, EP_VarSelect) ){
75884 testAddr = sqlite3CodeOnce(pParse);
75887 #ifndef SQLITE_OMIT_EXPLAIN
75888 if( pParse->explain==2 ){
75889 char *zMsg = sqlite3MPrintf(
75890 pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr>=0?"":"CORRELATED ",
75891 pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId
75893 sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
75895 #endif
75897 switch( pExpr->op ){
75898 case TK_IN: {
75899 char affinity; /* Affinity of the LHS of the IN */
75900 KeyInfo keyInfo; /* Keyinfo for the generated table */
75901 int addr; /* Address of OP_OpenEphemeral instruction */
75902 Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */
75904 if( rMayHaveNull ){
75905 sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
75908 affinity = sqlite3ExprAffinity(pLeft);
75910 /* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'
75911 ** expression it is handled the same way. An ephemeral table is
75912 ** filled with single-field index keys representing the results
75913 ** from the SELECT or the <exprlist>.
75915 ** If the 'x' expression is a column value, or the SELECT...
75916 ** statement returns a column value, then the affinity of that
75917 ** column is used to build the index keys. If both 'x' and the
75918 ** SELECT... statement are columns, then numeric affinity is used
75919 ** if either column has NUMERIC or INTEGER affinity. If neither
75920 ** 'x' nor the SELECT... statement are columns, then numeric affinity
75921 ** is used.
75923 pExpr->iTable = pParse->nTab++;
75924 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid);
75925 if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
75926 memset(&keyInfo, 0, sizeof(keyInfo));
75927 keyInfo.nField = 1;
75929 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
75930 /* Case 1: expr IN (SELECT ...)
75932 ** Generate code to write the results of the select into the temporary
75933 ** table allocated and opened above.
75935 SelectDest dest;
75936 ExprList *pEList;
75938 assert( !isRowid );
75939 sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
75940 dest.affinity = (u8)affinity;
75941 assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
75942 pExpr->x.pSelect->iLimit = 0;
75943 if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){
75944 return 0;
75946 pEList = pExpr->x.pSelect->pEList;
75947 if( ALWAYS(pEList!=0 && pEList->nExpr>0) ){
75948 keyInfo.aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft,
75949 pEList->a[0].pExpr);
75951 }else if( ALWAYS(pExpr->x.pList!=0) ){
75952 /* Case 2: expr IN (exprlist)
75954 ** For each expression, build an index key from the evaluation and
75955 ** store it in the temporary table. If <expr> is a column, then use
75956 ** that columns affinity when building index keys. If <expr> is not
75957 ** a column, use numeric affinity.
75959 int i;
75960 ExprList *pList = pExpr->x.pList;
75961 struct ExprList_item *pItem;
75962 int r1, r2, r3;
75964 if( !affinity ){
75965 affinity = SQLITE_AFF_NONE;
75967 keyInfo.aColl[0] = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
75969 /* Loop through each expression in <exprlist>. */
75970 r1 = sqlite3GetTempReg(pParse);
75971 r2 = sqlite3GetTempReg(pParse);
75972 sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
75973 for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
75974 Expr *pE2 = pItem->pExpr;
75975 int iValToIns;
75977 /* If the expression is not constant then we will need to
75978 ** disable the test that was generated above that makes sure
75979 ** this code only executes once. Because for a non-constant
75980 ** expression we need to rerun this code each time.
75982 if( testAddr>=0 && !sqlite3ExprIsConstant(pE2) ){
75983 sqlite3VdbeChangeToNoop(v, testAddr);
75984 testAddr = -1;
75987 /* Evaluate the expression and insert it into the temp table */
75988 if( isRowid && sqlite3ExprIsInteger(pE2, &iValToIns) ){
75989 sqlite3VdbeAddOp3(v, OP_InsertInt, pExpr->iTable, r2, iValToIns);
75990 }else{
75991 r3 = sqlite3ExprCodeTarget(pParse, pE2, r1);
75992 if( isRowid ){
75993 sqlite3VdbeAddOp2(v, OP_MustBeInt, r3,
75994 sqlite3VdbeCurrentAddr(v)+2);
75995 sqlite3VdbeAddOp3(v, OP_Insert, pExpr->iTable, r2, r3);
75996 }else{
75997 sqlite3VdbeAddOp4(v, OP_MakeRecord, r3, 1, r2, &affinity, 1);
75998 sqlite3ExprCacheAffinityChange(pParse, r3, 1);
75999 sqlite3VdbeAddOp2(v, OP_IdxInsert, pExpr->iTable, r2);
76003 sqlite3ReleaseTempReg(pParse, r1);
76004 sqlite3ReleaseTempReg(pParse, r2);
76006 if( !isRowid ){
76007 sqlite3VdbeChangeP4(v, addr, (void *)&keyInfo, P4_KEYINFO);
76009 break;
76012 case TK_EXISTS:
76013 case TK_SELECT:
76014 default: {
76015 /* If this has to be a scalar SELECT. Generate code to put the
76016 ** value of this select in a memory cell and record the number
76017 ** of the memory cell in iColumn. If this is an EXISTS, write
76018 ** an integer 0 (not exists) or 1 (exists) into a memory cell
76019 ** and record that memory cell in iColumn.
76021 Select *pSel; /* SELECT statement to encode */
76022 SelectDest dest; /* How to deal with SELECt result */
76024 testcase( pExpr->op==TK_EXISTS );
76025 testcase( pExpr->op==TK_SELECT );
76026 assert( pExpr->op==TK_EXISTS || pExpr->op==TK_SELECT );
76028 assert( ExprHasProperty(pExpr, EP_xIsSelect) );
76029 pSel = pExpr->x.pSelect;
76030 sqlite3SelectDestInit(&dest, 0, ++pParse->nMem);
76031 if( pExpr->op==TK_SELECT ){
76032 dest.eDest = SRT_Mem;
76033 sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iParm);
76034 VdbeComment((v, "Init subquery result"));
76035 }else{
76036 dest.eDest = SRT_Exists;
76037 sqlite3VdbeAddOp2(v, OP_Integer, 0, dest.iParm);
76038 VdbeComment((v, "Init EXISTS result"));
76040 sqlite3ExprDelete(pParse->db, pSel->pLimit);
76041 pSel->pLimit = sqlite3PExpr(pParse, TK_INTEGER, 0, 0,
76042 &sqlite3IntTokens[1]);
76043 pSel->iLimit = 0;
76044 if( sqlite3Select(pParse, pSel, &dest) ){
76045 return 0;
76047 rReg = dest.iParm;
76048 ExprSetIrreducible(pExpr);
76049 break;
76053 if( testAddr>=0 ){
76054 sqlite3VdbeJumpHere(v, testAddr);
76056 sqlite3ExprCachePop(pParse, 1);
76058 return rReg;
76060 #endif /* SQLITE_OMIT_SUBQUERY */
76062 #ifndef SQLITE_OMIT_SUBQUERY
76064 ** Generate code for an IN expression.
76066 ** x IN (SELECT ...)
76067 ** x IN (value, value, ...)
76069 ** The left-hand side (LHS) is a scalar expression. The right-hand side (RHS)
76070 ** is an array of zero or more values. The expression is true if the LHS is
76071 ** contained within the RHS. The value of the expression is unknown (NULL)
76072 ** if the LHS is NULL or if the LHS is not contained within the RHS and the
76073 ** RHS contains one or more NULL values.
76075 ** This routine generates code will jump to destIfFalse if the LHS is not
76076 ** contained within the RHS. If due to NULLs we cannot determine if the LHS
76077 ** is contained in the RHS then jump to destIfNull. If the LHS is contained
76078 ** within the RHS then fall through.
76080 static void sqlite3ExprCodeIN(
76081 Parse *pParse, /* Parsing and code generating context */
76082 Expr *pExpr, /* The IN expression */
76083 int destIfFalse, /* Jump here if LHS is not contained in the RHS */
76084 int destIfNull /* Jump here if the results are unknown due to NULLs */
76086 int rRhsHasNull = 0; /* Register that is true if RHS contains NULL values */
76087 char affinity; /* Comparison affinity to use */
76088 int eType; /* Type of the RHS */
76089 int r1; /* Temporary use register */
76090 Vdbe *v; /* Statement under construction */
76092 /* Compute the RHS. After this step, the table with cursor
76093 ** pExpr->iTable will contains the values that make up the RHS.
76095 v = pParse->pVdbe;
76096 assert( v!=0 ); /* OOM detected prior to this routine */
76097 VdbeNoopComment((v, "begin IN expr"));
76098 eType = sqlite3FindInIndex(pParse, pExpr, &rRhsHasNull);
76100 /* Figure out the affinity to use to create a key from the results
76101 ** of the expression. affinityStr stores a static string suitable for
76102 ** P4 of OP_MakeRecord.
76104 affinity = comparisonAffinity(pExpr);
76106 /* Code the LHS, the <expr> from "<expr> IN (...)".
76108 sqlite3ExprCachePush(pParse);
76109 r1 = sqlite3GetTempReg(pParse);
76110 sqlite3ExprCode(pParse, pExpr->pLeft, r1);
76112 /* If the LHS is NULL, then the result is either false or NULL depending
76113 ** on whether the RHS is empty or not, respectively.
76115 if( destIfNull==destIfFalse ){
76116 /* Shortcut for the common case where the false and NULL outcomes are
76117 ** the same. */
76118 sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull);
76119 }else{
76120 int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1);
76121 sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse);
76122 sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
76123 sqlite3VdbeJumpHere(v, addr1);
76126 if( eType==IN_INDEX_ROWID ){
76127 /* In this case, the RHS is the ROWID of table b-tree
76129 sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse);
76130 sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1);
76131 }else{
76132 /* In this case, the RHS is an index b-tree.
76134 sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1);
76136 /* If the set membership test fails, then the result of the
76137 ** "x IN (...)" expression must be either 0 or NULL. If the set
76138 ** contains no NULL values, then the result is 0. If the set
76139 ** contains one or more NULL values, then the result of the
76140 ** expression is also NULL.
76142 if( rRhsHasNull==0 || destIfFalse==destIfNull ){
76143 /* This branch runs if it is known at compile time that the RHS
76144 ** cannot contain NULL values. This happens as the result
76145 ** of a "NOT NULL" constraint in the database schema.
76147 ** Also run this branch if NULL is equivalent to FALSE
76148 ** for this particular IN operator.
76150 sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1);
76152 }else{
76153 /* In this branch, the RHS of the IN might contain a NULL and
76154 ** the presence of a NULL on the RHS makes a difference in the
76155 ** outcome.
76157 int j1, j2, j3;
76159 /* First check to see if the LHS is contained in the RHS. If so,
76160 ** then the presence of NULLs in the RHS does not matter, so jump
76161 ** over all of the code that follows.
76163 j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1);
76165 /* Here we begin generating code that runs if the LHS is not
76166 ** contained within the RHS. Generate additional code that
76167 ** tests the RHS for NULLs. If the RHS contains a NULL then
76168 ** jump to destIfNull. If there are no NULLs in the RHS then
76169 ** jump to destIfFalse.
76171 j2 = sqlite3VdbeAddOp1(v, OP_NotNull, rRhsHasNull);
76172 j3 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, rRhsHasNull, 1);
76173 sqlite3VdbeAddOp2(v, OP_Integer, -1, rRhsHasNull);
76174 sqlite3VdbeJumpHere(v, j3);
76175 sqlite3VdbeAddOp2(v, OP_AddImm, rRhsHasNull, 1);
76176 sqlite3VdbeJumpHere(v, j2);
76178 /* Jump to the appropriate target depending on whether or not
76179 ** the RHS contains a NULL
76181 sqlite3VdbeAddOp2(v, OP_If, rRhsHasNull, destIfNull);
76182 sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse);
76184 /* The OP_Found at the top of this branch jumps here when true,
76185 ** causing the overall IN expression evaluation to fall through.
76187 sqlite3VdbeJumpHere(v, j1);
76190 sqlite3ReleaseTempReg(pParse, r1);
76191 sqlite3ExprCachePop(pParse, 1);
76192 VdbeComment((v, "end IN expr"));
76194 #endif /* SQLITE_OMIT_SUBQUERY */
76197 ** Duplicate an 8-byte value
76199 static char *dup8bytes(Vdbe *v, const char *in){
76200 char *out = sqlite3DbMallocRaw(sqlite3VdbeDb(v), 8);
76201 if( out ){
76202 memcpy(out, in, 8);
76204 return out;
76207 #ifndef SQLITE_OMIT_FLOATING_POINT
76209 ** Generate an instruction that will put the floating point
76210 ** value described by z[0..n-1] into register iMem.
76212 ** The z[] string will probably not be zero-terminated. But the
76213 ** z[n] character is guaranteed to be something that does not look
76214 ** like the continuation of the number.
76216 static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
76217 if( ALWAYS(z!=0) ){
76218 double value;
76219 char *zV;
76220 sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
76221 assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */
76222 if( negateFlag ) value = -value;
76223 zV = dup8bytes(v, (char*)&value);
76224 sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL);
76227 #endif
76231 ** Generate an instruction that will put the integer describe by
76232 ** text z[0..n-1] into register iMem.
76234 ** Expr.u.zToken is always UTF8 and zero-terminated.
76236 static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
76237 Vdbe *v = pParse->pVdbe;
76238 if( pExpr->flags & EP_IntValue ){
76239 int i = pExpr->u.iValue;
76240 assert( i>=0 );
76241 if( negFlag ) i = -i;
76242 sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
76243 }else{
76244 int c;
76245 i64 value;
76246 const char *z = pExpr->u.zToken;
76247 assert( z!=0 );
76248 c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
76249 if( c==0 || (c==2 && negFlag) ){
76250 char *zV;
76251 if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
76252 zV = dup8bytes(v, (char*)&value);
76253 sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
76254 }else{
76255 #ifdef SQLITE_OMIT_FLOATING_POINT
76256 sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
76257 #else
76258 codeReal(v, z, negFlag, iMem);
76259 #endif
76265 ** Clear a cache entry.
76267 static void cacheEntryClear(Parse *pParse, struct yColCache *p){
76268 if( p->tempReg ){
76269 if( pParse->nTempReg<ArraySize(pParse->aTempReg) ){
76270 pParse->aTempReg[pParse->nTempReg++] = p->iReg;
76272 p->tempReg = 0;
76278 ** Record in the column cache that a particular column from a
76279 ** particular table is stored in a particular register.
76281 SQLITE_PRIVATE void sqlite3ExprCacheStore(Parse *pParse, int iTab, int iCol, int iReg){
76282 int i;
76283 int minLru;
76284 int idxLru;
76285 struct yColCache *p;
76287 assert( iReg>0 ); /* Register numbers are always positive */
76288 assert( iCol>=-1 && iCol<32768 ); /* Finite column numbers */
76290 /* The SQLITE_ColumnCache flag disables the column cache. This is used
76291 ** for testing only - to verify that SQLite always gets the same answer
76292 ** with and without the column cache.
76294 if( pParse->db->flags & SQLITE_ColumnCache ) return;
76296 /* First replace any existing entry.
76298 ** Actually, the way the column cache is currently used, we are guaranteed
76299 ** that the object will never already be in cache. Verify this guarantee.
76301 #ifndef NDEBUG
76302 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76303 #if 0 /* This code wold remove the entry from the cache if it existed */
76304 if( p->iReg && p->iTable==iTab && p->iColumn==iCol ){
76305 cacheEntryClear(pParse, p);
76306 p->iLevel = pParse->iCacheLevel;
76307 p->iReg = iReg;
76308 p->lru = pParse->iCacheCnt++;
76309 return;
76311 #endif
76312 assert( p->iReg==0 || p->iTable!=iTab || p->iColumn!=iCol );
76314 #endif
76316 /* Find an empty slot and replace it */
76317 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76318 if( p->iReg==0 ){
76319 p->iLevel = pParse->iCacheLevel;
76320 p->iTable = iTab;
76321 p->iColumn = iCol;
76322 p->iReg = iReg;
76323 p->tempReg = 0;
76324 p->lru = pParse->iCacheCnt++;
76325 return;
76329 /* Replace the last recently used */
76330 minLru = 0x7fffffff;
76331 idxLru = -1;
76332 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76333 if( p->lru<minLru ){
76334 idxLru = i;
76335 minLru = p->lru;
76338 if( ALWAYS(idxLru>=0) ){
76339 p = &pParse->aColCache[idxLru];
76340 p->iLevel = pParse->iCacheLevel;
76341 p->iTable = iTab;
76342 p->iColumn = iCol;
76343 p->iReg = iReg;
76344 p->tempReg = 0;
76345 p->lru = pParse->iCacheCnt++;
76346 return;
76351 ** Indicate that registers between iReg..iReg+nReg-1 are being overwritten.
76352 ** Purge the range of registers from the column cache.
76354 SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse *pParse, int iReg, int nReg){
76355 int i;
76356 int iLast = iReg + nReg - 1;
76357 struct yColCache *p;
76358 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76359 int r = p->iReg;
76360 if( r>=iReg && r<=iLast ){
76361 cacheEntryClear(pParse, p);
76362 p->iReg = 0;
76368 ** Remember the current column cache context. Any new entries added
76369 ** added to the column cache after this call are removed when the
76370 ** corresponding pop occurs.
76372 SQLITE_PRIVATE void sqlite3ExprCachePush(Parse *pParse){
76373 pParse->iCacheLevel++;
76377 ** Remove from the column cache any entries that were added since the
76378 ** the previous N Push operations. In other words, restore the cache
76379 ** to the state it was in N Pushes ago.
76381 SQLITE_PRIVATE void sqlite3ExprCachePop(Parse *pParse, int N){
76382 int i;
76383 struct yColCache *p;
76384 assert( N>0 );
76385 assert( pParse->iCacheLevel>=N );
76386 pParse->iCacheLevel -= N;
76387 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76388 if( p->iReg && p->iLevel>pParse->iCacheLevel ){
76389 cacheEntryClear(pParse, p);
76390 p->iReg = 0;
76396 ** When a cached column is reused, make sure that its register is
76397 ** no longer available as a temp register. ticket #3879: that same
76398 ** register might be in the cache in multiple places, so be sure to
76399 ** get them all.
76401 static void sqlite3ExprCachePinRegister(Parse *pParse, int iReg){
76402 int i;
76403 struct yColCache *p;
76404 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76405 if( p->iReg==iReg ){
76406 p->tempReg = 0;
76412 ** Generate code to extract the value of the iCol-th column of a table.
76414 SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(
76415 Vdbe *v, /* The VDBE under construction */
76416 Table *pTab, /* The table containing the value */
76417 int iTabCur, /* The cursor for this table */
76418 int iCol, /* Index of the column to extract */
76419 int regOut /* Extract the valud into this register */
76421 if( iCol<0 || iCol==pTab->iPKey ){
76422 sqlite3VdbeAddOp2(v, OP_Rowid, iTabCur, regOut);
76423 }else{
76424 int op = IsVirtual(pTab) ? OP_VColumn : OP_Column;
76425 sqlite3VdbeAddOp3(v, op, iTabCur, iCol, regOut);
76427 if( iCol>=0 ){
76428 sqlite3ColumnDefault(v, pTab, iCol, regOut);
76433 ** Generate code that will extract the iColumn-th column from
76434 ** table pTab and store the column value in a register. An effort
76435 ** is made to store the column value in register iReg, but this is
76436 ** not guaranteed. The location of the column value is returned.
76438 ** There must be an open cursor to pTab in iTable when this routine
76439 ** is called. If iColumn<0 then code is generated that extracts the rowid.
76441 SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(
76442 Parse *pParse, /* Parsing and code generating context */
76443 Table *pTab, /* Description of the table we are reading from */
76444 int iColumn, /* Index of the table column */
76445 int iTable, /* The cursor pointing to the table */
76446 int iReg /* Store results here */
76448 Vdbe *v = pParse->pVdbe;
76449 int i;
76450 struct yColCache *p;
76452 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76453 if( p->iReg>0 && p->iTable==iTable && p->iColumn==iColumn ){
76454 p->lru = pParse->iCacheCnt++;
76455 sqlite3ExprCachePinRegister(pParse, p->iReg);
76456 return p->iReg;
76459 assert( v!=0 );
76460 sqlite3ExprCodeGetColumnOfTable(v, pTab, iTable, iColumn, iReg);
76461 sqlite3ExprCacheStore(pParse, iTable, iColumn, iReg);
76462 return iReg;
76466 ** Clear all column cache entries.
76468 SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse *pParse){
76469 int i;
76470 struct yColCache *p;
76472 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76473 if( p->iReg ){
76474 cacheEntryClear(pParse, p);
76475 p->iReg = 0;
76481 ** Record the fact that an affinity change has occurred on iCount
76482 ** registers starting with iStart.
76484 SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, int iCount){
76485 sqlite3ExprCacheRemove(pParse, iStart, iCount);
76489 ** Generate code to move content from registers iFrom...iFrom+nReg-1
76490 ** over to iTo..iTo+nReg-1. Keep the column cache up-to-date.
76492 SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){
76493 int i;
76494 struct yColCache *p;
76495 if( NEVER(iFrom==iTo) ) return;
76496 sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg);
76497 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76498 int x = p->iReg;
76499 if( x>=iFrom && x<iFrom+nReg ){
76500 p->iReg += iTo-iFrom;
76506 ** Generate code to copy content from registers iFrom...iFrom+nReg-1
76507 ** over to iTo..iTo+nReg-1.
76509 SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse *pParse, int iFrom, int iTo, int nReg){
76510 int i;
76511 if( NEVER(iFrom==iTo) ) return;
76512 for(i=0; i<nReg; i++){
76513 sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, iFrom+i, iTo+i);
76517 #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
76519 ** Return true if any register in the range iFrom..iTo (inclusive)
76520 ** is used as part of the column cache.
76522 ** This routine is used within assert() and testcase() macros only
76523 ** and does not appear in a normal build.
76525 static int usedAsColumnCache(Parse *pParse, int iFrom, int iTo){
76526 int i;
76527 struct yColCache *p;
76528 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
76529 int r = p->iReg;
76530 if( r>=iFrom && r<=iTo ) return 1; /*NO_TEST*/
76532 return 0;
76534 #endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
76537 ** Generate code into the current Vdbe to evaluate the given
76538 ** expression. Attempt to store the results in register "target".
76539 ** Return the register where results are stored.
76541 ** With this routine, there is no guarantee that results will
76542 ** be stored in target. The result might be stored in some other
76543 ** register if it is convenient to do so. The calling function
76544 ** must check the return code and move the results to the desired
76545 ** register.
76547 SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target){
76548 Vdbe *v = pParse->pVdbe; /* The VM under construction */
76549 int op; /* The opcode being coded */
76550 int inReg = target; /* Results stored in register inReg */
76551 int regFree1 = 0; /* If non-zero free this temporary register */
76552 int regFree2 = 0; /* If non-zero free this temporary register */
76553 int r1, r2, r3, r4; /* Various register numbers */
76554 sqlite3 *db = pParse->db; /* The database connection */
76556 assert( target>0 && target<=pParse->nMem );
76557 if( v==0 ){
76558 assert( pParse->db->mallocFailed );
76559 return 0;
76562 if( pExpr==0 ){
76563 op = TK_NULL;
76564 }else{
76565 op = pExpr->op;
76567 switch( op ){
76568 case TK_AGG_COLUMN: {
76569 AggInfo *pAggInfo = pExpr->pAggInfo;
76570 struct AggInfo_col *pCol = &pAggInfo->aCol[pExpr->iAgg];
76571 if( !pAggInfo->directMode ){
76572 assert( pCol->iMem>0 );
76573 inReg = pCol->iMem;
76574 break;
76575 }else if( pAggInfo->useSortingIdx ){
76576 sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
76577 pCol->iSorterColumn, target);
76578 break;
76580 /* Otherwise, fall thru into the TK_COLUMN case */
76582 case TK_COLUMN: {
76583 if( pExpr->iTable<0 ){
76584 /* This only happens when coding check constraints */
76585 assert( pParse->ckBase>0 );
76586 inReg = pExpr->iColumn + pParse->ckBase;
76587 }else{
76588 inReg = sqlite3ExprCodeGetColumn(pParse, pExpr->pTab,
76589 pExpr->iColumn, pExpr->iTable, target);
76591 break;
76593 case TK_INTEGER: {
76594 codeInteger(pParse, pExpr, 0, target);
76595 break;
76597 #ifndef SQLITE_OMIT_FLOATING_POINT
76598 case TK_FLOAT: {
76599 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76600 codeReal(v, pExpr->u.zToken, 0, target);
76601 break;
76603 #endif
76604 case TK_STRING: {
76605 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76606 sqlite3VdbeAddOp4(v, OP_String8, 0, target, 0, pExpr->u.zToken, 0);
76607 break;
76609 case TK_NULL: {
76610 sqlite3VdbeAddOp2(v, OP_Null, 0, target);
76611 break;
76613 #ifndef SQLITE_OMIT_BLOB_LITERAL
76614 case TK_BLOB: {
76615 int n;
76616 const char *z;
76617 char *zBlob;
76618 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76619 assert( pExpr->u.zToken[0]=='x' || pExpr->u.zToken[0]=='X' );
76620 assert( pExpr->u.zToken[1]=='\'' );
76621 z = &pExpr->u.zToken[2];
76622 n = sqlite3Strlen30(z) - 1;
76623 assert( z[n]=='\'' );
76624 zBlob = sqlite3HexToBlob(sqlite3VdbeDb(v), z, n);
76625 sqlite3VdbeAddOp4(v, OP_Blob, n/2, target, 0, zBlob, P4_DYNAMIC);
76626 break;
76628 #endif
76629 case TK_VARIABLE: {
76630 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76631 assert( pExpr->u.zToken!=0 );
76632 assert( pExpr->u.zToken[0]!=0 );
76633 sqlite3VdbeAddOp2(v, OP_Variable, pExpr->iColumn, target);
76634 if( pExpr->u.zToken[1]!=0 ){
76635 assert( pExpr->u.zToken[0]=='?'
76636 || strcmp(pExpr->u.zToken, pParse->azVar[pExpr->iColumn-1])==0 );
76637 sqlite3VdbeChangeP4(v, -1, pParse->azVar[pExpr->iColumn-1], P4_STATIC);
76639 break;
76641 case TK_REGISTER: {
76642 inReg = pExpr->iTable;
76643 break;
76645 case TK_AS: {
76646 inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
76647 break;
76649 #ifndef SQLITE_OMIT_CAST
76650 case TK_CAST: {
76651 /* Expressions of the form: CAST(pLeft AS token) */
76652 int aff, to_op;
76653 inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
76654 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76655 aff = sqlite3AffinityType(pExpr->u.zToken);
76656 to_op = aff - SQLITE_AFF_TEXT + OP_ToText;
76657 assert( to_op==OP_ToText || aff!=SQLITE_AFF_TEXT );
76658 assert( to_op==OP_ToBlob || aff!=SQLITE_AFF_NONE );
76659 assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );
76660 assert( to_op==OP_ToInt || aff!=SQLITE_AFF_INTEGER );
76661 assert( to_op==OP_ToReal || aff!=SQLITE_AFF_REAL );
76662 testcase( to_op==OP_ToText );
76663 testcase( to_op==OP_ToBlob );
76664 testcase( to_op==OP_ToNumeric );
76665 testcase( to_op==OP_ToInt );
76666 testcase( to_op==OP_ToReal );
76667 if( inReg!=target ){
76668 sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
76669 inReg = target;
76671 sqlite3VdbeAddOp1(v, to_op, inReg);
76672 testcase( usedAsColumnCache(pParse, inReg, inReg) );
76673 sqlite3ExprCacheAffinityChange(pParse, inReg, 1);
76674 break;
76676 #endif /* SQLITE_OMIT_CAST */
76677 case TK_LT:
76678 case TK_LE:
76679 case TK_GT:
76680 case TK_GE:
76681 case TK_NE:
76682 case TK_EQ: {
76683 assert( TK_LT==OP_Lt );
76684 assert( TK_LE==OP_Le );
76685 assert( TK_GT==OP_Gt );
76686 assert( TK_GE==OP_Ge );
76687 assert( TK_EQ==OP_Eq );
76688 assert( TK_NE==OP_Ne );
76689 testcase( op==TK_LT );
76690 testcase( op==TK_LE );
76691 testcase( op==TK_GT );
76692 testcase( op==TK_GE );
76693 testcase( op==TK_EQ );
76694 testcase( op==TK_NE );
76695 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76696 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
76697 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
76698 r1, r2, inReg, SQLITE_STOREP2);
76699 testcase( regFree1==0 );
76700 testcase( regFree2==0 );
76701 break;
76703 case TK_IS:
76704 case TK_ISNOT: {
76705 testcase( op==TK_IS );
76706 testcase( op==TK_ISNOT );
76707 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76708 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
76709 op = (op==TK_IS) ? TK_EQ : TK_NE;
76710 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
76711 r1, r2, inReg, SQLITE_STOREP2 | SQLITE_NULLEQ);
76712 testcase( regFree1==0 );
76713 testcase( regFree2==0 );
76714 break;
76716 case TK_AND:
76717 case TK_OR:
76718 case TK_PLUS:
76719 case TK_STAR:
76720 case TK_MINUS:
76721 case TK_REM:
76722 case TK_BITAND:
76723 case TK_BITOR:
76724 case TK_SLASH:
76725 case TK_LSHIFT:
76726 case TK_RSHIFT:
76727 case TK_CONCAT: {
76728 assert( TK_AND==OP_And );
76729 assert( TK_OR==OP_Or );
76730 assert( TK_PLUS==OP_Add );
76731 assert( TK_MINUS==OP_Subtract );
76732 assert( TK_REM==OP_Remainder );
76733 assert( TK_BITAND==OP_BitAnd );
76734 assert( TK_BITOR==OP_BitOr );
76735 assert( TK_SLASH==OP_Divide );
76736 assert( TK_LSHIFT==OP_ShiftLeft );
76737 assert( TK_RSHIFT==OP_ShiftRight );
76738 assert( TK_CONCAT==OP_Concat );
76739 testcase( op==TK_AND );
76740 testcase( op==TK_OR );
76741 testcase( op==TK_PLUS );
76742 testcase( op==TK_MINUS );
76743 testcase( op==TK_REM );
76744 testcase( op==TK_BITAND );
76745 testcase( op==TK_BITOR );
76746 testcase( op==TK_SLASH );
76747 testcase( op==TK_LSHIFT );
76748 testcase( op==TK_RSHIFT );
76749 testcase( op==TK_CONCAT );
76750 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76751 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
76752 sqlite3VdbeAddOp3(v, op, r2, r1, target);
76753 testcase( regFree1==0 );
76754 testcase( regFree2==0 );
76755 break;
76757 case TK_UMINUS: {
76758 Expr *pLeft = pExpr->pLeft;
76759 assert( pLeft );
76760 if( pLeft->op==TK_INTEGER ){
76761 codeInteger(pParse, pLeft, 1, target);
76762 #ifndef SQLITE_OMIT_FLOATING_POINT
76763 }else if( pLeft->op==TK_FLOAT ){
76764 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76765 codeReal(v, pLeft->u.zToken, 1, target);
76766 #endif
76767 }else{
76768 regFree1 = r1 = sqlite3GetTempReg(pParse);
76769 sqlite3VdbeAddOp2(v, OP_Integer, 0, r1);
76770 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree2);
76771 sqlite3VdbeAddOp3(v, OP_Subtract, r2, r1, target);
76772 testcase( regFree2==0 );
76774 inReg = target;
76775 break;
76777 case TK_BITNOT:
76778 case TK_NOT: {
76779 assert( TK_BITNOT==OP_BitNot );
76780 assert( TK_NOT==OP_Not );
76781 testcase( op==TK_BITNOT );
76782 testcase( op==TK_NOT );
76783 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76784 testcase( regFree1==0 );
76785 inReg = target;
76786 sqlite3VdbeAddOp2(v, op, r1, inReg);
76787 break;
76789 case TK_ISNULL:
76790 case TK_NOTNULL: {
76791 int addr;
76792 assert( TK_ISNULL==OP_IsNull );
76793 assert( TK_NOTNULL==OP_NotNull );
76794 testcase( op==TK_ISNULL );
76795 testcase( op==TK_NOTNULL );
76796 sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
76797 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
76798 testcase( regFree1==0 );
76799 addr = sqlite3VdbeAddOp1(v, op, r1);
76800 sqlite3VdbeAddOp2(v, OP_AddImm, target, -1);
76801 sqlite3VdbeJumpHere(v, addr);
76802 break;
76804 case TK_AGG_FUNCTION: {
76805 AggInfo *pInfo = pExpr->pAggInfo;
76806 if( pInfo==0 ){
76807 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76808 sqlite3ErrorMsg(pParse, "misuse of aggregate: %s()", pExpr->u.zToken);
76809 }else{
76810 inReg = pInfo->aFunc[pExpr->iAgg].iMem;
76812 break;
76814 case TK_CONST_FUNC:
76815 case TK_FUNCTION: {
76816 ExprList *pFarg; /* List of function arguments */
76817 int nFarg; /* Number of function arguments */
76818 FuncDef *pDef; /* The function definition object */
76819 int nId; /* Length of the function name in bytes */
76820 const char *zId; /* The function name */
76821 int constMask = 0; /* Mask of function arguments that are constant */
76822 int i; /* Loop counter */
76823 u8 enc = ENC(db); /* The text encoding used by this database */
76824 CollSeq *pColl = 0; /* A collating sequence */
76826 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
76827 testcase( op==TK_CONST_FUNC );
76828 testcase( op==TK_FUNCTION );
76829 if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
76830 pFarg = 0;
76831 }else{
76832 pFarg = pExpr->x.pList;
76834 nFarg = pFarg ? pFarg->nExpr : 0;
76835 assert( !ExprHasProperty(pExpr, EP_IntValue) );
76836 zId = pExpr->u.zToken;
76837 nId = sqlite3Strlen30(zId);
76838 pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0);
76839 if( pDef==0 ){
76840 sqlite3ErrorMsg(pParse, "unknown function: %.*s()", nId, zId);
76841 break;
76844 /* Attempt a direct implementation of the built-in COALESCE() and
76845 ** IFNULL() functions. This avoids unnecessary evalation of
76846 ** arguments past the first non-NULL argument.
76848 if( pDef->flags & SQLITE_FUNC_COALESCE ){
76849 int endCoalesce = sqlite3VdbeMakeLabel(v);
76850 assert( nFarg>=2 );
76851 sqlite3ExprCode(pParse, pFarg->a[0].pExpr, target);
76852 for(i=1; i<nFarg; i++){
76853 sqlite3VdbeAddOp2(v, OP_NotNull, target, endCoalesce);
76854 sqlite3ExprCacheRemove(pParse, target, 1);
76855 sqlite3ExprCachePush(pParse);
76856 sqlite3ExprCode(pParse, pFarg->a[i].pExpr, target);
76857 sqlite3ExprCachePop(pParse, 1);
76859 sqlite3VdbeResolveLabel(v, endCoalesce);
76860 break;
76864 if( pFarg ){
76865 r1 = sqlite3GetTempRange(pParse, nFarg);
76866 sqlite3ExprCachePush(pParse); /* Ticket 2ea2425d34be */
76867 sqlite3ExprCodeExprList(pParse, pFarg, r1, 1);
76868 sqlite3ExprCachePop(pParse, 1); /* Ticket 2ea2425d34be */
76869 }else{
76870 r1 = 0;
76872 #ifndef SQLITE_OMIT_VIRTUALTABLE
76873 /* Possibly overload the function if the first argument is
76874 ** a virtual table column.
76876 ** For infix functions (LIKE, GLOB, REGEXP, and MATCH) use the
76877 ** second argument, not the first, as the argument to test to
76878 ** see if it is a column in a virtual table. This is done because
76879 ** the left operand of infix functions (the operand we want to
76880 ** control overloading) ends up as the second argument to the
76881 ** function. The expression "A glob B" is equivalent to
76882 ** "glob(B,A). We want to use the A in "A glob B" to test
76883 ** for function overloading. But we use the B term in "glob(B,A)".
76885 if( nFarg>=2 && (pExpr->flags & EP_InfixFunc) ){
76886 pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[1].pExpr);
76887 }else if( nFarg>0 ){
76888 pDef = sqlite3VtabOverloadFunction(db, pDef, nFarg, pFarg->a[0].pExpr);
76890 #endif
76891 for(i=0; i<nFarg; i++){
76892 if( i<32 && sqlite3ExprIsConstant(pFarg->a[i].pExpr) ){
76893 constMask |= (1<<i);
76895 if( (pDef->flags & SQLITE_FUNC_NEEDCOLL)!=0 && !pColl ){
76896 pColl = sqlite3ExprCollSeq(pParse, pFarg->a[i].pExpr);
76899 if( pDef->flags & SQLITE_FUNC_NEEDCOLL ){
76900 if( !pColl ) pColl = db->pDfltColl;
76901 sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
76903 sqlite3VdbeAddOp4(v, OP_Function, constMask, r1, target,
76904 (char*)pDef, P4_FUNCDEF);
76905 sqlite3VdbeChangeP5(v, (u8)nFarg);
76906 if( nFarg ){
76907 sqlite3ReleaseTempRange(pParse, r1, nFarg);
76909 break;
76911 #ifndef SQLITE_OMIT_SUBQUERY
76912 case TK_EXISTS:
76913 case TK_SELECT: {
76914 testcase( op==TK_EXISTS );
76915 testcase( op==TK_SELECT );
76916 inReg = sqlite3CodeSubselect(pParse, pExpr, 0, 0);
76917 break;
76919 case TK_IN: {
76920 int destIfFalse = sqlite3VdbeMakeLabel(v);
76921 int destIfNull = sqlite3VdbeMakeLabel(v);
76922 sqlite3VdbeAddOp2(v, OP_Null, 0, target);
76923 sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
76924 sqlite3VdbeAddOp2(v, OP_Integer, 1, target);
76925 sqlite3VdbeResolveLabel(v, destIfFalse);
76926 sqlite3VdbeAddOp2(v, OP_AddImm, target, 0);
76927 sqlite3VdbeResolveLabel(v, destIfNull);
76928 break;
76930 #endif /* SQLITE_OMIT_SUBQUERY */
76934 ** x BETWEEN y AND z
76936 ** This is equivalent to
76938 ** x>=y AND x<=z
76940 ** X is stored in pExpr->pLeft.
76941 ** Y is stored in pExpr->pList->a[0].pExpr.
76942 ** Z is stored in pExpr->pList->a[1].pExpr.
76944 case TK_BETWEEN: {
76945 Expr *pLeft = pExpr->pLeft;
76946 struct ExprList_item *pLItem = pExpr->x.pList->a;
76947 Expr *pRight = pLItem->pExpr;
76949 r1 = sqlite3ExprCodeTemp(pParse, pLeft, &regFree1);
76950 r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
76951 testcase( regFree1==0 );
76952 testcase( regFree2==0 );
76953 r3 = sqlite3GetTempReg(pParse);
76954 r4 = sqlite3GetTempReg(pParse);
76955 codeCompare(pParse, pLeft, pRight, OP_Ge,
76956 r1, r2, r3, SQLITE_STOREP2);
76957 pLItem++;
76958 pRight = pLItem->pExpr;
76959 sqlite3ReleaseTempReg(pParse, regFree2);
76960 r2 = sqlite3ExprCodeTemp(pParse, pRight, &regFree2);
76961 testcase( regFree2==0 );
76962 codeCompare(pParse, pLeft, pRight, OP_Le, r1, r2, r4, SQLITE_STOREP2);
76963 sqlite3VdbeAddOp3(v, OP_And, r3, r4, target);
76964 sqlite3ReleaseTempReg(pParse, r3);
76965 sqlite3ReleaseTempReg(pParse, r4);
76966 break;
76968 case TK_UPLUS: {
76969 inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
76970 break;
76973 case TK_TRIGGER: {
76974 /* If the opcode is TK_TRIGGER, then the expression is a reference
76975 ** to a column in the new.* or old.* pseudo-tables available to
76976 ** trigger programs. In this case Expr.iTable is set to 1 for the
76977 ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
76978 ** is set to the column of the pseudo-table to read, or to -1 to
76979 ** read the rowid field.
76981 ** The expression is implemented using an OP_Param opcode. The p1
76982 ** parameter is set to 0 for an old.rowid reference, or to (i+1)
76983 ** to reference another column of the old.* pseudo-table, where
76984 ** i is the index of the column. For a new.rowid reference, p1 is
76985 ** set to (n+1), where n is the number of columns in each pseudo-table.
76986 ** For a reference to any other column in the new.* pseudo-table, p1
76987 ** is set to (n+2+i), where n and i are as defined previously. For
76988 ** example, if the table on which triggers are being fired is
76989 ** declared as:
76991 ** CREATE TABLE t1(a, b);
76993 ** Then p1 is interpreted as follows:
76995 ** p1==0 -> old.rowid p1==3 -> new.rowid
76996 ** p1==1 -> old.a p1==4 -> new.a
76997 ** p1==2 -> old.b p1==5 -> new.b
76999 Table *pTab = pExpr->pTab;
77000 int p1 = pExpr->iTable * (pTab->nCol+1) + 1 + pExpr->iColumn;
77002 assert( pExpr->iTable==0 || pExpr->iTable==1 );
77003 assert( pExpr->iColumn>=-1 && pExpr->iColumn<pTab->nCol );
77004 assert( pTab->iPKey<0 || pExpr->iColumn!=pTab->iPKey );
77005 assert( p1>=0 && p1<(pTab->nCol*2+2) );
77007 sqlite3VdbeAddOp2(v, OP_Param, p1, target);
77008 VdbeComment((v, "%s.%s -> $%d",
77009 (pExpr->iTable ? "new" : "old"),
77010 (pExpr->iColumn<0 ? "rowid" : pExpr->pTab->aCol[pExpr->iColumn].zName),
77011 target
77014 #ifndef SQLITE_OMIT_FLOATING_POINT
77015 /* If the column has REAL affinity, it may currently be stored as an
77016 ** integer. Use OP_RealAffinity to make sure it is really real. */
77017 if( pExpr->iColumn>=0
77018 && pTab->aCol[pExpr->iColumn].affinity==SQLITE_AFF_REAL
77020 sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
77022 #endif
77023 break;
77028 ** Form A:
77029 ** CASE x WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
77031 ** Form B:
77032 ** CASE WHEN e1 THEN r1 WHEN e2 THEN r2 ... WHEN eN THEN rN ELSE y END
77034 ** Form A is can be transformed into the equivalent form B as follows:
77035 ** CASE WHEN x=e1 THEN r1 WHEN x=e2 THEN r2 ...
77036 ** WHEN x=eN THEN rN ELSE y END
77038 ** X (if it exists) is in pExpr->pLeft.
77039 ** Y is in pExpr->pRight. The Y is also optional. If there is no
77040 ** ELSE clause and no other term matches, then the result of the
77041 ** exprssion is NULL.
77042 ** Ei is in pExpr->pList->a[i*2] and Ri is pExpr->pList->a[i*2+1].
77044 ** The result of the expression is the Ri for the first matching Ei,
77045 ** or if there is no matching Ei, the ELSE term Y, or if there is
77046 ** no ELSE term, NULL.
77048 default: assert( op==TK_CASE ); {
77049 int endLabel; /* GOTO label for end of CASE stmt */
77050 int nextCase; /* GOTO label for next WHEN clause */
77051 int nExpr; /* 2x number of WHEN terms */
77052 int i; /* Loop counter */
77053 ExprList *pEList; /* List of WHEN terms */
77054 struct ExprList_item *aListelem; /* Array of WHEN terms */
77055 Expr opCompare; /* The X==Ei expression */
77056 Expr cacheX; /* Cached expression X */
77057 Expr *pX; /* The X expression */
77058 Expr *pTest = 0; /* X==Ei (form A) or just Ei (form B) */
77059 VVA_ONLY( int iCacheLevel = pParse->iCacheLevel; )
77061 assert( !ExprHasProperty(pExpr, EP_xIsSelect) && pExpr->x.pList );
77062 assert((pExpr->x.pList->nExpr % 2) == 0);
77063 assert(pExpr->x.pList->nExpr > 0);
77064 pEList = pExpr->x.pList;
77065 aListelem = pEList->a;
77066 nExpr = pEList->nExpr;
77067 endLabel = sqlite3VdbeMakeLabel(v);
77068 if( (pX = pExpr->pLeft)!=0 ){
77069 cacheX = *pX;
77070 testcase( pX->op==TK_COLUMN );
77071 testcase( pX->op==TK_REGISTER );
77072 cacheX.iTable = sqlite3ExprCodeTemp(pParse, pX, &regFree1);
77073 testcase( regFree1==0 );
77074 cacheX.op = TK_REGISTER;
77075 opCompare.op = TK_EQ;
77076 opCompare.pLeft = &cacheX;
77077 pTest = &opCompare;
77078 /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001:
77079 ** The value in regFree1 might get SCopy-ed into the file result.
77080 ** So make sure that the regFree1 register is not reused for other
77081 ** purposes and possibly overwritten. */
77082 regFree1 = 0;
77084 for(i=0; i<nExpr; i=i+2){
77085 sqlite3ExprCachePush(pParse);
77086 if( pX ){
77087 assert( pTest!=0 );
77088 opCompare.pRight = aListelem[i].pExpr;
77089 }else{
77090 pTest = aListelem[i].pExpr;
77092 nextCase = sqlite3VdbeMakeLabel(v);
77093 testcase( pTest->op==TK_COLUMN );
77094 sqlite3ExprIfFalse(pParse, pTest, nextCase, SQLITE_JUMPIFNULL);
77095 testcase( aListelem[i+1].pExpr->op==TK_COLUMN );
77096 testcase( aListelem[i+1].pExpr->op==TK_REGISTER );
77097 sqlite3ExprCode(pParse, aListelem[i+1].pExpr, target);
77098 sqlite3VdbeAddOp2(v, OP_Goto, 0, endLabel);
77099 sqlite3ExprCachePop(pParse, 1);
77100 sqlite3VdbeResolveLabel(v, nextCase);
77102 if( pExpr->pRight ){
77103 sqlite3ExprCachePush(pParse);
77104 sqlite3ExprCode(pParse, pExpr->pRight, target);
77105 sqlite3ExprCachePop(pParse, 1);
77106 }else{
77107 sqlite3VdbeAddOp2(v, OP_Null, 0, target);
77109 assert( db->mallocFailed || pParse->nErr>0
77110 || pParse->iCacheLevel==iCacheLevel );
77111 sqlite3VdbeResolveLabel(v, endLabel);
77112 break;
77114 #ifndef SQLITE_OMIT_TRIGGER
77115 case TK_RAISE: {
77116 assert( pExpr->affinity==OE_Rollback
77117 || pExpr->affinity==OE_Abort
77118 || pExpr->affinity==OE_Fail
77119 || pExpr->affinity==OE_Ignore
77121 if( !pParse->pTriggerTab ){
77122 sqlite3ErrorMsg(pParse,
77123 "RAISE() may only be used within a trigger-program");
77124 return 0;
77126 if( pExpr->affinity==OE_Abort ){
77127 sqlite3MayAbort(pParse);
77129 assert( !ExprHasProperty(pExpr, EP_IntValue) );
77130 if( pExpr->affinity==OE_Ignore ){
77131 sqlite3VdbeAddOp4(
77132 v, OP_Halt, SQLITE_OK, OE_Ignore, 0, pExpr->u.zToken,0);
77133 }else{
77134 sqlite3HaltConstraint(pParse, pExpr->affinity, pExpr->u.zToken, 0);
77137 break;
77139 #endif
77141 sqlite3ReleaseTempReg(pParse, regFree1);
77142 sqlite3ReleaseTempReg(pParse, regFree2);
77143 return inReg;
77147 ** Generate code to evaluate an expression and store the results
77148 ** into a register. Return the register number where the results
77149 ** are stored.
77151 ** If the register is a temporary register that can be deallocated,
77152 ** then write its number into *pReg. If the result register is not
77153 ** a temporary, then set *pReg to zero.
77155 SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse *pParse, Expr *pExpr, int *pReg){
77156 int r1 = sqlite3GetTempReg(pParse);
77157 int r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
77158 if( r2==r1 ){
77159 *pReg = r1;
77160 }else{
77161 sqlite3ReleaseTempReg(pParse, r1);
77162 *pReg = 0;
77164 return r2;
77168 ** Generate code that will evaluate expression pExpr and store the
77169 ** results in register target. The results are guaranteed to appear
77170 ** in register target.
77172 SQLITE_PRIVATE int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
77173 int inReg;
77175 assert( target>0 && target<=pParse->nMem );
77176 if( pExpr && pExpr->op==TK_REGISTER ){
77177 sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target);
77178 }else{
77179 inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
77180 assert( pParse->pVdbe || pParse->db->mallocFailed );
77181 if( inReg!=target && pParse->pVdbe ){
77182 sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
77185 return target;
77189 ** Generate code that evalutes the given expression and puts the result
77190 ** in register target.
77192 ** Also make a copy of the expression results into another "cache" register
77193 ** and modify the expression so that the next time it is evaluated,
77194 ** the result is a copy of the cache register.
77196 ** This routine is used for expressions that are used multiple
77197 ** times. They are evaluated once and the results of the expression
77198 ** are reused.
77200 SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int target){
77201 Vdbe *v = pParse->pVdbe;
77202 int inReg;
77203 inReg = sqlite3ExprCode(pParse, pExpr, target);
77204 assert( target>0 );
77205 /* This routine is called for terms to INSERT or UPDATE. And the only
77206 ** other place where expressions can be converted into TK_REGISTER is
77207 ** in WHERE clause processing. So as currently implemented, there is
77208 ** no way for a TK_REGISTER to exist here. But it seems prudent to
77209 ** keep the ALWAYS() in case the conditions above change with future
77210 ** modifications or enhancements. */
77211 if( ALWAYS(pExpr->op!=TK_REGISTER) ){
77212 int iMem;
77213 iMem = ++pParse->nMem;
77214 sqlite3VdbeAddOp2(v, OP_Copy, inReg, iMem);
77215 pExpr->iTable = iMem;
77216 pExpr->op2 = pExpr->op;
77217 pExpr->op = TK_REGISTER;
77219 return inReg;
77222 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
77224 ** Generate a human-readable explanation of an expression tree.
77226 SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
77227 int op; /* The opcode being coded */
77228 const char *zBinOp = 0; /* Binary operator */
77229 const char *zUniOp = 0; /* Unary operator */
77230 if( pExpr==0 ){
77231 op = TK_NULL;
77232 }else{
77233 op = pExpr->op;
77235 switch( op ){
77236 case TK_AGG_COLUMN: {
77237 sqlite3ExplainPrintf(pOut, "AGG{%d:%d}",
77238 pExpr->iTable, pExpr->iColumn);
77239 break;
77241 case TK_COLUMN: {
77242 if( pExpr->iTable<0 ){
77243 /* This only happens when coding check constraints */
77244 sqlite3ExplainPrintf(pOut, "COLUMN(%d)", pExpr->iColumn);
77245 }else{
77246 sqlite3ExplainPrintf(pOut, "{%d:%d}",
77247 pExpr->iTable, pExpr->iColumn);
77249 break;
77251 case TK_INTEGER: {
77252 if( pExpr->flags & EP_IntValue ){
77253 sqlite3ExplainPrintf(pOut, "%d", pExpr->u.iValue);
77254 }else{
77255 sqlite3ExplainPrintf(pOut, "%s", pExpr->u.zToken);
77257 break;
77259 #ifndef SQLITE_OMIT_FLOATING_POINT
77260 case TK_FLOAT: {
77261 sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
77262 break;
77264 #endif
77265 case TK_STRING: {
77266 sqlite3ExplainPrintf(pOut,"%Q", pExpr->u.zToken);
77267 break;
77269 case TK_NULL: {
77270 sqlite3ExplainPrintf(pOut,"NULL");
77271 break;
77273 #ifndef SQLITE_OMIT_BLOB_LITERAL
77274 case TK_BLOB: {
77275 sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
77276 break;
77278 #endif
77279 case TK_VARIABLE: {
77280 sqlite3ExplainPrintf(pOut,"VARIABLE(%s,%d)",
77281 pExpr->u.zToken, pExpr->iColumn);
77282 break;
77284 case TK_REGISTER: {
77285 sqlite3ExplainPrintf(pOut,"REGISTER(%d)", pExpr->iTable);
77286 break;
77288 case TK_AS: {
77289 sqlite3ExplainExpr(pOut, pExpr->pLeft);
77290 break;
77292 #ifndef SQLITE_OMIT_CAST
77293 case TK_CAST: {
77294 /* Expressions of the form: CAST(pLeft AS token) */
77295 const char *zAff = "unk";
77296 switch( sqlite3AffinityType(pExpr->u.zToken) ){
77297 case SQLITE_AFF_TEXT: zAff = "TEXT"; break;
77298 case SQLITE_AFF_NONE: zAff = "NONE"; break;
77299 case SQLITE_AFF_NUMERIC: zAff = "NUMERIC"; break;
77300 case SQLITE_AFF_INTEGER: zAff = "INTEGER"; break;
77301 case SQLITE_AFF_REAL: zAff = "REAL"; break;
77303 sqlite3ExplainPrintf(pOut, "CAST-%s(", zAff);
77304 sqlite3ExplainExpr(pOut, pExpr->pLeft);
77305 sqlite3ExplainPrintf(pOut, ")");
77306 break;
77308 #endif /* SQLITE_OMIT_CAST */
77309 case TK_LT: zBinOp = "LT"; break;
77310 case TK_LE: zBinOp = "LE"; break;
77311 case TK_GT: zBinOp = "GT"; break;
77312 case TK_GE: zBinOp = "GE"; break;
77313 case TK_NE: zBinOp = "NE"; break;
77314 case TK_EQ: zBinOp = "EQ"; break;
77315 case TK_IS: zBinOp = "IS"; break;
77316 case TK_ISNOT: zBinOp = "ISNOT"; break;
77317 case TK_AND: zBinOp = "AND"; break;
77318 case TK_OR: zBinOp = "OR"; break;
77319 case TK_PLUS: zBinOp = "ADD"; break;
77320 case TK_STAR: zBinOp = "MUL"; break;
77321 case TK_MINUS: zBinOp = "SUB"; break;
77322 case TK_REM: zBinOp = "REM"; break;
77323 case TK_BITAND: zBinOp = "BITAND"; break;
77324 case TK_BITOR: zBinOp = "BITOR"; break;
77325 case TK_SLASH: zBinOp = "DIV"; break;
77326 case TK_LSHIFT: zBinOp = "LSHIFT"; break;
77327 case TK_RSHIFT: zBinOp = "RSHIFT"; break;
77328 case TK_CONCAT: zBinOp = "CONCAT"; break;
77330 case TK_UMINUS: zUniOp = "UMINUS"; break;
77331 case TK_UPLUS: zUniOp = "UPLUS"; break;
77332 case TK_BITNOT: zUniOp = "BITNOT"; break;
77333 case TK_NOT: zUniOp = "NOT"; break;
77334 case TK_ISNULL: zUniOp = "ISNULL"; break;
77335 case TK_NOTNULL: zUniOp = "NOTNULL"; break;
77337 case TK_AGG_FUNCTION:
77338 case TK_CONST_FUNC:
77339 case TK_FUNCTION: {
77340 ExprList *pFarg; /* List of function arguments */
77341 if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ){
77342 pFarg = 0;
77343 }else{
77344 pFarg = pExpr->x.pList;
77346 sqlite3ExplainPrintf(pOut, "%sFUNCTION:%s(",
77347 op==TK_AGG_FUNCTION ? "AGG_" : "",
77348 pExpr->u.zToken);
77349 if( pFarg ){
77350 sqlite3ExplainExprList(pOut, pFarg);
77352 sqlite3ExplainPrintf(pOut, ")");
77353 break;
77355 #ifndef SQLITE_OMIT_SUBQUERY
77356 case TK_EXISTS: {
77357 sqlite3ExplainPrintf(pOut, "EXISTS(");
77358 sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
77359 sqlite3ExplainPrintf(pOut,")");
77360 break;
77362 case TK_SELECT: {
77363 sqlite3ExplainPrintf(pOut, "(");
77364 sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
77365 sqlite3ExplainPrintf(pOut, ")");
77366 break;
77368 case TK_IN: {
77369 sqlite3ExplainPrintf(pOut, "IN(");
77370 sqlite3ExplainExpr(pOut, pExpr->pLeft);
77371 sqlite3ExplainPrintf(pOut, ",");
77372 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
77373 sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
77374 }else{
77375 sqlite3ExplainExprList(pOut, pExpr->x.pList);
77377 sqlite3ExplainPrintf(pOut, ")");
77378 break;
77380 #endif /* SQLITE_OMIT_SUBQUERY */
77383 ** x BETWEEN y AND z
77385 ** This is equivalent to
77387 ** x>=y AND x<=z
77389 ** X is stored in pExpr->pLeft.
77390 ** Y is stored in pExpr->pList->a[0].pExpr.
77391 ** Z is stored in pExpr->pList->a[1].pExpr.
77393 case TK_BETWEEN: {
77394 Expr *pX = pExpr->pLeft;
77395 Expr *pY = pExpr->x.pList->a[0].pExpr;
77396 Expr *pZ = pExpr->x.pList->a[1].pExpr;
77397 sqlite3ExplainPrintf(pOut, "BETWEEN(");
77398 sqlite3ExplainExpr(pOut, pX);
77399 sqlite3ExplainPrintf(pOut, ",");
77400 sqlite3ExplainExpr(pOut, pY);
77401 sqlite3ExplainPrintf(pOut, ",");
77402 sqlite3ExplainExpr(pOut, pZ);
77403 sqlite3ExplainPrintf(pOut, ")");
77404 break;
77406 case TK_TRIGGER: {
77407 /* If the opcode is TK_TRIGGER, then the expression is a reference
77408 ** to a column in the new.* or old.* pseudo-tables available to
77409 ** trigger programs. In this case Expr.iTable is set to 1 for the
77410 ** new.* pseudo-table, or 0 for the old.* pseudo-table. Expr.iColumn
77411 ** is set to the column of the pseudo-table to read, or to -1 to
77412 ** read the rowid field.
77414 sqlite3ExplainPrintf(pOut, "%s(%d)",
77415 pExpr->iTable ? "NEW" : "OLD", pExpr->iColumn);
77416 break;
77418 case TK_CASE: {
77419 sqlite3ExplainPrintf(pOut, "CASE(");
77420 sqlite3ExplainExpr(pOut, pExpr->pLeft);
77421 sqlite3ExplainPrintf(pOut, ",");
77422 sqlite3ExplainExprList(pOut, pExpr->x.pList);
77423 break;
77425 #ifndef SQLITE_OMIT_TRIGGER
77426 case TK_RAISE: {
77427 const char *zType = "unk";
77428 switch( pExpr->affinity ){
77429 case OE_Rollback: zType = "rollback"; break;
77430 case OE_Abort: zType = "abort"; break;
77431 case OE_Fail: zType = "fail"; break;
77432 case OE_Ignore: zType = "ignore"; break;
77434 sqlite3ExplainPrintf(pOut, "RAISE-%s(%s)", zType, pExpr->u.zToken);
77435 break;
77437 #endif
77439 if( zBinOp ){
77440 sqlite3ExplainPrintf(pOut,"%s(", zBinOp);
77441 sqlite3ExplainExpr(pOut, pExpr->pLeft);
77442 sqlite3ExplainPrintf(pOut,",");
77443 sqlite3ExplainExpr(pOut, pExpr->pRight);
77444 sqlite3ExplainPrintf(pOut,")");
77445 }else if( zUniOp ){
77446 sqlite3ExplainPrintf(pOut,"%s(", zUniOp);
77447 sqlite3ExplainExpr(pOut, pExpr->pLeft);
77448 sqlite3ExplainPrintf(pOut,")");
77451 #endif /* defined(SQLITE_ENABLE_TREE_EXPLAIN) */
77453 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
77455 ** Generate a human-readable explanation of an expression list.
77457 SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe *pOut, ExprList *pList){
77458 int i;
77459 if( pList==0 || pList->nExpr==0 ){
77460 sqlite3ExplainPrintf(pOut, "(empty-list)");
77461 return;
77462 }else if( pList->nExpr==1 ){
77463 sqlite3ExplainExpr(pOut, pList->a[0].pExpr);
77464 }else{
77465 sqlite3ExplainPush(pOut);
77466 for(i=0; i<pList->nExpr; i++){
77467 sqlite3ExplainPrintf(pOut, "item[%d] = ", i);
77468 sqlite3ExplainPush(pOut);
77469 sqlite3ExplainExpr(pOut, pList->a[i].pExpr);
77470 sqlite3ExplainPop(pOut);
77471 if( i<pList->nExpr-1 ){
77472 sqlite3ExplainNL(pOut);
77475 sqlite3ExplainPop(pOut);
77478 #endif /* SQLITE_DEBUG */
77481 ** Return TRUE if pExpr is an constant expression that is appropriate
77482 ** for factoring out of a loop. Appropriate expressions are:
77484 ** * Any expression that evaluates to two or more opcodes.
77486 ** * Any OP_Integer, OP_Real, OP_String, OP_Blob, OP_Null,
77487 ** or OP_Variable that does not need to be placed in a
77488 ** specific register.
77490 ** There is no point in factoring out single-instruction constant
77491 ** expressions that need to be placed in a particular register.
77492 ** We could factor them out, but then we would end up adding an
77493 ** OP_SCopy instruction to move the value into the correct register
77494 ** later. We might as well just use the original instruction and
77495 ** avoid the OP_SCopy.
77497 static int isAppropriateForFactoring(Expr *p){
77498 if( !sqlite3ExprIsConstantNotJoin(p) ){
77499 return 0; /* Only constant expressions are appropriate for factoring */
77501 if( (p->flags & EP_FixedDest)==0 ){
77502 return 1; /* Any constant without a fixed destination is appropriate */
77504 while( p->op==TK_UPLUS ) p = p->pLeft;
77505 switch( p->op ){
77506 #ifndef SQLITE_OMIT_BLOB_LITERAL
77507 case TK_BLOB:
77508 #endif
77509 case TK_VARIABLE:
77510 case TK_INTEGER:
77511 case TK_FLOAT:
77512 case TK_NULL:
77513 case TK_STRING: {
77514 testcase( p->op==TK_BLOB );
77515 testcase( p->op==TK_VARIABLE );
77516 testcase( p->op==TK_INTEGER );
77517 testcase( p->op==TK_FLOAT );
77518 testcase( p->op==TK_NULL );
77519 testcase( p->op==TK_STRING );
77520 /* Single-instruction constants with a fixed destination are
77521 ** better done in-line. If we factor them, they will just end
77522 ** up generating an OP_SCopy to move the value to the destination
77523 ** register. */
77524 return 0;
77526 case TK_UMINUS: {
77527 if( p->pLeft->op==TK_FLOAT || p->pLeft->op==TK_INTEGER ){
77528 return 0;
77530 break;
77532 default: {
77533 break;
77536 return 1;
77540 ** If pExpr is a constant expression that is appropriate for
77541 ** factoring out of a loop, then evaluate the expression
77542 ** into a register and convert the expression into a TK_REGISTER
77543 ** expression.
77545 static int evalConstExpr(Walker *pWalker, Expr *pExpr){
77546 Parse *pParse = pWalker->pParse;
77547 switch( pExpr->op ){
77548 case TK_IN:
77549 case TK_REGISTER: {
77550 return WRC_Prune;
77552 case TK_FUNCTION:
77553 case TK_AGG_FUNCTION:
77554 case TK_CONST_FUNC: {
77555 /* The arguments to a function have a fixed destination.
77556 ** Mark them this way to avoid generated unneeded OP_SCopy
77557 ** instructions.
77559 ExprList *pList = pExpr->x.pList;
77560 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
77561 if( pList ){
77562 int i = pList->nExpr;
77563 struct ExprList_item *pItem = pList->a;
77564 for(; i>0; i--, pItem++){
77565 if( ALWAYS(pItem->pExpr) ) pItem->pExpr->flags |= EP_FixedDest;
77568 break;
77571 if( isAppropriateForFactoring(pExpr) ){
77572 int r1 = ++pParse->nMem;
77573 int r2;
77574 r2 = sqlite3ExprCodeTarget(pParse, pExpr, r1);
77575 if( NEVER(r1!=r2) ) sqlite3ReleaseTempReg(pParse, r1);
77576 pExpr->op2 = pExpr->op;
77577 pExpr->op = TK_REGISTER;
77578 pExpr->iTable = r2;
77579 return WRC_Prune;
77581 return WRC_Continue;
77585 ** Preevaluate constant subexpressions within pExpr and store the
77586 ** results in registers. Modify pExpr so that the constant subexpresions
77587 ** are TK_REGISTER opcodes that refer to the precomputed values.
77589 ** This routine is a no-op if the jump to the cookie-check code has
77590 ** already occur. Since the cookie-check jump is generated prior to
77591 ** any other serious processing, this check ensures that there is no
77592 ** way to accidently bypass the constant initializations.
77594 ** This routine is also a no-op if the SQLITE_FactorOutConst optimization
77595 ** is disabled via the sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS)
77596 ** interface. This allows test logic to verify that the same answer is
77597 ** obtained for queries regardless of whether or not constants are
77598 ** precomputed into registers or if they are inserted in-line.
77600 SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse *pParse, Expr *pExpr){
77601 Walker w;
77602 if( pParse->cookieGoto ) return;
77603 if( (pParse->db->flags & SQLITE_FactorOutConst)!=0 ) return;
77604 w.xExprCallback = evalConstExpr;
77605 w.xSelectCallback = 0;
77606 w.pParse = pParse;
77607 sqlite3WalkExpr(&w, pExpr);
77612 ** Generate code that pushes the value of every element of the given
77613 ** expression list into a sequence of registers beginning at target.
77615 ** Return the number of elements evaluated.
77617 SQLITE_PRIVATE int sqlite3ExprCodeExprList(
77618 Parse *pParse, /* Parsing context */
77619 ExprList *pList, /* The expression list to be coded */
77620 int target, /* Where to write results */
77621 int doHardCopy /* Make a hard copy of every element */
77623 struct ExprList_item *pItem;
77624 int i, n;
77625 assert( pList!=0 );
77626 assert( target>0 );
77627 assert( pParse->pVdbe!=0 ); /* Never gets this far otherwise */
77628 n = pList->nExpr;
77629 for(pItem=pList->a, i=0; i<n; i++, pItem++){
77630 Expr *pExpr = pItem->pExpr;
77631 int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
77632 if( inReg!=target+i ){
77633 sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy,
77634 inReg, target+i);
77637 return n;
77641 ** Generate code for a BETWEEN operator.
77643 ** x BETWEEN y AND z
77645 ** The above is equivalent to
77647 ** x>=y AND x<=z
77649 ** Code it as such, taking care to do the common subexpression
77650 ** elementation of x.
77652 static void exprCodeBetween(
77653 Parse *pParse, /* Parsing and code generating context */
77654 Expr *pExpr, /* The BETWEEN expression */
77655 int dest, /* Jump here if the jump is taken */
77656 int jumpIfTrue, /* Take the jump if the BETWEEN is true */
77657 int jumpIfNull /* Take the jump if the BETWEEN is NULL */
77659 Expr exprAnd; /* The AND operator in x>=y AND x<=z */
77660 Expr compLeft; /* The x>=y term */
77661 Expr compRight; /* The x<=z term */
77662 Expr exprX; /* The x subexpression */
77663 int regFree1 = 0; /* Temporary use register */
77665 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
77666 exprX = *pExpr->pLeft;
77667 exprAnd.op = TK_AND;
77668 exprAnd.pLeft = &compLeft;
77669 exprAnd.pRight = &compRight;
77670 compLeft.op = TK_GE;
77671 compLeft.pLeft = &exprX;
77672 compLeft.pRight = pExpr->x.pList->a[0].pExpr;
77673 compRight.op = TK_LE;
77674 compRight.pLeft = &exprX;
77675 compRight.pRight = pExpr->x.pList->a[1].pExpr;
77676 exprX.iTable = sqlite3ExprCodeTemp(pParse, &exprX, &regFree1);
77677 exprX.op = TK_REGISTER;
77678 if( jumpIfTrue ){
77679 sqlite3ExprIfTrue(pParse, &exprAnd, dest, jumpIfNull);
77680 }else{
77681 sqlite3ExprIfFalse(pParse, &exprAnd, dest, jumpIfNull);
77683 sqlite3ReleaseTempReg(pParse, regFree1);
77685 /* Ensure adequate test coverage */
77686 testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1==0 );
77687 testcase( jumpIfTrue==0 && jumpIfNull==0 && regFree1!=0 );
77688 testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1==0 );
77689 testcase( jumpIfTrue==0 && jumpIfNull!=0 && regFree1!=0 );
77690 testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1==0 );
77691 testcase( jumpIfTrue!=0 && jumpIfNull==0 && regFree1!=0 );
77692 testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1==0 );
77693 testcase( jumpIfTrue!=0 && jumpIfNull!=0 && regFree1!=0 );
77697 ** Generate code for a boolean expression such that a jump is made
77698 ** to the label "dest" if the expression is true but execution
77699 ** continues straight thru if the expression is false.
77701 ** If the expression evaluates to NULL (neither true nor false), then
77702 ** take the jump if the jumpIfNull flag is SQLITE_JUMPIFNULL.
77704 ** This code depends on the fact that certain token values (ex: TK_EQ)
77705 ** are the same as opcode values (ex: OP_Eq) that implement the corresponding
77706 ** operation. Special comments in vdbe.c and the mkopcodeh.awk script in
77707 ** the make process cause these values to align. Assert()s in the code
77708 ** below verify that the numbers are aligned correctly.
77710 SQLITE_PRIVATE void sqlite3ExprIfTrue(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
77711 Vdbe *v = pParse->pVdbe;
77712 int op = 0;
77713 int regFree1 = 0;
77714 int regFree2 = 0;
77715 int r1, r2;
77717 assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
77718 if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */
77719 if( NEVER(pExpr==0) ) return; /* No way this can happen */
77720 op = pExpr->op;
77721 switch( op ){
77722 case TK_AND: {
77723 int d2 = sqlite3VdbeMakeLabel(v);
77724 testcase( jumpIfNull==0 );
77725 sqlite3ExprCachePush(pParse);
77726 sqlite3ExprIfFalse(pParse, pExpr->pLeft, d2,jumpIfNull^SQLITE_JUMPIFNULL);
77727 sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
77728 sqlite3VdbeResolveLabel(v, d2);
77729 sqlite3ExprCachePop(pParse, 1);
77730 break;
77732 case TK_OR: {
77733 testcase( jumpIfNull==0 );
77734 sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
77735 sqlite3ExprIfTrue(pParse, pExpr->pRight, dest, jumpIfNull);
77736 break;
77738 case TK_NOT: {
77739 testcase( jumpIfNull==0 );
77740 sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
77741 break;
77743 case TK_LT:
77744 case TK_LE:
77745 case TK_GT:
77746 case TK_GE:
77747 case TK_NE:
77748 case TK_EQ: {
77749 assert( TK_LT==OP_Lt );
77750 assert( TK_LE==OP_Le );
77751 assert( TK_GT==OP_Gt );
77752 assert( TK_GE==OP_Ge );
77753 assert( TK_EQ==OP_Eq );
77754 assert( TK_NE==OP_Ne );
77755 testcase( op==TK_LT );
77756 testcase( op==TK_LE );
77757 testcase( op==TK_GT );
77758 testcase( op==TK_GE );
77759 testcase( op==TK_EQ );
77760 testcase( op==TK_NE );
77761 testcase( jumpIfNull==0 );
77762 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77763 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77764 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77765 r1, r2, dest, jumpIfNull);
77766 testcase( regFree1==0 );
77767 testcase( regFree2==0 );
77768 break;
77770 case TK_IS:
77771 case TK_ISNOT: {
77772 testcase( op==TK_IS );
77773 testcase( op==TK_ISNOT );
77774 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77775 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77776 op = (op==TK_IS) ? TK_EQ : TK_NE;
77777 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77778 r1, r2, dest, SQLITE_NULLEQ);
77779 testcase( regFree1==0 );
77780 testcase( regFree2==0 );
77781 break;
77783 case TK_ISNULL:
77784 case TK_NOTNULL: {
77785 assert( TK_ISNULL==OP_IsNull );
77786 assert( TK_NOTNULL==OP_NotNull );
77787 testcase( op==TK_ISNULL );
77788 testcase( op==TK_NOTNULL );
77789 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77790 sqlite3VdbeAddOp2(v, op, r1, dest);
77791 testcase( regFree1==0 );
77792 break;
77794 case TK_BETWEEN: {
77795 testcase( jumpIfNull==0 );
77796 exprCodeBetween(pParse, pExpr, dest, 1, jumpIfNull);
77797 break;
77799 #ifndef SQLITE_OMIT_SUBQUERY
77800 case TK_IN: {
77801 int destIfFalse = sqlite3VdbeMakeLabel(v);
77802 int destIfNull = jumpIfNull ? dest : destIfFalse;
77803 sqlite3ExprCodeIN(pParse, pExpr, destIfFalse, destIfNull);
77804 sqlite3VdbeAddOp2(v, OP_Goto, 0, dest);
77805 sqlite3VdbeResolveLabel(v, destIfFalse);
77806 break;
77808 #endif
77809 default: {
77810 r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
77811 sqlite3VdbeAddOp3(v, OP_If, r1, dest, jumpIfNull!=0);
77812 testcase( regFree1==0 );
77813 testcase( jumpIfNull==0 );
77814 break;
77817 sqlite3ReleaseTempReg(pParse, regFree1);
77818 sqlite3ReleaseTempReg(pParse, regFree2);
77822 ** Generate code for a boolean expression such that a jump is made
77823 ** to the label "dest" if the expression is false but execution
77824 ** continues straight thru if the expression is true.
77826 ** If the expression evaluates to NULL (neither true nor false) then
77827 ** jump if jumpIfNull is SQLITE_JUMPIFNULL or fall through if jumpIfNull
77828 ** is 0.
77830 SQLITE_PRIVATE void sqlite3ExprIfFalse(Parse *pParse, Expr *pExpr, int dest, int jumpIfNull){
77831 Vdbe *v = pParse->pVdbe;
77832 int op = 0;
77833 int regFree1 = 0;
77834 int regFree2 = 0;
77835 int r1, r2;
77837 assert( jumpIfNull==SQLITE_JUMPIFNULL || jumpIfNull==0 );
77838 if( NEVER(v==0) ) return; /* Existance of VDBE checked by caller */
77839 if( pExpr==0 ) return;
77841 /* The value of pExpr->op and op are related as follows:
77843 ** pExpr->op op
77844 ** --------- ----------
77845 ** TK_ISNULL OP_NotNull
77846 ** TK_NOTNULL OP_IsNull
77847 ** TK_NE OP_Eq
77848 ** TK_EQ OP_Ne
77849 ** TK_GT OP_Le
77850 ** TK_LE OP_Gt
77851 ** TK_GE OP_Lt
77852 ** TK_LT OP_Ge
77854 ** For other values of pExpr->op, op is undefined and unused.
77855 ** The value of TK_ and OP_ constants are arranged such that we
77856 ** can compute the mapping above using the following expression.
77857 ** Assert()s verify that the computation is correct.
77859 op = ((pExpr->op+(TK_ISNULL&1))^1)-(TK_ISNULL&1);
77861 /* Verify correct alignment of TK_ and OP_ constants
77863 assert( pExpr->op!=TK_ISNULL || op==OP_NotNull );
77864 assert( pExpr->op!=TK_NOTNULL || op==OP_IsNull );
77865 assert( pExpr->op!=TK_NE || op==OP_Eq );
77866 assert( pExpr->op!=TK_EQ || op==OP_Ne );
77867 assert( pExpr->op!=TK_LT || op==OP_Ge );
77868 assert( pExpr->op!=TK_LE || op==OP_Gt );
77869 assert( pExpr->op!=TK_GT || op==OP_Le );
77870 assert( pExpr->op!=TK_GE || op==OP_Lt );
77872 switch( pExpr->op ){
77873 case TK_AND: {
77874 testcase( jumpIfNull==0 );
77875 sqlite3ExprIfFalse(pParse, pExpr->pLeft, dest, jumpIfNull);
77876 sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
77877 break;
77879 case TK_OR: {
77880 int d2 = sqlite3VdbeMakeLabel(v);
77881 testcase( jumpIfNull==0 );
77882 sqlite3ExprCachePush(pParse);
77883 sqlite3ExprIfTrue(pParse, pExpr->pLeft, d2, jumpIfNull^SQLITE_JUMPIFNULL);
77884 sqlite3ExprIfFalse(pParse, pExpr->pRight, dest, jumpIfNull);
77885 sqlite3VdbeResolveLabel(v, d2);
77886 sqlite3ExprCachePop(pParse, 1);
77887 break;
77889 case TK_NOT: {
77890 testcase( jumpIfNull==0 );
77891 sqlite3ExprIfTrue(pParse, pExpr->pLeft, dest, jumpIfNull);
77892 break;
77894 case TK_LT:
77895 case TK_LE:
77896 case TK_GT:
77897 case TK_GE:
77898 case TK_NE:
77899 case TK_EQ: {
77900 testcase( op==TK_LT );
77901 testcase( op==TK_LE );
77902 testcase( op==TK_GT );
77903 testcase( op==TK_GE );
77904 testcase( op==TK_EQ );
77905 testcase( op==TK_NE );
77906 testcase( jumpIfNull==0 );
77907 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77908 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77909 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77910 r1, r2, dest, jumpIfNull);
77911 testcase( regFree1==0 );
77912 testcase( regFree2==0 );
77913 break;
77915 case TK_IS:
77916 case TK_ISNOT: {
77917 testcase( pExpr->op==TK_IS );
77918 testcase( pExpr->op==TK_ISNOT );
77919 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77920 r2 = sqlite3ExprCodeTemp(pParse, pExpr->pRight, &regFree2);
77921 op = (pExpr->op==TK_IS) ? TK_NE : TK_EQ;
77922 codeCompare(pParse, pExpr->pLeft, pExpr->pRight, op,
77923 r1, r2, dest, SQLITE_NULLEQ);
77924 testcase( regFree1==0 );
77925 testcase( regFree2==0 );
77926 break;
77928 case TK_ISNULL:
77929 case TK_NOTNULL: {
77930 testcase( op==TK_ISNULL );
77931 testcase( op==TK_NOTNULL );
77932 r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, &regFree1);
77933 sqlite3VdbeAddOp2(v, op, r1, dest);
77934 testcase( regFree1==0 );
77935 break;
77937 case TK_BETWEEN: {
77938 testcase( jumpIfNull==0 );
77939 exprCodeBetween(pParse, pExpr, dest, 0, jumpIfNull);
77940 break;
77942 #ifndef SQLITE_OMIT_SUBQUERY
77943 case TK_IN: {
77944 if( jumpIfNull ){
77945 sqlite3ExprCodeIN(pParse, pExpr, dest, dest);
77946 }else{
77947 int destIfNull = sqlite3VdbeMakeLabel(v);
77948 sqlite3ExprCodeIN(pParse, pExpr, dest, destIfNull);
77949 sqlite3VdbeResolveLabel(v, destIfNull);
77951 break;
77953 #endif
77954 default: {
77955 r1 = sqlite3ExprCodeTemp(pParse, pExpr, &regFree1);
77956 sqlite3VdbeAddOp3(v, OP_IfNot, r1, dest, jumpIfNull!=0);
77957 testcase( regFree1==0 );
77958 testcase( jumpIfNull==0 );
77959 break;
77962 sqlite3ReleaseTempReg(pParse, regFree1);
77963 sqlite3ReleaseTempReg(pParse, regFree2);
77967 ** Do a deep comparison of two expression trees. Return 0 if the two
77968 ** expressions are completely identical. Return 1 if they differ only
77969 ** by a COLLATE operator at the top level. Return 2 if there are differences
77970 ** other than the top-level COLLATE operator.
77972 ** Sometimes this routine will return 2 even if the two expressions
77973 ** really are equivalent. If we cannot prove that the expressions are
77974 ** identical, we return 2 just to be safe. So if this routine
77975 ** returns 2, then you do not really know for certain if the two
77976 ** expressions are the same. But if you get a 0 or 1 return, then you
77977 ** can be sure the expressions are the same. In the places where
77978 ** this routine is used, it does not hurt to get an extra 2 - that
77979 ** just might result in some slightly slower code. But returning
77980 ** an incorrect 0 or 1 could lead to a malfunction.
77982 SQLITE_PRIVATE int sqlite3ExprCompare(Expr *pA, Expr *pB){
77983 if( pA==0||pB==0 ){
77984 return pB==pA ? 0 : 2;
77986 assert( !ExprHasAnyProperty(pA, EP_TokenOnly|EP_Reduced) );
77987 assert( !ExprHasAnyProperty(pB, EP_TokenOnly|EP_Reduced) );
77988 if( ExprHasProperty(pA, EP_xIsSelect) || ExprHasProperty(pB, EP_xIsSelect) ){
77989 return 2;
77991 if( (pA->flags & EP_Distinct)!=(pB->flags & EP_Distinct) ) return 2;
77992 if( pA->op!=pB->op ) return 2;
77993 if( sqlite3ExprCompare(pA->pLeft, pB->pLeft) ) return 2;
77994 if( sqlite3ExprCompare(pA->pRight, pB->pRight) ) return 2;
77995 if( sqlite3ExprListCompare(pA->x.pList, pB->x.pList) ) return 2;
77996 if( pA->iTable!=pB->iTable || pA->iColumn!=pB->iColumn ) return 2;
77997 if( ExprHasProperty(pA, EP_IntValue) ){
77998 if( !ExprHasProperty(pB, EP_IntValue) || pA->u.iValue!=pB->u.iValue ){
77999 return 2;
78001 }else if( pA->op!=TK_COLUMN && pA->u.zToken ){
78002 if( ExprHasProperty(pB, EP_IntValue) || NEVER(pB->u.zToken==0) ) return 2;
78003 if( strcmp(pA->u.zToken,pB->u.zToken)!=0 ){
78004 return 2;
78007 if( (pA->flags & EP_ExpCollate)!=(pB->flags & EP_ExpCollate) ) return 1;
78008 if( (pA->flags & EP_ExpCollate)!=0 && pA->pColl!=pB->pColl ) return 2;
78009 return 0;
78013 ** Compare two ExprList objects. Return 0 if they are identical and
78014 ** non-zero if they differ in any way.
78016 ** This routine might return non-zero for equivalent ExprLists. The
78017 ** only consequence will be disabled optimizations. But this routine
78018 ** must never return 0 if the two ExprList objects are different, or
78019 ** a malfunction will result.
78021 ** Two NULL pointers are considered to be the same. But a NULL pointer
78022 ** always differs from a non-NULL pointer.
78024 SQLITE_PRIVATE int sqlite3ExprListCompare(ExprList *pA, ExprList *pB){
78025 int i;
78026 if( pA==0 && pB==0 ) return 0;
78027 if( pA==0 || pB==0 ) return 1;
78028 if( pA->nExpr!=pB->nExpr ) return 1;
78029 for(i=0; i<pA->nExpr; i++){
78030 Expr *pExprA = pA->a[i].pExpr;
78031 Expr *pExprB = pB->a[i].pExpr;
78032 if( pA->a[i].sortOrder!=pB->a[i].sortOrder ) return 1;
78033 if( sqlite3ExprCompare(pExprA, pExprB) ) return 1;
78035 return 0;
78039 ** Add a new element to the pAggInfo->aCol[] array. Return the index of
78040 ** the new element. Return a negative number if malloc fails.
78042 static int addAggInfoColumn(sqlite3 *db, AggInfo *pInfo){
78043 int i;
78044 pInfo->aCol = sqlite3ArrayAllocate(
78046 pInfo->aCol,
78047 sizeof(pInfo->aCol[0]),
78049 &pInfo->nColumn,
78050 &pInfo->nColumnAlloc,
78053 return i;
78057 ** Add a new element to the pAggInfo->aFunc[] array. Return the index of
78058 ** the new element. Return a negative number if malloc fails.
78060 static int addAggInfoFunc(sqlite3 *db, AggInfo *pInfo){
78061 int i;
78062 pInfo->aFunc = sqlite3ArrayAllocate(
78063 db,
78064 pInfo->aFunc,
78065 sizeof(pInfo->aFunc[0]),
78067 &pInfo->nFunc,
78068 &pInfo->nFuncAlloc,
78071 return i;
78075 ** This is the xExprCallback for a tree walker. It is used to
78076 ** implement sqlite3ExprAnalyzeAggregates(). See sqlite3ExprAnalyzeAggregates
78077 ** for additional information.
78079 static int analyzeAggregate(Walker *pWalker, Expr *pExpr){
78080 int i;
78081 NameContext *pNC = pWalker->u.pNC;
78082 Parse *pParse = pNC->pParse;
78083 SrcList *pSrcList = pNC->pSrcList;
78084 AggInfo *pAggInfo = pNC->pAggInfo;
78086 switch( pExpr->op ){
78087 case TK_AGG_COLUMN:
78088 case TK_COLUMN: {
78089 testcase( pExpr->op==TK_AGG_COLUMN );
78090 testcase( pExpr->op==TK_COLUMN );
78091 /* Check to see if the column is in one of the tables in the FROM
78092 ** clause of the aggregate query */
78093 if( ALWAYS(pSrcList!=0) ){
78094 struct SrcList_item *pItem = pSrcList->a;
78095 for(i=0; i<pSrcList->nSrc; i++, pItem++){
78096 struct AggInfo_col *pCol;
78097 assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
78098 if( pExpr->iTable==pItem->iCursor ){
78099 /* If we reach this point, it means that pExpr refers to a table
78100 ** that is in the FROM clause of the aggregate query.
78102 ** Make an entry for the column in pAggInfo->aCol[] if there
78103 ** is not an entry there already.
78105 int k;
78106 pCol = pAggInfo->aCol;
78107 for(k=0; k<pAggInfo->nColumn; k++, pCol++){
78108 if( pCol->iTable==pExpr->iTable &&
78109 pCol->iColumn==pExpr->iColumn ){
78110 break;
78113 if( (k>=pAggInfo->nColumn)
78114 && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
78116 pCol = &pAggInfo->aCol[k];
78117 pCol->pTab = pExpr->pTab;
78118 pCol->iTable = pExpr->iTable;
78119 pCol->iColumn = pExpr->iColumn;
78120 pCol->iMem = ++pParse->nMem;
78121 pCol->iSorterColumn = -1;
78122 pCol->pExpr = pExpr;
78123 if( pAggInfo->pGroupBy ){
78124 int j, n;
78125 ExprList *pGB = pAggInfo->pGroupBy;
78126 struct ExprList_item *pTerm = pGB->a;
78127 n = pGB->nExpr;
78128 for(j=0; j<n; j++, pTerm++){
78129 Expr *pE = pTerm->pExpr;
78130 if( pE->op==TK_COLUMN && pE->iTable==pExpr->iTable &&
78131 pE->iColumn==pExpr->iColumn ){
78132 pCol->iSorterColumn = j;
78133 break;
78137 if( pCol->iSorterColumn<0 ){
78138 pCol->iSorterColumn = pAggInfo->nSortingColumn++;
78141 /* There is now an entry for pExpr in pAggInfo->aCol[] (either
78142 ** because it was there before or because we just created it).
78143 ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
78144 ** pAggInfo->aCol[] entry.
78146 ExprSetIrreducible(pExpr);
78147 pExpr->pAggInfo = pAggInfo;
78148 pExpr->op = TK_AGG_COLUMN;
78149 pExpr->iAgg = (i16)k;
78150 break;
78151 } /* endif pExpr->iTable==pItem->iCursor */
78152 } /* end loop over pSrcList */
78154 return WRC_Prune;
78156 case TK_AGG_FUNCTION: {
78157 /* The pNC->nDepth==0 test causes aggregate functions in subqueries
78158 ** to be ignored */
78159 if( pNC->nDepth==0 ){
78160 /* Check to see if pExpr is a duplicate of another aggregate
78161 ** function that is already in the pAggInfo structure
78163 struct AggInfo_func *pItem = pAggInfo->aFunc;
78164 for(i=0; i<pAggInfo->nFunc; i++, pItem++){
78165 if( sqlite3ExprCompare(pItem->pExpr, pExpr)==0 ){
78166 break;
78169 if( i>=pAggInfo->nFunc ){
78170 /* pExpr is original. Make a new entry in pAggInfo->aFunc[]
78172 u8 enc = ENC(pParse->db);
78173 i = addAggInfoFunc(pParse->db, pAggInfo);
78174 if( i>=0 ){
78175 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
78176 pItem = &pAggInfo->aFunc[i];
78177 pItem->pExpr = pExpr;
78178 pItem->iMem = ++pParse->nMem;
78179 assert( !ExprHasProperty(pExpr, EP_IntValue) );
78180 pItem->pFunc = sqlite3FindFunction(pParse->db,
78181 pExpr->u.zToken, sqlite3Strlen30(pExpr->u.zToken),
78182 pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0);
78183 if( pExpr->flags & EP_Distinct ){
78184 pItem->iDistinct = pParse->nTab++;
78185 }else{
78186 pItem->iDistinct = -1;
78190 /* Make pExpr point to the appropriate pAggInfo->aFunc[] entry
78192 assert( !ExprHasAnyProperty(pExpr, EP_TokenOnly|EP_Reduced) );
78193 ExprSetIrreducible(pExpr);
78194 pExpr->iAgg = (i16)i;
78195 pExpr->pAggInfo = pAggInfo;
78196 return WRC_Prune;
78200 return WRC_Continue;
78202 static int analyzeAggregatesInSelect(Walker *pWalker, Select *pSelect){
78203 NameContext *pNC = pWalker->u.pNC;
78204 if( pNC->nDepth==0 ){
78205 pNC->nDepth++;
78206 sqlite3WalkSelect(pWalker, pSelect);
78207 pNC->nDepth--;
78208 return WRC_Prune;
78209 }else{
78210 return WRC_Continue;
78215 ** Analyze the given expression looking for aggregate functions and
78216 ** for variables that need to be added to the pParse->aAgg[] array.
78217 ** Make additional entries to the pParse->aAgg[] array as necessary.
78219 ** This routine should only be called after the expression has been
78220 ** analyzed by sqlite3ResolveExprNames().
78222 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggregates(NameContext *pNC, Expr *pExpr){
78223 Walker w;
78224 w.xExprCallback = analyzeAggregate;
78225 w.xSelectCallback = analyzeAggregatesInSelect;
78226 w.u.pNC = pNC;
78227 assert( pNC->pSrcList!=0 );
78228 sqlite3WalkExpr(&w, pExpr);
78232 ** Call sqlite3ExprAnalyzeAggregates() for every expression in an
78233 ** expression list. Return the number of errors.
78235 ** If an error is found, the analysis is cut short.
78237 SQLITE_PRIVATE void sqlite3ExprAnalyzeAggList(NameContext *pNC, ExprList *pList){
78238 struct ExprList_item *pItem;
78239 int i;
78240 if( pList ){
78241 for(pItem=pList->a, i=0; i<pList->nExpr; i++, pItem++){
78242 sqlite3ExprAnalyzeAggregates(pNC, pItem->pExpr);
78248 ** Allocate a single new register for use to hold some intermediate result.
78250 SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){
78251 if( pParse->nTempReg==0 ){
78252 return ++pParse->nMem;
78254 return pParse->aTempReg[--pParse->nTempReg];
78258 ** Deallocate a register, making available for reuse for some other
78259 ** purpose.
78261 ** If a register is currently being used by the column cache, then
78262 ** the dallocation is deferred until the column cache line that uses
78263 ** the register becomes stale.
78265 SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
78266 if( iReg && pParse->nTempReg<ArraySize(pParse->aTempReg) ){
78267 int i;
78268 struct yColCache *p;
78269 for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
78270 if( p->iReg==iReg ){
78271 p->tempReg = 1;
78272 return;
78275 pParse->aTempReg[pParse->nTempReg++] = iReg;
78280 ** Allocate or deallocate a block of nReg consecutive registers
78282 SQLITE_PRIVATE int sqlite3GetTempRange(Parse *pParse, int nReg){
78283 int i, n;
78284 i = pParse->iRangeReg;
78285 n = pParse->nRangeReg;
78286 if( nReg<=n ){
78287 assert( !usedAsColumnCache(pParse, i, i+n-1) );
78288 pParse->iRangeReg += nReg;
78289 pParse->nRangeReg -= nReg;
78290 }else{
78291 i = pParse->nMem+1;
78292 pParse->nMem += nReg;
78294 return i;
78296 SQLITE_PRIVATE void sqlite3ReleaseTempRange(Parse *pParse, int iReg, int nReg){
78297 sqlite3ExprCacheRemove(pParse, iReg, nReg);
78298 if( nReg>pParse->nRangeReg ){
78299 pParse->nRangeReg = nReg;
78300 pParse->iRangeReg = iReg;
78305 ** Mark all temporary registers as being unavailable for reuse.
78307 SQLITE_PRIVATE void sqlite3ClearTempRegCache(Parse *pParse){
78308 pParse->nTempReg = 0;
78309 pParse->nRangeReg = 0;
78312 /************** End of expr.c ************************************************/
78313 /************** Begin file alter.c *******************************************/
78315 ** 2005 February 15
78317 ** The author disclaims copyright to this source code. In place of
78318 ** a legal notice, here is a blessing:
78320 ** May you do good and not evil.
78321 ** May you find forgiveness for yourself and forgive others.
78322 ** May you share freely, never taking more than you give.
78324 *************************************************************************
78325 ** This file contains C code routines that used to generate VDBE code
78326 ** that implements the ALTER TABLE command.
78330 ** The code in this file only exists if we are not omitting the
78331 ** ALTER TABLE logic from the build.
78333 #ifndef SQLITE_OMIT_ALTERTABLE
78337 ** This function is used by SQL generated to implement the
78338 ** ALTER TABLE command. The first argument is the text of a CREATE TABLE or
78339 ** CREATE INDEX command. The second is a table name. The table name in
78340 ** the CREATE TABLE or CREATE INDEX statement is replaced with the third
78341 ** argument and the result returned. Examples:
78343 ** sqlite_rename_table('CREATE TABLE abc(a, b, c)', 'def')
78344 ** -> 'CREATE TABLE def(a, b, c)'
78346 ** sqlite_rename_table('CREATE INDEX i ON abc(a)', 'def')
78347 ** -> 'CREATE INDEX i ON def(a, b, c)'
78349 static void renameTableFunc(
78350 sqlite3_context *context,
78351 int NotUsed,
78352 sqlite3_value **argv
78354 unsigned char const *zSql = sqlite3_value_text(argv[0]);
78355 unsigned char const *zTableName = sqlite3_value_text(argv[1]);
78357 int token;
78358 Token tname;
78359 unsigned char const *zCsr = zSql;
78360 int len = 0;
78361 char *zRet;
78363 sqlite3 *db = sqlite3_context_db_handle(context);
78365 UNUSED_PARAMETER(NotUsed);
78367 /* The principle used to locate the table name in the CREATE TABLE
78368 ** statement is that the table name is the first non-space token that
78369 ** is immediately followed by a TK_LP or TK_USING token.
78371 if( zSql ){
78372 do {
78373 if( !*zCsr ){
78374 /* Ran out of input before finding an opening bracket. Return NULL. */
78375 return;
78378 /* Store the token that zCsr points to in tname. */
78379 tname.z = (char*)zCsr;
78380 tname.n = len;
78382 /* Advance zCsr to the next token. Store that token type in 'token',
78383 ** and its length in 'len' (to be used next iteration of this loop).
78385 do {
78386 zCsr += len;
78387 len = sqlite3GetToken(zCsr, &token);
78388 } while( token==TK_SPACE );
78389 assert( len>0 );
78390 } while( token!=TK_LP && token!=TK_USING );
78392 zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql,
78393 zTableName, tname.z+tname.n);
78394 sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
78399 ** This C function implements an SQL user function that is used by SQL code
78400 ** generated by the ALTER TABLE ... RENAME command to modify the definition
78401 ** of any foreign key constraints that use the table being renamed as the
78402 ** parent table. It is passed three arguments:
78404 ** 1) The complete text of the CREATE TABLE statement being modified,
78405 ** 2) The old name of the table being renamed, and
78406 ** 3) The new name of the table being renamed.
78408 ** It returns the new CREATE TABLE statement. For example:
78410 ** sqlite_rename_parent('CREATE TABLE t1(a REFERENCES t2)', 't2', 't3')
78411 ** -> 'CREATE TABLE t1(a REFERENCES t3)'
78413 #ifndef SQLITE_OMIT_FOREIGN_KEY
78414 static void renameParentFunc(
78415 sqlite3_context *context,
78416 int NotUsed,
78417 sqlite3_value **argv
78419 sqlite3 *db = sqlite3_context_db_handle(context);
78420 char *zOutput = 0;
78421 char *zResult;
78422 unsigned char const *zInput = sqlite3_value_text(argv[0]);
78423 unsigned char const *zOld = sqlite3_value_text(argv[1]);
78424 unsigned char const *zNew = sqlite3_value_text(argv[2]);
78426 unsigned const char *z; /* Pointer to token */
78427 int n; /* Length of token z */
78428 int token; /* Type of token */
78430 UNUSED_PARAMETER(NotUsed);
78431 for(z=zInput; *z; z=z+n){
78432 n = sqlite3GetToken(z, &token);
78433 if( token==TK_REFERENCES ){
78434 char *zParent;
78435 do {
78436 z += n;
78437 n = sqlite3GetToken(z, &token);
78438 }while( token==TK_SPACE );
78440 zParent = sqlite3DbStrNDup(db, (const char *)z, n);
78441 if( zParent==0 ) break;
78442 sqlite3Dequote(zParent);
78443 if( 0==sqlite3StrICmp((const char *)zOld, zParent) ){
78444 char *zOut = sqlite3MPrintf(db, "%s%.*s\"%w\"",
78445 (zOutput?zOutput:""), z-zInput, zInput, (const char *)zNew
78447 sqlite3DbFree(db, zOutput);
78448 zOutput = zOut;
78449 zInput = &z[n];
78451 sqlite3DbFree(db, zParent);
78455 zResult = sqlite3MPrintf(db, "%s%s", (zOutput?zOutput:""), zInput),
78456 sqlite3_result_text(context, zResult, -1, SQLITE_DYNAMIC);
78457 sqlite3DbFree(db, zOutput);
78459 #endif
78461 #ifndef SQLITE_OMIT_TRIGGER
78462 /* This function is used by SQL generated to implement the
78463 ** ALTER TABLE command. The first argument is the text of a CREATE TRIGGER
78464 ** statement. The second is a table name. The table name in the CREATE
78465 ** TRIGGER statement is replaced with the third argument and the result
78466 ** returned. This is analagous to renameTableFunc() above, except for CREATE
78467 ** TRIGGER, not CREATE INDEX and CREATE TABLE.
78469 static void renameTriggerFunc(
78470 sqlite3_context *context,
78471 int NotUsed,
78472 sqlite3_value **argv
78474 unsigned char const *zSql = sqlite3_value_text(argv[0]);
78475 unsigned char const *zTableName = sqlite3_value_text(argv[1]);
78477 int token;
78478 Token tname;
78479 int dist = 3;
78480 unsigned char const *zCsr = zSql;
78481 int len = 0;
78482 char *zRet;
78483 sqlite3 *db = sqlite3_context_db_handle(context);
78485 UNUSED_PARAMETER(NotUsed);
78487 /* The principle used to locate the table name in the CREATE TRIGGER
78488 ** statement is that the table name is the first token that is immediatedly
78489 ** preceded by either TK_ON or TK_DOT and immediatedly followed by one
78490 ** of TK_WHEN, TK_BEGIN or TK_FOR.
78492 if( zSql ){
78493 do {
78495 if( !*zCsr ){
78496 /* Ran out of input before finding the table name. Return NULL. */
78497 return;
78500 /* Store the token that zCsr points to in tname. */
78501 tname.z = (char*)zCsr;
78502 tname.n = len;
78504 /* Advance zCsr to the next token. Store that token type in 'token',
78505 ** and its length in 'len' (to be used next iteration of this loop).
78507 do {
78508 zCsr += len;
78509 len = sqlite3GetToken(zCsr, &token);
78510 }while( token==TK_SPACE );
78511 assert( len>0 );
78513 /* Variable 'dist' stores the number of tokens read since the most
78514 ** recent TK_DOT or TK_ON. This means that when a WHEN, FOR or BEGIN
78515 ** token is read and 'dist' equals 2, the condition stated above
78516 ** to be met.
78518 ** Note that ON cannot be a database, table or column name, so
78519 ** there is no need to worry about syntax like
78520 ** "CREATE TRIGGER ... ON ON.ON BEGIN ..." etc.
78522 dist++;
78523 if( token==TK_DOT || token==TK_ON ){
78524 dist = 0;
78526 } while( dist!=2 || (token!=TK_WHEN && token!=TK_FOR && token!=TK_BEGIN) );
78528 /* Variable tname now contains the token that is the old table-name
78529 ** in the CREATE TRIGGER statement.
78531 zRet = sqlite3MPrintf(db, "%.*s\"%w\"%s", ((u8*)tname.z) - zSql, zSql,
78532 zTableName, tname.z+tname.n);
78533 sqlite3_result_text(context, zRet, -1, SQLITE_DYNAMIC);
78536 #endif /* !SQLITE_OMIT_TRIGGER */
78539 ** Register built-in functions used to help implement ALTER TABLE
78541 SQLITE_PRIVATE void sqlite3AlterFunctions(void){
78542 static SQLITE_WSD FuncDef aAlterTableFuncs[] = {
78543 FUNCTION(sqlite_rename_table, 2, 0, 0, renameTableFunc),
78544 #ifndef SQLITE_OMIT_TRIGGER
78545 FUNCTION(sqlite_rename_trigger, 2, 0, 0, renameTriggerFunc),
78546 #endif
78547 #ifndef SQLITE_OMIT_FOREIGN_KEY
78548 FUNCTION(sqlite_rename_parent, 3, 0, 0, renameParentFunc),
78549 #endif
78551 int i;
78552 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
78553 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aAlterTableFuncs);
78555 for(i=0; i<ArraySize(aAlterTableFuncs); i++){
78556 sqlite3FuncDefInsert(pHash, &aFunc[i]);
78561 ** This function is used to create the text of expressions of the form:
78563 ** name=<constant1> OR name=<constant2> OR ...
78565 ** If argument zWhere is NULL, then a pointer string containing the text
78566 ** "name=<constant>" is returned, where <constant> is the quoted version
78567 ** of the string passed as argument zConstant. The returned buffer is
78568 ** allocated using sqlite3DbMalloc(). It is the responsibility of the
78569 ** caller to ensure that it is eventually freed.
78571 ** If argument zWhere is not NULL, then the string returned is
78572 ** "<where> OR name=<constant>", where <where> is the contents of zWhere.
78573 ** In this case zWhere is passed to sqlite3DbFree() before returning.
78576 static char *whereOrName(sqlite3 *db, char *zWhere, char *zConstant){
78577 char *zNew;
78578 if( !zWhere ){
78579 zNew = sqlite3MPrintf(db, "name=%Q", zConstant);
78580 }else{
78581 zNew = sqlite3MPrintf(db, "%s OR name=%Q", zWhere, zConstant);
78582 sqlite3DbFree(db, zWhere);
78584 return zNew;
78587 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
78589 ** Generate the text of a WHERE expression which can be used to select all
78590 ** tables that have foreign key constraints that refer to table pTab (i.e.
78591 ** constraints for which pTab is the parent table) from the sqlite_master
78592 ** table.
78594 static char *whereForeignKeys(Parse *pParse, Table *pTab){
78595 FKey *p;
78596 char *zWhere = 0;
78597 for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
78598 zWhere = whereOrName(pParse->db, zWhere, p->pFrom->zName);
78600 return zWhere;
78602 #endif
78605 ** Generate the text of a WHERE expression which can be used to select all
78606 ** temporary triggers on table pTab from the sqlite_temp_master table. If
78607 ** table pTab has no temporary triggers, or is itself stored in the
78608 ** temporary database, NULL is returned.
78610 static char *whereTempTriggers(Parse *pParse, Table *pTab){
78611 Trigger *pTrig;
78612 char *zWhere = 0;
78613 const Schema *pTempSchema = pParse->db->aDb[1].pSchema; /* Temp db schema */
78615 /* If the table is not located in the temp-db (in which case NULL is
78616 ** returned, loop through the tables list of triggers. For each trigger
78617 ** that is not part of the temp-db schema, add a clause to the WHERE
78618 ** expression being built up in zWhere.
78620 if( pTab->pSchema!=pTempSchema ){
78621 sqlite3 *db = pParse->db;
78622 for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
78623 if( pTrig->pSchema==pTempSchema ){
78624 zWhere = whereOrName(db, zWhere, pTrig->zName);
78628 if( zWhere ){
78629 char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere);
78630 sqlite3DbFree(pParse->db, zWhere);
78631 zWhere = zNew;
78633 return zWhere;
78637 ** Generate code to drop and reload the internal representation of table
78638 ** pTab from the database, including triggers and temporary triggers.
78639 ** Argument zName is the name of the table in the database schema at
78640 ** the time the generated code is executed. This can be different from
78641 ** pTab->zName if this function is being called to code part of an
78642 ** "ALTER TABLE RENAME TO" statement.
78644 static void reloadTableSchema(Parse *pParse, Table *pTab, const char *zName){
78645 Vdbe *v;
78646 char *zWhere;
78647 int iDb; /* Index of database containing pTab */
78648 #ifndef SQLITE_OMIT_TRIGGER
78649 Trigger *pTrig;
78650 #endif
78652 v = sqlite3GetVdbe(pParse);
78653 if( NEVER(v==0) ) return;
78654 assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
78655 iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
78656 assert( iDb>=0 );
78658 #ifndef SQLITE_OMIT_TRIGGER
78659 /* Drop any table triggers from the internal schema. */
78660 for(pTrig=sqlite3TriggerList(pParse, pTab); pTrig; pTrig=pTrig->pNext){
78661 int iTrigDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
78662 assert( iTrigDb==iDb || iTrigDb==1 );
78663 sqlite3VdbeAddOp4(v, OP_DropTrigger, iTrigDb, 0, 0, pTrig->zName, 0);
78665 #endif
78667 /* Drop the table and index from the internal schema. */
78668 sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
78670 /* Reload the table, index and permanent trigger schemas. */
78671 zWhere = sqlite3MPrintf(pParse->db, "tbl_name=%Q", zName);
78672 if( !zWhere ) return;
78673 sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
78675 #ifndef SQLITE_OMIT_TRIGGER
78676 /* Now, if the table is not stored in the temp database, reload any temp
78677 ** triggers. Don't use IN(...) in case SQLITE_OMIT_SUBQUERY is defined.
78679 if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
78680 sqlite3VdbeAddParseSchemaOp(v, 1, zWhere);
78682 #endif
78686 ** Parameter zName is the name of a table that is about to be altered
78687 ** (either with ALTER TABLE ... RENAME TO or ALTER TABLE ... ADD COLUMN).
78688 ** If the table is a system table, this function leaves an error message
78689 ** in pParse->zErr (system tables may not be altered) and returns non-zero.
78691 ** Or, if zName is not a system table, zero is returned.
78693 static int isSystemTable(Parse *pParse, const char *zName){
78694 if( sqlite3Strlen30(zName)>6 && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
78695 sqlite3ErrorMsg(pParse, "table %s may not be altered", zName);
78696 return 1;
78698 return 0;
78702 ** Generate code to implement the "ALTER TABLE xxx RENAME TO yyy"
78703 ** command.
78705 SQLITE_PRIVATE void sqlite3AlterRenameTable(
78706 Parse *pParse, /* Parser context. */
78707 SrcList *pSrc, /* The table to rename. */
78708 Token *pName /* The new table name. */
78710 int iDb; /* Database that contains the table */
78711 char *zDb; /* Name of database iDb */
78712 Table *pTab; /* Table being renamed */
78713 char *zName = 0; /* NULL-terminated version of pName */
78714 sqlite3 *db = pParse->db; /* Database connection */
78715 int nTabName; /* Number of UTF-8 characters in zTabName */
78716 const char *zTabName; /* Original name of the table */
78717 Vdbe *v;
78718 #ifndef SQLITE_OMIT_TRIGGER
78719 char *zWhere = 0; /* Where clause to locate temp triggers */
78720 #endif
78721 VTable *pVTab = 0; /* Non-zero if this is a v-tab with an xRename() */
78722 int savedDbFlags; /* Saved value of db->flags */
78724 savedDbFlags = db->flags;
78725 if( NEVER(db->mallocFailed) ) goto exit_rename_table;
78726 assert( pSrc->nSrc==1 );
78727 assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
78729 pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
78730 if( !pTab ) goto exit_rename_table;
78731 iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
78732 zDb = db->aDb[iDb].zName;
78733 db->flags |= SQLITE_PreferBuiltin;
78735 /* Get a NULL terminated version of the new table name. */
78736 zName = sqlite3NameFromToken(db, pName);
78737 if( !zName ) goto exit_rename_table;
78739 /* Check that a table or index named 'zName' does not already exist
78740 ** in database iDb. If so, this is an error.
78742 if( sqlite3FindTable(db, zName, zDb) || sqlite3FindIndex(db, zName, zDb) ){
78743 sqlite3ErrorMsg(pParse,
78744 "there is already another table or index with this name: %s", zName);
78745 goto exit_rename_table;
78748 /* Make sure it is not a system table being altered, or a reserved name
78749 ** that the table is being renamed to.
78751 if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
78752 goto exit_rename_table;
78754 if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){ goto
78755 exit_rename_table;
78758 #ifndef SQLITE_OMIT_VIEW
78759 if( pTab->pSelect ){
78760 sqlite3ErrorMsg(pParse, "view %s may not be altered", pTab->zName);
78761 goto exit_rename_table;
78763 #endif
78765 #ifndef SQLITE_OMIT_AUTHORIZATION
78766 /* Invoke the authorization callback. */
78767 if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
78768 goto exit_rename_table;
78770 #endif
78772 #ifndef SQLITE_OMIT_VIRTUALTABLE
78773 if( sqlite3ViewGetColumnNames(pParse, pTab) ){
78774 goto exit_rename_table;
78776 if( IsVirtual(pTab) ){
78777 pVTab = sqlite3GetVTable(db, pTab);
78778 if( pVTab->pVtab->pModule->xRename==0 ){
78779 pVTab = 0;
78782 #endif
78784 /* Begin a transaction and code the VerifyCookie for database iDb.
78785 ** Then modify the schema cookie (since the ALTER TABLE modifies the
78786 ** schema). Open a statement transaction if the table is a virtual
78787 ** table.
78789 v = sqlite3GetVdbe(pParse);
78790 if( v==0 ){
78791 goto exit_rename_table;
78793 sqlite3BeginWriteOperation(pParse, pVTab!=0, iDb);
78794 sqlite3ChangeCookie(pParse, iDb);
78796 /* If this is a virtual table, invoke the xRename() function if
78797 ** one is defined. The xRename() callback will modify the names
78798 ** of any resources used by the v-table implementation (including other
78799 ** SQLite tables) that are identified by the name of the virtual table.
78801 #ifndef SQLITE_OMIT_VIRTUALTABLE
78802 if( pVTab ){
78803 int i = ++pParse->nMem;
78804 sqlite3VdbeAddOp4(v, OP_String8, 0, i, 0, zName, 0);
78805 sqlite3VdbeAddOp4(v, OP_VRename, i, 0, 0,(const char*)pVTab, P4_VTAB);
78806 sqlite3MayAbort(pParse);
78808 #endif
78810 /* figure out how many UTF-8 characters are in zName */
78811 zTabName = pTab->zName;
78812 nTabName = sqlite3Utf8CharLen(zTabName, -1);
78814 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
78815 if( db->flags&SQLITE_ForeignKeys ){
78816 /* If foreign-key support is enabled, rewrite the CREATE TABLE
78817 ** statements corresponding to all child tables of foreign key constraints
78818 ** for which the renamed table is the parent table. */
78819 if( (zWhere=whereForeignKeys(pParse, pTab))!=0 ){
78820 sqlite3NestedParse(pParse,
78821 "UPDATE \"%w\".%s SET "
78822 "sql = sqlite_rename_parent(sql, %Q, %Q) "
78823 "WHERE %s;", zDb, SCHEMA_TABLE(iDb), zTabName, zName, zWhere);
78824 sqlite3DbFree(db, zWhere);
78827 #endif
78829 /* Modify the sqlite_master table to use the new table name. */
78830 sqlite3NestedParse(pParse,
78831 "UPDATE %Q.%s SET "
78832 #ifdef SQLITE_OMIT_TRIGGER
78833 "sql = sqlite_rename_table(sql, %Q), "
78834 #else
78835 "sql = CASE "
78836 "WHEN type = 'trigger' THEN sqlite_rename_trigger(sql, %Q)"
78837 "ELSE sqlite_rename_table(sql, %Q) END, "
78838 #endif
78839 "tbl_name = %Q, "
78840 "name = CASE "
78841 "WHEN type='table' THEN %Q "
78842 "WHEN name LIKE 'sqlite_autoindex%%' AND type='index' THEN "
78843 "'sqlite_autoindex_' || %Q || substr(name,%d+18) "
78844 "ELSE name END "
78845 "WHERE tbl_name=%Q AND "
78846 "(type='table' OR type='index' OR type='trigger');",
78847 zDb, SCHEMA_TABLE(iDb), zName, zName, zName,
78848 #ifndef SQLITE_OMIT_TRIGGER
78849 zName,
78850 #endif
78851 zName, nTabName, zTabName
78854 #ifndef SQLITE_OMIT_AUTOINCREMENT
78855 /* If the sqlite_sequence table exists in this database, then update
78856 ** it with the new table name.
78858 if( sqlite3FindTable(db, "sqlite_sequence", zDb) ){
78859 sqlite3NestedParse(pParse,
78860 "UPDATE \"%w\".sqlite_sequence set name = %Q WHERE name = %Q",
78861 zDb, zName, pTab->zName);
78863 #endif
78865 #ifndef SQLITE_OMIT_TRIGGER
78866 /* If there are TEMP triggers on this table, modify the sqlite_temp_master
78867 ** table. Don't do this if the table being ALTERed is itself located in
78868 ** the temp database.
78870 if( (zWhere=whereTempTriggers(pParse, pTab))!=0 ){
78871 sqlite3NestedParse(pParse,
78872 "UPDATE sqlite_temp_master SET "
78873 "sql = sqlite_rename_trigger(sql, %Q), "
78874 "tbl_name = %Q "
78875 "WHERE %s;", zName, zName, zWhere);
78876 sqlite3DbFree(db, zWhere);
78878 #endif
78880 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
78881 if( db->flags&SQLITE_ForeignKeys ){
78882 FKey *p;
78883 for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
78884 Table *pFrom = p->pFrom;
78885 if( pFrom!=pTab ){
78886 reloadTableSchema(pParse, p->pFrom, pFrom->zName);
78890 #endif
78892 /* Drop and reload the internal table schema. */
78893 reloadTableSchema(pParse, pTab, zName);
78895 exit_rename_table:
78896 sqlite3SrcListDelete(db, pSrc);
78897 sqlite3DbFree(db, zName);
78898 db->flags = savedDbFlags;
78903 ** Generate code to make sure the file format number is at least minFormat.
78904 ** The generated code will increase the file format number if necessary.
78906 SQLITE_PRIVATE void sqlite3MinimumFileFormat(Parse *pParse, int iDb, int minFormat){
78907 Vdbe *v;
78908 v = sqlite3GetVdbe(pParse);
78909 /* The VDBE should have been allocated before this routine is called.
78910 ** If that allocation failed, we would have quit before reaching this
78911 ** point */
78912 if( ALWAYS(v) ){
78913 int r1 = sqlite3GetTempReg(pParse);
78914 int r2 = sqlite3GetTempReg(pParse);
78915 int j1;
78916 sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, r1, BTREE_FILE_FORMAT);
78917 sqlite3VdbeUsesBtree(v, iDb);
78918 sqlite3VdbeAddOp2(v, OP_Integer, minFormat, r2);
78919 j1 = sqlite3VdbeAddOp3(v, OP_Ge, r2, 0, r1);
78920 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, r2);
78921 sqlite3VdbeJumpHere(v, j1);
78922 sqlite3ReleaseTempReg(pParse, r1);
78923 sqlite3ReleaseTempReg(pParse, r2);
78928 ** This function is called after an "ALTER TABLE ... ADD" statement
78929 ** has been parsed. Argument pColDef contains the text of the new
78930 ** column definition.
78932 ** The Table structure pParse->pNewTable was extended to include
78933 ** the new column during parsing.
78935 SQLITE_PRIVATE void sqlite3AlterFinishAddColumn(Parse *pParse, Token *pColDef){
78936 Table *pNew; /* Copy of pParse->pNewTable */
78937 Table *pTab; /* Table being altered */
78938 int iDb; /* Database number */
78939 const char *zDb; /* Database name */
78940 const char *zTab; /* Table name */
78941 char *zCol; /* Null-terminated column definition */
78942 Column *pCol; /* The new column */
78943 Expr *pDflt; /* Default value for the new column */
78944 sqlite3 *db; /* The database connection; */
78946 db = pParse->db;
78947 if( pParse->nErr || db->mallocFailed ) return;
78948 pNew = pParse->pNewTable;
78949 assert( pNew );
78951 assert( sqlite3BtreeHoldsAllMutexes(db) );
78952 iDb = sqlite3SchemaToIndex(db, pNew->pSchema);
78953 zDb = db->aDb[iDb].zName;
78954 zTab = &pNew->zName[16]; /* Skip the "sqlite_altertab_" prefix on the name */
78955 pCol = &pNew->aCol[pNew->nCol-1];
78956 pDflt = pCol->pDflt;
78957 pTab = sqlite3FindTable(db, zTab, zDb);
78958 assert( pTab );
78960 #ifndef SQLITE_OMIT_AUTHORIZATION
78961 /* Invoke the authorization callback. */
78962 if( sqlite3AuthCheck(pParse, SQLITE_ALTER_TABLE, zDb, pTab->zName, 0) ){
78963 return;
78965 #endif
78967 /* If the default value for the new column was specified with a
78968 ** literal NULL, then set pDflt to 0. This simplifies checking
78969 ** for an SQL NULL default below.
78971 if( pDflt && pDflt->op==TK_NULL ){
78972 pDflt = 0;
78975 /* Check that the new column is not specified as PRIMARY KEY or UNIQUE.
78976 ** If there is a NOT NULL constraint, then the default value for the
78977 ** column must not be NULL.
78979 if( pCol->isPrimKey ){
78980 sqlite3ErrorMsg(pParse, "Cannot add a PRIMARY KEY column");
78981 return;
78983 if( pNew->pIndex ){
78984 sqlite3ErrorMsg(pParse, "Cannot add a UNIQUE column");
78985 return;
78987 if( (db->flags&SQLITE_ForeignKeys) && pNew->pFKey && pDflt ){
78988 sqlite3ErrorMsg(pParse,
78989 "Cannot add a REFERENCES column with non-NULL default value");
78990 return;
78992 if( pCol->notNull && !pDflt ){
78993 sqlite3ErrorMsg(pParse,
78994 "Cannot add a NOT NULL column with default value NULL");
78995 return;
78998 /* Ensure the default expression is something that sqlite3ValueFromExpr()
78999 ** can handle (i.e. not CURRENT_TIME etc.)
79001 if( pDflt ){
79002 sqlite3_value *pVal;
79003 if( sqlite3ValueFromExpr(db, pDflt, SQLITE_UTF8, SQLITE_AFF_NONE, &pVal) ){
79004 db->mallocFailed = 1;
79005 return;
79007 if( !pVal ){
79008 sqlite3ErrorMsg(pParse, "Cannot add a column with non-constant default");
79009 return;
79011 sqlite3ValueFree(pVal);
79014 /* Modify the CREATE TABLE statement. */
79015 zCol = sqlite3DbStrNDup(db, (char*)pColDef->z, pColDef->n);
79016 if( zCol ){
79017 char *zEnd = &zCol[pColDef->n-1];
79018 int savedDbFlags = db->flags;
79019 while( zEnd>zCol && (*zEnd==';' || sqlite3Isspace(*zEnd)) ){
79020 *zEnd-- = '\0';
79022 db->flags |= SQLITE_PreferBuiltin;
79023 sqlite3NestedParse(pParse,
79024 "UPDATE \"%w\".%s SET "
79025 "sql = substr(sql,1,%d) || ', ' || %Q || substr(sql,%d) "
79026 "WHERE type = 'table' AND name = %Q",
79027 zDb, SCHEMA_TABLE(iDb), pNew->addColOffset, zCol, pNew->addColOffset+1,
79028 zTab
79030 sqlite3DbFree(db, zCol);
79031 db->flags = savedDbFlags;
79034 /* If the default value of the new column is NULL, then set the file
79035 ** format to 2. If the default value of the new column is not NULL,
79036 ** the file format becomes 3.
79038 sqlite3MinimumFileFormat(pParse, iDb, pDflt ? 3 : 2);
79040 /* Reload the schema of the modified table. */
79041 reloadTableSchema(pParse, pTab, pTab->zName);
79045 ** This function is called by the parser after the table-name in
79046 ** an "ALTER TABLE <table-name> ADD" statement is parsed. Argument
79047 ** pSrc is the full-name of the table being altered.
79049 ** This routine makes a (partial) copy of the Table structure
79050 ** for the table being altered and sets Parse.pNewTable to point
79051 ** to it. Routines called by the parser as the column definition
79052 ** is parsed (i.e. sqlite3AddColumn()) add the new Column data to
79053 ** the copy. The copy of the Table structure is deleted by tokenize.c
79054 ** after parsing is finished.
79056 ** Routine sqlite3AlterFinishAddColumn() will be called to complete
79057 ** coding the "ALTER TABLE ... ADD" statement.
79059 SQLITE_PRIVATE void sqlite3AlterBeginAddColumn(Parse *pParse, SrcList *pSrc){
79060 Table *pNew;
79061 Table *pTab;
79062 Vdbe *v;
79063 int iDb;
79064 int i;
79065 int nAlloc;
79066 sqlite3 *db = pParse->db;
79068 /* Look up the table being altered. */
79069 assert( pParse->pNewTable==0 );
79070 assert( sqlite3BtreeHoldsAllMutexes(db) );
79071 if( db->mallocFailed ) goto exit_begin_add_column;
79072 pTab = sqlite3LocateTable(pParse, 0, pSrc->a[0].zName, pSrc->a[0].zDatabase);
79073 if( !pTab ) goto exit_begin_add_column;
79075 #ifndef SQLITE_OMIT_VIRTUALTABLE
79076 if( IsVirtual(pTab) ){
79077 sqlite3ErrorMsg(pParse, "virtual tables may not be altered");
79078 goto exit_begin_add_column;
79080 #endif
79082 /* Make sure this is not an attempt to ALTER a view. */
79083 if( pTab->pSelect ){
79084 sqlite3ErrorMsg(pParse, "Cannot add a column to a view");
79085 goto exit_begin_add_column;
79087 if( SQLITE_OK!=isSystemTable(pParse, pTab->zName) ){
79088 goto exit_begin_add_column;
79091 assert( pTab->addColOffset>0 );
79092 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
79094 /* Put a copy of the Table struct in Parse.pNewTable for the
79095 ** sqlite3AddColumn() function and friends to modify. But modify
79096 ** the name by adding an "sqlite_altertab_" prefix. By adding this
79097 ** prefix, we insure that the name will not collide with an existing
79098 ** table because user table are not allowed to have the "sqlite_"
79099 ** prefix on their name.
79101 pNew = (Table*)sqlite3DbMallocZero(db, sizeof(Table));
79102 if( !pNew ) goto exit_begin_add_column;
79103 pParse->pNewTable = pNew;
79104 pNew->nRef = 1;
79105 pNew->nCol = pTab->nCol;
79106 assert( pNew->nCol>0 );
79107 nAlloc = (((pNew->nCol-1)/8)*8)+8;
79108 assert( nAlloc>=pNew->nCol && nAlloc%8==0 && nAlloc-pNew->nCol<8 );
79109 pNew->aCol = (Column*)sqlite3DbMallocZero(db, sizeof(Column)*nAlloc);
79110 pNew->zName = sqlite3MPrintf(db, "sqlite_altertab_%s", pTab->zName);
79111 if( !pNew->aCol || !pNew->zName ){
79112 db->mallocFailed = 1;
79113 goto exit_begin_add_column;
79115 memcpy(pNew->aCol, pTab->aCol, sizeof(Column)*pNew->nCol);
79116 for(i=0; i<pNew->nCol; i++){
79117 Column *pCol = &pNew->aCol[i];
79118 pCol->zName = sqlite3DbStrDup(db, pCol->zName);
79119 pCol->zColl = 0;
79120 pCol->zType = 0;
79121 pCol->pDflt = 0;
79122 pCol->zDflt = 0;
79124 pNew->pSchema = db->aDb[iDb].pSchema;
79125 pNew->addColOffset = pTab->addColOffset;
79126 pNew->nRef = 1;
79128 /* Begin a transaction and increment the schema cookie. */
79129 sqlite3BeginWriteOperation(pParse, 0, iDb);
79130 v = sqlite3GetVdbe(pParse);
79131 if( !v ) goto exit_begin_add_column;
79132 sqlite3ChangeCookie(pParse, iDb);
79134 exit_begin_add_column:
79135 sqlite3SrcListDelete(db, pSrc);
79136 return;
79138 #endif /* SQLITE_ALTER_TABLE */
79140 /************** End of alter.c ***********************************************/
79141 /************** Begin file analyze.c *****************************************/
79143 ** 2005 July 8
79145 ** The author disclaims copyright to this source code. In place of
79146 ** a legal notice, here is a blessing:
79148 ** May you do good and not evil.
79149 ** May you find forgiveness for yourself and forgive others.
79150 ** May you share freely, never taking more than you give.
79152 *************************************************************************
79153 ** This file contains code associated with the ANALYZE command.
79155 ** The ANALYZE command gather statistics about the content of tables
79156 ** and indices. These statistics are made available to the query planner
79157 ** to help it make better decisions about how to perform queries.
79159 ** The following system tables are or have been supported:
79161 ** CREATE TABLE sqlite_stat1(tbl, idx, stat);
79162 ** CREATE TABLE sqlite_stat2(tbl, idx, sampleno, sample);
79163 ** CREATE TABLE sqlite_stat3(tbl, idx, nEq, nLt, nDLt, sample);
79165 ** Additional tables might be added in future releases of SQLite.
79166 ** The sqlite_stat2 table is not created or used unless the SQLite version
79167 ** is between 3.6.18 and 3.7.8, inclusive, and unless SQLite is compiled
79168 ** with SQLITE_ENABLE_STAT2. The sqlite_stat2 table is deprecated.
79169 ** The sqlite_stat2 table is superceded by sqlite_stat3, which is only
79170 ** created and used by SQLite versions 3.7.9 and later and with
79171 ** SQLITE_ENABLE_STAT3 defined. The fucntionality of sqlite_stat3
79172 ** is a superset of sqlite_stat2.
79174 ** Format of sqlite_stat1:
79176 ** There is normally one row per index, with the index identified by the
79177 ** name in the idx column. The tbl column is the name of the table to
79178 ** which the index belongs. In each such row, the stat column will be
79179 ** a string consisting of a list of integers. The first integer in this
79180 ** list is the number of rows in the index and in the table. The second
79181 ** integer is the average number of rows in the index that have the same
79182 ** value in the first column of the index. The third integer is the average
79183 ** number of rows in the index that have the same value for the first two
79184 ** columns. The N-th integer (for N>1) is the average number of rows in
79185 ** the index which have the same value for the first N-1 columns. For
79186 ** a K-column index, there will be K+1 integers in the stat column. If
79187 ** the index is unique, then the last integer will be 1.
79189 ** The list of integers in the stat column can optionally be followed
79190 ** by the keyword "unordered". The "unordered" keyword, if it is present,
79191 ** must be separated from the last integer by a single space. If the
79192 ** "unordered" keyword is present, then the query planner assumes that
79193 ** the index is unordered and will not use the index for a range query.
79195 ** If the sqlite_stat1.idx column is NULL, then the sqlite_stat1.stat
79196 ** column contains a single integer which is the (estimated) number of
79197 ** rows in the table identified by sqlite_stat1.tbl.
79199 ** Format of sqlite_stat2:
79201 ** The sqlite_stat2 is only created and is only used if SQLite is compiled
79202 ** with SQLITE_ENABLE_STAT2 and if the SQLite version number is between
79203 ** 3.6.18 and 3.7.8. The "stat2" table contains additional information
79204 ** about the distribution of keys within an index. The index is identified by
79205 ** the "idx" column and the "tbl" column is the name of the table to which
79206 ** the index belongs. There are usually 10 rows in the sqlite_stat2
79207 ** table for each index.
79209 ** The sqlite_stat2 entries for an index that have sampleno between 0 and 9
79210 ** inclusive are samples of the left-most key value in the index taken at
79211 ** evenly spaced points along the index. Let the number of samples be S
79212 ** (10 in the standard build) and let C be the number of rows in the index.
79213 ** Then the sampled rows are given by:
79215 ** rownumber = (i*C*2 + C)/(S*2)
79217 ** For i between 0 and S-1. Conceptually, the index space is divided into
79218 ** S uniform buckets and the samples are the middle row from each bucket.
79220 ** The format for sqlite_stat2 is recorded here for legacy reference. This
79221 ** version of SQLite does not support sqlite_stat2. It neither reads nor
79222 ** writes the sqlite_stat2 table. This version of SQLite only supports
79223 ** sqlite_stat3.
79225 ** Format for sqlite_stat3:
79227 ** The sqlite_stat3 is an enhancement to sqlite_stat2. A new name is
79228 ** used to avoid compatibility problems.
79230 ** The format of the sqlite_stat3 table is similar to the format of
79231 ** the sqlite_stat2 table. There are multiple entries for each index.
79232 ** The idx column names the index and the tbl column is the table of the
79233 ** index. If the idx and tbl columns are the same, then the sample is
79234 ** of the INTEGER PRIMARY KEY. The sample column is a value taken from
79235 ** the left-most column of the index. The nEq column is the approximate
79236 ** number of entires in the index whose left-most column exactly matches
79237 ** the sample. nLt is the approximate number of entires whose left-most
79238 ** column is less than the sample. The nDLt column is the approximate
79239 ** number of distinct left-most entries in the index that are less than
79240 ** the sample.
79242 ** Future versions of SQLite might change to store a string containing
79243 ** multiple integers values in the nDLt column of sqlite_stat3. The first
79244 ** integer will be the number of prior index entires that are distinct in
79245 ** the left-most column. The second integer will be the number of prior index
79246 ** entries that are distinct in the first two columns. The third integer
79247 ** will be the number of prior index entries that are distinct in the first
79248 ** three columns. And so forth. With that extension, the nDLt field is
79249 ** similar in function to the sqlite_stat1.stat field.
79251 ** There can be an arbitrary number of sqlite_stat3 entries per index.
79252 ** The ANALYZE command will typically generate sqlite_stat3 tables
79253 ** that contain between 10 and 40 samples which are distributed across
79254 ** the key space, though not uniformly, and which include samples with
79255 ** largest possible nEq values.
79257 #ifndef SQLITE_OMIT_ANALYZE
79260 ** This routine generates code that opens the sqlite_stat1 table for
79261 ** writing with cursor iStatCur. If the library was built with the
79262 ** SQLITE_ENABLE_STAT3 macro defined, then the sqlite_stat3 table is
79263 ** opened for writing using cursor (iStatCur+1)
79265 ** If the sqlite_stat1 tables does not previously exist, it is created.
79266 ** Similarly, if the sqlite_stat3 table does not exist and the library
79267 ** is compiled with SQLITE_ENABLE_STAT3 defined, it is created.
79269 ** Argument zWhere may be a pointer to a buffer containing a table name,
79270 ** or it may be a NULL pointer. If it is not NULL, then all entries in
79271 ** the sqlite_stat1 and (if applicable) sqlite_stat3 tables associated
79272 ** with the named table are deleted. If zWhere==0, then code is generated
79273 ** to delete all stat table entries.
79275 static void openStatTable(
79276 Parse *pParse, /* Parsing context */
79277 int iDb, /* The database we are looking in */
79278 int iStatCur, /* Open the sqlite_stat1 table on this cursor */
79279 const char *zWhere, /* Delete entries for this table or index */
79280 const char *zWhereType /* Either "tbl" or "idx" */
79282 static const struct {
79283 const char *zName;
79284 const char *zCols;
79285 } aTable[] = {
79286 { "sqlite_stat1", "tbl,idx,stat" },
79287 #ifdef SQLITE_ENABLE_STAT3
79288 { "sqlite_stat3", "tbl,idx,neq,nlt,ndlt,sample" },
79289 #endif
79292 int aRoot[] = {0, 0};
79293 u8 aCreateTbl[] = {0, 0};
79295 int i;
79296 sqlite3 *db = pParse->db;
79297 Db *pDb;
79298 Vdbe *v = sqlite3GetVdbe(pParse);
79299 if( v==0 ) return;
79300 assert( sqlite3BtreeHoldsAllMutexes(db) );
79301 assert( sqlite3VdbeDb(v)==db );
79302 pDb = &db->aDb[iDb];
79304 /* Create new statistic tables if they do not exist, or clear them
79305 ** if they do already exist.
79307 for(i=0; i<ArraySize(aTable); i++){
79308 const char *zTab = aTable[i].zName;
79309 Table *pStat;
79310 if( (pStat = sqlite3FindTable(db, zTab, pDb->zName))==0 ){
79311 /* The sqlite_stat[12] table does not exist. Create it. Note that a
79312 ** side-effect of the CREATE TABLE statement is to leave the rootpage
79313 ** of the new table in register pParse->regRoot. This is important
79314 ** because the OpenWrite opcode below will be needing it. */
79315 sqlite3NestedParse(pParse,
79316 "CREATE TABLE %Q.%s(%s)", pDb->zName, zTab, aTable[i].zCols
79318 aRoot[i] = pParse->regRoot;
79319 aCreateTbl[i] = 1;
79320 }else{
79321 /* The table already exists. If zWhere is not NULL, delete all entries
79322 ** associated with the table zWhere. If zWhere is NULL, delete the
79323 ** entire contents of the table. */
79324 aRoot[i] = pStat->tnum;
79325 sqlite3TableLock(pParse, iDb, aRoot[i], 1, zTab);
79326 if( zWhere ){
79327 sqlite3NestedParse(pParse,
79328 "DELETE FROM %Q.%s WHERE %s=%Q", pDb->zName, zTab, zWhereType, zWhere
79330 }else{
79331 /* The sqlite_stat[12] table already exists. Delete all rows. */
79332 sqlite3VdbeAddOp2(v, OP_Clear, aRoot[i], iDb);
79337 /* Open the sqlite_stat[13] tables for writing. */
79338 for(i=0; i<ArraySize(aTable); i++){
79339 sqlite3VdbeAddOp3(v, OP_OpenWrite, iStatCur+i, aRoot[i], iDb);
79340 sqlite3VdbeChangeP4(v, -1, (char *)3, P4_INT32);
79341 sqlite3VdbeChangeP5(v, aCreateTbl[i]);
79346 ** Recommended number of samples for sqlite_stat3
79348 #ifndef SQLITE_STAT3_SAMPLES
79349 # define SQLITE_STAT3_SAMPLES 24
79350 #endif
79353 ** Three SQL functions - stat3_init(), stat3_push(), and stat3_pop() -
79354 ** share an instance of the following structure to hold their state
79355 ** information.
79357 typedef struct Stat3Accum Stat3Accum;
79358 struct Stat3Accum {
79359 tRowcnt nRow; /* Number of rows in the entire table */
79360 tRowcnt nPSample; /* How often to do a periodic sample */
79361 int iMin; /* Index of entry with minimum nEq and hash */
79362 int mxSample; /* Maximum number of samples to accumulate */
79363 int nSample; /* Current number of samples */
79364 u32 iPrn; /* Pseudo-random number used for sampling */
79365 struct Stat3Sample {
79366 i64 iRowid; /* Rowid in main table of the key */
79367 tRowcnt nEq; /* sqlite_stat3.nEq */
79368 tRowcnt nLt; /* sqlite_stat3.nLt */
79369 tRowcnt nDLt; /* sqlite_stat3.nDLt */
79370 u8 isPSample; /* True if a periodic sample */
79371 u32 iHash; /* Tiebreaker hash */
79372 } *a; /* An array of samples */
79375 #ifdef SQLITE_ENABLE_STAT3
79377 ** Implementation of the stat3_init(C,S) SQL function. The two parameters
79378 ** are the number of rows in the table or index (C) and the number of samples
79379 ** to accumulate (S).
79381 ** This routine allocates the Stat3Accum object.
79383 ** The return value is the Stat3Accum object (P).
79385 static void stat3Init(
79386 sqlite3_context *context,
79387 int argc,
79388 sqlite3_value **argv
79390 Stat3Accum *p;
79391 tRowcnt nRow;
79392 int mxSample;
79393 int n;
79395 UNUSED_PARAMETER(argc);
79396 nRow = (tRowcnt)sqlite3_value_int64(argv[0]);
79397 mxSample = sqlite3_value_int(argv[1]);
79398 n = sizeof(*p) + sizeof(p->a[0])*mxSample;
79399 p = sqlite3_malloc( n );
79400 if( p==0 ){
79401 sqlite3_result_error_nomem(context);
79402 return;
79404 memset(p, 0, n);
79405 p->a = (struct Stat3Sample*)&p[1];
79406 p->nRow = nRow;
79407 p->mxSample = mxSample;
79408 p->nPSample = p->nRow/(mxSample/3+1) + 1;
79409 sqlite3_randomness(sizeof(p->iPrn), &p->iPrn);
79410 sqlite3_result_blob(context, p, sizeof(p), sqlite3_free);
79412 static const FuncDef stat3InitFuncdef = {
79413 2, /* nArg */
79414 SQLITE_UTF8, /* iPrefEnc */
79415 0, /* flags */
79416 0, /* pUserData */
79417 0, /* pNext */
79418 stat3Init, /* xFunc */
79419 0, /* xStep */
79420 0, /* xFinalize */
79421 "stat3_init", /* zName */
79422 0, /* pHash */
79423 0 /* pDestructor */
79428 ** Implementation of the stat3_push(nEq,nLt,nDLt,rowid,P) SQL function. The
79429 ** arguments describe a single key instance. This routine makes the
79430 ** decision about whether or not to retain this key for the sqlite_stat3
79431 ** table.
79433 ** The return value is NULL.
79435 static void stat3Push(
79436 sqlite3_context *context,
79437 int argc,
79438 sqlite3_value **argv
79440 Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[4]);
79441 tRowcnt nEq = sqlite3_value_int64(argv[0]);
79442 tRowcnt nLt = sqlite3_value_int64(argv[1]);
79443 tRowcnt nDLt = sqlite3_value_int64(argv[2]);
79444 i64 rowid = sqlite3_value_int64(argv[3]);
79445 u8 isPSample = 0;
79446 u8 doInsert = 0;
79447 int iMin = p->iMin;
79448 struct Stat3Sample *pSample;
79449 int i;
79450 u32 h;
79452 UNUSED_PARAMETER(context);
79453 UNUSED_PARAMETER(argc);
79454 if( nEq==0 ) return;
79455 h = p->iPrn = p->iPrn*1103515245 + 12345;
79456 if( (nLt/p->nPSample)!=((nEq+nLt)/p->nPSample) ){
79457 doInsert = isPSample = 1;
79458 }else if( p->nSample<p->mxSample ){
79459 doInsert = 1;
79460 }else{
79461 if( nEq>p->a[iMin].nEq || (nEq==p->a[iMin].nEq && h>p->a[iMin].iHash) ){
79462 doInsert = 1;
79465 if( !doInsert ) return;
79466 if( p->nSample==p->mxSample ){
79467 assert( p->nSample - iMin - 1 >= 0 );
79468 memmove(&p->a[iMin], &p->a[iMin+1], sizeof(p->a[0])*(p->nSample-iMin-1));
79469 pSample = &p->a[p->nSample-1];
79470 }else{
79471 pSample = &p->a[p->nSample++];
79473 pSample->iRowid = rowid;
79474 pSample->nEq = nEq;
79475 pSample->nLt = nLt;
79476 pSample->nDLt = nDLt;
79477 pSample->iHash = h;
79478 pSample->isPSample = isPSample;
79480 /* Find the new minimum */
79481 if( p->nSample==p->mxSample ){
79482 pSample = p->a;
79483 i = 0;
79484 while( pSample->isPSample ){
79485 i++;
79486 pSample++;
79487 assert( i<p->nSample );
79489 nEq = pSample->nEq;
79490 h = pSample->iHash;
79491 iMin = i;
79492 for(i++, pSample++; i<p->nSample; i++, pSample++){
79493 if( pSample->isPSample ) continue;
79494 if( pSample->nEq<nEq
79495 || (pSample->nEq==nEq && pSample->iHash<h)
79497 iMin = i;
79498 nEq = pSample->nEq;
79499 h = pSample->iHash;
79502 p->iMin = iMin;
79505 static const FuncDef stat3PushFuncdef = {
79506 5, /* nArg */
79507 SQLITE_UTF8, /* iPrefEnc */
79508 0, /* flags */
79509 0, /* pUserData */
79510 0, /* pNext */
79511 stat3Push, /* xFunc */
79512 0, /* xStep */
79513 0, /* xFinalize */
79514 "stat3_push", /* zName */
79515 0, /* pHash */
79516 0 /* pDestructor */
79520 ** Implementation of the stat3_get(P,N,...) SQL function. This routine is
79521 ** used to query the results. Content is returned for the Nth sqlite_stat3
79522 ** row where N is between 0 and S-1 and S is the number of samples. The
79523 ** value returned depends on the number of arguments.
79525 ** argc==2 result: rowid
79526 ** argc==3 result: nEq
79527 ** argc==4 result: nLt
79528 ** argc==5 result: nDLt
79530 static void stat3Get(
79531 sqlite3_context *context,
79532 int argc,
79533 sqlite3_value **argv
79535 int n = sqlite3_value_int(argv[1]);
79536 Stat3Accum *p = (Stat3Accum*)sqlite3_value_blob(argv[0]);
79538 assert( p!=0 );
79539 if( p->nSample<=n ) return;
79540 switch( argc ){
79541 case 2: sqlite3_result_int64(context, p->a[n].iRowid); break;
79542 case 3: sqlite3_result_int64(context, p->a[n].nEq); break;
79543 case 4: sqlite3_result_int64(context, p->a[n].nLt); break;
79544 default: sqlite3_result_int64(context, p->a[n].nDLt); break;
79547 static const FuncDef stat3GetFuncdef = {
79548 -1, /* nArg */
79549 SQLITE_UTF8, /* iPrefEnc */
79550 0, /* flags */
79551 0, /* pUserData */
79552 0, /* pNext */
79553 stat3Get, /* xFunc */
79554 0, /* xStep */
79555 0, /* xFinalize */
79556 "stat3_get", /* zName */
79557 0, /* pHash */
79558 0 /* pDestructor */
79560 #endif /* SQLITE_ENABLE_STAT3 */
79566 ** Generate code to do an analysis of all indices associated with
79567 ** a single table.
79569 static void analyzeOneTable(
79570 Parse *pParse, /* Parser context */
79571 Table *pTab, /* Table whose indices are to be analyzed */
79572 Index *pOnlyIdx, /* If not NULL, only analyze this one index */
79573 int iStatCur, /* Index of VdbeCursor that writes the sqlite_stat1 table */
79574 int iMem /* Available memory locations begin here */
79576 sqlite3 *db = pParse->db; /* Database handle */
79577 Index *pIdx; /* An index to being analyzed */
79578 int iIdxCur; /* Cursor open on index being analyzed */
79579 Vdbe *v; /* The virtual machine being built up */
79580 int i; /* Loop counter */
79581 int topOfLoop; /* The top of the loop */
79582 int endOfLoop; /* The end of the loop */
79583 int jZeroRows = -1; /* Jump from here if number of rows is zero */
79584 int iDb; /* Index of database containing pTab */
79585 int regTabname = iMem++; /* Register containing table name */
79586 int regIdxname = iMem++; /* Register containing index name */
79587 int regStat1 = iMem++; /* The stat column of sqlite_stat1 */
79588 #ifdef SQLITE_ENABLE_STAT3
79589 int regNumEq = regStat1; /* Number of instances. Same as regStat1 */
79590 int regNumLt = iMem++; /* Number of keys less than regSample */
79591 int regNumDLt = iMem++; /* Number of distinct keys less than regSample */
79592 int regSample = iMem++; /* The next sample value */
79593 int regRowid = regSample; /* Rowid of a sample */
79594 int regAccum = iMem++; /* Register to hold Stat3Accum object */
79595 int regLoop = iMem++; /* Loop counter */
79596 int regCount = iMem++; /* Number of rows in the table or index */
79597 int regTemp1 = iMem++; /* Intermediate register */
79598 int regTemp2 = iMem++; /* Intermediate register */
79599 int once = 1; /* One-time initialization */
79600 int shortJump = 0; /* Instruction address */
79601 int iTabCur = pParse->nTab++; /* Table cursor */
79602 #endif
79603 int regCol = iMem++; /* Content of a column in analyzed table */
79604 int regRec = iMem++; /* Register holding completed record */
79605 int regTemp = iMem++; /* Temporary use register */
79606 int regNewRowid = iMem++; /* Rowid for the inserted record */
79609 v = sqlite3GetVdbe(pParse);
79610 if( v==0 || NEVER(pTab==0) ){
79611 return;
79613 if( pTab->tnum==0 ){
79614 /* Do not gather statistics on views or virtual tables */
79615 return;
79617 if( memcmp(pTab->zName, "sqlite_", 7)==0 ){
79618 /* Do not gather statistics on system tables */
79619 return;
79621 assert( sqlite3BtreeHoldsAllMutexes(db) );
79622 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
79623 assert( iDb>=0 );
79624 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
79625 #ifndef SQLITE_OMIT_AUTHORIZATION
79626 if( sqlite3AuthCheck(pParse, SQLITE_ANALYZE, pTab->zName, 0,
79627 db->aDb[iDb].zName ) ){
79628 return;
79630 #endif
79632 /* Establish a read-lock on the table at the shared-cache level. */
79633 sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
79635 iIdxCur = pParse->nTab++;
79636 sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
79637 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
79638 int nCol;
79639 KeyInfo *pKey;
79640 int addrIfNot = 0; /* address of OP_IfNot */
79641 int *aChngAddr; /* Array of jump instruction addresses */
79643 if( pOnlyIdx && pOnlyIdx!=pIdx ) continue;
79644 VdbeNoopComment((v, "Begin analysis of %s", pIdx->zName));
79645 nCol = pIdx->nColumn;
79646 aChngAddr = sqlite3DbMallocRaw(db, sizeof(int)*nCol);
79647 if( aChngAddr==0 ) continue;
79648 pKey = sqlite3IndexKeyinfo(pParse, pIdx);
79649 if( iMem+1+(nCol*2)>pParse->nMem ){
79650 pParse->nMem = iMem+1+(nCol*2);
79653 /* Open a cursor to the index to be analyzed. */
79654 assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
79655 sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb,
79656 (char *)pKey, P4_KEYINFO_HANDOFF);
79657 VdbeComment((v, "%s", pIdx->zName));
79659 /* Populate the register containing the index name. */
79660 sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0);
79662 #ifdef SQLITE_ENABLE_STAT3
79663 if( once ){
79664 once = 0;
79665 sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
79667 sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regCount);
79668 sqlite3VdbeAddOp2(v, OP_Integer, SQLITE_STAT3_SAMPLES, regTemp1);
79669 sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumEq);
79670 sqlite3VdbeAddOp2(v, OP_Integer, 0, regNumLt);
79671 sqlite3VdbeAddOp2(v, OP_Integer, -1, regNumDLt);
79672 sqlite3VdbeAddOp3(v, OP_Null, 0, regSample, regAccum);
79673 sqlite3VdbeAddOp4(v, OP_Function, 1, regCount, regAccum,
79674 (char*)&stat3InitFuncdef, P4_FUNCDEF);
79675 sqlite3VdbeChangeP5(v, 2);
79676 #endif /* SQLITE_ENABLE_STAT3 */
79678 /* The block of memory cells initialized here is used as follows.
79680 ** iMem:
79681 ** The total number of rows in the table.
79683 ** iMem+1 .. iMem+nCol:
79684 ** Number of distinct entries in index considering the
79685 ** left-most N columns only, where N is between 1 and nCol,
79686 ** inclusive.
79688 ** iMem+nCol+1 .. Mem+2*nCol:
79689 ** Previous value of indexed columns, from left to right.
79691 ** Cells iMem through iMem+nCol are initialized to 0. The others are
79692 ** initialized to contain an SQL NULL.
79694 for(i=0; i<=nCol; i++){
79695 sqlite3VdbeAddOp2(v, OP_Integer, 0, iMem+i);
79697 for(i=0; i<nCol; i++){
79698 sqlite3VdbeAddOp2(v, OP_Null, 0, iMem+nCol+i+1);
79701 /* Start the analysis loop. This loop runs through all the entries in
79702 ** the index b-tree. */
79703 endOfLoop = sqlite3VdbeMakeLabel(v);
79704 sqlite3VdbeAddOp2(v, OP_Rewind, iIdxCur, endOfLoop);
79705 topOfLoop = sqlite3VdbeCurrentAddr(v);
79706 sqlite3VdbeAddOp2(v, OP_AddImm, iMem, 1); /* Increment row counter */
79708 for(i=0; i<nCol; i++){
79709 CollSeq *pColl;
79710 sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regCol);
79711 if( i==0 ){
79712 /* Always record the very first row */
79713 addrIfNot = sqlite3VdbeAddOp1(v, OP_IfNot, iMem+1);
79715 assert( pIdx->azColl!=0 );
79716 assert( pIdx->azColl[i]!=0 );
79717 pColl = sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
79718 aChngAddr[i] = sqlite3VdbeAddOp4(v, OP_Ne, regCol, 0, iMem+nCol+i+1,
79719 (char*)pColl, P4_COLLSEQ);
79720 sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
79721 VdbeComment((v, "jump if column %d changed", i));
79722 #ifdef SQLITE_ENABLE_STAT3
79723 if( i==0 ){
79724 sqlite3VdbeAddOp2(v, OP_AddImm, regNumEq, 1);
79725 VdbeComment((v, "incr repeat count"));
79727 #endif
79729 sqlite3VdbeAddOp2(v, OP_Goto, 0, endOfLoop);
79730 for(i=0; i<nCol; i++){
79731 sqlite3VdbeJumpHere(v, aChngAddr[i]); /* Set jump dest for the OP_Ne */
79732 if( i==0 ){
79733 sqlite3VdbeJumpHere(v, addrIfNot); /* Jump dest for OP_IfNot */
79734 #ifdef SQLITE_ENABLE_STAT3
79735 sqlite3VdbeAddOp4(v, OP_Function, 1, regNumEq, regTemp2,
79736 (char*)&stat3PushFuncdef, P4_FUNCDEF);
79737 sqlite3VdbeChangeP5(v, 5);
79738 sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, pIdx->nColumn, regRowid);
79739 sqlite3VdbeAddOp3(v, OP_Add, regNumEq, regNumLt, regNumLt);
79740 sqlite3VdbeAddOp2(v, OP_AddImm, regNumDLt, 1);
79741 sqlite3VdbeAddOp2(v, OP_Integer, 1, regNumEq);
79742 #endif
79744 sqlite3VdbeAddOp2(v, OP_AddImm, iMem+i+1, 1);
79745 sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, iMem+nCol+i+1);
79747 sqlite3DbFree(db, aChngAddr);
79749 /* Always jump here after updating the iMem+1...iMem+1+nCol counters */
79750 sqlite3VdbeResolveLabel(v, endOfLoop);
79752 sqlite3VdbeAddOp2(v, OP_Next, iIdxCur, topOfLoop);
79753 sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
79754 #ifdef SQLITE_ENABLE_STAT3
79755 sqlite3VdbeAddOp4(v, OP_Function, 1, regNumEq, regTemp2,
79756 (char*)&stat3PushFuncdef, P4_FUNCDEF);
79757 sqlite3VdbeChangeP5(v, 5);
79758 sqlite3VdbeAddOp2(v, OP_Integer, -1, regLoop);
79759 shortJump =
79760 sqlite3VdbeAddOp2(v, OP_AddImm, regLoop, 1);
79761 sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regTemp1,
79762 (char*)&stat3GetFuncdef, P4_FUNCDEF);
79763 sqlite3VdbeChangeP5(v, 2);
79764 sqlite3VdbeAddOp1(v, OP_IsNull, regTemp1);
79765 sqlite3VdbeAddOp3(v, OP_NotExists, iTabCur, shortJump, regTemp1);
79766 sqlite3VdbeAddOp3(v, OP_Column, iTabCur, pIdx->aiColumn[0], regSample);
79767 sqlite3ColumnDefault(v, pTab, pIdx->aiColumn[0], regSample);
79768 sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumEq,
79769 (char*)&stat3GetFuncdef, P4_FUNCDEF);
79770 sqlite3VdbeChangeP5(v, 3);
79771 sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumLt,
79772 (char*)&stat3GetFuncdef, P4_FUNCDEF);
79773 sqlite3VdbeChangeP5(v, 4);
79774 sqlite3VdbeAddOp4(v, OP_Function, 1, regAccum, regNumDLt,
79775 (char*)&stat3GetFuncdef, P4_FUNCDEF);
79776 sqlite3VdbeChangeP5(v, 5);
79777 sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 6, regRec, "bbbbbb", 0);
79778 sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur+1, regNewRowid);
79779 sqlite3VdbeAddOp3(v, OP_Insert, iStatCur+1, regRec, regNewRowid);
79780 sqlite3VdbeAddOp2(v, OP_Goto, 0, shortJump);
79781 sqlite3VdbeJumpHere(v, shortJump+2);
79782 #endif
79784 /* Store the results in sqlite_stat1.
79786 ** The result is a single row of the sqlite_stat1 table. The first
79787 ** two columns are the names of the table and index. The third column
79788 ** is a string composed of a list of integer statistics about the
79789 ** index. The first integer in the list is the total number of entries
79790 ** in the index. There is one additional integer in the list for each
79791 ** column of the table. This additional integer is a guess of how many
79792 ** rows of the table the index will select. If D is the count of distinct
79793 ** values and K is the total number of rows, then the integer is computed
79794 ** as:
79796 ** I = (K+D-1)/D
79798 ** If K==0 then no entry is made into the sqlite_stat1 table.
79799 ** If K>0 then it is always the case the D>0 so division by zero
79800 ** is never possible.
79802 sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regStat1);
79803 if( jZeroRows<0 ){
79804 jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
79806 for(i=0; i<nCol; i++){
79807 sqlite3VdbeAddOp4(v, OP_String8, 0, regTemp, 0, " ", 0);
79808 sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regStat1, regStat1);
79809 sqlite3VdbeAddOp3(v, OP_Add, iMem, iMem+i+1, regTemp);
79810 sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
79811 sqlite3VdbeAddOp3(v, OP_Divide, iMem+i+1, regTemp, regTemp);
79812 sqlite3VdbeAddOp1(v, OP_ToInt, regTemp);
79813 sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regStat1, regStat1);
79815 sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
79816 sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
79817 sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid);
79818 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
79821 /* If the table has no indices, create a single sqlite_stat1 entry
79822 ** containing NULL as the index name and the row count as the content.
79824 if( pTab->pIndex==0 ){
79825 sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb);
79826 VdbeComment((v, "%s", pTab->zName));
79827 sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat1);
79828 sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
79829 jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1);
79830 }else{
79831 sqlite3VdbeJumpHere(v, jZeroRows);
79832 jZeroRows = sqlite3VdbeAddOp0(v, OP_Goto);
79834 sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
79835 sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
79836 sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
79837 sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regNewRowid);
79838 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
79839 if( pParse->nMem<regRec ) pParse->nMem = regRec;
79840 sqlite3VdbeJumpHere(v, jZeroRows);
79845 ** Generate code that will cause the most recent index analysis to
79846 ** be loaded into internal hash tables where is can be used.
79848 static void loadAnalysis(Parse *pParse, int iDb){
79849 Vdbe *v = sqlite3GetVdbe(pParse);
79850 if( v ){
79851 sqlite3VdbeAddOp1(v, OP_LoadAnalysis, iDb);
79856 ** Generate code that will do an analysis of an entire database
79858 static void analyzeDatabase(Parse *pParse, int iDb){
79859 sqlite3 *db = pParse->db;
79860 Schema *pSchema = db->aDb[iDb].pSchema; /* Schema of database iDb */
79861 HashElem *k;
79862 int iStatCur;
79863 int iMem;
79865 sqlite3BeginWriteOperation(pParse, 0, iDb);
79866 iStatCur = pParse->nTab;
79867 pParse->nTab += 3;
79868 openStatTable(pParse, iDb, iStatCur, 0, 0);
79869 iMem = pParse->nMem+1;
79870 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
79871 for(k=sqliteHashFirst(&pSchema->tblHash); k; k=sqliteHashNext(k)){
79872 Table *pTab = (Table*)sqliteHashData(k);
79873 analyzeOneTable(pParse, pTab, 0, iStatCur, iMem);
79875 loadAnalysis(pParse, iDb);
79879 ** Generate code that will do an analysis of a single table in
79880 ** a database. If pOnlyIdx is not NULL then it is a single index
79881 ** in pTab that should be analyzed.
79883 static void analyzeTable(Parse *pParse, Table *pTab, Index *pOnlyIdx){
79884 int iDb;
79885 int iStatCur;
79887 assert( pTab!=0 );
79888 assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
79889 iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
79890 sqlite3BeginWriteOperation(pParse, 0, iDb);
79891 iStatCur = pParse->nTab;
79892 pParse->nTab += 3;
79893 if( pOnlyIdx ){
79894 openStatTable(pParse, iDb, iStatCur, pOnlyIdx->zName, "idx");
79895 }else{
79896 openStatTable(pParse, iDb, iStatCur, pTab->zName, "tbl");
79898 analyzeOneTable(pParse, pTab, pOnlyIdx, iStatCur, pParse->nMem+1);
79899 loadAnalysis(pParse, iDb);
79903 ** Generate code for the ANALYZE command. The parser calls this routine
79904 ** when it recognizes an ANALYZE command.
79906 ** ANALYZE -- 1
79907 ** ANALYZE <database> -- 2
79908 ** ANALYZE ?<database>.?<tablename> -- 3
79910 ** Form 1 causes all indices in all attached databases to be analyzed.
79911 ** Form 2 analyzes all indices the single database named.
79912 ** Form 3 analyzes all indices associated with the named table.
79914 SQLITE_PRIVATE void sqlite3Analyze(Parse *pParse, Token *pName1, Token *pName2){
79915 sqlite3 *db = pParse->db;
79916 int iDb;
79917 int i;
79918 char *z, *zDb;
79919 Table *pTab;
79920 Index *pIdx;
79921 Token *pTableName;
79923 /* Read the database schema. If an error occurs, leave an error message
79924 ** and code in pParse and return NULL. */
79925 assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
79926 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
79927 return;
79930 assert( pName2!=0 || pName1==0 );
79931 if( pName1==0 ){
79932 /* Form 1: Analyze everything */
79933 for(i=0; i<db->nDb; i++){
79934 if( i==1 ) continue; /* Do not analyze the TEMP database */
79935 analyzeDatabase(pParse, i);
79937 }else if( pName2->n==0 ){
79938 /* Form 2: Analyze the database or table named */
79939 iDb = sqlite3FindDb(db, pName1);
79940 if( iDb>=0 ){
79941 analyzeDatabase(pParse, iDb);
79942 }else{
79943 z = sqlite3NameFromToken(db, pName1);
79944 if( z ){
79945 if( (pIdx = sqlite3FindIndex(db, z, 0))!=0 ){
79946 analyzeTable(pParse, pIdx->pTable, pIdx);
79947 }else if( (pTab = sqlite3LocateTable(pParse, 0, z, 0))!=0 ){
79948 analyzeTable(pParse, pTab, 0);
79950 sqlite3DbFree(db, z);
79953 }else{
79954 /* Form 3: Analyze the fully qualified table name */
79955 iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pTableName);
79956 if( iDb>=0 ){
79957 zDb = db->aDb[iDb].zName;
79958 z = sqlite3NameFromToken(db, pTableName);
79959 if( z ){
79960 if( (pIdx = sqlite3FindIndex(db, z, zDb))!=0 ){
79961 analyzeTable(pParse, pIdx->pTable, pIdx);
79962 }else if( (pTab = sqlite3LocateTable(pParse, 0, z, zDb))!=0 ){
79963 analyzeTable(pParse, pTab, 0);
79965 sqlite3DbFree(db, z);
79972 ** Used to pass information from the analyzer reader through to the
79973 ** callback routine.
79975 typedef struct analysisInfo analysisInfo;
79976 struct analysisInfo {
79977 sqlite3 *db;
79978 const char *zDatabase;
79982 ** This callback is invoked once for each index when reading the
79983 ** sqlite_stat1 table.
79985 ** argv[0] = name of the table
79986 ** argv[1] = name of the index (might be NULL)
79987 ** argv[2] = results of analysis - on integer for each column
79989 ** Entries for which argv[1]==NULL simply record the number of rows in
79990 ** the table.
79992 static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
79993 analysisInfo *pInfo = (analysisInfo*)pData;
79994 Index *pIndex;
79995 Table *pTable;
79996 int i, c, n;
79997 tRowcnt v;
79998 const char *z;
80000 assert( argc==3 );
80001 UNUSED_PARAMETER2(NotUsed, argc);
80003 if( argv==0 || argv[0]==0 || argv[2]==0 ){
80004 return 0;
80006 pTable = sqlite3FindTable(pInfo->db, argv[0], pInfo->zDatabase);
80007 if( pTable==0 ){
80008 return 0;
80010 if( argv[1] ){
80011 pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase);
80012 }else{
80013 pIndex = 0;
80015 n = pIndex ? pIndex->nColumn : 0;
80016 z = argv[2];
80017 for(i=0; *z && i<=n; i++){
80018 v = 0;
80019 while( (c=z[0])>='0' && c<='9' ){
80020 v = v*10 + c - '0';
80021 z++;
80023 if( i==0 ) pTable->nRowEst = v;
80024 if( pIndex==0 ) break;
80025 pIndex->aiRowEst[i] = v;
80026 if( *z==' ' ) z++;
80027 if( memcmp(z, "unordered", 10)==0 ){
80028 pIndex->bUnordered = 1;
80029 break;
80032 return 0;
80036 ** If the Index.aSample variable is not NULL, delete the aSample[] array
80037 ** and its contents.
80039 SQLITE_PRIVATE void sqlite3DeleteIndexSamples(sqlite3 *db, Index *pIdx){
80040 #ifdef SQLITE_ENABLE_STAT3
80041 if( pIdx->aSample ){
80042 int j;
80043 for(j=0; j<pIdx->nSample; j++){
80044 IndexSample *p = &pIdx->aSample[j];
80045 if( p->eType==SQLITE_TEXT || p->eType==SQLITE_BLOB ){
80046 sqlite3DbFree(db, p->u.z);
80049 sqlite3DbFree(db, pIdx->aSample);
80051 if( db && db->pnBytesFreed==0 ){
80052 pIdx->nSample = 0;
80053 pIdx->aSample = 0;
80055 #else
80056 UNUSED_PARAMETER(db);
80057 UNUSED_PARAMETER(pIdx);
80058 #endif
80061 #ifdef SQLITE_ENABLE_STAT3
80063 ** Load content from the sqlite_stat3 table into the Index.aSample[]
80064 ** arrays of all indices.
80066 static int loadStat3(sqlite3 *db, const char *zDb){
80067 int rc; /* Result codes from subroutines */
80068 sqlite3_stmt *pStmt = 0; /* An SQL statement being run */
80069 char *zSql; /* Text of the SQL statement */
80070 Index *pPrevIdx = 0; /* Previous index in the loop */
80071 int idx = 0; /* slot in pIdx->aSample[] for next sample */
80072 int eType; /* Datatype of a sample */
80073 IndexSample *pSample; /* A slot in pIdx->aSample[] */
80075 if( !sqlite3FindTable(db, "sqlite_stat3", zDb) ){
80076 return SQLITE_OK;
80079 zSql = sqlite3MPrintf(db,
80080 "SELECT idx,count(*) FROM %Q.sqlite_stat3"
80081 " GROUP BY idx", zDb);
80082 if( !zSql ){
80083 return SQLITE_NOMEM;
80085 rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
80086 sqlite3DbFree(db, zSql);
80087 if( rc ) return rc;
80089 while( sqlite3_step(pStmt)==SQLITE_ROW ){
80090 char *zIndex; /* Index name */
80091 Index *pIdx; /* Pointer to the index object */
80092 int nSample; /* Number of samples */
80094 zIndex = (char *)sqlite3_column_text(pStmt, 0);
80095 if( zIndex==0 ) continue;
80096 nSample = sqlite3_column_int(pStmt, 1);
80097 pIdx = sqlite3FindIndex(db, zIndex, zDb);
80098 if( pIdx==0 ) continue;
80099 assert( pIdx->nSample==0 );
80100 pIdx->nSample = nSample;
80101 pIdx->aSample = sqlite3MallocZero( nSample*sizeof(IndexSample) );
80102 pIdx->avgEq = pIdx->aiRowEst[1];
80103 if( pIdx->aSample==0 ){
80104 db->mallocFailed = 1;
80105 sqlite3_finalize(pStmt);
80106 return SQLITE_NOMEM;
80109 rc = sqlite3_finalize(pStmt);
80110 if( rc ) return rc;
80112 zSql = sqlite3MPrintf(db,
80113 "SELECT idx,neq,nlt,ndlt,sample FROM %Q.sqlite_stat3", zDb);
80114 if( !zSql ){
80115 return SQLITE_NOMEM;
80117 rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
80118 sqlite3DbFree(db, zSql);
80119 if( rc ) return rc;
80121 while( sqlite3_step(pStmt)==SQLITE_ROW ){
80122 char *zIndex; /* Index name */
80123 Index *pIdx; /* Pointer to the index object */
80124 int i; /* Loop counter */
80125 tRowcnt sumEq; /* Sum of the nEq values */
80127 zIndex = (char *)sqlite3_column_text(pStmt, 0);
80128 if( zIndex==0 ) continue;
80129 pIdx = sqlite3FindIndex(db, zIndex, zDb);
80130 if( pIdx==0 ) continue;
80131 if( pIdx==pPrevIdx ){
80132 idx++;
80133 }else{
80134 pPrevIdx = pIdx;
80135 idx = 0;
80137 assert( idx<pIdx->nSample );
80138 pSample = &pIdx->aSample[idx];
80139 pSample->nEq = (tRowcnt)sqlite3_column_int64(pStmt, 1);
80140 pSample->nLt = (tRowcnt)sqlite3_column_int64(pStmt, 2);
80141 pSample->nDLt = (tRowcnt)sqlite3_column_int64(pStmt, 3);
80142 if( idx==pIdx->nSample-1 ){
80143 if( pSample->nDLt>0 ){
80144 for(i=0, sumEq=0; i<=idx-1; i++) sumEq += pIdx->aSample[i].nEq;
80145 pIdx->avgEq = (pSample->nLt - sumEq)/pSample->nDLt;
80147 if( pIdx->avgEq<=0 ) pIdx->avgEq = 1;
80149 eType = sqlite3_column_type(pStmt, 4);
80150 pSample->eType = (u8)eType;
80151 switch( eType ){
80152 case SQLITE_INTEGER: {
80153 pSample->u.i = sqlite3_column_int64(pStmt, 4);
80154 break;
80156 case SQLITE_FLOAT: {
80157 pSample->u.r = sqlite3_column_double(pStmt, 4);
80158 break;
80160 case SQLITE_NULL: {
80161 break;
80163 default: assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB ); {
80164 const char *z = (const char *)(
80165 (eType==SQLITE_BLOB) ?
80166 sqlite3_column_blob(pStmt, 4):
80167 sqlite3_column_text(pStmt, 4)
80169 int n = z ? sqlite3_column_bytes(pStmt, 4) : 0;
80170 pSample->nByte = n;
80171 if( n < 1){
80172 pSample->u.z = 0;
80173 }else{
80174 pSample->u.z = sqlite3Malloc(n);
80175 if( pSample->u.z==0 ){
80176 db->mallocFailed = 1;
80177 sqlite3_finalize(pStmt);
80178 return SQLITE_NOMEM;
80180 memcpy(pSample->u.z, z, n);
80185 return sqlite3_finalize(pStmt);
80187 #endif /* SQLITE_ENABLE_STAT3 */
80190 ** Load the content of the sqlite_stat1 and sqlite_stat3 tables. The
80191 ** contents of sqlite_stat1 are used to populate the Index.aiRowEst[]
80192 ** arrays. The contents of sqlite_stat3 are used to populate the
80193 ** Index.aSample[] arrays.
80195 ** If the sqlite_stat1 table is not present in the database, SQLITE_ERROR
80196 ** is returned. In this case, even if SQLITE_ENABLE_STAT3 was defined
80197 ** during compilation and the sqlite_stat3 table is present, no data is
80198 ** read from it.
80200 ** If SQLITE_ENABLE_STAT3 was defined during compilation and the
80201 ** sqlite_stat3 table is not present in the database, SQLITE_ERROR is
80202 ** returned. However, in this case, data is read from the sqlite_stat1
80203 ** table (if it is present) before returning.
80205 ** If an OOM error occurs, this function always sets db->mallocFailed.
80206 ** This means if the caller does not care about other errors, the return
80207 ** code may be ignored.
80209 SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
80210 analysisInfo sInfo;
80211 HashElem *i;
80212 char *zSql;
80213 int rc;
80215 assert( iDb>=0 && iDb<db->nDb );
80216 assert( db->aDb[iDb].pBt!=0 );
80218 /* Clear any prior statistics */
80219 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
80220 for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){
80221 Index *pIdx = sqliteHashData(i);
80222 sqlite3DefaultRowEst(pIdx);
80223 #ifdef SQLITE_ENABLE_STAT3
80224 sqlite3DeleteIndexSamples(db, pIdx);
80225 pIdx->aSample = 0;
80226 #endif
80229 /* Check to make sure the sqlite_stat1 table exists */
80230 sInfo.db = db;
80231 sInfo.zDatabase = db->aDb[iDb].zName;
80232 if( sqlite3FindTable(db, "sqlite_stat1", sInfo.zDatabase)==0 ){
80233 return SQLITE_ERROR;
80236 /* Load new statistics out of the sqlite_stat1 table */
80237 zSql = sqlite3MPrintf(db,
80238 "SELECT tbl,idx,stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
80239 if( zSql==0 ){
80240 rc = SQLITE_NOMEM;
80241 }else{
80242 rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0);
80243 sqlite3DbFree(db, zSql);
80247 /* Load the statistics from the sqlite_stat3 table. */
80248 #ifdef SQLITE_ENABLE_STAT3
80249 if( rc==SQLITE_OK ){
80250 rc = loadStat3(db, sInfo.zDatabase);
80252 #endif
80254 if( rc==SQLITE_NOMEM ){
80255 db->mallocFailed = 1;
80257 return rc;
80261 #endif /* SQLITE_OMIT_ANALYZE */
80263 /************** End of analyze.c *********************************************/
80264 /************** Begin file attach.c ******************************************/
80266 ** 2003 April 6
80268 ** The author disclaims copyright to this source code. In place of
80269 ** a legal notice, here is a blessing:
80271 ** May you do good and not evil.
80272 ** May you find forgiveness for yourself and forgive others.
80273 ** May you share freely, never taking more than you give.
80275 *************************************************************************
80276 ** This file contains code used to implement the ATTACH and DETACH commands.
80279 #ifndef SQLITE_OMIT_ATTACH
80281 ** Resolve an expression that was part of an ATTACH or DETACH statement. This
80282 ** is slightly different from resolving a normal SQL expression, because simple
80283 ** identifiers are treated as strings, not possible column names or aliases.
80285 ** i.e. if the parser sees:
80287 ** ATTACH DATABASE abc AS def
80289 ** it treats the two expressions as literal strings 'abc' and 'def' instead of
80290 ** looking for columns of the same name.
80292 ** This only applies to the root node of pExpr, so the statement:
80294 ** ATTACH DATABASE abc||def AS 'db2'
80296 ** will fail because neither abc or def can be resolved.
80298 static int resolveAttachExpr(NameContext *pName, Expr *pExpr)
80300 int rc = SQLITE_OK;
80301 if( pExpr ){
80302 if( pExpr->op!=TK_ID ){
80303 rc = sqlite3ResolveExprNames(pName, pExpr);
80304 if( rc==SQLITE_OK && !sqlite3ExprIsConstant(pExpr) ){
80305 sqlite3ErrorMsg(pName->pParse, "invalid name: \"%s\"", pExpr->u.zToken);
80306 return SQLITE_ERROR;
80308 }else{
80309 pExpr->op = TK_STRING;
80312 return rc;
80316 ** An SQL user-function registered to do the work of an ATTACH statement. The
80317 ** three arguments to the function come directly from an attach statement:
80319 ** ATTACH DATABASE x AS y KEY z
80321 ** SELECT sqlite_attach(x, y, z)
80323 ** If the optional "KEY z" syntax is omitted, an SQL NULL is passed as the
80324 ** third argument.
80326 static void attachFunc(
80327 sqlite3_context *context,
80328 int NotUsed,
80329 sqlite3_value **argv
80331 int i;
80332 int rc = 0;
80333 sqlite3 *db = sqlite3_context_db_handle(context);
80334 const char *zName;
80335 const char *zFile;
80336 char *zPath = 0;
80337 char *zErr = 0;
80338 unsigned int flags;
80339 Db *aNew;
80340 char *zErrDyn = 0;
80341 sqlite3_vfs *pVfs;
80343 UNUSED_PARAMETER(NotUsed);
80345 zFile = (const char *)sqlite3_value_text(argv[0]);
80346 zName = (const char *)sqlite3_value_text(argv[1]);
80347 if( zFile==0 ) zFile = "";
80348 if( zName==0 ) zName = "";
80350 /* Check for the following errors:
80352 ** * Too many attached databases,
80353 ** * Transaction currently open
80354 ** * Specified database name already being used.
80356 if( db->nDb>=db->aLimit[SQLITE_LIMIT_ATTACHED]+2 ){
80357 zErrDyn = sqlite3MPrintf(db, "too many attached databases - max %d",
80358 db->aLimit[SQLITE_LIMIT_ATTACHED]
80360 goto attach_error;
80362 if( !db->autoCommit ){
80363 zErrDyn = sqlite3MPrintf(db, "cannot ATTACH database within transaction");
80364 goto attach_error;
80366 for(i=0; i<db->nDb; i++){
80367 char *z = db->aDb[i].zName;
80368 assert( z && zName );
80369 if( sqlite3StrICmp(z, zName)==0 ){
80370 zErrDyn = sqlite3MPrintf(db, "database %s is already in use", zName);
80371 goto attach_error;
80375 /* Allocate the new entry in the db->aDb[] array and initialise the schema
80376 ** hash tables.
80378 if( db->aDb==db->aDbStatic ){
80379 aNew = sqlite3DbMallocRaw(db, sizeof(db->aDb[0])*3 );
80380 if( aNew==0 ) return;
80381 memcpy(aNew, db->aDb, sizeof(db->aDb[0])*2);
80382 }else{
80383 aNew = sqlite3DbRealloc(db, db->aDb, sizeof(db->aDb[0])*(db->nDb+1) );
80384 if( aNew==0 ) return;
80386 db->aDb = aNew;
80387 aNew = &db->aDb[db->nDb];
80388 memset(aNew, 0, sizeof(*aNew));
80390 /* Open the database file. If the btree is successfully opened, use
80391 ** it to obtain the database schema. At this point the schema may
80392 ** or may not be initialised.
80394 flags = db->openFlags;
80395 rc = sqlite3ParseUri(db->pVfs->zName, zFile, &flags, &pVfs, &zPath, &zErr);
80396 if( rc!=SQLITE_OK ){
80397 if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
80398 sqlite3_result_error(context, zErr, -1);
80399 sqlite3_free(zErr);
80400 return;
80402 assert( pVfs );
80403 flags |= SQLITE_OPEN_MAIN_DB;
80404 rc = sqlite3BtreeOpen(pVfs, zPath, db, &aNew->pBt, 0, flags);
80405 sqlite3_free( zPath );
80406 db->nDb++;
80407 if( rc==SQLITE_CONSTRAINT ){
80408 rc = SQLITE_ERROR;
80409 zErrDyn = sqlite3MPrintf(db, "database is already attached");
80410 }else if( rc==SQLITE_OK ){
80411 Pager *pPager;
80412 aNew->pSchema = sqlite3SchemaGet(db, aNew->pBt);
80413 if( !aNew->pSchema ){
80414 rc = SQLITE_NOMEM;
80415 }else if( aNew->pSchema->file_format && aNew->pSchema->enc!=ENC(db) ){
80416 zErrDyn = sqlite3MPrintf(db,
80417 "attached databases must use the same text encoding as main database");
80418 rc = SQLITE_ERROR;
80420 pPager = sqlite3BtreePager(aNew->pBt);
80421 sqlite3PagerLockingMode(pPager, db->dfltLockMode);
80422 sqlite3BtreeSecureDelete(aNew->pBt,
80423 sqlite3BtreeSecureDelete(db->aDb[0].pBt,-1) );
80425 aNew->safety_level = 3;
80426 aNew->zName = sqlite3DbStrDup(db, zName);
80427 if( rc==SQLITE_OK && aNew->zName==0 ){
80428 rc = SQLITE_NOMEM;
80432 #ifdef SQLITE_HAS_CODEC
80433 if( rc==SQLITE_OK ){
80434 extern int sqlite3CodecAttach(sqlite3*, int, const void*, int);
80435 extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
80436 int nKey;
80437 char *zKey;
80438 int t = sqlite3_value_type(argv[2]);
80439 switch( t ){
80440 case SQLITE_INTEGER:
80441 case SQLITE_FLOAT:
80442 zErrDyn = sqlite3DbStrDup(db, "Invalid key value");
80443 rc = SQLITE_ERROR;
80444 break;
80446 case SQLITE_TEXT:
80447 case SQLITE_BLOB:
80448 nKey = sqlite3_value_bytes(argv[2]);
80449 zKey = (char *)sqlite3_value_blob(argv[2]);
80450 rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
80451 break;
80453 case SQLITE_NULL:
80454 /* No key specified. Use the key from the main database */
80455 sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
80456 if( nKey>0 || sqlite3BtreeGetReserve(db->aDb[0].pBt)>0 ){
80457 rc = sqlite3CodecAttach(db, db->nDb-1, zKey, nKey);
80459 break;
80462 #endif
80464 /* If the file was opened successfully, read the schema for the new database.
80465 ** If this fails, or if opening the file failed, then close the file and
80466 ** remove the entry from the db->aDb[] array. i.e. put everything back the way
80467 ** we found it.
80469 if( rc==SQLITE_OK ){
80470 sqlite3BtreeEnterAll(db);
80471 rc = sqlite3Init(db, &zErrDyn);
80472 sqlite3BtreeLeaveAll(db);
80474 if( rc ){
80475 int iDb = db->nDb - 1;
80476 assert( iDb>=2 );
80477 if( db->aDb[iDb].pBt ){
80478 sqlite3BtreeClose(db->aDb[iDb].pBt);
80479 db->aDb[iDb].pBt = 0;
80480 db->aDb[iDb].pSchema = 0;
80482 sqlite3ResetInternalSchema(db, -1);
80483 db->nDb = iDb;
80484 if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
80485 db->mallocFailed = 1;
80486 sqlite3DbFree(db, zErrDyn);
80487 zErrDyn = sqlite3MPrintf(db, "out of memory");
80488 }else if( zErrDyn==0 ){
80489 zErrDyn = sqlite3MPrintf(db, "unable to open database: %s", zFile);
80491 goto attach_error;
80494 return;
80496 attach_error:
80497 /* Return an error if we get here */
80498 if( zErrDyn ){
80499 sqlite3_result_error(context, zErrDyn, -1);
80500 sqlite3DbFree(db, zErrDyn);
80502 if( rc ) sqlite3_result_error_code(context, rc);
80506 ** An SQL user-function registered to do the work of an DETACH statement. The
80507 ** three arguments to the function come directly from a detach statement:
80509 ** DETACH DATABASE x
80511 ** SELECT sqlite_detach(x)
80513 static void detachFunc(
80514 sqlite3_context *context,
80515 int NotUsed,
80516 sqlite3_value **argv
80518 const char *zName = (const char *)sqlite3_value_text(argv[0]);
80519 sqlite3 *db = sqlite3_context_db_handle(context);
80520 int i;
80521 Db *pDb = 0;
80522 char zErr[128];
80524 UNUSED_PARAMETER(NotUsed);
80526 if( zName==0 ) zName = "";
80527 for(i=0; i<db->nDb; i++){
80528 pDb = &db->aDb[i];
80529 if( pDb->pBt==0 ) continue;
80530 if( sqlite3StrICmp(pDb->zName, zName)==0 ) break;
80533 if( i>=db->nDb ){
80534 sqlite3_snprintf(sizeof(zErr),zErr, "no such database: %s", zName);
80535 goto detach_error;
80537 if( i<2 ){
80538 sqlite3_snprintf(sizeof(zErr),zErr, "cannot detach database %s", zName);
80539 goto detach_error;
80541 if( !db->autoCommit ){
80542 sqlite3_snprintf(sizeof(zErr), zErr,
80543 "cannot DETACH database within transaction");
80544 goto detach_error;
80546 if( sqlite3BtreeIsInReadTrans(pDb->pBt) || sqlite3BtreeIsInBackup(pDb->pBt) ){
80547 sqlite3_snprintf(sizeof(zErr),zErr, "database %s is locked", zName);
80548 goto detach_error;
80551 sqlite3BtreeClose(pDb->pBt);
80552 pDb->pBt = 0;
80553 pDb->pSchema = 0;
80554 sqlite3ResetInternalSchema(db, -1);
80555 return;
80557 detach_error:
80558 sqlite3_result_error(context, zErr, -1);
80562 ** This procedure generates VDBE code for a single invocation of either the
80563 ** sqlite_detach() or sqlite_attach() SQL user functions.
80565 static void codeAttach(
80566 Parse *pParse, /* The parser context */
80567 int type, /* Either SQLITE_ATTACH or SQLITE_DETACH */
80568 FuncDef const *pFunc,/* FuncDef wrapper for detachFunc() or attachFunc() */
80569 Expr *pAuthArg, /* Expression to pass to authorization callback */
80570 Expr *pFilename, /* Name of database file */
80571 Expr *pDbname, /* Name of the database to use internally */
80572 Expr *pKey /* Database key for encryption extension */
80574 int rc;
80575 NameContext sName;
80576 Vdbe *v;
80577 sqlite3* db = pParse->db;
80578 int regArgs;
80580 memset(&sName, 0, sizeof(NameContext));
80581 sName.pParse = pParse;
80583 if(
80584 SQLITE_OK!=(rc = resolveAttachExpr(&sName, pFilename)) ||
80585 SQLITE_OK!=(rc = resolveAttachExpr(&sName, pDbname)) ||
80586 SQLITE_OK!=(rc = resolveAttachExpr(&sName, pKey))
80588 pParse->nErr++;
80589 goto attach_end;
80592 #ifndef SQLITE_OMIT_AUTHORIZATION
80593 if( pAuthArg ){
80594 char *zAuthArg;
80595 if( pAuthArg->op==TK_STRING ){
80596 zAuthArg = pAuthArg->u.zToken;
80597 }else{
80598 zAuthArg = 0;
80600 rc = sqlite3AuthCheck(pParse, type, zAuthArg, 0, 0);
80601 if(rc!=SQLITE_OK ){
80602 goto attach_end;
80605 #endif /* SQLITE_OMIT_AUTHORIZATION */
80608 v = sqlite3GetVdbe(pParse);
80609 regArgs = sqlite3GetTempRange(pParse, 4);
80610 sqlite3ExprCode(pParse, pFilename, regArgs);
80611 sqlite3ExprCode(pParse, pDbname, regArgs+1);
80612 sqlite3ExprCode(pParse, pKey, regArgs+2);
80614 assert( v || db->mallocFailed );
80615 if( v ){
80616 sqlite3VdbeAddOp3(v, OP_Function, 0, regArgs+3-pFunc->nArg, regArgs+3);
80617 assert( pFunc->nArg==-1 || (pFunc->nArg&0xff)==pFunc->nArg );
80618 sqlite3VdbeChangeP5(v, (u8)(pFunc->nArg));
80619 sqlite3VdbeChangeP4(v, -1, (char *)pFunc, P4_FUNCDEF);
80621 /* Code an OP_Expire. For an ATTACH statement, set P1 to true (expire this
80622 ** statement only). For DETACH, set it to false (expire all existing
80623 ** statements).
80625 sqlite3VdbeAddOp1(v, OP_Expire, (type==SQLITE_ATTACH));
80628 attach_end:
80629 sqlite3ExprDelete(db, pFilename);
80630 sqlite3ExprDelete(db, pDbname);
80631 sqlite3ExprDelete(db, pKey);
80635 ** Called by the parser to compile a DETACH statement.
80637 ** DETACH pDbname
80639 SQLITE_PRIVATE void sqlite3Detach(Parse *pParse, Expr *pDbname){
80640 static const FuncDef detach_func = {
80641 1, /* nArg */
80642 SQLITE_UTF8, /* iPrefEnc */
80643 0, /* flags */
80644 0, /* pUserData */
80645 0, /* pNext */
80646 detachFunc, /* xFunc */
80647 0, /* xStep */
80648 0, /* xFinalize */
80649 "sqlite_detach", /* zName */
80650 0, /* pHash */
80651 0 /* pDestructor */
80653 codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname);
80657 ** Called by the parser to compile an ATTACH statement.
80659 ** ATTACH p AS pDbname KEY pKey
80661 SQLITE_PRIVATE void sqlite3Attach(Parse *pParse, Expr *p, Expr *pDbname, Expr *pKey){
80662 static const FuncDef attach_func = {
80663 3, /* nArg */
80664 SQLITE_UTF8, /* iPrefEnc */
80665 0, /* flags */
80666 0, /* pUserData */
80667 0, /* pNext */
80668 attachFunc, /* xFunc */
80669 0, /* xStep */
80670 0, /* xFinalize */
80671 "sqlite_attach", /* zName */
80672 0, /* pHash */
80673 0 /* pDestructor */
80675 codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey);
80677 #endif /* SQLITE_OMIT_ATTACH */
80680 ** Initialize a DbFixer structure. This routine must be called prior
80681 ** to passing the structure to one of the sqliteFixAAAA() routines below.
80683 ** The return value indicates whether or not fixation is required. TRUE
80684 ** means we do need to fix the database references, FALSE means we do not.
80686 SQLITE_PRIVATE int sqlite3FixInit(
80687 DbFixer *pFix, /* The fixer to be initialized */
80688 Parse *pParse, /* Error messages will be written here */
80689 int iDb, /* This is the database that must be used */
80690 const char *zType, /* "view", "trigger", or "index" */
80691 const Token *pName /* Name of the view, trigger, or index */
80693 sqlite3 *db;
80695 if( NEVER(iDb<0) || iDb==1 ) return 0;
80696 db = pParse->db;
80697 assert( db->nDb>iDb );
80698 pFix->pParse = pParse;
80699 pFix->zDb = db->aDb[iDb].zName;
80700 pFix->zType = zType;
80701 pFix->pName = pName;
80702 return 1;
80706 ** The following set of routines walk through the parse tree and assign
80707 ** a specific database to all table references where the database name
80708 ** was left unspecified in the original SQL statement. The pFix structure
80709 ** must have been initialized by a prior call to sqlite3FixInit().
80711 ** These routines are used to make sure that an index, trigger, or
80712 ** view in one database does not refer to objects in a different database.
80713 ** (Exception: indices, triggers, and views in the TEMP database are
80714 ** allowed to refer to anything.) If a reference is explicitly made
80715 ** to an object in a different database, an error message is added to
80716 ** pParse->zErrMsg and these routines return non-zero. If everything
80717 ** checks out, these routines return 0.
80719 SQLITE_PRIVATE int sqlite3FixSrcList(
80720 DbFixer *pFix, /* Context of the fixation */
80721 SrcList *pList /* The Source list to check and modify */
80723 int i;
80724 const char *zDb;
80725 struct SrcList_item *pItem;
80727 if( NEVER(pList==0) ) return 0;
80728 zDb = pFix->zDb;
80729 for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
80730 if( pItem->zDatabase==0 ){
80731 pItem->zDatabase = sqlite3DbStrDup(pFix->pParse->db, zDb);
80732 }else if( sqlite3StrICmp(pItem->zDatabase,zDb)!=0 ){
80733 sqlite3ErrorMsg(pFix->pParse,
80734 "%s %T cannot reference objects in database %s",
80735 pFix->zType, pFix->pName, pItem->zDatabase);
80736 return 1;
80738 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
80739 if( sqlite3FixSelect(pFix, pItem->pSelect) ) return 1;
80740 if( sqlite3FixExpr(pFix, pItem->pOn) ) return 1;
80741 #endif
80743 return 0;
80745 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_TRIGGER)
80746 SQLITE_PRIVATE int sqlite3FixSelect(
80747 DbFixer *pFix, /* Context of the fixation */
80748 Select *pSelect /* The SELECT statement to be fixed to one database */
80750 while( pSelect ){
80751 if( sqlite3FixExprList(pFix, pSelect->pEList) ){
80752 return 1;
80754 if( sqlite3FixSrcList(pFix, pSelect->pSrc) ){
80755 return 1;
80757 if( sqlite3FixExpr(pFix, pSelect->pWhere) ){
80758 return 1;
80760 if( sqlite3FixExpr(pFix, pSelect->pHaving) ){
80761 return 1;
80763 pSelect = pSelect->pPrior;
80765 return 0;
80767 SQLITE_PRIVATE int sqlite3FixExpr(
80768 DbFixer *pFix, /* Context of the fixation */
80769 Expr *pExpr /* The expression to be fixed to one database */
80771 while( pExpr ){
80772 if( ExprHasAnyProperty(pExpr, EP_TokenOnly) ) break;
80773 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
80774 if( sqlite3FixSelect(pFix, pExpr->x.pSelect) ) return 1;
80775 }else{
80776 if( sqlite3FixExprList(pFix, pExpr->x.pList) ) return 1;
80778 if( sqlite3FixExpr(pFix, pExpr->pRight) ){
80779 return 1;
80781 pExpr = pExpr->pLeft;
80783 return 0;
80785 SQLITE_PRIVATE int sqlite3FixExprList(
80786 DbFixer *pFix, /* Context of the fixation */
80787 ExprList *pList /* The expression to be fixed to one database */
80789 int i;
80790 struct ExprList_item *pItem;
80791 if( pList==0 ) return 0;
80792 for(i=0, pItem=pList->a; i<pList->nExpr; i++, pItem++){
80793 if( sqlite3FixExpr(pFix, pItem->pExpr) ){
80794 return 1;
80797 return 0;
80799 #endif
80801 #ifndef SQLITE_OMIT_TRIGGER
80802 SQLITE_PRIVATE int sqlite3FixTriggerStep(
80803 DbFixer *pFix, /* Context of the fixation */
80804 TriggerStep *pStep /* The trigger step be fixed to one database */
80806 while( pStep ){
80807 if( sqlite3FixSelect(pFix, pStep->pSelect) ){
80808 return 1;
80810 if( sqlite3FixExpr(pFix, pStep->pWhere) ){
80811 return 1;
80813 if( sqlite3FixExprList(pFix, pStep->pExprList) ){
80814 return 1;
80816 pStep = pStep->pNext;
80818 return 0;
80820 #endif
80822 /************** End of attach.c **********************************************/
80823 /************** Begin file auth.c ********************************************/
80825 ** 2003 January 11
80827 ** The author disclaims copyright to this source code. In place of
80828 ** a legal notice, here is a blessing:
80830 ** May you do good and not evil.
80831 ** May you find forgiveness for yourself and forgive others.
80832 ** May you share freely, never taking more than you give.
80834 *************************************************************************
80835 ** This file contains code used to implement the sqlite3_set_authorizer()
80836 ** API. This facility is an optional feature of the library. Embedded
80837 ** systems that do not need this facility may omit it by recompiling
80838 ** the library with -DSQLITE_OMIT_AUTHORIZATION=1
80842 ** All of the code in this file may be omitted by defining a single
80843 ** macro.
80845 #ifndef SQLITE_OMIT_AUTHORIZATION
80848 ** Set or clear the access authorization function.
80850 ** The access authorization function is be called during the compilation
80851 ** phase to verify that the user has read and/or write access permission on
80852 ** various fields of the database. The first argument to the auth function
80853 ** is a copy of the 3rd argument to this routine. The second argument
80854 ** to the auth function is one of these constants:
80856 ** SQLITE_CREATE_INDEX
80857 ** SQLITE_CREATE_TABLE
80858 ** SQLITE_CREATE_TEMP_INDEX
80859 ** SQLITE_CREATE_TEMP_TABLE
80860 ** SQLITE_CREATE_TEMP_TRIGGER
80861 ** SQLITE_CREATE_TEMP_VIEW
80862 ** SQLITE_CREATE_TRIGGER
80863 ** SQLITE_CREATE_VIEW
80864 ** SQLITE_DELETE
80865 ** SQLITE_DROP_INDEX
80866 ** SQLITE_DROP_TABLE
80867 ** SQLITE_DROP_TEMP_INDEX
80868 ** SQLITE_DROP_TEMP_TABLE
80869 ** SQLITE_DROP_TEMP_TRIGGER
80870 ** SQLITE_DROP_TEMP_VIEW
80871 ** SQLITE_DROP_TRIGGER
80872 ** SQLITE_DROP_VIEW
80873 ** SQLITE_INSERT
80874 ** SQLITE_PRAGMA
80875 ** SQLITE_READ
80876 ** SQLITE_SELECT
80877 ** SQLITE_TRANSACTION
80878 ** SQLITE_UPDATE
80880 ** The third and fourth arguments to the auth function are the name of
80881 ** the table and the column that are being accessed. The auth function
80882 ** should return either SQLITE_OK, SQLITE_DENY, or SQLITE_IGNORE. If
80883 ** SQLITE_OK is returned, it means that access is allowed. SQLITE_DENY
80884 ** means that the SQL statement will never-run - the sqlite3_exec() call
80885 ** will return with an error. SQLITE_IGNORE means that the SQL statement
80886 ** should run but attempts to read the specified column will return NULL
80887 ** and attempts to write the column will be ignored.
80889 ** Setting the auth function to NULL disables this hook. The default
80890 ** setting of the auth function is NULL.
80892 SQLITE_API int sqlite3_set_authorizer(
80893 sqlite3 *db,
80894 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*),
80895 void *pArg
80897 sqlite3_mutex_enter(db->mutex);
80898 db->xAuth = xAuth;
80899 db->pAuthArg = pArg;
80900 sqlite3ExpirePreparedStatements(db);
80901 sqlite3_mutex_leave(db->mutex);
80902 return SQLITE_OK;
80906 ** Write an error message into pParse->zErrMsg that explains that the
80907 ** user-supplied authorization function returned an illegal value.
80909 static void sqliteAuthBadReturnCode(Parse *pParse){
80910 sqlite3ErrorMsg(pParse, "authorizer malfunction");
80911 pParse->rc = SQLITE_ERROR;
80915 ** Invoke the authorization callback for permission to read column zCol from
80916 ** table zTab in database zDb. This function assumes that an authorization
80917 ** callback has been registered (i.e. that sqlite3.xAuth is not NULL).
80919 ** If SQLITE_IGNORE is returned and pExpr is not NULL, then pExpr is changed
80920 ** to an SQL NULL expression. Otherwise, if pExpr is NULL, then SQLITE_IGNORE
80921 ** is treated as SQLITE_DENY. In this case an error is left in pParse.
80923 SQLITE_PRIVATE int sqlite3AuthReadCol(
80924 Parse *pParse, /* The parser context */
80925 const char *zTab, /* Table name */
80926 const char *zCol, /* Column name */
80927 int iDb /* Index of containing database. */
80929 sqlite3 *db = pParse->db; /* Database handle */
80930 char *zDb = db->aDb[iDb].zName; /* Name of attached database */
80931 int rc; /* Auth callback return code */
80933 rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext);
80934 if( rc==SQLITE_DENY ){
80935 if( db->nDb>2 || iDb!=0 ){
80936 sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol);
80937 }else{
80938 sqlite3ErrorMsg(pParse, "access to %s.%s is prohibited", zTab, zCol);
80940 pParse->rc = SQLITE_AUTH;
80941 }else if( rc!=SQLITE_IGNORE && rc!=SQLITE_OK ){
80942 sqliteAuthBadReturnCode(pParse);
80944 return rc;
80948 ** The pExpr should be a TK_COLUMN expression. The table referred to
80949 ** is in pTabList or else it is the NEW or OLD table of a trigger.
80950 ** Check to see if it is OK to read this particular column.
80952 ** If the auth function returns SQLITE_IGNORE, change the TK_COLUMN
80953 ** instruction into a TK_NULL. If the auth function returns SQLITE_DENY,
80954 ** then generate an error.
80956 SQLITE_PRIVATE void sqlite3AuthRead(
80957 Parse *pParse, /* The parser context */
80958 Expr *pExpr, /* The expression to check authorization on */
80959 Schema *pSchema, /* The schema of the expression */
80960 SrcList *pTabList /* All table that pExpr might refer to */
80962 sqlite3 *db = pParse->db;
80963 Table *pTab = 0; /* The table being read */
80964 const char *zCol; /* Name of the column of the table */
80965 int iSrc; /* Index in pTabList->a[] of table being read */
80966 int iDb; /* The index of the database the expression refers to */
80967 int iCol; /* Index of column in table */
80969 if( db->xAuth==0 ) return;
80970 iDb = sqlite3SchemaToIndex(pParse->db, pSchema);
80971 if( iDb<0 ){
80972 /* An attempt to read a column out of a subquery or other
80973 ** temporary table. */
80974 return;
80977 assert( pExpr->op==TK_COLUMN || pExpr->op==TK_TRIGGER );
80978 if( pExpr->op==TK_TRIGGER ){
80979 pTab = pParse->pTriggerTab;
80980 }else{
80981 assert( pTabList );
80982 for(iSrc=0; ALWAYS(iSrc<pTabList->nSrc); iSrc++){
80983 if( pExpr->iTable==pTabList->a[iSrc].iCursor ){
80984 pTab = pTabList->a[iSrc].pTab;
80985 break;
80989 iCol = pExpr->iColumn;
80990 if( NEVER(pTab==0) ) return;
80992 if( iCol>=0 ){
80993 assert( iCol<pTab->nCol );
80994 zCol = pTab->aCol[iCol].zName;
80995 }else if( pTab->iPKey>=0 ){
80996 assert( pTab->iPKey<pTab->nCol );
80997 zCol = pTab->aCol[pTab->iPKey].zName;
80998 }else{
80999 zCol = "ROWID";
81001 assert( iDb>=0 && iDb<db->nDb );
81002 if( SQLITE_IGNORE==sqlite3AuthReadCol(pParse, pTab->zName, zCol, iDb) ){
81003 pExpr->op = TK_NULL;
81008 ** Do an authorization check using the code and arguments given. Return
81009 ** either SQLITE_OK (zero) or SQLITE_IGNORE or SQLITE_DENY. If SQLITE_DENY
81010 ** is returned, then the error count and error message in pParse are
81011 ** modified appropriately.
81013 SQLITE_PRIVATE int sqlite3AuthCheck(
81014 Parse *pParse,
81015 int code,
81016 const char *zArg1,
81017 const char *zArg2,
81018 const char *zArg3
81020 sqlite3 *db = pParse->db;
81021 int rc;
81023 /* Don't do any authorization checks if the database is initialising
81024 ** or if the parser is being invoked from within sqlite3_declare_vtab.
81026 if( db->init.busy || IN_DECLARE_VTAB ){
81027 return SQLITE_OK;
81030 if( db->xAuth==0 ){
81031 return SQLITE_OK;
81033 rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext);
81034 if( rc==SQLITE_DENY ){
81035 sqlite3ErrorMsg(pParse, "not authorized");
81036 pParse->rc = SQLITE_AUTH;
81037 }else if( rc!=SQLITE_OK && rc!=SQLITE_IGNORE ){
81038 rc = SQLITE_DENY;
81039 sqliteAuthBadReturnCode(pParse);
81041 return rc;
81045 ** Push an authorization context. After this routine is called, the
81046 ** zArg3 argument to authorization callbacks will be zContext until
81047 ** popped. Or if pParse==0, this routine is a no-op.
81049 SQLITE_PRIVATE void sqlite3AuthContextPush(
81050 Parse *pParse,
81051 AuthContext *pContext,
81052 const char *zContext
81054 assert( pParse );
81055 pContext->pParse = pParse;
81056 pContext->zAuthContext = pParse->zAuthContext;
81057 pParse->zAuthContext = zContext;
81061 ** Pop an authorization context that was previously pushed
81062 ** by sqlite3AuthContextPush
81064 SQLITE_PRIVATE void sqlite3AuthContextPop(AuthContext *pContext){
81065 if( pContext->pParse ){
81066 pContext->pParse->zAuthContext = pContext->zAuthContext;
81067 pContext->pParse = 0;
81071 #endif /* SQLITE_OMIT_AUTHORIZATION */
81073 /************** End of auth.c ************************************************/
81074 /************** Begin file build.c *******************************************/
81076 ** 2001 September 15
81078 ** The author disclaims copyright to this source code. In place of
81079 ** a legal notice, here is a blessing:
81081 ** May you do good and not evil.
81082 ** May you find forgiveness for yourself and forgive others.
81083 ** May you share freely, never taking more than you give.
81085 *************************************************************************
81086 ** This file contains C code routines that are called by the SQLite parser
81087 ** when syntax rules are reduced. The routines in this file handle the
81088 ** following kinds of SQL syntax:
81090 ** CREATE TABLE
81091 ** DROP TABLE
81092 ** CREATE INDEX
81093 ** DROP INDEX
81094 ** creating ID lists
81095 ** BEGIN TRANSACTION
81096 ** COMMIT
81097 ** ROLLBACK
81101 ** This routine is called when a new SQL statement is beginning to
81102 ** be parsed. Initialize the pParse structure as needed.
81104 SQLITE_PRIVATE void sqlite3BeginParse(Parse *pParse, int explainFlag){
81105 pParse->explain = (u8)explainFlag;
81106 pParse->nVar = 0;
81109 #ifndef SQLITE_OMIT_SHARED_CACHE
81111 ** The TableLock structure is only used by the sqlite3TableLock() and
81112 ** codeTableLocks() functions.
81114 struct TableLock {
81115 int iDb; /* The database containing the table to be locked */
81116 int iTab; /* The root page of the table to be locked */
81117 u8 isWriteLock; /* True for write lock. False for a read lock */
81118 const char *zName; /* Name of the table */
81122 ** Record the fact that we want to lock a table at run-time.
81124 ** The table to be locked has root page iTab and is found in database iDb.
81125 ** A read or a write lock can be taken depending on isWritelock.
81127 ** This routine just records the fact that the lock is desired. The
81128 ** code to make the lock occur is generated by a later call to
81129 ** codeTableLocks() which occurs during sqlite3FinishCoding().
81131 SQLITE_PRIVATE void sqlite3TableLock(
81132 Parse *pParse, /* Parsing context */
81133 int iDb, /* Index of the database containing the table to lock */
81134 int iTab, /* Root page number of the table to be locked */
81135 u8 isWriteLock, /* True for a write lock */
81136 const char *zName /* Name of the table to be locked */
81138 Parse *pToplevel = sqlite3ParseToplevel(pParse);
81139 int i;
81140 int nBytes;
81141 TableLock *p;
81142 assert( iDb>=0 );
81144 for(i=0; i<pToplevel->nTableLock; i++){
81145 p = &pToplevel->aTableLock[i];
81146 if( p->iDb==iDb && p->iTab==iTab ){
81147 p->isWriteLock = (p->isWriteLock || isWriteLock);
81148 return;
81152 nBytes = sizeof(TableLock) * (pToplevel->nTableLock+1);
81153 pToplevel->aTableLock =
81154 sqlite3DbReallocOrFree(pToplevel->db, pToplevel->aTableLock, nBytes);
81155 if( pToplevel->aTableLock ){
81156 p = &pToplevel->aTableLock[pToplevel->nTableLock++];
81157 p->iDb = iDb;
81158 p->iTab = iTab;
81159 p->isWriteLock = isWriteLock;
81160 p->zName = zName;
81161 }else{
81162 pToplevel->nTableLock = 0;
81163 pToplevel->db->mallocFailed = 1;
81168 ** Code an OP_TableLock instruction for each table locked by the
81169 ** statement (configured by calls to sqlite3TableLock()).
81171 static void codeTableLocks(Parse *pParse){
81172 int i;
81173 Vdbe *pVdbe;
81175 pVdbe = sqlite3GetVdbe(pParse);
81176 assert( pVdbe!=0 ); /* sqlite3GetVdbe cannot fail: VDBE already allocated */
81178 for(i=0; i<pParse->nTableLock; i++){
81179 TableLock *p = &pParse->aTableLock[i];
81180 int p1 = p->iDb;
81181 sqlite3VdbeAddOp4(pVdbe, OP_TableLock, p1, p->iTab, p->isWriteLock,
81182 p->zName, P4_STATIC);
81185 #else
81186 #define codeTableLocks(x)
81187 #endif
81190 ** This routine is called after a single SQL statement has been
81191 ** parsed and a VDBE program to execute that statement has been
81192 ** prepared. This routine puts the finishing touches on the
81193 ** VDBE program and resets the pParse structure for the next
81194 ** parse.
81196 ** Note that if an error occurred, it might be the case that
81197 ** no VDBE code was generated.
81199 SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
81200 sqlite3 *db;
81201 Vdbe *v;
81203 db = pParse->db;
81204 if( db->mallocFailed ) return;
81205 if( pParse->nested ) return;
81206 if( pParse->nErr ) return;
81208 /* Begin by generating some termination code at the end of the
81209 ** vdbe program
81211 v = sqlite3GetVdbe(pParse);
81212 assert( !pParse->isMultiWrite
81213 || sqlite3VdbeAssertMayAbort(v, pParse->mayAbort));
81214 if( v ){
81215 sqlite3VdbeAddOp0(v, OP_Halt);
81217 /* The cookie mask contains one bit for each database file open.
81218 ** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are
81219 ** set for each database that is used. Generate code to start a
81220 ** transaction on each used database and to verify the schema cookie
81221 ** on each used database.
81223 if( pParse->cookieGoto>0 ){
81224 yDbMask mask;
81225 int iDb;
81226 sqlite3VdbeJumpHere(v, pParse->cookieGoto-1);
81227 for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){
81228 if( (mask & pParse->cookieMask)==0 ) continue;
81229 sqlite3VdbeUsesBtree(v, iDb);
81230 sqlite3VdbeAddOp2(v,OP_Transaction, iDb, (mask & pParse->writeMask)!=0);
81231 if( db->init.busy==0 ){
81232 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81233 sqlite3VdbeAddOp3(v, OP_VerifyCookie,
81234 iDb, pParse->cookieValue[iDb],
81235 db->aDb[iDb].pSchema->iGeneration);
81238 #ifndef SQLITE_OMIT_VIRTUALTABLE
81240 int i;
81241 for(i=0; i<pParse->nVtabLock; i++){
81242 char *vtab = (char *)sqlite3GetVTable(db, pParse->apVtabLock[i]);
81243 sqlite3VdbeAddOp4(v, OP_VBegin, 0, 0, 0, vtab, P4_VTAB);
81245 pParse->nVtabLock = 0;
81247 #endif
81249 /* Once all the cookies have been verified and transactions opened,
81250 ** obtain the required table-locks. This is a no-op unless the
81251 ** shared-cache feature is enabled.
81253 codeTableLocks(pParse);
81255 /* Initialize any AUTOINCREMENT data structures required.
81257 sqlite3AutoincrementBegin(pParse);
81259 /* Finally, jump back to the beginning of the executable code. */
81260 sqlite3VdbeAddOp2(v, OP_Goto, 0, pParse->cookieGoto);
81265 /* Get the VDBE program ready for execution
81267 if( v && ALWAYS(pParse->nErr==0) && !db->mallocFailed ){
81268 #ifdef SQLITE_DEBUG
81269 FILE *trace = (db->flags & SQLITE_VdbeTrace)!=0 ? stdout : 0;
81270 sqlite3VdbeTrace(v, trace);
81271 #endif
81272 assert( pParse->iCacheLevel==0 ); /* Disables and re-enables match */
81273 /* A minimum of one cursor is required if autoincrement is used
81274 * See ticket [a696379c1f08866] */
81275 if( pParse->pAinc!=0 && pParse->nTab==0 ) pParse->nTab = 1;
81276 sqlite3VdbeMakeReady(v, pParse);
81277 pParse->rc = SQLITE_DONE;
81278 pParse->colNamesSet = 0;
81279 }else{
81280 pParse->rc = SQLITE_ERROR;
81282 pParse->nTab = 0;
81283 pParse->nMem = 0;
81284 pParse->nSet = 0;
81285 pParse->nVar = 0;
81286 pParse->cookieMask = 0;
81287 pParse->cookieGoto = 0;
81291 ** Run the parser and code generator recursively in order to generate
81292 ** code for the SQL statement given onto the end of the pParse context
81293 ** currently under construction. When the parser is run recursively
81294 ** this way, the final OP_Halt is not appended and other initialization
81295 ** and finalization steps are omitted because those are handling by the
81296 ** outermost parser.
81298 ** Not everything is nestable. This facility is designed to permit
81299 ** INSERT, UPDATE, and DELETE operations against SQLITE_MASTER. Use
81300 ** care if you decide to try to use this routine for some other purposes.
81302 SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
81303 va_list ap;
81304 char *zSql;
81305 char *zErrMsg = 0;
81306 sqlite3 *db = pParse->db;
81307 # define SAVE_SZ (sizeof(Parse) - offsetof(Parse,nVar))
81308 char saveBuf[SAVE_SZ];
81310 if( pParse->nErr ) return;
81311 assert( pParse->nested<10 ); /* Nesting should only be of limited depth */
81312 va_start(ap, zFormat);
81313 zSql = sqlite3VMPrintf(db, zFormat, ap);
81314 va_end(ap);
81315 if( zSql==0 ){
81316 return; /* A malloc must have failed */
81318 pParse->nested++;
81319 memcpy(saveBuf, &pParse->nVar, SAVE_SZ);
81320 memset(&pParse->nVar, 0, SAVE_SZ);
81321 sqlite3RunParser(pParse, zSql, &zErrMsg);
81322 sqlite3DbFree(db, zErrMsg);
81323 sqlite3DbFree(db, zSql);
81324 memcpy(&pParse->nVar, saveBuf, SAVE_SZ);
81325 pParse->nested--;
81329 ** Locate the in-memory structure that describes a particular database
81330 ** table given the name of that table and (optionally) the name of the
81331 ** database containing the table. Return NULL if not found.
81333 ** If zDatabase is 0, all databases are searched for the table and the
81334 ** first matching table is returned. (No checking for duplicate table
81335 ** names is done.) The search order is TEMP first, then MAIN, then any
81336 ** auxiliary databases added using the ATTACH command.
81338 ** See also sqlite3LocateTable().
81340 SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
81341 Table *p = 0;
81342 int i;
81343 int nName;
81344 assert( zName!=0 );
81345 nName = sqlite3Strlen30(zName);
81346 /* All mutexes are required for schema access. Make sure we hold them. */
81347 assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
81348 for(i=OMIT_TEMPDB; i<db->nDb; i++){
81349 int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
81350 if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue;
81351 assert( sqlite3SchemaMutexHeld(db, j, 0) );
81352 p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, nName);
81353 if( p ) break;
81355 return p;
81359 ** Locate the in-memory structure that describes a particular database
81360 ** table given the name of that table and (optionally) the name of the
81361 ** database containing the table. Return NULL if not found. Also leave an
81362 ** error message in pParse->zErrMsg.
81364 ** The difference between this routine and sqlite3FindTable() is that this
81365 ** routine leaves an error message in pParse->zErrMsg where
81366 ** sqlite3FindTable() does not.
81368 SQLITE_PRIVATE Table *sqlite3LocateTable(
81369 Parse *pParse, /* context in which to report errors */
81370 int isView, /* True if looking for a VIEW rather than a TABLE */
81371 const char *zName, /* Name of the table we are looking for */
81372 const char *zDbase /* Name of the database. Might be NULL */
81374 Table *p;
81376 /* Read the database schema. If an error occurs, leave an error message
81377 ** and code in pParse and return NULL. */
81378 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
81379 return 0;
81382 p = sqlite3FindTable(pParse->db, zName, zDbase);
81383 if( p==0 ){
81384 const char *zMsg = isView ? "no such view" : "no such table";
81385 if( zDbase ){
81386 sqlite3ErrorMsg(pParse, "%s: %s.%s", zMsg, zDbase, zName);
81387 }else{
81388 sqlite3ErrorMsg(pParse, "%s: %s", zMsg, zName);
81390 pParse->checkSchema = 1;
81392 return p;
81396 ** Locate the in-memory structure that describes
81397 ** a particular index given the name of that index
81398 ** and the name of the database that contains the index.
81399 ** Return NULL if not found.
81401 ** If zDatabase is 0, all databases are searched for the
81402 ** table and the first matching index is returned. (No checking
81403 ** for duplicate index names is done.) The search order is
81404 ** TEMP first, then MAIN, then any auxiliary databases added
81405 ** using the ATTACH command.
81407 SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){
81408 Index *p = 0;
81409 int i;
81410 int nName = sqlite3Strlen30(zName);
81411 /* All mutexes are required for schema access. Make sure we hold them. */
81412 assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
81413 for(i=OMIT_TEMPDB; i<db->nDb; i++){
81414 int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
81415 Schema *pSchema = db->aDb[j].pSchema;
81416 assert( pSchema );
81417 if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue;
81418 assert( sqlite3SchemaMutexHeld(db, j, 0) );
81419 p = sqlite3HashFind(&pSchema->idxHash, zName, nName);
81420 if( p ) break;
81422 return p;
81426 ** Reclaim the memory used by an index
81428 static void freeIndex(sqlite3 *db, Index *p){
81429 #ifndef SQLITE_OMIT_ANALYZE
81430 sqlite3DeleteIndexSamples(db, p);
81431 #endif
81432 sqlite3DbFree(db, p->zColAff);
81433 sqlite3DbFree(db, p);
81437 ** For the index called zIdxName which is found in the database iDb,
81438 ** unlike that index from its Table then remove the index from
81439 ** the index hash table and free all memory structures associated
81440 ** with the index.
81442 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){
81443 Index *pIndex;
81444 int len;
81445 Hash *pHash;
81447 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81448 pHash = &db->aDb[iDb].pSchema->idxHash;
81449 len = sqlite3Strlen30(zIdxName);
81450 pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0);
81451 if( ALWAYS(pIndex) ){
81452 if( pIndex->pTable->pIndex==pIndex ){
81453 pIndex->pTable->pIndex = pIndex->pNext;
81454 }else{
81455 Index *p;
81456 /* Justification of ALWAYS(); The index must be on the list of
81457 ** indices. */
81458 p = pIndex->pTable->pIndex;
81459 while( ALWAYS(p) && p->pNext!=pIndex ){ p = p->pNext; }
81460 if( ALWAYS(p && p->pNext==pIndex) ){
81461 p->pNext = pIndex->pNext;
81464 freeIndex(db, pIndex);
81466 db->flags |= SQLITE_InternChanges;
81470 ** Erase all schema information from the in-memory hash tables of
81471 ** a single database. This routine is called to reclaim memory
81472 ** before the database closes. It is also called during a rollback
81473 ** if there were schema changes during the transaction or if a
81474 ** schema-cookie mismatch occurs.
81476 ** If iDb<0 then reset the internal schema tables for all database
81477 ** files. If iDb>=0 then reset the internal schema for only the
81478 ** single file indicated.
81480 SQLITE_PRIVATE void sqlite3ResetInternalSchema(sqlite3 *db, int iDb){
81481 int i, j;
81482 assert( iDb<db->nDb );
81484 if( iDb>=0 ){
81485 /* Case 1: Reset the single schema identified by iDb */
81486 Db *pDb = &db->aDb[iDb];
81487 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81488 assert( pDb->pSchema!=0 );
81489 sqlite3SchemaClear(pDb->pSchema);
81491 /* If any database other than TEMP is reset, then also reset TEMP
81492 ** since TEMP might be holding triggers that reference tables in the
81493 ** other database.
81495 if( iDb!=1 ){
81496 pDb = &db->aDb[1];
81497 assert( pDb->pSchema!=0 );
81498 sqlite3SchemaClear(pDb->pSchema);
81500 return;
81502 /* Case 2 (from here to the end): Reset all schemas for all attached
81503 ** databases. */
81504 assert( iDb<0 );
81505 sqlite3BtreeEnterAll(db);
81506 for(i=0; i<db->nDb; i++){
81507 Db *pDb = &db->aDb[i];
81508 if( pDb->pSchema ){
81509 sqlite3SchemaClear(pDb->pSchema);
81512 db->flags &= ~SQLITE_InternChanges;
81513 sqlite3VtabUnlockList(db);
81514 sqlite3BtreeLeaveAll(db);
81516 /* If one or more of the auxiliary database files has been closed,
81517 ** then remove them from the auxiliary database list. We take the
81518 ** opportunity to do this here since we have just deleted all of the
81519 ** schema hash tables and therefore do not have to make any changes
81520 ** to any of those tables.
81522 for(i=j=2; i<db->nDb; i++){
81523 struct Db *pDb = &db->aDb[i];
81524 if( pDb->pBt==0 ){
81525 sqlite3DbFree(db, pDb->zName);
81526 pDb->zName = 0;
81527 continue;
81529 if( j<i ){
81530 db->aDb[j] = db->aDb[i];
81532 j++;
81534 memset(&db->aDb[j], 0, (db->nDb-j)*sizeof(db->aDb[j]));
81535 db->nDb = j;
81536 if( db->nDb<=2 && db->aDb!=db->aDbStatic ){
81537 memcpy(db->aDbStatic, db->aDb, 2*sizeof(db->aDb[0]));
81538 sqlite3DbFree(db, db->aDb);
81539 db->aDb = db->aDbStatic;
81544 ** This routine is called when a commit occurs.
81546 SQLITE_PRIVATE void sqlite3CommitInternalChanges(sqlite3 *db){
81547 db->flags &= ~SQLITE_InternChanges;
81551 ** Delete memory allocated for the column names of a table or view (the
81552 ** Table.aCol[] array).
81554 static void sqliteDeleteColumnNames(sqlite3 *db, Table *pTable){
81555 int i;
81556 Column *pCol;
81557 assert( pTable!=0 );
81558 if( (pCol = pTable->aCol)!=0 ){
81559 for(i=0; i<pTable->nCol; i++, pCol++){
81560 sqlite3DbFree(db, pCol->zName);
81561 sqlite3ExprDelete(db, pCol->pDflt);
81562 sqlite3DbFree(db, pCol->zDflt);
81563 sqlite3DbFree(db, pCol->zType);
81564 sqlite3DbFree(db, pCol->zColl);
81566 sqlite3DbFree(db, pTable->aCol);
81571 ** Remove the memory data structures associated with the given
81572 ** Table. No changes are made to disk by this routine.
81574 ** This routine just deletes the data structure. It does not unlink
81575 ** the table data structure from the hash table. But it does destroy
81576 ** memory structures of the indices and foreign keys associated with
81577 ** the table.
81579 SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
81580 Index *pIndex, *pNext;
81582 assert( !pTable || pTable->nRef>0 );
81584 /* Do not delete the table until the reference count reaches zero. */
81585 if( !pTable ) return;
81586 if( ((!db || db->pnBytesFreed==0) && (--pTable->nRef)>0) ) return;
81588 /* Delete all indices associated with this table. */
81589 for(pIndex = pTable->pIndex; pIndex; pIndex=pNext){
81590 pNext = pIndex->pNext;
81591 assert( pIndex->pSchema==pTable->pSchema );
81592 if( !db || db->pnBytesFreed==0 ){
81593 char *zName = pIndex->zName;
81594 TESTONLY ( Index *pOld = ) sqlite3HashInsert(
81595 &pIndex->pSchema->idxHash, zName, sqlite3Strlen30(zName), 0
81597 assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
81598 assert( pOld==pIndex || pOld==0 );
81600 freeIndex(db, pIndex);
81603 /* Delete any foreign keys attached to this table. */
81604 sqlite3FkDelete(db, pTable);
81606 /* Delete the Table structure itself.
81608 sqliteDeleteColumnNames(db, pTable);
81609 sqlite3DbFree(db, pTable->zName);
81610 sqlite3DbFree(db, pTable->zColAff);
81611 sqlite3SelectDelete(db, pTable->pSelect);
81612 #ifndef SQLITE_OMIT_CHECK
81613 sqlite3ExprDelete(db, pTable->pCheck);
81614 #endif
81615 #ifndef SQLITE_OMIT_VIRTUALTABLE
81616 sqlite3VtabClear(db, pTable);
81617 #endif
81618 sqlite3DbFree(db, pTable);
81622 ** Unlink the given table from the hash tables and the delete the
81623 ** table structure with all its indices and foreign keys.
81625 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char *zTabName){
81626 Table *p;
81627 Db *pDb;
81629 assert( db!=0 );
81630 assert( iDb>=0 && iDb<db->nDb );
81631 assert( zTabName );
81632 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81633 testcase( zTabName[0]==0 ); /* Zero-length table names are allowed */
81634 pDb = &db->aDb[iDb];
81635 p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName,
81636 sqlite3Strlen30(zTabName),0);
81637 sqlite3DeleteTable(db, p);
81638 db->flags |= SQLITE_InternChanges;
81642 ** Given a token, return a string that consists of the text of that
81643 ** token. Space to hold the returned string
81644 ** is obtained from sqliteMalloc() and must be freed by the calling
81645 ** function.
81647 ** Any quotation marks (ex: "name", 'name', [name], or `name`) that
81648 ** surround the body of the token are removed.
81650 ** Tokens are often just pointers into the original SQL text and so
81651 ** are not \000 terminated and are not persistent. The returned string
81652 ** is \000 terminated and is persistent.
81654 SQLITE_PRIVATE char *sqlite3NameFromToken(sqlite3 *db, Token *pName){
81655 char *zName;
81656 if( pName ){
81657 zName = sqlite3DbStrNDup(db, (char*)pName->z, pName->n);
81658 sqlite3Dequote(zName);
81659 }else{
81660 zName = 0;
81662 return zName;
81666 ** Open the sqlite_master table stored in database number iDb for
81667 ** writing. The table is opened using cursor 0.
81669 SQLITE_PRIVATE void sqlite3OpenMasterTable(Parse *p, int iDb){
81670 Vdbe *v = sqlite3GetVdbe(p);
81671 sqlite3TableLock(p, iDb, MASTER_ROOT, 1, SCHEMA_TABLE(iDb));
81672 sqlite3VdbeAddOp3(v, OP_OpenWrite, 0, MASTER_ROOT, iDb);
81673 sqlite3VdbeChangeP4(v, -1, (char *)5, P4_INT32); /* 5 column table */
81674 if( p->nTab==0 ){
81675 p->nTab = 1;
81680 ** Parameter zName points to a nul-terminated buffer containing the name
81681 ** of a database ("main", "temp" or the name of an attached db). This
81682 ** function returns the index of the named database in db->aDb[], or
81683 ** -1 if the named db cannot be found.
81685 SQLITE_PRIVATE int sqlite3FindDbName(sqlite3 *db, const char *zName){
81686 int i = -1; /* Database number */
81687 if( zName ){
81688 Db *pDb;
81689 int n = sqlite3Strlen30(zName);
81690 for(i=(db->nDb-1), pDb=&db->aDb[i]; i>=0; i--, pDb--){
81691 if( (!OMIT_TEMPDB || i!=1 ) && n==sqlite3Strlen30(pDb->zName) &&
81692 0==sqlite3StrICmp(pDb->zName, zName) ){
81693 break;
81697 return i;
81701 ** The token *pName contains the name of a database (either "main" or
81702 ** "temp" or the name of an attached db). This routine returns the
81703 ** index of the named database in db->aDb[], or -1 if the named db
81704 ** does not exist.
81706 SQLITE_PRIVATE int sqlite3FindDb(sqlite3 *db, Token *pName){
81707 int i; /* Database number */
81708 char *zName; /* Name we are searching for */
81709 zName = sqlite3NameFromToken(db, pName);
81710 i = sqlite3FindDbName(db, zName);
81711 sqlite3DbFree(db, zName);
81712 return i;
81715 /* The table or view or trigger name is passed to this routine via tokens
81716 ** pName1 and pName2. If the table name was fully qualified, for example:
81718 ** CREATE TABLE xxx.yyy (...);
81720 ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
81721 ** the table name is not fully qualified, i.e.:
81723 ** CREATE TABLE yyy(...);
81725 ** Then pName1 is set to "yyy" and pName2 is "".
81727 ** This routine sets the *ppUnqual pointer to point at the token (pName1 or
81728 ** pName2) that stores the unqualified table name. The index of the
81729 ** database "xxx" is returned.
81731 SQLITE_PRIVATE int sqlite3TwoPartName(
81732 Parse *pParse, /* Parsing and code generating context */
81733 Token *pName1, /* The "xxx" in the name "xxx.yyy" or "xxx" */
81734 Token *pName2, /* The "yyy" in the name "xxx.yyy" */
81735 Token **pUnqual /* Write the unqualified object name here */
81737 int iDb; /* Database holding the object */
81738 sqlite3 *db = pParse->db;
81740 if( ALWAYS(pName2!=0) && pName2->n>0 ){
81741 if( db->init.busy ) {
81742 sqlite3ErrorMsg(pParse, "corrupt database");
81743 pParse->nErr++;
81744 return -1;
81746 *pUnqual = pName2;
81747 iDb = sqlite3FindDb(db, pName1);
81748 if( iDb<0 ){
81749 sqlite3ErrorMsg(pParse, "unknown database %T", pName1);
81750 pParse->nErr++;
81751 return -1;
81753 }else{
81754 assert( db->init.iDb==0 || db->init.busy );
81755 iDb = db->init.iDb;
81756 *pUnqual = pName1;
81758 return iDb;
81762 ** This routine is used to check if the UTF-8 string zName is a legal
81763 ** unqualified name for a new schema object (table, index, view or
81764 ** trigger). All names are legal except those that begin with the string
81765 ** "sqlite_" (in upper, lower or mixed case). This portion of the namespace
81766 ** is reserved for internal use.
81768 SQLITE_PRIVATE int sqlite3CheckObjectName(Parse *pParse, const char *zName){
81769 if( !pParse->db->init.busy && pParse->nested==0
81770 && (pParse->db->flags & SQLITE_WriteSchema)==0
81771 && 0==sqlite3StrNICmp(zName, "sqlite_", 7) ){
81772 sqlite3ErrorMsg(pParse, "object name reserved for internal use: %s", zName);
81773 return SQLITE_ERROR;
81775 return SQLITE_OK;
81779 ** Begin constructing a new table representation in memory. This is
81780 ** the first of several action routines that get called in response
81781 ** to a CREATE TABLE statement. In particular, this routine is called
81782 ** after seeing tokens "CREATE" and "TABLE" and the table name. The isTemp
81783 ** flag is true if the table should be stored in the auxiliary database
81784 ** file instead of in the main database file. This is normally the case
81785 ** when the "TEMP" or "TEMPORARY" keyword occurs in between
81786 ** CREATE and TABLE.
81788 ** The new table record is initialized and put in pParse->pNewTable.
81789 ** As more of the CREATE TABLE statement is parsed, additional action
81790 ** routines will be called to add more information to this record.
81791 ** At the end of the CREATE TABLE statement, the sqlite3EndTable() routine
81792 ** is called to complete the construction of the new table record.
81794 SQLITE_PRIVATE void sqlite3StartTable(
81795 Parse *pParse, /* Parser context */
81796 Token *pName1, /* First part of the name of the table or view */
81797 Token *pName2, /* Second part of the name of the table or view */
81798 int isTemp, /* True if this is a TEMP table */
81799 int isView, /* True if this is a VIEW */
81800 int isVirtual, /* True if this is a VIRTUAL table */
81801 int noErr /* Do nothing if table already exists */
81803 Table *pTable;
81804 char *zName = 0; /* The name of the new table */
81805 sqlite3 *db = pParse->db;
81806 Vdbe *v;
81807 int iDb; /* Database number to create the table in */
81808 Token *pName; /* Unqualified name of the table to create */
81810 /* The table or view name to create is passed to this routine via tokens
81811 ** pName1 and pName2. If the table name was fully qualified, for example:
81813 ** CREATE TABLE xxx.yyy (...);
81815 ** Then pName1 is set to "xxx" and pName2 "yyy". On the other hand if
81816 ** the table name is not fully qualified, i.e.:
81818 ** CREATE TABLE yyy(...);
81820 ** Then pName1 is set to "yyy" and pName2 is "".
81822 ** The call below sets the pName pointer to point at the token (pName1 or
81823 ** pName2) that stores the unqualified table name. The variable iDb is
81824 ** set to the index of the database that the table or view is to be
81825 ** created in.
81827 iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
81828 if( iDb<0 ) return;
81829 if( !OMIT_TEMPDB && isTemp && pName2->n>0 && iDb!=1 ){
81830 /* If creating a temp table, the name may not be qualified. Unless
81831 ** the database name is "temp" anyway. */
81832 sqlite3ErrorMsg(pParse, "temporary table name must be unqualified");
81833 return;
81835 if( !OMIT_TEMPDB && isTemp ) iDb = 1;
81837 pParse->sNameToken = *pName;
81838 zName = sqlite3NameFromToken(db, pName);
81839 if( zName==0 ) return;
81840 if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
81841 goto begin_table_error;
81843 if( db->init.iDb==1 ) isTemp = 1;
81844 #ifndef SQLITE_OMIT_AUTHORIZATION
81845 assert( (isTemp & 1)==isTemp );
81847 int code;
81848 char *zDb = db->aDb[iDb].zName;
81849 if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(isTemp), 0, zDb) ){
81850 goto begin_table_error;
81852 if( isView ){
81853 if( !OMIT_TEMPDB && isTemp ){
81854 code = SQLITE_CREATE_TEMP_VIEW;
81855 }else{
81856 code = SQLITE_CREATE_VIEW;
81858 }else{
81859 if( !OMIT_TEMPDB && isTemp ){
81860 code = SQLITE_CREATE_TEMP_TABLE;
81861 }else{
81862 code = SQLITE_CREATE_TABLE;
81865 if( !isVirtual && sqlite3AuthCheck(pParse, code, zName, 0, zDb) ){
81866 goto begin_table_error;
81869 #endif
81871 /* Make sure the new table name does not collide with an existing
81872 ** index or table name in the same database. Issue an error message if
81873 ** it does. The exception is if the statement being parsed was passed
81874 ** to an sqlite3_declare_vtab() call. In that case only the column names
81875 ** and types will be used, so there is no need to test for namespace
81876 ** collisions.
81878 if( !IN_DECLARE_VTAB ){
81879 char *zDb = db->aDb[iDb].zName;
81880 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
81881 goto begin_table_error;
81883 pTable = sqlite3FindTable(db, zName, zDb);
81884 if( pTable ){
81885 if( !noErr ){
81886 sqlite3ErrorMsg(pParse, "table %T already exists", pName);
81887 }else{
81888 assert( !db->init.busy );
81889 sqlite3CodeVerifySchema(pParse, iDb);
81891 goto begin_table_error;
81893 if( sqlite3FindIndex(db, zName, zDb)!=0 ){
81894 sqlite3ErrorMsg(pParse, "there is already an index named %s", zName);
81895 goto begin_table_error;
81899 pTable = sqlite3DbMallocZero(db, sizeof(Table));
81900 if( pTable==0 ){
81901 db->mallocFailed = 1;
81902 pParse->rc = SQLITE_NOMEM;
81903 pParse->nErr++;
81904 goto begin_table_error;
81906 pTable->zName = zName;
81907 pTable->iPKey = -1;
81908 pTable->pSchema = db->aDb[iDb].pSchema;
81909 pTable->nRef = 1;
81910 pTable->nRowEst = 1000000;
81911 assert( pParse->pNewTable==0 );
81912 pParse->pNewTable = pTable;
81914 /* If this is the magic sqlite_sequence table used by autoincrement,
81915 ** then record a pointer to this table in the main database structure
81916 ** so that INSERT can find the table easily.
81918 #ifndef SQLITE_OMIT_AUTOINCREMENT
81919 if( !pParse->nested && strcmp(zName, "sqlite_sequence")==0 ){
81920 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
81921 pTable->pSchema->pSeqTab = pTable;
81923 #endif
81925 /* Begin generating the code that will insert the table record into
81926 ** the SQLITE_MASTER table. Note in particular that we must go ahead
81927 ** and allocate the record number for the table entry now. Before any
81928 ** PRIMARY KEY or UNIQUE keywords are parsed. Those keywords will cause
81929 ** indices to be created and the table record must come before the
81930 ** indices. Hence, the record number for the table must be allocated
81931 ** now.
81933 if( !db->init.busy && (v = sqlite3GetVdbe(pParse))!=0 ){
81934 int j1;
81935 int fileFormat;
81936 int reg1, reg2, reg3;
81937 sqlite3BeginWriteOperation(pParse, 0, iDb);
81939 #ifndef SQLITE_OMIT_VIRTUALTABLE
81940 if( isVirtual ){
81941 sqlite3VdbeAddOp0(v, OP_VBegin);
81943 #endif
81945 /* If the file format and encoding in the database have not been set,
81946 ** set them now.
81948 reg1 = pParse->regRowid = ++pParse->nMem;
81949 reg2 = pParse->regRoot = ++pParse->nMem;
81950 reg3 = ++pParse->nMem;
81951 sqlite3VdbeAddOp3(v, OP_ReadCookie, iDb, reg3, BTREE_FILE_FORMAT);
81952 sqlite3VdbeUsesBtree(v, iDb);
81953 j1 = sqlite3VdbeAddOp1(v, OP_If, reg3);
81954 fileFormat = (db->flags & SQLITE_LegacyFileFmt)!=0 ?
81955 1 : SQLITE_MAX_FILE_FORMAT;
81956 sqlite3VdbeAddOp2(v, OP_Integer, fileFormat, reg3);
81957 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_FILE_FORMAT, reg3);
81958 sqlite3VdbeAddOp2(v, OP_Integer, ENC(db), reg3);
81959 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_TEXT_ENCODING, reg3);
81960 sqlite3VdbeJumpHere(v, j1);
81962 /* This just creates a place-holder record in the sqlite_master table.
81963 ** The record created does not contain anything yet. It will be replaced
81964 ** by the real entry in code generated at sqlite3EndTable().
81966 ** The rowid for the new entry is left in register pParse->regRowid.
81967 ** The root page number of the new table is left in reg pParse->regRoot.
81968 ** The rowid and root page number values are needed by the code that
81969 ** sqlite3EndTable will generate.
81971 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
81972 if( isView || isVirtual ){
81973 sqlite3VdbeAddOp2(v, OP_Integer, 0, reg2);
81974 }else
81975 #endif
81977 sqlite3VdbeAddOp2(v, OP_CreateTable, iDb, reg2);
81979 sqlite3OpenMasterTable(pParse, iDb);
81980 sqlite3VdbeAddOp2(v, OP_NewRowid, 0, reg1);
81981 sqlite3VdbeAddOp2(v, OP_Null, 0, reg3);
81982 sqlite3VdbeAddOp3(v, OP_Insert, 0, reg3, reg1);
81983 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
81984 sqlite3VdbeAddOp0(v, OP_Close);
81987 /* Normal (non-error) return. */
81988 return;
81990 /* If an error occurs, we jump here */
81991 begin_table_error:
81992 sqlite3DbFree(db, zName);
81993 return;
81997 ** This macro is used to compare two strings in a case-insensitive manner.
81998 ** It is slightly faster than calling sqlite3StrICmp() directly, but
81999 ** produces larger code.
82001 ** WARNING: This macro is not compatible with the strcmp() family. It
82002 ** returns true if the two strings are equal, otherwise false.
82004 #define STRICMP(x, y) (\
82005 sqlite3UpperToLower[*(unsigned char *)(x)]== \
82006 sqlite3UpperToLower[*(unsigned char *)(y)] \
82007 && sqlite3StrICmp((x)+1,(y)+1)==0 )
82010 ** Add a new column to the table currently being constructed.
82012 ** The parser calls this routine once for each column declaration
82013 ** in a CREATE TABLE statement. sqlite3StartTable() gets called
82014 ** first to get things going. Then this routine is called for each
82015 ** column.
82017 SQLITE_PRIVATE void sqlite3AddColumn(Parse *pParse, Token *pName){
82018 Table *p;
82019 int i;
82020 char *z;
82021 Column *pCol;
82022 sqlite3 *db = pParse->db;
82023 if( (p = pParse->pNewTable)==0 ) return;
82024 #if SQLITE_MAX_COLUMN
82025 if( p->nCol+1>db->aLimit[SQLITE_LIMIT_COLUMN] ){
82026 sqlite3ErrorMsg(pParse, "too many columns on %s", p->zName);
82027 return;
82029 #endif
82030 z = sqlite3NameFromToken(db, pName);
82031 if( z==0 ) return;
82032 for(i=0; i<p->nCol; i++){
82033 if( STRICMP(z, p->aCol[i].zName) ){
82034 sqlite3ErrorMsg(pParse, "duplicate column name: %s", z);
82035 sqlite3DbFree(db, z);
82036 return;
82039 if( (p->nCol & 0x7)==0 ){
82040 Column *aNew;
82041 aNew = sqlite3DbRealloc(db,p->aCol,(p->nCol+8)*sizeof(p->aCol[0]));
82042 if( aNew==0 ){
82043 sqlite3DbFree(db, z);
82044 return;
82046 p->aCol = aNew;
82048 pCol = &p->aCol[p->nCol];
82049 memset(pCol, 0, sizeof(p->aCol[0]));
82050 pCol->zName = z;
82052 /* If there is no type specified, columns have the default affinity
82053 ** 'NONE'. If there is a type specified, then sqlite3AddColumnType() will
82054 ** be called next to set pCol->affinity correctly.
82056 pCol->affinity = SQLITE_AFF_NONE;
82057 p->nCol++;
82061 ** This routine is called by the parser while in the middle of
82062 ** parsing a CREATE TABLE statement. A "NOT NULL" constraint has
82063 ** been seen on a column. This routine sets the notNull flag on
82064 ** the column currently under construction.
82066 SQLITE_PRIVATE void sqlite3AddNotNull(Parse *pParse, int onError){
82067 Table *p;
82068 p = pParse->pNewTable;
82069 if( p==0 || NEVER(p->nCol<1) ) return;
82070 p->aCol[p->nCol-1].notNull = (u8)onError;
82074 ** Scan the column type name zType (length nType) and return the
82075 ** associated affinity type.
82077 ** This routine does a case-independent search of zType for the
82078 ** substrings in the following table. If one of the substrings is
82079 ** found, the corresponding affinity is returned. If zType contains
82080 ** more than one of the substrings, entries toward the top of
82081 ** the table take priority. For example, if zType is 'BLOBINT',
82082 ** SQLITE_AFF_INTEGER is returned.
82084 ** Substring | Affinity
82085 ** --------------------------------
82086 ** 'INT' | SQLITE_AFF_INTEGER
82087 ** 'CHAR' | SQLITE_AFF_TEXT
82088 ** 'CLOB' | SQLITE_AFF_TEXT
82089 ** 'TEXT' | SQLITE_AFF_TEXT
82090 ** 'BLOB' | SQLITE_AFF_NONE
82091 ** 'REAL' | SQLITE_AFF_REAL
82092 ** 'FLOA' | SQLITE_AFF_REAL
82093 ** 'DOUB' | SQLITE_AFF_REAL
82095 ** If none of the substrings in the above table are found,
82096 ** SQLITE_AFF_NUMERIC is returned.
82098 SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn){
82099 u32 h = 0;
82100 char aff = SQLITE_AFF_NUMERIC;
82102 if( zIn ) while( zIn[0] ){
82103 h = (h<<8) + sqlite3UpperToLower[(*zIn)&0xff];
82104 zIn++;
82105 if( h==(('c'<<24)+('h'<<16)+('a'<<8)+'r') ){ /* CHAR */
82106 aff = SQLITE_AFF_TEXT;
82107 }else if( h==(('c'<<24)+('l'<<16)+('o'<<8)+'b') ){ /* CLOB */
82108 aff = SQLITE_AFF_TEXT;
82109 }else if( h==(('t'<<24)+('e'<<16)+('x'<<8)+'t') ){ /* TEXT */
82110 aff = SQLITE_AFF_TEXT;
82111 }else if( h==(('b'<<24)+('l'<<16)+('o'<<8)+'b') /* BLOB */
82112 && (aff==SQLITE_AFF_NUMERIC || aff==SQLITE_AFF_REAL) ){
82113 aff = SQLITE_AFF_NONE;
82114 #ifndef SQLITE_OMIT_FLOATING_POINT
82115 }else if( h==(('r'<<24)+('e'<<16)+('a'<<8)+'l') /* REAL */
82116 && aff==SQLITE_AFF_NUMERIC ){
82117 aff = SQLITE_AFF_REAL;
82118 }else if( h==(('f'<<24)+('l'<<16)+('o'<<8)+'a') /* FLOA */
82119 && aff==SQLITE_AFF_NUMERIC ){
82120 aff = SQLITE_AFF_REAL;
82121 }else if( h==(('d'<<24)+('o'<<16)+('u'<<8)+'b') /* DOUB */
82122 && aff==SQLITE_AFF_NUMERIC ){
82123 aff = SQLITE_AFF_REAL;
82124 #endif
82125 }else if( (h&0x00FFFFFF)==(('i'<<16)+('n'<<8)+'t') ){ /* INT */
82126 aff = SQLITE_AFF_INTEGER;
82127 break;
82131 return aff;
82135 ** This routine is called by the parser while in the middle of
82136 ** parsing a CREATE TABLE statement. The pFirst token is the first
82137 ** token in the sequence of tokens that describe the type of the
82138 ** column currently under construction. pLast is the last token
82139 ** in the sequence. Use this information to construct a string
82140 ** that contains the typename of the column and store that string
82141 ** in zType.
82143 SQLITE_PRIVATE void sqlite3AddColumnType(Parse *pParse, Token *pType){
82144 Table *p;
82145 Column *pCol;
82147 p = pParse->pNewTable;
82148 if( p==0 || NEVER(p->nCol<1) ) return;
82149 pCol = &p->aCol[p->nCol-1];
82150 assert( pCol->zType==0 );
82151 pCol->zType = sqlite3NameFromToken(pParse->db, pType);
82152 pCol->affinity = sqlite3AffinityType(pCol->zType);
82156 ** The expression is the default value for the most recently added column
82157 ** of the table currently under construction.
82159 ** Default value expressions must be constant. Raise an exception if this
82160 ** is not the case.
82162 ** This routine is called by the parser while in the middle of
82163 ** parsing a CREATE TABLE statement.
82165 SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
82166 Table *p;
82167 Column *pCol;
82168 sqlite3 *db = pParse->db;
82169 p = pParse->pNewTable;
82170 if( p!=0 ){
82171 pCol = &(p->aCol[p->nCol-1]);
82172 if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr) ){
82173 sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant",
82174 pCol->zName);
82175 }else{
82176 /* A copy of pExpr is used instead of the original, as pExpr contains
82177 ** tokens that point to volatile memory. The 'span' of the expression
82178 ** is required by pragma table_info.
82180 sqlite3ExprDelete(db, pCol->pDflt);
82181 pCol->pDflt = sqlite3ExprDup(db, pSpan->pExpr, EXPRDUP_REDUCE);
82182 sqlite3DbFree(db, pCol->zDflt);
82183 pCol->zDflt = sqlite3DbStrNDup(db, (char*)pSpan->zStart,
82184 (int)(pSpan->zEnd - pSpan->zStart));
82187 sqlite3ExprDelete(db, pSpan->pExpr);
82191 ** Designate the PRIMARY KEY for the table. pList is a list of names
82192 ** of columns that form the primary key. If pList is NULL, then the
82193 ** most recently added column of the table is the primary key.
82195 ** A table can have at most one primary key. If the table already has
82196 ** a primary key (and this is the second primary key) then create an
82197 ** error.
82199 ** If the PRIMARY KEY is on a single column whose datatype is INTEGER,
82200 ** then we will try to use that column as the rowid. Set the Table.iPKey
82201 ** field of the table under construction to be the index of the
82202 ** INTEGER PRIMARY KEY column. Table.iPKey is set to -1 if there is
82203 ** no INTEGER PRIMARY KEY.
82205 ** If the key is not an INTEGER PRIMARY KEY, then create a unique
82206 ** index for the key. No index is created for INTEGER PRIMARY KEYs.
82208 SQLITE_PRIVATE void sqlite3AddPrimaryKey(
82209 Parse *pParse, /* Parsing context */
82210 ExprList *pList, /* List of field names to be indexed */
82211 int onError, /* What to do with a uniqueness conflict */
82212 int autoInc, /* True if the AUTOINCREMENT keyword is present */
82213 int sortOrder /* SQLITE_SO_ASC or SQLITE_SO_DESC */
82215 Table *pTab = pParse->pNewTable;
82216 char *zType = 0;
82217 int iCol = -1, i;
82218 if( pTab==0 || IN_DECLARE_VTAB ) goto primary_key_exit;
82219 if( pTab->tabFlags & TF_HasPrimaryKey ){
82220 sqlite3ErrorMsg(pParse,
82221 "table \"%s\" has more than one primary key", pTab->zName);
82222 goto primary_key_exit;
82224 pTab->tabFlags |= TF_HasPrimaryKey;
82225 if( pList==0 ){
82226 iCol = pTab->nCol - 1;
82227 pTab->aCol[iCol].isPrimKey = 1;
82228 }else{
82229 for(i=0; i<pList->nExpr; i++){
82230 for(iCol=0; iCol<pTab->nCol; iCol++){
82231 if( sqlite3StrICmp(pList->a[i].zName, pTab->aCol[iCol].zName)==0 ){
82232 break;
82235 if( iCol<pTab->nCol ){
82236 pTab->aCol[iCol].isPrimKey = 1;
82239 if( pList->nExpr>1 ) iCol = -1;
82241 if( iCol>=0 && iCol<pTab->nCol ){
82242 zType = pTab->aCol[iCol].zType;
82244 if( zType && sqlite3StrICmp(zType, "INTEGER")==0
82245 && sortOrder==SQLITE_SO_ASC ){
82246 pTab->iPKey = iCol;
82247 pTab->keyConf = (u8)onError;
82248 assert( autoInc==0 || autoInc==1 );
82249 pTab->tabFlags |= autoInc*TF_Autoincrement;
82250 }else if( autoInc ){
82251 #ifndef SQLITE_OMIT_AUTOINCREMENT
82252 sqlite3ErrorMsg(pParse, "AUTOINCREMENT is only allowed on an "
82253 "INTEGER PRIMARY KEY");
82254 #endif
82255 }else{
82256 Index *p;
82257 p = sqlite3CreateIndex(pParse, 0, 0, 0, pList, onError, 0, 0, sortOrder, 0);
82258 if( p ){
82259 p->autoIndex = 2;
82261 pList = 0;
82264 primary_key_exit:
82265 sqlite3ExprListDelete(pParse->db, pList);
82266 return;
82270 ** Add a new CHECK constraint to the table currently under construction.
82272 SQLITE_PRIVATE void sqlite3AddCheckConstraint(
82273 Parse *pParse, /* Parsing context */
82274 Expr *pCheckExpr /* The check expression */
82276 sqlite3 *db = pParse->db;
82277 #ifndef SQLITE_OMIT_CHECK
82278 Table *pTab = pParse->pNewTable;
82279 if( pTab && !IN_DECLARE_VTAB ){
82280 pTab->pCheck = sqlite3ExprAnd(db, pTab->pCheck, pCheckExpr);
82281 }else
82282 #endif
82284 sqlite3ExprDelete(db, pCheckExpr);
82289 ** Set the collation function of the most recently parsed table column
82290 ** to the CollSeq given.
82292 SQLITE_PRIVATE void sqlite3AddCollateType(Parse *pParse, Token *pToken){
82293 Table *p;
82294 int i;
82295 char *zColl; /* Dequoted name of collation sequence */
82296 sqlite3 *db;
82298 if( (p = pParse->pNewTable)==0 ) return;
82299 i = p->nCol-1;
82300 db = pParse->db;
82301 zColl = sqlite3NameFromToken(db, pToken);
82302 if( !zColl ) return;
82304 if( sqlite3LocateCollSeq(pParse, zColl) ){
82305 Index *pIdx;
82306 p->aCol[i].zColl = zColl;
82308 /* If the column is declared as "<name> PRIMARY KEY COLLATE <type>",
82309 ** then an index may have been created on this column before the
82310 ** collation type was added. Correct this if it is the case.
82312 for(pIdx=p->pIndex; pIdx; pIdx=pIdx->pNext){
82313 assert( pIdx->nColumn==1 );
82314 if( pIdx->aiColumn[0]==i ){
82315 pIdx->azColl[0] = p->aCol[i].zColl;
82318 }else{
82319 sqlite3DbFree(db, zColl);
82324 ** This function returns the collation sequence for database native text
82325 ** encoding identified by the string zName, length nName.
82327 ** If the requested collation sequence is not available, or not available
82328 ** in the database native encoding, the collation factory is invoked to
82329 ** request it. If the collation factory does not supply such a sequence,
82330 ** and the sequence is available in another text encoding, then that is
82331 ** returned instead.
82333 ** If no versions of the requested collations sequence are available, or
82334 ** another error occurs, NULL is returned and an error message written into
82335 ** pParse.
82337 ** This routine is a wrapper around sqlite3FindCollSeq(). This routine
82338 ** invokes the collation factory if the named collation cannot be found
82339 ** and generates an error message.
82341 ** See also: sqlite3FindCollSeq(), sqlite3GetCollSeq()
82343 SQLITE_PRIVATE CollSeq *sqlite3LocateCollSeq(Parse *pParse, const char *zName){
82344 sqlite3 *db = pParse->db;
82345 u8 enc = ENC(db);
82346 u8 initbusy = db->init.busy;
82347 CollSeq *pColl;
82349 pColl = sqlite3FindCollSeq(db, enc, zName, initbusy);
82350 if( !initbusy && (!pColl || !pColl->xCmp) ){
82351 pColl = sqlite3GetCollSeq(db, enc, pColl, zName);
82352 if( !pColl ){
82353 sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
82357 return pColl;
82362 ** Generate code that will increment the schema cookie.
82364 ** The schema cookie is used to determine when the schema for the
82365 ** database changes. After each schema change, the cookie value
82366 ** changes. When a process first reads the schema it records the
82367 ** cookie. Thereafter, whenever it goes to access the database,
82368 ** it checks the cookie to make sure the schema has not changed
82369 ** since it was last read.
82371 ** This plan is not completely bullet-proof. It is possible for
82372 ** the schema to change multiple times and for the cookie to be
82373 ** set back to prior value. But schema changes are infrequent
82374 ** and the probability of hitting the same cookie value is only
82375 ** 1 chance in 2^32. So we're safe enough.
82377 SQLITE_PRIVATE void sqlite3ChangeCookie(Parse *pParse, int iDb){
82378 int r1 = sqlite3GetTempReg(pParse);
82379 sqlite3 *db = pParse->db;
82380 Vdbe *v = pParse->pVdbe;
82381 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82382 sqlite3VdbeAddOp2(v, OP_Integer, db->aDb[iDb].pSchema->schema_cookie+1, r1);
82383 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_SCHEMA_VERSION, r1);
82384 sqlite3ReleaseTempReg(pParse, r1);
82388 ** Measure the number of characters needed to output the given
82389 ** identifier. The number returned includes any quotes used
82390 ** but does not include the null terminator.
82392 ** The estimate is conservative. It might be larger that what is
82393 ** really needed.
82395 static int identLength(const char *z){
82396 int n;
82397 for(n=0; *z; n++, z++){
82398 if( *z=='"' ){ n++; }
82400 return n + 2;
82404 ** The first parameter is a pointer to an output buffer. The second
82405 ** parameter is a pointer to an integer that contains the offset at
82406 ** which to write into the output buffer. This function copies the
82407 ** nul-terminated string pointed to by the third parameter, zSignedIdent,
82408 ** to the specified offset in the buffer and updates *pIdx to refer
82409 ** to the first byte after the last byte written before returning.
82411 ** If the string zSignedIdent consists entirely of alpha-numeric
82412 ** characters, does not begin with a digit and is not an SQL keyword,
82413 ** then it is copied to the output buffer exactly as it is. Otherwise,
82414 ** it is quoted using double-quotes.
82416 static void identPut(char *z, int *pIdx, char *zSignedIdent){
82417 unsigned char *zIdent = (unsigned char*)zSignedIdent;
82418 int i, j, needQuote;
82419 i = *pIdx;
82421 for(j=0; zIdent[j]; j++){
82422 if( !sqlite3Isalnum(zIdent[j]) && zIdent[j]!='_' ) break;
82424 needQuote = sqlite3Isdigit(zIdent[0]) || sqlite3KeywordCode(zIdent, j)!=TK_ID;
82425 if( !needQuote ){
82426 needQuote = zIdent[j];
82429 if( needQuote ) z[i++] = '"';
82430 for(j=0; zIdent[j]; j++){
82431 z[i++] = zIdent[j];
82432 if( zIdent[j]=='"' ) z[i++] = '"';
82434 if( needQuote ) z[i++] = '"';
82435 z[i] = 0;
82436 *pIdx = i;
82440 ** Generate a CREATE TABLE statement appropriate for the given
82441 ** table. Memory to hold the text of the statement is obtained
82442 ** from sqliteMalloc() and must be freed by the calling function.
82444 static char *createTableStmt(sqlite3 *db, Table *p){
82445 int i, k, n;
82446 char *zStmt;
82447 char *zSep, *zSep2, *zEnd;
82448 Column *pCol;
82449 n = 0;
82450 for(pCol = p->aCol, i=0; i<p->nCol; i++, pCol++){
82451 n += identLength(pCol->zName) + 5;
82453 n += identLength(p->zName);
82454 if( n<50 ){
82455 zSep = "";
82456 zSep2 = ",";
82457 zEnd = ")";
82458 }else{
82459 zSep = "\n ";
82460 zSep2 = ",\n ";
82461 zEnd = "\n)";
82463 n += 35 + 6*p->nCol;
82464 zStmt = sqlite3DbMallocRaw(0, n);
82465 if( zStmt==0 ){
82466 db->mallocFailed = 1;
82467 return 0;
82469 sqlite3_snprintf(n, zStmt, "CREATE TABLE ");
82470 k = sqlite3Strlen30(zStmt);
82471 identPut(zStmt, &k, p->zName);
82472 zStmt[k++] = '(';
82473 for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){
82474 static const char * const azType[] = {
82475 /* SQLITE_AFF_TEXT */ " TEXT",
82476 /* SQLITE_AFF_NONE */ "",
82477 /* SQLITE_AFF_NUMERIC */ " NUM",
82478 /* SQLITE_AFF_INTEGER */ " INT",
82479 /* SQLITE_AFF_REAL */ " REAL"
82481 int len;
82482 const char *zType;
82484 sqlite3_snprintf(n-k, &zStmt[k], zSep);
82485 k += sqlite3Strlen30(&zStmt[k]);
82486 zSep = zSep2;
82487 identPut(zStmt, &k, pCol->zName);
82488 assert( pCol->affinity-SQLITE_AFF_TEXT >= 0 );
82489 assert( pCol->affinity-SQLITE_AFF_TEXT < ArraySize(azType) );
82490 testcase( pCol->affinity==SQLITE_AFF_TEXT );
82491 testcase( pCol->affinity==SQLITE_AFF_NONE );
82492 testcase( pCol->affinity==SQLITE_AFF_NUMERIC );
82493 testcase( pCol->affinity==SQLITE_AFF_INTEGER );
82494 testcase( pCol->affinity==SQLITE_AFF_REAL );
82496 zType = azType[pCol->affinity - SQLITE_AFF_TEXT];
82497 len = sqlite3Strlen30(zType);
82498 assert( pCol->affinity==SQLITE_AFF_NONE
82499 || pCol->affinity==sqlite3AffinityType(zType) );
82500 memcpy(&zStmt[k], zType, len);
82501 k += len;
82502 assert( k<=n );
82504 sqlite3_snprintf(n-k, &zStmt[k], "%s", zEnd);
82505 return zStmt;
82509 ** This routine is called to report the final ")" that terminates
82510 ** a CREATE TABLE statement.
82512 ** The table structure that other action routines have been building
82513 ** is added to the internal hash tables, assuming no errors have
82514 ** occurred.
82516 ** An entry for the table is made in the master table on disk, unless
82517 ** this is a temporary table or db->init.busy==1. When db->init.busy==1
82518 ** it means we are reading the sqlite_master table because we just
82519 ** connected to the database or because the sqlite_master table has
82520 ** recently changed, so the entry for this table already exists in
82521 ** the sqlite_master table. We do not want to create it again.
82523 ** If the pSelect argument is not NULL, it means that this routine
82524 ** was called to create a table generated from a
82525 ** "CREATE TABLE ... AS SELECT ..." statement. The column names of
82526 ** the new table will match the result set of the SELECT.
82528 SQLITE_PRIVATE void sqlite3EndTable(
82529 Parse *pParse, /* Parse context */
82530 Token *pCons, /* The ',' token after the last column defn. */
82531 Token *pEnd, /* The final ')' token in the CREATE TABLE */
82532 Select *pSelect /* Select from a "CREATE ... AS SELECT" */
82534 Table *p;
82535 sqlite3 *db = pParse->db;
82536 int iDb;
82538 if( (pEnd==0 && pSelect==0) || db->mallocFailed ){
82539 return;
82541 p = pParse->pNewTable;
82542 if( p==0 ) return;
82544 assert( !db->init.busy || !pSelect );
82546 iDb = sqlite3SchemaToIndex(db, p->pSchema);
82548 #ifndef SQLITE_OMIT_CHECK
82549 /* Resolve names in all CHECK constraint expressions.
82551 if( p->pCheck ){
82552 SrcList sSrc; /* Fake SrcList for pParse->pNewTable */
82553 NameContext sNC; /* Name context for pParse->pNewTable */
82555 memset(&sNC, 0, sizeof(sNC));
82556 memset(&sSrc, 0, sizeof(sSrc));
82557 sSrc.nSrc = 1;
82558 sSrc.a[0].zName = p->zName;
82559 sSrc.a[0].pTab = p;
82560 sSrc.a[0].iCursor = -1;
82561 sNC.pParse = pParse;
82562 sNC.pSrcList = &sSrc;
82563 sNC.isCheck = 1;
82564 if( sqlite3ResolveExprNames(&sNC, p->pCheck) ){
82565 return;
82568 #endif /* !defined(SQLITE_OMIT_CHECK) */
82570 /* If the db->init.busy is 1 it means we are reading the SQL off the
82571 ** "sqlite_master" or "sqlite_temp_master" table on the disk.
82572 ** So do not write to the disk again. Extract the root page number
82573 ** for the table from the db->init.newTnum field. (The page number
82574 ** should have been put there by the sqliteOpenCb routine.)
82576 if( db->init.busy ){
82577 p->tnum = db->init.newTnum;
82580 /* If not initializing, then create a record for the new table
82581 ** in the SQLITE_MASTER table of the database.
82583 ** If this is a TEMPORARY table, write the entry into the auxiliary
82584 ** file instead of into the main database file.
82586 if( !db->init.busy ){
82587 int n;
82588 Vdbe *v;
82589 char *zType; /* "view" or "table" */
82590 char *zType2; /* "VIEW" or "TABLE" */
82591 char *zStmt; /* Text of the CREATE TABLE or CREATE VIEW statement */
82593 v = sqlite3GetVdbe(pParse);
82594 if( NEVER(v==0) ) return;
82596 sqlite3VdbeAddOp1(v, OP_Close, 0);
82599 ** Initialize zType for the new view or table.
82601 if( p->pSelect==0 ){
82602 /* A regular table */
82603 zType = "table";
82604 zType2 = "TABLE";
82605 #ifndef SQLITE_OMIT_VIEW
82606 }else{
82607 /* A view */
82608 zType = "view";
82609 zType2 = "VIEW";
82610 #endif
82613 /* If this is a CREATE TABLE xx AS SELECT ..., execute the SELECT
82614 ** statement to populate the new table. The root-page number for the
82615 ** new table is in register pParse->regRoot.
82617 ** Once the SELECT has been coded by sqlite3Select(), it is in a
82618 ** suitable state to query for the column names and types to be used
82619 ** by the new table.
82621 ** A shared-cache write-lock is not required to write to the new table,
82622 ** as a schema-lock must have already been obtained to create it. Since
82623 ** a schema-lock excludes all other database users, the write-lock would
82624 ** be redundant.
82626 if( pSelect ){
82627 SelectDest dest;
82628 Table *pSelTab;
82630 assert(pParse->nTab==1);
82631 sqlite3VdbeAddOp3(v, OP_OpenWrite, 1, pParse->regRoot, iDb);
82632 sqlite3VdbeChangeP5(v, 1);
82633 pParse->nTab = 2;
82634 sqlite3SelectDestInit(&dest, SRT_Table, 1);
82635 sqlite3Select(pParse, pSelect, &dest);
82636 sqlite3VdbeAddOp1(v, OP_Close, 1);
82637 if( pParse->nErr==0 ){
82638 pSelTab = sqlite3ResultSetOfSelect(pParse, pSelect);
82639 if( pSelTab==0 ) return;
82640 assert( p->aCol==0 );
82641 p->nCol = pSelTab->nCol;
82642 p->aCol = pSelTab->aCol;
82643 pSelTab->nCol = 0;
82644 pSelTab->aCol = 0;
82645 sqlite3DeleteTable(db, pSelTab);
82649 /* Compute the complete text of the CREATE statement */
82650 if( pSelect ){
82651 zStmt = createTableStmt(db, p);
82652 }else{
82653 n = (int)(pEnd->z - pParse->sNameToken.z) + 1;
82654 zStmt = sqlite3MPrintf(db,
82655 "CREATE %s %.*s", zType2, n, pParse->sNameToken.z
82659 /* A slot for the record has already been allocated in the
82660 ** SQLITE_MASTER table. We just need to update that slot with all
82661 ** the information we've collected.
82663 sqlite3NestedParse(pParse,
82664 "UPDATE %Q.%s "
82665 "SET type='%s', name=%Q, tbl_name=%Q, rootpage=#%d, sql=%Q "
82666 "WHERE rowid=#%d",
82667 db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
82668 zType,
82669 p->zName,
82670 p->zName,
82671 pParse->regRoot,
82672 zStmt,
82673 pParse->regRowid
82675 sqlite3DbFree(db, zStmt);
82676 sqlite3ChangeCookie(pParse, iDb);
82678 #ifndef SQLITE_OMIT_AUTOINCREMENT
82679 /* Check to see if we need to create an sqlite_sequence table for
82680 ** keeping track of autoincrement keys.
82682 if( p->tabFlags & TF_Autoincrement ){
82683 Db *pDb = &db->aDb[iDb];
82684 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82685 if( pDb->pSchema->pSeqTab==0 ){
82686 sqlite3NestedParse(pParse,
82687 "CREATE TABLE %Q.sqlite_sequence(name,seq)",
82688 pDb->zName
82692 #endif
82694 /* Reparse everything to update our internal data structures */
82695 sqlite3VdbeAddParseSchemaOp(v, iDb,
82696 sqlite3MPrintf(db, "tbl_name='%q'", p->zName));
82700 /* Add the table to the in-memory representation of the database.
82702 if( db->init.busy ){
82703 Table *pOld;
82704 Schema *pSchema = p->pSchema;
82705 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82706 pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName,
82707 sqlite3Strlen30(p->zName),p);
82708 if( pOld ){
82709 assert( p==pOld ); /* Malloc must have failed inside HashInsert() */
82710 db->mallocFailed = 1;
82711 return;
82713 pParse->pNewTable = 0;
82714 db->nTable++;
82715 db->flags |= SQLITE_InternChanges;
82717 #ifndef SQLITE_OMIT_ALTERTABLE
82718 if( !p->pSelect ){
82719 const char *zName = (const char *)pParse->sNameToken.z;
82720 int nName;
82721 assert( !pSelect && pCons && pEnd );
82722 if( pCons->z==0 ){
82723 pCons = pEnd;
82725 nName = (int)((const char *)pCons->z - zName);
82726 p->addColOffset = 13 + sqlite3Utf8CharLen(zName, nName);
82728 #endif
82732 #ifndef SQLITE_OMIT_VIEW
82734 ** The parser calls this routine in order to create a new VIEW
82736 SQLITE_PRIVATE void sqlite3CreateView(
82737 Parse *pParse, /* The parsing context */
82738 Token *pBegin, /* The CREATE token that begins the statement */
82739 Token *pName1, /* The token that holds the name of the view */
82740 Token *pName2, /* The token that holds the name of the view */
82741 Select *pSelect, /* A SELECT statement that will become the new view */
82742 int isTemp, /* TRUE for a TEMPORARY view */
82743 int noErr /* Suppress error messages if VIEW already exists */
82745 Table *p;
82746 int n;
82747 const char *z;
82748 Token sEnd;
82749 DbFixer sFix;
82750 Token *pName = 0;
82751 int iDb;
82752 sqlite3 *db = pParse->db;
82754 if( pParse->nVar>0 ){
82755 sqlite3ErrorMsg(pParse, "parameters are not allowed in views");
82756 sqlite3SelectDelete(db, pSelect);
82757 return;
82759 sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr);
82760 p = pParse->pNewTable;
82761 if( p==0 || pParse->nErr ){
82762 sqlite3SelectDelete(db, pSelect);
82763 return;
82765 sqlite3TwoPartName(pParse, pName1, pName2, &pName);
82766 iDb = sqlite3SchemaToIndex(db, p->pSchema);
82767 if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName)
82768 && sqlite3FixSelect(&sFix, pSelect)
82770 sqlite3SelectDelete(db, pSelect);
82771 return;
82774 /* Make a copy of the entire SELECT statement that defines the view.
82775 ** This will force all the Expr.token.z values to be dynamically
82776 ** allocated rather than point to the input string - which means that
82777 ** they will persist after the current sqlite3_exec() call returns.
82779 p->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
82780 sqlite3SelectDelete(db, pSelect);
82781 if( db->mallocFailed ){
82782 return;
82784 if( !db->init.busy ){
82785 sqlite3ViewGetColumnNames(pParse, p);
82788 /* Locate the end of the CREATE VIEW statement. Make sEnd point to
82789 ** the end.
82791 sEnd = pParse->sLastToken;
82792 if( ALWAYS(sEnd.z[0]!=0) && sEnd.z[0]!=';' ){
82793 sEnd.z += sEnd.n;
82795 sEnd.n = 0;
82796 n = (int)(sEnd.z - pBegin->z);
82797 z = pBegin->z;
82798 while( ALWAYS(n>0) && sqlite3Isspace(z[n-1]) ){ n--; }
82799 sEnd.z = &z[n-1];
82800 sEnd.n = 1;
82802 /* Use sqlite3EndTable() to add the view to the SQLITE_MASTER table */
82803 sqlite3EndTable(pParse, 0, &sEnd, 0);
82804 return;
82806 #endif /* SQLITE_OMIT_VIEW */
82808 #if !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE)
82810 ** The Table structure pTable is really a VIEW. Fill in the names of
82811 ** the columns of the view in the pTable structure. Return the number
82812 ** of errors. If an error is seen leave an error message in pParse->zErrMsg.
82814 SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
82815 Table *pSelTab; /* A fake table from which we get the result set */
82816 Select *pSel; /* Copy of the SELECT that implements the view */
82817 int nErr = 0; /* Number of errors encountered */
82818 int n; /* Temporarily holds the number of cursors assigned */
82819 sqlite3 *db = pParse->db; /* Database connection for malloc errors */
82820 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
82822 assert( pTable );
82824 #ifndef SQLITE_OMIT_VIRTUALTABLE
82825 if( sqlite3VtabCallConnect(pParse, pTable) ){
82826 return SQLITE_ERROR;
82828 if( IsVirtual(pTable) ) return 0;
82829 #endif
82831 #ifndef SQLITE_OMIT_VIEW
82832 /* A positive nCol means the columns names for this view are
82833 ** already known.
82835 if( pTable->nCol>0 ) return 0;
82837 /* A negative nCol is a special marker meaning that we are currently
82838 ** trying to compute the column names. If we enter this routine with
82839 ** a negative nCol, it means two or more views form a loop, like this:
82841 ** CREATE VIEW one AS SELECT * FROM two;
82842 ** CREATE VIEW two AS SELECT * FROM one;
82844 ** Actually, the error above is now caught prior to reaching this point.
82845 ** But the following test is still important as it does come up
82846 ** in the following:
82848 ** CREATE TABLE main.ex1(a);
82849 ** CREATE TEMP VIEW ex1 AS SELECT a FROM ex1;
82850 ** SELECT * FROM temp.ex1;
82852 if( pTable->nCol<0 ){
82853 sqlite3ErrorMsg(pParse, "view %s is circularly defined", pTable->zName);
82854 return 1;
82856 assert( pTable->nCol>=0 );
82858 /* If we get this far, it means we need to compute the table names.
82859 ** Note that the call to sqlite3ResultSetOfSelect() will expand any
82860 ** "*" elements in the results set of the view and will assign cursors
82861 ** to the elements of the FROM clause. But we do not want these changes
82862 ** to be permanent. So the computation is done on a copy of the SELECT
82863 ** statement that defines the view.
82865 assert( pTable->pSelect );
82866 pSel = sqlite3SelectDup(db, pTable->pSelect, 0);
82867 if( pSel ){
82868 u8 enableLookaside = db->lookaside.bEnabled;
82869 n = pParse->nTab;
82870 sqlite3SrcListAssignCursors(pParse, pSel->pSrc);
82871 pTable->nCol = -1;
82872 db->lookaside.bEnabled = 0;
82873 #ifndef SQLITE_OMIT_AUTHORIZATION
82874 xAuth = db->xAuth;
82875 db->xAuth = 0;
82876 pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
82877 db->xAuth = xAuth;
82878 #else
82879 pSelTab = sqlite3ResultSetOfSelect(pParse, pSel);
82880 #endif
82881 db->lookaside.bEnabled = enableLookaside;
82882 pParse->nTab = n;
82883 if( pSelTab ){
82884 assert( pTable->aCol==0 );
82885 pTable->nCol = pSelTab->nCol;
82886 pTable->aCol = pSelTab->aCol;
82887 pSelTab->nCol = 0;
82888 pSelTab->aCol = 0;
82889 sqlite3DeleteTable(db, pSelTab);
82890 assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) );
82891 pTable->pSchema->flags |= DB_UnresetViews;
82892 }else{
82893 pTable->nCol = 0;
82894 nErr++;
82896 sqlite3SelectDelete(db, pSel);
82897 } else {
82898 nErr++;
82900 #endif /* SQLITE_OMIT_VIEW */
82901 return nErr;
82903 #endif /* !defined(SQLITE_OMIT_VIEW) || !defined(SQLITE_OMIT_VIRTUALTABLE) */
82905 #ifndef SQLITE_OMIT_VIEW
82907 ** Clear the column names from every VIEW in database idx.
82909 static void sqliteViewResetAll(sqlite3 *db, int idx){
82910 HashElem *i;
82911 assert( sqlite3SchemaMutexHeld(db, idx, 0) );
82912 if( !DbHasProperty(db, idx, DB_UnresetViews) ) return;
82913 for(i=sqliteHashFirst(&db->aDb[idx].pSchema->tblHash); i;i=sqliteHashNext(i)){
82914 Table *pTab = sqliteHashData(i);
82915 if( pTab->pSelect ){
82916 sqliteDeleteColumnNames(db, pTab);
82917 pTab->aCol = 0;
82918 pTab->nCol = 0;
82921 DbClearProperty(db, idx, DB_UnresetViews);
82923 #else
82924 # define sqliteViewResetAll(A,B)
82925 #endif /* SQLITE_OMIT_VIEW */
82928 ** This function is called by the VDBE to adjust the internal schema
82929 ** used by SQLite when the btree layer moves a table root page. The
82930 ** root-page of a table or index in database iDb has changed from iFrom
82931 ** to iTo.
82933 ** Ticket #1728: The symbol table might still contain information
82934 ** on tables and/or indices that are the process of being deleted.
82935 ** If you are unlucky, one of those deleted indices or tables might
82936 ** have the same rootpage number as the real table or index that is
82937 ** being moved. So we cannot stop searching after the first match
82938 ** because the first match might be for one of the deleted indices
82939 ** or tables and not the table/index that is actually being moved.
82940 ** We must continue looping until all tables and indices with
82941 ** rootpage==iFrom have been converted to have a rootpage of iTo
82942 ** in order to be certain that we got the right one.
82944 #ifndef SQLITE_OMIT_AUTOVACUUM
82945 SQLITE_PRIVATE void sqlite3RootPageMoved(sqlite3 *db, int iDb, int iFrom, int iTo){
82946 HashElem *pElem;
82947 Hash *pHash;
82948 Db *pDb;
82950 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
82951 pDb = &db->aDb[iDb];
82952 pHash = &pDb->pSchema->tblHash;
82953 for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
82954 Table *pTab = sqliteHashData(pElem);
82955 if( pTab->tnum==iFrom ){
82956 pTab->tnum = iTo;
82959 pHash = &pDb->pSchema->idxHash;
82960 for(pElem=sqliteHashFirst(pHash); pElem; pElem=sqliteHashNext(pElem)){
82961 Index *pIdx = sqliteHashData(pElem);
82962 if( pIdx->tnum==iFrom ){
82963 pIdx->tnum = iTo;
82967 #endif
82970 ** Write code to erase the table with root-page iTable from database iDb.
82971 ** Also write code to modify the sqlite_master table and internal schema
82972 ** if a root-page of another table is moved by the btree-layer whilst
82973 ** erasing iTable (this can happen with an auto-vacuum database).
82975 static void destroyRootPage(Parse *pParse, int iTable, int iDb){
82976 Vdbe *v = sqlite3GetVdbe(pParse);
82977 int r1 = sqlite3GetTempReg(pParse);
82978 sqlite3VdbeAddOp3(v, OP_Destroy, iTable, r1, iDb);
82979 sqlite3MayAbort(pParse);
82980 #ifndef SQLITE_OMIT_AUTOVACUUM
82981 /* OP_Destroy stores an in integer r1. If this integer
82982 ** is non-zero, then it is the root page number of a table moved to
82983 ** location iTable. The following code modifies the sqlite_master table to
82984 ** reflect this.
82986 ** The "#NNN" in the SQL is a special constant that means whatever value
82987 ** is in register NNN. See grammar rules associated with the TK_REGISTER
82988 ** token for additional information.
82990 sqlite3NestedParse(pParse,
82991 "UPDATE %Q.%s SET rootpage=%d WHERE #%d AND rootpage=#%d",
82992 pParse->db->aDb[iDb].zName, SCHEMA_TABLE(iDb), iTable, r1, r1);
82993 #endif
82994 sqlite3ReleaseTempReg(pParse, r1);
82998 ** Write VDBE code to erase table pTab and all associated indices on disk.
82999 ** Code to update the sqlite_master tables and internal schema definitions
83000 ** in case a root-page belonging to another table is moved by the btree layer
83001 ** is also added (this can happen with an auto-vacuum database).
83003 static void destroyTable(Parse *pParse, Table *pTab){
83004 #ifdef SQLITE_OMIT_AUTOVACUUM
83005 Index *pIdx;
83006 int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
83007 destroyRootPage(pParse, pTab->tnum, iDb);
83008 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
83009 destroyRootPage(pParse, pIdx->tnum, iDb);
83011 #else
83012 /* If the database may be auto-vacuum capable (if SQLITE_OMIT_AUTOVACUUM
83013 ** is not defined), then it is important to call OP_Destroy on the
83014 ** table and index root-pages in order, starting with the numerically
83015 ** largest root-page number. This guarantees that none of the root-pages
83016 ** to be destroyed is relocated by an earlier OP_Destroy. i.e. if the
83017 ** following were coded:
83019 ** OP_Destroy 4 0
83020 ** ...
83021 ** OP_Destroy 5 0
83023 ** and root page 5 happened to be the largest root-page number in the
83024 ** database, then root page 5 would be moved to page 4 by the
83025 ** "OP_Destroy 4 0" opcode. The subsequent "OP_Destroy 5 0" would hit
83026 ** a free-list page.
83028 int iTab = pTab->tnum;
83029 int iDestroyed = 0;
83031 while( 1 ){
83032 Index *pIdx;
83033 int iLargest = 0;
83035 if( iDestroyed==0 || iTab<iDestroyed ){
83036 iLargest = iTab;
83038 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
83039 int iIdx = pIdx->tnum;
83040 assert( pIdx->pSchema==pTab->pSchema );
83041 if( (iDestroyed==0 || (iIdx<iDestroyed)) && iIdx>iLargest ){
83042 iLargest = iIdx;
83045 if( iLargest==0 ){
83046 return;
83047 }else{
83048 int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
83049 destroyRootPage(pParse, iLargest, iDb);
83050 iDestroyed = iLargest;
83053 #endif
83057 ** Remove entries from the sqlite_statN tables (for N in (1,2,3))
83058 ** after a DROP INDEX or DROP TABLE command.
83060 static void sqlite3ClearStatTables(
83061 Parse *pParse, /* The parsing context */
83062 int iDb, /* The database number */
83063 const char *zType, /* "idx" or "tbl" */
83064 const char *zName /* Name of index or table */
83066 int i;
83067 const char *zDbName = pParse->db->aDb[iDb].zName;
83068 for(i=1; i<=3; i++){
83069 char zTab[24];
83070 sqlite3_snprintf(sizeof(zTab),zTab,"sqlite_stat%d",i);
83071 if( sqlite3FindTable(pParse->db, zTab, zDbName) ){
83072 sqlite3NestedParse(pParse,
83073 "DELETE FROM %Q.%s WHERE %s=%Q",
83074 zDbName, zTab, zType, zName
83081 ** Generate code to drop a table.
83083 SQLITE_PRIVATE void sqlite3CodeDropTable(Parse *pParse, Table *pTab, int iDb, int isView){
83084 Vdbe *v;
83085 sqlite3 *db = pParse->db;
83086 Trigger *pTrigger;
83087 Db *pDb = &db->aDb[iDb];
83089 v = sqlite3GetVdbe(pParse);
83090 assert( v!=0 );
83091 sqlite3BeginWriteOperation(pParse, 1, iDb);
83093 #ifndef SQLITE_OMIT_VIRTUALTABLE
83094 if( IsVirtual(pTab) ){
83095 sqlite3VdbeAddOp0(v, OP_VBegin);
83097 #endif
83099 /* Drop all triggers associated with the table being dropped. Code
83100 ** is generated to remove entries from sqlite_master and/or
83101 ** sqlite_temp_master if required.
83103 pTrigger = sqlite3TriggerList(pParse, pTab);
83104 while( pTrigger ){
83105 assert( pTrigger->pSchema==pTab->pSchema ||
83106 pTrigger->pSchema==db->aDb[1].pSchema );
83107 sqlite3DropTriggerPtr(pParse, pTrigger);
83108 pTrigger = pTrigger->pNext;
83111 #ifndef SQLITE_OMIT_AUTOINCREMENT
83112 /* Remove any entries of the sqlite_sequence table associated with
83113 ** the table being dropped. This is done before the table is dropped
83114 ** at the btree level, in case the sqlite_sequence table needs to
83115 ** move as a result of the drop (can happen in auto-vacuum mode).
83117 if( pTab->tabFlags & TF_Autoincrement ){
83118 sqlite3NestedParse(pParse,
83119 "DELETE FROM %Q.sqlite_sequence WHERE name=%Q",
83120 pDb->zName, pTab->zName
83123 #endif
83125 /* Drop all SQLITE_MASTER table and index entries that refer to the
83126 ** table. The program name loops through the master table and deletes
83127 ** every row that refers to a table of the same name as the one being
83128 ** dropped. Triggers are handled seperately because a trigger can be
83129 ** created in the temp database that refers to a table in another
83130 ** database.
83132 sqlite3NestedParse(pParse,
83133 "DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
83134 pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
83135 if( !isView && !IsVirtual(pTab) ){
83136 destroyTable(pParse, pTab);
83139 /* Remove the table entry from SQLite's internal schema and modify
83140 ** the schema cookie.
83142 if( IsVirtual(pTab) ){
83143 sqlite3VdbeAddOp4(v, OP_VDestroy, iDb, 0, 0, pTab->zName, 0);
83145 sqlite3VdbeAddOp4(v, OP_DropTable, iDb, 0, 0, pTab->zName, 0);
83146 sqlite3ChangeCookie(pParse, iDb);
83147 sqliteViewResetAll(db, iDb);
83151 ** This routine is called to do the work of a DROP TABLE statement.
83152 ** pName is the name of the table to be dropped.
83154 SQLITE_PRIVATE void sqlite3DropTable(Parse *pParse, SrcList *pName, int isView, int noErr){
83155 Table *pTab;
83156 Vdbe *v;
83157 sqlite3 *db = pParse->db;
83158 int iDb;
83160 if( db->mallocFailed ){
83161 goto exit_drop_table;
83163 assert( pParse->nErr==0 );
83164 assert( pName->nSrc==1 );
83165 if( noErr ) db->suppressErr++;
83166 pTab = sqlite3LocateTable(pParse, isView,
83167 pName->a[0].zName, pName->a[0].zDatabase);
83168 if( noErr ) db->suppressErr--;
83170 if( pTab==0 ){
83171 if( noErr ) sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
83172 goto exit_drop_table;
83174 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
83175 assert( iDb>=0 && iDb<db->nDb );
83177 /* If pTab is a virtual table, call ViewGetColumnNames() to ensure
83178 ** it is initialized.
83180 if( IsVirtual(pTab) && sqlite3ViewGetColumnNames(pParse, pTab) ){
83181 goto exit_drop_table;
83183 #ifndef SQLITE_OMIT_AUTHORIZATION
83185 int code;
83186 const char *zTab = SCHEMA_TABLE(iDb);
83187 const char *zDb = db->aDb[iDb].zName;
83188 const char *zArg2 = 0;
83189 if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb)){
83190 goto exit_drop_table;
83192 if( isView ){
83193 if( !OMIT_TEMPDB && iDb==1 ){
83194 code = SQLITE_DROP_TEMP_VIEW;
83195 }else{
83196 code = SQLITE_DROP_VIEW;
83198 #ifndef SQLITE_OMIT_VIRTUALTABLE
83199 }else if( IsVirtual(pTab) ){
83200 code = SQLITE_DROP_VTABLE;
83201 zArg2 = sqlite3GetVTable(db, pTab)->pMod->zName;
83202 #endif
83203 }else{
83204 if( !OMIT_TEMPDB && iDb==1 ){
83205 code = SQLITE_DROP_TEMP_TABLE;
83206 }else{
83207 code = SQLITE_DROP_TABLE;
83210 if( sqlite3AuthCheck(pParse, code, pTab->zName, zArg2, zDb) ){
83211 goto exit_drop_table;
83213 if( sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb) ){
83214 goto exit_drop_table;
83217 #endif
83218 if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0
83219 && sqlite3StrNICmp(pTab->zName, "sqlite_stat", 11)!=0 ){
83220 sqlite3ErrorMsg(pParse, "table %s may not be dropped", pTab->zName);
83221 goto exit_drop_table;
83224 #ifndef SQLITE_OMIT_VIEW
83225 /* Ensure DROP TABLE is not used on a view, and DROP VIEW is not used
83226 ** on a table.
83228 if( isView && pTab->pSelect==0 ){
83229 sqlite3ErrorMsg(pParse, "use DROP TABLE to delete table %s", pTab->zName);
83230 goto exit_drop_table;
83232 if( !isView && pTab->pSelect ){
83233 sqlite3ErrorMsg(pParse, "use DROP VIEW to delete view %s", pTab->zName);
83234 goto exit_drop_table;
83236 #endif
83238 /* Generate code to remove the table from the master table
83239 ** on disk.
83241 v = sqlite3GetVdbe(pParse);
83242 if( v ){
83243 sqlite3BeginWriteOperation(pParse, 1, iDb);
83244 sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName);
83245 sqlite3FkDropTable(pParse, pName, pTab);
83246 sqlite3CodeDropTable(pParse, pTab, iDb, isView);
83249 exit_drop_table:
83250 sqlite3SrcListDelete(db, pName);
83254 ** This routine is called to create a new foreign key on the table
83255 ** currently under construction. pFromCol determines which columns
83256 ** in the current table point to the foreign key. If pFromCol==0 then
83257 ** connect the key to the last column inserted. pTo is the name of
83258 ** the table referred to. pToCol is a list of tables in the other
83259 ** pTo table that the foreign key points to. flags contains all
83260 ** information about the conflict resolution algorithms specified
83261 ** in the ON DELETE, ON UPDATE and ON INSERT clauses.
83263 ** An FKey structure is created and added to the table currently
83264 ** under construction in the pParse->pNewTable field.
83266 ** The foreign key is set for IMMEDIATE processing. A subsequent call
83267 ** to sqlite3DeferForeignKey() might change this to DEFERRED.
83269 SQLITE_PRIVATE void sqlite3CreateForeignKey(
83270 Parse *pParse, /* Parsing context */
83271 ExprList *pFromCol, /* Columns in this table that point to other table */
83272 Token *pTo, /* Name of the other table */
83273 ExprList *pToCol, /* Columns in the other table */
83274 int flags /* Conflict resolution algorithms. */
83276 sqlite3 *db = pParse->db;
83277 #ifndef SQLITE_OMIT_FOREIGN_KEY
83278 FKey *pFKey = 0;
83279 FKey *pNextTo;
83280 Table *p = pParse->pNewTable;
83281 int nByte;
83282 int i;
83283 int nCol;
83284 char *z;
83286 assert( pTo!=0 );
83287 if( p==0 || IN_DECLARE_VTAB ) goto fk_end;
83288 if( pFromCol==0 ){
83289 int iCol = p->nCol-1;
83290 if( NEVER(iCol<0) ) goto fk_end;
83291 if( pToCol && pToCol->nExpr!=1 ){
83292 sqlite3ErrorMsg(pParse, "foreign key on %s"
83293 " should reference only one column of table %T",
83294 p->aCol[iCol].zName, pTo);
83295 goto fk_end;
83297 nCol = 1;
83298 }else if( pToCol && pToCol->nExpr!=pFromCol->nExpr ){
83299 sqlite3ErrorMsg(pParse,
83300 "number of columns in foreign key does not match the number of "
83301 "columns in the referenced table");
83302 goto fk_end;
83303 }else{
83304 nCol = pFromCol->nExpr;
83306 nByte = sizeof(*pFKey) + (nCol-1)*sizeof(pFKey->aCol[0]) + pTo->n + 1;
83307 if( pToCol ){
83308 for(i=0; i<pToCol->nExpr; i++){
83309 nByte += sqlite3Strlen30(pToCol->a[i].zName) + 1;
83312 pFKey = sqlite3DbMallocZero(db, nByte );
83313 if( pFKey==0 ){
83314 goto fk_end;
83316 pFKey->pFrom = p;
83317 pFKey->pNextFrom = p->pFKey;
83318 z = (char*)&pFKey->aCol[nCol];
83319 pFKey->zTo = z;
83320 memcpy(z, pTo->z, pTo->n);
83321 z[pTo->n] = 0;
83322 sqlite3Dequote(z);
83323 z += pTo->n+1;
83324 pFKey->nCol = nCol;
83325 if( pFromCol==0 ){
83326 pFKey->aCol[0].iFrom = p->nCol-1;
83327 }else{
83328 for(i=0; i<nCol; i++){
83329 int j;
83330 for(j=0; j<p->nCol; j++){
83331 if( sqlite3StrICmp(p->aCol[j].zName, pFromCol->a[i].zName)==0 ){
83332 pFKey->aCol[i].iFrom = j;
83333 break;
83336 if( j>=p->nCol ){
83337 sqlite3ErrorMsg(pParse,
83338 "unknown column \"%s\" in foreign key definition",
83339 pFromCol->a[i].zName);
83340 goto fk_end;
83344 if( pToCol ){
83345 for(i=0; i<nCol; i++){
83346 int n = sqlite3Strlen30(pToCol->a[i].zName);
83347 pFKey->aCol[i].zCol = z;
83348 memcpy(z, pToCol->a[i].zName, n);
83349 z[n] = 0;
83350 z += n+1;
83353 pFKey->isDeferred = 0;
83354 pFKey->aAction[0] = (u8)(flags & 0xff); /* ON DELETE action */
83355 pFKey->aAction[1] = (u8)((flags >> 8 ) & 0xff); /* ON UPDATE action */
83357 assert( sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
83358 pNextTo = (FKey *)sqlite3HashInsert(&p->pSchema->fkeyHash,
83359 pFKey->zTo, sqlite3Strlen30(pFKey->zTo), (void *)pFKey
83361 if( pNextTo==pFKey ){
83362 db->mallocFailed = 1;
83363 goto fk_end;
83365 if( pNextTo ){
83366 assert( pNextTo->pPrevTo==0 );
83367 pFKey->pNextTo = pNextTo;
83368 pNextTo->pPrevTo = pFKey;
83371 /* Link the foreign key to the table as the last step.
83373 p->pFKey = pFKey;
83374 pFKey = 0;
83376 fk_end:
83377 sqlite3DbFree(db, pFKey);
83378 #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
83379 sqlite3ExprListDelete(db, pFromCol);
83380 sqlite3ExprListDelete(db, pToCol);
83384 ** This routine is called when an INITIALLY IMMEDIATE or INITIALLY DEFERRED
83385 ** clause is seen as part of a foreign key definition. The isDeferred
83386 ** parameter is 1 for INITIALLY DEFERRED and 0 for INITIALLY IMMEDIATE.
83387 ** The behavior of the most recently created foreign key is adjusted
83388 ** accordingly.
83390 SQLITE_PRIVATE void sqlite3DeferForeignKey(Parse *pParse, int isDeferred){
83391 #ifndef SQLITE_OMIT_FOREIGN_KEY
83392 Table *pTab;
83393 FKey *pFKey;
83394 if( (pTab = pParse->pNewTable)==0 || (pFKey = pTab->pFKey)==0 ) return;
83395 assert( isDeferred==0 || isDeferred==1 ); /* EV: R-30323-21917 */
83396 pFKey->isDeferred = (u8)isDeferred;
83397 #endif
83401 ** Generate code that will erase and refill index *pIdx. This is
83402 ** used to initialize a newly created index or to recompute the
83403 ** content of an index in response to a REINDEX command.
83405 ** if memRootPage is not negative, it means that the index is newly
83406 ** created. The register specified by memRootPage contains the
83407 ** root page number of the index. If memRootPage is negative, then
83408 ** the index already exists and must be cleared before being refilled and
83409 ** the root page number of the index is taken from pIndex->tnum.
83411 static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
83412 Table *pTab = pIndex->pTable; /* The table that is indexed */
83413 int iTab = pParse->nTab++; /* Btree cursor used for pTab */
83414 int iIdx = pParse->nTab++; /* Btree cursor used for pIndex */
83415 int iSorter; /* Cursor opened by OpenSorter (if in use) */
83416 int addr1; /* Address of top of loop */
83417 int addr2; /* Address to jump to for next iteration */
83418 int tnum; /* Root page of index */
83419 Vdbe *v; /* Generate code into this virtual machine */
83420 KeyInfo *pKey; /* KeyInfo for index */
83421 #ifdef SQLITE_OMIT_MERGE_SORT
83422 int regIdxKey; /* Registers containing the index key */
83423 #endif
83424 int regRecord; /* Register holding assemblied index record */
83425 sqlite3 *db = pParse->db; /* The database connection */
83426 int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
83428 #ifndef SQLITE_OMIT_AUTHORIZATION
83429 if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0,
83430 db->aDb[iDb].zName ) ){
83431 return;
83433 #endif
83435 /* Require a write-lock on the table to perform this operation */
83436 sqlite3TableLock(pParse, iDb, pTab->tnum, 1, pTab->zName);
83438 v = sqlite3GetVdbe(pParse);
83439 if( v==0 ) return;
83440 if( memRootPage>=0 ){
83441 tnum = memRootPage;
83442 }else{
83443 tnum = pIndex->tnum;
83444 sqlite3VdbeAddOp2(v, OP_Clear, tnum, iDb);
83446 pKey = sqlite3IndexKeyinfo(pParse, pIndex);
83447 sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb,
83448 (char *)pKey, P4_KEYINFO_HANDOFF);
83449 if( memRootPage>=0 ){
83450 sqlite3VdbeChangeP5(v, 1);
83453 #ifndef SQLITE_OMIT_MERGE_SORT
83454 /* Open the sorter cursor if we are to use one. */
83455 iSorter = pParse->nTab++;
83456 sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, 0, (char*)pKey, P4_KEYINFO);
83457 #else
83458 iSorter = iTab;
83459 #endif
83461 /* Open the table. Loop through all rows of the table, inserting index
83462 ** records into the sorter. */
83463 sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
83464 addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
83465 regRecord = sqlite3GetTempReg(pParse);
83467 #ifndef SQLITE_OMIT_MERGE_SORT
83468 sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1);
83469 sqlite3VdbeAddOp2(v, OP_SorterInsert, iSorter, regRecord);
83470 sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1);
83471 sqlite3VdbeJumpHere(v, addr1);
83472 addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0);
83473 if( pIndex->onError!=OE_None ){
83474 int j2 = sqlite3VdbeCurrentAddr(v) + 3;
83475 sqlite3VdbeAddOp2(v, OP_Goto, 0, j2);
83476 addr2 = sqlite3VdbeCurrentAddr(v);
83477 sqlite3VdbeAddOp3(v, OP_SorterCompare, iSorter, j2, regRecord);
83478 sqlite3HaltConstraint(
83479 pParse, OE_Abort, "indexed columns are not unique", P4_STATIC
83481 }else{
83482 addr2 = sqlite3VdbeCurrentAddr(v);
83484 sqlite3VdbeAddOp2(v, OP_SorterData, iSorter, regRecord);
83485 sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 1);
83486 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
83487 #else
83488 regIdxKey = sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1);
83489 addr2 = addr1 + 1;
83490 if( pIndex->onError!=OE_None ){
83491 const int regRowid = regIdxKey + pIndex->nColumn;
83492 const int j2 = sqlite3VdbeCurrentAddr(v) + 2;
83493 void * const pRegKey = SQLITE_INT_TO_PTR(regIdxKey);
83495 /* The registers accessed by the OP_IsUnique opcode were allocated
83496 ** using sqlite3GetTempRange() inside of the sqlite3GenerateIndexKey()
83497 ** call above. Just before that function was freed they were released
83498 ** (made available to the compiler for reuse) using
83499 ** sqlite3ReleaseTempRange(). So in some ways having the OP_IsUnique
83500 ** opcode use the values stored within seems dangerous. However, since
83501 ** we can be sure that no other temp registers have been allocated
83502 ** since sqlite3ReleaseTempRange() was called, it is safe to do so.
83504 sqlite3VdbeAddOp4(v, OP_IsUnique, iIdx, j2, regRowid, pRegKey, P4_INT32);
83505 sqlite3HaltConstraint(
83506 pParse, OE_Abort, "indexed columns are not unique", P4_STATIC);
83508 sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 0);
83509 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
83510 #endif
83511 sqlite3ReleaseTempReg(pParse, regRecord);
83512 sqlite3VdbeAddOp2(v, OP_SorterNext, iSorter, addr2);
83513 sqlite3VdbeJumpHere(v, addr1);
83515 sqlite3VdbeAddOp1(v, OP_Close, iTab);
83516 sqlite3VdbeAddOp1(v, OP_Close, iIdx);
83517 sqlite3VdbeAddOp1(v, OP_Close, iSorter);
83521 ** Create a new index for an SQL table. pName1.pName2 is the name of the index
83522 ** and pTblList is the name of the table that is to be indexed. Both will
83523 ** be NULL for a primary key or an index that is created to satisfy a
83524 ** UNIQUE constraint. If pTable and pIndex are NULL, use pParse->pNewTable
83525 ** as the table to be indexed. pParse->pNewTable is a table that is
83526 ** currently being constructed by a CREATE TABLE statement.
83528 ** pList is a list of columns to be indexed. pList will be NULL if this
83529 ** is a primary key or unique-constraint on the most recent column added
83530 ** to the table currently under construction.
83532 ** If the index is created successfully, return a pointer to the new Index
83533 ** structure. This is used by sqlite3AddPrimaryKey() to mark the index
83534 ** as the tables primary key (Index.autoIndex==2).
83536 SQLITE_PRIVATE Index *sqlite3CreateIndex(
83537 Parse *pParse, /* All information about this parse */
83538 Token *pName1, /* First part of index name. May be NULL */
83539 Token *pName2, /* Second part of index name. May be NULL */
83540 SrcList *pTblName, /* Table to index. Use pParse->pNewTable if 0 */
83541 ExprList *pList, /* A list of columns to be indexed */
83542 int onError, /* OE_Abort, OE_Ignore, OE_Replace, or OE_None */
83543 Token *pStart, /* The CREATE token that begins this statement */
83544 Token *pEnd, /* The ")" that closes the CREATE INDEX statement */
83545 int sortOrder, /* Sort order of primary key when pList==NULL */
83546 int ifNotExist /* Omit error if index already exists */
83548 Index *pRet = 0; /* Pointer to return */
83549 Table *pTab = 0; /* Table to be indexed */
83550 Index *pIndex = 0; /* The index to be created */
83551 char *zName = 0; /* Name of the index */
83552 int nName; /* Number of characters in zName */
83553 int i, j;
83554 Token nullId; /* Fake token for an empty ID list */
83555 DbFixer sFix; /* For assigning database names to pTable */
83556 int sortOrderMask; /* 1 to honor DESC in index. 0 to ignore. */
83557 sqlite3 *db = pParse->db;
83558 Db *pDb; /* The specific table containing the indexed database */
83559 int iDb; /* Index of the database that is being written */
83560 Token *pName = 0; /* Unqualified name of the index to create */
83561 struct ExprList_item *pListItem; /* For looping over pList */
83562 int nCol;
83563 int nExtra = 0;
83564 char *zExtra;
83566 assert( pStart==0 || pEnd!=0 ); /* pEnd must be non-NULL if pStart is */
83567 assert( pParse->nErr==0 ); /* Never called with prior errors */
83568 if( db->mallocFailed || IN_DECLARE_VTAB ){
83569 goto exit_create_index;
83571 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
83572 goto exit_create_index;
83576 ** Find the table that is to be indexed. Return early if not found.
83578 if( pTblName!=0 ){
83580 /* Use the two-part index name to determine the database
83581 ** to search for the table. 'Fix' the table name to this db
83582 ** before looking up the table.
83584 assert( pName1 && pName2 );
83585 iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
83586 if( iDb<0 ) goto exit_create_index;
83587 assert( pName && pName->z );
83589 #ifndef SQLITE_OMIT_TEMPDB
83590 /* If the index name was unqualified, check if the the table
83591 ** is a temp table. If so, set the database to 1. Do not do this
83592 ** if initialising a database schema.
83594 if( !db->init.busy ){
83595 pTab = sqlite3SrcListLookup(pParse, pTblName);
83596 if( pName2->n==0 && pTab && pTab->pSchema==db->aDb[1].pSchema ){
83597 iDb = 1;
83600 #endif
83602 if( sqlite3FixInit(&sFix, pParse, iDb, "index", pName) &&
83603 sqlite3FixSrcList(&sFix, pTblName)
83605 /* Because the parser constructs pTblName from a single identifier,
83606 ** sqlite3FixSrcList can never fail. */
83607 assert(0);
83609 pTab = sqlite3LocateTable(pParse, 0, pTblName->a[0].zName,
83610 pTblName->a[0].zDatabase);
83611 if( !pTab || db->mallocFailed ) goto exit_create_index;
83612 assert( db->aDb[iDb].pSchema==pTab->pSchema );
83613 }else{
83614 assert( pName==0 );
83615 assert( pStart==0 );
83616 pTab = pParse->pNewTable;
83617 if( !pTab ) goto exit_create_index;
83618 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
83620 pDb = &db->aDb[iDb];
83622 assert( pTab!=0 );
83623 assert( pParse->nErr==0 );
83624 if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0
83625 && memcmp(&pTab->zName[7],"altertab_",9)!=0 ){
83626 sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
83627 goto exit_create_index;
83629 #ifndef SQLITE_OMIT_VIEW
83630 if( pTab->pSelect ){
83631 sqlite3ErrorMsg(pParse, "views may not be indexed");
83632 goto exit_create_index;
83634 #endif
83635 #ifndef SQLITE_OMIT_VIRTUALTABLE
83636 if( IsVirtual(pTab) ){
83637 sqlite3ErrorMsg(pParse, "virtual tables may not be indexed");
83638 goto exit_create_index;
83640 #endif
83643 ** Find the name of the index. Make sure there is not already another
83644 ** index or table with the same name.
83646 ** Exception: If we are reading the names of permanent indices from the
83647 ** sqlite_master table (because some other process changed the schema) and
83648 ** one of the index names collides with the name of a temporary table or
83649 ** index, then we will continue to process this index.
83651 ** If pName==0 it means that we are
83652 ** dealing with a primary key or UNIQUE constraint. We have to invent our
83653 ** own name.
83655 if( pName ){
83656 zName = sqlite3NameFromToken(db, pName);
83657 if( zName==0 ) goto exit_create_index;
83658 assert( pName->z!=0 );
83659 if( SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
83660 goto exit_create_index;
83662 if( !db->init.busy ){
83663 if( sqlite3FindTable(db, zName, 0)!=0 ){
83664 sqlite3ErrorMsg(pParse, "there is already a table named %s", zName);
83665 goto exit_create_index;
83668 if( sqlite3FindIndex(db, zName, pDb->zName)!=0 ){
83669 if( !ifNotExist ){
83670 sqlite3ErrorMsg(pParse, "index %s already exists", zName);
83671 }else{
83672 assert( !db->init.busy );
83673 sqlite3CodeVerifySchema(pParse, iDb);
83675 goto exit_create_index;
83677 }else{
83678 int n;
83679 Index *pLoop;
83680 for(pLoop=pTab->pIndex, n=1; pLoop; pLoop=pLoop->pNext, n++){}
83681 zName = sqlite3MPrintf(db, "sqlite_autoindex_%s_%d", pTab->zName, n);
83682 if( zName==0 ){
83683 goto exit_create_index;
83687 /* Check for authorization to create an index.
83689 #ifndef SQLITE_OMIT_AUTHORIZATION
83691 const char *zDb = pDb->zName;
83692 if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iDb), 0, zDb) ){
83693 goto exit_create_index;
83695 i = SQLITE_CREATE_INDEX;
83696 if( !OMIT_TEMPDB && iDb==1 ) i = SQLITE_CREATE_TEMP_INDEX;
83697 if( sqlite3AuthCheck(pParse, i, zName, pTab->zName, zDb) ){
83698 goto exit_create_index;
83701 #endif
83703 /* If pList==0, it means this routine was called to make a primary
83704 ** key out of the last column added to the table under construction.
83705 ** So create a fake list to simulate this.
83707 if( pList==0 ){
83708 nullId.z = pTab->aCol[pTab->nCol-1].zName;
83709 nullId.n = sqlite3Strlen30((char*)nullId.z);
83710 pList = sqlite3ExprListAppend(pParse, 0, 0);
83711 if( pList==0 ) goto exit_create_index;
83712 sqlite3ExprListSetName(pParse, pList, &nullId, 0);
83713 pList->a[0].sortOrder = (u8)sortOrder;
83716 /* Figure out how many bytes of space are required to store explicitly
83717 ** specified collation sequence names.
83719 for(i=0; i<pList->nExpr; i++){
83720 Expr *pExpr = pList->a[i].pExpr;
83721 if( pExpr ){
83722 CollSeq *pColl = pExpr->pColl;
83723 /* Either pColl!=0 or there was an OOM failure. But if an OOM
83724 ** failure we have quit before reaching this point. */
83725 if( ALWAYS(pColl) ){
83726 nExtra += (1 + sqlite3Strlen30(pColl->zName));
83732 ** Allocate the index structure.
83734 nName = sqlite3Strlen30(zName);
83735 nCol = pList->nExpr;
83736 pIndex = sqlite3DbMallocZero(db,
83737 ROUND8(sizeof(Index)) + /* Index structure */
83738 ROUND8(sizeof(tRowcnt)*(nCol+1)) + /* Index.aiRowEst */
83739 sizeof(char *)*nCol + /* Index.azColl */
83740 sizeof(int)*nCol + /* Index.aiColumn */
83741 sizeof(u8)*nCol + /* Index.aSortOrder */
83742 nName + 1 + /* Index.zName */
83743 nExtra /* Collation sequence names */
83745 if( db->mallocFailed ){
83746 goto exit_create_index;
83748 zExtra = (char*)pIndex;
83749 pIndex->aiRowEst = (tRowcnt*)&zExtra[ROUND8(sizeof(Index))];
83750 pIndex->azColl = (char**)
83751 ((char*)pIndex->aiRowEst + ROUND8(sizeof(tRowcnt)*nCol+1));
83752 assert( EIGHT_BYTE_ALIGNMENT(pIndex->aiRowEst) );
83753 assert( EIGHT_BYTE_ALIGNMENT(pIndex->azColl) );
83754 pIndex->aiColumn = (int *)(&pIndex->azColl[nCol]);
83755 pIndex->aSortOrder = (u8 *)(&pIndex->aiColumn[nCol]);
83756 pIndex->zName = (char *)(&pIndex->aSortOrder[nCol]);
83757 zExtra = (char *)(&pIndex->zName[nName+1]);
83758 memcpy(pIndex->zName, zName, nName+1);
83759 pIndex->pTable = pTab;
83760 pIndex->nColumn = pList->nExpr;
83761 pIndex->onError = (u8)onError;
83762 pIndex->autoIndex = (u8)(pName==0);
83763 pIndex->pSchema = db->aDb[iDb].pSchema;
83764 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
83766 /* Check to see if we should honor DESC requests on index columns
83768 if( pDb->pSchema->file_format>=4 ){
83769 sortOrderMask = -1; /* Honor DESC */
83770 }else{
83771 sortOrderMask = 0; /* Ignore DESC */
83774 /* Scan the names of the columns of the table to be indexed and
83775 ** load the column indices into the Index structure. Report an error
83776 ** if any column is not found.
83778 ** TODO: Add a test to make sure that the same column is not named
83779 ** more than once within the same index. Only the first instance of
83780 ** the column will ever be used by the optimizer. Note that using the
83781 ** same column more than once cannot be an error because that would
83782 ** break backwards compatibility - it needs to be a warning.
83784 for(i=0, pListItem=pList->a; i<pList->nExpr; i++, pListItem++){
83785 const char *zColName = pListItem->zName;
83786 Column *pTabCol;
83787 int requestedSortOrder;
83788 char *zColl; /* Collation sequence name */
83790 for(j=0, pTabCol=pTab->aCol; j<pTab->nCol; j++, pTabCol++){
83791 if( sqlite3StrICmp(zColName, pTabCol->zName)==0 ) break;
83793 if( j>=pTab->nCol ){
83794 sqlite3ErrorMsg(pParse, "table %s has no column named %s",
83795 pTab->zName, zColName);
83796 pParse->checkSchema = 1;
83797 goto exit_create_index;
83799 pIndex->aiColumn[i] = j;
83800 /* Justification of the ALWAYS(pListItem->pExpr->pColl): Because of
83801 ** the way the "idxlist" non-terminal is constructed by the parser,
83802 ** if pListItem->pExpr is not null then either pListItem->pExpr->pColl
83803 ** must exist or else there must have been an OOM error. But if there
83804 ** was an OOM error, we would never reach this point. */
83805 if( pListItem->pExpr && ALWAYS(pListItem->pExpr->pColl) ){
83806 int nColl;
83807 zColl = pListItem->pExpr->pColl->zName;
83808 nColl = sqlite3Strlen30(zColl) + 1;
83809 assert( nExtra>=nColl );
83810 memcpy(zExtra, zColl, nColl);
83811 zColl = zExtra;
83812 zExtra += nColl;
83813 nExtra -= nColl;
83814 }else{
83815 zColl = pTab->aCol[j].zColl;
83816 if( !zColl ){
83817 zColl = db->pDfltColl->zName;
83820 if( !db->init.busy && !sqlite3LocateCollSeq(pParse, zColl) ){
83821 goto exit_create_index;
83823 pIndex->azColl[i] = zColl;
83824 requestedSortOrder = pListItem->sortOrder & sortOrderMask;
83825 pIndex->aSortOrder[i] = (u8)requestedSortOrder;
83827 sqlite3DefaultRowEst(pIndex);
83829 if( pTab==pParse->pNewTable ){
83830 /* This routine has been called to create an automatic index as a
83831 ** result of a PRIMARY KEY or UNIQUE clause on a column definition, or
83832 ** a PRIMARY KEY or UNIQUE clause following the column definitions.
83833 ** i.e. one of:
83835 ** CREATE TABLE t(x PRIMARY KEY, y);
83836 ** CREATE TABLE t(x, y, UNIQUE(x, y));
83838 ** Either way, check to see if the table already has such an index. If
83839 ** so, don't bother creating this one. This only applies to
83840 ** automatically created indices. Users can do as they wish with
83841 ** explicit indices.
83843 ** Two UNIQUE or PRIMARY KEY constraints are considered equivalent
83844 ** (and thus suppressing the second one) even if they have different
83845 ** sort orders.
83847 ** If there are different collating sequences or if the columns of
83848 ** the constraint occur in different orders, then the constraints are
83849 ** considered distinct and both result in separate indices.
83851 Index *pIdx;
83852 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
83853 int k;
83854 assert( pIdx->onError!=OE_None );
83855 assert( pIdx->autoIndex );
83856 assert( pIndex->onError!=OE_None );
83858 if( pIdx->nColumn!=pIndex->nColumn ) continue;
83859 for(k=0; k<pIdx->nColumn; k++){
83860 const char *z1;
83861 const char *z2;
83862 if( pIdx->aiColumn[k]!=pIndex->aiColumn[k] ) break;
83863 z1 = pIdx->azColl[k];
83864 z2 = pIndex->azColl[k];
83865 if( z1!=z2 && sqlite3StrICmp(z1, z2) ) break;
83867 if( k==pIdx->nColumn ){
83868 if( pIdx->onError!=pIndex->onError ){
83869 /* This constraint creates the same index as a previous
83870 ** constraint specified somewhere in the CREATE TABLE statement.
83871 ** However the ON CONFLICT clauses are different. If both this
83872 ** constraint and the previous equivalent constraint have explicit
83873 ** ON CONFLICT clauses this is an error. Otherwise, use the
83874 ** explicitly specified behaviour for the index.
83876 if( !(pIdx->onError==OE_Default || pIndex->onError==OE_Default) ){
83877 sqlite3ErrorMsg(pParse,
83878 "conflicting ON CONFLICT clauses specified", 0);
83880 if( pIdx->onError==OE_Default ){
83881 pIdx->onError = pIndex->onError;
83884 goto exit_create_index;
83889 /* Link the new Index structure to its table and to the other
83890 ** in-memory database structures.
83892 if( db->init.busy ){
83893 Index *p;
83894 assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
83895 p = sqlite3HashInsert(&pIndex->pSchema->idxHash,
83896 pIndex->zName, sqlite3Strlen30(pIndex->zName),
83897 pIndex);
83898 if( p ){
83899 assert( p==pIndex ); /* Malloc must have failed */
83900 db->mallocFailed = 1;
83901 goto exit_create_index;
83903 db->flags |= SQLITE_InternChanges;
83904 if( pTblName!=0 ){
83905 pIndex->tnum = db->init.newTnum;
83909 /* If the db->init.busy is 0 then create the index on disk. This
83910 ** involves writing the index into the master table and filling in the
83911 ** index with the current table contents.
83913 ** The db->init.busy is 0 when the user first enters a CREATE INDEX
83914 ** command. db->init.busy is 1 when a database is opened and
83915 ** CREATE INDEX statements are read out of the master table. In
83916 ** the latter case the index already exists on disk, which is why
83917 ** we don't want to recreate it.
83919 ** If pTblName==0 it means this index is generated as a primary key
83920 ** or UNIQUE constraint of a CREATE TABLE statement. Since the table
83921 ** has just been created, it contains no data and the index initialization
83922 ** step can be skipped.
83924 else{ /* if( db->init.busy==0 ) */
83925 Vdbe *v;
83926 char *zStmt;
83927 int iMem = ++pParse->nMem;
83929 v = sqlite3GetVdbe(pParse);
83930 if( v==0 ) goto exit_create_index;
83933 /* Create the rootpage for the index
83935 sqlite3BeginWriteOperation(pParse, 1, iDb);
83936 sqlite3VdbeAddOp2(v, OP_CreateIndex, iDb, iMem);
83938 /* Gather the complete text of the CREATE INDEX statement into
83939 ** the zStmt variable
83941 if( pStart ){
83942 assert( pEnd!=0 );
83943 /* A named index with an explicit CREATE INDEX statement */
83944 zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
83945 onError==OE_None ? "" : " UNIQUE",
83946 (int)(pEnd->z - pName->z) + 1,
83947 pName->z);
83948 }else{
83949 /* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
83950 /* zStmt = sqlite3MPrintf(""); */
83951 zStmt = 0;
83954 /* Add an entry in sqlite_master for this index
83956 sqlite3NestedParse(pParse,
83957 "INSERT INTO %Q.%s VALUES('index',%Q,%Q,#%d,%Q);",
83958 db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
83959 pIndex->zName,
83960 pTab->zName,
83961 iMem,
83962 zStmt
83964 sqlite3DbFree(db, zStmt);
83966 /* Fill the index with data and reparse the schema. Code an OP_Expire
83967 ** to invalidate all pre-compiled statements.
83969 if( pTblName ){
83970 sqlite3RefillIndex(pParse, pIndex, iMem);
83971 sqlite3ChangeCookie(pParse, iDb);
83972 sqlite3VdbeAddParseSchemaOp(v, iDb,
83973 sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName));
83974 sqlite3VdbeAddOp1(v, OP_Expire, 0);
83978 /* When adding an index to the list of indices for a table, make
83979 ** sure all indices labeled OE_Replace come after all those labeled
83980 ** OE_Ignore. This is necessary for the correct constraint check
83981 ** processing (in sqlite3GenerateConstraintChecks()) as part of
83982 ** UPDATE and INSERT statements.
83984 if( db->init.busy || pTblName==0 ){
83985 if( onError!=OE_Replace || pTab->pIndex==0
83986 || pTab->pIndex->onError==OE_Replace){
83987 pIndex->pNext = pTab->pIndex;
83988 pTab->pIndex = pIndex;
83989 }else{
83990 Index *pOther = pTab->pIndex;
83991 while( pOther->pNext && pOther->pNext->onError!=OE_Replace ){
83992 pOther = pOther->pNext;
83994 pIndex->pNext = pOther->pNext;
83995 pOther->pNext = pIndex;
83997 pRet = pIndex;
83998 pIndex = 0;
84001 /* Clean up before exiting */
84002 exit_create_index:
84003 if( pIndex ){
84004 sqlite3DbFree(db, pIndex->zColAff);
84005 sqlite3DbFree(db, pIndex);
84007 sqlite3ExprListDelete(db, pList);
84008 sqlite3SrcListDelete(db, pTblName);
84009 sqlite3DbFree(db, zName);
84010 return pRet;
84014 ** Fill the Index.aiRowEst[] array with default information - information
84015 ** to be used when we have not run the ANALYZE command.
84017 ** aiRowEst[0] is suppose to contain the number of elements in the index.
84018 ** Since we do not know, guess 1 million. aiRowEst[1] is an estimate of the
84019 ** number of rows in the table that match any particular value of the
84020 ** first column of the index. aiRowEst[2] is an estimate of the number
84021 ** of rows that match any particular combiniation of the first 2 columns
84022 ** of the index. And so forth. It must always be the case that
84024 ** aiRowEst[N]<=aiRowEst[N-1]
84025 ** aiRowEst[N]>=1
84027 ** Apart from that, we have little to go on besides intuition as to
84028 ** how aiRowEst[] should be initialized. The numbers generated here
84029 ** are based on typical values found in actual indices.
84031 SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){
84032 tRowcnt *a = pIdx->aiRowEst;
84033 int i;
84034 tRowcnt n;
84035 assert( a!=0 );
84036 a[0] = pIdx->pTable->nRowEst;
84037 if( a[0]<10 ) a[0] = 10;
84038 n = 10;
84039 for(i=1; i<=pIdx->nColumn; i++){
84040 a[i] = n;
84041 if( n>5 ) n--;
84043 if( pIdx->onError!=OE_None ){
84044 a[pIdx->nColumn] = 1;
84049 ** This routine will drop an existing named index. This routine
84050 ** implements the DROP INDEX statement.
84052 SQLITE_PRIVATE void sqlite3DropIndex(Parse *pParse, SrcList *pName, int ifExists){
84053 Index *pIndex;
84054 Vdbe *v;
84055 sqlite3 *db = pParse->db;
84056 int iDb;
84058 assert( pParse->nErr==0 ); /* Never called with prior errors */
84059 if( db->mallocFailed ){
84060 goto exit_drop_index;
84062 assert( pName->nSrc==1 );
84063 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
84064 goto exit_drop_index;
84066 pIndex = sqlite3FindIndex(db, pName->a[0].zName, pName->a[0].zDatabase);
84067 if( pIndex==0 ){
84068 if( !ifExists ){
84069 sqlite3ErrorMsg(pParse, "no such index: %S", pName, 0);
84070 }else{
84071 sqlite3CodeVerifyNamedSchema(pParse, pName->a[0].zDatabase);
84073 pParse->checkSchema = 1;
84074 goto exit_drop_index;
84076 if( pIndex->autoIndex ){
84077 sqlite3ErrorMsg(pParse, "index associated with UNIQUE "
84078 "or PRIMARY KEY constraint cannot be dropped", 0);
84079 goto exit_drop_index;
84081 iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
84082 #ifndef SQLITE_OMIT_AUTHORIZATION
84084 int code = SQLITE_DROP_INDEX;
84085 Table *pTab = pIndex->pTable;
84086 const char *zDb = db->aDb[iDb].zName;
84087 const char *zTab = SCHEMA_TABLE(iDb);
84088 if( sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
84089 goto exit_drop_index;
84091 if( !OMIT_TEMPDB && iDb ) code = SQLITE_DROP_TEMP_INDEX;
84092 if( sqlite3AuthCheck(pParse, code, pIndex->zName, pTab->zName, zDb) ){
84093 goto exit_drop_index;
84096 #endif
84098 /* Generate code to remove the index and from the master table */
84099 v = sqlite3GetVdbe(pParse);
84100 if( v ){
84101 sqlite3BeginWriteOperation(pParse, 1, iDb);
84102 sqlite3NestedParse(pParse,
84103 "DELETE FROM %Q.%s WHERE name=%Q AND type='index'",
84104 db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pIndex->zName
84106 sqlite3ClearStatTables(pParse, iDb, "idx", pIndex->zName);
84107 sqlite3ChangeCookie(pParse, iDb);
84108 destroyRootPage(pParse, pIndex->tnum, iDb);
84109 sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0);
84112 exit_drop_index:
84113 sqlite3SrcListDelete(db, pName);
84117 ** pArray is a pointer to an array of objects. Each object in the
84118 ** array is szEntry bytes in size. This routine allocates a new
84119 ** object on the end of the array.
84121 ** *pnEntry is the number of entries already in use. *pnAlloc is
84122 ** the previously allocated size of the array. initSize is the
84123 ** suggested initial array size allocation.
84125 ** The index of the new entry is returned in *pIdx.
84127 ** This routine returns a pointer to the array of objects. This
84128 ** might be the same as the pArray parameter or it might be a different
84129 ** pointer if the array was resized.
84131 SQLITE_PRIVATE void *sqlite3ArrayAllocate(
84132 sqlite3 *db, /* Connection to notify of malloc failures */
84133 void *pArray, /* Array of objects. Might be reallocated */
84134 int szEntry, /* Size of each object in the array */
84135 int initSize, /* Suggested initial allocation, in elements */
84136 int *pnEntry, /* Number of objects currently in use */
84137 int *pnAlloc, /* Current size of the allocation, in elements */
84138 int *pIdx /* Write the index of a new slot here */
84140 char *z;
84141 if( *pnEntry >= *pnAlloc ){
84142 void *pNew;
84143 int newSize;
84144 newSize = (*pnAlloc)*2 + initSize;
84145 pNew = sqlite3DbRealloc(db, pArray, newSize*szEntry);
84146 if( pNew==0 ){
84147 *pIdx = -1;
84148 return pArray;
84150 *pnAlloc = sqlite3DbMallocSize(db, pNew)/szEntry;
84151 pArray = pNew;
84153 z = (char*)pArray;
84154 memset(&z[*pnEntry * szEntry], 0, szEntry);
84155 *pIdx = *pnEntry;
84156 ++*pnEntry;
84157 return pArray;
84161 ** Append a new element to the given IdList. Create a new IdList if
84162 ** need be.
84164 ** A new IdList is returned, or NULL if malloc() fails.
84166 SQLITE_PRIVATE IdList *sqlite3IdListAppend(sqlite3 *db, IdList *pList, Token *pToken){
84167 int i;
84168 if( pList==0 ){
84169 pList = sqlite3DbMallocZero(db, sizeof(IdList) );
84170 if( pList==0 ) return 0;
84171 pList->nAlloc = 0;
84173 pList->a = sqlite3ArrayAllocate(
84175 pList->a,
84176 sizeof(pList->a[0]),
84178 &pList->nId,
84179 &pList->nAlloc,
84182 if( i<0 ){
84183 sqlite3IdListDelete(db, pList);
84184 return 0;
84186 pList->a[i].zName = sqlite3NameFromToken(db, pToken);
84187 return pList;
84191 ** Delete an IdList.
84193 SQLITE_PRIVATE void sqlite3IdListDelete(sqlite3 *db, IdList *pList){
84194 int i;
84195 if( pList==0 ) return;
84196 for(i=0; i<pList->nId; i++){
84197 sqlite3DbFree(db, pList->a[i].zName);
84199 sqlite3DbFree(db, pList->a);
84200 sqlite3DbFree(db, pList);
84204 ** Return the index in pList of the identifier named zId. Return -1
84205 ** if not found.
84207 SQLITE_PRIVATE int sqlite3IdListIndex(IdList *pList, const char *zName){
84208 int i;
84209 if( pList==0 ) return -1;
84210 for(i=0; i<pList->nId; i++){
84211 if( sqlite3StrICmp(pList->a[i].zName, zName)==0 ) return i;
84213 return -1;
84217 ** Expand the space allocated for the given SrcList object by
84218 ** creating nExtra new slots beginning at iStart. iStart is zero based.
84219 ** New slots are zeroed.
84221 ** For example, suppose a SrcList initially contains two entries: A,B.
84222 ** To append 3 new entries onto the end, do this:
84224 ** sqlite3SrcListEnlarge(db, pSrclist, 3, 2);
84226 ** After the call above it would contain: A, B, nil, nil, nil.
84227 ** If the iStart argument had been 1 instead of 2, then the result
84228 ** would have been: A, nil, nil, nil, B. To prepend the new slots,
84229 ** the iStart value would be 0. The result then would
84230 ** be: nil, nil, nil, A, B.
84232 ** If a memory allocation fails the SrcList is unchanged. The
84233 ** db->mallocFailed flag will be set to true.
84235 SQLITE_PRIVATE SrcList *sqlite3SrcListEnlarge(
84236 sqlite3 *db, /* Database connection to notify of OOM errors */
84237 SrcList *pSrc, /* The SrcList to be enlarged */
84238 int nExtra, /* Number of new slots to add to pSrc->a[] */
84239 int iStart /* Index in pSrc->a[] of first new slot */
84241 int i;
84243 /* Sanity checking on calling parameters */
84244 assert( iStart>=0 );
84245 assert( nExtra>=1 );
84246 assert( pSrc!=0 );
84247 assert( iStart<=pSrc->nSrc );
84249 /* Allocate additional space if needed */
84250 if( pSrc->nSrc+nExtra>pSrc->nAlloc ){
84251 SrcList *pNew;
84252 int nAlloc = pSrc->nSrc+nExtra;
84253 int nGot;
84254 pNew = sqlite3DbRealloc(db, pSrc,
84255 sizeof(*pSrc) + (nAlloc-1)*sizeof(pSrc->a[0]) );
84256 if( pNew==0 ){
84257 assert( db->mallocFailed );
84258 return pSrc;
84260 pSrc = pNew;
84261 nGot = (sqlite3DbMallocSize(db, pNew) - sizeof(*pSrc))/sizeof(pSrc->a[0])+1;
84262 pSrc->nAlloc = (u16)nGot;
84265 /* Move existing slots that come after the newly inserted slots
84266 ** out of the way */
84267 for(i=pSrc->nSrc-1; i>=iStart; i--){
84268 pSrc->a[i+nExtra] = pSrc->a[i];
84270 pSrc->nSrc += (i16)nExtra;
84272 /* Zero the newly allocated slots */
84273 memset(&pSrc->a[iStart], 0, sizeof(pSrc->a[0])*nExtra);
84274 for(i=iStart; i<iStart+nExtra; i++){
84275 pSrc->a[i].iCursor = -1;
84278 /* Return a pointer to the enlarged SrcList */
84279 return pSrc;
84284 ** Append a new table name to the given SrcList. Create a new SrcList if
84285 ** need be. A new entry is created in the SrcList even if pTable is NULL.
84287 ** A SrcList is returned, or NULL if there is an OOM error. The returned
84288 ** SrcList might be the same as the SrcList that was input or it might be
84289 ** a new one. If an OOM error does occurs, then the prior value of pList
84290 ** that is input to this routine is automatically freed.
84292 ** If pDatabase is not null, it means that the table has an optional
84293 ** database name prefix. Like this: "database.table". The pDatabase
84294 ** points to the table name and the pTable points to the database name.
84295 ** The SrcList.a[].zName field is filled with the table name which might
84296 ** come from pTable (if pDatabase is NULL) or from pDatabase.
84297 ** SrcList.a[].zDatabase is filled with the database name from pTable,
84298 ** or with NULL if no database is specified.
84300 ** In other words, if call like this:
84302 ** sqlite3SrcListAppend(D,A,B,0);
84304 ** Then B is a table name and the database name is unspecified. If called
84305 ** like this:
84307 ** sqlite3SrcListAppend(D,A,B,C);
84309 ** Then C is the table name and B is the database name. If C is defined
84310 ** then so is B. In other words, we never have a case where:
84312 ** sqlite3SrcListAppend(D,A,0,C);
84314 ** Both pTable and pDatabase are assumed to be quoted. They are dequoted
84315 ** before being added to the SrcList.
84317 SQLITE_PRIVATE SrcList *sqlite3SrcListAppend(
84318 sqlite3 *db, /* Connection to notify of malloc failures */
84319 SrcList *pList, /* Append to this SrcList. NULL creates a new SrcList */
84320 Token *pTable, /* Table to append */
84321 Token *pDatabase /* Database of the table */
84323 struct SrcList_item *pItem;
84324 assert( pDatabase==0 || pTable!=0 ); /* Cannot have C without B */
84325 if( pList==0 ){
84326 pList = sqlite3DbMallocZero(db, sizeof(SrcList) );
84327 if( pList==0 ) return 0;
84328 pList->nAlloc = 1;
84330 pList = sqlite3SrcListEnlarge(db, pList, 1, pList->nSrc);
84331 if( db->mallocFailed ){
84332 sqlite3SrcListDelete(db, pList);
84333 return 0;
84335 pItem = &pList->a[pList->nSrc-1];
84336 if( pDatabase && pDatabase->z==0 ){
84337 pDatabase = 0;
84339 if( pDatabase ){
84340 Token *pTemp = pDatabase;
84341 pDatabase = pTable;
84342 pTable = pTemp;
84344 pItem->zName = sqlite3NameFromToken(db, pTable);
84345 pItem->zDatabase = sqlite3NameFromToken(db, pDatabase);
84346 return pList;
84350 ** Assign VdbeCursor index numbers to all tables in a SrcList
84352 SQLITE_PRIVATE void sqlite3SrcListAssignCursors(Parse *pParse, SrcList *pList){
84353 int i;
84354 struct SrcList_item *pItem;
84355 assert(pList || pParse->db->mallocFailed );
84356 if( pList ){
84357 for(i=0, pItem=pList->a; i<pList->nSrc; i++, pItem++){
84358 if( pItem->iCursor>=0 ) break;
84359 pItem->iCursor = pParse->nTab++;
84360 if( pItem->pSelect ){
84361 sqlite3SrcListAssignCursors(pParse, pItem->pSelect->pSrc);
84368 ** Delete an entire SrcList including all its substructure.
84370 SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
84371 int i;
84372 struct SrcList_item *pItem;
84373 if( pList==0 ) return;
84374 for(pItem=pList->a, i=0; i<pList->nSrc; i++, pItem++){
84375 sqlite3DbFree(db, pItem->zDatabase);
84376 sqlite3DbFree(db, pItem->zName);
84377 sqlite3DbFree(db, pItem->zAlias);
84378 sqlite3DbFree(db, pItem->zIndex);
84379 sqlite3DeleteTable(db, pItem->pTab);
84380 sqlite3SelectDelete(db, pItem->pSelect);
84381 sqlite3ExprDelete(db, pItem->pOn);
84382 sqlite3IdListDelete(db, pItem->pUsing);
84384 sqlite3DbFree(db, pList);
84388 ** This routine is called by the parser to add a new term to the
84389 ** end of a growing FROM clause. The "p" parameter is the part of
84390 ** the FROM clause that has already been constructed. "p" is NULL
84391 ** if this is the first term of the FROM clause. pTable and pDatabase
84392 ** are the name of the table and database named in the FROM clause term.
84393 ** pDatabase is NULL if the database name qualifier is missing - the
84394 ** usual case. If the term has a alias, then pAlias points to the
84395 ** alias token. If the term is a subquery, then pSubquery is the
84396 ** SELECT statement that the subquery encodes. The pTable and
84397 ** pDatabase parameters are NULL for subqueries. The pOn and pUsing
84398 ** parameters are the content of the ON and USING clauses.
84400 ** Return a new SrcList which encodes is the FROM with the new
84401 ** term added.
84403 SQLITE_PRIVATE SrcList *sqlite3SrcListAppendFromTerm(
84404 Parse *pParse, /* Parsing context */
84405 SrcList *p, /* The left part of the FROM clause already seen */
84406 Token *pTable, /* Name of the table to add to the FROM clause */
84407 Token *pDatabase, /* Name of the database containing pTable */
84408 Token *pAlias, /* The right-hand side of the AS subexpression */
84409 Select *pSubquery, /* A subquery used in place of a table name */
84410 Expr *pOn, /* The ON clause of a join */
84411 IdList *pUsing /* The USING clause of a join */
84413 struct SrcList_item *pItem;
84414 sqlite3 *db = pParse->db;
84415 if( !p && (pOn || pUsing) ){
84416 sqlite3ErrorMsg(pParse, "a JOIN clause is required before %s",
84417 (pOn ? "ON" : "USING")
84419 goto append_from_error;
84421 p = sqlite3SrcListAppend(db, p, pTable, pDatabase);
84422 if( p==0 || NEVER(p->nSrc==0) ){
84423 goto append_from_error;
84425 pItem = &p->a[p->nSrc-1];
84426 assert( pAlias!=0 );
84427 if( pAlias->n ){
84428 pItem->zAlias = sqlite3NameFromToken(db, pAlias);
84430 pItem->pSelect = pSubquery;
84431 pItem->pOn = pOn;
84432 pItem->pUsing = pUsing;
84433 return p;
84435 append_from_error:
84436 assert( p==0 );
84437 sqlite3ExprDelete(db, pOn);
84438 sqlite3IdListDelete(db, pUsing);
84439 sqlite3SelectDelete(db, pSubquery);
84440 return 0;
84444 ** Add an INDEXED BY or NOT INDEXED clause to the most recently added
84445 ** element of the source-list passed as the second argument.
84447 SQLITE_PRIVATE void sqlite3SrcListIndexedBy(Parse *pParse, SrcList *p, Token *pIndexedBy){
84448 assert( pIndexedBy!=0 );
84449 if( p && ALWAYS(p->nSrc>0) ){
84450 struct SrcList_item *pItem = &p->a[p->nSrc-1];
84451 assert( pItem->notIndexed==0 && pItem->zIndex==0 );
84452 if( pIndexedBy->n==1 && !pIndexedBy->z ){
84453 /* A "NOT INDEXED" clause was supplied. See parse.y
84454 ** construct "indexed_opt" for details. */
84455 pItem->notIndexed = 1;
84456 }else{
84457 pItem->zIndex = sqlite3NameFromToken(pParse->db, pIndexedBy);
84463 ** When building up a FROM clause in the parser, the join operator
84464 ** is initially attached to the left operand. But the code generator
84465 ** expects the join operator to be on the right operand. This routine
84466 ** Shifts all join operators from left to right for an entire FROM
84467 ** clause.
84469 ** Example: Suppose the join is like this:
84471 ** A natural cross join B
84473 ** The operator is "natural cross join". The A and B operands are stored
84474 ** in p->a[0] and p->a[1], respectively. The parser initially stores the
84475 ** operator with A. This routine shifts that operator over to B.
84477 SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){
84478 if( p ){
84479 int i;
84480 assert( p->a || p->nSrc==0 );
84481 for(i=p->nSrc-1; i>0; i--){
84482 p->a[i].jointype = p->a[i-1].jointype;
84484 p->a[0].jointype = 0;
84489 ** Begin a transaction
84491 SQLITE_PRIVATE void sqlite3BeginTransaction(Parse *pParse, int type){
84492 sqlite3 *db;
84493 Vdbe *v;
84494 int i;
84496 assert( pParse!=0 );
84497 db = pParse->db;
84498 assert( db!=0 );
84499 /* if( db->aDb[0].pBt==0 ) return; */
84500 if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "BEGIN", 0, 0) ){
84501 return;
84503 v = sqlite3GetVdbe(pParse);
84504 if( !v ) return;
84505 if( type!=TK_DEFERRED ){
84506 for(i=0; i<db->nDb; i++){
84507 sqlite3VdbeAddOp2(v, OP_Transaction, i, (type==TK_EXCLUSIVE)+1);
84508 sqlite3VdbeUsesBtree(v, i);
84511 sqlite3VdbeAddOp2(v, OP_AutoCommit, 0, 0);
84515 ** Commit a transaction
84517 SQLITE_PRIVATE void sqlite3CommitTransaction(Parse *pParse){
84518 Vdbe *v;
84520 assert( pParse!=0 );
84521 assert( pParse->db!=0 );
84522 if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "COMMIT", 0, 0) ){
84523 return;
84525 v = sqlite3GetVdbe(pParse);
84526 if( v ){
84527 sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 0);
84532 ** Rollback a transaction
84534 SQLITE_PRIVATE void sqlite3RollbackTransaction(Parse *pParse){
84535 Vdbe *v;
84537 assert( pParse!=0 );
84538 assert( pParse->db!=0 );
84539 if( sqlite3AuthCheck(pParse, SQLITE_TRANSACTION, "ROLLBACK", 0, 0) ){
84540 return;
84542 v = sqlite3GetVdbe(pParse);
84543 if( v ){
84544 sqlite3VdbeAddOp2(v, OP_AutoCommit, 1, 1);
84549 ** This function is called by the parser when it parses a command to create,
84550 ** release or rollback an SQL savepoint.
84552 SQLITE_PRIVATE void sqlite3Savepoint(Parse *pParse, int op, Token *pName){
84553 char *zName = sqlite3NameFromToken(pParse->db, pName);
84554 if( zName ){
84555 Vdbe *v = sqlite3GetVdbe(pParse);
84556 #ifndef SQLITE_OMIT_AUTHORIZATION
84557 static const char * const az[] = { "BEGIN", "RELEASE", "ROLLBACK" };
84558 assert( !SAVEPOINT_BEGIN && SAVEPOINT_RELEASE==1 && SAVEPOINT_ROLLBACK==2 );
84559 #endif
84560 if( !v || sqlite3AuthCheck(pParse, SQLITE_SAVEPOINT, az[op], zName, 0) ){
84561 sqlite3DbFree(pParse->db, zName);
84562 return;
84564 sqlite3VdbeAddOp4(v, OP_Savepoint, op, 0, 0, zName, P4_DYNAMIC);
84569 ** Make sure the TEMP database is open and available for use. Return
84570 ** the number of errors. Leave any error messages in the pParse structure.
84572 SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *pParse){
84573 sqlite3 *db = pParse->db;
84574 if( db->aDb[1].pBt==0 && !pParse->explain ){
84575 int rc;
84576 Btree *pBt;
84577 static const int flags =
84578 SQLITE_OPEN_READWRITE |
84579 SQLITE_OPEN_CREATE |
84580 SQLITE_OPEN_EXCLUSIVE |
84581 SQLITE_OPEN_DELETEONCLOSE |
84582 SQLITE_OPEN_TEMP_DB;
84584 rc = sqlite3BtreeOpen(db->pVfs, 0, db, &pBt, 0, flags);
84585 if( rc!=SQLITE_OK ){
84586 sqlite3ErrorMsg(pParse, "unable to open a temporary database "
84587 "file for storing temporary tables");
84588 pParse->rc = rc;
84589 return 1;
84591 db->aDb[1].pBt = pBt;
84592 assert( db->aDb[1].pSchema );
84593 if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize, -1, 0) ){
84594 db->mallocFailed = 1;
84595 return 1;
84598 return 0;
84602 ** Generate VDBE code that will verify the schema cookie and start
84603 ** a read-transaction for all named database files.
84605 ** It is important that all schema cookies be verified and all
84606 ** read transactions be started before anything else happens in
84607 ** the VDBE program. But this routine can be called after much other
84608 ** code has been generated. So here is what we do:
84610 ** The first time this routine is called, we code an OP_Goto that
84611 ** will jump to a subroutine at the end of the program. Then we
84612 ** record every database that needs its schema verified in the
84613 ** pParse->cookieMask field. Later, after all other code has been
84614 ** generated, the subroutine that does the cookie verifications and
84615 ** starts the transactions will be coded and the OP_Goto P2 value
84616 ** will be made to point to that subroutine. The generation of the
84617 ** cookie verification subroutine code happens in sqlite3FinishCoding().
84619 ** If iDb<0 then code the OP_Goto only - don't set flag to verify the
84620 ** schema on any databases. This can be used to position the OP_Goto
84621 ** early in the code, before we know if any database tables will be used.
84623 SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
84624 Parse *pToplevel = sqlite3ParseToplevel(pParse);
84626 if( pToplevel->cookieGoto==0 ){
84627 Vdbe *v = sqlite3GetVdbe(pToplevel);
84628 if( v==0 ) return; /* This only happens if there was a prior error */
84629 pToplevel->cookieGoto = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0)+1;
84631 if( iDb>=0 ){
84632 sqlite3 *db = pToplevel->db;
84633 yDbMask mask;
84635 assert( iDb<db->nDb );
84636 assert( db->aDb[iDb].pBt!=0 || iDb==1 );
84637 assert( iDb<SQLITE_MAX_ATTACHED+2 );
84638 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
84639 mask = ((yDbMask)1)<<iDb;
84640 if( (pToplevel->cookieMask & mask)==0 ){
84641 pToplevel->cookieMask |= mask;
84642 pToplevel->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie;
84643 if( !OMIT_TEMPDB && iDb==1 ){
84644 sqlite3OpenTempDatabase(pToplevel);
84651 ** If argument zDb is NULL, then call sqlite3CodeVerifySchema() for each
84652 ** attached database. Otherwise, invoke it for the database named zDb only.
84654 SQLITE_PRIVATE void sqlite3CodeVerifyNamedSchema(Parse *pParse, const char *zDb){
84655 sqlite3 *db = pParse->db;
84656 int i;
84657 for(i=0; i<db->nDb; i++){
84658 Db *pDb = &db->aDb[i];
84659 if( pDb->pBt && (!zDb || 0==sqlite3StrICmp(zDb, pDb->zName)) ){
84660 sqlite3CodeVerifySchema(pParse, i);
84666 ** Generate VDBE code that prepares for doing an operation that
84667 ** might change the database.
84669 ** This routine starts a new transaction if we are not already within
84670 ** a transaction. If we are already within a transaction, then a checkpoint
84671 ** is set if the setStatement parameter is true. A checkpoint should
84672 ** be set for operations that might fail (due to a constraint) part of
84673 ** the way through and which will need to undo some writes without having to
84674 ** rollback the whole transaction. For operations where all constraints
84675 ** can be checked before any changes are made to the database, it is never
84676 ** necessary to undo a write and the checkpoint should not be set.
84678 SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
84679 Parse *pToplevel = sqlite3ParseToplevel(pParse);
84680 sqlite3CodeVerifySchema(pParse, iDb);
84681 pToplevel->writeMask |= ((yDbMask)1)<<iDb;
84682 pToplevel->isMultiWrite |= setStatement;
84686 ** Indicate that the statement currently under construction might write
84687 ** more than one entry (example: deleting one row then inserting another,
84688 ** inserting multiple rows in a table, or inserting a row and index entries.)
84689 ** If an abort occurs after some of these writes have completed, then it will
84690 ** be necessary to undo the completed writes.
84692 SQLITE_PRIVATE void sqlite3MultiWrite(Parse *pParse){
84693 Parse *pToplevel = sqlite3ParseToplevel(pParse);
84694 pToplevel->isMultiWrite = 1;
84698 ** The code generator calls this routine if is discovers that it is
84699 ** possible to abort a statement prior to completion. In order to
84700 ** perform this abort without corrupting the database, we need to make
84701 ** sure that the statement is protected by a statement transaction.
84703 ** Technically, we only need to set the mayAbort flag if the
84704 ** isMultiWrite flag was previously set. There is a time dependency
84705 ** such that the abort must occur after the multiwrite. This makes
84706 ** some statements involving the REPLACE conflict resolution algorithm
84707 ** go a little faster. But taking advantage of this time dependency
84708 ** makes it more difficult to prove that the code is correct (in
84709 ** particular, it prevents us from writing an effective
84710 ** implementation of sqlite3AssertMayAbort()) and so we have chosen
84711 ** to take the safe route and skip the optimization.
84713 SQLITE_PRIVATE void sqlite3MayAbort(Parse *pParse){
84714 Parse *pToplevel = sqlite3ParseToplevel(pParse);
84715 pToplevel->mayAbort = 1;
84719 ** Code an OP_Halt that causes the vdbe to return an SQLITE_CONSTRAINT
84720 ** error. The onError parameter determines which (if any) of the statement
84721 ** and/or current transaction is rolled back.
84723 SQLITE_PRIVATE void sqlite3HaltConstraint(Parse *pParse, int onError, char *p4, int p4type){
84724 Vdbe *v = sqlite3GetVdbe(pParse);
84725 if( onError==OE_Abort ){
84726 sqlite3MayAbort(pParse);
84728 sqlite3VdbeAddOp4(v, OP_Halt, SQLITE_CONSTRAINT, onError, 0, p4, p4type);
84732 ** Check to see if pIndex uses the collating sequence pColl. Return
84733 ** true if it does and false if it does not.
84735 #ifndef SQLITE_OMIT_REINDEX
84736 static int collationMatch(const char *zColl, Index *pIndex){
84737 int i;
84738 assert( zColl!=0 );
84739 for(i=0; i<pIndex->nColumn; i++){
84740 const char *z = pIndex->azColl[i];
84741 assert( z!=0 );
84742 if( 0==sqlite3StrICmp(z, zColl) ){
84743 return 1;
84746 return 0;
84748 #endif
84751 ** Recompute all indices of pTab that use the collating sequence pColl.
84752 ** If pColl==0 then recompute all indices of pTab.
84754 #ifndef SQLITE_OMIT_REINDEX
84755 static void reindexTable(Parse *pParse, Table *pTab, char const *zColl){
84756 Index *pIndex; /* An index associated with pTab */
84758 for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
84759 if( zColl==0 || collationMatch(zColl, pIndex) ){
84760 int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
84761 sqlite3BeginWriteOperation(pParse, 0, iDb);
84762 sqlite3RefillIndex(pParse, pIndex, -1);
84766 #endif
84769 ** Recompute all indices of all tables in all databases where the
84770 ** indices use the collating sequence pColl. If pColl==0 then recompute
84771 ** all indices everywhere.
84773 #ifndef SQLITE_OMIT_REINDEX
84774 static void reindexDatabases(Parse *pParse, char const *zColl){
84775 Db *pDb; /* A single database */
84776 int iDb; /* The database index number */
84777 sqlite3 *db = pParse->db; /* The database connection */
84778 HashElem *k; /* For looping over tables in pDb */
84779 Table *pTab; /* A table in the database */
84781 assert( sqlite3BtreeHoldsAllMutexes(db) ); /* Needed for schema access */
84782 for(iDb=0, pDb=db->aDb; iDb<db->nDb; iDb++, pDb++){
84783 assert( pDb!=0 );
84784 for(k=sqliteHashFirst(&pDb->pSchema->tblHash); k; k=sqliteHashNext(k)){
84785 pTab = (Table*)sqliteHashData(k);
84786 reindexTable(pParse, pTab, zColl);
84790 #endif
84793 ** Generate code for the REINDEX command.
84795 ** REINDEX -- 1
84796 ** REINDEX <collation> -- 2
84797 ** REINDEX ?<database>.?<tablename> -- 3
84798 ** REINDEX ?<database>.?<indexname> -- 4
84800 ** Form 1 causes all indices in all attached databases to be rebuilt.
84801 ** Form 2 rebuilds all indices in all databases that use the named
84802 ** collating function. Forms 3 and 4 rebuild the named index or all
84803 ** indices associated with the named table.
84805 #ifndef SQLITE_OMIT_REINDEX
84806 SQLITE_PRIVATE void sqlite3Reindex(Parse *pParse, Token *pName1, Token *pName2){
84807 CollSeq *pColl; /* Collating sequence to be reindexed, or NULL */
84808 char *z; /* Name of a table or index */
84809 const char *zDb; /* Name of the database */
84810 Table *pTab; /* A table in the database */
84811 Index *pIndex; /* An index associated with pTab */
84812 int iDb; /* The database index number */
84813 sqlite3 *db = pParse->db; /* The database connection */
84814 Token *pObjName; /* Name of the table or index to be reindexed */
84816 /* Read the database schema. If an error occurs, leave an error message
84817 ** and code in pParse and return NULL. */
84818 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
84819 return;
84822 if( pName1==0 ){
84823 reindexDatabases(pParse, 0);
84824 return;
84825 }else if( NEVER(pName2==0) || pName2->z==0 ){
84826 char *zColl;
84827 assert( pName1->z );
84828 zColl = sqlite3NameFromToken(pParse->db, pName1);
84829 if( !zColl ) return;
84830 pColl = sqlite3FindCollSeq(db, ENC(db), zColl, 0);
84831 if( pColl ){
84832 reindexDatabases(pParse, zColl);
84833 sqlite3DbFree(db, zColl);
84834 return;
84836 sqlite3DbFree(db, zColl);
84838 iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pObjName);
84839 if( iDb<0 ) return;
84840 z = sqlite3NameFromToken(db, pObjName);
84841 if( z==0 ) return;
84842 zDb = db->aDb[iDb].zName;
84843 pTab = sqlite3FindTable(db, z, zDb);
84844 if( pTab ){
84845 reindexTable(pParse, pTab, 0);
84846 sqlite3DbFree(db, z);
84847 return;
84849 pIndex = sqlite3FindIndex(db, z, zDb);
84850 sqlite3DbFree(db, z);
84851 if( pIndex ){
84852 sqlite3BeginWriteOperation(pParse, 0, iDb);
84853 sqlite3RefillIndex(pParse, pIndex, -1);
84854 return;
84856 sqlite3ErrorMsg(pParse, "unable to identify the object to be reindexed");
84858 #endif
84861 ** Return a dynamicly allocated KeyInfo structure that can be used
84862 ** with OP_OpenRead or OP_OpenWrite to access database index pIdx.
84864 ** If successful, a pointer to the new structure is returned. In this case
84865 ** the caller is responsible for calling sqlite3DbFree(db, ) on the returned
84866 ** pointer. If an error occurs (out of memory or missing collation
84867 ** sequence), NULL is returned and the state of pParse updated to reflect
84868 ** the error.
84870 SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *pParse, Index *pIdx){
84871 int i;
84872 int nCol = pIdx->nColumn;
84873 int nBytes = sizeof(KeyInfo) + (nCol-1)*sizeof(CollSeq*) + nCol;
84874 sqlite3 *db = pParse->db;
84875 KeyInfo *pKey = (KeyInfo *)sqlite3DbMallocZero(db, nBytes);
84877 if( pKey ){
84878 pKey->db = pParse->db;
84879 pKey->aSortOrder = (u8 *)&(pKey->aColl[nCol]);
84880 assert( &pKey->aSortOrder[nCol]==&(((u8 *)pKey)[nBytes]) );
84881 for(i=0; i<nCol; i++){
84882 char *zColl = pIdx->azColl[i];
84883 assert( zColl );
84884 pKey->aColl[i] = sqlite3LocateCollSeq(pParse, zColl);
84885 pKey->aSortOrder[i] = pIdx->aSortOrder[i];
84887 pKey->nField = (u16)nCol;
84890 if( pParse->nErr ){
84891 sqlite3DbFree(db, pKey);
84892 pKey = 0;
84894 return pKey;
84897 /************** End of build.c ***********************************************/
84898 /************** Begin file callback.c ****************************************/
84900 ** 2005 May 23
84902 ** The author disclaims copyright to this source code. In place of
84903 ** a legal notice, here is a blessing:
84905 ** May you do good and not evil.
84906 ** May you find forgiveness for yourself and forgive others.
84907 ** May you share freely, never taking more than you give.
84909 *************************************************************************
84911 ** This file contains functions used to access the internal hash tables
84912 ** of user defined functions and collation sequences.
84917 ** Invoke the 'collation needed' callback to request a collation sequence
84918 ** in the encoding enc of name zName, length nName.
84920 static void callCollNeeded(sqlite3 *db, int enc, const char *zName){
84921 assert( !db->xCollNeeded || !db->xCollNeeded16 );
84922 if( db->xCollNeeded ){
84923 char *zExternal = sqlite3DbStrDup(db, zName);
84924 if( !zExternal ) return;
84925 db->xCollNeeded(db->pCollNeededArg, db, enc, zExternal);
84926 sqlite3DbFree(db, zExternal);
84928 #ifndef SQLITE_OMIT_UTF16
84929 if( db->xCollNeeded16 ){
84930 char const *zExternal;
84931 sqlite3_value *pTmp = sqlite3ValueNew(db);
84932 sqlite3ValueSetStr(pTmp, -1, zName, SQLITE_UTF8, SQLITE_STATIC);
84933 zExternal = sqlite3ValueText(pTmp, SQLITE_UTF16NATIVE);
84934 if( zExternal ){
84935 db->xCollNeeded16(db->pCollNeededArg, db, (int)ENC(db), zExternal);
84937 sqlite3ValueFree(pTmp);
84939 #endif
84943 ** This routine is called if the collation factory fails to deliver a
84944 ** collation function in the best encoding but there may be other versions
84945 ** of this collation function (for other text encodings) available. Use one
84946 ** of these instead if they exist. Avoid a UTF-8 <-> UTF-16 conversion if
84947 ** possible.
84949 static int synthCollSeq(sqlite3 *db, CollSeq *pColl){
84950 CollSeq *pColl2;
84951 char *z = pColl->zName;
84952 int i;
84953 static const u8 aEnc[] = { SQLITE_UTF16BE, SQLITE_UTF16LE, SQLITE_UTF8 };
84954 for(i=0; i<3; i++){
84955 pColl2 = sqlite3FindCollSeq(db, aEnc[i], z, 0);
84956 if( pColl2->xCmp!=0 ){
84957 memcpy(pColl, pColl2, sizeof(CollSeq));
84958 pColl->xDel = 0; /* Do not copy the destructor */
84959 return SQLITE_OK;
84962 return SQLITE_ERROR;
84966 ** This function is responsible for invoking the collation factory callback
84967 ** or substituting a collation sequence of a different encoding when the
84968 ** requested collation sequence is not available in the desired encoding.
84970 ** If it is not NULL, then pColl must point to the database native encoding
84971 ** collation sequence with name zName, length nName.
84973 ** The return value is either the collation sequence to be used in database
84974 ** db for collation type name zName, length nName, or NULL, if no collation
84975 ** sequence can be found.
84977 ** See also: sqlite3LocateCollSeq(), sqlite3FindCollSeq()
84979 SQLITE_PRIVATE CollSeq *sqlite3GetCollSeq(
84980 sqlite3* db, /* The database connection */
84981 u8 enc, /* The desired encoding for the collating sequence */
84982 CollSeq *pColl, /* Collating sequence with native encoding, or NULL */
84983 const char *zName /* Collating sequence name */
84985 CollSeq *p;
84987 p = pColl;
84988 if( !p ){
84989 p = sqlite3FindCollSeq(db, enc, zName, 0);
84991 if( !p || !p->xCmp ){
84992 /* No collation sequence of this type for this encoding is registered.
84993 ** Call the collation factory to see if it can supply us with one.
84995 callCollNeeded(db, enc, zName);
84996 p = sqlite3FindCollSeq(db, enc, zName, 0);
84998 if( p && !p->xCmp && synthCollSeq(db, p) ){
84999 p = 0;
85001 assert( !p || p->xCmp );
85002 return p;
85006 ** This routine is called on a collation sequence before it is used to
85007 ** check that it is defined. An undefined collation sequence exists when
85008 ** a database is loaded that contains references to collation sequences
85009 ** that have not been defined by sqlite3_create_collation() etc.
85011 ** If required, this routine calls the 'collation needed' callback to
85012 ** request a definition of the collating sequence. If this doesn't work,
85013 ** an equivalent collating sequence that uses a text encoding different
85014 ** from the main database is substituted, if one is available.
85016 SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){
85017 if( pColl ){
85018 const char *zName = pColl->zName;
85019 sqlite3 *db = pParse->db;
85020 CollSeq *p = sqlite3GetCollSeq(db, ENC(db), pColl, zName);
85021 if( !p ){
85022 sqlite3ErrorMsg(pParse, "no such collation sequence: %s", zName);
85023 pParse->nErr++;
85024 return SQLITE_ERROR;
85026 assert( p==pColl );
85028 return SQLITE_OK;
85034 ** Locate and return an entry from the db.aCollSeq hash table. If the entry
85035 ** specified by zName and nName is not found and parameter 'create' is
85036 ** true, then create a new entry. Otherwise return NULL.
85038 ** Each pointer stored in the sqlite3.aCollSeq hash table contains an
85039 ** array of three CollSeq structures. The first is the collation sequence
85040 ** prefferred for UTF-8, the second UTF-16le, and the third UTF-16be.
85042 ** Stored immediately after the three collation sequences is a copy of
85043 ** the collation sequence name. A pointer to this string is stored in
85044 ** each collation sequence structure.
85046 static CollSeq *findCollSeqEntry(
85047 sqlite3 *db, /* Database connection */
85048 const char *zName, /* Name of the collating sequence */
85049 int create /* Create a new entry if true */
85051 CollSeq *pColl;
85052 int nName = sqlite3Strlen30(zName);
85053 pColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
85055 if( 0==pColl && create ){
85056 pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1 );
85057 if( pColl ){
85058 CollSeq *pDel = 0;
85059 pColl[0].zName = (char*)&pColl[3];
85060 pColl[0].enc = SQLITE_UTF8;
85061 pColl[1].zName = (char*)&pColl[3];
85062 pColl[1].enc = SQLITE_UTF16LE;
85063 pColl[2].zName = (char*)&pColl[3];
85064 pColl[2].enc = SQLITE_UTF16BE;
85065 memcpy(pColl[0].zName, zName, nName);
85066 pColl[0].zName[nName] = 0;
85067 pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, nName, pColl);
85069 /* If a malloc() failure occurred in sqlite3HashInsert(), it will
85070 ** return the pColl pointer to be deleted (because it wasn't added
85071 ** to the hash table).
85073 assert( pDel==0 || pDel==pColl );
85074 if( pDel!=0 ){
85075 db->mallocFailed = 1;
85076 sqlite3DbFree(db, pDel);
85077 pColl = 0;
85081 return pColl;
85085 ** Parameter zName points to a UTF-8 encoded string nName bytes long.
85086 ** Return the CollSeq* pointer for the collation sequence named zName
85087 ** for the encoding 'enc' from the database 'db'.
85089 ** If the entry specified is not found and 'create' is true, then create a
85090 ** new entry. Otherwise return NULL.
85092 ** A separate function sqlite3LocateCollSeq() is a wrapper around
85093 ** this routine. sqlite3LocateCollSeq() invokes the collation factory
85094 ** if necessary and generates an error message if the collating sequence
85095 ** cannot be found.
85097 ** See also: sqlite3LocateCollSeq(), sqlite3GetCollSeq()
85099 SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(
85100 sqlite3 *db,
85101 u8 enc,
85102 const char *zName,
85103 int create
85105 CollSeq *pColl;
85106 if( zName ){
85107 pColl = findCollSeqEntry(db, zName, create);
85108 }else{
85109 pColl = db->pDfltColl;
85111 assert( SQLITE_UTF8==1 && SQLITE_UTF16LE==2 && SQLITE_UTF16BE==3 );
85112 assert( enc>=SQLITE_UTF8 && enc<=SQLITE_UTF16BE );
85113 if( pColl ) pColl += enc-1;
85114 return pColl;
85117 /* During the search for the best function definition, this procedure
85118 ** is called to test how well the function passed as the first argument
85119 ** matches the request for a function with nArg arguments in a system
85120 ** that uses encoding enc. The value returned indicates how well the
85121 ** request is matched. A higher value indicates a better match.
85123 ** The returned value is always between 0 and 6, as follows:
85125 ** 0: Not a match, or if nArg<0 and the function is has no implementation.
85126 ** 1: A variable arguments function that prefers UTF-8 when a UTF-16
85127 ** encoding is requested, or vice versa.
85128 ** 2: A variable arguments function that uses UTF-16BE when UTF-16LE is
85129 ** requested, or vice versa.
85130 ** 3: A variable arguments function using the same text encoding.
85131 ** 4: A function with the exact number of arguments requested that
85132 ** prefers UTF-8 when a UTF-16 encoding is requested, or vice versa.
85133 ** 5: A function with the exact number of arguments requested that
85134 ** prefers UTF-16LE when UTF-16BE is requested, or vice versa.
85135 ** 6: An exact match.
85138 static int matchQuality(FuncDef *p, int nArg, u8 enc){
85139 int match = 0;
85140 if( p->nArg==-1 || p->nArg==nArg
85141 || (nArg==-1 && (p->xFunc!=0 || p->xStep!=0))
85143 match = 1;
85144 if( p->nArg==nArg || nArg==-1 ){
85145 match = 4;
85147 if( enc==p->iPrefEnc ){
85148 match += 2;
85150 else if( (enc==SQLITE_UTF16LE && p->iPrefEnc==SQLITE_UTF16BE) ||
85151 (enc==SQLITE_UTF16BE && p->iPrefEnc==SQLITE_UTF16LE) ){
85152 match += 1;
85155 return match;
85159 ** Search a FuncDefHash for a function with the given name. Return
85160 ** a pointer to the matching FuncDef if found, or 0 if there is no match.
85162 static FuncDef *functionSearch(
85163 FuncDefHash *pHash, /* Hash table to search */
85164 int h, /* Hash of the name */
85165 const char *zFunc, /* Name of function */
85166 int nFunc /* Number of bytes in zFunc */
85168 FuncDef *p;
85169 for(p=pHash->a[h]; p; p=p->pHash){
85170 if( sqlite3StrNICmp(p->zName, zFunc, nFunc)==0 && p->zName[nFunc]==0 ){
85171 return p;
85174 return 0;
85178 ** Insert a new FuncDef into a FuncDefHash hash table.
85180 SQLITE_PRIVATE void sqlite3FuncDefInsert(
85181 FuncDefHash *pHash, /* The hash table into which to insert */
85182 FuncDef *pDef /* The function definition to insert */
85184 FuncDef *pOther;
85185 int nName = sqlite3Strlen30(pDef->zName);
85186 u8 c1 = (u8)pDef->zName[0];
85187 int h = (sqlite3UpperToLower[c1] + nName) % ArraySize(pHash->a);
85188 pOther = functionSearch(pHash, h, pDef->zName, nName);
85189 if( pOther ){
85190 assert( pOther!=pDef && pOther->pNext!=pDef );
85191 pDef->pNext = pOther->pNext;
85192 pOther->pNext = pDef;
85193 }else{
85194 pDef->pNext = 0;
85195 pDef->pHash = pHash->a[h];
85196 pHash->a[h] = pDef;
85203 ** Locate a user function given a name, a number of arguments and a flag
85204 ** indicating whether the function prefers UTF-16 over UTF-8. Return a
85205 ** pointer to the FuncDef structure that defines that function, or return
85206 ** NULL if the function does not exist.
85208 ** If the createFlag argument is true, then a new (blank) FuncDef
85209 ** structure is created and liked into the "db" structure if a
85210 ** no matching function previously existed. When createFlag is true
85211 ** and the nArg parameter is -1, then only a function that accepts
85212 ** any number of arguments will be returned.
85214 ** If createFlag is false and nArg is -1, then the first valid
85215 ** function found is returned. A function is valid if either xFunc
85216 ** or xStep is non-zero.
85218 ** If createFlag is false, then a function with the required name and
85219 ** number of arguments may be returned even if the eTextRep flag does not
85220 ** match that requested.
85222 SQLITE_PRIVATE FuncDef *sqlite3FindFunction(
85223 sqlite3 *db, /* An open database */
85224 const char *zName, /* Name of the function. Not null-terminated */
85225 int nName, /* Number of characters in the name */
85226 int nArg, /* Number of arguments. -1 means any number */
85227 u8 enc, /* Preferred text encoding */
85228 int createFlag /* Create new entry if true and does not otherwise exist */
85230 FuncDef *p; /* Iterator variable */
85231 FuncDef *pBest = 0; /* Best match found so far */
85232 int bestScore = 0; /* Score of best match */
85233 int h; /* Hash value */
85236 assert( enc==SQLITE_UTF8 || enc==SQLITE_UTF16LE || enc==SQLITE_UTF16BE );
85237 h = (sqlite3UpperToLower[(u8)zName[0]] + nName) % ArraySize(db->aFunc.a);
85239 /* First search for a match amongst the application-defined functions.
85241 p = functionSearch(&db->aFunc, h, zName, nName);
85242 while( p ){
85243 int score = matchQuality(p, nArg, enc);
85244 if( score>bestScore ){
85245 pBest = p;
85246 bestScore = score;
85248 p = p->pNext;
85251 /* If no match is found, search the built-in functions.
85253 ** If the SQLITE_PreferBuiltin flag is set, then search the built-in
85254 ** functions even if a prior app-defined function was found. And give
85255 ** priority to built-in functions.
85257 ** Except, if createFlag is true, that means that we are trying to
85258 ** install a new function. Whatever FuncDef structure is returned it will
85259 ** have fields overwritten with new information appropriate for the
85260 ** new function. But the FuncDefs for built-in functions are read-only.
85261 ** So we must not search for built-ins when creating a new function.
85263 if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){
85264 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
85265 bestScore = 0;
85266 p = functionSearch(pHash, h, zName, nName);
85267 while( p ){
85268 int score = matchQuality(p, nArg, enc);
85269 if( score>bestScore ){
85270 pBest = p;
85271 bestScore = score;
85273 p = p->pNext;
85277 /* If the createFlag parameter is true and the search did not reveal an
85278 ** exact match for the name, number of arguments and encoding, then add a
85279 ** new entry to the hash table and return it.
85281 if( createFlag && (bestScore<6 || pBest->nArg!=nArg) &&
85282 (pBest = sqlite3DbMallocZero(db, sizeof(*pBest)+nName+1))!=0 ){
85283 pBest->zName = (char *)&pBest[1];
85284 pBest->nArg = (u16)nArg;
85285 pBest->iPrefEnc = enc;
85286 memcpy(pBest->zName, zName, nName);
85287 pBest->zName[nName] = 0;
85288 sqlite3FuncDefInsert(&db->aFunc, pBest);
85291 if( pBest && (pBest->xStep || pBest->xFunc || createFlag) ){
85292 return pBest;
85294 return 0;
85298 ** Free all resources held by the schema structure. The void* argument points
85299 ** at a Schema struct. This function does not call sqlite3DbFree(db, ) on the
85300 ** pointer itself, it just cleans up subsidiary resources (i.e. the contents
85301 ** of the schema hash tables).
85303 ** The Schema.cache_size variable is not cleared.
85305 SQLITE_PRIVATE void sqlite3SchemaClear(void *p){
85306 Hash temp1;
85307 Hash temp2;
85308 HashElem *pElem;
85309 Schema *pSchema = (Schema *)p;
85311 temp1 = pSchema->tblHash;
85312 temp2 = pSchema->trigHash;
85313 sqlite3HashInit(&pSchema->trigHash);
85314 sqlite3HashClear(&pSchema->idxHash);
85315 for(pElem=sqliteHashFirst(&temp2); pElem; pElem=sqliteHashNext(pElem)){
85316 sqlite3DeleteTrigger(0, (Trigger*)sqliteHashData(pElem));
85318 sqlite3HashClear(&temp2);
85319 sqlite3HashInit(&pSchema->tblHash);
85320 for(pElem=sqliteHashFirst(&temp1); pElem; pElem=sqliteHashNext(pElem)){
85321 Table *pTab = sqliteHashData(pElem);
85322 sqlite3DeleteTable(0, pTab);
85324 sqlite3HashClear(&temp1);
85325 sqlite3HashClear(&pSchema->fkeyHash);
85326 pSchema->pSeqTab = 0;
85327 if( pSchema->flags & DB_SchemaLoaded ){
85328 pSchema->iGeneration++;
85329 pSchema->flags &= ~DB_SchemaLoaded;
85334 ** Find and return the schema associated with a BTree. Create
85335 ** a new one if necessary.
85337 SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *db, Btree *pBt){
85338 Schema * p;
85339 if( pBt ){
85340 p = (Schema *)sqlite3BtreeSchema(pBt, sizeof(Schema), sqlite3SchemaClear);
85341 }else{
85342 p = (Schema *)sqlite3DbMallocZero(0, sizeof(Schema));
85344 if( !p ){
85345 db->mallocFailed = 1;
85346 }else if ( 0==p->file_format ){
85347 sqlite3HashInit(&p->tblHash);
85348 sqlite3HashInit(&p->idxHash);
85349 sqlite3HashInit(&p->trigHash);
85350 sqlite3HashInit(&p->fkeyHash);
85351 p->enc = SQLITE_UTF8;
85353 return p;
85356 /************** End of callback.c ********************************************/
85357 /************** Begin file delete.c ******************************************/
85359 ** 2001 September 15
85361 ** The author disclaims copyright to this source code. In place of
85362 ** a legal notice, here is a blessing:
85364 ** May you do good and not evil.
85365 ** May you find forgiveness for yourself and forgive others.
85366 ** May you share freely, never taking more than you give.
85368 *************************************************************************
85369 ** This file contains C code routines that are called by the parser
85370 ** in order to generate code for DELETE FROM statements.
85374 ** While a SrcList can in general represent multiple tables and subqueries
85375 ** (as in the FROM clause of a SELECT statement) in this case it contains
85376 ** the name of a single table, as one might find in an INSERT, DELETE,
85377 ** or UPDATE statement. Look up that table in the symbol table and
85378 ** return a pointer. Set an error message and return NULL if the table
85379 ** name is not found or if any other error occurs.
85381 ** The following fields are initialized appropriate in pSrc:
85383 ** pSrc->a[0].pTab Pointer to the Table object
85384 ** pSrc->a[0].pIndex Pointer to the INDEXED BY index, if there is one
85387 SQLITE_PRIVATE Table *sqlite3SrcListLookup(Parse *pParse, SrcList *pSrc){
85388 struct SrcList_item *pItem = pSrc->a;
85389 Table *pTab;
85390 assert( pItem && pSrc->nSrc==1 );
85391 pTab = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
85392 sqlite3DeleteTable(pParse->db, pItem->pTab);
85393 pItem->pTab = pTab;
85394 if( pTab ){
85395 pTab->nRef++;
85397 if( sqlite3IndexedByLookup(pParse, pItem) ){
85398 pTab = 0;
85400 return pTab;
85404 ** Check to make sure the given table is writable. If it is not
85405 ** writable, generate an error message and return 1. If it is
85406 ** writable return 0;
85408 SQLITE_PRIVATE int sqlite3IsReadOnly(Parse *pParse, Table *pTab, int viewOk){
85409 /* A table is not writable under the following circumstances:
85411 ** 1) It is a virtual table and no implementation of the xUpdate method
85412 ** has been provided, or
85413 ** 2) It is a system table (i.e. sqlite_master), this call is not
85414 ** part of a nested parse and writable_schema pragma has not
85415 ** been specified.
85417 ** In either case leave an error message in pParse and return non-zero.
85419 if( ( IsVirtual(pTab)
85420 && sqlite3GetVTable(pParse->db, pTab)->pMod->pModule->xUpdate==0 )
85421 || ( (pTab->tabFlags & TF_Readonly)!=0
85422 && (pParse->db->flags & SQLITE_WriteSchema)==0
85423 && pParse->nested==0 )
85425 sqlite3ErrorMsg(pParse, "table %s may not be modified", pTab->zName);
85426 return 1;
85429 #ifndef SQLITE_OMIT_VIEW
85430 if( !viewOk && pTab->pSelect ){
85431 sqlite3ErrorMsg(pParse,"cannot modify %s because it is a view",pTab->zName);
85432 return 1;
85434 #endif
85435 return 0;
85439 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
85441 ** Evaluate a view and store its result in an ephemeral table. The
85442 ** pWhere argument is an optional WHERE clause that restricts the
85443 ** set of rows in the view that are to be added to the ephemeral table.
85445 SQLITE_PRIVATE void sqlite3MaterializeView(
85446 Parse *pParse, /* Parsing context */
85447 Table *pView, /* View definition */
85448 Expr *pWhere, /* Optional WHERE clause to be added */
85449 int iCur /* Cursor number for ephemerial table */
85451 SelectDest dest;
85452 Select *pDup;
85453 sqlite3 *db = pParse->db;
85455 pDup = sqlite3SelectDup(db, pView->pSelect, 0);
85456 if( pWhere ){
85457 SrcList *pFrom;
85459 pWhere = sqlite3ExprDup(db, pWhere, 0);
85460 pFrom = sqlite3SrcListAppend(db, 0, 0, 0);
85461 if( pFrom ){
85462 assert( pFrom->nSrc==1 );
85463 pFrom->a[0].zAlias = sqlite3DbStrDup(db, pView->zName);
85464 pFrom->a[0].pSelect = pDup;
85465 assert( pFrom->a[0].pOn==0 );
85466 assert( pFrom->a[0].pUsing==0 );
85467 }else{
85468 sqlite3SelectDelete(db, pDup);
85470 pDup = sqlite3SelectNew(pParse, 0, pFrom, pWhere, 0, 0, 0, 0, 0, 0);
85472 sqlite3SelectDestInit(&dest, SRT_EphemTab, iCur);
85473 sqlite3Select(pParse, pDup, &dest);
85474 sqlite3SelectDelete(db, pDup);
85476 #endif /* !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER) */
85478 #if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
85480 ** Generate an expression tree to implement the WHERE, ORDER BY,
85481 ** and LIMIT/OFFSET portion of DELETE and UPDATE statements.
85483 ** DELETE FROM table_wxyz WHERE a<5 ORDER BY a LIMIT 1;
85484 ** \__________________________/
85485 ** pLimitWhere (pInClause)
85487 SQLITE_PRIVATE Expr *sqlite3LimitWhere(
85488 Parse *pParse, /* The parser context */
85489 SrcList *pSrc, /* the FROM clause -- which tables to scan */
85490 Expr *pWhere, /* The WHERE clause. May be null */
85491 ExprList *pOrderBy, /* The ORDER BY clause. May be null */
85492 Expr *pLimit, /* The LIMIT clause. May be null */
85493 Expr *pOffset, /* The OFFSET clause. May be null */
85494 char *zStmtType /* Either DELETE or UPDATE. For error messages. */
85496 Expr *pWhereRowid = NULL; /* WHERE rowid .. */
85497 Expr *pInClause = NULL; /* WHERE rowid IN ( select ) */
85498 Expr *pSelectRowid = NULL; /* SELECT rowid ... */
85499 ExprList *pEList = NULL; /* Expression list contaning only pSelectRowid */
85500 SrcList *pSelectSrc = NULL; /* SELECT rowid FROM x ... (dup of pSrc) */
85501 Select *pSelect = NULL; /* Complete SELECT tree */
85503 /* Check that there isn't an ORDER BY without a LIMIT clause.
85505 if( pOrderBy && (pLimit == 0) ) {
85506 sqlite3ErrorMsg(pParse, "ORDER BY without LIMIT on %s", zStmtType);
85507 goto limit_where_cleanup_2;
85510 /* We only need to generate a select expression if there
85511 ** is a limit/offset term to enforce.
85513 if( pLimit == 0 ) {
85514 /* if pLimit is null, pOffset will always be null as well. */
85515 assert( pOffset == 0 );
85516 return pWhere;
85519 /* Generate a select expression tree to enforce the limit/offset
85520 ** term for the DELETE or UPDATE statement. For example:
85521 ** DELETE FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
85522 ** becomes:
85523 ** DELETE FROM table_a WHERE rowid IN (
85524 ** SELECT rowid FROM table_a WHERE col1=1 ORDER BY col2 LIMIT 1 OFFSET 1
85525 ** );
85528 pSelectRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
85529 if( pSelectRowid == 0 ) goto limit_where_cleanup_2;
85530 pEList = sqlite3ExprListAppend(pParse, 0, pSelectRowid);
85531 if( pEList == 0 ) goto limit_where_cleanup_2;
85533 /* duplicate the FROM clause as it is needed by both the DELETE/UPDATE tree
85534 ** and the SELECT subtree. */
85535 pSelectSrc = sqlite3SrcListDup(pParse->db, pSrc, 0);
85536 if( pSelectSrc == 0 ) {
85537 sqlite3ExprListDelete(pParse->db, pEList);
85538 goto limit_where_cleanup_2;
85541 /* generate the SELECT expression tree. */
85542 pSelect = sqlite3SelectNew(pParse,pEList,pSelectSrc,pWhere,0,0,
85543 pOrderBy,0,pLimit,pOffset);
85544 if( pSelect == 0 ) return 0;
85546 /* now generate the new WHERE rowid IN clause for the DELETE/UDPATE */
85547 pWhereRowid = sqlite3PExpr(pParse, TK_ROW, 0, 0, 0);
85548 if( pWhereRowid == 0 ) goto limit_where_cleanup_1;
85549 pInClause = sqlite3PExpr(pParse, TK_IN, pWhereRowid, 0, 0);
85550 if( pInClause == 0 ) goto limit_where_cleanup_1;
85552 pInClause->x.pSelect = pSelect;
85553 pInClause->flags |= EP_xIsSelect;
85554 sqlite3ExprSetHeight(pParse, pInClause);
85555 return pInClause;
85557 /* something went wrong. clean up anything allocated. */
85558 limit_where_cleanup_1:
85559 sqlite3SelectDelete(pParse->db, pSelect);
85560 return 0;
85562 limit_where_cleanup_2:
85563 sqlite3ExprDelete(pParse->db, pWhere);
85564 sqlite3ExprListDelete(pParse->db, pOrderBy);
85565 sqlite3ExprDelete(pParse->db, pLimit);
85566 sqlite3ExprDelete(pParse->db, pOffset);
85567 return 0;
85569 #endif /* defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY) */
85572 ** Generate code for a DELETE FROM statement.
85574 ** DELETE FROM table_wxyz WHERE a<5 AND b NOT NULL;
85575 ** \________/ \________________/
85576 ** pTabList pWhere
85578 SQLITE_PRIVATE void sqlite3DeleteFrom(
85579 Parse *pParse, /* The parser context */
85580 SrcList *pTabList, /* The table from which we should delete things */
85581 Expr *pWhere /* The WHERE clause. May be null */
85583 Vdbe *v; /* The virtual database engine */
85584 Table *pTab; /* The table from which records will be deleted */
85585 const char *zDb; /* Name of database holding pTab */
85586 int end, addr = 0; /* A couple addresses of generated code */
85587 int i; /* Loop counter */
85588 WhereInfo *pWInfo; /* Information about the WHERE clause */
85589 Index *pIdx; /* For looping over indices of the table */
85590 int iCur; /* VDBE Cursor number for pTab */
85591 sqlite3 *db; /* Main database structure */
85592 AuthContext sContext; /* Authorization context */
85593 NameContext sNC; /* Name context to resolve expressions in */
85594 int iDb; /* Database number */
85595 int memCnt = -1; /* Memory cell used for change counting */
85596 int rcauth; /* Value returned by authorization callback */
85598 #ifndef SQLITE_OMIT_TRIGGER
85599 int isView; /* True if attempting to delete from a view */
85600 Trigger *pTrigger; /* List of table triggers, if required */
85601 #endif
85603 memset(&sContext, 0, sizeof(sContext));
85604 db = pParse->db;
85605 if( pParse->nErr || db->mallocFailed ){
85606 goto delete_from_cleanup;
85608 assert( pTabList->nSrc==1 );
85610 /* Locate the table which we want to delete. This table has to be
85611 ** put in an SrcList structure because some of the subroutines we
85612 ** will be calling are designed to work with multiple tables and expect
85613 ** an SrcList* parameter instead of just a Table* parameter.
85615 pTab = sqlite3SrcListLookup(pParse, pTabList);
85616 if( pTab==0 ) goto delete_from_cleanup;
85618 /* Figure out if we have any triggers and if the table being
85619 ** deleted from is a view
85621 #ifndef SQLITE_OMIT_TRIGGER
85622 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
85623 isView = pTab->pSelect!=0;
85624 #else
85625 # define pTrigger 0
85626 # define isView 0
85627 #endif
85628 #ifdef SQLITE_OMIT_VIEW
85629 # undef isView
85630 # define isView 0
85631 #endif
85633 /* If pTab is really a view, make sure it has been initialized.
85635 if( sqlite3ViewGetColumnNames(pParse, pTab) ){
85636 goto delete_from_cleanup;
85639 if( sqlite3IsReadOnly(pParse, pTab, (pTrigger?1:0)) ){
85640 goto delete_from_cleanup;
85642 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
85643 assert( iDb<db->nDb );
85644 zDb = db->aDb[iDb].zName;
85645 rcauth = sqlite3AuthCheck(pParse, SQLITE_DELETE, pTab->zName, 0, zDb);
85646 assert( rcauth==SQLITE_OK || rcauth==SQLITE_DENY || rcauth==SQLITE_IGNORE );
85647 if( rcauth==SQLITE_DENY ){
85648 goto delete_from_cleanup;
85650 assert(!isView || pTrigger);
85652 /* Assign cursor number to the table and all its indices.
85654 assert( pTabList->nSrc==1 );
85655 iCur = pTabList->a[0].iCursor = pParse->nTab++;
85656 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
85657 pParse->nTab++;
85660 /* Start the view context
85662 if( isView ){
85663 sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
85666 /* Begin generating code.
85668 v = sqlite3GetVdbe(pParse);
85669 if( v==0 ){
85670 goto delete_from_cleanup;
85672 if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
85673 sqlite3BeginWriteOperation(pParse, 1, iDb);
85675 /* If we are trying to delete from a view, realize that view into
85676 ** a ephemeral table.
85678 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
85679 if( isView ){
85680 sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
85682 #endif
85684 /* Resolve the column names in the WHERE clause.
85686 memset(&sNC, 0, sizeof(sNC));
85687 sNC.pParse = pParse;
85688 sNC.pSrcList = pTabList;
85689 if( sqlite3ResolveExprNames(&sNC, pWhere) ){
85690 goto delete_from_cleanup;
85693 /* Initialize the counter of the number of rows deleted, if
85694 ** we are counting rows.
85696 if( db->flags & SQLITE_CountRows ){
85697 memCnt = ++pParse->nMem;
85698 sqlite3VdbeAddOp2(v, OP_Integer, 0, memCnt);
85701 #ifndef SQLITE_OMIT_TRUNCATE_OPTIMIZATION
85702 /* Special case: A DELETE without a WHERE clause deletes everything.
85703 ** It is easier just to erase the whole table. Prior to version 3.6.5,
85704 ** this optimization caused the row change count (the value returned by
85705 ** API function sqlite3_count_changes) to be set incorrectly. */
85706 if( rcauth==SQLITE_OK && pWhere==0 && !pTrigger && !IsVirtual(pTab)
85707 && 0==sqlite3FkRequired(pParse, pTab, 0, 0)
85709 assert( !isView );
85710 sqlite3VdbeAddOp4(v, OP_Clear, pTab->tnum, iDb, memCnt,
85711 pTab->zName, P4_STATIC);
85712 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
85713 assert( pIdx->pSchema==pTab->pSchema );
85714 sqlite3VdbeAddOp2(v, OP_Clear, pIdx->tnum, iDb);
85716 }else
85717 #endif /* SQLITE_OMIT_TRUNCATE_OPTIMIZATION */
85718 /* The usual case: There is a WHERE clause so we have to scan through
85719 ** the table and pick which records to delete.
85722 int iRowSet = ++pParse->nMem; /* Register for rowset of rows to delete */
85723 int iRowid = ++pParse->nMem; /* Used for storing rowid values. */
85724 int regRowid; /* Actual register containing rowids */
85726 /* Collect rowids of every row to be deleted.
85728 sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet);
85729 pWInfo = sqlite3WhereBegin(
85730 pParse, pTabList, pWhere, 0, 0, WHERE_DUPLICATES_OK
85732 if( pWInfo==0 ) goto delete_from_cleanup;
85733 regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid);
85734 sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid);
85735 if( db->flags & SQLITE_CountRows ){
85736 sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1);
85738 sqlite3WhereEnd(pWInfo);
85740 /* Delete every item whose key was written to the list during the
85741 ** database scan. We have to delete items after the scan is complete
85742 ** because deleting an item can change the scan order. */
85743 end = sqlite3VdbeMakeLabel(v);
85745 /* Unless this is a view, open cursors for the table we are
85746 ** deleting from and all its indices. If this is a view, then the
85747 ** only effect this statement has is to fire the INSTEAD OF
85748 ** triggers. */
85749 if( !isView ){
85750 sqlite3OpenTableAndIndices(pParse, pTab, iCur, OP_OpenWrite);
85753 addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, iRowSet, end, iRowid);
85755 /* Delete the row */
85756 #ifndef SQLITE_OMIT_VIRTUALTABLE
85757 if( IsVirtual(pTab) ){
85758 const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
85759 sqlite3VtabMakeWritable(pParse, pTab);
85760 sqlite3VdbeAddOp4(v, OP_VUpdate, 0, 1, iRowid, pVTab, P4_VTAB);
85761 sqlite3VdbeChangeP5(v, OE_Abort);
85762 sqlite3MayAbort(pParse);
85763 }else
85764 #endif
85766 int count = (pParse->nested==0); /* True to count changes */
85767 sqlite3GenerateRowDelete(pParse, pTab, iCur, iRowid, count, pTrigger, OE_Default);
85770 /* End of the delete loop */
85771 sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
85772 sqlite3VdbeResolveLabel(v, end);
85774 /* Close the cursors open on the table and its indexes. */
85775 if( !isView && !IsVirtual(pTab) ){
85776 for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
85777 sqlite3VdbeAddOp2(v, OP_Close, iCur + i, pIdx->tnum);
85779 sqlite3VdbeAddOp1(v, OP_Close, iCur);
85783 /* Update the sqlite_sequence table by storing the content of the
85784 ** maximum rowid counter values recorded while inserting into
85785 ** autoincrement tables.
85787 if( pParse->nested==0 && pParse->pTriggerTab==0 ){
85788 sqlite3AutoincrementEnd(pParse);
85791 /* Return the number of rows that were deleted. If this routine is
85792 ** generating code because of a call to sqlite3NestedParse(), do not
85793 ** invoke the callback function.
85795 if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
85796 sqlite3VdbeAddOp2(v, OP_ResultRow, memCnt, 1);
85797 sqlite3VdbeSetNumCols(v, 1);
85798 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows deleted", SQLITE_STATIC);
85801 delete_from_cleanup:
85802 sqlite3AuthContextPop(&sContext);
85803 sqlite3SrcListDelete(db, pTabList);
85804 sqlite3ExprDelete(db, pWhere);
85805 return;
85807 /* Make sure "isView" and other macros defined above are undefined. Otherwise
85808 ** thely may interfere with compilation of other functions in this file
85809 ** (or in another file, if this file becomes part of the amalgamation). */
85810 #ifdef isView
85811 #undef isView
85812 #endif
85813 #ifdef pTrigger
85814 #undef pTrigger
85815 #endif
85818 ** This routine generates VDBE code that causes a single row of a
85819 ** single table to be deleted.
85821 ** The VDBE must be in a particular state when this routine is called.
85822 ** These are the requirements:
85824 ** 1. A read/write cursor pointing to pTab, the table containing the row
85825 ** to be deleted, must be opened as cursor number $iCur.
85827 ** 2. Read/write cursors for all indices of pTab must be open as
85828 ** cursor number base+i for the i-th index.
85830 ** 3. The record number of the row to be deleted must be stored in
85831 ** memory cell iRowid.
85833 ** This routine generates code to remove both the table record and all
85834 ** index entries that point to that record.
85836 SQLITE_PRIVATE void sqlite3GenerateRowDelete(
85837 Parse *pParse, /* Parsing context */
85838 Table *pTab, /* Table containing the row to be deleted */
85839 int iCur, /* Cursor number for the table */
85840 int iRowid, /* Memory cell that contains the rowid to delete */
85841 int count, /* If non-zero, increment the row change counter */
85842 Trigger *pTrigger, /* List of triggers to (potentially) fire */
85843 int onconf /* Default ON CONFLICT policy for triggers */
85845 Vdbe *v = pParse->pVdbe; /* Vdbe */
85846 int iOld = 0; /* First register in OLD.* array */
85847 int iLabel; /* Label resolved to end of generated code */
85849 /* Vdbe is guaranteed to have been allocated by this stage. */
85850 assert( v );
85852 /* Seek cursor iCur to the row to delete. If this row no longer exists
85853 ** (this can happen if a trigger program has already deleted it), do
85854 ** not attempt to delete it or fire any DELETE triggers. */
85855 iLabel = sqlite3VdbeMakeLabel(v);
85856 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
85858 /* If there are any triggers to fire, allocate a range of registers to
85859 ** use for the old.* references in the triggers. */
85860 if( sqlite3FkRequired(pParse, pTab, 0, 0) || pTrigger ){
85861 u32 mask; /* Mask of OLD.* columns in use */
85862 int iCol; /* Iterator used while populating OLD.* */
85864 /* TODO: Could use temporary registers here. Also could attempt to
85865 ** avoid copying the contents of the rowid register. */
85866 mask = sqlite3TriggerColmask(
85867 pParse, pTrigger, 0, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onconf
85869 mask |= sqlite3FkOldmask(pParse, pTab);
85870 iOld = pParse->nMem+1;
85871 pParse->nMem += (1 + pTab->nCol);
85873 /* Populate the OLD.* pseudo-table register array. These values will be
85874 ** used by any BEFORE and AFTER triggers that exist. */
85875 sqlite3VdbeAddOp2(v, OP_Copy, iRowid, iOld);
85876 for(iCol=0; iCol<pTab->nCol; iCol++){
85877 if( mask==0xffffffff || mask&(1<<iCol) ){
85878 sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, iCol, iOld+iCol+1);
85882 /* Invoke BEFORE DELETE trigger programs. */
85883 sqlite3CodeRowTrigger(pParse, pTrigger,
85884 TK_DELETE, 0, TRIGGER_BEFORE, pTab, iOld, onconf, iLabel
85887 /* Seek the cursor to the row to be deleted again. It may be that
85888 ** the BEFORE triggers coded above have already removed the row
85889 ** being deleted. Do not attempt to delete the row a second time, and
85890 ** do not fire AFTER triggers. */
85891 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, iLabel, iRowid);
85893 /* Do FK processing. This call checks that any FK constraints that
85894 ** refer to this table (i.e. constraints attached to other tables)
85895 ** are not violated by deleting this row. */
85896 sqlite3FkCheck(pParse, pTab, iOld, 0);
85899 /* Delete the index and table entries. Skip this step if pTab is really
85900 ** a view (in which case the only effect of the DELETE statement is to
85901 ** fire the INSTEAD OF triggers). */
85902 if( pTab->pSelect==0 ){
85903 sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, 0);
85904 sqlite3VdbeAddOp2(v, OP_Delete, iCur, (count?OPFLAG_NCHANGE:0));
85905 if( count ){
85906 sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
85910 /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
85911 ** handle rows (possibly in other tables) that refer via a foreign key
85912 ** to the row just deleted. */
85913 sqlite3FkActions(pParse, pTab, 0, iOld);
85915 /* Invoke AFTER DELETE trigger programs. */
85916 sqlite3CodeRowTrigger(pParse, pTrigger,
85917 TK_DELETE, 0, TRIGGER_AFTER, pTab, iOld, onconf, iLabel
85920 /* Jump here if the row had already been deleted before any BEFORE
85921 ** trigger programs were invoked. Or if a trigger program throws a
85922 ** RAISE(IGNORE) exception. */
85923 sqlite3VdbeResolveLabel(v, iLabel);
85927 ** This routine generates VDBE code that causes the deletion of all
85928 ** index entries associated with a single row of a single table.
85930 ** The VDBE must be in a particular state when this routine is called.
85931 ** These are the requirements:
85933 ** 1. A read/write cursor pointing to pTab, the table containing the row
85934 ** to be deleted, must be opened as cursor number "iCur".
85936 ** 2. Read/write cursors for all indices of pTab must be open as
85937 ** cursor number iCur+i for the i-th index.
85939 ** 3. The "iCur" cursor must be pointing to the row that is to be
85940 ** deleted.
85942 SQLITE_PRIVATE void sqlite3GenerateRowIndexDelete(
85943 Parse *pParse, /* Parsing and code generating context */
85944 Table *pTab, /* Table containing the row to be deleted */
85945 int iCur, /* Cursor number for the table */
85946 int *aRegIdx /* Only delete if aRegIdx!=0 && aRegIdx[i]>0 */
85948 int i;
85949 Index *pIdx;
85950 int r1;
85952 for(i=1, pIdx=pTab->pIndex; pIdx; i++, pIdx=pIdx->pNext){
85953 if( aRegIdx!=0 && aRegIdx[i-1]==0 ) continue;
85954 r1 = sqlite3GenerateIndexKey(pParse, pIdx, iCur, 0, 0);
85955 sqlite3VdbeAddOp3(pParse->pVdbe, OP_IdxDelete, iCur+i, r1,pIdx->nColumn+1);
85960 ** Generate code that will assemble an index key and put it in register
85961 ** regOut. The key with be for index pIdx which is an index on pTab.
85962 ** iCur is the index of a cursor open on the pTab table and pointing to
85963 ** the entry that needs indexing.
85965 ** Return a register number which is the first in a block of
85966 ** registers that holds the elements of the index key. The
85967 ** block of registers has already been deallocated by the time
85968 ** this routine returns.
85970 SQLITE_PRIVATE int sqlite3GenerateIndexKey(
85971 Parse *pParse, /* Parsing context */
85972 Index *pIdx, /* The index for which to generate a key */
85973 int iCur, /* Cursor number for the pIdx->pTable table */
85974 int regOut, /* Write the new index key to this register */
85975 int doMakeRec /* Run the OP_MakeRecord instruction if true */
85977 Vdbe *v = pParse->pVdbe;
85978 int j;
85979 Table *pTab = pIdx->pTable;
85980 int regBase;
85981 int nCol;
85983 nCol = pIdx->nColumn;
85984 regBase = sqlite3GetTempRange(pParse, nCol+1);
85985 sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regBase+nCol);
85986 for(j=0; j<nCol; j++){
85987 int idx = pIdx->aiColumn[j];
85988 if( idx==pTab->iPKey ){
85989 sqlite3VdbeAddOp2(v, OP_SCopy, regBase+nCol, regBase+j);
85990 }else{
85991 sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j);
85992 sqlite3ColumnDefault(v, pTab, idx, -1);
85995 if( doMakeRec ){
85996 const char *zAff;
85997 if( pTab->pSelect || (pParse->db->flags & SQLITE_IdxRealAsInt)!=0 ){
85998 zAff = 0;
85999 }else{
86000 zAff = sqlite3IndexAffinityStr(v, pIdx);
86002 sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut);
86003 sqlite3VdbeChangeP4(v, -1, zAff, P4_TRANSIENT);
86005 sqlite3ReleaseTempRange(pParse, regBase, nCol+1);
86006 return regBase;
86009 /************** End of delete.c **********************************************/
86010 /************** Begin file func.c ********************************************/
86012 ** 2002 February 23
86014 ** The author disclaims copyright to this source code. In place of
86015 ** a legal notice, here is a blessing:
86017 ** May you do good and not evil.
86018 ** May you find forgiveness for yourself and forgive others.
86019 ** May you share freely, never taking more than you give.
86021 *************************************************************************
86022 ** This file contains the C functions that implement various SQL
86023 ** functions of SQLite.
86025 ** There is only one exported symbol in this file - the function
86026 ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
86027 ** All other code has file scope.
86029 /* #include <stdlib.h> */
86030 /* #include <assert.h> */
86033 ** Return the collating function associated with a function.
86035 static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
86036 return context->pColl;
86040 ** Implementation of the non-aggregate min() and max() functions
86042 static void minmaxFunc(
86043 sqlite3_context *context,
86044 int argc,
86045 sqlite3_value **argv
86047 int i;
86048 int mask; /* 0 for min() or 0xffffffff for max() */
86049 int iBest;
86050 CollSeq *pColl;
86052 assert( argc>1 );
86053 mask = sqlite3_user_data(context)==0 ? 0 : -1;
86054 pColl = sqlite3GetFuncCollSeq(context);
86055 assert( pColl );
86056 assert( mask==-1 || mask==0 );
86057 iBest = 0;
86058 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
86059 for(i=1; i<argc; i++){
86060 if( sqlite3_value_type(argv[i])==SQLITE_NULL ) return;
86061 if( (sqlite3MemCompare(argv[iBest], argv[i], pColl)^mask)>=0 ){
86062 testcase( mask==0 );
86063 iBest = i;
86066 sqlite3_result_value(context, argv[iBest]);
86070 ** Return the type of the argument.
86072 static void typeofFunc(
86073 sqlite3_context *context,
86074 int NotUsed,
86075 sqlite3_value **argv
86077 const char *z = 0;
86078 UNUSED_PARAMETER(NotUsed);
86079 switch( sqlite3_value_type(argv[0]) ){
86080 case SQLITE_INTEGER: z = "integer"; break;
86081 case SQLITE_TEXT: z = "text"; break;
86082 case SQLITE_FLOAT: z = "real"; break;
86083 case SQLITE_BLOB: z = "blob"; break;
86084 default: z = "null"; break;
86086 sqlite3_result_text(context, z, -1, SQLITE_STATIC);
86091 ** Implementation of the length() function
86093 static void lengthFunc(
86094 sqlite3_context *context,
86095 int argc,
86096 sqlite3_value **argv
86098 int len;
86100 assert( argc==1 );
86101 UNUSED_PARAMETER(argc);
86102 switch( sqlite3_value_type(argv[0]) ){
86103 case SQLITE_BLOB:
86104 case SQLITE_INTEGER:
86105 case SQLITE_FLOAT: {
86106 sqlite3_result_int(context, sqlite3_value_bytes(argv[0]));
86107 break;
86109 case SQLITE_TEXT: {
86110 const unsigned char *z = sqlite3_value_text(argv[0]);
86111 if( z==0 ) return;
86112 len = 0;
86113 while( *z ){
86114 len++;
86115 SQLITE_SKIP_UTF8(z);
86117 sqlite3_result_int(context, len);
86118 break;
86120 default: {
86121 sqlite3_result_null(context);
86122 break;
86128 ** Implementation of the abs() function.
86130 ** IMP: R-23979-26855 The abs(X) function returns the absolute value of
86131 ** the numeric argument X.
86133 static void absFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86134 assert( argc==1 );
86135 UNUSED_PARAMETER(argc);
86136 switch( sqlite3_value_type(argv[0]) ){
86137 case SQLITE_INTEGER: {
86138 i64 iVal = sqlite3_value_int64(argv[0]);
86139 if( iVal<0 ){
86140 if( (iVal<<1)==0 ){
86141 /* IMP: R-35460-15084 If X is the integer -9223372036854775807 then
86142 ** abs(X) throws an integer overflow error since there is no
86143 ** equivalent positive 64-bit two complement value. */
86144 sqlite3_result_error(context, "integer overflow", -1);
86145 return;
86147 iVal = -iVal;
86149 sqlite3_result_int64(context, iVal);
86150 break;
86152 case SQLITE_NULL: {
86153 /* IMP: R-37434-19929 Abs(X) returns NULL if X is NULL. */
86154 sqlite3_result_null(context);
86155 break;
86157 default: {
86158 /* Because sqlite3_value_double() returns 0.0 if the argument is not
86159 ** something that can be converted into a number, we have:
86160 ** IMP: R-57326-31541 Abs(X) return 0.0 if X is a string or blob that
86161 ** cannot be converted to a numeric value.
86163 double rVal = sqlite3_value_double(argv[0]);
86164 if( rVal<0 ) rVal = -rVal;
86165 sqlite3_result_double(context, rVal);
86166 break;
86172 ** Implementation of the substr() function.
86174 ** substr(x,p1,p2) returns p2 characters of x[] beginning with p1.
86175 ** p1 is 1-indexed. So substr(x,1,1) returns the first character
86176 ** of x. If x is text, then we actually count UTF-8 characters.
86177 ** If x is a blob, then we count bytes.
86179 ** If p1 is negative, then we begin abs(p1) from the end of x[].
86181 ** If p2 is negative, return the p2 characters preceeding p1.
86183 static void substrFunc(
86184 sqlite3_context *context,
86185 int argc,
86186 sqlite3_value **argv
86188 const unsigned char *z;
86189 const unsigned char *z2;
86190 int len;
86191 int p0type;
86192 i64 p1, p2;
86193 int negP2 = 0;
86195 assert( argc==3 || argc==2 );
86196 if( sqlite3_value_type(argv[1])==SQLITE_NULL
86197 || (argc==3 && sqlite3_value_type(argv[2])==SQLITE_NULL)
86199 return;
86201 p0type = sqlite3_value_type(argv[0]);
86202 p1 = sqlite3_value_int(argv[1]);
86203 if( p0type==SQLITE_BLOB ){
86204 len = sqlite3_value_bytes(argv[0]);
86205 z = sqlite3_value_blob(argv[0]);
86206 if( z==0 ) return;
86207 assert( len==sqlite3_value_bytes(argv[0]) );
86208 }else{
86209 z = sqlite3_value_text(argv[0]);
86210 if( z==0 ) return;
86211 len = 0;
86212 if( p1<0 ){
86213 for(z2=z; *z2; len++){
86214 SQLITE_SKIP_UTF8(z2);
86218 if( argc==3 ){
86219 p2 = sqlite3_value_int(argv[2]);
86220 if( p2<0 ){
86221 p2 = -p2;
86222 negP2 = 1;
86224 }else{
86225 p2 = sqlite3_context_db_handle(context)->aLimit[SQLITE_LIMIT_LENGTH];
86227 if( p1<0 ){
86228 p1 += len;
86229 if( p1<0 ){
86230 p2 += p1;
86231 if( p2<0 ) p2 = 0;
86232 p1 = 0;
86234 }else if( p1>0 ){
86235 p1--;
86236 }else if( p2>0 ){
86237 p2--;
86239 if( negP2 ){
86240 p1 -= p2;
86241 if( p1<0 ){
86242 p2 += p1;
86243 p1 = 0;
86246 assert( p1>=0 && p2>=0 );
86247 if( p0type!=SQLITE_BLOB ){
86248 while( *z && p1 ){
86249 SQLITE_SKIP_UTF8(z);
86250 p1--;
86252 for(z2=z; *z2 && p2; p2--){
86253 SQLITE_SKIP_UTF8(z2);
86255 sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
86256 }else{
86257 if( p1+p2>len ){
86258 p2 = len-p1;
86259 if( p2<0 ) p2 = 0;
86261 sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
86266 ** Implementation of the round() function
86268 #ifndef SQLITE_OMIT_FLOATING_POINT
86269 static void roundFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86270 int n = 0;
86271 double r;
86272 char *zBuf;
86273 assert( argc==1 || argc==2 );
86274 if( argc==2 ){
86275 if( SQLITE_NULL==sqlite3_value_type(argv[1]) ) return;
86276 n = sqlite3_value_int(argv[1]);
86277 if( n>30 ) n = 30;
86278 if( n<0 ) n = 0;
86280 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
86281 r = sqlite3_value_double(argv[0]);
86282 /* If Y==0 and X will fit in a 64-bit int,
86283 ** handle the rounding directly,
86284 ** otherwise use printf.
86286 if( n==0 && r>=0 && r<LARGEST_INT64-1 ){
86287 r = (double)((sqlite_int64)(r+0.5));
86288 }else if( n==0 && r<0 && (-r)<LARGEST_INT64-1 ){
86289 r = -(double)((sqlite_int64)((-r)+0.5));
86290 }else{
86291 zBuf = sqlite3_mprintf("%.*f",n,r);
86292 if( zBuf==0 ){
86293 sqlite3_result_error_nomem(context);
86294 return;
86296 sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
86297 sqlite3_free(zBuf);
86299 sqlite3_result_double(context, r);
86301 #endif
86304 ** Allocate nByte bytes of space using sqlite3_malloc(). If the
86305 ** allocation fails, call sqlite3_result_error_nomem() to notify
86306 ** the database handle that malloc() has failed and return NULL.
86307 ** If nByte is larger than the maximum string or blob length, then
86308 ** raise an SQLITE_TOOBIG exception and return NULL.
86310 static void *contextMalloc(sqlite3_context *context, i64 nByte){
86311 char *z;
86312 sqlite3 *db = sqlite3_context_db_handle(context);
86313 assert( nByte>0 );
86314 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH] );
86315 testcase( nByte==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
86316 if( nByte>db->aLimit[SQLITE_LIMIT_LENGTH] ){
86317 sqlite3_result_error_toobig(context);
86318 z = 0;
86319 }else{
86320 z = sqlite3Malloc((int)nByte);
86321 if( !z ){
86322 sqlite3_result_error_nomem(context);
86325 return z;
86329 ** Implementation of the upper() and lower() SQL functions.
86331 static void upperFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86332 char *z1;
86333 const char *z2;
86334 int i, n;
86335 UNUSED_PARAMETER(argc);
86336 z2 = (char*)sqlite3_value_text(argv[0]);
86337 n = sqlite3_value_bytes(argv[0]);
86338 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
86339 assert( z2==(char*)sqlite3_value_text(argv[0]) );
86340 if( z2 ){
86341 z1 = contextMalloc(context, ((i64)n)+1);
86342 if( z1 ){
86343 for(i=0; i<n; i++){
86344 z1[i] = (char)sqlite3Toupper(z2[i]);
86346 sqlite3_result_text(context, z1, n, sqlite3_free);
86350 static void lowerFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86351 char *z1;
86352 const char *z2;
86353 int i, n;
86354 UNUSED_PARAMETER(argc);
86355 z2 = (char*)sqlite3_value_text(argv[0]);
86356 n = sqlite3_value_bytes(argv[0]);
86357 /* Verify that the call to _bytes() does not invalidate the _text() pointer */
86358 assert( z2==(char*)sqlite3_value_text(argv[0]) );
86359 if( z2 ){
86360 z1 = contextMalloc(context, ((i64)n)+1);
86361 if( z1 ){
86362 for(i=0; i<n; i++){
86363 z1[i] = sqlite3Tolower(z2[i]);
86365 sqlite3_result_text(context, z1, n, sqlite3_free);
86371 #if 0 /* This function is never used. */
86373 ** The COALESCE() and IFNULL() functions used to be implemented as shown
86374 ** here. But now they are implemented as VDBE code so that unused arguments
86375 ** do not have to be computed. This legacy implementation is retained as
86376 ** comment.
86379 ** Implementation of the IFNULL(), NVL(), and COALESCE() functions.
86380 ** All three do the same thing. They return the first non-NULL
86381 ** argument.
86383 static void ifnullFunc(
86384 sqlite3_context *context,
86385 int argc,
86386 sqlite3_value **argv
86388 int i;
86389 for(i=0; i<argc; i++){
86390 if( SQLITE_NULL!=sqlite3_value_type(argv[i]) ){
86391 sqlite3_result_value(context, argv[i]);
86392 break;
86396 #endif /* NOT USED */
86397 #define ifnullFunc versionFunc /* Substitute function - never called */
86400 ** Implementation of random(). Return a random integer.
86402 static void randomFunc(
86403 sqlite3_context *context,
86404 int NotUsed,
86405 sqlite3_value **NotUsed2
86407 sqlite_int64 r;
86408 UNUSED_PARAMETER2(NotUsed, NotUsed2);
86409 sqlite3_randomness(sizeof(r), &r);
86410 if( r<0 ){
86411 /* We need to prevent a random number of 0x8000000000000000
86412 ** (or -9223372036854775808) since when you do abs() of that
86413 ** number of you get the same value back again. To do this
86414 ** in a way that is testable, mask the sign bit off of negative
86415 ** values, resulting in a positive value. Then take the
86416 ** 2s complement of that positive value. The end result can
86417 ** therefore be no less than -9223372036854775807.
86419 r = -(r ^ (((sqlite3_int64)1)<<63));
86421 sqlite3_result_int64(context, r);
86425 ** Implementation of randomblob(N). Return a random blob
86426 ** that is N bytes long.
86428 static void randomBlob(
86429 sqlite3_context *context,
86430 int argc,
86431 sqlite3_value **argv
86433 int n;
86434 unsigned char *p;
86435 assert( argc==1 );
86436 UNUSED_PARAMETER(argc);
86437 n = sqlite3_value_int(argv[0]);
86438 if( n<1 ){
86439 n = 1;
86441 p = contextMalloc(context, n);
86442 if( p ){
86443 sqlite3_randomness(n, p);
86444 sqlite3_result_blob(context, (char*)p, n, sqlite3_free);
86449 ** Implementation of the last_insert_rowid() SQL function. The return
86450 ** value is the same as the sqlite3_last_insert_rowid() API function.
86452 static void last_insert_rowid(
86453 sqlite3_context *context,
86454 int NotUsed,
86455 sqlite3_value **NotUsed2
86457 sqlite3 *db = sqlite3_context_db_handle(context);
86458 UNUSED_PARAMETER2(NotUsed, NotUsed2);
86459 /* IMP: R-51513-12026 The last_insert_rowid() SQL function is a
86460 ** wrapper around the sqlite3_last_insert_rowid() C/C++ interface
86461 ** function. */
86462 sqlite3_result_int64(context, sqlite3_last_insert_rowid(db));
86466 ** Implementation of the changes() SQL function.
86468 ** IMP: R-62073-11209 The changes() SQL function is a wrapper
86469 ** around the sqlite3_changes() C/C++ function and hence follows the same
86470 ** rules for counting changes.
86472 static void changes(
86473 sqlite3_context *context,
86474 int NotUsed,
86475 sqlite3_value **NotUsed2
86477 sqlite3 *db = sqlite3_context_db_handle(context);
86478 UNUSED_PARAMETER2(NotUsed, NotUsed2);
86479 sqlite3_result_int(context, sqlite3_changes(db));
86483 ** Implementation of the total_changes() SQL function. The return value is
86484 ** the same as the sqlite3_total_changes() API function.
86486 static void total_changes(
86487 sqlite3_context *context,
86488 int NotUsed,
86489 sqlite3_value **NotUsed2
86491 sqlite3 *db = sqlite3_context_db_handle(context);
86492 UNUSED_PARAMETER2(NotUsed, NotUsed2);
86493 /* IMP: R-52756-41993 This function is a wrapper around the
86494 ** sqlite3_total_changes() C/C++ interface. */
86495 sqlite3_result_int(context, sqlite3_total_changes(db));
86499 ** A structure defining how to do GLOB-style comparisons.
86501 struct compareInfo {
86502 u8 matchAll;
86503 u8 matchOne;
86504 u8 matchSet;
86505 u8 noCase;
86509 ** For LIKE and GLOB matching on EBCDIC machines, assume that every
86510 ** character is exactly one byte in size. Also, all characters are
86511 ** able to participate in upper-case-to-lower-case mappings in EBCDIC
86512 ** whereas only characters less than 0x80 do in ASCII.
86514 #if defined(SQLITE_EBCDIC)
86515 # define sqlite3Utf8Read(A,C) (*(A++))
86516 # define GlogUpperToLower(A) A = sqlite3UpperToLower[A]
86517 #else
86518 # define GlogUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
86519 #endif
86521 static const struct compareInfo globInfo = { '*', '?', '[', 0 };
86522 /* The correct SQL-92 behavior is for the LIKE operator to ignore
86523 ** case. Thus 'a' LIKE 'A' would be true. */
86524 static const struct compareInfo likeInfoNorm = { '%', '_', 0, 1 };
86525 /* If SQLITE_CASE_SENSITIVE_LIKE is defined, then the LIKE operator
86526 ** is case sensitive causing 'a' LIKE 'A' to be false */
86527 static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
86530 ** Compare two UTF-8 strings for equality where the first string can
86531 ** potentially be a "glob" expression. Return true (1) if they
86532 ** are the same and false (0) if they are different.
86534 ** Globbing rules:
86536 ** '*' Matches any sequence of zero or more characters.
86538 ** '?' Matches exactly one character.
86540 ** [...] Matches one character from the enclosed list of
86541 ** characters.
86543 ** [^...] Matches one character not in the enclosed list.
86545 ** With the [...] and [^...] matching, a ']' character can be included
86546 ** in the list by making it the first character after '[' or '^'. A
86547 ** range of characters can be specified using '-'. Example:
86548 ** "[a-z]" matches any single lower-case letter. To match a '-', make
86549 ** it the last character in the list.
86551 ** This routine is usually quick, but can be N**2 in the worst case.
86553 ** Hints: to match '*' or '?', put them in "[]". Like this:
86555 ** abc[*]xyz Matches "abc*xyz" only
86557 static int patternCompare(
86558 const u8 *zPattern, /* The glob pattern */
86559 const u8 *zString, /* The string to compare against the glob */
86560 const struct compareInfo *pInfo, /* Information about how to do the compare */
86561 u32 esc /* The escape character */
86563 u32 c, c2;
86564 int invert;
86565 int seen;
86566 u8 matchOne = pInfo->matchOne;
86567 u8 matchAll = pInfo->matchAll;
86568 u8 matchSet = pInfo->matchSet;
86569 u8 noCase = pInfo->noCase;
86570 int prevEscape = 0; /* True if the previous character was 'escape' */
86572 while( (c = sqlite3Utf8Read(zPattern,&zPattern))!=0 ){
86573 if( !prevEscape && c==matchAll ){
86574 while( (c=sqlite3Utf8Read(zPattern,&zPattern)) == matchAll
86575 || c == matchOne ){
86576 if( c==matchOne && sqlite3Utf8Read(zString, &zString)==0 ){
86577 return 0;
86580 if( c==0 ){
86581 return 1;
86582 }else if( c==esc ){
86583 c = sqlite3Utf8Read(zPattern, &zPattern);
86584 if( c==0 ){
86585 return 0;
86587 }else if( c==matchSet ){
86588 assert( esc==0 ); /* This is GLOB, not LIKE */
86589 assert( matchSet<0x80 ); /* '[' is a single-byte character */
86590 while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
86591 SQLITE_SKIP_UTF8(zString);
86593 return *zString!=0;
86595 while( (c2 = sqlite3Utf8Read(zString,&zString))!=0 ){
86596 if( noCase ){
86597 GlogUpperToLower(c2);
86598 GlogUpperToLower(c);
86599 while( c2 != 0 && c2 != c ){
86600 c2 = sqlite3Utf8Read(zString, &zString);
86601 GlogUpperToLower(c2);
86603 }else{
86604 while( c2 != 0 && c2 != c ){
86605 c2 = sqlite3Utf8Read(zString, &zString);
86608 if( c2==0 ) return 0;
86609 if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
86611 return 0;
86612 }else if( !prevEscape && c==matchOne ){
86613 if( sqlite3Utf8Read(zString, &zString)==0 ){
86614 return 0;
86616 }else if( c==matchSet ){
86617 u32 prior_c = 0;
86618 assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
86619 seen = 0;
86620 invert = 0;
86621 c = sqlite3Utf8Read(zString, &zString);
86622 if( c==0 ) return 0;
86623 c2 = sqlite3Utf8Read(zPattern, &zPattern);
86624 if( c2=='^' ){
86625 invert = 1;
86626 c2 = sqlite3Utf8Read(zPattern, &zPattern);
86628 if( c2==']' ){
86629 if( c==']' ) seen = 1;
86630 c2 = sqlite3Utf8Read(zPattern, &zPattern);
86632 while( c2 && c2!=']' ){
86633 if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
86634 c2 = sqlite3Utf8Read(zPattern, &zPattern);
86635 if( c>=prior_c && c<=c2 ) seen = 1;
86636 prior_c = 0;
86637 }else{
86638 if( c==c2 ){
86639 seen = 1;
86641 prior_c = c2;
86643 c2 = sqlite3Utf8Read(zPattern, &zPattern);
86645 if( c2==0 || (seen ^ invert)==0 ){
86646 return 0;
86648 }else if( esc==c && !prevEscape ){
86649 prevEscape = 1;
86650 }else{
86651 c2 = sqlite3Utf8Read(zString, &zString);
86652 if( noCase ){
86653 GlogUpperToLower(c);
86654 GlogUpperToLower(c2);
86656 if( c!=c2 ){
86657 return 0;
86659 prevEscape = 0;
86662 return *zString==0;
86666 ** Count the number of times that the LIKE operator (or GLOB which is
86667 ** just a variation of LIKE) gets called. This is used for testing
86668 ** only.
86670 #ifdef SQLITE_TEST
86671 SQLITE_API int sqlite3_like_count = 0;
86672 #endif
86676 ** Implementation of the like() SQL function. This function implements
86677 ** the build-in LIKE operator. The first argument to the function is the
86678 ** pattern and the second argument is the string. So, the SQL statements:
86680 ** A LIKE B
86682 ** is implemented as like(B,A).
86684 ** This same function (with a different compareInfo structure) computes
86685 ** the GLOB operator.
86687 static void likeFunc(
86688 sqlite3_context *context,
86689 int argc,
86690 sqlite3_value **argv
86692 const unsigned char *zA, *zB;
86693 u32 escape = 0;
86694 int nPat;
86695 sqlite3 *db = sqlite3_context_db_handle(context);
86697 zB = sqlite3_value_text(argv[0]);
86698 zA = sqlite3_value_text(argv[1]);
86700 /* Limit the length of the LIKE or GLOB pattern to avoid problems
86701 ** of deep recursion and N*N behavior in patternCompare().
86703 nPat = sqlite3_value_bytes(argv[0]);
86704 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] );
86705 testcase( nPat==db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]+1 );
86706 if( nPat > db->aLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH] ){
86707 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
86708 return;
86710 assert( zB==sqlite3_value_text(argv[0]) ); /* Encoding did not change */
86712 if( argc==3 ){
86713 /* The escape character string must consist of a single UTF-8 character.
86714 ** Otherwise, return an error.
86716 const unsigned char *zEsc = sqlite3_value_text(argv[2]);
86717 if( zEsc==0 ) return;
86718 if( sqlite3Utf8CharLen((char*)zEsc, -1)!=1 ){
86719 sqlite3_result_error(context,
86720 "ESCAPE expression must be a single character", -1);
86721 return;
86723 escape = sqlite3Utf8Read(zEsc, &zEsc);
86725 if( zA && zB ){
86726 struct compareInfo *pInfo = sqlite3_user_data(context);
86727 #ifdef SQLITE_TEST
86728 sqlite3_like_count++;
86729 #endif
86731 sqlite3_result_int(context, patternCompare(zB, zA, pInfo, escape));
86736 ** Implementation of the NULLIF(x,y) function. The result is the first
86737 ** argument if the arguments are different. The result is NULL if the
86738 ** arguments are equal to each other.
86740 static void nullifFunc(
86741 sqlite3_context *context,
86742 int NotUsed,
86743 sqlite3_value **argv
86745 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
86746 UNUSED_PARAMETER(NotUsed);
86747 if( sqlite3MemCompare(argv[0], argv[1], pColl)!=0 ){
86748 sqlite3_result_value(context, argv[0]);
86753 ** Implementation of the sqlite_version() function. The result is the version
86754 ** of the SQLite library that is running.
86756 static void versionFunc(
86757 sqlite3_context *context,
86758 int NotUsed,
86759 sqlite3_value **NotUsed2
86761 UNUSED_PARAMETER2(NotUsed, NotUsed2);
86762 /* IMP: R-48699-48617 This function is an SQL wrapper around the
86763 ** sqlite3_libversion() C-interface. */
86764 sqlite3_result_text(context, sqlite3_libversion(), -1, SQLITE_STATIC);
86768 ** Implementation of the sqlite_source_id() function. The result is a string
86769 ** that identifies the particular version of the source code used to build
86770 ** SQLite.
86772 static void sourceidFunc(
86773 sqlite3_context *context,
86774 int NotUsed,
86775 sqlite3_value **NotUsed2
86777 UNUSED_PARAMETER2(NotUsed, NotUsed2);
86778 /* IMP: R-24470-31136 This function is an SQL wrapper around the
86779 ** sqlite3_sourceid() C interface. */
86780 sqlite3_result_text(context, sqlite3_sourceid(), -1, SQLITE_STATIC);
86784 ** Implementation of the sqlite_log() function. This is a wrapper around
86785 ** sqlite3_log(). The return value is NULL. The function exists purely for
86786 ** its side-effects.
86788 static void errlogFunc(
86789 sqlite3_context *context,
86790 int argc,
86791 sqlite3_value **argv
86793 UNUSED_PARAMETER(argc);
86794 UNUSED_PARAMETER(context);
86795 sqlite3_log(sqlite3_value_int(argv[0]), "%s", sqlite3_value_text(argv[1]));
86799 ** Implementation of the sqlite_compileoption_used() function.
86800 ** The result is an integer that identifies if the compiler option
86801 ** was used to build SQLite.
86803 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
86804 static void compileoptionusedFunc(
86805 sqlite3_context *context,
86806 int argc,
86807 sqlite3_value **argv
86809 const char *zOptName;
86810 assert( argc==1 );
86811 UNUSED_PARAMETER(argc);
86812 /* IMP: R-39564-36305 The sqlite_compileoption_used() SQL
86813 ** function is a wrapper around the sqlite3_compileoption_used() C/C++
86814 ** function.
86816 if( (zOptName = (const char*)sqlite3_value_text(argv[0]))!=0 ){
86817 sqlite3_result_int(context, sqlite3_compileoption_used(zOptName));
86820 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
86823 ** Implementation of the sqlite_compileoption_get() function.
86824 ** The result is a string that identifies the compiler options
86825 ** used to build SQLite.
86827 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
86828 static void compileoptiongetFunc(
86829 sqlite3_context *context,
86830 int argc,
86831 sqlite3_value **argv
86833 int n;
86834 assert( argc==1 );
86835 UNUSED_PARAMETER(argc);
86836 /* IMP: R-04922-24076 The sqlite_compileoption_get() SQL function
86837 ** is a wrapper around the sqlite3_compileoption_get() C/C++ function.
86839 n = sqlite3_value_int(argv[0]);
86840 sqlite3_result_text(context, sqlite3_compileoption_get(n), -1, SQLITE_STATIC);
86842 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
86844 /* Array for converting from half-bytes (nybbles) into ASCII hex
86845 ** digits. */
86846 static const char hexdigits[] = {
86847 '0', '1', '2', '3', '4', '5', '6', '7',
86848 '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'
86852 ** EXPERIMENTAL - This is not an official function. The interface may
86853 ** change. This function may disappear. Do not write code that depends
86854 ** on this function.
86856 ** Implementation of the QUOTE() function. This function takes a single
86857 ** argument. If the argument is numeric, the return value is the same as
86858 ** the argument. If the argument is NULL, the return value is the string
86859 ** "NULL". Otherwise, the argument is enclosed in single quotes with
86860 ** single-quote escapes.
86862 static void quoteFunc(sqlite3_context *context, int argc, sqlite3_value **argv){
86863 assert( argc==1 );
86864 UNUSED_PARAMETER(argc);
86865 switch( sqlite3_value_type(argv[0]) ){
86866 case SQLITE_INTEGER:
86867 case SQLITE_FLOAT: {
86868 sqlite3_result_value(context, argv[0]);
86869 break;
86871 case SQLITE_BLOB: {
86872 char *zText = 0;
86873 char const *zBlob = sqlite3_value_blob(argv[0]);
86874 int nBlob = sqlite3_value_bytes(argv[0]);
86875 assert( zBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
86876 zText = (char *)contextMalloc(context, (2*(i64)nBlob)+4);
86877 if( zText ){
86878 int i;
86879 for(i=0; i<nBlob; i++){
86880 zText[(i*2)+2] = hexdigits[(zBlob[i]>>4)&0x0F];
86881 zText[(i*2)+3] = hexdigits[(zBlob[i])&0x0F];
86883 zText[(nBlob*2)+2] = '\'';
86884 zText[(nBlob*2)+3] = '\0';
86885 zText[0] = 'X';
86886 zText[1] = '\'';
86887 sqlite3_result_text(context, zText, -1, SQLITE_TRANSIENT);
86888 sqlite3_free(zText);
86890 break;
86892 case SQLITE_TEXT: {
86893 int i,j;
86894 u64 n;
86895 const unsigned char *zArg = sqlite3_value_text(argv[0]);
86896 char *z;
86898 if( zArg==0 ) return;
86899 for(i=0, n=0; zArg[i]; i++){ if( zArg[i]=='\'' ) n++; }
86900 z = contextMalloc(context, ((i64)i)+((i64)n)+3);
86901 if( z ){
86902 z[0] = '\'';
86903 for(i=0, j=1; zArg[i]; i++){
86904 z[j++] = zArg[i];
86905 if( zArg[i]=='\'' ){
86906 z[j++] = '\'';
86909 z[j++] = '\'';
86910 z[j] = 0;
86911 sqlite3_result_text(context, z, j, sqlite3_free);
86913 break;
86915 default: {
86916 assert( sqlite3_value_type(argv[0])==SQLITE_NULL );
86917 sqlite3_result_text(context, "NULL", 4, SQLITE_STATIC);
86918 break;
86924 ** The hex() function. Interpret the argument as a blob. Return
86925 ** a hexadecimal rendering as text.
86927 static void hexFunc(
86928 sqlite3_context *context,
86929 int argc,
86930 sqlite3_value **argv
86932 int i, n;
86933 const unsigned char *pBlob;
86934 char *zHex, *z;
86935 assert( argc==1 );
86936 UNUSED_PARAMETER(argc);
86937 pBlob = sqlite3_value_blob(argv[0]);
86938 n = sqlite3_value_bytes(argv[0]);
86939 assert( pBlob==sqlite3_value_blob(argv[0]) ); /* No encoding change */
86940 z = zHex = contextMalloc(context, ((i64)n)*2 + 1);
86941 if( zHex ){
86942 for(i=0; i<n; i++, pBlob++){
86943 unsigned char c = *pBlob;
86944 *(z++) = hexdigits[(c>>4)&0xf];
86945 *(z++) = hexdigits[c&0xf];
86947 *z = 0;
86948 sqlite3_result_text(context, zHex, n*2, sqlite3_free);
86953 ** The zeroblob(N) function returns a zero-filled blob of size N bytes.
86955 static void zeroblobFunc(
86956 sqlite3_context *context,
86957 int argc,
86958 sqlite3_value **argv
86960 i64 n;
86961 sqlite3 *db = sqlite3_context_db_handle(context);
86962 assert( argc==1 );
86963 UNUSED_PARAMETER(argc);
86964 n = sqlite3_value_int64(argv[0]);
86965 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH] );
86966 testcase( n==db->aLimit[SQLITE_LIMIT_LENGTH]+1 );
86967 if( n>db->aLimit[SQLITE_LIMIT_LENGTH] ){
86968 sqlite3_result_error_toobig(context);
86969 }else{
86970 sqlite3_result_zeroblob(context, (int)n); /* IMP: R-00293-64994 */
86975 ** The replace() function. Three arguments are all strings: call
86976 ** them A, B, and C. The result is also a string which is derived
86977 ** from A by replacing every occurance of B with C. The match
86978 ** must be exact. Collating sequences are not used.
86980 static void replaceFunc(
86981 sqlite3_context *context,
86982 int argc,
86983 sqlite3_value **argv
86985 const unsigned char *zStr; /* The input string A */
86986 const unsigned char *zPattern; /* The pattern string B */
86987 const unsigned char *zRep; /* The replacement string C */
86988 unsigned char *zOut; /* The output */
86989 int nStr; /* Size of zStr */
86990 int nPattern; /* Size of zPattern */
86991 int nRep; /* Size of zRep */
86992 i64 nOut; /* Maximum size of zOut */
86993 int loopLimit; /* Last zStr[] that might match zPattern[] */
86994 int i, j; /* Loop counters */
86996 assert( argc==3 );
86997 UNUSED_PARAMETER(argc);
86998 zStr = sqlite3_value_text(argv[0]);
86999 if( zStr==0 ) return;
87000 nStr = sqlite3_value_bytes(argv[0]);
87001 assert( zStr==sqlite3_value_text(argv[0]) ); /* No encoding change */
87002 zPattern = sqlite3_value_text(argv[1]);
87003 if( zPattern==0 ){
87004 assert( sqlite3_value_type(argv[1])==SQLITE_NULL
87005 || sqlite3_context_db_handle(context)->mallocFailed );
87006 return;
87008 if( zPattern[0]==0 ){
87009 assert( sqlite3_value_type(argv[1])!=SQLITE_NULL );
87010 sqlite3_result_value(context, argv[0]);
87011 return;
87013 nPattern = sqlite3_value_bytes(argv[1]);
87014 assert( zPattern==sqlite3_value_text(argv[1]) ); /* No encoding change */
87015 zRep = sqlite3_value_text(argv[2]);
87016 if( zRep==0 ) return;
87017 nRep = sqlite3_value_bytes(argv[2]);
87018 assert( zRep==sqlite3_value_text(argv[2]) );
87019 nOut = nStr + 1;
87020 assert( nOut<SQLITE_MAX_LENGTH );
87021 zOut = contextMalloc(context, (i64)nOut);
87022 if( zOut==0 ){
87023 return;
87025 loopLimit = nStr - nPattern;
87026 for(i=j=0; i<=loopLimit; i++){
87027 if( zStr[i]!=zPattern[0] || memcmp(&zStr[i], zPattern, nPattern) ){
87028 zOut[j++] = zStr[i];
87029 }else{
87030 u8 *zOld;
87031 sqlite3 *db = sqlite3_context_db_handle(context);
87032 nOut += nRep - nPattern;
87033 testcase( nOut-1==db->aLimit[SQLITE_LIMIT_LENGTH] );
87034 testcase( nOut-2==db->aLimit[SQLITE_LIMIT_LENGTH] );
87035 if( nOut-1>db->aLimit[SQLITE_LIMIT_LENGTH] ){
87036 sqlite3_result_error_toobig(context);
87037 sqlite3_free(zOut);
87038 return;
87040 zOld = zOut;
87041 zOut = sqlite3_realloc(zOut, (int)nOut);
87042 if( zOut==0 ){
87043 sqlite3_result_error_nomem(context);
87044 sqlite3_free(zOld);
87045 return;
87047 memcpy(&zOut[j], zRep, nRep);
87048 j += nRep;
87049 i += nPattern-1;
87052 assert( j+nStr-i+1==nOut );
87053 memcpy(&zOut[j], &zStr[i], nStr-i);
87054 j += nStr - i;
87055 assert( j<=nOut );
87056 zOut[j] = 0;
87057 sqlite3_result_text(context, (char*)zOut, j, sqlite3_free);
87061 ** Implementation of the TRIM(), LTRIM(), and RTRIM() functions.
87062 ** The userdata is 0x1 for left trim, 0x2 for right trim, 0x3 for both.
87064 static void trimFunc(
87065 sqlite3_context *context,
87066 int argc,
87067 sqlite3_value **argv
87069 const unsigned char *zIn; /* Input string */
87070 const unsigned char *zCharSet; /* Set of characters to trim */
87071 int nIn; /* Number of bytes in input */
87072 int flags; /* 1: trimleft 2: trimright 3: trim */
87073 int i; /* Loop counter */
87074 unsigned char *aLen = 0; /* Length of each character in zCharSet */
87075 unsigned char **azChar = 0; /* Individual characters in zCharSet */
87076 int nChar; /* Number of characters in zCharSet */
87078 if( sqlite3_value_type(argv[0])==SQLITE_NULL ){
87079 return;
87081 zIn = sqlite3_value_text(argv[0]);
87082 if( zIn==0 ) return;
87083 nIn = sqlite3_value_bytes(argv[0]);
87084 assert( zIn==sqlite3_value_text(argv[0]) );
87085 if( argc==1 ){
87086 static const unsigned char lenOne[] = { 1 };
87087 static unsigned char * const azOne[] = { (u8*)" " };
87088 nChar = 1;
87089 aLen = (u8*)lenOne;
87090 azChar = (unsigned char **)azOne;
87091 zCharSet = 0;
87092 }else if( (zCharSet = sqlite3_value_text(argv[1]))==0 ){
87093 return;
87094 }else{
87095 const unsigned char *z;
87096 for(z=zCharSet, nChar=0; *z; nChar++){
87097 SQLITE_SKIP_UTF8(z);
87099 if( nChar>0 ){
87100 azChar = contextMalloc(context, ((i64)nChar)*(sizeof(char*)+1));
87101 if( azChar==0 ){
87102 return;
87104 aLen = (unsigned char*)&azChar[nChar];
87105 for(z=zCharSet, nChar=0; *z; nChar++){
87106 azChar[nChar] = (unsigned char *)z;
87107 SQLITE_SKIP_UTF8(z);
87108 aLen[nChar] = (u8)(z - azChar[nChar]);
87112 if( nChar>0 ){
87113 flags = SQLITE_PTR_TO_INT(sqlite3_user_data(context));
87114 if( flags & 1 ){
87115 while( nIn>0 ){
87116 int len = 0;
87117 for(i=0; i<nChar; i++){
87118 len = aLen[i];
87119 if( len<=nIn && memcmp(zIn, azChar[i], len)==0 ) break;
87121 if( i>=nChar ) break;
87122 zIn += len;
87123 nIn -= len;
87126 if( flags & 2 ){
87127 while( nIn>0 ){
87128 int len = 0;
87129 for(i=0; i<nChar; i++){
87130 len = aLen[i];
87131 if( len<=nIn && memcmp(&zIn[nIn-len],azChar[i],len)==0 ) break;
87133 if( i>=nChar ) break;
87134 nIn -= len;
87137 if( zCharSet ){
87138 sqlite3_free(azChar);
87141 sqlite3_result_text(context, (char*)zIn, nIn, SQLITE_TRANSIENT);
87145 /* IMP: R-25361-16150 This function is omitted from SQLite by default. It
87146 ** is only available if the SQLITE_SOUNDEX compile-time option is used
87147 ** when SQLite is built.
87149 #ifdef SQLITE_SOUNDEX
87151 ** Compute the soundex encoding of a word.
87153 ** IMP: R-59782-00072 The soundex(X) function returns a string that is the
87154 ** soundex encoding of the string X.
87156 static void soundexFunc(
87157 sqlite3_context *context,
87158 int argc,
87159 sqlite3_value **argv
87161 char zResult[8];
87162 const u8 *zIn;
87163 int i, j;
87164 static const unsigned char iCode[] = {
87165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87166 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87167 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
87169 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
87170 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
87171 0, 0, 1, 2, 3, 0, 1, 2, 0, 0, 2, 2, 4, 5, 5, 0,
87172 1, 2, 6, 2, 3, 0, 1, 0, 2, 0, 2, 0, 0, 0, 0, 0,
87174 assert( argc==1 );
87175 zIn = (u8*)sqlite3_value_text(argv[0]);
87176 if( zIn==0 ) zIn = (u8*)"";
87177 for(i=0; zIn[i] && !sqlite3Isalpha(zIn[i]); i++){}
87178 if( zIn[i] ){
87179 u8 prevcode = iCode[zIn[i]&0x7f];
87180 zResult[0] = sqlite3Toupper(zIn[i]);
87181 for(j=1; j<4 && zIn[i]; i++){
87182 int code = iCode[zIn[i]&0x7f];
87183 if( code>0 ){
87184 if( code!=prevcode ){
87185 prevcode = code;
87186 zResult[j++] = code + '0';
87188 }else{
87189 prevcode = 0;
87192 while( j<4 ){
87193 zResult[j++] = '0';
87195 zResult[j] = 0;
87196 sqlite3_result_text(context, zResult, 4, SQLITE_TRANSIENT);
87197 }else{
87198 /* IMP: R-64894-50321 The string "?000" is returned if the argument
87199 ** is NULL or contains no ASCII alphabetic characters. */
87200 sqlite3_result_text(context, "?000", 4, SQLITE_STATIC);
87203 #endif /* SQLITE_SOUNDEX */
87205 #ifndef SQLITE_OMIT_LOAD_EXTENSION
87207 ** A function that loads a shared-library extension then returns NULL.
87209 static void loadExt(sqlite3_context *context, int argc, sqlite3_value **argv){
87210 const char *zFile = (const char *)sqlite3_value_text(argv[0]);
87211 const char *zProc;
87212 sqlite3 *db = sqlite3_context_db_handle(context);
87213 char *zErrMsg = 0;
87215 if( argc==2 ){
87216 zProc = (const char *)sqlite3_value_text(argv[1]);
87217 }else{
87218 zProc = 0;
87220 if( zFile && sqlite3_load_extension(db, zFile, zProc, &zErrMsg) ){
87221 sqlite3_result_error(context, zErrMsg, -1);
87222 sqlite3_free(zErrMsg);
87225 #endif
87229 ** An instance of the following structure holds the context of a
87230 ** sum() or avg() aggregate computation.
87232 typedef struct SumCtx SumCtx;
87233 struct SumCtx {
87234 double rSum; /* Floating point sum */
87235 i64 iSum; /* Integer sum */
87236 i64 cnt; /* Number of elements summed */
87237 u8 overflow; /* True if integer overflow seen */
87238 u8 approx; /* True if non-integer value was input to the sum */
87242 ** Routines used to compute the sum, average, and total.
87244 ** The SUM() function follows the (broken) SQL standard which means
87245 ** that it returns NULL if it sums over no inputs. TOTAL returns
87246 ** 0.0 in that case. In addition, TOTAL always returns a float where
87247 ** SUM might return an integer if it never encounters a floating point
87248 ** value. TOTAL never fails, but SUM might through an exception if
87249 ** it overflows an integer.
87251 static void sumStep(sqlite3_context *context, int argc, sqlite3_value **argv){
87252 SumCtx *p;
87253 int type;
87254 assert( argc==1 );
87255 UNUSED_PARAMETER(argc);
87256 p = sqlite3_aggregate_context(context, sizeof(*p));
87257 type = sqlite3_value_numeric_type(argv[0]);
87258 if( p && type!=SQLITE_NULL ){
87259 p->cnt++;
87260 if( type==SQLITE_INTEGER ){
87261 i64 v = sqlite3_value_int64(argv[0]);
87262 p->rSum += v;
87263 if( (p->approx|p->overflow)==0 && sqlite3AddInt64(&p->iSum, v) ){
87264 p->overflow = 1;
87266 }else{
87267 p->rSum += sqlite3_value_double(argv[0]);
87268 p->approx = 1;
87272 static void sumFinalize(sqlite3_context *context){
87273 SumCtx *p;
87274 p = sqlite3_aggregate_context(context, 0);
87275 if( p && p->cnt>0 ){
87276 if( p->overflow ){
87277 sqlite3_result_error(context,"integer overflow",-1);
87278 }else if( p->approx ){
87279 sqlite3_result_double(context, p->rSum);
87280 }else{
87281 sqlite3_result_int64(context, p->iSum);
87285 static void avgFinalize(sqlite3_context *context){
87286 SumCtx *p;
87287 p = sqlite3_aggregate_context(context, 0);
87288 if( p && p->cnt>0 ){
87289 sqlite3_result_double(context, p->rSum/(double)p->cnt);
87292 static void totalFinalize(sqlite3_context *context){
87293 SumCtx *p;
87294 p = sqlite3_aggregate_context(context, 0);
87295 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
87296 sqlite3_result_double(context, p ? p->rSum : (double)0);
87300 ** The following structure keeps track of state information for the
87301 ** count() aggregate function.
87303 typedef struct CountCtx CountCtx;
87304 struct CountCtx {
87305 i64 n;
87309 ** Routines to implement the count() aggregate function.
87311 static void countStep(sqlite3_context *context, int argc, sqlite3_value **argv){
87312 CountCtx *p;
87313 p = sqlite3_aggregate_context(context, sizeof(*p));
87314 if( (argc==0 || SQLITE_NULL!=sqlite3_value_type(argv[0])) && p ){
87315 p->n++;
87318 #ifndef SQLITE_OMIT_DEPRECATED
87319 /* The sqlite3_aggregate_count() function is deprecated. But just to make
87320 ** sure it still operates correctly, verify that its count agrees with our
87321 ** internal count when using count(*) and when the total count can be
87322 ** expressed as a 32-bit integer. */
87323 assert( argc==1 || p==0 || p->n>0x7fffffff
87324 || p->n==sqlite3_aggregate_count(context) );
87325 #endif
87327 static void countFinalize(sqlite3_context *context){
87328 CountCtx *p;
87329 p = sqlite3_aggregate_context(context, 0);
87330 sqlite3_result_int64(context, p ? p->n : 0);
87334 ** Routines to implement min() and max() aggregate functions.
87336 static void minmaxStep(
87337 sqlite3_context *context,
87338 int NotUsed,
87339 sqlite3_value **argv
87341 Mem *pArg = (Mem *)argv[0];
87342 Mem *pBest;
87343 UNUSED_PARAMETER(NotUsed);
87345 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
87346 pBest = (Mem *)sqlite3_aggregate_context(context, sizeof(*pBest));
87347 if( !pBest ) return;
87349 if( pBest->flags ){
87350 int max;
87351 int cmp;
87352 CollSeq *pColl = sqlite3GetFuncCollSeq(context);
87353 /* This step function is used for both the min() and max() aggregates,
87354 ** the only difference between the two being that the sense of the
87355 ** comparison is inverted. For the max() aggregate, the
87356 ** sqlite3_user_data() function returns (void *)-1. For min() it
87357 ** returns (void *)db, where db is the sqlite3* database pointer.
87358 ** Therefore the next statement sets variable 'max' to 1 for the max()
87359 ** aggregate, or 0 for min().
87361 max = sqlite3_user_data(context)!=0;
87362 cmp = sqlite3MemCompare(pBest, pArg, pColl);
87363 if( (max && cmp<0) || (!max && cmp>0) ){
87364 sqlite3VdbeMemCopy(pBest, pArg);
87366 }else{
87367 sqlite3VdbeMemCopy(pBest, pArg);
87370 static void minMaxFinalize(sqlite3_context *context){
87371 sqlite3_value *pRes;
87372 pRes = (sqlite3_value *)sqlite3_aggregate_context(context, 0);
87373 if( pRes ){
87374 if( ALWAYS(pRes->flags) ){
87375 sqlite3_result_value(context, pRes);
87377 sqlite3VdbeMemRelease(pRes);
87382 ** group_concat(EXPR, ?SEPARATOR?)
87384 static void groupConcatStep(
87385 sqlite3_context *context,
87386 int argc,
87387 sqlite3_value **argv
87389 const char *zVal;
87390 StrAccum *pAccum;
87391 const char *zSep;
87392 int nVal, nSep;
87393 assert( argc==1 || argc==2 );
87394 if( sqlite3_value_type(argv[0])==SQLITE_NULL ) return;
87395 pAccum = (StrAccum*)sqlite3_aggregate_context(context, sizeof(*pAccum));
87397 if( pAccum ){
87398 sqlite3 *db = sqlite3_context_db_handle(context);
87399 int firstTerm = pAccum->useMalloc==0;
87400 pAccum->useMalloc = 2;
87401 pAccum->mxAlloc = db->aLimit[SQLITE_LIMIT_LENGTH];
87402 if( !firstTerm ){
87403 if( argc==2 ){
87404 zSep = (char*)sqlite3_value_text(argv[1]);
87405 nSep = sqlite3_value_bytes(argv[1]);
87406 }else{
87407 zSep = ",";
87408 nSep = 1;
87410 sqlite3StrAccumAppend(pAccum, zSep, nSep);
87412 zVal = (char*)sqlite3_value_text(argv[0]);
87413 nVal = sqlite3_value_bytes(argv[0]);
87414 sqlite3StrAccumAppend(pAccum, zVal, nVal);
87417 static void groupConcatFinalize(sqlite3_context *context){
87418 StrAccum *pAccum;
87419 pAccum = sqlite3_aggregate_context(context, 0);
87420 if( pAccum ){
87421 if( pAccum->tooBig ){
87422 sqlite3_result_error_toobig(context);
87423 }else if( pAccum->mallocFailed ){
87424 sqlite3_result_error_nomem(context);
87425 }else{
87426 sqlite3_result_text(context, sqlite3StrAccumFinish(pAccum), -1,
87427 sqlite3_free);
87433 ** This routine does per-connection function registration. Most
87434 ** of the built-in functions above are part of the global function set.
87435 ** This routine only deals with those that are not global.
87437 SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3 *db){
87438 int rc = sqlite3_overload_function(db, "MATCH", 2);
87439 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
87440 if( rc==SQLITE_NOMEM ){
87441 db->mallocFailed = 1;
87446 ** Set the LIKEOPT flag on the 2-argument function with the given name.
87448 static void setLikeOptFlag(sqlite3 *db, const char *zName, u8 flagVal){
87449 FuncDef *pDef;
87450 pDef = sqlite3FindFunction(db, zName, sqlite3Strlen30(zName),
87451 2, SQLITE_UTF8, 0);
87452 if( ALWAYS(pDef) ){
87453 pDef->flags = flagVal;
87458 ** Register the built-in LIKE and GLOB functions. The caseSensitive
87459 ** parameter determines whether or not the LIKE operator is case
87460 ** sensitive. GLOB is always case sensitive.
87462 SQLITE_PRIVATE void sqlite3RegisterLikeFunctions(sqlite3 *db, int caseSensitive){
87463 struct compareInfo *pInfo;
87464 if( caseSensitive ){
87465 pInfo = (struct compareInfo*)&likeInfoAlt;
87466 }else{
87467 pInfo = (struct compareInfo*)&likeInfoNorm;
87469 sqlite3CreateFunc(db, "like", 2, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
87470 sqlite3CreateFunc(db, "like", 3, SQLITE_UTF8, pInfo, likeFunc, 0, 0, 0);
87471 sqlite3CreateFunc(db, "glob", 2, SQLITE_UTF8,
87472 (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
87473 setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
87474 setLikeOptFlag(db, "like",
87475 caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
87479 ** pExpr points to an expression which implements a function. If
87480 ** it is appropriate to apply the LIKE optimization to that function
87481 ** then set aWc[0] through aWc[2] to the wildcard characters and
87482 ** return TRUE. If the function is not a LIKE-style function then
87483 ** return FALSE.
87485 SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocase, char *aWc){
87486 FuncDef *pDef;
87487 if( pExpr->op!=TK_FUNCTION
87488 || !pExpr->x.pList
87489 || pExpr->x.pList->nExpr!=2
87491 return 0;
87493 assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
87494 pDef = sqlite3FindFunction(db, pExpr->u.zToken,
87495 sqlite3Strlen30(pExpr->u.zToken),
87496 2, SQLITE_UTF8, 0);
87497 if( NEVER(pDef==0) || (pDef->flags & SQLITE_FUNC_LIKE)==0 ){
87498 return 0;
87501 /* The memcpy() statement assumes that the wildcard characters are
87502 ** the first three statements in the compareInfo structure. The
87503 ** asserts() that follow verify that assumption
87505 memcpy(aWc, pDef->pUserData, 3);
87506 assert( (char*)&likeInfoAlt == (char*)&likeInfoAlt.matchAll );
87507 assert( &((char*)&likeInfoAlt)[1] == (char*)&likeInfoAlt.matchOne );
87508 assert( &((char*)&likeInfoAlt)[2] == (char*)&likeInfoAlt.matchSet );
87509 *pIsNocase = (pDef->flags & SQLITE_FUNC_CASE)==0;
87510 return 1;
87514 ** All all of the FuncDef structures in the aBuiltinFunc[] array above
87515 ** to the global function hash table. This occurs at start-time (as
87516 ** a consequence of calling sqlite3_initialize()).
87518 ** After this routine runs
87520 SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
87522 ** The following array holds FuncDef structures for all of the functions
87523 ** defined in this file.
87525 ** The array cannot be constant since changes are made to the
87526 ** FuncDef.pHash elements at start-time. The elements of this array
87527 ** are read-only after initialization is complete.
87529 static SQLITE_WSD FuncDef aBuiltinFunc[] = {
87530 FUNCTION(ltrim, 1, 1, 0, trimFunc ),
87531 FUNCTION(ltrim, 2, 1, 0, trimFunc ),
87532 FUNCTION(rtrim, 1, 2, 0, trimFunc ),
87533 FUNCTION(rtrim, 2, 2, 0, trimFunc ),
87534 FUNCTION(trim, 1, 3, 0, trimFunc ),
87535 FUNCTION(trim, 2, 3, 0, trimFunc ),
87536 FUNCTION(min, -1, 0, 1, minmaxFunc ),
87537 FUNCTION(min, 0, 0, 1, 0 ),
87538 AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
87539 FUNCTION(max, -1, 1, 1, minmaxFunc ),
87540 FUNCTION(max, 0, 1, 1, 0 ),
87541 AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
87542 FUNCTION(typeof, 1, 0, 0, typeofFunc ),
87543 FUNCTION(length, 1, 0, 0, lengthFunc ),
87544 FUNCTION(substr, 2, 0, 0, substrFunc ),
87545 FUNCTION(substr, 3, 0, 0, substrFunc ),
87546 FUNCTION(abs, 1, 0, 0, absFunc ),
87547 #ifndef SQLITE_OMIT_FLOATING_POINT
87548 FUNCTION(round, 1, 0, 0, roundFunc ),
87549 FUNCTION(round, 2, 0, 0, roundFunc ),
87550 #endif
87551 FUNCTION(upper, 1, 0, 0, upperFunc ),
87552 FUNCTION(lower, 1, 0, 0, lowerFunc ),
87553 FUNCTION(coalesce, 1, 0, 0, 0 ),
87554 FUNCTION(coalesce, 0, 0, 0, 0 ),
87555 /* FUNCTION(coalesce, -1, 0, 0, ifnullFunc ), */
87556 {-1,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"coalesce",0,0},
87557 FUNCTION(hex, 1, 0, 0, hexFunc ),
87558 /* FUNCTION(ifnull, 2, 0, 0, ifnullFunc ), */
87559 {2,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"ifnull",0,0},
87560 FUNCTION(random, 0, 0, 0, randomFunc ),
87561 FUNCTION(randomblob, 1, 0, 0, randomBlob ),
87562 FUNCTION(nullif, 2, 0, 1, nullifFunc ),
87563 FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
87564 FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
87565 FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
87566 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
87567 FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
87568 FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
87569 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
87570 FUNCTION(quote, 1, 0, 0, quoteFunc ),
87571 FUNCTION(last_insert_rowid, 0, 0, 0, last_insert_rowid),
87572 FUNCTION(changes, 0, 0, 0, changes ),
87573 FUNCTION(total_changes, 0, 0, 0, total_changes ),
87574 FUNCTION(replace, 3, 0, 0, replaceFunc ),
87575 FUNCTION(zeroblob, 1, 0, 0, zeroblobFunc ),
87576 #ifdef SQLITE_SOUNDEX
87577 FUNCTION(soundex, 1, 0, 0, soundexFunc ),
87578 #endif
87579 #ifndef SQLITE_OMIT_LOAD_EXTENSION
87580 FUNCTION(load_extension, 1, 0, 0, loadExt ),
87581 FUNCTION(load_extension, 2, 0, 0, loadExt ),
87582 #endif
87583 AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
87584 AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
87585 AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
87586 /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
87587 {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
87588 AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
87589 AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
87590 AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
87592 LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
87593 #ifdef SQLITE_CASE_SENSITIVE_LIKE
87594 LIKEFUNC(like, 2, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
87595 LIKEFUNC(like, 3, &likeInfoAlt, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
87596 #else
87597 LIKEFUNC(like, 2, &likeInfoNorm, SQLITE_FUNC_LIKE),
87598 LIKEFUNC(like, 3, &likeInfoNorm, SQLITE_FUNC_LIKE),
87599 #endif
87602 int i;
87603 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
87604 FuncDef *aFunc = (FuncDef*)&GLOBAL(FuncDef, aBuiltinFunc);
87606 for(i=0; i<ArraySize(aBuiltinFunc); i++){
87607 sqlite3FuncDefInsert(pHash, &aFunc[i]);
87609 sqlite3RegisterDateTimeFunctions();
87610 #ifndef SQLITE_OMIT_ALTERTABLE
87611 sqlite3AlterFunctions();
87612 #endif
87615 /************** End of func.c ************************************************/
87616 /************** Begin file fkey.c ********************************************/
87619 ** The author disclaims copyright to this source code. In place of
87620 ** a legal notice, here is a blessing:
87622 ** May you do good and not evil.
87623 ** May you find forgiveness for yourself and forgive others.
87624 ** May you share freely, never taking more than you give.
87626 *************************************************************************
87627 ** This file contains code used by the compiler to add foreign key
87628 ** support to compiled SQL statements.
87631 #ifndef SQLITE_OMIT_FOREIGN_KEY
87632 #ifndef SQLITE_OMIT_TRIGGER
87635 ** Deferred and Immediate FKs
87636 ** --------------------------
87638 ** Foreign keys in SQLite come in two flavours: deferred and immediate.
87639 ** If an immediate foreign key constraint is violated, SQLITE_CONSTRAINT
87640 ** is returned and the current statement transaction rolled back. If a
87641 ** deferred foreign key constraint is violated, no action is taken
87642 ** immediately. However if the application attempts to commit the
87643 ** transaction before fixing the constraint violation, the attempt fails.
87645 ** Deferred constraints are implemented using a simple counter associated
87646 ** with the database handle. The counter is set to zero each time a
87647 ** database transaction is opened. Each time a statement is executed
87648 ** that causes a foreign key violation, the counter is incremented. Each
87649 ** time a statement is executed that removes an existing violation from
87650 ** the database, the counter is decremented. When the transaction is
87651 ** committed, the commit fails if the current value of the counter is
87652 ** greater than zero. This scheme has two big drawbacks:
87654 ** * When a commit fails due to a deferred foreign key constraint,
87655 ** there is no way to tell which foreign constraint is not satisfied,
87656 ** or which row it is not satisfied for.
87658 ** * If the database contains foreign key violations when the
87659 ** transaction is opened, this may cause the mechanism to malfunction.
87661 ** Despite these problems, this approach is adopted as it seems simpler
87662 ** than the alternatives.
87664 ** INSERT operations:
87666 ** I.1) For each FK for which the table is the child table, search
87667 ** the parent table for a match. If none is found increment the
87668 ** constraint counter.
87670 ** I.2) For each FK for which the table is the parent table,
87671 ** search the child table for rows that correspond to the new
87672 ** row in the parent table. Decrement the counter for each row
87673 ** found (as the constraint is now satisfied).
87675 ** DELETE operations:
87677 ** D.1) For each FK for which the table is the child table,
87678 ** search the parent table for a row that corresponds to the
87679 ** deleted row in the child table. If such a row is not found,
87680 ** decrement the counter.
87682 ** D.2) For each FK for which the table is the parent table, search
87683 ** the child table for rows that correspond to the deleted row
87684 ** in the parent table. For each found increment the counter.
87686 ** UPDATE operations:
87688 ** An UPDATE command requires that all 4 steps above are taken, but only
87689 ** for FK constraints for which the affected columns are actually
87690 ** modified (values must be compared at runtime).
87692 ** Note that I.1 and D.1 are very similar operations, as are I.2 and D.2.
87693 ** This simplifies the implementation a bit.
87695 ** For the purposes of immediate FK constraints, the OR REPLACE conflict
87696 ** resolution is considered to delete rows before the new row is inserted.
87697 ** If a delete caused by OR REPLACE violates an FK constraint, an exception
87698 ** is thrown, even if the FK constraint would be satisfied after the new
87699 ** row is inserted.
87701 ** Immediate constraints are usually handled similarly. The only difference
87702 ** is that the counter used is stored as part of each individual statement
87703 ** object (struct Vdbe). If, after the statement has run, its immediate
87704 ** constraint counter is greater than zero, it returns SQLITE_CONSTRAINT
87705 ** and the statement transaction is rolled back. An exception is an INSERT
87706 ** statement that inserts a single row only (no triggers). In this case,
87707 ** instead of using a counter, an exception is thrown immediately if the
87708 ** INSERT violates a foreign key constraint. This is necessary as such
87709 ** an INSERT does not open a statement transaction.
87711 ** TODO: How should dropping a table be handled? How should renaming a
87712 ** table be handled?
87715 ** Query API Notes
87716 ** ---------------
87718 ** Before coding an UPDATE or DELETE row operation, the code-generator
87719 ** for those two operations needs to know whether or not the operation
87720 ** requires any FK processing and, if so, which columns of the original
87721 ** row are required by the FK processing VDBE code (i.e. if FKs were
87722 ** implemented using triggers, which of the old.* columns would be
87723 ** accessed). No information is required by the code-generator before
87724 ** coding an INSERT operation. The functions used by the UPDATE/DELETE
87725 ** generation code to query for this information are:
87727 ** sqlite3FkRequired() - Test to see if FK processing is required.
87728 ** sqlite3FkOldmask() - Query for the set of required old.* columns.
87731 ** Externally accessible module functions
87732 ** --------------------------------------
87734 ** sqlite3FkCheck() - Check for foreign key violations.
87735 ** sqlite3FkActions() - Code triggers for ON UPDATE/ON DELETE actions.
87736 ** sqlite3FkDelete() - Delete an FKey structure.
87740 ** VDBE Calling Convention
87741 ** -----------------------
87743 ** Example:
87745 ** For the following INSERT statement:
87747 ** CREATE TABLE t1(a, b INTEGER PRIMARY KEY, c);
87748 ** INSERT INTO t1 VALUES(1, 2, 3.1);
87750 ** Register (x): 2 (type integer)
87751 ** Register (x+1): 1 (type integer)
87752 ** Register (x+2): NULL (type NULL)
87753 ** Register (x+3): 3.1 (type real)
87757 ** A foreign key constraint requires that the key columns in the parent
87758 ** table are collectively subject to a UNIQUE or PRIMARY KEY constraint.
87759 ** Given that pParent is the parent table for foreign key constraint pFKey,
87760 ** search the schema a unique index on the parent key columns.
87762 ** If successful, zero is returned. If the parent key is an INTEGER PRIMARY
87763 ** KEY column, then output variable *ppIdx is set to NULL. Otherwise, *ppIdx
87764 ** is set to point to the unique index.
87766 ** If the parent key consists of a single column (the foreign key constraint
87767 ** is not a composite foreign key), output variable *paiCol is set to NULL.
87768 ** Otherwise, it is set to point to an allocated array of size N, where
87769 ** N is the number of columns in the parent key. The first element of the
87770 ** array is the index of the child table column that is mapped by the FK
87771 ** constraint to the parent table column stored in the left-most column
87772 ** of index *ppIdx. The second element of the array is the index of the
87773 ** child table column that corresponds to the second left-most column of
87774 ** *ppIdx, and so on.
87776 ** If the required index cannot be found, either because:
87778 ** 1) The named parent key columns do not exist, or
87780 ** 2) The named parent key columns do exist, but are not subject to a
87781 ** UNIQUE or PRIMARY KEY constraint, or
87783 ** 3) No parent key columns were provided explicitly as part of the
87784 ** foreign key definition, and the parent table does not have a
87785 ** PRIMARY KEY, or
87787 ** 4) No parent key columns were provided explicitly as part of the
87788 ** foreign key definition, and the PRIMARY KEY of the parent table
87789 ** consists of a a different number of columns to the child key in
87790 ** the child table.
87792 ** then non-zero is returned, and a "foreign key mismatch" error loaded
87793 ** into pParse. If an OOM error occurs, non-zero is returned and the
87794 ** pParse->db->mallocFailed flag is set.
87796 static int locateFkeyIndex(
87797 Parse *pParse, /* Parse context to store any error in */
87798 Table *pParent, /* Parent table of FK constraint pFKey */
87799 FKey *pFKey, /* Foreign key to find index for */
87800 Index **ppIdx, /* OUT: Unique index on parent table */
87801 int **paiCol /* OUT: Map of index columns in pFKey */
87803 Index *pIdx = 0; /* Value to return via *ppIdx */
87804 int *aiCol = 0; /* Value to return via *paiCol */
87805 int nCol = pFKey->nCol; /* Number of columns in parent key */
87806 char *zKey = pFKey->aCol[0].zCol; /* Name of left-most parent key column */
87808 /* The caller is responsible for zeroing output parameters. */
87809 assert( ppIdx && *ppIdx==0 );
87810 assert( !paiCol || *paiCol==0 );
87811 assert( pParse );
87813 /* If this is a non-composite (single column) foreign key, check if it
87814 ** maps to the INTEGER PRIMARY KEY of table pParent. If so, leave *ppIdx
87815 ** and *paiCol set to zero and return early.
87817 ** Otherwise, for a composite foreign key (more than one column), allocate
87818 ** space for the aiCol array (returned via output parameter *paiCol).
87819 ** Non-composite foreign keys do not require the aiCol array.
87821 if( nCol==1 ){
87822 /* The FK maps to the IPK if any of the following are true:
87824 ** 1) There is an INTEGER PRIMARY KEY column and the FK is implicitly
87825 ** mapped to the primary key of table pParent, or
87826 ** 2) The FK is explicitly mapped to a column declared as INTEGER
87827 ** PRIMARY KEY.
87829 if( pParent->iPKey>=0 ){
87830 if( !zKey ) return 0;
87831 if( !sqlite3StrICmp(pParent->aCol[pParent->iPKey].zName, zKey) ) return 0;
87833 }else if( paiCol ){
87834 assert( nCol>1 );
87835 aiCol = (int *)sqlite3DbMallocRaw(pParse->db, nCol*sizeof(int));
87836 if( !aiCol ) return 1;
87837 *paiCol = aiCol;
87840 for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){
87841 if( pIdx->nColumn==nCol && pIdx->onError!=OE_None ){
87842 /* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number
87843 ** of columns. If each indexed column corresponds to a foreign key
87844 ** column of pFKey, then this index is a winner. */
87846 if( zKey==0 ){
87847 /* If zKey is NULL, then this foreign key is implicitly mapped to
87848 ** the PRIMARY KEY of table pParent. The PRIMARY KEY index may be
87849 ** identified by the test (Index.autoIndex==2). */
87850 if( pIdx->autoIndex==2 ){
87851 if( aiCol ){
87852 int i;
87853 for(i=0; i<nCol; i++) aiCol[i] = pFKey->aCol[i].iFrom;
87855 break;
87857 }else{
87858 /* If zKey is non-NULL, then this foreign key was declared to
87859 ** map to an explicit list of columns in table pParent. Check if this
87860 ** index matches those columns. Also, check that the index uses
87861 ** the default collation sequences for each column. */
87862 int i, j;
87863 for(i=0; i<nCol; i++){
87864 int iCol = pIdx->aiColumn[i]; /* Index of column in parent tbl */
87865 char *zDfltColl; /* Def. collation for column */
87866 char *zIdxCol; /* Name of indexed column */
87868 /* If the index uses a collation sequence that is different from
87869 ** the default collation sequence for the column, this index is
87870 ** unusable. Bail out early in this case. */
87871 zDfltColl = pParent->aCol[iCol].zColl;
87872 if( !zDfltColl ){
87873 zDfltColl = "BINARY";
87875 if( sqlite3StrICmp(pIdx->azColl[i], zDfltColl) ) break;
87877 zIdxCol = pParent->aCol[iCol].zName;
87878 for(j=0; j<nCol; j++){
87879 if( sqlite3StrICmp(pFKey->aCol[j].zCol, zIdxCol)==0 ){
87880 if( aiCol ) aiCol[i] = pFKey->aCol[j].iFrom;
87881 break;
87884 if( j==nCol ) break;
87886 if( i==nCol ) break; /* pIdx is usable */
87891 if( !pIdx ){
87892 if( !pParse->disableTriggers ){
87893 sqlite3ErrorMsg(pParse, "foreign key mismatch");
87895 sqlite3DbFree(pParse->db, aiCol);
87896 return 1;
87899 *ppIdx = pIdx;
87900 return 0;
87904 ** This function is called when a row is inserted into or deleted from the
87905 ** child table of foreign key constraint pFKey. If an SQL UPDATE is executed
87906 ** on the child table of pFKey, this function is invoked twice for each row
87907 ** affected - once to "delete" the old row, and then again to "insert" the
87908 ** new row.
87910 ** Each time it is called, this function generates VDBE code to locate the
87911 ** row in the parent table that corresponds to the row being inserted into
87912 ** or deleted from the child table. If the parent row can be found, no
87913 ** special action is taken. Otherwise, if the parent row can *not* be
87914 ** found in the parent table:
87916 ** Operation | FK type | Action taken
87917 ** --------------------------------------------------------------------------
87918 ** INSERT immediate Increment the "immediate constraint counter".
87920 ** DELETE immediate Decrement the "immediate constraint counter".
87922 ** INSERT deferred Increment the "deferred constraint counter".
87924 ** DELETE deferred Decrement the "deferred constraint counter".
87926 ** These operations are identified in the comment at the top of this file
87927 ** (fkey.c) as "I.1" and "D.1".
87929 static void fkLookupParent(
87930 Parse *pParse, /* Parse context */
87931 int iDb, /* Index of database housing pTab */
87932 Table *pTab, /* Parent table of FK pFKey */
87933 Index *pIdx, /* Unique index on parent key columns in pTab */
87934 FKey *pFKey, /* Foreign key constraint */
87935 int *aiCol, /* Map from parent key columns to child table columns */
87936 int regData, /* Address of array containing child table row */
87937 int nIncr, /* Increment constraint counter by this */
87938 int isIgnore /* If true, pretend pTab contains all NULL values */
87940 int i; /* Iterator variable */
87941 Vdbe *v = sqlite3GetVdbe(pParse); /* Vdbe to add code to */
87942 int iCur = pParse->nTab - 1; /* Cursor number to use */
87943 int iOk = sqlite3VdbeMakeLabel(v); /* jump here if parent key found */
87945 /* If nIncr is less than zero, then check at runtime if there are any
87946 ** outstanding constraints to resolve. If there are not, there is no need
87947 ** to check if deleting this row resolves any outstanding violations.
87949 ** Check if any of the key columns in the child table row are NULL. If
87950 ** any are, then the constraint is considered satisfied. No need to
87951 ** search for a matching row in the parent table. */
87952 if( nIncr<0 ){
87953 sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, iOk);
87955 for(i=0; i<pFKey->nCol; i++){
87956 int iReg = aiCol[i] + regData + 1;
87957 sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iOk);
87960 if( isIgnore==0 ){
87961 if( pIdx==0 ){
87962 /* If pIdx is NULL, then the parent key is the INTEGER PRIMARY KEY
87963 ** column of the parent table (table pTab). */
87964 int iMustBeInt; /* Address of MustBeInt instruction */
87965 int regTemp = sqlite3GetTempReg(pParse);
87967 /* Invoke MustBeInt to coerce the child key value to an integer (i.e.
87968 ** apply the affinity of the parent key). If this fails, then there
87969 ** is no matching parent key. Before using MustBeInt, make a copy of
87970 ** the value. Otherwise, the value inserted into the child key column
87971 ** will have INTEGER affinity applied to it, which may not be correct. */
87972 sqlite3VdbeAddOp2(v, OP_SCopy, aiCol[0]+1+regData, regTemp);
87973 iMustBeInt = sqlite3VdbeAddOp2(v, OP_MustBeInt, regTemp, 0);
87975 /* If the parent table is the same as the child table, and we are about
87976 ** to increment the constraint-counter (i.e. this is an INSERT operation),
87977 ** then check if the row being inserted matches itself. If so, do not
87978 ** increment the constraint-counter. */
87979 if( pTab==pFKey->pFrom && nIncr==1 ){
87980 sqlite3VdbeAddOp3(v, OP_Eq, regData, iOk, regTemp);
87983 sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenRead);
87984 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regTemp);
87985 sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
87986 sqlite3VdbeJumpHere(v, sqlite3VdbeCurrentAddr(v)-2);
87987 sqlite3VdbeJumpHere(v, iMustBeInt);
87988 sqlite3ReleaseTempReg(pParse, regTemp);
87989 }else{
87990 int nCol = pFKey->nCol;
87991 int regTemp = sqlite3GetTempRange(pParse, nCol);
87992 int regRec = sqlite3GetTempReg(pParse);
87993 KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
87995 sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb);
87996 sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF);
87997 for(i=0; i<nCol; i++){
87998 sqlite3VdbeAddOp2(v, OP_Copy, aiCol[i]+1+regData, regTemp+i);
88001 /* If the parent table is the same as the child table, and we are about
88002 ** to increment the constraint-counter (i.e. this is an INSERT operation),
88003 ** then check if the row being inserted matches itself. If so, do not
88004 ** increment the constraint-counter.
88006 ** If any of the parent-key values are NULL, then the row cannot match
88007 ** itself. So set JUMPIFNULL to make sure we do the OP_Found if any
88008 ** of the parent-key values are NULL (at this point it is known that
88009 ** none of the child key values are).
88011 if( pTab==pFKey->pFrom && nIncr==1 ){
88012 int iJump = sqlite3VdbeCurrentAddr(v) + nCol + 1;
88013 for(i=0; i<nCol; i++){
88014 int iChild = aiCol[i]+1+regData;
88015 int iParent = pIdx->aiColumn[i]+1+regData;
88016 assert( aiCol[i]!=pTab->iPKey );
88017 if( pIdx->aiColumn[i]==pTab->iPKey ){
88018 /* The parent key is a composite key that includes the IPK column */
88019 iParent = regData;
88021 sqlite3VdbeAddOp3(v, OP_Ne, iChild, iJump, iParent);
88022 sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
88024 sqlite3VdbeAddOp2(v, OP_Goto, 0, iOk);
88027 sqlite3VdbeAddOp3(v, OP_MakeRecord, regTemp, nCol, regRec);
88028 sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v,pIdx), P4_TRANSIENT);
88029 sqlite3VdbeAddOp4Int(v, OP_Found, iCur, iOk, regRec, 0);
88031 sqlite3ReleaseTempReg(pParse, regRec);
88032 sqlite3ReleaseTempRange(pParse, regTemp, nCol);
88036 if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
88037 /* Special case: If this is an INSERT statement that will insert exactly
88038 ** one row into the table, raise a constraint immediately instead of
88039 ** incrementing a counter. This is necessary as the VM code is being
88040 ** generated for will not open a statement transaction. */
88041 assert( nIncr==1 );
88042 sqlite3HaltConstraint(
88043 pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
88045 }else{
88046 if( nIncr>0 && pFKey->isDeferred==0 ){
88047 sqlite3ParseToplevel(pParse)->mayAbort = 1;
88049 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
88052 sqlite3VdbeResolveLabel(v, iOk);
88053 sqlite3VdbeAddOp1(v, OP_Close, iCur);
88057 ** This function is called to generate code executed when a row is deleted
88058 ** from the parent table of foreign key constraint pFKey and, if pFKey is
88059 ** deferred, when a row is inserted into the same table. When generating
88060 ** code for an SQL UPDATE operation, this function may be called twice -
88061 ** once to "delete" the old row and once to "insert" the new row.
88063 ** The code generated by this function scans through the rows in the child
88064 ** table that correspond to the parent table row being deleted or inserted.
88065 ** For each child row found, one of the following actions is taken:
88067 ** Operation | FK type | Action taken
88068 ** --------------------------------------------------------------------------
88069 ** DELETE immediate Increment the "immediate constraint counter".
88070 ** Or, if the ON (UPDATE|DELETE) action is RESTRICT,
88071 ** throw a "foreign key constraint failed" exception.
88073 ** INSERT immediate Decrement the "immediate constraint counter".
88075 ** DELETE deferred Increment the "deferred constraint counter".
88076 ** Or, if the ON (UPDATE|DELETE) action is RESTRICT,
88077 ** throw a "foreign key constraint failed" exception.
88079 ** INSERT deferred Decrement the "deferred constraint counter".
88081 ** These operations are identified in the comment at the top of this file
88082 ** (fkey.c) as "I.2" and "D.2".
88084 static void fkScanChildren(
88085 Parse *pParse, /* Parse context */
88086 SrcList *pSrc, /* SrcList containing the table to scan */
88087 Table *pTab,
88088 Index *pIdx, /* Foreign key index */
88089 FKey *pFKey, /* Foreign key relationship */
88090 int *aiCol, /* Map from pIdx cols to child table cols */
88091 int regData, /* Referenced table data starts here */
88092 int nIncr /* Amount to increment deferred counter by */
88094 sqlite3 *db = pParse->db; /* Database handle */
88095 int i; /* Iterator variable */
88096 Expr *pWhere = 0; /* WHERE clause to scan with */
88097 NameContext sNameContext; /* Context used to resolve WHERE clause */
88098 WhereInfo *pWInfo; /* Context used by sqlite3WhereXXX() */
88099 int iFkIfZero = 0; /* Address of OP_FkIfZero */
88100 Vdbe *v = sqlite3GetVdbe(pParse);
88102 assert( !pIdx || pIdx->pTable==pTab );
88104 if( nIncr<0 ){
88105 iFkIfZero = sqlite3VdbeAddOp2(v, OP_FkIfZero, pFKey->isDeferred, 0);
88108 /* Create an Expr object representing an SQL expression like:
88110 ** <parent-key1> = <child-key1> AND <parent-key2> = <child-key2> ...
88112 ** The collation sequence used for the comparison should be that of
88113 ** the parent key columns. The affinity of the parent key column should
88114 ** be applied to each child key value before the comparison takes place.
88116 for(i=0; i<pFKey->nCol; i++){
88117 Expr *pLeft; /* Value from parent table row */
88118 Expr *pRight; /* Column ref to child table */
88119 Expr *pEq; /* Expression (pLeft = pRight) */
88120 int iCol; /* Index of column in child table */
88121 const char *zCol; /* Name of column in child table */
88123 pLeft = sqlite3Expr(db, TK_REGISTER, 0);
88124 if( pLeft ){
88125 /* Set the collation sequence and affinity of the LHS of each TK_EQ
88126 ** expression to the parent key column defaults. */
88127 if( pIdx ){
88128 Column *pCol;
88129 iCol = pIdx->aiColumn[i];
88130 pCol = &pTab->aCol[iCol];
88131 if( pTab->iPKey==iCol ) iCol = -1;
88132 pLeft->iTable = regData+iCol+1;
88133 pLeft->affinity = pCol->affinity;
88134 pLeft->pColl = sqlite3LocateCollSeq(pParse, pCol->zColl);
88135 }else{
88136 pLeft->iTable = regData;
88137 pLeft->affinity = SQLITE_AFF_INTEGER;
88140 iCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
88141 assert( iCol>=0 );
88142 zCol = pFKey->pFrom->aCol[iCol].zName;
88143 pRight = sqlite3Expr(db, TK_ID, zCol);
88144 pEq = sqlite3PExpr(pParse, TK_EQ, pLeft, pRight, 0);
88145 pWhere = sqlite3ExprAnd(db, pWhere, pEq);
88148 /* If the child table is the same as the parent table, and this scan
88149 ** is taking place as part of a DELETE operation (operation D.2), omit the
88150 ** row being deleted from the scan by adding ($rowid != rowid) to the WHERE
88151 ** clause, where $rowid is the rowid of the row being deleted. */
88152 if( pTab==pFKey->pFrom && nIncr>0 ){
88153 Expr *pEq; /* Expression (pLeft = pRight) */
88154 Expr *pLeft; /* Value from parent table row */
88155 Expr *pRight; /* Column ref to child table */
88156 pLeft = sqlite3Expr(db, TK_REGISTER, 0);
88157 pRight = sqlite3Expr(db, TK_COLUMN, 0);
88158 if( pLeft && pRight ){
88159 pLeft->iTable = regData;
88160 pLeft->affinity = SQLITE_AFF_INTEGER;
88161 pRight->iTable = pSrc->a[0].iCursor;
88162 pRight->iColumn = -1;
88164 pEq = sqlite3PExpr(pParse, TK_NE, pLeft, pRight, 0);
88165 pWhere = sqlite3ExprAnd(db, pWhere, pEq);
88168 /* Resolve the references in the WHERE clause. */
88169 memset(&sNameContext, 0, sizeof(NameContext));
88170 sNameContext.pSrcList = pSrc;
88171 sNameContext.pParse = pParse;
88172 sqlite3ResolveExprNames(&sNameContext, pWhere);
88174 /* Create VDBE to loop through the entries in pSrc that match the WHERE
88175 ** clause. If the constraint is not deferred, throw an exception for
88176 ** each row found. Otherwise, for deferred constraints, increment the
88177 ** deferred constraint counter by nIncr for each row selected. */
88178 pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0, 0);
88179 if( nIncr>0 && pFKey->isDeferred==0 ){
88180 sqlite3ParseToplevel(pParse)->mayAbort = 1;
88182 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
88183 if( pWInfo ){
88184 sqlite3WhereEnd(pWInfo);
88187 /* Clean up the WHERE clause constructed above. */
88188 sqlite3ExprDelete(db, pWhere);
88189 if( iFkIfZero ){
88190 sqlite3VdbeJumpHere(v, iFkIfZero);
88195 ** This function returns a pointer to the head of a linked list of FK
88196 ** constraints for which table pTab is the parent table. For example,
88197 ** given the following schema:
88199 ** CREATE TABLE t1(a PRIMARY KEY);
88200 ** CREATE TABLE t2(b REFERENCES t1(a);
88202 ** Calling this function with table "t1" as an argument returns a pointer
88203 ** to the FKey structure representing the foreign key constraint on table
88204 ** "t2". Calling this function with "t2" as the argument would return a
88205 ** NULL pointer (as there are no FK constraints for which t2 is the parent
88206 ** table).
88208 SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){
88209 int nName = sqlite3Strlen30(pTab->zName);
88210 return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName, nName);
88214 ** The second argument is a Trigger structure allocated by the
88215 ** fkActionTrigger() routine. This function deletes the Trigger structure
88216 ** and all of its sub-components.
88218 ** The Trigger structure or any of its sub-components may be allocated from
88219 ** the lookaside buffer belonging to database handle dbMem.
88221 static void fkTriggerDelete(sqlite3 *dbMem, Trigger *p){
88222 if( p ){
88223 TriggerStep *pStep = p->step_list;
88224 sqlite3ExprDelete(dbMem, pStep->pWhere);
88225 sqlite3ExprListDelete(dbMem, pStep->pExprList);
88226 sqlite3SelectDelete(dbMem, pStep->pSelect);
88227 sqlite3ExprDelete(dbMem, p->pWhen);
88228 sqlite3DbFree(dbMem, p);
88233 ** This function is called to generate code that runs when table pTab is
88234 ** being dropped from the database. The SrcList passed as the second argument
88235 ** to this function contains a single entry guaranteed to resolve to
88236 ** table pTab.
88238 ** Normally, no code is required. However, if either
88240 ** (a) The table is the parent table of a FK constraint, or
88241 ** (b) The table is the child table of a deferred FK constraint and it is
88242 ** determined at runtime that there are outstanding deferred FK
88243 ** constraint violations in the database,
88245 ** then the equivalent of "DELETE FROM <tbl>" is executed before dropping
88246 ** the table from the database. Triggers are disabled while running this
88247 ** DELETE, but foreign key actions are not.
88249 SQLITE_PRIVATE void sqlite3FkDropTable(Parse *pParse, SrcList *pName, Table *pTab){
88250 sqlite3 *db = pParse->db;
88251 if( (db->flags&SQLITE_ForeignKeys) && !IsVirtual(pTab) && !pTab->pSelect ){
88252 int iSkip = 0;
88253 Vdbe *v = sqlite3GetVdbe(pParse);
88255 assert( v ); /* VDBE has already been allocated */
88256 if( sqlite3FkReferences(pTab)==0 ){
88257 /* Search for a deferred foreign key constraint for which this table
88258 ** is the child table. If one cannot be found, return without
88259 ** generating any VDBE code. If one can be found, then jump over
88260 ** the entire DELETE if there are no outstanding deferred constraints
88261 ** when this statement is run. */
88262 FKey *p;
88263 for(p=pTab->pFKey; p; p=p->pNextFrom){
88264 if( p->isDeferred ) break;
88266 if( !p ) return;
88267 iSkip = sqlite3VdbeMakeLabel(v);
88268 sqlite3VdbeAddOp2(v, OP_FkIfZero, 1, iSkip);
88271 pParse->disableTriggers = 1;
88272 sqlite3DeleteFrom(pParse, sqlite3SrcListDup(db, pName, 0), 0);
88273 pParse->disableTriggers = 0;
88275 /* If the DELETE has generated immediate foreign key constraint
88276 ** violations, halt the VDBE and return an error at this point, before
88277 ** any modifications to the schema are made. This is because statement
88278 ** transactions are not able to rollback schema changes. */
88279 sqlite3VdbeAddOp2(v, OP_FkIfZero, 0, sqlite3VdbeCurrentAddr(v)+2);
88280 sqlite3HaltConstraint(
88281 pParse, OE_Abort, "foreign key constraint failed", P4_STATIC
88284 if( iSkip ){
88285 sqlite3VdbeResolveLabel(v, iSkip);
88291 ** This function is called when inserting, deleting or updating a row of
88292 ** table pTab to generate VDBE code to perform foreign key constraint
88293 ** processing for the operation.
88295 ** For a DELETE operation, parameter regOld is passed the index of the
88296 ** first register in an array of (pTab->nCol+1) registers containing the
88297 ** rowid of the row being deleted, followed by each of the column values
88298 ** of the row being deleted, from left to right. Parameter regNew is passed
88299 ** zero in this case.
88301 ** For an INSERT operation, regOld is passed zero and regNew is passed the
88302 ** first register of an array of (pTab->nCol+1) registers containing the new
88303 ** row data.
88305 ** For an UPDATE operation, this function is called twice. Once before
88306 ** the original record is deleted from the table using the calling convention
88307 ** described for DELETE. Then again after the original record is deleted
88308 ** but before the new record is inserted using the INSERT convention.
88310 SQLITE_PRIVATE void sqlite3FkCheck(
88311 Parse *pParse, /* Parse context */
88312 Table *pTab, /* Row is being deleted from this table */
88313 int regOld, /* Previous row data is stored here */
88314 int regNew /* New row data is stored here */
88316 sqlite3 *db = pParse->db; /* Database handle */
88317 FKey *pFKey; /* Used to iterate through FKs */
88318 int iDb; /* Index of database containing pTab */
88319 const char *zDb; /* Name of database containing pTab */
88320 int isIgnoreErrors = pParse->disableTriggers;
88322 /* Exactly one of regOld and regNew should be non-zero. */
88323 assert( (regOld==0)!=(regNew==0) );
88325 /* If foreign-keys are disabled, this function is a no-op. */
88326 if( (db->flags&SQLITE_ForeignKeys)==0 ) return;
88328 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
88329 zDb = db->aDb[iDb].zName;
88331 /* Loop through all the foreign key constraints for which pTab is the
88332 ** child table (the table that the foreign key definition is part of). */
88333 for(pFKey=pTab->pFKey; pFKey; pFKey=pFKey->pNextFrom){
88334 Table *pTo; /* Parent table of foreign key pFKey */
88335 Index *pIdx = 0; /* Index on key columns in pTo */
88336 int *aiFree = 0;
88337 int *aiCol;
88338 int iCol;
88339 int i;
88340 int isIgnore = 0;
88342 /* Find the parent table of this foreign key. Also find a unique index
88343 ** on the parent key columns in the parent table. If either of these
88344 ** schema items cannot be located, set an error in pParse and return
88345 ** early. */
88346 if( pParse->disableTriggers ){
88347 pTo = sqlite3FindTable(db, pFKey->zTo, zDb);
88348 }else{
88349 pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb);
88351 if( !pTo || locateFkeyIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){
88352 assert( isIgnoreErrors==0 || (regOld!=0 && regNew==0) );
88353 if( !isIgnoreErrors || db->mallocFailed ) return;
88354 if( pTo==0 ){
88355 /* If isIgnoreErrors is true, then a table is being dropped. In this
88356 ** case SQLite runs a "DELETE FROM xxx" on the table being dropped
88357 ** before actually dropping it in order to check FK constraints.
88358 ** If the parent table of an FK constraint on the current table is
88359 ** missing, behave as if it is empty. i.e. decrement the relevant
88360 ** FK counter for each row of the current table with non-NULL keys.
88362 Vdbe *v = sqlite3GetVdbe(pParse);
88363 int iJump = sqlite3VdbeCurrentAddr(v) + pFKey->nCol + 1;
88364 for(i=0; i<pFKey->nCol; i++){
88365 int iReg = pFKey->aCol[i].iFrom + regOld + 1;
88366 sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iJump);
88368 sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, -1);
88370 continue;
88372 assert( pFKey->nCol==1 || (aiFree && pIdx) );
88374 if( aiFree ){
88375 aiCol = aiFree;
88376 }else{
88377 iCol = pFKey->aCol[0].iFrom;
88378 aiCol = &iCol;
88380 for(i=0; i<pFKey->nCol; i++){
88381 if( aiCol[i]==pTab->iPKey ){
88382 aiCol[i] = -1;
88384 #ifndef SQLITE_OMIT_AUTHORIZATION
88385 /* Request permission to read the parent key columns. If the
88386 ** authorization callback returns SQLITE_IGNORE, behave as if any
88387 ** values read from the parent table are NULL. */
88388 if( db->xAuth ){
88389 int rcauth;
88390 char *zCol = pTo->aCol[pIdx ? pIdx->aiColumn[i] : pTo->iPKey].zName;
88391 rcauth = sqlite3AuthReadCol(pParse, pTo->zName, zCol, iDb);
88392 isIgnore = (rcauth==SQLITE_IGNORE);
88394 #endif
88397 /* Take a shared-cache advisory read-lock on the parent table. Allocate
88398 ** a cursor to use to search the unique index on the parent key columns
88399 ** in the parent table. */
88400 sqlite3TableLock(pParse, iDb, pTo->tnum, 0, pTo->zName);
88401 pParse->nTab++;
88403 if( regOld!=0 ){
88404 /* A row is being removed from the child table. Search for the parent.
88405 ** If the parent does not exist, removing the child row resolves an
88406 ** outstanding foreign key constraint violation. */
88407 fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regOld, -1,isIgnore);
88409 if( regNew!=0 ){
88410 /* A row is being added to the child table. If a parent row cannot
88411 ** be found, adding the child row has violated the FK constraint. */
88412 fkLookupParent(pParse, iDb, pTo, pIdx, pFKey, aiCol, regNew, +1,isIgnore);
88415 sqlite3DbFree(db, aiFree);
88418 /* Loop through all the foreign key constraints that refer to this table */
88419 for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
88420 Index *pIdx = 0; /* Foreign key index for pFKey */
88421 SrcList *pSrc;
88422 int *aiCol = 0;
88424 if( !pFKey->isDeferred && !pParse->pToplevel && !pParse->isMultiWrite ){
88425 assert( regOld==0 && regNew!=0 );
88426 /* Inserting a single row into a parent table cannot cause an immediate
88427 ** foreign key violation. So do nothing in this case. */
88428 continue;
88431 if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ){
88432 if( !isIgnoreErrors || db->mallocFailed ) return;
88433 continue;
88435 assert( aiCol || pFKey->nCol==1 );
88437 /* Create a SrcList structure containing a single table (the table
88438 ** the foreign key that refers to this table is attached to). This
88439 ** is required for the sqlite3WhereXXX() interface. */
88440 pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
88441 if( pSrc ){
88442 struct SrcList_item *pItem = pSrc->a;
88443 pItem->pTab = pFKey->pFrom;
88444 pItem->zName = pFKey->pFrom->zName;
88445 pItem->pTab->nRef++;
88446 pItem->iCursor = pParse->nTab++;
88448 if( regNew!=0 ){
88449 fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regNew, -1);
88451 if( regOld!=0 ){
88452 /* If there is a RESTRICT action configured for the current operation
88453 ** on the parent table of this FK, then throw an exception
88454 ** immediately if the FK constraint is violated, even if this is a
88455 ** deferred trigger. That's what RESTRICT means. To defer checking
88456 ** the constraint, the FK should specify NO ACTION (represented
88457 ** using OE_None). NO ACTION is the default. */
88458 fkScanChildren(pParse, pSrc, pTab, pIdx, pFKey, aiCol, regOld, 1);
88460 pItem->zName = 0;
88461 sqlite3SrcListDelete(db, pSrc);
88463 sqlite3DbFree(db, aiCol);
88467 #define COLUMN_MASK(x) (((x)>31) ? 0xffffffff : ((u32)1<<(x)))
88470 ** This function is called before generating code to update or delete a
88471 ** row contained in table pTab.
88473 SQLITE_PRIVATE u32 sqlite3FkOldmask(
88474 Parse *pParse, /* Parse context */
88475 Table *pTab /* Table being modified */
88477 u32 mask = 0;
88478 if( pParse->db->flags&SQLITE_ForeignKeys ){
88479 FKey *p;
88480 int i;
88481 for(p=pTab->pFKey; p; p=p->pNextFrom){
88482 for(i=0; i<p->nCol; i++) mask |= COLUMN_MASK(p->aCol[i].iFrom);
88484 for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
88485 Index *pIdx = 0;
88486 locateFkeyIndex(pParse, pTab, p, &pIdx, 0);
88487 if( pIdx ){
88488 for(i=0; i<pIdx->nColumn; i++) mask |= COLUMN_MASK(pIdx->aiColumn[i]);
88492 return mask;
88496 ** This function is called before generating code to update or delete a
88497 ** row contained in table pTab. If the operation is a DELETE, then
88498 ** parameter aChange is passed a NULL value. For an UPDATE, aChange points
88499 ** to an array of size N, where N is the number of columns in table pTab.
88500 ** If the i'th column is not modified by the UPDATE, then the corresponding
88501 ** entry in the aChange[] array is set to -1. If the column is modified,
88502 ** the value is 0 or greater. Parameter chngRowid is set to true if the
88503 ** UPDATE statement modifies the rowid fields of the table.
88505 ** If any foreign key processing will be required, this function returns
88506 ** true. If there is no foreign key related processing, this function
88507 ** returns false.
88509 SQLITE_PRIVATE int sqlite3FkRequired(
88510 Parse *pParse, /* Parse context */
88511 Table *pTab, /* Table being modified */
88512 int *aChange, /* Non-NULL for UPDATE operations */
88513 int chngRowid /* True for UPDATE that affects rowid */
88515 if( pParse->db->flags&SQLITE_ForeignKeys ){
88516 if( !aChange ){
88517 /* A DELETE operation. Foreign key processing is required if the
88518 ** table in question is either the child or parent table for any
88519 ** foreign key constraint. */
88520 return (sqlite3FkReferences(pTab) || pTab->pFKey);
88521 }else{
88522 /* This is an UPDATE. Foreign key processing is only required if the
88523 ** operation modifies one or more child or parent key columns. */
88524 int i;
88525 FKey *p;
88527 /* Check if any child key columns are being modified. */
88528 for(p=pTab->pFKey; p; p=p->pNextFrom){
88529 for(i=0; i<p->nCol; i++){
88530 int iChildKey = p->aCol[i].iFrom;
88531 if( aChange[iChildKey]>=0 ) return 1;
88532 if( iChildKey==pTab->iPKey && chngRowid ) return 1;
88536 /* Check if any parent key columns are being modified. */
88537 for(p=sqlite3FkReferences(pTab); p; p=p->pNextTo){
88538 for(i=0; i<p->nCol; i++){
88539 char *zKey = p->aCol[i].zCol;
88540 int iKey;
88541 for(iKey=0; iKey<pTab->nCol; iKey++){
88542 Column *pCol = &pTab->aCol[iKey];
88543 if( (zKey ? !sqlite3StrICmp(pCol->zName, zKey) : pCol->isPrimKey) ){
88544 if( aChange[iKey]>=0 ) return 1;
88545 if( iKey==pTab->iPKey && chngRowid ) return 1;
88552 return 0;
88556 ** This function is called when an UPDATE or DELETE operation is being
88557 ** compiled on table pTab, which is the parent table of foreign-key pFKey.
88558 ** If the current operation is an UPDATE, then the pChanges parameter is
88559 ** passed a pointer to the list of columns being modified. If it is a
88560 ** DELETE, pChanges is passed a NULL pointer.
88562 ** It returns a pointer to a Trigger structure containing a trigger
88563 ** equivalent to the ON UPDATE or ON DELETE action specified by pFKey.
88564 ** If the action is "NO ACTION" or "RESTRICT", then a NULL pointer is
88565 ** returned (these actions require no special handling by the triggers
88566 ** sub-system, code for them is created by fkScanChildren()).
88568 ** For example, if pFKey is the foreign key and pTab is table "p" in
88569 ** the following schema:
88571 ** CREATE TABLE p(pk PRIMARY KEY);
88572 ** CREATE TABLE c(ck REFERENCES p ON DELETE CASCADE);
88574 ** then the returned trigger structure is equivalent to:
88576 ** CREATE TRIGGER ... DELETE ON p BEGIN
88577 ** DELETE FROM c WHERE ck = old.pk;
88578 ** END;
88580 ** The returned pointer is cached as part of the foreign key object. It
88581 ** is eventually freed along with the rest of the foreign key object by
88582 ** sqlite3FkDelete().
88584 static Trigger *fkActionTrigger(
88585 Parse *pParse, /* Parse context */
88586 Table *pTab, /* Table being updated or deleted from */
88587 FKey *pFKey, /* Foreign key to get action for */
88588 ExprList *pChanges /* Change-list for UPDATE, NULL for DELETE */
88590 sqlite3 *db = pParse->db; /* Database handle */
88591 int action; /* One of OE_None, OE_Cascade etc. */
88592 Trigger *pTrigger; /* Trigger definition to return */
88593 int iAction = (pChanges!=0); /* 1 for UPDATE, 0 for DELETE */
88595 action = pFKey->aAction[iAction];
88596 pTrigger = pFKey->apTrigger[iAction];
88598 if( action!=OE_None && !pTrigger ){
88599 u8 enableLookaside; /* Copy of db->lookaside.bEnabled */
88600 char const *zFrom; /* Name of child table */
88601 int nFrom; /* Length in bytes of zFrom */
88602 Index *pIdx = 0; /* Parent key index for this FK */
88603 int *aiCol = 0; /* child table cols -> parent key cols */
88604 TriggerStep *pStep = 0; /* First (only) step of trigger program */
88605 Expr *pWhere = 0; /* WHERE clause of trigger step */
88606 ExprList *pList = 0; /* Changes list if ON UPDATE CASCADE */
88607 Select *pSelect = 0; /* If RESTRICT, "SELECT RAISE(...)" */
88608 int i; /* Iterator variable */
88609 Expr *pWhen = 0; /* WHEN clause for the trigger */
88611 if( locateFkeyIndex(pParse, pTab, pFKey, &pIdx, &aiCol) ) return 0;
88612 assert( aiCol || pFKey->nCol==1 );
88614 for(i=0; i<pFKey->nCol; i++){
88615 Token tOld = { "old", 3 }; /* Literal "old" token */
88616 Token tNew = { "new", 3 }; /* Literal "new" token */
88617 Token tFromCol; /* Name of column in child table */
88618 Token tToCol; /* Name of column in parent table */
88619 int iFromCol; /* Idx of column in child table */
88620 Expr *pEq; /* tFromCol = OLD.tToCol */
88622 iFromCol = aiCol ? aiCol[i] : pFKey->aCol[0].iFrom;
88623 assert( iFromCol>=0 );
88624 tToCol.z = pIdx ? pTab->aCol[pIdx->aiColumn[i]].zName : "oid";
88625 tFromCol.z = pFKey->pFrom->aCol[iFromCol].zName;
88627 tToCol.n = sqlite3Strlen30(tToCol.z);
88628 tFromCol.n = sqlite3Strlen30(tFromCol.z);
88630 /* Create the expression "OLD.zToCol = zFromCol". It is important
88631 ** that the "OLD.zToCol" term is on the LHS of the = operator, so
88632 ** that the affinity and collation sequence associated with the
88633 ** parent table are used for the comparison. */
88634 pEq = sqlite3PExpr(pParse, TK_EQ,
88635 sqlite3PExpr(pParse, TK_DOT,
88636 sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
88637 sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
88638 , 0),
88639 sqlite3PExpr(pParse, TK_ID, 0, 0, &tFromCol)
88640 , 0);
88641 pWhere = sqlite3ExprAnd(db, pWhere, pEq);
88643 /* For ON UPDATE, construct the next term of the WHEN clause.
88644 ** The final WHEN clause will be like this:
88646 ** WHEN NOT(old.col1 IS new.col1 AND ... AND old.colN IS new.colN)
88648 if( pChanges ){
88649 pEq = sqlite3PExpr(pParse, TK_IS,
88650 sqlite3PExpr(pParse, TK_DOT,
88651 sqlite3PExpr(pParse, TK_ID, 0, 0, &tOld),
88652 sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
88654 sqlite3PExpr(pParse, TK_DOT,
88655 sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
88656 sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol),
88659 pWhen = sqlite3ExprAnd(db, pWhen, pEq);
88662 if( action!=OE_Restrict && (action!=OE_Cascade || pChanges) ){
88663 Expr *pNew;
88664 if( action==OE_Cascade ){
88665 pNew = sqlite3PExpr(pParse, TK_DOT,
88666 sqlite3PExpr(pParse, TK_ID, 0, 0, &tNew),
88667 sqlite3PExpr(pParse, TK_ID, 0, 0, &tToCol)
88668 , 0);
88669 }else if( action==OE_SetDflt ){
88670 Expr *pDflt = pFKey->pFrom->aCol[iFromCol].pDflt;
88671 if( pDflt ){
88672 pNew = sqlite3ExprDup(db, pDflt, 0);
88673 }else{
88674 pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
88676 }else{
88677 pNew = sqlite3PExpr(pParse, TK_NULL, 0, 0, 0);
88679 pList = sqlite3ExprListAppend(pParse, pList, pNew);
88680 sqlite3ExprListSetName(pParse, pList, &tFromCol, 0);
88683 sqlite3DbFree(db, aiCol);
88685 zFrom = pFKey->pFrom->zName;
88686 nFrom = sqlite3Strlen30(zFrom);
88688 if( action==OE_Restrict ){
88689 Token tFrom;
88690 Expr *pRaise;
88692 tFrom.z = zFrom;
88693 tFrom.n = nFrom;
88694 pRaise = sqlite3Expr(db, TK_RAISE, "foreign key constraint failed");
88695 if( pRaise ){
88696 pRaise->affinity = OE_Abort;
88698 pSelect = sqlite3SelectNew(pParse,
88699 sqlite3ExprListAppend(pParse, 0, pRaise),
88700 sqlite3SrcListAppend(db, 0, &tFrom, 0),
88701 pWhere,
88702 0, 0, 0, 0, 0, 0
88704 pWhere = 0;
88707 /* Disable lookaside memory allocation */
88708 enableLookaside = db->lookaside.bEnabled;
88709 db->lookaside.bEnabled = 0;
88711 pTrigger = (Trigger *)sqlite3DbMallocZero(db,
88712 sizeof(Trigger) + /* struct Trigger */
88713 sizeof(TriggerStep) + /* Single step in trigger program */
88714 nFrom + 1 /* Space for pStep->target.z */
88716 if( pTrigger ){
88717 pStep = pTrigger->step_list = (TriggerStep *)&pTrigger[1];
88718 pStep->target.z = (char *)&pStep[1];
88719 pStep->target.n = nFrom;
88720 memcpy((char *)pStep->target.z, zFrom, nFrom);
88722 pStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
88723 pStep->pExprList = sqlite3ExprListDup(db, pList, EXPRDUP_REDUCE);
88724 pStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
88725 if( pWhen ){
88726 pWhen = sqlite3PExpr(pParse, TK_NOT, pWhen, 0, 0);
88727 pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
88731 /* Re-enable the lookaside buffer, if it was disabled earlier. */
88732 db->lookaside.bEnabled = enableLookaside;
88734 sqlite3ExprDelete(db, pWhere);
88735 sqlite3ExprDelete(db, pWhen);
88736 sqlite3ExprListDelete(db, pList);
88737 sqlite3SelectDelete(db, pSelect);
88738 if( db->mallocFailed==1 ){
88739 fkTriggerDelete(db, pTrigger);
88740 return 0;
88742 assert( pStep!=0 );
88744 switch( action ){
88745 case OE_Restrict:
88746 pStep->op = TK_SELECT;
88747 break;
88748 case OE_Cascade:
88749 if( !pChanges ){
88750 pStep->op = TK_DELETE;
88751 break;
88753 default:
88754 pStep->op = TK_UPDATE;
88756 pStep->pTrig = pTrigger;
88757 pTrigger->pSchema = pTab->pSchema;
88758 pTrigger->pTabSchema = pTab->pSchema;
88759 pFKey->apTrigger[iAction] = pTrigger;
88760 pTrigger->op = (pChanges ? TK_UPDATE : TK_DELETE);
88763 return pTrigger;
88767 ** This function is called when deleting or updating a row to implement
88768 ** any required CASCADE, SET NULL or SET DEFAULT actions.
88770 SQLITE_PRIVATE void sqlite3FkActions(
88771 Parse *pParse, /* Parse context */
88772 Table *pTab, /* Table being updated or deleted from */
88773 ExprList *pChanges, /* Change-list for UPDATE, NULL for DELETE */
88774 int regOld /* Address of array containing old row */
88776 /* If foreign-key support is enabled, iterate through all FKs that
88777 ** refer to table pTab. If there is an action associated with the FK
88778 ** for this operation (either update or delete), invoke the associated
88779 ** trigger sub-program. */
88780 if( pParse->db->flags&SQLITE_ForeignKeys ){
88781 FKey *pFKey; /* Iterator variable */
88782 for(pFKey = sqlite3FkReferences(pTab); pFKey; pFKey=pFKey->pNextTo){
88783 Trigger *pAction = fkActionTrigger(pParse, pTab, pFKey, pChanges);
88784 if( pAction ){
88785 sqlite3CodeRowTriggerDirect(pParse, pAction, pTab, regOld, OE_Abort, 0);
88791 #endif /* ifndef SQLITE_OMIT_TRIGGER */
88794 ** Free all memory associated with foreign key definitions attached to
88795 ** table pTab. Remove the deleted foreign keys from the Schema.fkeyHash
88796 ** hash table.
88798 SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
88799 FKey *pFKey; /* Iterator variable */
88800 FKey *pNext; /* Copy of pFKey->pNextFrom */
88802 assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pTab->pSchema) );
88803 for(pFKey=pTab->pFKey; pFKey; pFKey=pNext){
88805 /* Remove the FK from the fkeyHash hash table. */
88806 if( !db || db->pnBytesFreed==0 ){
88807 if( pFKey->pPrevTo ){
88808 pFKey->pPrevTo->pNextTo = pFKey->pNextTo;
88809 }else{
88810 void *p = (void *)pFKey->pNextTo;
88811 const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
88812 sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, sqlite3Strlen30(z), p);
88814 if( pFKey->pNextTo ){
88815 pFKey->pNextTo->pPrevTo = pFKey->pPrevTo;
88819 /* EV: R-30323-21917 Each foreign key constraint in SQLite is
88820 ** classified as either immediate or deferred.
88822 assert( pFKey->isDeferred==0 || pFKey->isDeferred==1 );
88824 /* Delete any triggers created to implement actions for this FK. */
88825 #ifndef SQLITE_OMIT_TRIGGER
88826 fkTriggerDelete(db, pFKey->apTrigger[0]);
88827 fkTriggerDelete(db, pFKey->apTrigger[1]);
88828 #endif
88830 pNext = pFKey->pNextFrom;
88831 sqlite3DbFree(db, pFKey);
88834 #endif /* ifndef SQLITE_OMIT_FOREIGN_KEY */
88836 /************** End of fkey.c ************************************************/
88837 /************** Begin file insert.c ******************************************/
88839 ** 2001 September 15
88841 ** The author disclaims copyright to this source code. In place of
88842 ** a legal notice, here is a blessing:
88844 ** May you do good and not evil.
88845 ** May you find forgiveness for yourself and forgive others.
88846 ** May you share freely, never taking more than you give.
88848 *************************************************************************
88849 ** This file contains C code routines that are called by the parser
88850 ** to handle INSERT statements in SQLite.
88854 ** Generate code that will open a table for reading.
88856 SQLITE_PRIVATE void sqlite3OpenTable(
88857 Parse *p, /* Generate code into this VDBE */
88858 int iCur, /* The cursor number of the table */
88859 int iDb, /* The database index in sqlite3.aDb[] */
88860 Table *pTab, /* The table to be opened */
88861 int opcode /* OP_OpenRead or OP_OpenWrite */
88863 Vdbe *v;
88864 if( IsVirtual(pTab) ) return;
88865 v = sqlite3GetVdbe(p);
88866 assert( opcode==OP_OpenWrite || opcode==OP_OpenRead );
88867 sqlite3TableLock(p, iDb, pTab->tnum, (opcode==OP_OpenWrite)?1:0, pTab->zName);
88868 sqlite3VdbeAddOp3(v, opcode, iCur, pTab->tnum, iDb);
88869 sqlite3VdbeChangeP4(v, -1, SQLITE_INT_TO_PTR(pTab->nCol), P4_INT32);
88870 VdbeComment((v, "%s", pTab->zName));
88874 ** Return a pointer to the column affinity string associated with index
88875 ** pIdx. A column affinity string has one character for each column in
88876 ** the table, according to the affinity of the column:
88878 ** Character Column affinity
88879 ** ------------------------------
88880 ** 'a' TEXT
88881 ** 'b' NONE
88882 ** 'c' NUMERIC
88883 ** 'd' INTEGER
88884 ** 'e' REAL
88886 ** An extra 'd' is appended to the end of the string to cover the
88887 ** rowid that appears as the last column in every index.
88889 ** Memory for the buffer containing the column index affinity string
88890 ** is managed along with the rest of the Index structure. It will be
88891 ** released when sqlite3DeleteIndex() is called.
88893 SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
88894 if( !pIdx->zColAff ){
88895 /* The first time a column affinity string for a particular index is
88896 ** required, it is allocated and populated here. It is then stored as
88897 ** a member of the Index structure for subsequent use.
88899 ** The column affinity string will eventually be deleted by
88900 ** sqliteDeleteIndex() when the Index structure itself is cleaned
88901 ** up.
88903 int n;
88904 Table *pTab = pIdx->pTable;
88905 sqlite3 *db = sqlite3VdbeDb(v);
88906 pIdx->zColAff = (char *)sqlite3DbMallocRaw(0, pIdx->nColumn+2);
88907 if( !pIdx->zColAff ){
88908 db->mallocFailed = 1;
88909 return 0;
88911 for(n=0; n<pIdx->nColumn; n++){
88912 pIdx->zColAff[n] = pTab->aCol[pIdx->aiColumn[n]].affinity;
88914 pIdx->zColAff[n++] = SQLITE_AFF_INTEGER;
88915 pIdx->zColAff[n] = 0;
88918 return pIdx->zColAff;
88922 ** Set P4 of the most recently inserted opcode to a column affinity
88923 ** string for table pTab. A column affinity string has one character
88924 ** for each column indexed by the index, according to the affinity of the
88925 ** column:
88927 ** Character Column affinity
88928 ** ------------------------------
88929 ** 'a' TEXT
88930 ** 'b' NONE
88931 ** 'c' NUMERIC
88932 ** 'd' INTEGER
88933 ** 'e' REAL
88935 SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *v, Table *pTab){
88936 /* The first time a column affinity string for a particular table
88937 ** is required, it is allocated and populated here. It is then
88938 ** stored as a member of the Table structure for subsequent use.
88940 ** The column affinity string will eventually be deleted by
88941 ** sqlite3DeleteTable() when the Table structure itself is cleaned up.
88943 if( !pTab->zColAff ){
88944 char *zColAff;
88945 int i;
88946 sqlite3 *db = sqlite3VdbeDb(v);
88948 zColAff = (char *)sqlite3DbMallocRaw(0, pTab->nCol+1);
88949 if( !zColAff ){
88950 db->mallocFailed = 1;
88951 return;
88954 for(i=0; i<pTab->nCol; i++){
88955 zColAff[i] = pTab->aCol[i].affinity;
88957 zColAff[pTab->nCol] = '\0';
88959 pTab->zColAff = zColAff;
88962 sqlite3VdbeChangeP4(v, -1, pTab->zColAff, P4_TRANSIENT);
88966 ** Return non-zero if the table pTab in database iDb or any of its indices
88967 ** have been opened at any point in the VDBE program beginning at location
88968 ** iStartAddr throught the end of the program. This is used to see if
88969 ** a statement of the form "INSERT INTO <iDb, pTab> SELECT ..." can
88970 ** run without using temporary table for the results of the SELECT.
88972 static int readsTable(Parse *p, int iStartAddr, int iDb, Table *pTab){
88973 Vdbe *v = sqlite3GetVdbe(p);
88974 int i;
88975 int iEnd = sqlite3VdbeCurrentAddr(v);
88976 #ifndef SQLITE_OMIT_VIRTUALTABLE
88977 VTable *pVTab = IsVirtual(pTab) ? sqlite3GetVTable(p->db, pTab) : 0;
88978 #endif
88980 for(i=iStartAddr; i<iEnd; i++){
88981 VdbeOp *pOp = sqlite3VdbeGetOp(v, i);
88982 assert( pOp!=0 );
88983 if( pOp->opcode==OP_OpenRead && pOp->p3==iDb ){
88984 Index *pIndex;
88985 int tnum = pOp->p2;
88986 if( tnum==pTab->tnum ){
88987 return 1;
88989 for(pIndex=pTab->pIndex; pIndex; pIndex=pIndex->pNext){
88990 if( tnum==pIndex->tnum ){
88991 return 1;
88995 #ifndef SQLITE_OMIT_VIRTUALTABLE
88996 if( pOp->opcode==OP_VOpen && pOp->p4.pVtab==pVTab ){
88997 assert( pOp->p4.pVtab!=0 );
88998 assert( pOp->p4type==P4_VTAB );
88999 return 1;
89001 #endif
89003 return 0;
89006 #ifndef SQLITE_OMIT_AUTOINCREMENT
89008 ** Locate or create an AutoincInfo structure associated with table pTab
89009 ** which is in database iDb. Return the register number for the register
89010 ** that holds the maximum rowid.
89012 ** There is at most one AutoincInfo structure per table even if the
89013 ** same table is autoincremented multiple times due to inserts within
89014 ** triggers. A new AutoincInfo structure is created if this is the
89015 ** first use of table pTab. On 2nd and subsequent uses, the original
89016 ** AutoincInfo structure is used.
89018 ** Three memory locations are allocated:
89020 ** (1) Register to hold the name of the pTab table.
89021 ** (2) Register to hold the maximum ROWID of pTab.
89022 ** (3) Register to hold the rowid in sqlite_sequence of pTab
89024 ** The 2nd register is the one that is returned. That is all the
89025 ** insert routine needs to know about.
89027 static int autoIncBegin(
89028 Parse *pParse, /* Parsing context */
89029 int iDb, /* Index of the database holding pTab */
89030 Table *pTab /* The table we are writing to */
89032 int memId = 0; /* Register holding maximum rowid */
89033 if( pTab->tabFlags & TF_Autoincrement ){
89034 Parse *pToplevel = sqlite3ParseToplevel(pParse);
89035 AutoincInfo *pInfo;
89037 pInfo = pToplevel->pAinc;
89038 while( pInfo && pInfo->pTab!=pTab ){ pInfo = pInfo->pNext; }
89039 if( pInfo==0 ){
89040 pInfo = sqlite3DbMallocRaw(pParse->db, sizeof(*pInfo));
89041 if( pInfo==0 ) return 0;
89042 pInfo->pNext = pToplevel->pAinc;
89043 pToplevel->pAinc = pInfo;
89044 pInfo->pTab = pTab;
89045 pInfo->iDb = iDb;
89046 pToplevel->nMem++; /* Register to hold name of table */
89047 pInfo->regCtr = ++pToplevel->nMem; /* Max rowid register */
89048 pToplevel->nMem++; /* Rowid in sqlite_sequence */
89050 memId = pInfo->regCtr;
89052 return memId;
89056 ** This routine generates code that will initialize all of the
89057 ** register used by the autoincrement tracker.
89059 SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse){
89060 AutoincInfo *p; /* Information about an AUTOINCREMENT */
89061 sqlite3 *db = pParse->db; /* The database connection */
89062 Db *pDb; /* Database only autoinc table */
89063 int memId; /* Register holding max rowid */
89064 int addr; /* A VDBE address */
89065 Vdbe *v = pParse->pVdbe; /* VDBE under construction */
89067 /* This routine is never called during trigger-generation. It is
89068 ** only called from the top-level */
89069 assert( pParse->pTriggerTab==0 );
89070 assert( pParse==sqlite3ParseToplevel(pParse) );
89072 assert( v ); /* We failed long ago if this is not so */
89073 for(p = pParse->pAinc; p; p = p->pNext){
89074 pDb = &db->aDb[p->iDb];
89075 memId = p->regCtr;
89076 assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
89077 sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenRead);
89078 sqlite3VdbeAddOp3(v, OP_Null, 0, memId, memId+1);
89079 addr = sqlite3VdbeCurrentAddr(v);
89080 sqlite3VdbeAddOp4(v, OP_String8, 0, memId-1, 0, p->pTab->zName, 0);
89081 sqlite3VdbeAddOp2(v, OP_Rewind, 0, addr+9);
89082 sqlite3VdbeAddOp3(v, OP_Column, 0, 0, memId);
89083 sqlite3VdbeAddOp3(v, OP_Ne, memId-1, addr+7, memId);
89084 sqlite3VdbeChangeP5(v, SQLITE_JUMPIFNULL);
89085 sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
89086 sqlite3VdbeAddOp3(v, OP_Column, 0, 1, memId);
89087 sqlite3VdbeAddOp2(v, OP_Goto, 0, addr+9);
89088 sqlite3VdbeAddOp2(v, OP_Next, 0, addr+2);
89089 sqlite3VdbeAddOp2(v, OP_Integer, 0, memId);
89090 sqlite3VdbeAddOp0(v, OP_Close);
89095 ** Update the maximum rowid for an autoincrement calculation.
89097 ** This routine should be called when the top of the stack holds a
89098 ** new rowid that is about to be inserted. If that new rowid is
89099 ** larger than the maximum rowid in the memId memory cell, then the
89100 ** memory cell is updated. The stack is unchanged.
89102 static void autoIncStep(Parse *pParse, int memId, int regRowid){
89103 if( memId>0 ){
89104 sqlite3VdbeAddOp2(pParse->pVdbe, OP_MemMax, memId, regRowid);
89109 ** This routine generates the code needed to write autoincrement
89110 ** maximum rowid values back into the sqlite_sequence register.
89111 ** Every statement that might do an INSERT into an autoincrement
89112 ** table (either directly or through triggers) needs to call this
89113 ** routine just before the "exit" code.
89115 SQLITE_PRIVATE void sqlite3AutoincrementEnd(Parse *pParse){
89116 AutoincInfo *p;
89117 Vdbe *v = pParse->pVdbe;
89118 sqlite3 *db = pParse->db;
89120 assert( v );
89121 for(p = pParse->pAinc; p; p = p->pNext){
89122 Db *pDb = &db->aDb[p->iDb];
89123 int j1, j2, j3, j4, j5;
89124 int iRec;
89125 int memId = p->regCtr;
89127 iRec = sqlite3GetTempReg(pParse);
89128 assert( sqlite3SchemaMutexHeld(db, 0, pDb->pSchema) );
89129 sqlite3OpenTable(pParse, 0, p->iDb, pDb->pSchema->pSeqTab, OP_OpenWrite);
89130 j1 = sqlite3VdbeAddOp1(v, OP_NotNull, memId+1);
89131 j2 = sqlite3VdbeAddOp0(v, OP_Rewind);
89132 j3 = sqlite3VdbeAddOp3(v, OP_Column, 0, 0, iRec);
89133 j4 = sqlite3VdbeAddOp3(v, OP_Eq, memId-1, 0, iRec);
89134 sqlite3VdbeAddOp2(v, OP_Next, 0, j3);
89135 sqlite3VdbeJumpHere(v, j2);
89136 sqlite3VdbeAddOp2(v, OP_NewRowid, 0, memId+1);
89137 j5 = sqlite3VdbeAddOp0(v, OP_Goto);
89138 sqlite3VdbeJumpHere(v, j4);
89139 sqlite3VdbeAddOp2(v, OP_Rowid, 0, memId+1);
89140 sqlite3VdbeJumpHere(v, j1);
89141 sqlite3VdbeJumpHere(v, j5);
89142 sqlite3VdbeAddOp3(v, OP_MakeRecord, memId-1, 2, iRec);
89143 sqlite3VdbeAddOp3(v, OP_Insert, 0, iRec, memId+1);
89144 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
89145 sqlite3VdbeAddOp0(v, OP_Close);
89146 sqlite3ReleaseTempReg(pParse, iRec);
89149 #else
89151 ** If SQLITE_OMIT_AUTOINCREMENT is defined, then the three routines
89152 ** above are all no-ops
89154 # define autoIncBegin(A,B,C) (0)
89155 # define autoIncStep(A,B,C)
89156 #endif /* SQLITE_OMIT_AUTOINCREMENT */
89159 /* Forward declaration */
89160 static int xferOptimization(
89161 Parse *pParse, /* Parser context */
89162 Table *pDest, /* The table we are inserting into */
89163 Select *pSelect, /* A SELECT statement to use as the data source */
89164 int onError, /* How to handle constraint errors */
89165 int iDbDest /* The database of pDest */
89169 ** This routine is call to handle SQL of the following forms:
89171 ** insert into TABLE (IDLIST) values(EXPRLIST)
89172 ** insert into TABLE (IDLIST) select
89174 ** The IDLIST following the table name is always optional. If omitted,
89175 ** then a list of all columns for the table is substituted. The IDLIST
89176 ** appears in the pColumn parameter. pColumn is NULL if IDLIST is omitted.
89178 ** The pList parameter holds EXPRLIST in the first form of the INSERT
89179 ** statement above, and pSelect is NULL. For the second form, pList is
89180 ** NULL and pSelect is a pointer to the select statement used to generate
89181 ** data for the insert.
89183 ** The code generated follows one of four templates. For a simple
89184 ** select with data coming from a VALUES clause, the code executes
89185 ** once straight down through. Pseudo-code follows (we call this
89186 ** the "1st template"):
89188 ** open write cursor to <table> and its indices
89189 ** puts VALUES clause expressions onto the stack
89190 ** write the resulting record into <table>
89191 ** cleanup
89193 ** The three remaining templates assume the statement is of the form
89195 ** INSERT INTO <table> SELECT ...
89197 ** If the SELECT clause is of the restricted form "SELECT * FROM <table2>" -
89198 ** in other words if the SELECT pulls all columns from a single table
89199 ** and there is no WHERE or LIMIT or GROUP BY or ORDER BY clauses, and
89200 ** if <table2> and <table1> are distinct tables but have identical
89201 ** schemas, including all the same indices, then a special optimization
89202 ** is invoked that copies raw records from <table2> over to <table1>.
89203 ** See the xferOptimization() function for the implementation of this
89204 ** template. This is the 2nd template.
89206 ** open a write cursor to <table>
89207 ** open read cursor on <table2>
89208 ** transfer all records in <table2> over to <table>
89209 ** close cursors
89210 ** foreach index on <table>
89211 ** open a write cursor on the <table> index
89212 ** open a read cursor on the corresponding <table2> index
89213 ** transfer all records from the read to the write cursors
89214 ** close cursors
89215 ** end foreach
89217 ** The 3rd template is for when the second template does not apply
89218 ** and the SELECT clause does not read from <table> at any time.
89219 ** The generated code follows this template:
89221 ** EOF <- 0
89222 ** X <- A
89223 ** goto B
89224 ** A: setup for the SELECT
89225 ** loop over the rows in the SELECT
89226 ** load values into registers R..R+n
89227 ** yield X
89228 ** end loop
89229 ** cleanup after the SELECT
89230 ** EOF <- 1
89231 ** yield X
89232 ** goto A
89233 ** B: open write cursor to <table> and its indices
89234 ** C: yield X
89235 ** if EOF goto D
89236 ** insert the select result into <table> from R..R+n
89237 ** goto C
89238 ** D: cleanup
89240 ** The 4th template is used if the insert statement takes its
89241 ** values from a SELECT but the data is being inserted into a table
89242 ** that is also read as part of the SELECT. In the third form,
89243 ** we have to use a intermediate table to store the results of
89244 ** the select. The template is like this:
89246 ** EOF <- 0
89247 ** X <- A
89248 ** goto B
89249 ** A: setup for the SELECT
89250 ** loop over the tables in the SELECT
89251 ** load value into register R..R+n
89252 ** yield X
89253 ** end loop
89254 ** cleanup after the SELECT
89255 ** EOF <- 1
89256 ** yield X
89257 ** halt-error
89258 ** B: open temp table
89259 ** L: yield X
89260 ** if EOF goto M
89261 ** insert row from R..R+n into temp table
89262 ** goto L
89263 ** M: open write cursor to <table> and its indices
89264 ** rewind temp table
89265 ** C: loop over rows of intermediate table
89266 ** transfer values form intermediate table into <table>
89267 ** end loop
89268 ** D: cleanup
89270 SQLITE_PRIVATE void sqlite3Insert(
89271 Parse *pParse, /* Parser context */
89272 SrcList *pTabList, /* Name of table into which we are inserting */
89273 ExprList *pList, /* List of values to be inserted */
89274 Select *pSelect, /* A SELECT statement to use as the data source */
89275 IdList *pColumn, /* Column names corresponding to IDLIST. */
89276 int onError /* How to handle constraint errors */
89278 sqlite3 *db; /* The main database structure */
89279 Table *pTab; /* The table to insert into. aka TABLE */
89280 char *zTab; /* Name of the table into which we are inserting */
89281 const char *zDb; /* Name of the database holding this table */
89282 int i, j, idx; /* Loop counters */
89283 Vdbe *v; /* Generate code into this virtual machine */
89284 Index *pIdx; /* For looping over indices of the table */
89285 int nColumn; /* Number of columns in the data */
89286 int nHidden = 0; /* Number of hidden columns if TABLE is virtual */
89287 int baseCur = 0; /* VDBE Cursor number for pTab */
89288 int keyColumn = -1; /* Column that is the INTEGER PRIMARY KEY */
89289 int endOfLoop; /* Label for the end of the insertion loop */
89290 int useTempTable = 0; /* Store SELECT results in intermediate table */
89291 int srcTab = 0; /* Data comes from this temporary cursor if >=0 */
89292 int addrInsTop = 0; /* Jump to label "D" */
89293 int addrCont = 0; /* Top of insert loop. Label "C" in templates 3 and 4 */
89294 int addrSelect = 0; /* Address of coroutine that implements the SELECT */
89295 SelectDest dest; /* Destination for SELECT on rhs of INSERT */
89296 int iDb; /* Index of database holding TABLE */
89297 Db *pDb; /* The database containing table being inserted into */
89298 int appendFlag = 0; /* True if the insert is likely to be an append */
89300 /* Register allocations */
89301 int regFromSelect = 0;/* Base register for data coming from SELECT */
89302 int regAutoinc = 0; /* Register holding the AUTOINCREMENT counter */
89303 int regRowCount = 0; /* Memory cell used for the row counter */
89304 int regIns; /* Block of regs holding rowid+data being inserted */
89305 int regRowid; /* registers holding insert rowid */
89306 int regData; /* register holding first column to insert */
89307 int regEof = 0; /* Register recording end of SELECT data */
89308 int *aRegIdx = 0; /* One register allocated to each index */
89310 #ifndef SQLITE_OMIT_TRIGGER
89311 int isView; /* True if attempting to insert into a view */
89312 Trigger *pTrigger; /* List of triggers on pTab, if required */
89313 int tmask; /* Mask of trigger times */
89314 #endif
89316 db = pParse->db;
89317 memset(&dest, 0, sizeof(dest));
89318 if( pParse->nErr || db->mallocFailed ){
89319 goto insert_cleanup;
89322 /* Locate the table into which we will be inserting new information.
89324 assert( pTabList->nSrc==1 );
89325 zTab = pTabList->a[0].zName;
89326 if( NEVER(zTab==0) ) goto insert_cleanup;
89327 pTab = sqlite3SrcListLookup(pParse, pTabList);
89328 if( pTab==0 ){
89329 goto insert_cleanup;
89331 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
89332 assert( iDb<db->nDb );
89333 pDb = &db->aDb[iDb];
89334 zDb = pDb->zName;
89335 if( sqlite3AuthCheck(pParse, SQLITE_INSERT, pTab->zName, 0, zDb) ){
89336 goto insert_cleanup;
89339 /* Figure out if we have any triggers and if the table being
89340 ** inserted into is a view
89342 #ifndef SQLITE_OMIT_TRIGGER
89343 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_INSERT, 0, &tmask);
89344 isView = pTab->pSelect!=0;
89345 #else
89346 # define pTrigger 0
89347 # define tmask 0
89348 # define isView 0
89349 #endif
89350 #ifdef SQLITE_OMIT_VIEW
89351 # undef isView
89352 # define isView 0
89353 #endif
89354 assert( (pTrigger && tmask) || (pTrigger==0 && tmask==0) );
89356 /* If pTab is really a view, make sure it has been initialized.
89357 ** ViewGetColumnNames() is a no-op if pTab is not a view (or virtual
89358 ** module table).
89360 if( sqlite3ViewGetColumnNames(pParse, pTab) ){
89361 goto insert_cleanup;
89364 /* Ensure that:
89365 * (a) the table is not read-only,
89366 * (b) that if it is a view then ON INSERT triggers exist
89368 if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
89369 goto insert_cleanup;
89372 /* Allocate a VDBE
89374 v = sqlite3GetVdbe(pParse);
89375 if( v==0 ) goto insert_cleanup;
89376 if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
89377 sqlite3BeginWriteOperation(pParse, pSelect || pTrigger, iDb);
89379 #ifndef SQLITE_OMIT_XFER_OPT
89380 /* If the statement is of the form
89382 ** INSERT INTO <table1> SELECT * FROM <table2>;
89384 ** Then special optimizations can be applied that make the transfer
89385 ** very fast and which reduce fragmentation of indices.
89387 ** This is the 2nd template.
89389 if( pColumn==0 && xferOptimization(pParse, pTab, pSelect, onError, iDb) ){
89390 assert( !pTrigger );
89391 assert( pList==0 );
89392 goto insert_end;
89394 #endif /* SQLITE_OMIT_XFER_OPT */
89396 /* If this is an AUTOINCREMENT table, look up the sequence number in the
89397 ** sqlite_sequence table and store it in memory cell regAutoinc.
89399 regAutoinc = autoIncBegin(pParse, iDb, pTab);
89401 /* Figure out how many columns of data are supplied. If the data
89402 ** is coming from a SELECT statement, then generate a co-routine that
89403 ** produces a single row of the SELECT on each invocation. The
89404 ** co-routine is the common header to the 3rd and 4th templates.
89406 if( pSelect ){
89407 /* Data is coming from a SELECT. Generate code to implement that SELECT
89408 ** as a co-routine. The code is common to both the 3rd and 4th
89409 ** templates:
89411 ** EOF <- 0
89412 ** X <- A
89413 ** goto B
89414 ** A: setup for the SELECT
89415 ** loop over the tables in the SELECT
89416 ** load value into register R..R+n
89417 ** yield X
89418 ** end loop
89419 ** cleanup after the SELECT
89420 ** EOF <- 1
89421 ** yield X
89422 ** halt-error
89424 ** On each invocation of the co-routine, it puts a single row of the
89425 ** SELECT result into registers dest.iMem...dest.iMem+dest.nMem-1.
89426 ** (These output registers are allocated by sqlite3Select().) When
89427 ** the SELECT completes, it sets the EOF flag stored in regEof.
89429 int rc, j1;
89431 regEof = ++pParse->nMem;
89432 sqlite3VdbeAddOp2(v, OP_Integer, 0, regEof); /* EOF <- 0 */
89433 VdbeComment((v, "SELECT eof flag"));
89434 sqlite3SelectDestInit(&dest, SRT_Coroutine, ++pParse->nMem);
89435 addrSelect = sqlite3VdbeCurrentAddr(v)+2;
89436 sqlite3VdbeAddOp2(v, OP_Integer, addrSelect-1, dest.iParm);
89437 j1 = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
89438 VdbeComment((v, "Jump over SELECT coroutine"));
89440 /* Resolve the expressions in the SELECT statement and execute it. */
89441 rc = sqlite3Select(pParse, pSelect, &dest);
89442 assert( pParse->nErr==0 || rc );
89443 if( rc || NEVER(pParse->nErr) || db->mallocFailed ){
89444 goto insert_cleanup;
89446 sqlite3VdbeAddOp2(v, OP_Integer, 1, regEof); /* EOF <- 1 */
89447 sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm); /* yield X */
89448 sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_INTERNAL, OE_Abort);
89449 VdbeComment((v, "End of SELECT coroutine"));
89450 sqlite3VdbeJumpHere(v, j1); /* label B: */
89452 regFromSelect = dest.iMem;
89453 assert( pSelect->pEList );
89454 nColumn = pSelect->pEList->nExpr;
89455 assert( dest.nMem==nColumn );
89457 /* Set useTempTable to TRUE if the result of the SELECT statement
89458 ** should be written into a temporary table (template 4). Set to
89459 ** FALSE if each* row of the SELECT can be written directly into
89460 ** the destination table (template 3).
89462 ** A temp table must be used if the table being updated is also one
89463 ** of the tables being read by the SELECT statement. Also use a
89464 ** temp table in the case of row triggers.
89466 if( pTrigger || readsTable(pParse, addrSelect, iDb, pTab) ){
89467 useTempTable = 1;
89470 if( useTempTable ){
89471 /* Invoke the coroutine to extract information from the SELECT
89472 ** and add it to a transient table srcTab. The code generated
89473 ** here is from the 4th template:
89475 ** B: open temp table
89476 ** L: yield X
89477 ** if EOF goto M
89478 ** insert row from R..R+n into temp table
89479 ** goto L
89480 ** M: ...
89482 int regRec; /* Register to hold packed record */
89483 int regTempRowid; /* Register to hold temp table ROWID */
89484 int addrTop; /* Label "L" */
89485 int addrIf; /* Address of jump to M */
89487 srcTab = pParse->nTab++;
89488 regRec = sqlite3GetTempReg(pParse);
89489 regTempRowid = sqlite3GetTempReg(pParse);
89490 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, srcTab, nColumn);
89491 addrTop = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
89492 addrIf = sqlite3VdbeAddOp1(v, OP_If, regEof);
89493 sqlite3VdbeAddOp3(v, OP_MakeRecord, regFromSelect, nColumn, regRec);
89494 sqlite3VdbeAddOp2(v, OP_NewRowid, srcTab, regTempRowid);
89495 sqlite3VdbeAddOp3(v, OP_Insert, srcTab, regRec, regTempRowid);
89496 sqlite3VdbeAddOp2(v, OP_Goto, 0, addrTop);
89497 sqlite3VdbeJumpHere(v, addrIf);
89498 sqlite3ReleaseTempReg(pParse, regRec);
89499 sqlite3ReleaseTempReg(pParse, regTempRowid);
89501 }else{
89502 /* This is the case if the data for the INSERT is coming from a VALUES
89503 ** clause
89505 NameContext sNC;
89506 memset(&sNC, 0, sizeof(sNC));
89507 sNC.pParse = pParse;
89508 srcTab = -1;
89509 assert( useTempTable==0 );
89510 nColumn = pList ? pList->nExpr : 0;
89511 for(i=0; i<nColumn; i++){
89512 if( sqlite3ResolveExprNames(&sNC, pList->a[i].pExpr) ){
89513 goto insert_cleanup;
89518 /* Make sure the number of columns in the source data matches the number
89519 ** of columns to be inserted into the table.
89521 if( IsVirtual(pTab) ){
89522 for(i=0; i<pTab->nCol; i++){
89523 nHidden += (IsHiddenColumn(&pTab->aCol[i]) ? 1 : 0);
89526 if( pColumn==0 && nColumn && nColumn!=(pTab->nCol-nHidden) ){
89527 sqlite3ErrorMsg(pParse,
89528 "table %S has %d columns but %d values were supplied",
89529 pTabList, 0, pTab->nCol-nHidden, nColumn);
89530 goto insert_cleanup;
89532 if( pColumn!=0 && nColumn!=pColumn->nId ){
89533 sqlite3ErrorMsg(pParse, "%d values for %d columns", nColumn, pColumn->nId);
89534 goto insert_cleanup;
89537 /* If the INSERT statement included an IDLIST term, then make sure
89538 ** all elements of the IDLIST really are columns of the table and
89539 ** remember the column indices.
89541 ** If the table has an INTEGER PRIMARY KEY column and that column
89542 ** is named in the IDLIST, then record in the keyColumn variable
89543 ** the index into IDLIST of the primary key column. keyColumn is
89544 ** the index of the primary key as it appears in IDLIST, not as
89545 ** is appears in the original table. (The index of the primary
89546 ** key in the original table is pTab->iPKey.)
89548 if( pColumn ){
89549 for(i=0; i<pColumn->nId; i++){
89550 pColumn->a[i].idx = -1;
89552 for(i=0; i<pColumn->nId; i++){
89553 for(j=0; j<pTab->nCol; j++){
89554 if( sqlite3StrICmp(pColumn->a[i].zName, pTab->aCol[j].zName)==0 ){
89555 pColumn->a[i].idx = j;
89556 if( j==pTab->iPKey ){
89557 keyColumn = i;
89559 break;
89562 if( j>=pTab->nCol ){
89563 if( sqlite3IsRowid(pColumn->a[i].zName) ){
89564 keyColumn = i;
89565 }else{
89566 sqlite3ErrorMsg(pParse, "table %S has no column named %s",
89567 pTabList, 0, pColumn->a[i].zName);
89568 pParse->checkSchema = 1;
89569 goto insert_cleanup;
89575 /* If there is no IDLIST term but the table has an integer primary
89576 ** key, the set the keyColumn variable to the primary key column index
89577 ** in the original table definition.
89579 if( pColumn==0 && nColumn>0 ){
89580 keyColumn = pTab->iPKey;
89583 /* Initialize the count of rows to be inserted
89585 if( db->flags & SQLITE_CountRows ){
89586 regRowCount = ++pParse->nMem;
89587 sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
89590 /* If this is not a view, open the table and and all indices */
89591 if( !isView ){
89592 int nIdx;
89594 baseCur = pParse->nTab;
89595 nIdx = sqlite3OpenTableAndIndices(pParse, pTab, baseCur, OP_OpenWrite);
89596 aRegIdx = sqlite3DbMallocRaw(db, sizeof(int)*(nIdx+1));
89597 if( aRegIdx==0 ){
89598 goto insert_cleanup;
89600 for(i=0; i<nIdx; i++){
89601 aRegIdx[i] = ++pParse->nMem;
89605 /* This is the top of the main insertion loop */
89606 if( useTempTable ){
89607 /* This block codes the top of loop only. The complete loop is the
89608 ** following pseudocode (template 4):
89610 ** rewind temp table
89611 ** C: loop over rows of intermediate table
89612 ** transfer values form intermediate table into <table>
89613 ** end loop
89614 ** D: ...
89616 addrInsTop = sqlite3VdbeAddOp1(v, OP_Rewind, srcTab);
89617 addrCont = sqlite3VdbeCurrentAddr(v);
89618 }else if( pSelect ){
89619 /* This block codes the top of loop only. The complete loop is the
89620 ** following pseudocode (template 3):
89622 ** C: yield X
89623 ** if EOF goto D
89624 ** insert the select result into <table> from R..R+n
89625 ** goto C
89626 ** D: ...
89628 addrCont = sqlite3VdbeAddOp1(v, OP_Yield, dest.iParm);
89629 addrInsTop = sqlite3VdbeAddOp1(v, OP_If, regEof);
89632 /* Allocate registers for holding the rowid of the new row,
89633 ** the content of the new row, and the assemblied row record.
89635 regRowid = regIns = pParse->nMem+1;
89636 pParse->nMem += pTab->nCol + 1;
89637 if( IsVirtual(pTab) ){
89638 regRowid++;
89639 pParse->nMem++;
89641 regData = regRowid+1;
89643 /* Run the BEFORE and INSTEAD OF triggers, if there are any
89645 endOfLoop = sqlite3VdbeMakeLabel(v);
89646 if( tmask & TRIGGER_BEFORE ){
89647 int regCols = sqlite3GetTempRange(pParse, pTab->nCol+1);
89649 /* build the NEW.* reference row. Note that if there is an INTEGER
89650 ** PRIMARY KEY into which a NULL is being inserted, that NULL will be
89651 ** translated into a unique ID for the row. But on a BEFORE trigger,
89652 ** we do not know what the unique ID will be (because the insert has
89653 ** not happened yet) so we substitute a rowid of -1
89655 if( keyColumn<0 ){
89656 sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
89657 }else{
89658 int j1;
89659 if( useTempTable ){
89660 sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regCols);
89661 }else{
89662 assert( pSelect==0 ); /* Otherwise useTempTable is true */
89663 sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regCols);
89665 j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regCols);
89666 sqlite3VdbeAddOp2(v, OP_Integer, -1, regCols);
89667 sqlite3VdbeJumpHere(v, j1);
89668 sqlite3VdbeAddOp1(v, OP_MustBeInt, regCols);
89671 /* Cannot have triggers on a virtual table. If it were possible,
89672 ** this block would have to account for hidden column.
89674 assert( !IsVirtual(pTab) );
89676 /* Create the new column data
89678 for(i=0; i<pTab->nCol; i++){
89679 if( pColumn==0 ){
89680 j = i;
89681 }else{
89682 for(j=0; j<pColumn->nId; j++){
89683 if( pColumn->a[j].idx==i ) break;
89686 if( (!useTempTable && !pList) || (pColumn && j>=pColumn->nId) ){
89687 sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regCols+i+1);
89688 }else if( useTempTable ){
89689 sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, regCols+i+1);
89690 }else{
89691 assert( pSelect==0 ); /* Otherwise useTempTable is true */
89692 sqlite3ExprCodeAndCache(pParse, pList->a[j].pExpr, regCols+i+1);
89696 /* If this is an INSERT on a view with an INSTEAD OF INSERT trigger,
89697 ** do not attempt any conversions before assembling the record.
89698 ** If this is a real table, attempt conversions as required by the
89699 ** table column affinities.
89701 if( !isView ){
89702 sqlite3VdbeAddOp2(v, OP_Affinity, regCols+1, pTab->nCol);
89703 sqlite3TableAffinityStr(v, pTab);
89706 /* Fire BEFORE or INSTEAD OF triggers */
89707 sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_BEFORE,
89708 pTab, regCols-pTab->nCol-1, onError, endOfLoop);
89710 sqlite3ReleaseTempRange(pParse, regCols, pTab->nCol+1);
89713 /* Push the record number for the new entry onto the stack. The
89714 ** record number is a randomly generate integer created by NewRowid
89715 ** except when the table has an INTEGER PRIMARY KEY column, in which
89716 ** case the record number is the same as that column.
89718 if( !isView ){
89719 if( IsVirtual(pTab) ){
89720 /* The row that the VUpdate opcode will delete: none */
89721 sqlite3VdbeAddOp2(v, OP_Null, 0, regIns);
89723 if( keyColumn>=0 ){
89724 if( useTempTable ){
89725 sqlite3VdbeAddOp3(v, OP_Column, srcTab, keyColumn, regRowid);
89726 }else if( pSelect ){
89727 sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+keyColumn, regRowid);
89728 }else{
89729 VdbeOp *pOp;
89730 sqlite3ExprCode(pParse, pList->a[keyColumn].pExpr, regRowid);
89731 pOp = sqlite3VdbeGetOp(v, -1);
89732 if( ALWAYS(pOp) && pOp->opcode==OP_Null && !IsVirtual(pTab) ){
89733 appendFlag = 1;
89734 pOp->opcode = OP_NewRowid;
89735 pOp->p1 = baseCur;
89736 pOp->p2 = regRowid;
89737 pOp->p3 = regAutoinc;
89740 /* If the PRIMARY KEY expression is NULL, then use OP_NewRowid
89741 ** to generate a unique primary key value.
89743 if( !appendFlag ){
89744 int j1;
89745 if( !IsVirtual(pTab) ){
89746 j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regRowid);
89747 sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
89748 sqlite3VdbeJumpHere(v, j1);
89749 }else{
89750 j1 = sqlite3VdbeCurrentAddr(v);
89751 sqlite3VdbeAddOp2(v, OP_IsNull, regRowid, j1+2);
89753 sqlite3VdbeAddOp1(v, OP_MustBeInt, regRowid);
89755 }else if( IsVirtual(pTab) ){
89756 sqlite3VdbeAddOp2(v, OP_Null, 0, regRowid);
89757 }else{
89758 sqlite3VdbeAddOp3(v, OP_NewRowid, baseCur, regRowid, regAutoinc);
89759 appendFlag = 1;
89761 autoIncStep(pParse, regAutoinc, regRowid);
89763 /* Push onto the stack, data for all columns of the new entry, beginning
89764 ** with the first column.
89766 nHidden = 0;
89767 for(i=0; i<pTab->nCol; i++){
89768 int iRegStore = regRowid+1+i;
89769 if( i==pTab->iPKey ){
89770 /* The value of the INTEGER PRIMARY KEY column is always a NULL.
89771 ** Whenever this column is read, the record number will be substituted
89772 ** in its place. So will fill this column with a NULL to avoid
89773 ** taking up data space with information that will never be used. */
89774 sqlite3VdbeAddOp2(v, OP_Null, 0, iRegStore);
89775 continue;
89777 if( pColumn==0 ){
89778 if( IsHiddenColumn(&pTab->aCol[i]) ){
89779 assert( IsVirtual(pTab) );
89780 j = -1;
89781 nHidden++;
89782 }else{
89783 j = i - nHidden;
89785 }else{
89786 for(j=0; j<pColumn->nId; j++){
89787 if( pColumn->a[j].idx==i ) break;
89790 if( j<0 || nColumn==0 || (pColumn && j>=pColumn->nId) ){
89791 sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, iRegStore);
89792 }else if( useTempTable ){
89793 sqlite3VdbeAddOp3(v, OP_Column, srcTab, j, iRegStore);
89794 }else if( pSelect ){
89795 sqlite3VdbeAddOp2(v, OP_SCopy, regFromSelect+j, iRegStore);
89796 }else{
89797 sqlite3ExprCode(pParse, pList->a[j].pExpr, iRegStore);
89801 /* Generate code to check constraints and generate index keys and
89802 ** do the insertion.
89804 #ifndef SQLITE_OMIT_VIRTUALTABLE
89805 if( IsVirtual(pTab) ){
89806 const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
89807 sqlite3VtabMakeWritable(pParse, pTab);
89808 sqlite3VdbeAddOp4(v, OP_VUpdate, 1, pTab->nCol+2, regIns, pVTab, P4_VTAB);
89809 sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError);
89810 sqlite3MayAbort(pParse);
89811 }else
89812 #endif
89814 int isReplace; /* Set to true if constraints may cause a replace */
89815 sqlite3GenerateConstraintChecks(pParse, pTab, baseCur, regIns, aRegIdx,
89816 keyColumn>=0, 0, onError, endOfLoop, &isReplace
89818 sqlite3FkCheck(pParse, pTab, 0, regIns);
89819 sqlite3CompleteInsertion(
89820 pParse, pTab, baseCur, regIns, aRegIdx, 0, appendFlag, isReplace==0
89825 /* Update the count of rows that are inserted
89827 if( (db->flags & SQLITE_CountRows)!=0 ){
89828 sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
89831 if( pTrigger ){
89832 /* Code AFTER triggers */
89833 sqlite3CodeRowTrigger(pParse, pTrigger, TK_INSERT, 0, TRIGGER_AFTER,
89834 pTab, regData-2-pTab->nCol, onError, endOfLoop);
89837 /* The bottom of the main insertion loop, if the data source
89838 ** is a SELECT statement.
89840 sqlite3VdbeResolveLabel(v, endOfLoop);
89841 if( useTempTable ){
89842 sqlite3VdbeAddOp2(v, OP_Next, srcTab, addrCont);
89843 sqlite3VdbeJumpHere(v, addrInsTop);
89844 sqlite3VdbeAddOp1(v, OP_Close, srcTab);
89845 }else if( pSelect ){
89846 sqlite3VdbeAddOp2(v, OP_Goto, 0, addrCont);
89847 sqlite3VdbeJumpHere(v, addrInsTop);
89850 if( !IsVirtual(pTab) && !isView ){
89851 /* Close all tables opened */
89852 sqlite3VdbeAddOp1(v, OP_Close, baseCur);
89853 for(idx=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, idx++){
89854 sqlite3VdbeAddOp1(v, OP_Close, idx+baseCur);
89858 insert_end:
89859 /* Update the sqlite_sequence table by storing the content of the
89860 ** maximum rowid counter values recorded while inserting into
89861 ** autoincrement tables.
89863 if( pParse->nested==0 && pParse->pTriggerTab==0 ){
89864 sqlite3AutoincrementEnd(pParse);
89868 ** Return the number of rows inserted. If this routine is
89869 ** generating code because of a call to sqlite3NestedParse(), do not
89870 ** invoke the callback function.
89872 if( (db->flags&SQLITE_CountRows) && !pParse->nested && !pParse->pTriggerTab ){
89873 sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
89874 sqlite3VdbeSetNumCols(v, 1);
89875 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows inserted", SQLITE_STATIC);
89878 insert_cleanup:
89879 sqlite3SrcListDelete(db, pTabList);
89880 sqlite3ExprListDelete(db, pList);
89881 sqlite3SelectDelete(db, pSelect);
89882 sqlite3IdListDelete(db, pColumn);
89883 sqlite3DbFree(db, aRegIdx);
89886 /* Make sure "isView" and other macros defined above are undefined. Otherwise
89887 ** thely may interfere with compilation of other functions in this file
89888 ** (or in another file, if this file becomes part of the amalgamation). */
89889 #ifdef isView
89890 #undef isView
89891 #endif
89892 #ifdef pTrigger
89893 #undef pTrigger
89894 #endif
89895 #ifdef tmask
89896 #undef tmask
89897 #endif
89901 ** Generate code to do constraint checks prior to an INSERT or an UPDATE.
89903 ** The input is a range of consecutive registers as follows:
89905 ** 1. The rowid of the row after the update.
89907 ** 2. The data in the first column of the entry after the update.
89909 ** i. Data from middle columns...
89911 ** N. The data in the last column of the entry after the update.
89913 ** The regRowid parameter is the index of the register containing (1).
89915 ** If isUpdate is true and rowidChng is non-zero, then rowidChng contains
89916 ** the address of a register containing the rowid before the update takes
89917 ** place. isUpdate is true for UPDATEs and false for INSERTs. If isUpdate
89918 ** is false, indicating an INSERT statement, then a non-zero rowidChng
89919 ** indicates that the rowid was explicitly specified as part of the
89920 ** INSERT statement. If rowidChng is false, it means that the rowid is
89921 ** computed automatically in an insert or that the rowid value is not
89922 ** modified by an update.
89924 ** The code generated by this routine store new index entries into
89925 ** registers identified by aRegIdx[]. No index entry is created for
89926 ** indices where aRegIdx[i]==0. The order of indices in aRegIdx[] is
89927 ** the same as the order of indices on the linked list of indices
89928 ** attached to the table.
89930 ** This routine also generates code to check constraints. NOT NULL,
89931 ** CHECK, and UNIQUE constraints are all checked. If a constraint fails,
89932 ** then the appropriate action is performed. There are five possible
89933 ** actions: ROLLBACK, ABORT, FAIL, REPLACE, and IGNORE.
89935 ** Constraint type Action What Happens
89936 ** --------------- ---------- ----------------------------------------
89937 ** any ROLLBACK The current transaction is rolled back and
89938 ** sqlite3_exec() returns immediately with a
89939 ** return code of SQLITE_CONSTRAINT.
89941 ** any ABORT Back out changes from the current command
89942 ** only (do not do a complete rollback) then
89943 ** cause sqlite3_exec() to return immediately
89944 ** with SQLITE_CONSTRAINT.
89946 ** any FAIL Sqlite3_exec() returns immediately with a
89947 ** return code of SQLITE_CONSTRAINT. The
89948 ** transaction is not rolled back and any
89949 ** prior changes are retained.
89951 ** any IGNORE The record number and data is popped from
89952 ** the stack and there is an immediate jump
89953 ** to label ignoreDest.
89955 ** NOT NULL REPLACE The NULL value is replace by the default
89956 ** value for that column. If the default value
89957 ** is NULL, the action is the same as ABORT.
89959 ** UNIQUE REPLACE The other row that conflicts with the row
89960 ** being inserted is removed.
89962 ** CHECK REPLACE Illegal. The results in an exception.
89964 ** Which action to take is determined by the overrideError parameter.
89965 ** Or if overrideError==OE_Default, then the pParse->onError parameter
89966 ** is used. Or if pParse->onError==OE_Default then the onError value
89967 ** for the constraint is used.
89969 ** The calling routine must open a read/write cursor for pTab with
89970 ** cursor number "baseCur". All indices of pTab must also have open
89971 ** read/write cursors with cursor number baseCur+i for the i-th cursor.
89972 ** Except, if there is no possibility of a REPLACE action then
89973 ** cursors do not need to be open for indices where aRegIdx[i]==0.
89975 SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
89976 Parse *pParse, /* The parser context */
89977 Table *pTab, /* the table into which we are inserting */
89978 int baseCur, /* Index of a read/write cursor pointing at pTab */
89979 int regRowid, /* Index of the range of input registers */
89980 int *aRegIdx, /* Register used by each index. 0 for unused indices */
89981 int rowidChng, /* True if the rowid might collide with existing entry */
89982 int isUpdate, /* True for UPDATE, False for INSERT */
89983 int overrideError, /* Override onError to this if not OE_Default */
89984 int ignoreDest, /* Jump to this label on an OE_Ignore resolution */
89985 int *pbMayReplace /* OUT: Set to true if constraint may cause a replace */
89987 int i; /* loop counter */
89988 Vdbe *v; /* VDBE under constrution */
89989 int nCol; /* Number of columns */
89990 int onError; /* Conflict resolution strategy */
89991 int j1; /* Addresss of jump instruction */
89992 int j2 = 0, j3; /* Addresses of jump instructions */
89993 int regData; /* Register containing first data column */
89994 int iCur; /* Table cursor number */
89995 Index *pIdx; /* Pointer to one of the indices */
89996 int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */
89997 int regOldRowid = (rowidChng && isUpdate) ? rowidChng : regRowid;
89999 v = sqlite3GetVdbe(pParse);
90000 assert( v!=0 );
90001 assert( pTab->pSelect==0 ); /* This table is not a VIEW */
90002 nCol = pTab->nCol;
90003 regData = regRowid + 1;
90005 /* Test all NOT NULL constraints.
90007 for(i=0; i<nCol; i++){
90008 if( i==pTab->iPKey ){
90009 continue;
90011 onError = pTab->aCol[i].notNull;
90012 if( onError==OE_None ) continue;
90013 if( overrideError!=OE_Default ){
90014 onError = overrideError;
90015 }else if( onError==OE_Default ){
90016 onError = OE_Abort;
90018 if( onError==OE_Replace && pTab->aCol[i].pDflt==0 ){
90019 onError = OE_Abort;
90021 assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
90022 || onError==OE_Ignore || onError==OE_Replace );
90023 switch( onError ){
90024 case OE_Abort:
90025 sqlite3MayAbort(pParse);
90026 case OE_Rollback:
90027 case OE_Fail: {
90028 char *zMsg;
90029 sqlite3VdbeAddOp3(v, OP_HaltIfNull,
90030 SQLITE_CONSTRAINT, onError, regData+i);
90031 zMsg = sqlite3MPrintf(pParse->db, "%s.%s may not be NULL",
90032 pTab->zName, pTab->aCol[i].zName);
90033 sqlite3VdbeChangeP4(v, -1, zMsg, P4_DYNAMIC);
90034 break;
90036 case OE_Ignore: {
90037 sqlite3VdbeAddOp2(v, OP_IsNull, regData+i, ignoreDest);
90038 break;
90040 default: {
90041 assert( onError==OE_Replace );
90042 j1 = sqlite3VdbeAddOp1(v, OP_NotNull, regData+i);
90043 sqlite3ExprCode(pParse, pTab->aCol[i].pDflt, regData+i);
90044 sqlite3VdbeJumpHere(v, j1);
90045 break;
90050 /* Test all CHECK constraints
90052 #ifndef SQLITE_OMIT_CHECK
90053 if( pTab->pCheck && (pParse->db->flags & SQLITE_IgnoreChecks)==0 ){
90054 int allOk = sqlite3VdbeMakeLabel(v);
90055 pParse->ckBase = regData;
90056 sqlite3ExprIfTrue(pParse, pTab->pCheck, allOk, SQLITE_JUMPIFNULL);
90057 onError = overrideError!=OE_Default ? overrideError : OE_Abort;
90058 if( onError==OE_Ignore ){
90059 sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
90060 }else{
90061 if( onError==OE_Replace ) onError = OE_Abort; /* IMP: R-15569-63625 */
90062 sqlite3HaltConstraint(pParse, onError, 0, 0);
90064 sqlite3VdbeResolveLabel(v, allOk);
90066 #endif /* !defined(SQLITE_OMIT_CHECK) */
90068 /* If we have an INTEGER PRIMARY KEY, make sure the primary key
90069 ** of the new record does not previously exist. Except, if this
90070 ** is an UPDATE and the primary key is not changing, that is OK.
90072 if( rowidChng ){
90073 onError = pTab->keyConf;
90074 if( overrideError!=OE_Default ){
90075 onError = overrideError;
90076 }else if( onError==OE_Default ){
90077 onError = OE_Abort;
90080 if( isUpdate ){
90081 j2 = sqlite3VdbeAddOp3(v, OP_Eq, regRowid, 0, rowidChng);
90083 j3 = sqlite3VdbeAddOp3(v, OP_NotExists, baseCur, 0, regRowid);
90084 switch( onError ){
90085 default: {
90086 onError = OE_Abort;
90087 /* Fall thru into the next case */
90089 case OE_Rollback:
90090 case OE_Abort:
90091 case OE_Fail: {
90092 sqlite3HaltConstraint(
90093 pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
90094 break;
90096 case OE_Replace: {
90097 /* If there are DELETE triggers on this table and the
90098 ** recursive-triggers flag is set, call GenerateRowDelete() to
90099 ** remove the conflicting row from the the table. This will fire
90100 ** the triggers and remove both the table and index b-tree entries.
90102 ** Otherwise, if there are no triggers or the recursive-triggers
90103 ** flag is not set, but the table has one or more indexes, call
90104 ** GenerateRowIndexDelete(). This removes the index b-tree entries
90105 ** only. The table b-tree entry will be replaced by the new entry
90106 ** when it is inserted.
90108 ** If either GenerateRowDelete() or GenerateRowIndexDelete() is called,
90109 ** also invoke MultiWrite() to indicate that this VDBE may require
90110 ** statement rollback (if the statement is aborted after the delete
90111 ** takes place). Earlier versions called sqlite3MultiWrite() regardless,
90112 ** but being more selective here allows statements like:
90114 ** REPLACE INTO t(rowid) VALUES($newrowid)
90116 ** to run without a statement journal if there are no indexes on the
90117 ** table.
90119 Trigger *pTrigger = 0;
90120 if( pParse->db->flags&SQLITE_RecTriggers ){
90121 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
90123 if( pTrigger || sqlite3FkRequired(pParse, pTab, 0, 0) ){
90124 sqlite3MultiWrite(pParse);
90125 sqlite3GenerateRowDelete(
90126 pParse, pTab, baseCur, regRowid, 0, pTrigger, OE_Replace
90128 }else if( pTab->pIndex ){
90129 sqlite3MultiWrite(pParse);
90130 sqlite3GenerateRowIndexDelete(pParse, pTab, baseCur, 0);
90132 seenReplace = 1;
90133 break;
90135 case OE_Ignore: {
90136 assert( seenReplace==0 );
90137 sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
90138 break;
90141 sqlite3VdbeJumpHere(v, j3);
90142 if( isUpdate ){
90143 sqlite3VdbeJumpHere(v, j2);
90147 /* Test all UNIQUE constraints by creating entries for each UNIQUE
90148 ** index and making sure that duplicate entries do not already exist.
90149 ** Add the new records to the indices as we go.
90151 for(iCur=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, iCur++){
90152 int regIdx;
90153 int regR;
90155 if( aRegIdx[iCur]==0 ) continue; /* Skip unused indices */
90157 /* Create a key for accessing the index entry */
90158 regIdx = sqlite3GetTempRange(pParse, pIdx->nColumn+1);
90159 for(i=0; i<pIdx->nColumn; i++){
90160 int idx = pIdx->aiColumn[i];
90161 if( idx==pTab->iPKey ){
90162 sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
90163 }else{
90164 sqlite3VdbeAddOp2(v, OP_SCopy, regData+idx, regIdx+i);
90167 sqlite3VdbeAddOp2(v, OP_SCopy, regRowid, regIdx+i);
90168 sqlite3VdbeAddOp3(v, OP_MakeRecord, regIdx, pIdx->nColumn+1, aRegIdx[iCur]);
90169 sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT);
90170 sqlite3ExprCacheAffinityChange(pParse, regIdx, pIdx->nColumn+1);
90172 /* Find out what action to take in case there is an indexing conflict */
90173 onError = pIdx->onError;
90174 if( onError==OE_None ){
90175 sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
90176 continue; /* pIdx is not a UNIQUE index */
90178 if( overrideError!=OE_Default ){
90179 onError = overrideError;
90180 }else if( onError==OE_Default ){
90181 onError = OE_Abort;
90183 if( seenReplace ){
90184 if( onError==OE_Ignore ) onError = OE_Replace;
90185 else if( onError==OE_Fail ) onError = OE_Abort;
90188 /* Check to see if the new index entry will be unique */
90189 regR = sqlite3GetTempReg(pParse);
90190 sqlite3VdbeAddOp2(v, OP_SCopy, regOldRowid, regR);
90191 j3 = sqlite3VdbeAddOp4(v, OP_IsUnique, baseCur+iCur+1, 0,
90192 regR, SQLITE_INT_TO_PTR(regIdx),
90193 P4_INT32);
90194 sqlite3ReleaseTempRange(pParse, regIdx, pIdx->nColumn+1);
90196 /* Generate code that executes if the new index entry is not unique */
90197 assert( onError==OE_Rollback || onError==OE_Abort || onError==OE_Fail
90198 || onError==OE_Ignore || onError==OE_Replace );
90199 switch( onError ){
90200 case OE_Rollback:
90201 case OE_Abort:
90202 case OE_Fail: {
90203 int j;
90204 StrAccum errMsg;
90205 const char *zSep;
90206 char *zErr;
90208 sqlite3StrAccumInit(&errMsg, 0, 0, 200);
90209 errMsg.db = pParse->db;
90210 zSep = pIdx->nColumn>1 ? "columns " : "column ";
90211 for(j=0; j<pIdx->nColumn; j++){
90212 char *zCol = pTab->aCol[pIdx->aiColumn[j]].zName;
90213 sqlite3StrAccumAppend(&errMsg, zSep, -1);
90214 zSep = ", ";
90215 sqlite3StrAccumAppend(&errMsg, zCol, -1);
90217 sqlite3StrAccumAppend(&errMsg,
90218 pIdx->nColumn>1 ? " are not unique" : " is not unique", -1);
90219 zErr = sqlite3StrAccumFinish(&errMsg);
90220 sqlite3HaltConstraint(pParse, onError, zErr, 0);
90221 sqlite3DbFree(errMsg.db, zErr);
90222 break;
90224 case OE_Ignore: {
90225 assert( seenReplace==0 );
90226 sqlite3VdbeAddOp2(v, OP_Goto, 0, ignoreDest);
90227 break;
90229 default: {
90230 Trigger *pTrigger = 0;
90231 assert( onError==OE_Replace );
90232 sqlite3MultiWrite(pParse);
90233 if( pParse->db->flags&SQLITE_RecTriggers ){
90234 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_DELETE, 0, 0);
90236 sqlite3GenerateRowDelete(
90237 pParse, pTab, baseCur, regR, 0, pTrigger, OE_Replace
90239 seenReplace = 1;
90240 break;
90243 sqlite3VdbeJumpHere(v, j3);
90244 sqlite3ReleaseTempReg(pParse, regR);
90247 if( pbMayReplace ){
90248 *pbMayReplace = seenReplace;
90253 ** This routine generates code to finish the INSERT or UPDATE operation
90254 ** that was started by a prior call to sqlite3GenerateConstraintChecks.
90255 ** A consecutive range of registers starting at regRowid contains the
90256 ** rowid and the content to be inserted.
90258 ** The arguments to this routine should be the same as the first six
90259 ** arguments to sqlite3GenerateConstraintChecks.
90261 SQLITE_PRIVATE void sqlite3CompleteInsertion(
90262 Parse *pParse, /* The parser context */
90263 Table *pTab, /* the table into which we are inserting */
90264 int baseCur, /* Index of a read/write cursor pointing at pTab */
90265 int regRowid, /* Range of content */
90266 int *aRegIdx, /* Register used by each index. 0 for unused indices */
90267 int isUpdate, /* True for UPDATE, False for INSERT */
90268 int appendBias, /* True if this is likely to be an append */
90269 int useSeekResult /* True to set the USESEEKRESULT flag on OP_[Idx]Insert */
90271 int i;
90272 Vdbe *v;
90273 int nIdx;
90274 Index *pIdx;
90275 u8 pik_flags;
90276 int regData;
90277 int regRec;
90279 v = sqlite3GetVdbe(pParse);
90280 assert( v!=0 );
90281 assert( pTab->pSelect==0 ); /* This table is not a VIEW */
90282 for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
90283 for(i=nIdx-1; i>=0; i--){
90284 if( aRegIdx[i]==0 ) continue;
90285 sqlite3VdbeAddOp2(v, OP_IdxInsert, baseCur+i+1, aRegIdx[i]);
90286 if( useSeekResult ){
90287 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
90290 regData = regRowid + 1;
90291 regRec = sqlite3GetTempReg(pParse);
90292 sqlite3VdbeAddOp3(v, OP_MakeRecord, regData, pTab->nCol, regRec);
90293 sqlite3TableAffinityStr(v, pTab);
90294 sqlite3ExprCacheAffinityChange(pParse, regData, pTab->nCol);
90295 if( pParse->nested ){
90296 pik_flags = 0;
90297 }else{
90298 pik_flags = OPFLAG_NCHANGE;
90299 pik_flags |= (isUpdate?OPFLAG_ISUPDATE:OPFLAG_LASTROWID);
90301 if( appendBias ){
90302 pik_flags |= OPFLAG_APPEND;
90304 if( useSeekResult ){
90305 pik_flags |= OPFLAG_USESEEKRESULT;
90307 sqlite3VdbeAddOp3(v, OP_Insert, baseCur, regRec, regRowid);
90308 if( !pParse->nested ){
90309 sqlite3VdbeChangeP4(v, -1, pTab->zName, P4_TRANSIENT);
90311 sqlite3VdbeChangeP5(v, pik_flags);
90315 ** Generate code that will open cursors for a table and for all
90316 ** indices of that table. The "baseCur" parameter is the cursor number used
90317 ** for the table. Indices are opened on subsequent cursors.
90319 ** Return the number of indices on the table.
90321 SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
90322 Parse *pParse, /* Parsing context */
90323 Table *pTab, /* Table to be opened */
90324 int baseCur, /* Cursor number assigned to the table */
90325 int op /* OP_OpenRead or OP_OpenWrite */
90327 int i;
90328 int iDb;
90329 Index *pIdx;
90330 Vdbe *v;
90332 if( IsVirtual(pTab) ) return 0;
90333 iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
90334 v = sqlite3GetVdbe(pParse);
90335 assert( v!=0 );
90336 sqlite3OpenTable(pParse, baseCur, iDb, pTab, op);
90337 for(i=1, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
90338 KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
90339 assert( pIdx->pSchema==pTab->pSchema );
90340 sqlite3VdbeAddOp4(v, op, i+baseCur, pIdx->tnum, iDb,
90341 (char*)pKey, P4_KEYINFO_HANDOFF);
90342 VdbeComment((v, "%s", pIdx->zName));
90344 if( pParse->nTab<baseCur+i ){
90345 pParse->nTab = baseCur+i;
90347 return i-1;
90351 #ifdef SQLITE_TEST
90353 ** The following global variable is incremented whenever the
90354 ** transfer optimization is used. This is used for testing
90355 ** purposes only - to make sure the transfer optimization really
90356 ** is happening when it is suppose to.
90358 SQLITE_API int sqlite3_xferopt_count;
90359 #endif /* SQLITE_TEST */
90362 #ifndef SQLITE_OMIT_XFER_OPT
90364 ** Check to collation names to see if they are compatible.
90366 static int xferCompatibleCollation(const char *z1, const char *z2){
90367 if( z1==0 ){
90368 return z2==0;
90370 if( z2==0 ){
90371 return 0;
90373 return sqlite3StrICmp(z1, z2)==0;
90378 ** Check to see if index pSrc is compatible as a source of data
90379 ** for index pDest in an insert transfer optimization. The rules
90380 ** for a compatible index:
90382 ** * The index is over the same set of columns
90383 ** * The same DESC and ASC markings occurs on all columns
90384 ** * The same onError processing (OE_Abort, OE_Ignore, etc)
90385 ** * The same collating sequence on each column
90387 static int xferCompatibleIndex(Index *pDest, Index *pSrc){
90388 int i;
90389 assert( pDest && pSrc );
90390 assert( pDest->pTable!=pSrc->pTable );
90391 if( pDest->nColumn!=pSrc->nColumn ){
90392 return 0; /* Different number of columns */
90394 if( pDest->onError!=pSrc->onError ){
90395 return 0; /* Different conflict resolution strategies */
90397 for(i=0; i<pSrc->nColumn; i++){
90398 if( pSrc->aiColumn[i]!=pDest->aiColumn[i] ){
90399 return 0; /* Different columns indexed */
90401 if( pSrc->aSortOrder[i]!=pDest->aSortOrder[i] ){
90402 return 0; /* Different sort orders */
90404 if( !xferCompatibleCollation(pSrc->azColl[i],pDest->azColl[i]) ){
90405 return 0; /* Different collating sequences */
90409 /* If no test above fails then the indices must be compatible */
90410 return 1;
90414 ** Attempt the transfer optimization on INSERTs of the form
90416 ** INSERT INTO tab1 SELECT * FROM tab2;
90418 ** The xfer optimization transfers raw records from tab2 over to tab1.
90419 ** Columns are not decoded and reassemblied, which greatly improves
90420 ** performance. Raw index records are transferred in the same way.
90422 ** The xfer optimization is only attempted if tab1 and tab2 are compatible.
90423 ** There are lots of rules for determining compatibility - see comments
90424 ** embedded in the code for details.
90426 ** This routine returns TRUE if the optimization is guaranteed to be used.
90427 ** Sometimes the xfer optimization will only work if the destination table
90428 ** is empty - a factor that can only be determined at run-time. In that
90429 ** case, this routine generates code for the xfer optimization but also
90430 ** does a test to see if the destination table is empty and jumps over the
90431 ** xfer optimization code if the test fails. In that case, this routine
90432 ** returns FALSE so that the caller will know to go ahead and generate
90433 ** an unoptimized transfer. This routine also returns FALSE if there
90434 ** is no chance that the xfer optimization can be applied.
90436 ** This optimization is particularly useful at making VACUUM run faster.
90438 static int xferOptimization(
90439 Parse *pParse, /* Parser context */
90440 Table *pDest, /* The table we are inserting into */
90441 Select *pSelect, /* A SELECT statement to use as the data source */
90442 int onError, /* How to handle constraint errors */
90443 int iDbDest /* The database of pDest */
90445 ExprList *pEList; /* The result set of the SELECT */
90446 Table *pSrc; /* The table in the FROM clause of SELECT */
90447 Index *pSrcIdx, *pDestIdx; /* Source and destination indices */
90448 struct SrcList_item *pItem; /* An element of pSelect->pSrc */
90449 int i; /* Loop counter */
90450 int iDbSrc; /* The database of pSrc */
90451 int iSrc, iDest; /* Cursors from source and destination */
90452 int addr1, addr2; /* Loop addresses */
90453 int emptyDestTest; /* Address of test for empty pDest */
90454 int emptySrcTest; /* Address of test for empty pSrc */
90455 Vdbe *v; /* The VDBE we are building */
90456 KeyInfo *pKey; /* Key information for an index */
90457 int regAutoinc; /* Memory register used by AUTOINC */
90458 int destHasUniqueIdx = 0; /* True if pDest has a UNIQUE index */
90459 int regData, regRowid; /* Registers holding data and rowid */
90461 if( pSelect==0 ){
90462 return 0; /* Must be of the form INSERT INTO ... SELECT ... */
90464 if( sqlite3TriggerList(pParse, pDest) ){
90465 return 0; /* tab1 must not have triggers */
90467 #ifndef SQLITE_OMIT_VIRTUALTABLE
90468 if( pDest->tabFlags & TF_Virtual ){
90469 return 0; /* tab1 must not be a virtual table */
90471 #endif
90472 if( onError==OE_Default ){
90473 if( pDest->iPKey>=0 ) onError = pDest->keyConf;
90474 if( onError==OE_Default ) onError = OE_Abort;
90476 assert(pSelect->pSrc); /* allocated even if there is no FROM clause */
90477 if( pSelect->pSrc->nSrc!=1 ){
90478 return 0; /* FROM clause must have exactly one term */
90480 if( pSelect->pSrc->a[0].pSelect ){
90481 return 0; /* FROM clause cannot contain a subquery */
90483 if( pSelect->pWhere ){
90484 return 0; /* SELECT may not have a WHERE clause */
90486 if( pSelect->pOrderBy ){
90487 return 0; /* SELECT may not have an ORDER BY clause */
90489 /* Do not need to test for a HAVING clause. If HAVING is present but
90490 ** there is no ORDER BY, we will get an error. */
90491 if( pSelect->pGroupBy ){
90492 return 0; /* SELECT may not have a GROUP BY clause */
90494 if( pSelect->pLimit ){
90495 return 0; /* SELECT may not have a LIMIT clause */
90497 assert( pSelect->pOffset==0 ); /* Must be so if pLimit==0 */
90498 if( pSelect->pPrior ){
90499 return 0; /* SELECT may not be a compound query */
90501 if( pSelect->selFlags & SF_Distinct ){
90502 return 0; /* SELECT may not be DISTINCT */
90504 pEList = pSelect->pEList;
90505 assert( pEList!=0 );
90506 if( pEList->nExpr!=1 ){
90507 return 0; /* The result set must have exactly one column */
90509 assert( pEList->a[0].pExpr );
90510 if( pEList->a[0].pExpr->op!=TK_ALL ){
90511 return 0; /* The result set must be the special operator "*" */
90514 /* At this point we have established that the statement is of the
90515 ** correct syntactic form to participate in this optimization. Now
90516 ** we have to check the semantics.
90518 pItem = pSelect->pSrc->a;
90519 pSrc = sqlite3LocateTable(pParse, 0, pItem->zName, pItem->zDatabase);
90520 if( pSrc==0 ){
90521 return 0; /* FROM clause does not contain a real table */
90523 if( pSrc==pDest ){
90524 return 0; /* tab1 and tab2 may not be the same table */
90526 #ifndef SQLITE_OMIT_VIRTUALTABLE
90527 if( pSrc->tabFlags & TF_Virtual ){
90528 return 0; /* tab2 must not be a virtual table */
90530 #endif
90531 if( pSrc->pSelect ){
90532 return 0; /* tab2 may not be a view */
90534 if( pDest->nCol!=pSrc->nCol ){
90535 return 0; /* Number of columns must be the same in tab1 and tab2 */
90537 if( pDest->iPKey!=pSrc->iPKey ){
90538 return 0; /* Both tables must have the same INTEGER PRIMARY KEY */
90540 for(i=0; i<pDest->nCol; i++){
90541 if( pDest->aCol[i].affinity!=pSrc->aCol[i].affinity ){
90542 return 0; /* Affinity must be the same on all columns */
90544 if( !xferCompatibleCollation(pDest->aCol[i].zColl, pSrc->aCol[i].zColl) ){
90545 return 0; /* Collating sequence must be the same on all columns */
90547 if( pDest->aCol[i].notNull && !pSrc->aCol[i].notNull ){
90548 return 0; /* tab2 must be NOT NULL if tab1 is */
90551 for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
90552 if( pDestIdx->onError!=OE_None ){
90553 destHasUniqueIdx = 1;
90555 for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){
90556 if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
90558 if( pSrcIdx==0 ){
90559 return 0; /* pDestIdx has no corresponding index in pSrc */
90562 #ifndef SQLITE_OMIT_CHECK
90563 if( pDest->pCheck && sqlite3ExprCompare(pSrc->pCheck, pDest->pCheck) ){
90564 return 0; /* Tables have different CHECK constraints. Ticket #2252 */
90566 #endif
90567 #ifndef SQLITE_OMIT_FOREIGN_KEY
90568 /* Disallow the transfer optimization if the destination table constains
90569 ** any foreign key constraints. This is more restrictive than necessary.
90570 ** But the main beneficiary of the transfer optimization is the VACUUM
90571 ** command, and the VACUUM command disables foreign key constraints. So
90572 ** the extra complication to make this rule less restrictive is probably
90573 ** not worth the effort. Ticket [6284df89debdfa61db8073e062908af0c9b6118e]
90575 if( (pParse->db->flags & SQLITE_ForeignKeys)!=0 && pDest->pFKey!=0 ){
90576 return 0;
90578 #endif
90579 if( (pParse->db->flags & SQLITE_CountRows)!=0 ){
90580 return 0; /* xfer opt does not play well with PRAGMA count_changes */
90583 /* If we get this far, it means that the xfer optimization is at
90584 ** least a possibility, though it might only work if the destination
90585 ** table (tab1) is initially empty.
90587 #ifdef SQLITE_TEST
90588 sqlite3_xferopt_count++;
90589 #endif
90590 iDbSrc = sqlite3SchemaToIndex(pParse->db, pSrc->pSchema);
90591 v = sqlite3GetVdbe(pParse);
90592 sqlite3CodeVerifySchema(pParse, iDbSrc);
90593 iSrc = pParse->nTab++;
90594 iDest = pParse->nTab++;
90595 regAutoinc = autoIncBegin(pParse, iDbDest, pDest);
90596 sqlite3OpenTable(pParse, iDest, iDbDest, pDest, OP_OpenWrite);
90597 if( (pDest->iPKey<0 && pDest->pIndex!=0) /* (1) */
90598 || destHasUniqueIdx /* (2) */
90599 || (onError!=OE_Abort && onError!=OE_Rollback) /* (3) */
90601 /* In some circumstances, we are able to run the xfer optimization
90602 ** only if the destination table is initially empty. This code makes
90603 ** that determination. Conditions under which the destination must
90604 ** be empty:
90606 ** (1) There is no INTEGER PRIMARY KEY but there are indices.
90607 ** (If the destination is not initially empty, the rowid fields
90608 ** of index entries might need to change.)
90610 ** (2) The destination has a unique index. (The xfer optimization
90611 ** is unable to test uniqueness.)
90613 ** (3) onError is something other than OE_Abort and OE_Rollback.
90615 addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iDest, 0);
90616 emptyDestTest = sqlite3VdbeAddOp2(v, OP_Goto, 0, 0);
90617 sqlite3VdbeJumpHere(v, addr1);
90618 }else{
90619 emptyDestTest = 0;
90621 sqlite3OpenTable(pParse, iSrc, iDbSrc, pSrc, OP_OpenRead);
90622 emptySrcTest = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
90623 regData = sqlite3GetTempReg(pParse);
90624 regRowid = sqlite3GetTempReg(pParse);
90625 if( pDest->iPKey>=0 ){
90626 addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
90627 addr2 = sqlite3VdbeAddOp3(v, OP_NotExists, iDest, 0, regRowid);
90628 sqlite3HaltConstraint(
90629 pParse, onError, "PRIMARY KEY must be unique", P4_STATIC);
90630 sqlite3VdbeJumpHere(v, addr2);
90631 autoIncStep(pParse, regAutoinc, regRowid);
90632 }else if( pDest->pIndex==0 ){
90633 addr1 = sqlite3VdbeAddOp2(v, OP_NewRowid, iDest, regRowid);
90634 }else{
90635 addr1 = sqlite3VdbeAddOp2(v, OP_Rowid, iSrc, regRowid);
90636 assert( (pDest->tabFlags & TF_Autoincrement)==0 );
90638 sqlite3VdbeAddOp2(v, OP_RowData, iSrc, regData);
90639 sqlite3VdbeAddOp3(v, OP_Insert, iDest, regData, regRowid);
90640 sqlite3VdbeChangeP5(v, OPFLAG_NCHANGE|OPFLAG_LASTROWID|OPFLAG_APPEND);
90641 sqlite3VdbeChangeP4(v, -1, pDest->zName, 0);
90642 sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1);
90643 for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
90644 for(pSrcIdx=pSrc->pIndex; ALWAYS(pSrcIdx); pSrcIdx=pSrcIdx->pNext){
90645 if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
90647 assert( pSrcIdx );
90648 sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
90649 sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
90650 pKey = sqlite3IndexKeyinfo(pParse, pSrcIdx);
90651 sqlite3VdbeAddOp4(v, OP_OpenRead, iSrc, pSrcIdx->tnum, iDbSrc,
90652 (char*)pKey, P4_KEYINFO_HANDOFF);
90653 VdbeComment((v, "%s", pSrcIdx->zName));
90654 pKey = sqlite3IndexKeyinfo(pParse, pDestIdx);
90655 sqlite3VdbeAddOp4(v, OP_OpenWrite, iDest, pDestIdx->tnum, iDbDest,
90656 (char*)pKey, P4_KEYINFO_HANDOFF);
90657 VdbeComment((v, "%s", pDestIdx->zName));
90658 addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iSrc, 0);
90659 sqlite3VdbeAddOp2(v, OP_RowKey, iSrc, regData);
90660 sqlite3VdbeAddOp3(v, OP_IdxInsert, iDest, regData, 1);
90661 sqlite3VdbeAddOp2(v, OP_Next, iSrc, addr1+1);
90662 sqlite3VdbeJumpHere(v, addr1);
90664 sqlite3VdbeJumpHere(v, emptySrcTest);
90665 sqlite3ReleaseTempReg(pParse, regRowid);
90666 sqlite3ReleaseTempReg(pParse, regData);
90667 sqlite3VdbeAddOp2(v, OP_Close, iSrc, 0);
90668 sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
90669 if( emptyDestTest ){
90670 sqlite3VdbeAddOp2(v, OP_Halt, SQLITE_OK, 0);
90671 sqlite3VdbeJumpHere(v, emptyDestTest);
90672 sqlite3VdbeAddOp2(v, OP_Close, iDest, 0);
90673 return 0;
90674 }else{
90675 return 1;
90678 #endif /* SQLITE_OMIT_XFER_OPT */
90680 /************** End of insert.c **********************************************/
90681 /************** Begin file legacy.c ******************************************/
90683 ** 2001 September 15
90685 ** The author disclaims copyright to this source code. In place of
90686 ** a legal notice, here is a blessing:
90688 ** May you do good and not evil.
90689 ** May you find forgiveness for yourself and forgive others.
90690 ** May you share freely, never taking more than you give.
90692 *************************************************************************
90693 ** Main file for the SQLite library. The routines in this file
90694 ** implement the programmer interface to the library. Routines in
90695 ** other files are for internal use by SQLite and should not be
90696 ** accessed by users of the library.
90701 ** Execute SQL code. Return one of the SQLITE_ success/failure
90702 ** codes. Also write an error message into memory obtained from
90703 ** malloc() and make *pzErrMsg point to that message.
90705 ** If the SQL is a query, then for each row in the query result
90706 ** the xCallback() function is called. pArg becomes the first
90707 ** argument to xCallback(). If xCallback=NULL then no callback
90708 ** is invoked, even for queries.
90710 SQLITE_API int sqlite3_exec(
90711 sqlite3 *db, /* The database on which the SQL executes */
90712 const char *zSql, /* The SQL to be executed */
90713 sqlite3_callback xCallback, /* Invoke this callback routine */
90714 void *pArg, /* First argument to xCallback() */
90715 char **pzErrMsg /* Write error messages here */
90717 int rc = SQLITE_OK; /* Return code */
90718 const char *zLeftover; /* Tail of unprocessed SQL */
90719 sqlite3_stmt *pStmt = 0; /* The current SQL statement */
90720 char **azCols = 0; /* Names of result columns */
90721 int nRetry = 0; /* Number of retry attempts */
90722 int callbackIsInit; /* True if callback data is initialized */
90724 if( !sqlite3SafetyCheckOk(db) ) return SQLITE_MISUSE_BKPT;
90725 if( zSql==0 ) zSql = "";
90727 sqlite3_mutex_enter(db->mutex);
90728 sqlite3Error(db, SQLITE_OK, 0);
90729 while( (rc==SQLITE_OK || (rc==SQLITE_SCHEMA && (++nRetry)<2)) && zSql[0] ){
90730 int nCol;
90731 char **azVals = 0;
90733 pStmt = 0;
90734 rc = sqlite3_prepare(db, zSql, -1, &pStmt, &zLeftover);
90735 assert( rc==SQLITE_OK || pStmt==0 );
90736 if( rc!=SQLITE_OK ){
90737 continue;
90739 if( !pStmt ){
90740 /* this happens for a comment or white-space */
90741 zSql = zLeftover;
90742 continue;
90745 callbackIsInit = 0;
90746 nCol = sqlite3_column_count(pStmt);
90748 while( 1 ){
90749 int i;
90750 rc = sqlite3_step(pStmt);
90752 /* Invoke the callback function if required */
90753 if( xCallback && (SQLITE_ROW==rc ||
90754 (SQLITE_DONE==rc && !callbackIsInit
90755 && db->flags&SQLITE_NullCallback)) ){
90756 if( !callbackIsInit ){
90757 azCols = sqlite3DbMallocZero(db, 2*nCol*sizeof(const char*) + 1);
90758 if( azCols==0 ){
90759 goto exec_out;
90761 for(i=0; i<nCol; i++){
90762 azCols[i] = (char *)sqlite3_column_name(pStmt, i);
90763 /* sqlite3VdbeSetColName() installs column names as UTF8
90764 ** strings so there is no way for sqlite3_column_name() to fail. */
90765 assert( azCols[i]!=0 );
90767 callbackIsInit = 1;
90769 if( rc==SQLITE_ROW ){
90770 azVals = &azCols[nCol];
90771 for(i=0; i<nCol; i++){
90772 azVals[i] = (char *)sqlite3_column_text(pStmt, i);
90773 if( !azVals[i] && sqlite3_column_type(pStmt, i)!=SQLITE_NULL ){
90774 db->mallocFailed = 1;
90775 goto exec_out;
90779 if( xCallback(pArg, nCol, azVals, azCols) ){
90780 rc = SQLITE_ABORT;
90781 sqlite3VdbeFinalize((Vdbe *)pStmt);
90782 pStmt = 0;
90783 sqlite3Error(db, SQLITE_ABORT, 0);
90784 goto exec_out;
90788 if( rc!=SQLITE_ROW ){
90789 rc = sqlite3VdbeFinalize((Vdbe *)pStmt);
90790 pStmt = 0;
90791 if( rc!=SQLITE_SCHEMA ){
90792 nRetry = 0;
90793 zSql = zLeftover;
90794 while( sqlite3Isspace(zSql[0]) ) zSql++;
90796 break;
90800 sqlite3DbFree(db, azCols);
90801 azCols = 0;
90804 exec_out:
90805 if( pStmt ) sqlite3VdbeFinalize((Vdbe *)pStmt);
90806 sqlite3DbFree(db, azCols);
90808 rc = sqlite3ApiExit(db, rc);
90809 if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){
90810 int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db));
90811 *pzErrMsg = sqlite3Malloc(nErrMsg);
90812 if( *pzErrMsg ){
90813 memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg);
90814 }else{
90815 rc = SQLITE_NOMEM;
90816 sqlite3Error(db, SQLITE_NOMEM, 0);
90818 }else if( pzErrMsg ){
90819 *pzErrMsg = 0;
90822 assert( (rc&db->errMask)==rc );
90823 sqlite3_mutex_leave(db->mutex);
90824 return rc;
90827 /************** End of legacy.c **********************************************/
90828 /************** Begin file loadext.c *****************************************/
90830 ** 2006 June 7
90832 ** The author disclaims copyright to this source code. In place of
90833 ** a legal notice, here is a blessing:
90835 ** May you do good and not evil.
90836 ** May you find forgiveness for yourself and forgive others.
90837 ** May you share freely, never taking more than you give.
90839 *************************************************************************
90840 ** This file contains code used to dynamically load extensions into
90841 ** the SQLite library.
90844 #ifndef SQLITE_CORE
90845 #define SQLITE_CORE 1 /* Disable the API redefinition in sqlite3ext.h */
90846 #endif
90847 /************** Include sqlite3ext.h in the middle of loadext.c **************/
90848 /************** Begin file sqlite3ext.h **************************************/
90850 ** 2006 June 7
90852 ** The author disclaims copyright to this source code. In place of
90853 ** a legal notice, here is a blessing:
90855 ** May you do good and not evil.
90856 ** May you find forgiveness for yourself and forgive others.
90857 ** May you share freely, never taking more than you give.
90859 *************************************************************************
90860 ** This header file defines the SQLite interface for use by
90861 ** shared libraries that want to be imported as extensions into
90862 ** an SQLite instance. Shared libraries that intend to be loaded
90863 ** as extensions by SQLite should #include this file instead of
90864 ** sqlite3.h.
90866 #ifndef _SQLITE3EXT_H_
90867 #define _SQLITE3EXT_H_
90869 typedef struct sqlite3_api_routines sqlite3_api_routines;
90872 ** The following structure holds pointers to all of the SQLite API
90873 ** routines.
90875 ** WARNING: In order to maintain backwards compatibility, add new
90876 ** interfaces to the end of this structure only. If you insert new
90877 ** interfaces in the middle of this structure, then older different
90878 ** versions of SQLite will not be able to load each others' shared
90879 ** libraries!
90881 struct sqlite3_api_routines {
90882 void * (*aggregate_context)(sqlite3_context*,int nBytes);
90883 int (*aggregate_count)(sqlite3_context*);
90884 int (*bind_blob)(sqlite3_stmt*,int,const void*,int n,void(*)(void*));
90885 int (*bind_double)(sqlite3_stmt*,int,double);
90886 int (*bind_int)(sqlite3_stmt*,int,int);
90887 int (*bind_int64)(sqlite3_stmt*,int,sqlite_int64);
90888 int (*bind_null)(sqlite3_stmt*,int);
90889 int (*bind_parameter_count)(sqlite3_stmt*);
90890 int (*bind_parameter_index)(sqlite3_stmt*,const char*zName);
90891 const char * (*bind_parameter_name)(sqlite3_stmt*,int);
90892 int (*bind_text)(sqlite3_stmt*,int,const char*,int n,void(*)(void*));
90893 int (*bind_text16)(sqlite3_stmt*,int,const void*,int,void(*)(void*));
90894 int (*bind_value)(sqlite3_stmt*,int,const sqlite3_value*);
90895 int (*busy_handler)(sqlite3*,int(*)(void*,int),void*);
90896 int (*busy_timeout)(sqlite3*,int ms);
90897 int (*changes)(sqlite3*);
90898 int (*close)(sqlite3*);
90899 int (*collation_needed)(sqlite3*,void*,void(*)(void*,sqlite3*,
90900 int eTextRep,const char*));
90901 int (*collation_needed16)(sqlite3*,void*,void(*)(void*,sqlite3*,
90902 int eTextRep,const void*));
90903 const void * (*column_blob)(sqlite3_stmt*,int iCol);
90904 int (*column_bytes)(sqlite3_stmt*,int iCol);
90905 int (*column_bytes16)(sqlite3_stmt*,int iCol);
90906 int (*column_count)(sqlite3_stmt*pStmt);
90907 const char * (*column_database_name)(sqlite3_stmt*,int);
90908 const void * (*column_database_name16)(sqlite3_stmt*,int);
90909 const char * (*column_decltype)(sqlite3_stmt*,int i);
90910 const void * (*column_decltype16)(sqlite3_stmt*,int);
90911 double (*column_double)(sqlite3_stmt*,int iCol);
90912 int (*column_int)(sqlite3_stmt*,int iCol);
90913 sqlite_int64 (*column_int64)(sqlite3_stmt*,int iCol);
90914 const char * (*column_name)(sqlite3_stmt*,int);
90915 const void * (*column_name16)(sqlite3_stmt*,int);
90916 const char * (*column_origin_name)(sqlite3_stmt*,int);
90917 const void * (*column_origin_name16)(sqlite3_stmt*,int);
90918 const char * (*column_table_name)(sqlite3_stmt*,int);
90919 const void * (*column_table_name16)(sqlite3_stmt*,int);
90920 const unsigned char * (*column_text)(sqlite3_stmt*,int iCol);
90921 const void * (*column_text16)(sqlite3_stmt*,int iCol);
90922 int (*column_type)(sqlite3_stmt*,int iCol);
90923 sqlite3_value* (*column_value)(sqlite3_stmt*,int iCol);
90924 void * (*commit_hook)(sqlite3*,int(*)(void*),void*);
90925 int (*complete)(const char*sql);
90926 int (*complete16)(const void*sql);
90927 int (*create_collation)(sqlite3*,const char*,int,void*,
90928 int(*)(void*,int,const void*,int,const void*));
90929 int (*create_collation16)(sqlite3*,const void*,int,void*,
90930 int(*)(void*,int,const void*,int,const void*));
90931 int (*create_function)(sqlite3*,const char*,int,int,void*,
90932 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
90933 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
90934 void (*xFinal)(sqlite3_context*));
90935 int (*create_function16)(sqlite3*,const void*,int,int,void*,
90936 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
90937 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
90938 void (*xFinal)(sqlite3_context*));
90939 int (*create_module)(sqlite3*,const char*,const sqlite3_module*,void*);
90940 int (*data_count)(sqlite3_stmt*pStmt);
90941 sqlite3 * (*db_handle)(sqlite3_stmt*);
90942 int (*declare_vtab)(sqlite3*,const char*);
90943 int (*enable_shared_cache)(int);
90944 int (*errcode)(sqlite3*db);
90945 const char * (*errmsg)(sqlite3*);
90946 const void * (*errmsg16)(sqlite3*);
90947 int (*exec)(sqlite3*,const char*,sqlite3_callback,void*,char**);
90948 int (*expired)(sqlite3_stmt*);
90949 int (*finalize)(sqlite3_stmt*pStmt);
90950 void (*free)(void*);
90951 void (*free_table)(char**result);
90952 int (*get_autocommit)(sqlite3*);
90953 void * (*get_auxdata)(sqlite3_context*,int);
90954 int (*get_table)(sqlite3*,const char*,char***,int*,int*,char**);
90955 int (*global_recover)(void);
90956 void (*interruptx)(sqlite3*);
90957 sqlite_int64 (*last_insert_rowid)(sqlite3*);
90958 const char * (*libversion)(void);
90959 int (*libversion_number)(void);
90960 void *(*malloc)(int);
90961 char * (*mprintf)(const char*,...);
90962 int (*open)(const char*,sqlite3**);
90963 int (*open16)(const void*,sqlite3**);
90964 int (*prepare)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
90965 int (*prepare16)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
90966 void * (*profile)(sqlite3*,void(*)(void*,const char*,sqlite_uint64),void*);
90967 void (*progress_handler)(sqlite3*,int,int(*)(void*),void*);
90968 void *(*realloc)(void*,int);
90969 int (*reset)(sqlite3_stmt*pStmt);
90970 void (*result_blob)(sqlite3_context*,const void*,int,void(*)(void*));
90971 void (*result_double)(sqlite3_context*,double);
90972 void (*result_error)(sqlite3_context*,const char*,int);
90973 void (*result_error16)(sqlite3_context*,const void*,int);
90974 void (*result_int)(sqlite3_context*,int);
90975 void (*result_int64)(sqlite3_context*,sqlite_int64);
90976 void (*result_null)(sqlite3_context*);
90977 void (*result_text)(sqlite3_context*,const char*,int,void(*)(void*));
90978 void (*result_text16)(sqlite3_context*,const void*,int,void(*)(void*));
90979 void (*result_text16be)(sqlite3_context*,const void*,int,void(*)(void*));
90980 void (*result_text16le)(sqlite3_context*,const void*,int,void(*)(void*));
90981 void (*result_value)(sqlite3_context*,sqlite3_value*);
90982 void * (*rollback_hook)(sqlite3*,void(*)(void*),void*);
90983 int (*set_authorizer)(sqlite3*,int(*)(void*,int,const char*,const char*,
90984 const char*,const char*),void*);
90985 void (*set_auxdata)(sqlite3_context*,int,void*,void (*)(void*));
90986 char * (*snprintf)(int,char*,const char*,...);
90987 int (*step)(sqlite3_stmt*);
90988 int (*table_column_metadata)(sqlite3*,const char*,const char*,const char*,
90989 char const**,char const**,int*,int*,int*);
90990 void (*thread_cleanup)(void);
90991 int (*total_changes)(sqlite3*);
90992 void * (*trace)(sqlite3*,void(*xTrace)(void*,const char*),void*);
90993 int (*transfer_bindings)(sqlite3_stmt*,sqlite3_stmt*);
90994 void * (*update_hook)(sqlite3*,void(*)(void*,int ,char const*,char const*,
90995 sqlite_int64),void*);
90996 void * (*user_data)(sqlite3_context*);
90997 const void * (*value_blob)(sqlite3_value*);
90998 int (*value_bytes)(sqlite3_value*);
90999 int (*value_bytes16)(sqlite3_value*);
91000 double (*value_double)(sqlite3_value*);
91001 int (*value_int)(sqlite3_value*);
91002 sqlite_int64 (*value_int64)(sqlite3_value*);
91003 int (*value_numeric_type)(sqlite3_value*);
91004 const unsigned char * (*value_text)(sqlite3_value*);
91005 const void * (*value_text16)(sqlite3_value*);
91006 const void * (*value_text16be)(sqlite3_value*);
91007 const void * (*value_text16le)(sqlite3_value*);
91008 int (*value_type)(sqlite3_value*);
91009 char *(*vmprintf)(const char*,va_list);
91010 /* Added ??? */
91011 int (*overload_function)(sqlite3*, const char *zFuncName, int nArg);
91012 /* Added by 3.3.13 */
91013 int (*prepare_v2)(sqlite3*,const char*,int,sqlite3_stmt**,const char**);
91014 int (*prepare16_v2)(sqlite3*,const void*,int,sqlite3_stmt**,const void**);
91015 int (*clear_bindings)(sqlite3_stmt*);
91016 /* Added by 3.4.1 */
91017 int (*create_module_v2)(sqlite3*,const char*,const sqlite3_module*,void*,
91018 void (*xDestroy)(void *));
91019 /* Added by 3.5.0 */
91020 int (*bind_zeroblob)(sqlite3_stmt*,int,int);
91021 int (*blob_bytes)(sqlite3_blob*);
91022 int (*blob_close)(sqlite3_blob*);
91023 int (*blob_open)(sqlite3*,const char*,const char*,const char*,sqlite3_int64,
91024 int,sqlite3_blob**);
91025 int (*blob_read)(sqlite3_blob*,void*,int,int);
91026 int (*blob_write)(sqlite3_blob*,const void*,int,int);
91027 int (*create_collation_v2)(sqlite3*,const char*,int,void*,
91028 int(*)(void*,int,const void*,int,const void*),
91029 void(*)(void*));
91030 int (*file_control)(sqlite3*,const char*,int,void*);
91031 sqlite3_int64 (*memory_highwater)(int);
91032 sqlite3_int64 (*memory_used)(void);
91033 sqlite3_mutex *(*mutex_alloc)(int);
91034 void (*mutex_enter)(sqlite3_mutex*);
91035 void (*mutex_free)(sqlite3_mutex*);
91036 void (*mutex_leave)(sqlite3_mutex*);
91037 int (*mutex_try)(sqlite3_mutex*);
91038 int (*open_v2)(const char*,sqlite3**,int,const char*);
91039 int (*release_memory)(int);
91040 void (*result_error_nomem)(sqlite3_context*);
91041 void (*result_error_toobig)(sqlite3_context*);
91042 int (*sleep)(int);
91043 void (*soft_heap_limit)(int);
91044 sqlite3_vfs *(*vfs_find)(const char*);
91045 int (*vfs_register)(sqlite3_vfs*,int);
91046 int (*vfs_unregister)(sqlite3_vfs*);
91047 int (*xthreadsafe)(void);
91048 void (*result_zeroblob)(sqlite3_context*,int);
91049 void (*result_error_code)(sqlite3_context*,int);
91050 int (*test_control)(int, ...);
91051 void (*randomness)(int,void*);
91052 sqlite3 *(*context_db_handle)(sqlite3_context*);
91053 int (*extended_result_codes)(sqlite3*,int);
91054 int (*limit)(sqlite3*,int,int);
91055 sqlite3_stmt *(*next_stmt)(sqlite3*,sqlite3_stmt*);
91056 const char *(*sql)(sqlite3_stmt*);
91057 int (*status)(int,int*,int*,int);
91058 int (*backup_finish)(sqlite3_backup*);
91059 sqlite3_backup *(*backup_init)(sqlite3*,const char*,sqlite3*,const char*);
91060 int (*backup_pagecount)(sqlite3_backup*);
91061 int (*backup_remaining)(sqlite3_backup*);
91062 int (*backup_step)(sqlite3_backup*,int);
91063 const char *(*compileoption_get)(int);
91064 int (*compileoption_used)(const char*);
91065 int (*create_function_v2)(sqlite3*,const char*,int,int,void*,
91066 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
91067 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
91068 void (*xFinal)(sqlite3_context*),
91069 void(*xDestroy)(void*));
91070 int (*db_config)(sqlite3*,int,...);
91071 sqlite3_mutex *(*db_mutex)(sqlite3*);
91072 int (*db_status)(sqlite3*,int,int*,int*,int);
91073 int (*extended_errcode)(sqlite3*);
91074 void (*log)(int,const char*,...);
91075 sqlite3_int64 (*soft_heap_limit64)(sqlite3_int64);
91076 const char *(*sourceid)(void);
91077 int (*stmt_status)(sqlite3_stmt*,int,int);
91078 int (*strnicmp)(const char*,const char*,int);
91079 int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
91080 int (*wal_autocheckpoint)(sqlite3*,int);
91081 int (*wal_checkpoint)(sqlite3*,const char*);
91082 void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
91083 int (*blob_reopen)(sqlite3_blob*,sqlite3_int64);
91084 int (*vtab_config)(sqlite3*,int op,...);
91085 int (*vtab_on_conflict)(sqlite3*);
91089 ** The following macros redefine the API routines so that they are
91090 ** redirected throught the global sqlite3_api structure.
91092 ** This header file is also used by the loadext.c source file
91093 ** (part of the main SQLite library - not an extension) so that
91094 ** it can get access to the sqlite3_api_routines structure
91095 ** definition. But the main library does not want to redefine
91096 ** the API. So the redefinition macros are only valid if the
91097 ** SQLITE_CORE macros is undefined.
91099 #ifndef SQLITE_CORE
91100 #define sqlite3_aggregate_context sqlite3_api->aggregate_context
91101 #ifndef SQLITE_OMIT_DEPRECATED
91102 #define sqlite3_aggregate_count sqlite3_api->aggregate_count
91103 #endif
91104 #define sqlite3_bind_blob sqlite3_api->bind_blob
91105 #define sqlite3_bind_double sqlite3_api->bind_double
91106 #define sqlite3_bind_int sqlite3_api->bind_int
91107 #define sqlite3_bind_int64 sqlite3_api->bind_int64
91108 #define sqlite3_bind_null sqlite3_api->bind_null
91109 #define sqlite3_bind_parameter_count sqlite3_api->bind_parameter_count
91110 #define sqlite3_bind_parameter_index sqlite3_api->bind_parameter_index
91111 #define sqlite3_bind_parameter_name sqlite3_api->bind_parameter_name
91112 #define sqlite3_bind_text sqlite3_api->bind_text
91113 #define sqlite3_bind_text16 sqlite3_api->bind_text16
91114 #define sqlite3_bind_value sqlite3_api->bind_value
91115 #define sqlite3_busy_handler sqlite3_api->busy_handler
91116 #define sqlite3_busy_timeout sqlite3_api->busy_timeout
91117 #define sqlite3_changes sqlite3_api->changes
91118 #define sqlite3_close sqlite3_api->close
91119 #define sqlite3_collation_needed sqlite3_api->collation_needed
91120 #define sqlite3_collation_needed16 sqlite3_api->collation_needed16
91121 #define sqlite3_column_blob sqlite3_api->column_blob
91122 #define sqlite3_column_bytes sqlite3_api->column_bytes
91123 #define sqlite3_column_bytes16 sqlite3_api->column_bytes16
91124 #define sqlite3_column_count sqlite3_api->column_count
91125 #define sqlite3_column_database_name sqlite3_api->column_database_name
91126 #define sqlite3_column_database_name16 sqlite3_api->column_database_name16
91127 #define sqlite3_column_decltype sqlite3_api->column_decltype
91128 #define sqlite3_column_decltype16 sqlite3_api->column_decltype16
91129 #define sqlite3_column_double sqlite3_api->column_double
91130 #define sqlite3_column_int sqlite3_api->column_int
91131 #define sqlite3_column_int64 sqlite3_api->column_int64
91132 #define sqlite3_column_name sqlite3_api->column_name
91133 #define sqlite3_column_name16 sqlite3_api->column_name16
91134 #define sqlite3_column_origin_name sqlite3_api->column_origin_name
91135 #define sqlite3_column_origin_name16 sqlite3_api->column_origin_name16
91136 #define sqlite3_column_table_name sqlite3_api->column_table_name
91137 #define sqlite3_column_table_name16 sqlite3_api->column_table_name16
91138 #define sqlite3_column_text sqlite3_api->column_text
91139 #define sqlite3_column_text16 sqlite3_api->column_text16
91140 #define sqlite3_column_type sqlite3_api->column_type
91141 #define sqlite3_column_value sqlite3_api->column_value
91142 #define sqlite3_commit_hook sqlite3_api->commit_hook
91143 #define sqlite3_complete sqlite3_api->complete
91144 #define sqlite3_complete16 sqlite3_api->complete16
91145 #define sqlite3_create_collation sqlite3_api->create_collation
91146 #define sqlite3_create_collation16 sqlite3_api->create_collation16
91147 #define sqlite3_create_function sqlite3_api->create_function
91148 #define sqlite3_create_function16 sqlite3_api->create_function16
91149 #define sqlite3_create_module sqlite3_api->create_module
91150 #define sqlite3_create_module_v2 sqlite3_api->create_module_v2
91151 #define sqlite3_data_count sqlite3_api->data_count
91152 #define sqlite3_db_handle sqlite3_api->db_handle
91153 #define sqlite3_declare_vtab sqlite3_api->declare_vtab
91154 #define sqlite3_enable_shared_cache sqlite3_api->enable_shared_cache
91155 #define sqlite3_errcode sqlite3_api->errcode
91156 #define sqlite3_errmsg sqlite3_api->errmsg
91157 #define sqlite3_errmsg16 sqlite3_api->errmsg16
91158 #define sqlite3_exec sqlite3_api->exec
91159 #ifndef SQLITE_OMIT_DEPRECATED
91160 #define sqlite3_expired sqlite3_api->expired
91161 #endif
91162 #define sqlite3_finalize sqlite3_api->finalize
91163 #define sqlite3_free sqlite3_api->free
91164 #define sqlite3_free_table sqlite3_api->free_table
91165 #define sqlite3_get_autocommit sqlite3_api->get_autocommit
91166 #define sqlite3_get_auxdata sqlite3_api->get_auxdata
91167 #define sqlite3_get_table sqlite3_api->get_table
91168 #ifndef SQLITE_OMIT_DEPRECATED
91169 #define sqlite3_global_recover sqlite3_api->global_recover
91170 #endif
91171 #define sqlite3_interrupt sqlite3_api->interruptx
91172 #define sqlite3_last_insert_rowid sqlite3_api->last_insert_rowid
91173 #define sqlite3_libversion sqlite3_api->libversion
91174 #define sqlite3_libversion_number sqlite3_api->libversion_number
91175 #define sqlite3_malloc sqlite3_api->malloc
91176 #define sqlite3_mprintf sqlite3_api->mprintf
91177 #define sqlite3_open sqlite3_api->open
91178 #define sqlite3_open16 sqlite3_api->open16
91179 #define sqlite3_prepare sqlite3_api->prepare
91180 #define sqlite3_prepare16 sqlite3_api->prepare16
91181 #define sqlite3_prepare_v2 sqlite3_api->prepare_v2
91182 #define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2
91183 #define sqlite3_profile sqlite3_api->profile
91184 #define sqlite3_progress_handler sqlite3_api->progress_handler
91185 #define sqlite3_realloc sqlite3_api->realloc
91186 #define sqlite3_reset sqlite3_api->reset
91187 #define sqlite3_result_blob sqlite3_api->result_blob
91188 #define sqlite3_result_double sqlite3_api->result_double
91189 #define sqlite3_result_error sqlite3_api->result_error
91190 #define sqlite3_result_error16 sqlite3_api->result_error16
91191 #define sqlite3_result_int sqlite3_api->result_int
91192 #define sqlite3_result_int64 sqlite3_api->result_int64
91193 #define sqlite3_result_null sqlite3_api->result_null
91194 #define sqlite3_result_text sqlite3_api->result_text
91195 #define sqlite3_result_text16 sqlite3_api->result_text16
91196 #define sqlite3_result_text16be sqlite3_api->result_text16be
91197 #define sqlite3_result_text16le sqlite3_api->result_text16le
91198 #define sqlite3_result_value sqlite3_api->result_value
91199 #define sqlite3_rollback_hook sqlite3_api->rollback_hook
91200 #define sqlite3_set_authorizer sqlite3_api->set_authorizer
91201 #define sqlite3_set_auxdata sqlite3_api->set_auxdata
91202 #define sqlite3_snprintf sqlite3_api->snprintf
91203 #define sqlite3_step sqlite3_api->step
91204 #define sqlite3_table_column_metadata sqlite3_api->table_column_metadata
91205 #define sqlite3_thread_cleanup sqlite3_api->thread_cleanup
91206 #define sqlite3_total_changes sqlite3_api->total_changes
91207 #define sqlite3_trace sqlite3_api->trace
91208 #ifndef SQLITE_OMIT_DEPRECATED
91209 #define sqlite3_transfer_bindings sqlite3_api->transfer_bindings
91210 #endif
91211 #define sqlite3_update_hook sqlite3_api->update_hook
91212 #define sqlite3_user_data sqlite3_api->user_data
91213 #define sqlite3_value_blob sqlite3_api->value_blob
91214 #define sqlite3_value_bytes sqlite3_api->value_bytes
91215 #define sqlite3_value_bytes16 sqlite3_api->value_bytes16
91216 #define sqlite3_value_double sqlite3_api->value_double
91217 #define sqlite3_value_int sqlite3_api->value_int
91218 #define sqlite3_value_int64 sqlite3_api->value_int64
91219 #define sqlite3_value_numeric_type sqlite3_api->value_numeric_type
91220 #define sqlite3_value_text sqlite3_api->value_text
91221 #define sqlite3_value_text16 sqlite3_api->value_text16
91222 #define sqlite3_value_text16be sqlite3_api->value_text16be
91223 #define sqlite3_value_text16le sqlite3_api->value_text16le
91224 #define sqlite3_value_type sqlite3_api->value_type
91225 #define sqlite3_vmprintf sqlite3_api->vmprintf
91226 #define sqlite3_overload_function sqlite3_api->overload_function
91227 #define sqlite3_prepare_v2 sqlite3_api->prepare_v2
91228 #define sqlite3_prepare16_v2 sqlite3_api->prepare16_v2
91229 #define sqlite3_clear_bindings sqlite3_api->clear_bindings
91230 #define sqlite3_bind_zeroblob sqlite3_api->bind_zeroblob
91231 #define sqlite3_blob_bytes sqlite3_api->blob_bytes
91232 #define sqlite3_blob_close sqlite3_api->blob_close
91233 #define sqlite3_blob_open sqlite3_api->blob_open
91234 #define sqlite3_blob_read sqlite3_api->blob_read
91235 #define sqlite3_blob_write sqlite3_api->blob_write
91236 #define sqlite3_create_collation_v2 sqlite3_api->create_collation_v2
91237 #define sqlite3_file_control sqlite3_api->file_control
91238 #define sqlite3_memory_highwater sqlite3_api->memory_highwater
91239 #define sqlite3_memory_used sqlite3_api->memory_used
91240 #define sqlite3_mutex_alloc sqlite3_api->mutex_alloc
91241 #define sqlite3_mutex_enter sqlite3_api->mutex_enter
91242 #define sqlite3_mutex_free sqlite3_api->mutex_free
91243 #define sqlite3_mutex_leave sqlite3_api->mutex_leave
91244 #define sqlite3_mutex_try sqlite3_api->mutex_try
91245 #define sqlite3_open_v2 sqlite3_api->open_v2
91246 #define sqlite3_release_memory sqlite3_api->release_memory
91247 #define sqlite3_result_error_nomem sqlite3_api->result_error_nomem
91248 #define sqlite3_result_error_toobig sqlite3_api->result_error_toobig
91249 #define sqlite3_sleep sqlite3_api->sleep
91250 #define sqlite3_soft_heap_limit sqlite3_api->soft_heap_limit
91251 #define sqlite3_vfs_find sqlite3_api->vfs_find
91252 #define sqlite3_vfs_register sqlite3_api->vfs_register
91253 #define sqlite3_vfs_unregister sqlite3_api->vfs_unregister
91254 #define sqlite3_threadsafe sqlite3_api->xthreadsafe
91255 #define sqlite3_result_zeroblob sqlite3_api->result_zeroblob
91256 #define sqlite3_result_error_code sqlite3_api->result_error_code
91257 #define sqlite3_test_control sqlite3_api->test_control
91258 #define sqlite3_randomness sqlite3_api->randomness
91259 #define sqlite3_context_db_handle sqlite3_api->context_db_handle
91260 #define sqlite3_extended_result_codes sqlite3_api->extended_result_codes
91261 #define sqlite3_limit sqlite3_api->limit
91262 #define sqlite3_next_stmt sqlite3_api->next_stmt
91263 #define sqlite3_sql sqlite3_api->sql
91264 #define sqlite3_status sqlite3_api->status
91265 #define sqlite3_backup_finish sqlite3_api->backup_finish
91266 #define sqlite3_backup_init sqlite3_api->backup_init
91267 #define sqlite3_backup_pagecount sqlite3_api->backup_pagecount
91268 #define sqlite3_backup_remaining sqlite3_api->backup_remaining
91269 #define sqlite3_backup_step sqlite3_api->backup_step
91270 #define sqlite3_compileoption_get sqlite3_api->compileoption_get
91271 #define sqlite3_compileoption_used sqlite3_api->compileoption_used
91272 #define sqlite3_create_function_v2 sqlite3_api->create_function_v2
91273 #define sqlite3_db_config sqlite3_api->db_config
91274 #define sqlite3_db_mutex sqlite3_api->db_mutex
91275 #define sqlite3_db_status sqlite3_api->db_status
91276 #define sqlite3_extended_errcode sqlite3_api->extended_errcode
91277 #define sqlite3_log sqlite3_api->log
91278 #define sqlite3_soft_heap_limit64 sqlite3_api->soft_heap_limit64
91279 #define sqlite3_sourceid sqlite3_api->sourceid
91280 #define sqlite3_stmt_status sqlite3_api->stmt_status
91281 #define sqlite3_strnicmp sqlite3_api->strnicmp
91282 #define sqlite3_unlock_notify sqlite3_api->unlock_notify
91283 #define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint
91284 #define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint
91285 #define sqlite3_wal_hook sqlite3_api->wal_hook
91286 #define sqlite3_blob_reopen sqlite3_api->blob_reopen
91287 #define sqlite3_vtab_config sqlite3_api->vtab_config
91288 #define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict
91289 #endif /* SQLITE_CORE */
91291 #define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0;
91292 #define SQLITE_EXTENSION_INIT2(v) sqlite3_api = v;
91294 #endif /* _SQLITE3EXT_H_ */
91296 /************** End of sqlite3ext.h ******************************************/
91297 /************** Continuing where we left off in loadext.c ********************/
91298 /* #include <string.h> */
91300 #ifndef SQLITE_OMIT_LOAD_EXTENSION
91303 ** Some API routines are omitted when various features are
91304 ** excluded from a build of SQLite. Substitute a NULL pointer
91305 ** for any missing APIs.
91307 #ifndef SQLITE_ENABLE_COLUMN_METADATA
91308 # define sqlite3_column_database_name 0
91309 # define sqlite3_column_database_name16 0
91310 # define sqlite3_column_table_name 0
91311 # define sqlite3_column_table_name16 0
91312 # define sqlite3_column_origin_name 0
91313 # define sqlite3_column_origin_name16 0
91314 # define sqlite3_table_column_metadata 0
91315 #endif
91317 #ifdef SQLITE_OMIT_AUTHORIZATION
91318 # define sqlite3_set_authorizer 0
91319 #endif
91321 #ifdef SQLITE_OMIT_UTF16
91322 # define sqlite3_bind_text16 0
91323 # define sqlite3_collation_needed16 0
91324 # define sqlite3_column_decltype16 0
91325 # define sqlite3_column_name16 0
91326 # define sqlite3_column_text16 0
91327 # define sqlite3_complete16 0
91328 # define sqlite3_create_collation16 0
91329 # define sqlite3_create_function16 0
91330 # define sqlite3_errmsg16 0
91331 # define sqlite3_open16 0
91332 # define sqlite3_prepare16 0
91333 # define sqlite3_prepare16_v2 0
91334 # define sqlite3_result_error16 0
91335 # define sqlite3_result_text16 0
91336 # define sqlite3_result_text16be 0
91337 # define sqlite3_result_text16le 0
91338 # define sqlite3_value_text16 0
91339 # define sqlite3_value_text16be 0
91340 # define sqlite3_value_text16le 0
91341 # define sqlite3_column_database_name16 0
91342 # define sqlite3_column_table_name16 0
91343 # define sqlite3_column_origin_name16 0
91344 #endif
91346 #ifdef SQLITE_OMIT_COMPLETE
91347 # define sqlite3_complete 0
91348 # define sqlite3_complete16 0
91349 #endif
91351 #ifdef SQLITE_OMIT_DECLTYPE
91352 # define sqlite3_column_decltype16 0
91353 # define sqlite3_column_decltype 0
91354 #endif
91356 #ifdef SQLITE_OMIT_PROGRESS_CALLBACK
91357 # define sqlite3_progress_handler 0
91358 #endif
91360 #ifdef SQLITE_OMIT_VIRTUALTABLE
91361 # define sqlite3_create_module 0
91362 # define sqlite3_create_module_v2 0
91363 # define sqlite3_declare_vtab 0
91364 # define sqlite3_vtab_config 0
91365 # define sqlite3_vtab_on_conflict 0
91366 #endif
91368 #ifdef SQLITE_OMIT_SHARED_CACHE
91369 # define sqlite3_enable_shared_cache 0
91370 #endif
91372 #ifdef SQLITE_OMIT_TRACE
91373 # define sqlite3_profile 0
91374 # define sqlite3_trace 0
91375 #endif
91377 #ifdef SQLITE_OMIT_GET_TABLE
91378 # define sqlite3_free_table 0
91379 # define sqlite3_get_table 0
91380 #endif
91382 #ifdef SQLITE_OMIT_INCRBLOB
91383 #define sqlite3_bind_zeroblob 0
91384 #define sqlite3_blob_bytes 0
91385 #define sqlite3_blob_close 0
91386 #define sqlite3_blob_open 0
91387 #define sqlite3_blob_read 0
91388 #define sqlite3_blob_write 0
91389 #define sqlite3_blob_reopen 0
91390 #endif
91393 ** The following structure contains pointers to all SQLite API routines.
91394 ** A pointer to this structure is passed into extensions when they are
91395 ** loaded so that the extension can make calls back into the SQLite
91396 ** library.
91398 ** When adding new APIs, add them to the bottom of this structure
91399 ** in order to preserve backwards compatibility.
91401 ** Extensions that use newer APIs should first call the
91402 ** sqlite3_libversion_number() to make sure that the API they
91403 ** intend to use is supported by the library. Extensions should
91404 ** also check to make sure that the pointer to the function is
91405 ** not NULL before calling it.
91407 static const sqlite3_api_routines sqlite3Apis = {
91408 sqlite3_aggregate_context,
91409 #ifndef SQLITE_OMIT_DEPRECATED
91410 sqlite3_aggregate_count,
91411 #else
91413 #endif
91414 sqlite3_bind_blob,
91415 sqlite3_bind_double,
91416 sqlite3_bind_int,
91417 sqlite3_bind_int64,
91418 sqlite3_bind_null,
91419 sqlite3_bind_parameter_count,
91420 sqlite3_bind_parameter_index,
91421 sqlite3_bind_parameter_name,
91422 sqlite3_bind_text,
91423 sqlite3_bind_text16,
91424 sqlite3_bind_value,
91425 sqlite3_busy_handler,
91426 sqlite3_busy_timeout,
91427 sqlite3_changes,
91428 sqlite3_close,
91429 sqlite3_collation_needed,
91430 sqlite3_collation_needed16,
91431 sqlite3_column_blob,
91432 sqlite3_column_bytes,
91433 sqlite3_column_bytes16,
91434 sqlite3_column_count,
91435 sqlite3_column_database_name,
91436 sqlite3_column_database_name16,
91437 sqlite3_column_decltype,
91438 sqlite3_column_decltype16,
91439 sqlite3_column_double,
91440 sqlite3_column_int,
91441 sqlite3_column_int64,
91442 sqlite3_column_name,
91443 sqlite3_column_name16,
91444 sqlite3_column_origin_name,
91445 sqlite3_column_origin_name16,
91446 sqlite3_column_table_name,
91447 sqlite3_column_table_name16,
91448 sqlite3_column_text,
91449 sqlite3_column_text16,
91450 sqlite3_column_type,
91451 sqlite3_column_value,
91452 sqlite3_commit_hook,
91453 sqlite3_complete,
91454 sqlite3_complete16,
91455 sqlite3_create_collation,
91456 sqlite3_create_collation16,
91457 sqlite3_create_function,
91458 sqlite3_create_function16,
91459 sqlite3_create_module,
91460 sqlite3_data_count,
91461 sqlite3_db_handle,
91462 sqlite3_declare_vtab,
91463 sqlite3_enable_shared_cache,
91464 sqlite3_errcode,
91465 sqlite3_errmsg,
91466 sqlite3_errmsg16,
91467 sqlite3_exec,
91468 #ifndef SQLITE_OMIT_DEPRECATED
91469 sqlite3_expired,
91470 #else
91472 #endif
91473 sqlite3_finalize,
91474 sqlite3_free,
91475 sqlite3_free_table,
91476 sqlite3_get_autocommit,
91477 sqlite3_get_auxdata,
91478 sqlite3_get_table,
91479 0, /* Was sqlite3_global_recover(), but that function is deprecated */
91480 sqlite3_interrupt,
91481 sqlite3_last_insert_rowid,
91482 sqlite3_libversion,
91483 sqlite3_libversion_number,
91484 sqlite3_malloc,
91485 sqlite3_mprintf,
91486 sqlite3_open,
91487 sqlite3_open16,
91488 sqlite3_prepare,
91489 sqlite3_prepare16,
91490 sqlite3_profile,
91491 sqlite3_progress_handler,
91492 sqlite3_realloc,
91493 sqlite3_reset,
91494 sqlite3_result_blob,
91495 sqlite3_result_double,
91496 sqlite3_result_error,
91497 sqlite3_result_error16,
91498 sqlite3_result_int,
91499 sqlite3_result_int64,
91500 sqlite3_result_null,
91501 sqlite3_result_text,
91502 sqlite3_result_text16,
91503 sqlite3_result_text16be,
91504 sqlite3_result_text16le,
91505 sqlite3_result_value,
91506 sqlite3_rollback_hook,
91507 sqlite3_set_authorizer,
91508 sqlite3_set_auxdata,
91509 sqlite3_snprintf,
91510 sqlite3_step,
91511 sqlite3_table_column_metadata,
91512 #ifndef SQLITE_OMIT_DEPRECATED
91513 sqlite3_thread_cleanup,
91514 #else
91516 #endif
91517 sqlite3_total_changes,
91518 sqlite3_trace,
91519 #ifndef SQLITE_OMIT_DEPRECATED
91520 sqlite3_transfer_bindings,
91521 #else
91523 #endif
91524 sqlite3_update_hook,
91525 sqlite3_user_data,
91526 sqlite3_value_blob,
91527 sqlite3_value_bytes,
91528 sqlite3_value_bytes16,
91529 sqlite3_value_double,
91530 sqlite3_value_int,
91531 sqlite3_value_int64,
91532 sqlite3_value_numeric_type,
91533 sqlite3_value_text,
91534 sqlite3_value_text16,
91535 sqlite3_value_text16be,
91536 sqlite3_value_text16le,
91537 sqlite3_value_type,
91538 sqlite3_vmprintf,
91540 ** The original API set ends here. All extensions can call any
91541 ** of the APIs above provided that the pointer is not NULL. But
91542 ** before calling APIs that follow, extension should check the
91543 ** sqlite3_libversion_number() to make sure they are dealing with
91544 ** a library that is new enough to support that API.
91545 *************************************************************************
91547 sqlite3_overload_function,
91550 ** Added after 3.3.13
91552 sqlite3_prepare_v2,
91553 sqlite3_prepare16_v2,
91554 sqlite3_clear_bindings,
91557 ** Added for 3.4.1
91559 sqlite3_create_module_v2,
91562 ** Added for 3.5.0
91564 sqlite3_bind_zeroblob,
91565 sqlite3_blob_bytes,
91566 sqlite3_blob_close,
91567 sqlite3_blob_open,
91568 sqlite3_blob_read,
91569 sqlite3_blob_write,
91570 sqlite3_create_collation_v2,
91571 sqlite3_file_control,
91572 sqlite3_memory_highwater,
91573 sqlite3_memory_used,
91574 #ifdef SQLITE_MUTEX_OMIT
91580 #else
91581 sqlite3_mutex_alloc,
91582 sqlite3_mutex_enter,
91583 sqlite3_mutex_free,
91584 sqlite3_mutex_leave,
91585 sqlite3_mutex_try,
91586 #endif
91587 sqlite3_open_v2,
91588 sqlite3_release_memory,
91589 sqlite3_result_error_nomem,
91590 sqlite3_result_error_toobig,
91591 sqlite3_sleep,
91592 sqlite3_soft_heap_limit,
91593 sqlite3_vfs_find,
91594 sqlite3_vfs_register,
91595 sqlite3_vfs_unregister,
91598 ** Added for 3.5.8
91600 sqlite3_threadsafe,
91601 sqlite3_result_zeroblob,
91602 sqlite3_result_error_code,
91603 sqlite3_test_control,
91604 sqlite3_randomness,
91605 sqlite3_context_db_handle,
91608 ** Added for 3.6.0
91610 sqlite3_extended_result_codes,
91611 sqlite3_limit,
91612 sqlite3_next_stmt,
91613 sqlite3_sql,
91614 sqlite3_status,
91617 ** Added for 3.7.4
91619 sqlite3_backup_finish,
91620 sqlite3_backup_init,
91621 sqlite3_backup_pagecount,
91622 sqlite3_backup_remaining,
91623 sqlite3_backup_step,
91624 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
91625 sqlite3_compileoption_get,
91626 sqlite3_compileoption_used,
91627 #else
91630 #endif
91631 sqlite3_create_function_v2,
91632 sqlite3_db_config,
91633 sqlite3_db_mutex,
91634 sqlite3_db_status,
91635 sqlite3_extended_errcode,
91636 sqlite3_log,
91637 sqlite3_soft_heap_limit64,
91638 sqlite3_sourceid,
91639 sqlite3_stmt_status,
91640 sqlite3_strnicmp,
91641 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
91642 sqlite3_unlock_notify,
91643 #else
91645 #endif
91646 #ifndef SQLITE_OMIT_WAL
91647 sqlite3_wal_autocheckpoint,
91648 sqlite3_wal_checkpoint,
91649 sqlite3_wal_hook,
91650 #else
91654 #endif
91655 sqlite3_blob_reopen,
91656 sqlite3_vtab_config,
91657 sqlite3_vtab_on_conflict,
91661 ** Attempt to load an SQLite extension library contained in the file
91662 ** zFile. The entry point is zProc. zProc may be 0 in which case a
91663 ** default entry point name (sqlite3_extension_init) is used. Use
91664 ** of the default name is recommended.
91666 ** Return SQLITE_OK on success and SQLITE_ERROR if something goes wrong.
91668 ** If an error occurs and pzErrMsg is not 0, then fill *pzErrMsg with
91669 ** error message text. The calling function should free this memory
91670 ** by calling sqlite3DbFree(db, ).
91672 static int sqlite3LoadExtension(
91673 sqlite3 *db, /* Load the extension into this database connection */
91674 const char *zFile, /* Name of the shared library containing extension */
91675 const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */
91676 char **pzErrMsg /* Put error message here if not 0 */
91678 sqlite3_vfs *pVfs = db->pVfs;
91679 void *handle;
91680 int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
91681 char *zErrmsg = 0;
91682 void **aHandle;
91683 int nMsg = 300 + sqlite3Strlen30(zFile);
91685 if( pzErrMsg ) *pzErrMsg = 0;
91687 /* Ticket #1863. To avoid a creating security problems for older
91688 ** applications that relink against newer versions of SQLite, the
91689 ** ability to run load_extension is turned off by default. One
91690 ** must call sqlite3_enable_load_extension() to turn on extension
91691 ** loading. Otherwise you get the following error.
91693 if( (db->flags & SQLITE_LoadExtension)==0 ){
91694 if( pzErrMsg ){
91695 *pzErrMsg = sqlite3_mprintf("not authorized");
91697 return SQLITE_ERROR;
91700 if( zProc==0 ){
91701 zProc = "sqlite3_extension_init";
91704 handle = sqlite3OsDlOpen(pVfs, zFile);
91705 if( handle==0 ){
91706 if( pzErrMsg ){
91707 *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
91708 if( zErrmsg ){
91709 sqlite3_snprintf(nMsg, zErrmsg,
91710 "unable to open shared library [%s]", zFile);
91711 sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
91714 return SQLITE_ERROR;
91716 xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
91717 sqlite3OsDlSym(pVfs, handle, zProc);
91718 if( xInit==0 ){
91719 if( pzErrMsg ){
91720 nMsg += sqlite3Strlen30(zProc);
91721 *pzErrMsg = zErrmsg = sqlite3_malloc(nMsg);
91722 if( zErrmsg ){
91723 sqlite3_snprintf(nMsg, zErrmsg,
91724 "no entry point [%s] in shared library [%s]", zProc,zFile);
91725 sqlite3OsDlError(pVfs, nMsg-1, zErrmsg);
91727 sqlite3OsDlClose(pVfs, handle);
91729 return SQLITE_ERROR;
91730 }else if( xInit(db, &zErrmsg, &sqlite3Apis) ){
91731 if( pzErrMsg ){
91732 *pzErrMsg = sqlite3_mprintf("error during initialization: %s", zErrmsg);
91734 sqlite3_free(zErrmsg);
91735 sqlite3OsDlClose(pVfs, handle);
91736 return SQLITE_ERROR;
91739 /* Append the new shared library handle to the db->aExtension array. */
91740 aHandle = sqlite3DbMallocZero(db, sizeof(handle)*(db->nExtension+1));
91741 if( aHandle==0 ){
91742 return SQLITE_NOMEM;
91744 if( db->nExtension>0 ){
91745 memcpy(aHandle, db->aExtension, sizeof(handle)*db->nExtension);
91747 sqlite3DbFree(db, db->aExtension);
91748 db->aExtension = aHandle;
91750 db->aExtension[db->nExtension++] = handle;
91751 return SQLITE_OK;
91753 SQLITE_API int sqlite3_load_extension(
91754 sqlite3 *db, /* Load the extension into this database connection */
91755 const char *zFile, /* Name of the shared library containing extension */
91756 const char *zProc, /* Entry point. Use "sqlite3_extension_init" if 0 */
91757 char **pzErrMsg /* Put error message here if not 0 */
91759 int rc;
91760 sqlite3_mutex_enter(db->mutex);
91761 rc = sqlite3LoadExtension(db, zFile, zProc, pzErrMsg);
91762 rc = sqlite3ApiExit(db, rc);
91763 sqlite3_mutex_leave(db->mutex);
91764 return rc;
91768 ** Call this routine when the database connection is closing in order
91769 ** to clean up loaded extensions
91771 SQLITE_PRIVATE void sqlite3CloseExtensions(sqlite3 *db){
91772 int i;
91773 assert( sqlite3_mutex_held(db->mutex) );
91774 for(i=0; i<db->nExtension; i++){
91775 sqlite3OsDlClose(db->pVfs, db->aExtension[i]);
91777 sqlite3DbFree(db, db->aExtension);
91781 ** Enable or disable extension loading. Extension loading is disabled by
91782 ** default so as not to open security holes in older applications.
91784 SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff){
91785 sqlite3_mutex_enter(db->mutex);
91786 if( onoff ){
91787 db->flags |= SQLITE_LoadExtension;
91788 }else{
91789 db->flags &= ~SQLITE_LoadExtension;
91791 sqlite3_mutex_leave(db->mutex);
91792 return SQLITE_OK;
91795 #endif /* SQLITE_OMIT_LOAD_EXTENSION */
91798 ** The auto-extension code added regardless of whether or not extension
91799 ** loading is supported. We need a dummy sqlite3Apis pointer for that
91800 ** code if regular extension loading is not available. This is that
91801 ** dummy pointer.
91803 #ifdef SQLITE_OMIT_LOAD_EXTENSION
91804 static const sqlite3_api_routines sqlite3Apis = { 0 };
91805 #endif
91809 ** The following object holds the list of automatically loaded
91810 ** extensions.
91812 ** This list is shared across threads. The SQLITE_MUTEX_STATIC_MASTER
91813 ** mutex must be held while accessing this list.
91815 typedef struct sqlite3AutoExtList sqlite3AutoExtList;
91816 static SQLITE_WSD struct sqlite3AutoExtList {
91817 int nExt; /* Number of entries in aExt[] */
91818 void (**aExt)(void); /* Pointers to the extension init functions */
91819 } sqlite3Autoext = { 0, 0 };
91821 /* The "wsdAutoext" macro will resolve to the autoextension
91822 ** state vector. If writable static data is unsupported on the target,
91823 ** we have to locate the state vector at run-time. In the more common
91824 ** case where writable static data is supported, wsdStat can refer directly
91825 ** to the "sqlite3Autoext" state vector declared above.
91827 #ifdef SQLITE_OMIT_WSD
91828 # define wsdAutoextInit \
91829 sqlite3AutoExtList *x = &GLOBAL(sqlite3AutoExtList,sqlite3Autoext)
91830 # define wsdAutoext x[0]
91831 #else
91832 # define wsdAutoextInit
91833 # define wsdAutoext sqlite3Autoext
91834 #endif
91838 ** Register a statically linked extension that is automatically
91839 ** loaded by every new database connection.
91841 SQLITE_API int sqlite3_auto_extension(void (*xInit)(void)){
91842 int rc = SQLITE_OK;
91843 #ifndef SQLITE_OMIT_AUTOINIT
91844 rc = sqlite3_initialize();
91845 if( rc ){
91846 return rc;
91847 }else
91848 #endif
91850 int i;
91851 #if SQLITE_THREADSAFE
91852 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
91853 #endif
91854 wsdAutoextInit;
91855 sqlite3_mutex_enter(mutex);
91856 for(i=0; i<wsdAutoext.nExt; i++){
91857 if( wsdAutoext.aExt[i]==xInit ) break;
91859 if( i==wsdAutoext.nExt ){
91860 int nByte = (wsdAutoext.nExt+1)*sizeof(wsdAutoext.aExt[0]);
91861 void (**aNew)(void);
91862 aNew = sqlite3_realloc(wsdAutoext.aExt, nByte);
91863 if( aNew==0 ){
91864 rc = SQLITE_NOMEM;
91865 }else{
91866 wsdAutoext.aExt = aNew;
91867 wsdAutoext.aExt[wsdAutoext.nExt] = xInit;
91868 wsdAutoext.nExt++;
91871 sqlite3_mutex_leave(mutex);
91872 assert( (rc&0xff)==rc );
91873 return rc;
91878 ** Reset the automatic extension loading mechanism.
91880 SQLITE_API void sqlite3_reset_auto_extension(void){
91881 #ifndef SQLITE_OMIT_AUTOINIT
91882 if( sqlite3_initialize()==SQLITE_OK )
91883 #endif
91885 #if SQLITE_THREADSAFE
91886 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
91887 #endif
91888 wsdAutoextInit;
91889 sqlite3_mutex_enter(mutex);
91890 sqlite3_free(wsdAutoext.aExt);
91891 wsdAutoext.aExt = 0;
91892 wsdAutoext.nExt = 0;
91893 sqlite3_mutex_leave(mutex);
91898 ** Load all automatic extensions.
91900 ** If anything goes wrong, set an error in the database connection.
91902 SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
91903 int i;
91904 int go = 1;
91905 int rc;
91906 int (*xInit)(sqlite3*,char**,const sqlite3_api_routines*);
91908 wsdAutoextInit;
91909 if( wsdAutoext.nExt==0 ){
91910 /* Common case: early out without every having to acquire a mutex */
91911 return;
91913 for(i=0; go; i++){
91914 char *zErrmsg;
91915 #if SQLITE_THREADSAFE
91916 sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
91917 #endif
91918 sqlite3_mutex_enter(mutex);
91919 if( i>=wsdAutoext.nExt ){
91920 xInit = 0;
91921 go = 0;
91922 }else{
91923 xInit = (int(*)(sqlite3*,char**,const sqlite3_api_routines*))
91924 wsdAutoext.aExt[i];
91926 sqlite3_mutex_leave(mutex);
91927 zErrmsg = 0;
91928 if( xInit && (rc = xInit(db, &zErrmsg, &sqlite3Apis))!=0 ){
91929 sqlite3Error(db, rc,
91930 "automatic extension loading failed: %s", zErrmsg);
91931 go = 0;
91933 sqlite3_free(zErrmsg);
91937 /************** End of loadext.c *********************************************/
91938 /************** Begin file pragma.c ******************************************/
91940 ** 2003 April 6
91942 ** The author disclaims copyright to this source code. In place of
91943 ** a legal notice, here is a blessing:
91945 ** May you do good and not evil.
91946 ** May you find forgiveness for yourself and forgive others.
91947 ** May you share freely, never taking more than you give.
91949 *************************************************************************
91950 ** This file contains code used to implement the PRAGMA command.
91954 ** Interpret the given string as a safety level. Return 0 for OFF,
91955 ** 1 for ON or NORMAL and 2 for FULL. Return 1 for an empty or
91956 ** unrecognized string argument.
91958 ** Note that the values returned are one less that the values that
91959 ** should be passed into sqlite3BtreeSetSafetyLevel(). The is done
91960 ** to support legacy SQL code. The safety level used to be boolean
91961 ** and older scripts may have used numbers 0 for OFF and 1 for ON.
91963 static u8 getSafetyLevel(const char *z){
91964 /* 123456789 123456789 */
91965 static const char zText[] = "onoffalseyestruefull";
91966 static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 16};
91967 static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 4};
91968 static const u8 iValue[] = {1, 0, 0, 0, 1, 1, 2};
91969 int i, n;
91970 if( sqlite3Isdigit(*z) ){
91971 return (u8)sqlite3Atoi(z);
91973 n = sqlite3Strlen30(z);
91974 for(i=0; i<ArraySize(iLength); i++){
91975 if( iLength[i]==n && sqlite3StrNICmp(&zText[iOffset[i]],z,n)==0 ){
91976 return iValue[i];
91979 return 1;
91983 ** Interpret the given string as a boolean value.
91985 SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z){
91986 return getSafetyLevel(z)&1;
91989 /* The sqlite3GetBoolean() function is used by other modules but the
91990 ** remainder of this file is specific to PRAGMA processing. So omit
91991 ** the rest of the file if PRAGMAs are omitted from the build.
91993 #if !defined(SQLITE_OMIT_PRAGMA)
91996 ** Interpret the given string as a locking mode value.
91998 static int getLockingMode(const char *z){
91999 if( z ){
92000 if( 0==sqlite3StrICmp(z, "exclusive") ) return PAGER_LOCKINGMODE_EXCLUSIVE;
92001 if( 0==sqlite3StrICmp(z, "normal") ) return PAGER_LOCKINGMODE_NORMAL;
92003 return PAGER_LOCKINGMODE_QUERY;
92006 #ifndef SQLITE_OMIT_AUTOVACUUM
92008 ** Interpret the given string as an auto-vacuum mode value.
92010 ** The following strings, "none", "full" and "incremental" are
92011 ** acceptable, as are their numeric equivalents: 0, 1 and 2 respectively.
92013 static int getAutoVacuum(const char *z){
92014 int i;
92015 if( 0==sqlite3StrICmp(z, "none") ) return BTREE_AUTOVACUUM_NONE;
92016 if( 0==sqlite3StrICmp(z, "full") ) return BTREE_AUTOVACUUM_FULL;
92017 if( 0==sqlite3StrICmp(z, "incremental") ) return BTREE_AUTOVACUUM_INCR;
92018 i = sqlite3Atoi(z);
92019 return (u8)((i>=0&&i<=2)?i:0);
92021 #endif /* ifndef SQLITE_OMIT_AUTOVACUUM */
92023 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92025 ** Interpret the given string as a temp db location. Return 1 for file
92026 ** backed temporary databases, 2 for the Red-Black tree in memory database
92027 ** and 0 to use the compile-time default.
92029 static int getTempStore(const char *z){
92030 if( z[0]>='0' && z[0]<='2' ){
92031 return z[0] - '0';
92032 }else if( sqlite3StrICmp(z, "file")==0 ){
92033 return 1;
92034 }else if( sqlite3StrICmp(z, "memory")==0 ){
92035 return 2;
92036 }else{
92037 return 0;
92040 #endif /* SQLITE_PAGER_PRAGMAS */
92042 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92044 ** Invalidate temp storage, either when the temp storage is changed
92045 ** from default, or when 'file' and the temp_store_directory has changed
92047 static int invalidateTempStorage(Parse *pParse){
92048 sqlite3 *db = pParse->db;
92049 if( db->aDb[1].pBt!=0 ){
92050 if( !db->autoCommit || sqlite3BtreeIsInReadTrans(db->aDb[1].pBt) ){
92051 sqlite3ErrorMsg(pParse, "temporary storage cannot be changed "
92052 "from within a transaction");
92053 return SQLITE_ERROR;
92055 sqlite3BtreeClose(db->aDb[1].pBt);
92056 db->aDb[1].pBt = 0;
92057 sqlite3ResetInternalSchema(db, -1);
92059 return SQLITE_OK;
92061 #endif /* SQLITE_PAGER_PRAGMAS */
92063 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92065 ** If the TEMP database is open, close it and mark the database schema
92066 ** as needing reloading. This must be done when using the SQLITE_TEMP_STORE
92067 ** or DEFAULT_TEMP_STORE pragmas.
92069 static int changeTempStorage(Parse *pParse, const char *zStorageType){
92070 int ts = getTempStore(zStorageType);
92071 sqlite3 *db = pParse->db;
92072 if( db->temp_store==ts ) return SQLITE_OK;
92073 if( invalidateTempStorage( pParse ) != SQLITE_OK ){
92074 return SQLITE_ERROR;
92076 db->temp_store = (u8)ts;
92077 return SQLITE_OK;
92079 #endif /* SQLITE_PAGER_PRAGMAS */
92082 ** Generate code to return a single integer value.
92084 static void returnSingleInt(Parse *pParse, const char *zLabel, i64 value){
92085 Vdbe *v = sqlite3GetVdbe(pParse);
92086 int mem = ++pParse->nMem;
92087 i64 *pI64 = sqlite3DbMallocRaw(pParse->db, sizeof(value));
92088 if( pI64 ){
92089 memcpy(pI64, &value, sizeof(value));
92091 sqlite3VdbeAddOp4(v, OP_Int64, 0, mem, 0, (char*)pI64, P4_INT64);
92092 sqlite3VdbeSetNumCols(v, 1);
92093 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLabel, SQLITE_STATIC);
92094 sqlite3VdbeAddOp2(v, OP_ResultRow, mem, 1);
92097 #ifndef SQLITE_OMIT_FLAG_PRAGMAS
92099 ** Check to see if zRight and zLeft refer to a pragma that queries
92100 ** or changes one of the flags in db->flags. Return 1 if so and 0 if not.
92101 ** Also, implement the pragma.
92103 static int flagPragma(Parse *pParse, const char *zLeft, const char *zRight){
92104 static const struct sPragmaType {
92105 const char *zName; /* Name of the pragma */
92106 int mask; /* Mask for the db->flags value */
92107 } aPragma[] = {
92108 { "full_column_names", SQLITE_FullColNames },
92109 { "short_column_names", SQLITE_ShortColNames },
92110 { "count_changes", SQLITE_CountRows },
92111 { "empty_result_callbacks", SQLITE_NullCallback },
92112 { "legacy_file_format", SQLITE_LegacyFileFmt },
92113 { "fullfsync", SQLITE_FullFSync },
92114 { "checkpoint_fullfsync", SQLITE_CkptFullFSync },
92115 { "reverse_unordered_selects", SQLITE_ReverseOrder },
92116 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
92117 { "automatic_index", SQLITE_AutoIndex },
92118 #endif
92119 #ifdef SQLITE_DEBUG
92120 { "sql_trace", SQLITE_SqlTrace },
92121 { "vdbe_listing", SQLITE_VdbeListing },
92122 { "vdbe_trace", SQLITE_VdbeTrace },
92123 #endif
92124 #ifndef SQLITE_OMIT_CHECK
92125 { "ignore_check_constraints", SQLITE_IgnoreChecks },
92126 #endif
92127 /* The following is VERY experimental */
92128 { "writable_schema", SQLITE_WriteSchema|SQLITE_RecoveryMode },
92129 { "omit_readlock", SQLITE_NoReadlock },
92131 /* TODO: Maybe it shouldn't be possible to change the ReadUncommitted
92132 ** flag if there are any active statements. */
92133 { "read_uncommitted", SQLITE_ReadUncommitted },
92134 { "recursive_triggers", SQLITE_RecTriggers },
92136 /* This flag may only be set if both foreign-key and trigger support
92137 ** are present in the build. */
92138 #if !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
92139 { "foreign_keys", SQLITE_ForeignKeys },
92140 #endif
92142 int i;
92143 const struct sPragmaType *p;
92144 for(i=0, p=aPragma; i<ArraySize(aPragma); i++, p++){
92145 if( sqlite3StrICmp(zLeft, p->zName)==0 ){
92146 sqlite3 *db = pParse->db;
92147 Vdbe *v;
92148 v = sqlite3GetVdbe(pParse);
92149 assert( v!=0 ); /* Already allocated by sqlite3Pragma() */
92150 if( ALWAYS(v) ){
92151 if( zRight==0 ){
92152 returnSingleInt(pParse, p->zName, (db->flags & p->mask)!=0 );
92153 }else{
92154 int mask = p->mask; /* Mask of bits to set or clear. */
92155 if( db->autoCommit==0 ){
92156 /* Foreign key support may not be enabled or disabled while not
92157 ** in auto-commit mode. */
92158 mask &= ~(SQLITE_ForeignKeys);
92161 if( sqlite3GetBoolean(zRight) ){
92162 db->flags |= mask;
92163 }else{
92164 db->flags &= ~mask;
92167 /* Many of the flag-pragmas modify the code generated by the SQL
92168 ** compiler (eg. count_changes). So add an opcode to expire all
92169 ** compiled SQL statements after modifying a pragma value.
92171 sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
92175 return 1;
92178 return 0;
92180 #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
92183 ** Return a human-readable name for a constraint resolution action.
92185 #ifndef SQLITE_OMIT_FOREIGN_KEY
92186 static const char *actionName(u8 action){
92187 const char *zName;
92188 switch( action ){
92189 case OE_SetNull: zName = "SET NULL"; break;
92190 case OE_SetDflt: zName = "SET DEFAULT"; break;
92191 case OE_Cascade: zName = "CASCADE"; break;
92192 case OE_Restrict: zName = "RESTRICT"; break;
92193 default: zName = "NO ACTION";
92194 assert( action==OE_None ); break;
92196 return zName;
92198 #endif
92202 ** Parameter eMode must be one of the PAGER_JOURNALMODE_XXX constants
92203 ** defined in pager.h. This function returns the associated lowercase
92204 ** journal-mode name.
92206 SQLITE_PRIVATE const char *sqlite3JournalModename(int eMode){
92207 static char * const azModeName[] = {
92208 "delete", "persist", "off", "truncate", "memory"
92209 #ifndef SQLITE_OMIT_WAL
92210 , "wal"
92211 #endif
92213 assert( PAGER_JOURNALMODE_DELETE==0 );
92214 assert( PAGER_JOURNALMODE_PERSIST==1 );
92215 assert( PAGER_JOURNALMODE_OFF==2 );
92216 assert( PAGER_JOURNALMODE_TRUNCATE==3 );
92217 assert( PAGER_JOURNALMODE_MEMORY==4 );
92218 assert( PAGER_JOURNALMODE_WAL==5 );
92219 assert( eMode>=0 && eMode<=ArraySize(azModeName) );
92221 if( eMode==ArraySize(azModeName) ) return 0;
92222 return azModeName[eMode];
92226 ** Process a pragma statement.
92228 ** Pragmas are of this form:
92230 ** PRAGMA [database.]id [= value]
92232 ** The identifier might also be a string. The value is a string, and
92233 ** identifier, or a number. If minusFlag is true, then the value is
92234 ** a number that was preceded by a minus sign.
92236 ** If the left side is "database.id" then pId1 is the database name
92237 ** and pId2 is the id. If the left side is just "id" then pId1 is the
92238 ** id and pId2 is any empty string.
92240 SQLITE_PRIVATE void sqlite3Pragma(
92241 Parse *pParse,
92242 Token *pId1, /* First part of [database.]id field */
92243 Token *pId2, /* Second part of [database.]id field, or NULL */
92244 Token *pValue, /* Token for <value>, or NULL */
92245 int minusFlag /* True if a '-' sign preceded <value> */
92247 char *zLeft = 0; /* Nul-terminated UTF-8 string <id> */
92248 char *zRight = 0; /* Nul-terminated UTF-8 string <value>, or NULL */
92249 const char *zDb = 0; /* The database name */
92250 Token *pId; /* Pointer to <id> token */
92251 int iDb; /* Database index for <database> */
92252 sqlite3 *db = pParse->db;
92253 Db *pDb;
92254 Vdbe *v = pParse->pVdbe = sqlite3VdbeCreate(db);
92255 if( v==0 ) return;
92256 sqlite3VdbeRunOnlyOnce(v);
92257 pParse->nMem = 2;
92259 /* Interpret the [database.] part of the pragma statement. iDb is the
92260 ** index of the database this pragma is being applied to in db.aDb[]. */
92261 iDb = sqlite3TwoPartName(pParse, pId1, pId2, &pId);
92262 if( iDb<0 ) return;
92263 pDb = &db->aDb[iDb];
92265 /* If the temp database has been explicitly named as part of the
92266 ** pragma, make sure it is open.
92268 if( iDb==1 && sqlite3OpenTempDatabase(pParse) ){
92269 return;
92272 zLeft = sqlite3NameFromToken(db, pId);
92273 if( !zLeft ) return;
92274 if( minusFlag ){
92275 zRight = sqlite3MPrintf(db, "-%T", pValue);
92276 }else{
92277 zRight = sqlite3NameFromToken(db, pValue);
92280 assert( pId2 );
92281 zDb = pId2->n>0 ? pDb->zName : 0;
92282 if( sqlite3AuthCheck(pParse, SQLITE_PRAGMA, zLeft, zRight, zDb) ){
92283 goto pragma_out;
92286 #if !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
92288 ** PRAGMA [database.]default_cache_size
92289 ** PRAGMA [database.]default_cache_size=N
92291 ** The first form reports the current persistent setting for the
92292 ** page cache size. The value returned is the maximum number of
92293 ** pages in the page cache. The second form sets both the current
92294 ** page cache size value and the persistent page cache size value
92295 ** stored in the database file.
92297 ** Older versions of SQLite would set the default cache size to a
92298 ** negative number to indicate synchronous=OFF. These days, synchronous
92299 ** is always on by default regardless of the sign of the default cache
92300 ** size. But continue to take the absolute value of the default cache
92301 ** size of historical compatibility.
92303 if( sqlite3StrICmp(zLeft,"default_cache_size")==0 ){
92304 static const VdbeOpList getCacheSize[] = {
92305 { OP_Transaction, 0, 0, 0}, /* 0 */
92306 { OP_ReadCookie, 0, 1, BTREE_DEFAULT_CACHE_SIZE}, /* 1 */
92307 { OP_IfPos, 1, 7, 0},
92308 { OP_Integer, 0, 2, 0},
92309 { OP_Subtract, 1, 2, 1},
92310 { OP_IfPos, 1, 7, 0},
92311 { OP_Integer, 0, 1, 0}, /* 6 */
92312 { OP_ResultRow, 1, 1, 0},
92314 int addr;
92315 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92316 sqlite3VdbeUsesBtree(v, iDb);
92317 if( !zRight ){
92318 sqlite3VdbeSetNumCols(v, 1);
92319 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cache_size", SQLITE_STATIC);
92320 pParse->nMem += 2;
92321 addr = sqlite3VdbeAddOpList(v, ArraySize(getCacheSize), getCacheSize);
92322 sqlite3VdbeChangeP1(v, addr, iDb);
92323 sqlite3VdbeChangeP1(v, addr+1, iDb);
92324 sqlite3VdbeChangeP1(v, addr+6, SQLITE_DEFAULT_CACHE_SIZE);
92325 }else{
92326 int size = sqlite3AbsInt32(sqlite3Atoi(zRight));
92327 sqlite3BeginWriteOperation(pParse, 0, iDb);
92328 sqlite3VdbeAddOp2(v, OP_Integer, size, 1);
92329 sqlite3VdbeAddOp3(v, OP_SetCookie, iDb, BTREE_DEFAULT_CACHE_SIZE, 1);
92330 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
92331 pDb->pSchema->cache_size = size;
92332 sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
92334 }else
92335 #endif /* !SQLITE_OMIT_PAGER_PRAGMAS && !SQLITE_OMIT_DEPRECATED */
92337 #if !defined(SQLITE_OMIT_PAGER_PRAGMAS)
92339 ** PRAGMA [database.]page_size
92340 ** PRAGMA [database.]page_size=N
92342 ** The first form reports the current setting for the
92343 ** database page size in bytes. The second form sets the
92344 ** database page size value. The value can only be set if
92345 ** the database has not yet been created.
92347 if( sqlite3StrICmp(zLeft,"page_size")==0 ){
92348 Btree *pBt = pDb->pBt;
92349 assert( pBt!=0 );
92350 if( !zRight ){
92351 int size = ALWAYS(pBt) ? sqlite3BtreeGetPageSize(pBt) : 0;
92352 returnSingleInt(pParse, "page_size", size);
92353 }else{
92354 /* Malloc may fail when setting the page-size, as there is an internal
92355 ** buffer that the pager module resizes using sqlite3_realloc().
92357 db->nextPagesize = sqlite3Atoi(zRight);
92358 if( SQLITE_NOMEM==sqlite3BtreeSetPageSize(pBt, db->nextPagesize,-1,0) ){
92359 db->mallocFailed = 1;
92362 }else
92365 ** PRAGMA [database.]secure_delete
92366 ** PRAGMA [database.]secure_delete=ON/OFF
92368 ** The first form reports the current setting for the
92369 ** secure_delete flag. The second form changes the secure_delete
92370 ** flag setting and reports thenew value.
92372 if( sqlite3StrICmp(zLeft,"secure_delete")==0 ){
92373 Btree *pBt = pDb->pBt;
92374 int b = -1;
92375 assert( pBt!=0 );
92376 if( zRight ){
92377 b = sqlite3GetBoolean(zRight);
92379 if( pId2->n==0 && b>=0 ){
92380 int ii;
92381 for(ii=0; ii<db->nDb; ii++){
92382 sqlite3BtreeSecureDelete(db->aDb[ii].pBt, b);
92385 b = sqlite3BtreeSecureDelete(pBt, b);
92386 returnSingleInt(pParse, "secure_delete", b);
92387 }else
92390 ** PRAGMA [database.]max_page_count
92391 ** PRAGMA [database.]max_page_count=N
92393 ** The first form reports the current setting for the
92394 ** maximum number of pages in the database file. The
92395 ** second form attempts to change this setting. Both
92396 ** forms return the current setting.
92398 ** The absolute value of N is used. This is undocumented and might
92399 ** change. The only purpose is to provide an easy way to test
92400 ** the sqlite3AbsInt32() function.
92402 ** PRAGMA [database.]page_count
92404 ** Return the number of pages in the specified database.
92406 if( sqlite3StrICmp(zLeft,"page_count")==0
92407 || sqlite3StrICmp(zLeft,"max_page_count")==0
92409 int iReg;
92410 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92411 sqlite3CodeVerifySchema(pParse, iDb);
92412 iReg = ++pParse->nMem;
92413 if( sqlite3Tolower(zLeft[0])=='p' ){
92414 sqlite3VdbeAddOp2(v, OP_Pagecount, iDb, iReg);
92415 }else{
92416 sqlite3VdbeAddOp3(v, OP_MaxPgcnt, iDb, iReg,
92417 sqlite3AbsInt32(sqlite3Atoi(zRight)));
92419 sqlite3VdbeAddOp2(v, OP_ResultRow, iReg, 1);
92420 sqlite3VdbeSetNumCols(v, 1);
92421 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
92422 }else
92425 ** PRAGMA [database.]locking_mode
92426 ** PRAGMA [database.]locking_mode = (normal|exclusive)
92428 if( sqlite3StrICmp(zLeft,"locking_mode")==0 ){
92429 const char *zRet = "normal";
92430 int eMode = getLockingMode(zRight);
92432 if( pId2->n==0 && eMode==PAGER_LOCKINGMODE_QUERY ){
92433 /* Simple "PRAGMA locking_mode;" statement. This is a query for
92434 ** the current default locking mode (which may be different to
92435 ** the locking-mode of the main database).
92437 eMode = db->dfltLockMode;
92438 }else{
92439 Pager *pPager;
92440 if( pId2->n==0 ){
92441 /* This indicates that no database name was specified as part
92442 ** of the PRAGMA command. In this case the locking-mode must be
92443 ** set on all attached databases, as well as the main db file.
92445 ** Also, the sqlite3.dfltLockMode variable is set so that
92446 ** any subsequently attached databases also use the specified
92447 ** locking mode.
92449 int ii;
92450 assert(pDb==&db->aDb[0]);
92451 for(ii=2; ii<db->nDb; ii++){
92452 pPager = sqlite3BtreePager(db->aDb[ii].pBt);
92453 sqlite3PagerLockingMode(pPager, eMode);
92455 db->dfltLockMode = (u8)eMode;
92457 pPager = sqlite3BtreePager(pDb->pBt);
92458 eMode = sqlite3PagerLockingMode(pPager, eMode);
92461 assert(eMode==PAGER_LOCKINGMODE_NORMAL||eMode==PAGER_LOCKINGMODE_EXCLUSIVE);
92462 if( eMode==PAGER_LOCKINGMODE_EXCLUSIVE ){
92463 zRet = "exclusive";
92465 sqlite3VdbeSetNumCols(v, 1);
92466 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "locking_mode", SQLITE_STATIC);
92467 sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zRet, 0);
92468 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92469 }else
92472 ** PRAGMA [database.]journal_mode
92473 ** PRAGMA [database.]journal_mode =
92474 ** (delete|persist|off|truncate|memory|wal|off)
92476 if( sqlite3StrICmp(zLeft,"journal_mode")==0 ){
92477 int eMode; /* One of the PAGER_JOURNALMODE_XXX symbols */
92478 int ii; /* Loop counter */
92480 /* Force the schema to be loaded on all databases. This causes all
92481 ** database files to be opened and the journal_modes set. This is
92482 ** necessary because subsequent processing must know if the databases
92483 ** are in WAL mode. */
92484 if( sqlite3ReadSchema(pParse) ){
92485 goto pragma_out;
92488 sqlite3VdbeSetNumCols(v, 1);
92489 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "journal_mode", SQLITE_STATIC);
92491 if( zRight==0 ){
92492 /* If there is no "=MODE" part of the pragma, do a query for the
92493 ** current mode */
92494 eMode = PAGER_JOURNALMODE_QUERY;
92495 }else{
92496 const char *zMode;
92497 int n = sqlite3Strlen30(zRight);
92498 for(eMode=0; (zMode = sqlite3JournalModename(eMode))!=0; eMode++){
92499 if( sqlite3StrNICmp(zRight, zMode, n)==0 ) break;
92501 if( !zMode ){
92502 /* If the "=MODE" part does not match any known journal mode,
92503 ** then do a query */
92504 eMode = PAGER_JOURNALMODE_QUERY;
92507 if( eMode==PAGER_JOURNALMODE_QUERY && pId2->n==0 ){
92508 /* Convert "PRAGMA journal_mode" into "PRAGMA main.journal_mode" */
92509 iDb = 0;
92510 pId2->n = 1;
92512 for(ii=db->nDb-1; ii>=0; ii--){
92513 if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){
92514 sqlite3VdbeUsesBtree(v, ii);
92515 sqlite3VdbeAddOp3(v, OP_JournalMode, ii, 1, eMode);
92518 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92519 }else
92522 ** PRAGMA [database.]journal_size_limit
92523 ** PRAGMA [database.]journal_size_limit=N
92525 ** Get or set the size limit on rollback journal files.
92527 if( sqlite3StrICmp(zLeft,"journal_size_limit")==0 ){
92528 Pager *pPager = sqlite3BtreePager(pDb->pBt);
92529 i64 iLimit = -2;
92530 if( zRight ){
92531 sqlite3Atoi64(zRight, &iLimit, 1000000, SQLITE_UTF8);
92532 if( iLimit<-1 ) iLimit = -1;
92534 iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit);
92535 returnSingleInt(pParse, "journal_size_limit", iLimit);
92536 }else
92538 #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
92541 ** PRAGMA [database.]auto_vacuum
92542 ** PRAGMA [database.]auto_vacuum=N
92544 ** Get or set the value of the database 'auto-vacuum' parameter.
92545 ** The value is one of: 0 NONE 1 FULL 2 INCREMENTAL
92547 #ifndef SQLITE_OMIT_AUTOVACUUM
92548 if( sqlite3StrICmp(zLeft,"auto_vacuum")==0 ){
92549 Btree *pBt = pDb->pBt;
92550 assert( pBt!=0 );
92551 if( sqlite3ReadSchema(pParse) ){
92552 goto pragma_out;
92554 if( !zRight ){
92555 int auto_vacuum;
92556 if( ALWAYS(pBt) ){
92557 auto_vacuum = sqlite3BtreeGetAutoVacuum(pBt);
92558 }else{
92559 auto_vacuum = SQLITE_DEFAULT_AUTOVACUUM;
92561 returnSingleInt(pParse, "auto_vacuum", auto_vacuum);
92562 }else{
92563 int eAuto = getAutoVacuum(zRight);
92564 assert( eAuto>=0 && eAuto<=2 );
92565 db->nextAutovac = (u8)eAuto;
92566 if( ALWAYS(eAuto>=0) ){
92567 /* Call SetAutoVacuum() to set initialize the internal auto and
92568 ** incr-vacuum flags. This is required in case this connection
92569 ** creates the database file. It is important that it is created
92570 ** as an auto-vacuum capable db.
92572 int rc = sqlite3BtreeSetAutoVacuum(pBt, eAuto);
92573 if( rc==SQLITE_OK && (eAuto==1 || eAuto==2) ){
92574 /* When setting the auto_vacuum mode to either "full" or
92575 ** "incremental", write the value of meta[6] in the database
92576 ** file. Before writing to meta[6], check that meta[3] indicates
92577 ** that this really is an auto-vacuum capable database.
92579 static const VdbeOpList setMeta6[] = {
92580 { OP_Transaction, 0, 1, 0}, /* 0 */
92581 { OP_ReadCookie, 0, 1, BTREE_LARGEST_ROOT_PAGE},
92582 { OP_If, 1, 0, 0}, /* 2 */
92583 { OP_Halt, SQLITE_OK, OE_Abort, 0}, /* 3 */
92584 { OP_Integer, 0, 1, 0}, /* 4 */
92585 { OP_SetCookie, 0, BTREE_INCR_VACUUM, 1}, /* 5 */
92587 int iAddr;
92588 iAddr = sqlite3VdbeAddOpList(v, ArraySize(setMeta6), setMeta6);
92589 sqlite3VdbeChangeP1(v, iAddr, iDb);
92590 sqlite3VdbeChangeP1(v, iAddr+1, iDb);
92591 sqlite3VdbeChangeP2(v, iAddr+2, iAddr+4);
92592 sqlite3VdbeChangeP1(v, iAddr+4, eAuto-1);
92593 sqlite3VdbeChangeP1(v, iAddr+5, iDb);
92594 sqlite3VdbeUsesBtree(v, iDb);
92598 }else
92599 #endif
92602 ** PRAGMA [database.]incremental_vacuum(N)
92604 ** Do N steps of incremental vacuuming on a database.
92606 #ifndef SQLITE_OMIT_AUTOVACUUM
92607 if( sqlite3StrICmp(zLeft,"incremental_vacuum")==0 ){
92608 int iLimit, addr;
92609 if( sqlite3ReadSchema(pParse) ){
92610 goto pragma_out;
92612 if( zRight==0 || !sqlite3GetInt32(zRight, &iLimit) || iLimit<=0 ){
92613 iLimit = 0x7fffffff;
92615 sqlite3BeginWriteOperation(pParse, 0, iDb);
92616 sqlite3VdbeAddOp2(v, OP_Integer, iLimit, 1);
92617 addr = sqlite3VdbeAddOp1(v, OP_IncrVacuum, iDb);
92618 sqlite3VdbeAddOp1(v, OP_ResultRow, 1);
92619 sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1);
92620 sqlite3VdbeAddOp2(v, OP_IfPos, 1, addr);
92621 sqlite3VdbeJumpHere(v, addr);
92622 }else
92623 #endif
92625 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
92627 ** PRAGMA [database.]cache_size
92628 ** PRAGMA [database.]cache_size=N
92630 ** The first form reports the current local setting for the
92631 ** page cache size. The second form sets the local
92632 ** page cache size value. If N is positive then that is the
92633 ** number of pages in the cache. If N is negative, then the
92634 ** number of pages is adjusted so that the cache uses -N kibibytes
92635 ** of memory.
92637 if( sqlite3StrICmp(zLeft,"cache_size")==0 ){
92638 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92639 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
92640 if( !zRight ){
92641 returnSingleInt(pParse, "cache_size", pDb->pSchema->cache_size);
92642 }else{
92643 int size = sqlite3Atoi(zRight);
92644 pDb->pSchema->cache_size = size;
92645 sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
92647 }else
92650 ** PRAGMA temp_store
92651 ** PRAGMA temp_store = "default"|"memory"|"file"
92653 ** Return or set the local value of the temp_store flag. Changing
92654 ** the local value does not make changes to the disk file and the default
92655 ** value will be restored the next time the database is opened.
92657 ** Note that it is possible for the library compile-time options to
92658 ** override this setting
92660 if( sqlite3StrICmp(zLeft, "temp_store")==0 ){
92661 if( !zRight ){
92662 returnSingleInt(pParse, "temp_store", db->temp_store);
92663 }else{
92664 changeTempStorage(pParse, zRight);
92666 }else
92669 ** PRAGMA temp_store_directory
92670 ** PRAGMA temp_store_directory = ""|"directory_name"
92672 ** Return or set the local value of the temp_store_directory flag. Changing
92673 ** the value sets a specific directory to be used for temporary files.
92674 ** Setting to a null string reverts to the default temporary directory search.
92675 ** If temporary directory is changed, then invalidateTempStorage.
92678 if( sqlite3StrICmp(zLeft, "temp_store_directory")==0 ){
92679 if( !zRight ){
92680 if( sqlite3_temp_directory ){
92681 sqlite3VdbeSetNumCols(v, 1);
92682 sqlite3VdbeSetColName(v, 0, COLNAME_NAME,
92683 "temp_store_directory", SQLITE_STATIC);
92684 sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, sqlite3_temp_directory, 0);
92685 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92687 }else{
92688 #ifndef SQLITE_OMIT_WSD
92689 if( zRight[0] ){
92690 int rc;
92691 int res;
92692 rc = sqlite3OsAccess(db->pVfs, zRight, SQLITE_ACCESS_READWRITE, &res);
92693 if( rc!=SQLITE_OK || res==0 ){
92694 sqlite3ErrorMsg(pParse, "not a writable directory");
92695 goto pragma_out;
92698 if( SQLITE_TEMP_STORE==0
92699 || (SQLITE_TEMP_STORE==1 && db->temp_store<=1)
92700 || (SQLITE_TEMP_STORE==2 && db->temp_store==1)
92702 invalidateTempStorage(pParse);
92704 sqlite3_free(sqlite3_temp_directory);
92705 if( zRight[0] ){
92706 sqlite3_temp_directory = sqlite3_mprintf("%s", zRight);
92707 }else{
92708 sqlite3_temp_directory = 0;
92710 #endif /* SQLITE_OMIT_WSD */
92712 }else
92714 #if !defined(SQLITE_ENABLE_LOCKING_STYLE)
92715 # if defined(__APPLE__)
92716 # define SQLITE_ENABLE_LOCKING_STYLE 1
92717 # else
92718 # define SQLITE_ENABLE_LOCKING_STYLE 0
92719 # endif
92720 #endif
92721 #if SQLITE_ENABLE_LOCKING_STYLE
92723 ** PRAGMA [database.]lock_proxy_file
92724 ** PRAGMA [database.]lock_proxy_file = ":auto:"|"lock_file_path"
92726 ** Return or set the value of the lock_proxy_file flag. Changing
92727 ** the value sets a specific file to be used for database access locks.
92730 if( sqlite3StrICmp(zLeft, "lock_proxy_file")==0 ){
92731 if( !zRight ){
92732 Pager *pPager = sqlite3BtreePager(pDb->pBt);
92733 char *proxy_file_path = NULL;
92734 sqlite3_file *pFile = sqlite3PagerFile(pPager);
92735 sqlite3OsFileControlHint(pFile, SQLITE_GET_LOCKPROXYFILE,
92736 &proxy_file_path);
92738 if( proxy_file_path ){
92739 sqlite3VdbeSetNumCols(v, 1);
92740 sqlite3VdbeSetColName(v, 0, COLNAME_NAME,
92741 "lock_proxy_file", SQLITE_STATIC);
92742 sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, proxy_file_path, 0);
92743 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
92745 }else{
92746 Pager *pPager = sqlite3BtreePager(pDb->pBt);
92747 sqlite3_file *pFile = sqlite3PagerFile(pPager);
92748 int res;
92749 if( zRight[0] ){
92750 res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE,
92751 zRight);
92752 } else {
92753 res=sqlite3OsFileControl(pFile, SQLITE_SET_LOCKPROXYFILE,
92754 NULL);
92756 if( res!=SQLITE_OK ){
92757 sqlite3ErrorMsg(pParse, "failed to set lock proxy file");
92758 goto pragma_out;
92761 }else
92762 #endif /* SQLITE_ENABLE_LOCKING_STYLE */
92765 ** PRAGMA [database.]synchronous
92766 ** PRAGMA [database.]synchronous=OFF|ON|NORMAL|FULL
92768 ** Return or set the local value of the synchronous flag. Changing
92769 ** the local value does not make changes to the disk file and the
92770 ** default value will be restored the next time the database is
92771 ** opened.
92773 if( sqlite3StrICmp(zLeft,"synchronous")==0 ){
92774 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92775 if( !zRight ){
92776 returnSingleInt(pParse, "synchronous", pDb->safety_level-1);
92777 }else{
92778 if( !db->autoCommit ){
92779 sqlite3ErrorMsg(pParse,
92780 "Safety level may not be changed inside a transaction");
92781 }else{
92782 pDb->safety_level = getSafetyLevel(zRight)+1;
92785 }else
92786 #endif /* SQLITE_OMIT_PAGER_PRAGMAS */
92788 #ifndef SQLITE_OMIT_FLAG_PRAGMAS
92789 if( flagPragma(pParse, zLeft, zRight) ){
92790 /* The flagPragma() subroutine also generates any necessary code
92791 ** there is nothing more to do here */
92792 }else
92793 #endif /* SQLITE_OMIT_FLAG_PRAGMAS */
92795 #ifndef SQLITE_OMIT_SCHEMA_PRAGMAS
92797 ** PRAGMA table_info(<table>)
92799 ** Return a single row for each column of the named table. The columns of
92800 ** the returned data set are:
92802 ** cid: Column id (numbered from left to right, starting at 0)
92803 ** name: Column name
92804 ** type: Column declaration type.
92805 ** notnull: True if 'NOT NULL' is part of column declaration
92806 ** dflt_value: The default value for the column, if any.
92808 if( sqlite3StrICmp(zLeft, "table_info")==0 && zRight ){
92809 Table *pTab;
92810 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92811 pTab = sqlite3FindTable(db, zRight, zDb);
92812 if( pTab ){
92813 int i;
92814 int nHidden = 0;
92815 Column *pCol;
92816 sqlite3VdbeSetNumCols(v, 6);
92817 pParse->nMem = 6;
92818 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "cid", SQLITE_STATIC);
92819 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92820 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "type", SQLITE_STATIC);
92821 sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "notnull", SQLITE_STATIC);
92822 sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "dflt_value", SQLITE_STATIC);
92823 sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "pk", SQLITE_STATIC);
92824 sqlite3ViewGetColumnNames(pParse, pTab);
92825 for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
92826 if( IsHiddenColumn(pCol) ){
92827 nHidden++;
92828 continue;
92830 sqlite3VdbeAddOp2(v, OP_Integer, i-nHidden, 1);
92831 sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pCol->zName, 0);
92832 sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
92833 pCol->zType ? pCol->zType : "", 0);
92834 sqlite3VdbeAddOp2(v, OP_Integer, (pCol->notNull ? 1 : 0), 4);
92835 if( pCol->zDflt ){
92836 sqlite3VdbeAddOp4(v, OP_String8, 0, 5, 0, (char*)pCol->zDflt, 0);
92837 }else{
92838 sqlite3VdbeAddOp2(v, OP_Null, 0, 5);
92840 sqlite3VdbeAddOp2(v, OP_Integer, pCol->isPrimKey, 6);
92841 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 6);
92844 }else
92846 if( sqlite3StrICmp(zLeft, "index_info")==0 && zRight ){
92847 Index *pIdx;
92848 Table *pTab;
92849 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92850 pIdx = sqlite3FindIndex(db, zRight, zDb);
92851 if( pIdx ){
92852 int i;
92853 pTab = pIdx->pTable;
92854 sqlite3VdbeSetNumCols(v, 3);
92855 pParse->nMem = 3;
92856 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seqno", SQLITE_STATIC);
92857 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "cid", SQLITE_STATIC);
92858 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "name", SQLITE_STATIC);
92859 for(i=0; i<pIdx->nColumn; i++){
92860 int cnum = pIdx->aiColumn[i];
92861 sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92862 sqlite3VdbeAddOp2(v, OP_Integer, cnum, 2);
92863 assert( pTab->nCol>cnum );
92864 sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pTab->aCol[cnum].zName, 0);
92865 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
92868 }else
92870 if( sqlite3StrICmp(zLeft, "index_list")==0 && zRight ){
92871 Index *pIdx;
92872 Table *pTab;
92873 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92874 pTab = sqlite3FindTable(db, zRight, zDb);
92875 if( pTab ){
92876 v = sqlite3GetVdbe(pParse);
92877 pIdx = pTab->pIndex;
92878 if( pIdx ){
92879 int i = 0;
92880 sqlite3VdbeSetNumCols(v, 3);
92881 pParse->nMem = 3;
92882 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
92883 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92884 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
92885 while(pIdx){
92886 sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92887 sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0);
92888 sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3);
92889 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
92890 ++i;
92891 pIdx = pIdx->pNext;
92895 }else
92897 if( sqlite3StrICmp(zLeft, "database_list")==0 ){
92898 int i;
92899 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92900 sqlite3VdbeSetNumCols(v, 3);
92901 pParse->nMem = 3;
92902 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
92903 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92904 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "file", SQLITE_STATIC);
92905 for(i=0; i<db->nDb; i++){
92906 if( db->aDb[i].pBt==0 ) continue;
92907 assert( db->aDb[i].zName!=0 );
92908 sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92909 sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, db->aDb[i].zName, 0);
92910 sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
92911 sqlite3BtreeGetFilename(db->aDb[i].pBt), 0);
92912 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
92914 }else
92916 if( sqlite3StrICmp(zLeft, "collation_list")==0 ){
92917 int i = 0;
92918 HashElem *p;
92919 sqlite3VdbeSetNumCols(v, 2);
92920 pParse->nMem = 2;
92921 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "seq", SQLITE_STATIC);
92922 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
92923 for(p=sqliteHashFirst(&db->aCollSeq); p; p=sqliteHashNext(p)){
92924 CollSeq *pColl = (CollSeq *)sqliteHashData(p);
92925 sqlite3VdbeAddOp2(v, OP_Integer, i++, 1);
92926 sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pColl->zName, 0);
92927 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
92929 }else
92930 #endif /* SQLITE_OMIT_SCHEMA_PRAGMAS */
92932 #ifndef SQLITE_OMIT_FOREIGN_KEY
92933 if( sqlite3StrICmp(zLeft, "foreign_key_list")==0 && zRight ){
92934 FKey *pFK;
92935 Table *pTab;
92936 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
92937 pTab = sqlite3FindTable(db, zRight, zDb);
92938 if( pTab ){
92939 v = sqlite3GetVdbe(pParse);
92940 pFK = pTab->pFKey;
92941 if( pFK ){
92942 int i = 0;
92943 sqlite3VdbeSetNumCols(v, 8);
92944 pParse->nMem = 8;
92945 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "id", SQLITE_STATIC);
92946 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "seq", SQLITE_STATIC);
92947 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "table", SQLITE_STATIC);
92948 sqlite3VdbeSetColName(v, 3, COLNAME_NAME, "from", SQLITE_STATIC);
92949 sqlite3VdbeSetColName(v, 4, COLNAME_NAME, "to", SQLITE_STATIC);
92950 sqlite3VdbeSetColName(v, 5, COLNAME_NAME, "on_update", SQLITE_STATIC);
92951 sqlite3VdbeSetColName(v, 6, COLNAME_NAME, "on_delete", SQLITE_STATIC);
92952 sqlite3VdbeSetColName(v, 7, COLNAME_NAME, "match", SQLITE_STATIC);
92953 while(pFK){
92954 int j;
92955 for(j=0; j<pFK->nCol; j++){
92956 char *zCol = pFK->aCol[j].zCol;
92957 char *zOnDelete = (char *)actionName(pFK->aAction[0]);
92958 char *zOnUpdate = (char *)actionName(pFK->aAction[1]);
92959 sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
92960 sqlite3VdbeAddOp2(v, OP_Integer, j, 2);
92961 sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, pFK->zTo, 0);
92962 sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0,
92963 pTab->aCol[pFK->aCol[j].iFrom].zName, 0);
92964 sqlite3VdbeAddOp4(v, zCol ? OP_String8 : OP_Null, 0, 5, 0, zCol, 0);
92965 sqlite3VdbeAddOp4(v, OP_String8, 0, 6, 0, zOnUpdate, 0);
92966 sqlite3VdbeAddOp4(v, OP_String8, 0, 7, 0, zOnDelete, 0);
92967 sqlite3VdbeAddOp4(v, OP_String8, 0, 8, 0, "NONE", 0);
92968 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 8);
92970 ++i;
92971 pFK = pFK->pNextFrom;
92975 }else
92976 #endif /* !defined(SQLITE_OMIT_FOREIGN_KEY) */
92978 #ifndef NDEBUG
92979 if( sqlite3StrICmp(zLeft, "parser_trace")==0 ){
92980 if( zRight ){
92981 if( sqlite3GetBoolean(zRight) ){
92982 sqlite3ParserTrace(stderr, "parser: ");
92983 }else{
92984 sqlite3ParserTrace(0, 0);
92987 }else
92988 #endif
92990 /* Reinstall the LIKE and GLOB functions. The variant of LIKE
92991 ** used will be case sensitive or not depending on the RHS.
92993 if( sqlite3StrICmp(zLeft, "case_sensitive_like")==0 ){
92994 if( zRight ){
92995 sqlite3RegisterLikeFunctions(db, sqlite3GetBoolean(zRight));
92997 }else
92999 #ifndef SQLITE_INTEGRITY_CHECK_ERROR_MAX
93000 # define SQLITE_INTEGRITY_CHECK_ERROR_MAX 100
93001 #endif
93003 #ifndef SQLITE_OMIT_INTEGRITY_CHECK
93004 /* Pragma "quick_check" is an experimental reduced version of
93005 ** integrity_check designed to detect most database corruption
93006 ** without most of the overhead of a full integrity-check.
93008 if( sqlite3StrICmp(zLeft, "integrity_check")==0
93009 || sqlite3StrICmp(zLeft, "quick_check")==0
93011 int i, j, addr, mxErr;
93013 /* Code that appears at the end of the integrity check. If no error
93014 ** messages have been generated, output OK. Otherwise output the
93015 ** error message
93017 static const VdbeOpList endCode[] = {
93018 { OP_AddImm, 1, 0, 0}, /* 0 */
93019 { OP_IfNeg, 1, 0, 0}, /* 1 */
93020 { OP_String8, 0, 3, 0}, /* 2 */
93021 { OP_ResultRow, 3, 1, 0},
93024 int isQuick = (sqlite3Tolower(zLeft[0])=='q');
93026 /* Initialize the VDBE program */
93027 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
93028 pParse->nMem = 6;
93029 sqlite3VdbeSetNumCols(v, 1);
93030 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "integrity_check", SQLITE_STATIC);
93032 /* Set the maximum error count */
93033 mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
93034 if( zRight ){
93035 sqlite3GetInt32(zRight, &mxErr);
93036 if( mxErr<=0 ){
93037 mxErr = SQLITE_INTEGRITY_CHECK_ERROR_MAX;
93040 sqlite3VdbeAddOp2(v, OP_Integer, mxErr, 1); /* reg[1] holds errors left */
93042 /* Do an integrity check on each database file */
93043 for(i=0; i<db->nDb; i++){
93044 HashElem *x;
93045 Hash *pTbls;
93046 int cnt = 0;
93048 if( OMIT_TEMPDB && i==1 ) continue;
93050 sqlite3CodeVerifySchema(pParse, i);
93051 addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Halt if out of errors */
93052 sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
93053 sqlite3VdbeJumpHere(v, addr);
93055 /* Do an integrity check of the B-Tree
93057 ** Begin by filling registers 2, 3, ... with the root pages numbers
93058 ** for all tables and indices in the database.
93060 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
93061 pTbls = &db->aDb[i].pSchema->tblHash;
93062 for(x=sqliteHashFirst(pTbls); x; x=sqliteHashNext(x)){
93063 Table *pTab = sqliteHashData(x);
93064 Index *pIdx;
93065 sqlite3VdbeAddOp2(v, OP_Integer, pTab->tnum, 2+cnt);
93066 cnt++;
93067 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
93068 sqlite3VdbeAddOp2(v, OP_Integer, pIdx->tnum, 2+cnt);
93069 cnt++;
93073 /* Make sure sufficient number of registers have been allocated */
93074 if( pParse->nMem < cnt+4 ){
93075 pParse->nMem = cnt+4;
93078 /* Do the b-tree integrity checks */
93079 sqlite3VdbeAddOp3(v, OP_IntegrityCk, 2, cnt, 1);
93080 sqlite3VdbeChangeP5(v, (u8)i);
93081 addr = sqlite3VdbeAddOp1(v, OP_IsNull, 2);
93082 sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
93083 sqlite3MPrintf(db, "*** in database %s ***\n", db->aDb[i].zName),
93084 P4_DYNAMIC);
93085 sqlite3VdbeAddOp3(v, OP_Move, 2, 4, 1);
93086 sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 2);
93087 sqlite3VdbeAddOp2(v, OP_ResultRow, 2, 1);
93088 sqlite3VdbeJumpHere(v, addr);
93090 /* Make sure all the indices are constructed correctly.
93092 for(x=sqliteHashFirst(pTbls); x && !isQuick; x=sqliteHashNext(x)){
93093 Table *pTab = sqliteHashData(x);
93094 Index *pIdx;
93095 int loopTop;
93097 if( pTab->pIndex==0 ) continue;
93098 addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1); /* Stop if out of errors */
93099 sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
93100 sqlite3VdbeJumpHere(v, addr);
93101 sqlite3OpenTableAndIndices(pParse, pTab, 1, OP_OpenRead);
93102 sqlite3VdbeAddOp2(v, OP_Integer, 0, 2); /* reg(2) will count entries */
93103 loopTop = sqlite3VdbeAddOp2(v, OP_Rewind, 1, 0);
93104 sqlite3VdbeAddOp2(v, OP_AddImm, 2, 1); /* increment entry count */
93105 for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
93106 int jmp2;
93107 int r1;
93108 static const VdbeOpList idxErr[] = {
93109 { OP_AddImm, 1, -1, 0},
93110 { OP_String8, 0, 3, 0}, /* 1 */
93111 { OP_Rowid, 1, 4, 0},
93112 { OP_String8, 0, 5, 0}, /* 3 */
93113 { OP_String8, 0, 6, 0}, /* 4 */
93114 { OP_Concat, 4, 3, 3},
93115 { OP_Concat, 5, 3, 3},
93116 { OP_Concat, 6, 3, 3},
93117 { OP_ResultRow, 3, 1, 0},
93118 { OP_IfPos, 1, 0, 0}, /* 9 */
93119 { OP_Halt, 0, 0, 0},
93121 r1 = sqlite3GenerateIndexKey(pParse, pIdx, 1, 3, 0);
93122 jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, j+2, 0, r1, pIdx->nColumn+1);
93123 addr = sqlite3VdbeAddOpList(v, ArraySize(idxErr), idxErr);
93124 sqlite3VdbeChangeP4(v, addr+1, "rowid ", P4_STATIC);
93125 sqlite3VdbeChangeP4(v, addr+3, " missing from index ", P4_STATIC);
93126 sqlite3VdbeChangeP4(v, addr+4, pIdx->zName, P4_TRANSIENT);
93127 sqlite3VdbeJumpHere(v, addr+9);
93128 sqlite3VdbeJumpHere(v, jmp2);
93130 sqlite3VdbeAddOp2(v, OP_Next, 1, loopTop+1);
93131 sqlite3VdbeJumpHere(v, loopTop);
93132 for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
93133 static const VdbeOpList cntIdx[] = {
93134 { OP_Integer, 0, 3, 0},
93135 { OP_Rewind, 0, 0, 0}, /* 1 */
93136 { OP_AddImm, 3, 1, 0},
93137 { OP_Next, 0, 0, 0}, /* 3 */
93138 { OP_Eq, 2, 0, 3}, /* 4 */
93139 { OP_AddImm, 1, -1, 0},
93140 { OP_String8, 0, 2, 0}, /* 6 */
93141 { OP_String8, 0, 3, 0}, /* 7 */
93142 { OP_Concat, 3, 2, 2},
93143 { OP_ResultRow, 2, 1, 0},
93145 addr = sqlite3VdbeAddOp1(v, OP_IfPos, 1);
93146 sqlite3VdbeAddOp2(v, OP_Halt, 0, 0);
93147 sqlite3VdbeJumpHere(v, addr);
93148 addr = sqlite3VdbeAddOpList(v, ArraySize(cntIdx), cntIdx);
93149 sqlite3VdbeChangeP1(v, addr+1, j+2);
93150 sqlite3VdbeChangeP2(v, addr+1, addr+4);
93151 sqlite3VdbeChangeP1(v, addr+3, j+2);
93152 sqlite3VdbeChangeP2(v, addr+3, addr+2);
93153 sqlite3VdbeJumpHere(v, addr+4);
93154 sqlite3VdbeChangeP4(v, addr+6,
93155 "wrong # of entries in index ", P4_STATIC);
93156 sqlite3VdbeChangeP4(v, addr+7, pIdx->zName, P4_TRANSIENT);
93160 addr = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode);
93161 sqlite3VdbeChangeP2(v, addr, -mxErr);
93162 sqlite3VdbeJumpHere(v, addr+1);
93163 sqlite3VdbeChangeP4(v, addr+2, "ok", P4_STATIC);
93164 }else
93165 #endif /* SQLITE_OMIT_INTEGRITY_CHECK */
93167 #ifndef SQLITE_OMIT_UTF16
93169 ** PRAGMA encoding
93170 ** PRAGMA encoding = "utf-8"|"utf-16"|"utf-16le"|"utf-16be"
93172 ** In its first form, this pragma returns the encoding of the main
93173 ** database. If the database is not initialized, it is initialized now.
93175 ** The second form of this pragma is a no-op if the main database file
93176 ** has not already been initialized. In this case it sets the default
93177 ** encoding that will be used for the main database file if a new file
93178 ** is created. If an existing main database file is opened, then the
93179 ** default text encoding for the existing database is used.
93181 ** In all cases new databases created using the ATTACH command are
93182 ** created to use the same default text encoding as the main database. If
93183 ** the main database has not been initialized and/or created when ATTACH
93184 ** is executed, this is done before the ATTACH operation.
93186 ** In the second form this pragma sets the text encoding to be used in
93187 ** new database files created using this database handle. It is only
93188 ** useful if invoked immediately after the main database i
93190 if( sqlite3StrICmp(zLeft, "encoding")==0 ){
93191 static const struct EncName {
93192 char *zName;
93193 u8 enc;
93194 } encnames[] = {
93195 { "UTF8", SQLITE_UTF8 },
93196 { "UTF-8", SQLITE_UTF8 }, /* Must be element [1] */
93197 { "UTF-16le", SQLITE_UTF16LE }, /* Must be element [2] */
93198 { "UTF-16be", SQLITE_UTF16BE }, /* Must be element [3] */
93199 { "UTF16le", SQLITE_UTF16LE },
93200 { "UTF16be", SQLITE_UTF16BE },
93201 { "UTF-16", 0 }, /* SQLITE_UTF16NATIVE */
93202 { "UTF16", 0 }, /* SQLITE_UTF16NATIVE */
93203 { 0, 0 }
93205 const struct EncName *pEnc;
93206 if( !zRight ){ /* "PRAGMA encoding" */
93207 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
93208 sqlite3VdbeSetNumCols(v, 1);
93209 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "encoding", SQLITE_STATIC);
93210 sqlite3VdbeAddOp2(v, OP_String8, 0, 1);
93211 assert( encnames[SQLITE_UTF8].enc==SQLITE_UTF8 );
93212 assert( encnames[SQLITE_UTF16LE].enc==SQLITE_UTF16LE );
93213 assert( encnames[SQLITE_UTF16BE].enc==SQLITE_UTF16BE );
93214 sqlite3VdbeChangeP4(v, -1, encnames[ENC(pParse->db)].zName, P4_STATIC);
93215 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
93216 }else{ /* "PRAGMA encoding = XXX" */
93217 /* Only change the value of sqlite.enc if the database handle is not
93218 ** initialized. If the main database exists, the new sqlite.enc value
93219 ** will be overwritten when the schema is next loaded. If it does not
93220 ** already exists, it will be created to use the new encoding value.
93222 if(
93223 !(DbHasProperty(db, 0, DB_SchemaLoaded)) ||
93224 DbHasProperty(db, 0, DB_Empty)
93226 for(pEnc=&encnames[0]; pEnc->zName; pEnc++){
93227 if( 0==sqlite3StrICmp(zRight, pEnc->zName) ){
93228 ENC(pParse->db) = pEnc->enc ? pEnc->enc : SQLITE_UTF16NATIVE;
93229 break;
93232 if( !pEnc->zName ){
93233 sqlite3ErrorMsg(pParse, "unsupported encoding: %s", zRight);
93237 }else
93238 #endif /* SQLITE_OMIT_UTF16 */
93240 #ifndef SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS
93242 ** PRAGMA [database.]schema_version
93243 ** PRAGMA [database.]schema_version = <integer>
93245 ** PRAGMA [database.]user_version
93246 ** PRAGMA [database.]user_version = <integer>
93248 ** The pragma's schema_version and user_version are used to set or get
93249 ** the value of the schema-version and user-version, respectively. Both
93250 ** the schema-version and the user-version are 32-bit signed integers
93251 ** stored in the database header.
93253 ** The schema-cookie is usually only manipulated internally by SQLite. It
93254 ** is incremented by SQLite whenever the database schema is modified (by
93255 ** creating or dropping a table or index). The schema version is used by
93256 ** SQLite each time a query is executed to ensure that the internal cache
93257 ** of the schema used when compiling the SQL query matches the schema of
93258 ** the database against which the compiled query is actually executed.
93259 ** Subverting this mechanism by using "PRAGMA schema_version" to modify
93260 ** the schema-version is potentially dangerous and may lead to program
93261 ** crashes or database corruption. Use with caution!
93263 ** The user-version is not used internally by SQLite. It may be used by
93264 ** applications for any purpose.
93266 if( sqlite3StrICmp(zLeft, "schema_version")==0
93267 || sqlite3StrICmp(zLeft, "user_version")==0
93268 || sqlite3StrICmp(zLeft, "freelist_count")==0
93270 int iCookie; /* Cookie index. 1 for schema-cookie, 6 for user-cookie. */
93271 sqlite3VdbeUsesBtree(v, iDb);
93272 switch( zLeft[0] ){
93273 case 'f': case 'F':
93274 iCookie = BTREE_FREE_PAGE_COUNT;
93275 break;
93276 case 's': case 'S':
93277 iCookie = BTREE_SCHEMA_VERSION;
93278 break;
93279 default:
93280 iCookie = BTREE_USER_VERSION;
93281 break;
93284 if( zRight && iCookie!=BTREE_FREE_PAGE_COUNT ){
93285 /* Write the specified cookie value */
93286 static const VdbeOpList setCookie[] = {
93287 { OP_Transaction, 0, 1, 0}, /* 0 */
93288 { OP_Integer, 0, 1, 0}, /* 1 */
93289 { OP_SetCookie, 0, 0, 1}, /* 2 */
93291 int addr = sqlite3VdbeAddOpList(v, ArraySize(setCookie), setCookie);
93292 sqlite3VdbeChangeP1(v, addr, iDb);
93293 sqlite3VdbeChangeP1(v, addr+1, sqlite3Atoi(zRight));
93294 sqlite3VdbeChangeP1(v, addr+2, iDb);
93295 sqlite3VdbeChangeP2(v, addr+2, iCookie);
93296 }else{
93297 /* Read the specified cookie value */
93298 static const VdbeOpList readCookie[] = {
93299 { OP_Transaction, 0, 0, 0}, /* 0 */
93300 { OP_ReadCookie, 0, 1, 0}, /* 1 */
93301 { OP_ResultRow, 1, 1, 0}
93303 int addr = sqlite3VdbeAddOpList(v, ArraySize(readCookie), readCookie);
93304 sqlite3VdbeChangeP1(v, addr, iDb);
93305 sqlite3VdbeChangeP1(v, addr+1, iDb);
93306 sqlite3VdbeChangeP3(v, addr+1, iCookie);
93307 sqlite3VdbeSetNumCols(v, 1);
93308 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, zLeft, SQLITE_TRANSIENT);
93310 }else
93311 #endif /* SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS */
93313 #ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
93315 ** PRAGMA compile_options
93317 ** Return the names of all compile-time options used in this build,
93318 ** one option per row.
93320 if( sqlite3StrICmp(zLeft, "compile_options")==0 ){
93321 int i = 0;
93322 const char *zOpt;
93323 sqlite3VdbeSetNumCols(v, 1);
93324 pParse->nMem = 1;
93325 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "compile_option", SQLITE_STATIC);
93326 while( (zOpt = sqlite3_compileoption_get(i++))!=0 ){
93327 sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, zOpt, 0);
93328 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 1);
93330 }else
93331 #endif /* SQLITE_OMIT_COMPILEOPTION_DIAGS */
93333 #ifndef SQLITE_OMIT_WAL
93335 ** PRAGMA [database.]wal_checkpoint = passive|full|restart
93337 ** Checkpoint the database.
93339 if( sqlite3StrICmp(zLeft, "wal_checkpoint")==0 ){
93340 int iBt = (pId2->z?iDb:SQLITE_MAX_ATTACHED);
93341 int eMode = SQLITE_CHECKPOINT_PASSIVE;
93342 if( zRight ){
93343 if( sqlite3StrICmp(zRight, "full")==0 ){
93344 eMode = SQLITE_CHECKPOINT_FULL;
93345 }else if( sqlite3StrICmp(zRight, "restart")==0 ){
93346 eMode = SQLITE_CHECKPOINT_RESTART;
93349 if( sqlite3ReadSchema(pParse) ) goto pragma_out;
93350 sqlite3VdbeSetNumCols(v, 3);
93351 pParse->nMem = 3;
93352 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "busy", SQLITE_STATIC);
93353 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "log", SQLITE_STATIC);
93354 sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "checkpointed", SQLITE_STATIC);
93356 sqlite3VdbeAddOp3(v, OP_Checkpoint, iBt, eMode, 1);
93357 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
93358 }else
93361 ** PRAGMA wal_autocheckpoint
93362 ** PRAGMA wal_autocheckpoint = N
93364 ** Configure a database connection to automatically checkpoint a database
93365 ** after accumulating N frames in the log. Or query for the current value
93366 ** of N.
93368 if( sqlite3StrICmp(zLeft, "wal_autocheckpoint")==0 ){
93369 if( zRight ){
93370 sqlite3_wal_autocheckpoint(db, sqlite3Atoi(zRight));
93372 returnSingleInt(pParse, "wal_autocheckpoint",
93373 db->xWalCallback==sqlite3WalDefaultHook ?
93374 SQLITE_PTR_TO_INT(db->pWalArg) : 0);
93375 }else
93376 #endif
93379 ** PRAGMA shrink_memory
93381 ** This pragma attempts to free as much memory as possible from the
93382 ** current database connection.
93384 if( sqlite3StrICmp(zLeft, "shrink_memory")==0 ){
93385 sqlite3_db_release_memory(db);
93386 }else
93388 #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
93390 ** Report the current state of file logs for all databases
93392 if( sqlite3StrICmp(zLeft, "lock_status")==0 ){
93393 static const char *const azLockName[] = {
93394 "unlocked", "shared", "reserved", "pending", "exclusive"
93396 int i;
93397 sqlite3VdbeSetNumCols(v, 2);
93398 pParse->nMem = 2;
93399 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "database", SQLITE_STATIC);
93400 sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "status", SQLITE_STATIC);
93401 for(i=0; i<db->nDb; i++){
93402 Btree *pBt;
93403 Pager *pPager;
93404 const char *zState = "unknown";
93405 int j;
93406 if( db->aDb[i].zName==0 ) continue;
93407 sqlite3VdbeAddOp4(v, OP_String8, 0, 1, 0, db->aDb[i].zName, P4_STATIC);
93408 pBt = db->aDb[i].pBt;
93409 if( pBt==0 || (pPager = sqlite3BtreePager(pBt))==0 ){
93410 zState = "closed";
93411 }else if( sqlite3_file_control(db, i ? db->aDb[i].zName : 0,
93412 SQLITE_FCNTL_LOCKSTATE, &j)==SQLITE_OK ){
93413 zState = azLockName[j];
93415 sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, zState, P4_STATIC);
93416 sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 2);
93419 }else
93420 #endif
93422 #ifdef SQLITE_HAS_CODEC
93423 if( sqlite3StrICmp(zLeft, "key")==0 && zRight ){
93424 sqlite3_key(db, zRight, sqlite3Strlen30(zRight));
93425 }else
93426 if( sqlite3StrICmp(zLeft, "rekey")==0 && zRight ){
93427 sqlite3_rekey(db, zRight, sqlite3Strlen30(zRight));
93428 }else
93429 if( zRight && (sqlite3StrICmp(zLeft, "hexkey")==0 ||
93430 sqlite3StrICmp(zLeft, "hexrekey")==0) ){
93431 int i, h1, h2;
93432 char zKey[40];
93433 for(i=0; (h1 = zRight[i])!=0 && (h2 = zRight[i+1])!=0; i+=2){
93434 h1 += 9*(1&(h1>>6));
93435 h2 += 9*(1&(h2>>6));
93436 zKey[i/2] = (h2 & 0x0f) | ((h1 & 0xf)<<4);
93438 if( (zLeft[3] & 0xf)==0xb ){
93439 sqlite3_key(db, zKey, i/2);
93440 }else{
93441 sqlite3_rekey(db, zKey, i/2);
93443 }else
93444 #endif
93445 #if defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
93446 if( sqlite3StrICmp(zLeft, "activate_extensions")==0 ){
93447 #ifdef SQLITE_HAS_CODEC
93448 if( sqlite3StrNICmp(zRight, "see-", 4)==0 ){
93449 sqlite3_activate_see(&zRight[4]);
93451 #endif
93452 #ifdef SQLITE_ENABLE_CEROD
93453 if( sqlite3StrNICmp(zRight, "cerod-", 6)==0 ){
93454 sqlite3_activate_cerod(&zRight[6]);
93456 #endif
93457 }else
93458 #endif
93461 {/* Empty ELSE clause */}
93464 ** Reset the safety level, in case the fullfsync flag or synchronous
93465 ** setting changed.
93467 #ifndef SQLITE_OMIT_PAGER_PRAGMAS
93468 if( db->autoCommit ){
93469 sqlite3BtreeSetSafetyLevel(pDb->pBt, pDb->safety_level,
93470 (db->flags&SQLITE_FullFSync)!=0,
93471 (db->flags&SQLITE_CkptFullFSync)!=0);
93473 #endif
93474 pragma_out:
93475 sqlite3DbFree(db, zLeft);
93476 sqlite3DbFree(db, zRight);
93479 #endif /* SQLITE_OMIT_PRAGMA */
93481 /************** End of pragma.c **********************************************/
93482 /************** Begin file prepare.c *****************************************/
93484 ** 2005 May 25
93486 ** The author disclaims copyright to this source code. In place of
93487 ** a legal notice, here is a blessing:
93489 ** May you do good and not evil.
93490 ** May you find forgiveness for yourself and forgive others.
93491 ** May you share freely, never taking more than you give.
93493 *************************************************************************
93494 ** This file contains the implementation of the sqlite3_prepare()
93495 ** interface, and routines that contribute to loading the database schema
93496 ** from disk.
93500 ** Fill the InitData structure with an error message that indicates
93501 ** that the database is corrupt.
93503 static void corruptSchema(
93504 InitData *pData, /* Initialization context */
93505 const char *zObj, /* Object being parsed at the point of error */
93506 const char *zExtra /* Error information */
93508 sqlite3 *db = pData->db;
93509 if( !db->mallocFailed && (db->flags & SQLITE_RecoveryMode)==0 ){
93510 if( zObj==0 ) zObj = "?";
93511 sqlite3SetString(pData->pzErrMsg, db,
93512 "malformed database schema (%s)", zObj);
93513 if( zExtra ){
93514 *pData->pzErrMsg = sqlite3MAppendf(db, *pData->pzErrMsg,
93515 "%s - %s", *pData->pzErrMsg, zExtra);
93518 pData->rc = db->mallocFailed ? SQLITE_NOMEM : SQLITE_CORRUPT_BKPT;
93522 ** This is the callback routine for the code that initializes the
93523 ** database. See sqlite3Init() below for additional information.
93524 ** This routine is also called from the OP_ParseSchema opcode of the VDBE.
93526 ** Each callback contains the following information:
93528 ** argv[0] = name of thing being created
93529 ** argv[1] = root page number for table or index. 0 for trigger or view.
93530 ** argv[2] = SQL text for the CREATE statement.
93533 SQLITE_PRIVATE int sqlite3InitCallback(void *pInit, int argc, char **argv, char **NotUsed){
93534 InitData *pData = (InitData*)pInit;
93535 sqlite3 *db = pData->db;
93536 int iDb = pData->iDb;
93538 assert( argc==3 );
93539 UNUSED_PARAMETER2(NotUsed, argc);
93540 assert( sqlite3_mutex_held(db->mutex) );
93541 DbClearProperty(db, iDb, DB_Empty);
93542 if( db->mallocFailed ){
93543 corruptSchema(pData, argv[0], 0);
93544 return 1;
93547 assert( iDb>=0 && iDb<db->nDb );
93548 if( argv==0 ) return 0; /* Might happen if EMPTY_RESULT_CALLBACKS are on */
93549 if( argv[1]==0 ){
93550 corruptSchema(pData, argv[0], 0);
93551 }else if( argv[2] && argv[2][0] ){
93552 /* Call the parser to process a CREATE TABLE, INDEX or VIEW.
93553 ** But because db->init.busy is set to 1, no VDBE code is generated
93554 ** or executed. All the parser does is build the internal data
93555 ** structures that describe the table, index, or view.
93557 int rc;
93558 sqlite3_stmt *pStmt;
93559 TESTONLY(int rcp); /* Return code from sqlite3_prepare() */
93561 assert( db->init.busy );
93562 db->init.iDb = iDb;
93563 db->init.newTnum = sqlite3Atoi(argv[1]);
93564 db->init.orphanTrigger = 0;
93565 TESTONLY(rcp = ) sqlite3_prepare(db, argv[2], -1, &pStmt, 0);
93566 rc = db->errCode;
93567 assert( (rc&0xFF)==(rcp&0xFF) );
93568 db->init.iDb = 0;
93569 if( SQLITE_OK!=rc ){
93570 if( db->init.orphanTrigger ){
93571 assert( iDb==1 );
93572 }else{
93573 pData->rc = rc;
93574 if( rc==SQLITE_NOMEM ){
93575 db->mallocFailed = 1;
93576 }else if( rc!=SQLITE_INTERRUPT && (rc&0xFF)!=SQLITE_LOCKED ){
93577 corruptSchema(pData, argv[0], sqlite3_errmsg(db));
93581 sqlite3_finalize(pStmt);
93582 }else if( argv[0]==0 ){
93583 corruptSchema(pData, 0, 0);
93584 }else{
93585 /* If the SQL column is blank it means this is an index that
93586 ** was created to be the PRIMARY KEY or to fulfill a UNIQUE
93587 ** constraint for a CREATE TABLE. The index should have already
93588 ** been created when we processed the CREATE TABLE. All we have
93589 ** to do here is record the root page number for that index.
93591 Index *pIndex;
93592 pIndex = sqlite3FindIndex(db, argv[0], db->aDb[iDb].zName);
93593 if( pIndex==0 ){
93594 /* This can occur if there exists an index on a TEMP table which
93595 ** has the same name as another index on a permanent index. Since
93596 ** the permanent table is hidden by the TEMP table, we can also
93597 ** safely ignore the index on the permanent table.
93599 /* Do Nothing */;
93600 }else if( sqlite3GetInt32(argv[1], &pIndex->tnum)==0 ){
93601 corruptSchema(pData, argv[0], "invalid rootpage");
93604 return 0;
93608 ** Attempt to read the database schema and initialize internal
93609 ** data structures for a single database file. The index of the
93610 ** database file is given by iDb. iDb==0 is used for the main
93611 ** database. iDb==1 should never be used. iDb>=2 is used for
93612 ** auxiliary databases. Return one of the SQLITE_ error codes to
93613 ** indicate success or failure.
93615 static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
93616 int rc;
93617 int i;
93618 int size;
93619 Table *pTab;
93620 Db *pDb;
93621 char const *azArg[4];
93622 int meta[5];
93623 InitData initData;
93624 char const *zMasterSchema;
93625 char const *zMasterName;
93626 int openedTransaction = 0;
93629 ** The master database table has a structure like this
93631 static const char master_schema[] =
93632 "CREATE TABLE sqlite_master(\n"
93633 " type text,\n"
93634 " name text,\n"
93635 " tbl_name text,\n"
93636 " rootpage integer,\n"
93637 " sql text\n"
93640 #ifndef SQLITE_OMIT_TEMPDB
93641 static const char temp_master_schema[] =
93642 "CREATE TEMP TABLE sqlite_temp_master(\n"
93643 " type text,\n"
93644 " name text,\n"
93645 " tbl_name text,\n"
93646 " rootpage integer,\n"
93647 " sql text\n"
93650 #else
93651 #define temp_master_schema 0
93652 #endif
93654 assert( iDb>=0 && iDb<db->nDb );
93655 assert( db->aDb[iDb].pSchema );
93656 assert( sqlite3_mutex_held(db->mutex) );
93657 assert( iDb==1 || sqlite3BtreeHoldsMutex(db->aDb[iDb].pBt) );
93659 /* zMasterSchema and zInitScript are set to point at the master schema
93660 ** and initialisation script appropriate for the database being
93661 ** initialised. zMasterName is the name of the master table.
93663 if( !OMIT_TEMPDB && iDb==1 ){
93664 zMasterSchema = temp_master_schema;
93665 }else{
93666 zMasterSchema = master_schema;
93668 zMasterName = SCHEMA_TABLE(iDb);
93670 /* Construct the schema tables. */
93671 azArg[0] = zMasterName;
93672 azArg[1] = "1";
93673 azArg[2] = zMasterSchema;
93674 azArg[3] = 0;
93675 initData.db = db;
93676 initData.iDb = iDb;
93677 initData.rc = SQLITE_OK;
93678 initData.pzErrMsg = pzErrMsg;
93679 sqlite3InitCallback(&initData, 3, (char **)azArg, 0);
93680 if( initData.rc ){
93681 rc = initData.rc;
93682 goto error_out;
93684 pTab = sqlite3FindTable(db, zMasterName, db->aDb[iDb].zName);
93685 if( ALWAYS(pTab) ){
93686 pTab->tabFlags |= TF_Readonly;
93689 /* Create a cursor to hold the database open
93691 pDb = &db->aDb[iDb];
93692 if( pDb->pBt==0 ){
93693 if( !OMIT_TEMPDB && ALWAYS(iDb==1) ){
93694 DbSetProperty(db, 1, DB_SchemaLoaded);
93696 return SQLITE_OK;
93699 /* If there is not already a read-only (or read-write) transaction opened
93700 ** on the b-tree database, open one now. If a transaction is opened, it
93701 ** will be closed before this function returns. */
93702 sqlite3BtreeEnter(pDb->pBt);
93703 if( !sqlite3BtreeIsInReadTrans(pDb->pBt) ){
93704 rc = sqlite3BtreeBeginTrans(pDb->pBt, 0);
93705 if( rc!=SQLITE_OK ){
93706 sqlite3SetString(pzErrMsg, db, "%s", sqlite3ErrStr(rc));
93707 goto initone_error_out;
93709 openedTransaction = 1;
93712 /* Get the database meta information.
93714 ** Meta values are as follows:
93715 ** meta[0] Schema cookie. Changes with each schema change.
93716 ** meta[1] File format of schema layer.
93717 ** meta[2] Size of the page cache.
93718 ** meta[3] Largest rootpage (auto/incr_vacuum mode)
93719 ** meta[4] Db text encoding. 1:UTF-8 2:UTF-16LE 3:UTF-16BE
93720 ** meta[5] User version
93721 ** meta[6] Incremental vacuum mode
93722 ** meta[7] unused
93723 ** meta[8] unused
93724 ** meta[9] unused
93726 ** Note: The #defined SQLITE_UTF* symbols in sqliteInt.h correspond to
93727 ** the possible values of meta[4].
93729 for(i=0; i<ArraySize(meta); i++){
93730 sqlite3BtreeGetMeta(pDb->pBt, i+1, (u32 *)&meta[i]);
93732 pDb->pSchema->schema_cookie = meta[BTREE_SCHEMA_VERSION-1];
93734 /* If opening a non-empty database, check the text encoding. For the
93735 ** main database, set sqlite3.enc to the encoding of the main database.
93736 ** For an attached db, it is an error if the encoding is not the same
93737 ** as sqlite3.enc.
93739 if( meta[BTREE_TEXT_ENCODING-1] ){ /* text encoding */
93740 if( iDb==0 ){
93741 u8 encoding;
93742 /* If opening the main database, set ENC(db). */
93743 encoding = (u8)meta[BTREE_TEXT_ENCODING-1] & 3;
93744 if( encoding==0 ) encoding = SQLITE_UTF8;
93745 ENC(db) = encoding;
93746 db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
93747 }else{
93748 /* If opening an attached database, the encoding much match ENC(db) */
93749 if( meta[BTREE_TEXT_ENCODING-1]!=ENC(db) ){
93750 sqlite3SetString(pzErrMsg, db, "attached databases must use the same"
93751 " text encoding as main database");
93752 rc = SQLITE_ERROR;
93753 goto initone_error_out;
93756 }else{
93757 DbSetProperty(db, iDb, DB_Empty);
93759 pDb->pSchema->enc = ENC(db);
93761 if( pDb->pSchema->cache_size==0 ){
93762 #ifndef SQLITE_OMIT_DEPRECATED
93763 size = sqlite3AbsInt32(meta[BTREE_DEFAULT_CACHE_SIZE-1]);
93764 if( size==0 ){ size = SQLITE_DEFAULT_CACHE_SIZE; }
93765 pDb->pSchema->cache_size = size;
93766 #else
93767 pDb->pSchema->cache_size = SQLITE_DEFAULT_CACHE_SIZE;
93768 #endif
93769 sqlite3BtreeSetCacheSize(pDb->pBt, pDb->pSchema->cache_size);
93773 ** file_format==1 Version 3.0.0.
93774 ** file_format==2 Version 3.1.3. // ALTER TABLE ADD COLUMN
93775 ** file_format==3 Version 3.1.4. // ditto but with non-NULL defaults
93776 ** file_format==4 Version 3.3.0. // DESC indices. Boolean constants
93778 pDb->pSchema->file_format = (u8)meta[BTREE_FILE_FORMAT-1];
93779 if( pDb->pSchema->file_format==0 ){
93780 pDb->pSchema->file_format = 1;
93782 if( pDb->pSchema->file_format>SQLITE_MAX_FILE_FORMAT ){
93783 sqlite3SetString(pzErrMsg, db, "unsupported file format");
93784 rc = SQLITE_ERROR;
93785 goto initone_error_out;
93788 /* Ticket #2804: When we open a database in the newer file format,
93789 ** clear the legacy_file_format pragma flag so that a VACUUM will
93790 ** not downgrade the database and thus invalidate any descending
93791 ** indices that the user might have created.
93793 if( iDb==0 && meta[BTREE_FILE_FORMAT-1]>=4 ){
93794 db->flags &= ~SQLITE_LegacyFileFmt;
93797 /* Read the schema information out of the schema tables
93799 assert( db->init.busy );
93801 char *zSql;
93802 zSql = sqlite3MPrintf(db,
93803 "SELECT name, rootpage, sql FROM '%q'.%s ORDER BY rowid",
93804 db->aDb[iDb].zName, zMasterName);
93805 #ifndef SQLITE_OMIT_AUTHORIZATION
93807 int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
93808 xAuth = db->xAuth;
93809 db->xAuth = 0;
93810 #endif
93811 rc = sqlite3_exec(db, zSql, sqlite3InitCallback, &initData, 0);
93812 #ifndef SQLITE_OMIT_AUTHORIZATION
93813 db->xAuth = xAuth;
93815 #endif
93816 if( rc==SQLITE_OK ) rc = initData.rc;
93817 sqlite3DbFree(db, zSql);
93818 #ifndef SQLITE_OMIT_ANALYZE
93819 if( rc==SQLITE_OK ){
93820 sqlite3AnalysisLoad(db, iDb);
93822 #endif
93824 if( db->mallocFailed ){
93825 rc = SQLITE_NOMEM;
93826 sqlite3ResetInternalSchema(db, -1);
93828 if( rc==SQLITE_OK || (db->flags&SQLITE_RecoveryMode)){
93829 /* Black magic: If the SQLITE_RecoveryMode flag is set, then consider
93830 ** the schema loaded, even if errors occurred. In this situation the
93831 ** current sqlite3_prepare() operation will fail, but the following one
93832 ** will attempt to compile the supplied statement against whatever subset
93833 ** of the schema was loaded before the error occurred. The primary
93834 ** purpose of this is to allow access to the sqlite_master table
93835 ** even when its contents have been corrupted.
93837 DbSetProperty(db, iDb, DB_SchemaLoaded);
93838 rc = SQLITE_OK;
93841 /* Jump here for an error that occurs after successfully allocating
93842 ** curMain and calling sqlite3BtreeEnter(). For an error that occurs
93843 ** before that point, jump to error_out.
93845 initone_error_out:
93846 if( openedTransaction ){
93847 sqlite3BtreeCommit(pDb->pBt);
93849 sqlite3BtreeLeave(pDb->pBt);
93851 error_out:
93852 if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
93853 db->mallocFailed = 1;
93855 return rc;
93859 ** Initialize all database files - the main database file, the file
93860 ** used to store temporary tables, and any additional database files
93861 ** created using ATTACH statements. Return a success code. If an
93862 ** error occurs, write an error message into *pzErrMsg.
93864 ** After a database is initialized, the DB_SchemaLoaded bit is set
93865 ** bit is set in the flags field of the Db structure. If the database
93866 ** file was of zero-length, then the DB_Empty flag is also set.
93868 SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
93869 int i, rc;
93870 int commit_internal = !(db->flags&SQLITE_InternChanges);
93872 assert( sqlite3_mutex_held(db->mutex) );
93873 rc = SQLITE_OK;
93874 db->init.busy = 1;
93875 for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
93876 if( DbHasProperty(db, i, DB_SchemaLoaded) || i==1 ) continue;
93877 rc = sqlite3InitOne(db, i, pzErrMsg);
93878 if( rc ){
93879 sqlite3ResetInternalSchema(db, i);
93883 /* Once all the other databases have been initialised, load the schema
93884 ** for the TEMP database. This is loaded last, as the TEMP database
93885 ** schema may contain references to objects in other databases.
93887 #ifndef SQLITE_OMIT_TEMPDB
93888 if( rc==SQLITE_OK && ALWAYS(db->nDb>1)
93889 && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
93890 rc = sqlite3InitOne(db, 1, pzErrMsg);
93891 if( rc ){
93892 sqlite3ResetInternalSchema(db, 1);
93895 #endif
93897 db->init.busy = 0;
93898 if( rc==SQLITE_OK && commit_internal ){
93899 sqlite3CommitInternalChanges(db);
93902 return rc;
93906 ** This routine is a no-op if the database schema is already initialised.
93907 ** Otherwise, the schema is loaded. An error code is returned.
93909 SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse){
93910 int rc = SQLITE_OK;
93911 sqlite3 *db = pParse->db;
93912 assert( sqlite3_mutex_held(db->mutex) );
93913 if( !db->init.busy ){
93914 rc = sqlite3Init(db, &pParse->zErrMsg);
93916 if( rc!=SQLITE_OK ){
93917 pParse->rc = rc;
93918 pParse->nErr++;
93920 return rc;
93925 ** Check schema cookies in all databases. If any cookie is out
93926 ** of date set pParse->rc to SQLITE_SCHEMA. If all schema cookies
93927 ** make no changes to pParse->rc.
93929 static void schemaIsValid(Parse *pParse){
93930 sqlite3 *db = pParse->db;
93931 int iDb;
93932 int rc;
93933 int cookie;
93935 assert( pParse->checkSchema );
93936 assert( sqlite3_mutex_held(db->mutex) );
93937 for(iDb=0; iDb<db->nDb; iDb++){
93938 int openedTransaction = 0; /* True if a transaction is opened */
93939 Btree *pBt = db->aDb[iDb].pBt; /* Btree database to read cookie from */
93940 if( pBt==0 ) continue;
93942 /* If there is not already a read-only (or read-write) transaction opened
93943 ** on the b-tree database, open one now. If a transaction is opened, it
93944 ** will be closed immediately after reading the meta-value. */
93945 if( !sqlite3BtreeIsInReadTrans(pBt) ){
93946 rc = sqlite3BtreeBeginTrans(pBt, 0);
93947 if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ){
93948 db->mallocFailed = 1;
93950 if( rc!=SQLITE_OK ) return;
93951 openedTransaction = 1;
93954 /* Read the schema cookie from the database. If it does not match the
93955 ** value stored as part of the in-memory schema representation,
93956 ** set Parse.rc to SQLITE_SCHEMA. */
93957 sqlite3BtreeGetMeta(pBt, BTREE_SCHEMA_VERSION, (u32 *)&cookie);
93958 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
93959 if( cookie!=db->aDb[iDb].pSchema->schema_cookie ){
93960 sqlite3ResetInternalSchema(db, iDb);
93961 pParse->rc = SQLITE_SCHEMA;
93964 /* Close the transaction, if one was opened. */
93965 if( openedTransaction ){
93966 sqlite3BtreeCommit(pBt);
93972 ** Convert a schema pointer into the iDb index that indicates
93973 ** which database file in db->aDb[] the schema refers to.
93975 ** If the same database is attached more than once, the first
93976 ** attached database is returned.
93978 SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *pSchema){
93979 int i = -1000000;
93981 /* If pSchema is NULL, then return -1000000. This happens when code in
93982 ** expr.c is trying to resolve a reference to a transient table (i.e. one
93983 ** created by a sub-select). In this case the return value of this
93984 ** function should never be used.
93986 ** We return -1000000 instead of the more usual -1 simply because using
93987 ** -1000000 as the incorrect index into db->aDb[] is much
93988 ** more likely to cause a segfault than -1 (of course there are assert()
93989 ** statements too, but it never hurts to play the odds).
93991 assert( sqlite3_mutex_held(db->mutex) );
93992 if( pSchema ){
93993 for(i=0; ALWAYS(i<db->nDb); i++){
93994 if( db->aDb[i].pSchema==pSchema ){
93995 break;
93998 assert( i>=0 && i<db->nDb );
94000 return i;
94004 ** Compile the UTF-8 encoded SQL statement zSql into a statement handle.
94006 static int sqlite3Prepare(
94007 sqlite3 *db, /* Database handle. */
94008 const char *zSql, /* UTF-8 encoded SQL statement. */
94009 int nBytes, /* Length of zSql in bytes. */
94010 int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */
94011 Vdbe *pReprepare, /* VM being reprepared */
94012 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
94013 const char **pzTail /* OUT: End of parsed string */
94015 Parse *pParse; /* Parsing context */
94016 char *zErrMsg = 0; /* Error message */
94017 int rc = SQLITE_OK; /* Result code */
94018 int i; /* Loop counter */
94020 /* Allocate the parsing context */
94021 pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
94022 if( pParse==0 ){
94023 rc = SQLITE_NOMEM;
94024 goto end_prepare;
94026 pParse->pReprepare = pReprepare;
94027 assert( ppStmt && *ppStmt==0 );
94028 assert( !db->mallocFailed );
94029 assert( sqlite3_mutex_held(db->mutex) );
94031 /* Check to verify that it is possible to get a read lock on all
94032 ** database schemas. The inability to get a read lock indicates that
94033 ** some other database connection is holding a write-lock, which in
94034 ** turn means that the other connection has made uncommitted changes
94035 ** to the schema.
94037 ** Were we to proceed and prepare the statement against the uncommitted
94038 ** schema changes and if those schema changes are subsequently rolled
94039 ** back and different changes are made in their place, then when this
94040 ** prepared statement goes to run the schema cookie would fail to detect
94041 ** the schema change. Disaster would follow.
94043 ** This thread is currently holding mutexes on all Btrees (because
94044 ** of the sqlite3BtreeEnterAll() in sqlite3LockAndPrepare()) so it
94045 ** is not possible for another thread to start a new schema change
94046 ** while this routine is running. Hence, we do not need to hold
94047 ** locks on the schema, we just need to make sure nobody else is
94048 ** holding them.
94050 ** Note that setting READ_UNCOMMITTED overrides most lock detection,
94051 ** but it does *not* override schema lock detection, so this all still
94052 ** works even if READ_UNCOMMITTED is set.
94054 for(i=0; i<db->nDb; i++) {
94055 Btree *pBt = db->aDb[i].pBt;
94056 if( pBt ){
94057 assert( sqlite3BtreeHoldsMutex(pBt) );
94058 rc = sqlite3BtreeSchemaLocked(pBt);
94059 if( rc ){
94060 const char *zDb = db->aDb[i].zName;
94061 sqlite3Error(db, rc, "database schema is locked: %s", zDb);
94062 testcase( db->flags & SQLITE_ReadUncommitted );
94063 goto end_prepare;
94068 sqlite3VtabUnlockList(db);
94070 pParse->db = db;
94071 pParse->nQueryLoop = (double)1;
94072 if( nBytes>=0 && (nBytes==0 || zSql[nBytes-1]!=0) ){
94073 char *zSqlCopy;
94074 int mxLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
94075 testcase( nBytes==mxLen );
94076 testcase( nBytes==mxLen+1 );
94077 if( nBytes>mxLen ){
94078 sqlite3Error(db, SQLITE_TOOBIG, "statement too long");
94079 rc = sqlite3ApiExit(db, SQLITE_TOOBIG);
94080 goto end_prepare;
94082 zSqlCopy = sqlite3DbStrNDup(db, zSql, nBytes);
94083 if( zSqlCopy ){
94084 sqlite3RunParser(pParse, zSqlCopy, &zErrMsg);
94085 sqlite3DbFree(db, zSqlCopy);
94086 pParse->zTail = &zSql[pParse->zTail-zSqlCopy];
94087 }else{
94088 pParse->zTail = &zSql[nBytes];
94090 }else{
94091 sqlite3RunParser(pParse, zSql, &zErrMsg);
94093 assert( 1==(int)pParse->nQueryLoop );
94095 if( db->mallocFailed ){
94096 pParse->rc = SQLITE_NOMEM;
94098 if( pParse->rc==SQLITE_DONE ) pParse->rc = SQLITE_OK;
94099 if( pParse->checkSchema ){
94100 schemaIsValid(pParse);
94102 if( db->mallocFailed ){
94103 pParse->rc = SQLITE_NOMEM;
94105 if( pzTail ){
94106 *pzTail = pParse->zTail;
94108 rc = pParse->rc;
94110 #ifndef SQLITE_OMIT_EXPLAIN
94111 if( rc==SQLITE_OK && pParse->pVdbe && pParse->explain ){
94112 static const char * const azColName[] = {
94113 "addr", "opcode", "p1", "p2", "p3", "p4", "p5", "comment",
94114 "selectid", "order", "from", "detail"
94116 int iFirst, mx;
94117 if( pParse->explain==2 ){
94118 sqlite3VdbeSetNumCols(pParse->pVdbe, 4);
94119 iFirst = 8;
94120 mx = 12;
94121 }else{
94122 sqlite3VdbeSetNumCols(pParse->pVdbe, 8);
94123 iFirst = 0;
94124 mx = 8;
94126 for(i=iFirst; i<mx; i++){
94127 sqlite3VdbeSetColName(pParse->pVdbe, i-iFirst, COLNAME_NAME,
94128 azColName[i], SQLITE_STATIC);
94131 #endif
94133 assert( db->init.busy==0 || saveSqlFlag==0 );
94134 if( db->init.busy==0 ){
94135 Vdbe *pVdbe = pParse->pVdbe;
94136 sqlite3VdbeSetSql(pVdbe, zSql, (int)(pParse->zTail-zSql), saveSqlFlag);
94138 if( pParse->pVdbe && (rc!=SQLITE_OK || db->mallocFailed) ){
94139 sqlite3VdbeFinalize(pParse->pVdbe);
94140 assert(!(*ppStmt));
94141 }else{
94142 *ppStmt = (sqlite3_stmt*)pParse->pVdbe;
94145 if( zErrMsg ){
94146 sqlite3Error(db, rc, "%s", zErrMsg);
94147 sqlite3DbFree(db, zErrMsg);
94148 }else{
94149 sqlite3Error(db, rc, 0);
94152 /* Delete any TriggerPrg structures allocated while parsing this statement. */
94153 while( pParse->pTriggerPrg ){
94154 TriggerPrg *pT = pParse->pTriggerPrg;
94155 pParse->pTriggerPrg = pT->pNext;
94156 sqlite3DbFree(db, pT);
94159 end_prepare:
94161 sqlite3StackFree(db, pParse);
94162 rc = sqlite3ApiExit(db, rc);
94163 assert( (rc&db->errMask)==rc );
94164 return rc;
94166 static int sqlite3LockAndPrepare(
94167 sqlite3 *db, /* Database handle. */
94168 const char *zSql, /* UTF-8 encoded SQL statement. */
94169 int nBytes, /* Length of zSql in bytes. */
94170 int saveSqlFlag, /* True to copy SQL text into the sqlite3_stmt */
94171 Vdbe *pOld, /* VM being reprepared */
94172 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
94173 const char **pzTail /* OUT: End of parsed string */
94175 int rc;
94176 assert( ppStmt!=0 );
94177 *ppStmt = 0;
94178 if( !sqlite3SafetyCheckOk(db) ){
94179 return SQLITE_MISUSE_BKPT;
94181 sqlite3_mutex_enter(db->mutex);
94182 sqlite3BtreeEnterAll(db);
94183 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
94184 if( rc==SQLITE_SCHEMA ){
94185 sqlite3_finalize(*ppStmt);
94186 rc = sqlite3Prepare(db, zSql, nBytes, saveSqlFlag, pOld, ppStmt, pzTail);
94188 sqlite3BtreeLeaveAll(db);
94189 sqlite3_mutex_leave(db->mutex);
94190 return rc;
94194 ** Rerun the compilation of a statement after a schema change.
94196 ** If the statement is successfully recompiled, return SQLITE_OK. Otherwise,
94197 ** if the statement cannot be recompiled because another connection has
94198 ** locked the sqlite3_master table, return SQLITE_LOCKED. If any other error
94199 ** occurs, return SQLITE_SCHEMA.
94201 SQLITE_PRIVATE int sqlite3Reprepare(Vdbe *p){
94202 int rc;
94203 sqlite3_stmt *pNew;
94204 const char *zSql;
94205 sqlite3 *db;
94207 assert( sqlite3_mutex_held(sqlite3VdbeDb(p)->mutex) );
94208 zSql = sqlite3_sql((sqlite3_stmt *)p);
94209 assert( zSql!=0 ); /* Reprepare only called for prepare_v2() statements */
94210 db = sqlite3VdbeDb(p);
94211 assert( sqlite3_mutex_held(db->mutex) );
94212 rc = sqlite3LockAndPrepare(db, zSql, -1, 0, p, &pNew, 0);
94213 if( rc ){
94214 if( rc==SQLITE_NOMEM ){
94215 db->mallocFailed = 1;
94217 assert( pNew==0 );
94218 return rc;
94219 }else{
94220 assert( pNew!=0 );
94222 sqlite3VdbeSwap((Vdbe*)pNew, p);
94223 sqlite3TransferBindings(pNew, (sqlite3_stmt*)p);
94224 sqlite3VdbeResetStepResult((Vdbe*)pNew);
94225 sqlite3VdbeFinalize((Vdbe*)pNew);
94226 return SQLITE_OK;
94231 ** Two versions of the official API. Legacy and new use. In the legacy
94232 ** version, the original SQL text is not saved in the prepared statement
94233 ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
94234 ** sqlite3_step(). In the new version, the original SQL text is retained
94235 ** and the statement is automatically recompiled if an schema change
94236 ** occurs.
94238 SQLITE_API int sqlite3_prepare(
94239 sqlite3 *db, /* Database handle. */
94240 const char *zSql, /* UTF-8 encoded SQL statement. */
94241 int nBytes, /* Length of zSql in bytes. */
94242 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
94243 const char **pzTail /* OUT: End of parsed string */
94245 int rc;
94246 rc = sqlite3LockAndPrepare(db,zSql,nBytes,0,0,ppStmt,pzTail);
94247 assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
94248 return rc;
94250 SQLITE_API int sqlite3_prepare_v2(
94251 sqlite3 *db, /* Database handle. */
94252 const char *zSql, /* UTF-8 encoded SQL statement. */
94253 int nBytes, /* Length of zSql in bytes. */
94254 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
94255 const char **pzTail /* OUT: End of parsed string */
94257 int rc;
94258 rc = sqlite3LockAndPrepare(db,zSql,nBytes,1,0,ppStmt,pzTail);
94259 assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
94260 return rc;
94264 #ifndef SQLITE_OMIT_UTF16
94266 ** Compile the UTF-16 encoded SQL statement zSql into a statement handle.
94268 static int sqlite3Prepare16(
94269 sqlite3 *db, /* Database handle. */
94270 const void *zSql, /* UTF-16 encoded SQL statement. */
94271 int nBytes, /* Length of zSql in bytes. */
94272 int saveSqlFlag, /* True to save SQL text into the sqlite3_stmt */
94273 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
94274 const void **pzTail /* OUT: End of parsed string */
94276 /* This function currently works by first transforming the UTF-16
94277 ** encoded string to UTF-8, then invoking sqlite3_prepare(). The
94278 ** tricky bit is figuring out the pointer to return in *pzTail.
94280 char *zSql8;
94281 const char *zTail8 = 0;
94282 int rc = SQLITE_OK;
94284 assert( ppStmt );
94285 *ppStmt = 0;
94286 if( !sqlite3SafetyCheckOk(db) ){
94287 return SQLITE_MISUSE_BKPT;
94289 sqlite3_mutex_enter(db->mutex);
94290 zSql8 = sqlite3Utf16to8(db, zSql, nBytes, SQLITE_UTF16NATIVE);
94291 if( zSql8 ){
94292 rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8);
94295 if( zTail8 && pzTail ){
94296 /* If sqlite3_prepare returns a tail pointer, we calculate the
94297 ** equivalent pointer into the UTF-16 string by counting the unicode
94298 ** characters between zSql8 and zTail8, and then returning a pointer
94299 ** the same number of characters into the UTF-16 string.
94301 int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8));
94302 *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed);
94304 sqlite3DbFree(db, zSql8);
94305 rc = sqlite3ApiExit(db, rc);
94306 sqlite3_mutex_leave(db->mutex);
94307 return rc;
94311 ** Two versions of the official API. Legacy and new use. In the legacy
94312 ** version, the original SQL text is not saved in the prepared statement
94313 ** and so if a schema change occurs, SQLITE_SCHEMA is returned by
94314 ** sqlite3_step(). In the new version, the original SQL text is retained
94315 ** and the statement is automatically recompiled if an schema change
94316 ** occurs.
94318 SQLITE_API int sqlite3_prepare16(
94319 sqlite3 *db, /* Database handle. */
94320 const void *zSql, /* UTF-16 encoded SQL statement. */
94321 int nBytes, /* Length of zSql in bytes. */
94322 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
94323 const void **pzTail /* OUT: End of parsed string */
94325 int rc;
94326 rc = sqlite3Prepare16(db,zSql,nBytes,0,ppStmt,pzTail);
94327 assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
94328 return rc;
94330 SQLITE_API int sqlite3_prepare16_v2(
94331 sqlite3 *db, /* Database handle. */
94332 const void *zSql, /* UTF-16 encoded SQL statement. */
94333 int nBytes, /* Length of zSql in bytes. */
94334 sqlite3_stmt **ppStmt, /* OUT: A pointer to the prepared statement */
94335 const void **pzTail /* OUT: End of parsed string */
94337 int rc;
94338 rc = sqlite3Prepare16(db,zSql,nBytes,1,ppStmt,pzTail);
94339 assert( rc==SQLITE_OK || ppStmt==0 || *ppStmt==0 ); /* VERIFY: F13021 */
94340 return rc;
94343 #endif /* SQLITE_OMIT_UTF16 */
94345 /************** End of prepare.c *********************************************/
94346 /************** Begin file select.c ******************************************/
94348 ** 2001 September 15
94350 ** The author disclaims copyright to this source code. In place of
94351 ** a legal notice, here is a blessing:
94353 ** May you do good and not evil.
94354 ** May you find forgiveness for yourself and forgive others.
94355 ** May you share freely, never taking more than you give.
94357 *************************************************************************
94358 ** This file contains C code routines that are called by the parser
94359 ** to handle SELECT statements in SQLite.
94364 ** Delete all the content of a Select structure but do not deallocate
94365 ** the select structure itself.
94367 static void clearSelect(sqlite3 *db, Select *p){
94368 sqlite3ExprListDelete(db, p->pEList);
94369 sqlite3SrcListDelete(db, p->pSrc);
94370 sqlite3ExprDelete(db, p->pWhere);
94371 sqlite3ExprListDelete(db, p->pGroupBy);
94372 sqlite3ExprDelete(db, p->pHaving);
94373 sqlite3ExprListDelete(db, p->pOrderBy);
94374 sqlite3SelectDelete(db, p->pPrior);
94375 sqlite3ExprDelete(db, p->pLimit);
94376 sqlite3ExprDelete(db, p->pOffset);
94380 ** Initialize a SelectDest structure.
94382 SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest *pDest, int eDest, int iParm){
94383 pDest->eDest = (u8)eDest;
94384 pDest->iParm = iParm;
94385 pDest->affinity = 0;
94386 pDest->iMem = 0;
94387 pDest->nMem = 0;
94392 ** Allocate a new Select structure and return a pointer to that
94393 ** structure.
94395 SQLITE_PRIVATE Select *sqlite3SelectNew(
94396 Parse *pParse, /* Parsing context */
94397 ExprList *pEList, /* which columns to include in the result */
94398 SrcList *pSrc, /* the FROM clause -- which tables to scan */
94399 Expr *pWhere, /* the WHERE clause */
94400 ExprList *pGroupBy, /* the GROUP BY clause */
94401 Expr *pHaving, /* the HAVING clause */
94402 ExprList *pOrderBy, /* the ORDER BY clause */
94403 int isDistinct, /* true if the DISTINCT keyword is present */
94404 Expr *pLimit, /* LIMIT value. NULL means not used */
94405 Expr *pOffset /* OFFSET value. NULL means no offset */
94407 Select *pNew;
94408 Select standin;
94409 sqlite3 *db = pParse->db;
94410 pNew = sqlite3DbMallocZero(db, sizeof(*pNew) );
94411 assert( db->mallocFailed || !pOffset || pLimit ); /* OFFSET implies LIMIT */
94412 if( pNew==0 ){
94413 assert( db->mallocFailed );
94414 pNew = &standin;
94415 memset(pNew, 0, sizeof(*pNew));
94417 if( pEList==0 ){
94418 pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db,TK_ALL,0));
94420 pNew->pEList = pEList;
94421 pNew->pSrc = pSrc;
94422 pNew->pWhere = pWhere;
94423 pNew->pGroupBy = pGroupBy;
94424 pNew->pHaving = pHaving;
94425 pNew->pOrderBy = pOrderBy;
94426 pNew->selFlags = isDistinct ? SF_Distinct : 0;
94427 pNew->op = TK_SELECT;
94428 pNew->pLimit = pLimit;
94429 pNew->pOffset = pOffset;
94430 assert( pOffset==0 || pLimit!=0 );
94431 pNew->addrOpenEphm[0] = -1;
94432 pNew->addrOpenEphm[1] = -1;
94433 pNew->addrOpenEphm[2] = -1;
94434 if( db->mallocFailed ) {
94435 clearSelect(db, pNew);
94436 if( pNew!=&standin ) sqlite3DbFree(db, pNew);
94437 pNew = 0;
94438 }else{
94439 assert( pNew->pSrc!=0 || pParse->nErr>0 );
94441 assert( pNew!=&standin );
94442 return pNew;
94446 ** Delete the given Select structure and all of its substructures.
94448 SQLITE_PRIVATE void sqlite3SelectDelete(sqlite3 *db, Select *p){
94449 if( p ){
94450 clearSelect(db, p);
94451 sqlite3DbFree(db, p);
94456 ** Given 1 to 3 identifiers preceeding the JOIN keyword, determine the
94457 ** type of join. Return an integer constant that expresses that type
94458 ** in terms of the following bit values:
94460 ** JT_INNER
94461 ** JT_CROSS
94462 ** JT_OUTER
94463 ** JT_NATURAL
94464 ** JT_LEFT
94465 ** JT_RIGHT
94467 ** A full outer join is the combination of JT_LEFT and JT_RIGHT.
94469 ** If an illegal or unsupported join type is seen, then still return
94470 ** a join type, but put an error in the pParse structure.
94472 SQLITE_PRIVATE int sqlite3JoinType(Parse *pParse, Token *pA, Token *pB, Token *pC){
94473 int jointype = 0;
94474 Token *apAll[3];
94475 Token *p;
94476 /* 0123456789 123456789 123456789 123 */
94477 static const char zKeyText[] = "naturaleftouterightfullinnercross";
94478 static const struct {
94479 u8 i; /* Beginning of keyword text in zKeyText[] */
94480 u8 nChar; /* Length of the keyword in characters */
94481 u8 code; /* Join type mask */
94482 } aKeyword[] = {
94483 /* natural */ { 0, 7, JT_NATURAL },
94484 /* left */ { 6, 4, JT_LEFT|JT_OUTER },
94485 /* outer */ { 10, 5, JT_OUTER },
94486 /* right */ { 14, 5, JT_RIGHT|JT_OUTER },
94487 /* full */ { 19, 4, JT_LEFT|JT_RIGHT|JT_OUTER },
94488 /* inner */ { 23, 5, JT_INNER },
94489 /* cross */ { 28, 5, JT_INNER|JT_CROSS },
94491 int i, j;
94492 apAll[0] = pA;
94493 apAll[1] = pB;
94494 apAll[2] = pC;
94495 for(i=0; i<3 && apAll[i]; i++){
94496 p = apAll[i];
94497 for(j=0; j<ArraySize(aKeyword); j++){
94498 if( p->n==aKeyword[j].nChar
94499 && sqlite3StrNICmp((char*)p->z, &zKeyText[aKeyword[j].i], p->n)==0 ){
94500 jointype |= aKeyword[j].code;
94501 break;
94504 testcase( j==0 || j==1 || j==2 || j==3 || j==4 || j==5 || j==6 );
94505 if( j>=ArraySize(aKeyword) ){
94506 jointype |= JT_ERROR;
94507 break;
94511 (jointype & (JT_INNER|JT_OUTER))==(JT_INNER|JT_OUTER) ||
94512 (jointype & JT_ERROR)!=0
94514 const char *zSp = " ";
94515 assert( pB!=0 );
94516 if( pC==0 ){ zSp++; }
94517 sqlite3ErrorMsg(pParse, "unknown or unsupported join type: "
94518 "%T %T%s%T", pA, pB, zSp, pC);
94519 jointype = JT_INNER;
94520 }else if( (jointype & JT_OUTER)!=0
94521 && (jointype & (JT_LEFT|JT_RIGHT))!=JT_LEFT ){
94522 sqlite3ErrorMsg(pParse,
94523 "RIGHT and FULL OUTER JOINs are not currently supported");
94524 jointype = JT_INNER;
94526 return jointype;
94530 ** Return the index of a column in a table. Return -1 if the column
94531 ** is not contained in the table.
94533 static int columnIndex(Table *pTab, const char *zCol){
94534 int i;
94535 for(i=0; i<pTab->nCol; i++){
94536 if( sqlite3StrICmp(pTab->aCol[i].zName, zCol)==0 ) return i;
94538 return -1;
94542 ** Search the first N tables in pSrc, from left to right, looking for a
94543 ** table that has a column named zCol.
94545 ** When found, set *piTab and *piCol to the table index and column index
94546 ** of the matching column and return TRUE.
94548 ** If not found, return FALSE.
94550 static int tableAndColumnIndex(
94551 SrcList *pSrc, /* Array of tables to search */
94552 int N, /* Number of tables in pSrc->a[] to search */
94553 const char *zCol, /* Name of the column we are looking for */
94554 int *piTab, /* Write index of pSrc->a[] here */
94555 int *piCol /* Write index of pSrc->a[*piTab].pTab->aCol[] here */
94557 int i; /* For looping over tables in pSrc */
94558 int iCol; /* Index of column matching zCol */
94560 assert( (piTab==0)==(piCol==0) ); /* Both or neither are NULL */
94561 for(i=0; i<N; i++){
94562 iCol = columnIndex(pSrc->a[i].pTab, zCol);
94563 if( iCol>=0 ){
94564 if( piTab ){
94565 *piTab = i;
94566 *piCol = iCol;
94568 return 1;
94571 return 0;
94575 ** This function is used to add terms implied by JOIN syntax to the
94576 ** WHERE clause expression of a SELECT statement. The new term, which
94577 ** is ANDed with the existing WHERE clause, is of the form:
94579 ** (tab1.col1 = tab2.col2)
94581 ** where tab1 is the iSrc'th table in SrcList pSrc and tab2 is the
94582 ** (iSrc+1)'th. Column col1 is column iColLeft of tab1, and col2 is
94583 ** column iColRight of tab2.
94585 static void addWhereTerm(
94586 Parse *pParse, /* Parsing context */
94587 SrcList *pSrc, /* List of tables in FROM clause */
94588 int iLeft, /* Index of first table to join in pSrc */
94589 int iColLeft, /* Index of column in first table */
94590 int iRight, /* Index of second table in pSrc */
94591 int iColRight, /* Index of column in second table */
94592 int isOuterJoin, /* True if this is an OUTER join */
94593 Expr **ppWhere /* IN/OUT: The WHERE clause to add to */
94595 sqlite3 *db = pParse->db;
94596 Expr *pE1;
94597 Expr *pE2;
94598 Expr *pEq;
94600 assert( iLeft<iRight );
94601 assert( pSrc->nSrc>iRight );
94602 assert( pSrc->a[iLeft].pTab );
94603 assert( pSrc->a[iRight].pTab );
94605 pE1 = sqlite3CreateColumnExpr(db, pSrc, iLeft, iColLeft);
94606 pE2 = sqlite3CreateColumnExpr(db, pSrc, iRight, iColRight);
94608 pEq = sqlite3PExpr(pParse, TK_EQ, pE1, pE2, 0);
94609 if( pEq && isOuterJoin ){
94610 ExprSetProperty(pEq, EP_FromJoin);
94611 assert( !ExprHasAnyProperty(pEq, EP_TokenOnly|EP_Reduced) );
94612 ExprSetIrreducible(pEq);
94613 pEq->iRightJoinTable = (i16)pE2->iTable;
94615 *ppWhere = sqlite3ExprAnd(db, *ppWhere, pEq);
94619 ** Set the EP_FromJoin property on all terms of the given expression.
94620 ** And set the Expr.iRightJoinTable to iTable for every term in the
94621 ** expression.
94623 ** The EP_FromJoin property is used on terms of an expression to tell
94624 ** the LEFT OUTER JOIN processing logic that this term is part of the
94625 ** join restriction specified in the ON or USING clause and not a part
94626 ** of the more general WHERE clause. These terms are moved over to the
94627 ** WHERE clause during join processing but we need to remember that they
94628 ** originated in the ON or USING clause.
94630 ** The Expr.iRightJoinTable tells the WHERE clause processing that the
94631 ** expression depends on table iRightJoinTable even if that table is not
94632 ** explicitly mentioned in the expression. That information is needed
94633 ** for cases like this:
94635 ** SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.b AND t1.x=5
94637 ** The where clause needs to defer the handling of the t1.x=5
94638 ** term until after the t2 loop of the join. In that way, a
94639 ** NULL t2 row will be inserted whenever t1.x!=5. If we do not
94640 ** defer the handling of t1.x=5, it will be processed immediately
94641 ** after the t1 loop and rows with t1.x!=5 will never appear in
94642 ** the output, which is incorrect.
94644 static void setJoinExpr(Expr *p, int iTable){
94645 while( p ){
94646 ExprSetProperty(p, EP_FromJoin);
94647 assert( !ExprHasAnyProperty(p, EP_TokenOnly|EP_Reduced) );
94648 ExprSetIrreducible(p);
94649 p->iRightJoinTable = (i16)iTable;
94650 setJoinExpr(p->pLeft, iTable);
94651 p = p->pRight;
94656 ** This routine processes the join information for a SELECT statement.
94657 ** ON and USING clauses are converted into extra terms of the WHERE clause.
94658 ** NATURAL joins also create extra WHERE clause terms.
94660 ** The terms of a FROM clause are contained in the Select.pSrc structure.
94661 ** The left most table is the first entry in Select.pSrc. The right-most
94662 ** table is the last entry. The join operator is held in the entry to
94663 ** the left. Thus entry 0 contains the join operator for the join between
94664 ** entries 0 and 1. Any ON or USING clauses associated with the join are
94665 ** also attached to the left entry.
94667 ** This routine returns the number of errors encountered.
94669 static int sqliteProcessJoin(Parse *pParse, Select *p){
94670 SrcList *pSrc; /* All tables in the FROM clause */
94671 int i, j; /* Loop counters */
94672 struct SrcList_item *pLeft; /* Left table being joined */
94673 struct SrcList_item *pRight; /* Right table being joined */
94675 pSrc = p->pSrc;
94676 pLeft = &pSrc->a[0];
94677 pRight = &pLeft[1];
94678 for(i=0; i<pSrc->nSrc-1; i++, pRight++, pLeft++){
94679 Table *pLeftTab = pLeft->pTab;
94680 Table *pRightTab = pRight->pTab;
94681 int isOuter;
94683 if( NEVER(pLeftTab==0 || pRightTab==0) ) continue;
94684 isOuter = (pRight->jointype & JT_OUTER)!=0;
94686 /* When the NATURAL keyword is present, add WHERE clause terms for
94687 ** every column that the two tables have in common.
94689 if( pRight->jointype & JT_NATURAL ){
94690 if( pRight->pOn || pRight->pUsing ){
94691 sqlite3ErrorMsg(pParse, "a NATURAL join may not have "
94692 "an ON or USING clause", 0);
94693 return 1;
94695 for(j=0; j<pRightTab->nCol; j++){
94696 char *zName; /* Name of column in the right table */
94697 int iLeft; /* Matching left table */
94698 int iLeftCol; /* Matching column in the left table */
94700 zName = pRightTab->aCol[j].zName;
94701 if( tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol) ){
94702 addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, j,
94703 isOuter, &p->pWhere);
94708 /* Disallow both ON and USING clauses in the same join
94710 if( pRight->pOn && pRight->pUsing ){
94711 sqlite3ErrorMsg(pParse, "cannot have both ON and USING "
94712 "clauses in the same join");
94713 return 1;
94716 /* Add the ON clause to the end of the WHERE clause, connected by
94717 ** an AND operator.
94719 if( pRight->pOn ){
94720 if( isOuter ) setJoinExpr(pRight->pOn, pRight->iCursor);
94721 p->pWhere = sqlite3ExprAnd(pParse->db, p->pWhere, pRight->pOn);
94722 pRight->pOn = 0;
94725 /* Create extra terms on the WHERE clause for each column named
94726 ** in the USING clause. Example: If the two tables to be joined are
94727 ** A and B and the USING clause names X, Y, and Z, then add this
94728 ** to the WHERE clause: A.X=B.X AND A.Y=B.Y AND A.Z=B.Z
94729 ** Report an error if any column mentioned in the USING clause is
94730 ** not contained in both tables to be joined.
94732 if( pRight->pUsing ){
94733 IdList *pList = pRight->pUsing;
94734 for(j=0; j<pList->nId; j++){
94735 char *zName; /* Name of the term in the USING clause */
94736 int iLeft; /* Table on the left with matching column name */
94737 int iLeftCol; /* Column number of matching column on the left */
94738 int iRightCol; /* Column number of matching column on the right */
94740 zName = pList->a[j].zName;
94741 iRightCol = columnIndex(pRightTab, zName);
94742 if( iRightCol<0
94743 || !tableAndColumnIndex(pSrc, i+1, zName, &iLeft, &iLeftCol)
94745 sqlite3ErrorMsg(pParse, "cannot join using column %s - column "
94746 "not present in both tables", zName);
94747 return 1;
94749 addWhereTerm(pParse, pSrc, iLeft, iLeftCol, i+1, iRightCol,
94750 isOuter, &p->pWhere);
94754 return 0;
94758 ** Insert code into "v" that will push the record on the top of the
94759 ** stack into the sorter.
94761 static void pushOntoSorter(
94762 Parse *pParse, /* Parser context */
94763 ExprList *pOrderBy, /* The ORDER BY clause */
94764 Select *pSelect, /* The whole SELECT statement */
94765 int regData /* Register holding data to be sorted */
94767 Vdbe *v = pParse->pVdbe;
94768 int nExpr = pOrderBy->nExpr;
94769 int regBase = sqlite3GetTempRange(pParse, nExpr+2);
94770 int regRecord = sqlite3GetTempReg(pParse);
94771 int op;
94772 sqlite3ExprCacheClear(pParse);
94773 sqlite3ExprCodeExprList(pParse, pOrderBy, regBase, 0);
94774 sqlite3VdbeAddOp2(v, OP_Sequence, pOrderBy->iECursor, regBase+nExpr);
94775 sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1);
94776 sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nExpr + 2, regRecord);
94777 if( pSelect->selFlags & SF_UseSorter ){
94778 op = OP_SorterInsert;
94779 }else{
94780 op = OP_IdxInsert;
94782 sqlite3VdbeAddOp2(v, op, pOrderBy->iECursor, regRecord);
94783 sqlite3ReleaseTempReg(pParse, regRecord);
94784 sqlite3ReleaseTempRange(pParse, regBase, nExpr+2);
94785 if( pSelect->iLimit ){
94786 int addr1, addr2;
94787 int iLimit;
94788 if( pSelect->iOffset ){
94789 iLimit = pSelect->iOffset+1;
94790 }else{
94791 iLimit = pSelect->iLimit;
94793 addr1 = sqlite3VdbeAddOp1(v, OP_IfZero, iLimit);
94794 sqlite3VdbeAddOp2(v, OP_AddImm, iLimit, -1);
94795 addr2 = sqlite3VdbeAddOp0(v, OP_Goto);
94796 sqlite3VdbeJumpHere(v, addr1);
94797 sqlite3VdbeAddOp1(v, OP_Last, pOrderBy->iECursor);
94798 sqlite3VdbeAddOp1(v, OP_Delete, pOrderBy->iECursor);
94799 sqlite3VdbeJumpHere(v, addr2);
94804 ** Add code to implement the OFFSET
94806 static void codeOffset(
94807 Vdbe *v, /* Generate code into this VM */
94808 Select *p, /* The SELECT statement being coded */
94809 int iContinue /* Jump here to skip the current record */
94811 if( p->iOffset && iContinue!=0 ){
94812 int addr;
94813 sqlite3VdbeAddOp2(v, OP_AddImm, p->iOffset, -1);
94814 addr = sqlite3VdbeAddOp1(v, OP_IfNeg, p->iOffset);
94815 sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue);
94816 VdbeComment((v, "skip OFFSET records"));
94817 sqlite3VdbeJumpHere(v, addr);
94822 ** Add code that will check to make sure the N registers starting at iMem
94823 ** form a distinct entry. iTab is a sorting index that holds previously
94824 ** seen combinations of the N values. A new entry is made in iTab
94825 ** if the current N values are new.
94827 ** A jump to addrRepeat is made and the N+1 values are popped from the
94828 ** stack if the top N elements are not distinct.
94830 static void codeDistinct(
94831 Parse *pParse, /* Parsing and code generating context */
94832 int iTab, /* A sorting index used to test for distinctness */
94833 int addrRepeat, /* Jump to here if not distinct */
94834 int N, /* Number of elements */
94835 int iMem /* First element */
94837 Vdbe *v;
94838 int r1;
94840 v = pParse->pVdbe;
94841 r1 = sqlite3GetTempReg(pParse);
94842 sqlite3VdbeAddOp4Int(v, OP_Found, iTab, addrRepeat, iMem, N);
94843 sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1);
94844 sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1);
94845 sqlite3ReleaseTempReg(pParse, r1);
94848 #ifndef SQLITE_OMIT_SUBQUERY
94850 ** Generate an error message when a SELECT is used within a subexpression
94851 ** (example: "a IN (SELECT * FROM table)") but it has more than 1 result
94852 ** column. We do this in a subroutine because the error used to occur
94853 ** in multiple places. (The error only occurs in one place now, but we
94854 ** retain the subroutine to minimize code disruption.)
94856 static int checkForMultiColumnSelectError(
94857 Parse *pParse, /* Parse context. */
94858 SelectDest *pDest, /* Destination of SELECT results */
94859 int nExpr /* Number of result columns returned by SELECT */
94861 int eDest = pDest->eDest;
94862 if( nExpr>1 && (eDest==SRT_Mem || eDest==SRT_Set) ){
94863 sqlite3ErrorMsg(pParse, "only a single result allowed for "
94864 "a SELECT that is part of an expression");
94865 return 1;
94866 }else{
94867 return 0;
94870 #endif
94873 ** This routine generates the code for the inside of the inner loop
94874 ** of a SELECT.
94876 ** If srcTab and nColumn are both zero, then the pEList expressions
94877 ** are evaluated in order to get the data for this row. If nColumn>0
94878 ** then data is pulled from srcTab and pEList is used only to get the
94879 ** datatypes for each column.
94881 static void selectInnerLoop(
94882 Parse *pParse, /* The parser context */
94883 Select *p, /* The complete select statement being coded */
94884 ExprList *pEList, /* List of values being extracted */
94885 int srcTab, /* Pull data from this table */
94886 int nColumn, /* Number of columns in the source table */
94887 ExprList *pOrderBy, /* If not NULL, sort results using this key */
94888 int distinct, /* If >=0, make sure results are distinct */
94889 SelectDest *pDest, /* How to dispose of the results */
94890 int iContinue, /* Jump here to continue with next row */
94891 int iBreak /* Jump here to break out of the inner loop */
94893 Vdbe *v = pParse->pVdbe;
94894 int i;
94895 int hasDistinct; /* True if the DISTINCT keyword is present */
94896 int regResult; /* Start of memory holding result set */
94897 int eDest = pDest->eDest; /* How to dispose of results */
94898 int iParm = pDest->iParm; /* First argument to disposal method */
94899 int nResultCol; /* Number of result columns */
94901 assert( v );
94902 if( NEVER(v==0) ) return;
94903 assert( pEList!=0 );
94904 hasDistinct = distinct>=0;
94905 if( pOrderBy==0 && !hasDistinct ){
94906 codeOffset(v, p, iContinue);
94909 /* Pull the requested columns.
94911 if( nColumn>0 ){
94912 nResultCol = nColumn;
94913 }else{
94914 nResultCol = pEList->nExpr;
94916 if( pDest->iMem==0 ){
94917 pDest->iMem = pParse->nMem+1;
94918 pDest->nMem = nResultCol;
94919 pParse->nMem += nResultCol;
94920 }else{
94921 assert( pDest->nMem==nResultCol );
94923 regResult = pDest->iMem;
94924 if( nColumn>0 ){
94925 for(i=0; i<nColumn; i++){
94926 sqlite3VdbeAddOp3(v, OP_Column, srcTab, i, regResult+i);
94928 }else if( eDest!=SRT_Exists ){
94929 /* If the destination is an EXISTS(...) expression, the actual
94930 ** values returned by the SELECT are not required.
94932 sqlite3ExprCacheClear(pParse);
94933 sqlite3ExprCodeExprList(pParse, pEList, regResult, eDest==SRT_Output);
94935 nColumn = nResultCol;
94937 /* If the DISTINCT keyword was present on the SELECT statement
94938 ** and this row has been seen before, then do not make this row
94939 ** part of the result.
94941 if( hasDistinct ){
94942 assert( pEList!=0 );
94943 assert( pEList->nExpr==nColumn );
94944 codeDistinct(pParse, distinct, iContinue, nColumn, regResult);
94945 if( pOrderBy==0 ){
94946 codeOffset(v, p, iContinue);
94950 switch( eDest ){
94951 /* In this mode, write each query result to the key of the temporary
94952 ** table iParm.
94954 #ifndef SQLITE_OMIT_COMPOUND_SELECT
94955 case SRT_Union: {
94956 int r1;
94957 r1 = sqlite3GetTempReg(pParse);
94958 sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
94959 sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
94960 sqlite3ReleaseTempReg(pParse, r1);
94961 break;
94964 /* Construct a record from the query result, but instead of
94965 ** saving that record, use it as a key to delete elements from
94966 ** the temporary table iParm.
94968 case SRT_Except: {
94969 sqlite3VdbeAddOp3(v, OP_IdxDelete, iParm, regResult, nColumn);
94970 break;
94972 #endif
94974 /* Store the result as data using a unique key.
94976 case SRT_Table:
94977 case SRT_EphemTab: {
94978 int r1 = sqlite3GetTempReg(pParse);
94979 testcase( eDest==SRT_Table );
94980 testcase( eDest==SRT_EphemTab );
94981 sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
94982 if( pOrderBy ){
94983 pushOntoSorter(pParse, pOrderBy, p, r1);
94984 }else{
94985 int r2 = sqlite3GetTempReg(pParse);
94986 sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2);
94987 sqlite3VdbeAddOp3(v, OP_Insert, iParm, r1, r2);
94988 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
94989 sqlite3ReleaseTempReg(pParse, r2);
94991 sqlite3ReleaseTempReg(pParse, r1);
94992 break;
94995 #ifndef SQLITE_OMIT_SUBQUERY
94996 /* If we are creating a set for an "expr IN (SELECT ...)" construct,
94997 ** then there should be a single item on the stack. Write this
94998 ** item into the set table with bogus data.
95000 case SRT_Set: {
95001 assert( nColumn==1 );
95002 p->affinity = sqlite3CompareAffinity(pEList->a[0].pExpr, pDest->affinity);
95003 if( pOrderBy ){
95004 /* At first glance you would think we could optimize out the
95005 ** ORDER BY in this case since the order of entries in the set
95006 ** does not matter. But there might be a LIMIT clause, in which
95007 ** case the order does matter */
95008 pushOntoSorter(pParse, pOrderBy, p, regResult);
95009 }else{
95010 int r1 = sqlite3GetTempReg(pParse);
95011 sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult, 1, r1, &p->affinity, 1);
95012 sqlite3ExprCacheAffinityChange(pParse, regResult, 1);
95013 sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, r1);
95014 sqlite3ReleaseTempReg(pParse, r1);
95016 break;
95019 /* If any row exist in the result set, record that fact and abort.
95021 case SRT_Exists: {
95022 sqlite3VdbeAddOp2(v, OP_Integer, 1, iParm);
95023 /* The LIMIT clause will terminate the loop for us */
95024 break;
95027 /* If this is a scalar select that is part of an expression, then
95028 ** store the results in the appropriate memory cell and break out
95029 ** of the scan loop.
95031 case SRT_Mem: {
95032 assert( nColumn==1 );
95033 if( pOrderBy ){
95034 pushOntoSorter(pParse, pOrderBy, p, regResult);
95035 }else{
95036 sqlite3ExprCodeMove(pParse, regResult, iParm, 1);
95037 /* The LIMIT clause will jump out of the loop for us */
95039 break;
95041 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
95043 /* Send the data to the callback function or to a subroutine. In the
95044 ** case of a subroutine, the subroutine itself is responsible for
95045 ** popping the data from the stack.
95047 case SRT_Coroutine:
95048 case SRT_Output: {
95049 testcase( eDest==SRT_Coroutine );
95050 testcase( eDest==SRT_Output );
95051 if( pOrderBy ){
95052 int r1 = sqlite3GetTempReg(pParse);
95053 sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nColumn, r1);
95054 pushOntoSorter(pParse, pOrderBy, p, r1);
95055 sqlite3ReleaseTempReg(pParse, r1);
95056 }else if( eDest==SRT_Coroutine ){
95057 sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
95058 }else{
95059 sqlite3VdbeAddOp2(v, OP_ResultRow, regResult, nColumn);
95060 sqlite3ExprCacheAffinityChange(pParse, regResult, nColumn);
95062 break;
95065 #if !defined(SQLITE_OMIT_TRIGGER)
95066 /* Discard the results. This is used for SELECT statements inside
95067 ** the body of a TRIGGER. The purpose of such selects is to call
95068 ** user-defined functions that have side effects. We do not care
95069 ** about the actual results of the select.
95071 default: {
95072 assert( eDest==SRT_Discard );
95073 break;
95075 #endif
95078 /* Jump to the end of the loop if the LIMIT is reached. Except, if
95079 ** there is a sorter, in which case the sorter has already limited
95080 ** the output for us.
95082 if( pOrderBy==0 && p->iLimit ){
95083 sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
95088 ** Given an expression list, generate a KeyInfo structure that records
95089 ** the collating sequence for each expression in that expression list.
95091 ** If the ExprList is an ORDER BY or GROUP BY clause then the resulting
95092 ** KeyInfo structure is appropriate for initializing a virtual index to
95093 ** implement that clause. If the ExprList is the result set of a SELECT
95094 ** then the KeyInfo structure is appropriate for initializing a virtual
95095 ** index to implement a DISTINCT test.
95097 ** Space to hold the KeyInfo structure is obtain from malloc. The calling
95098 ** function is responsible for seeing that this structure is eventually
95099 ** freed. Add the KeyInfo structure to the P4 field of an opcode using
95100 ** P4_KEYINFO_HANDOFF is the usual way of dealing with this.
95102 static KeyInfo *keyInfoFromExprList(Parse *pParse, ExprList *pList){
95103 sqlite3 *db = pParse->db;
95104 int nExpr;
95105 KeyInfo *pInfo;
95106 struct ExprList_item *pItem;
95107 int i;
95109 nExpr = pList->nExpr;
95110 pInfo = sqlite3DbMallocZero(db, sizeof(*pInfo) + nExpr*(sizeof(CollSeq*)+1) );
95111 if( pInfo ){
95112 pInfo->aSortOrder = (u8*)&pInfo->aColl[nExpr];
95113 pInfo->nField = (u16)nExpr;
95114 pInfo->enc = ENC(db);
95115 pInfo->db = db;
95116 for(i=0, pItem=pList->a; i<nExpr; i++, pItem++){
95117 CollSeq *pColl;
95118 pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
95119 if( !pColl ){
95120 pColl = db->pDfltColl;
95122 pInfo->aColl[i] = pColl;
95123 pInfo->aSortOrder[i] = pItem->sortOrder;
95126 return pInfo;
95129 #ifndef SQLITE_OMIT_COMPOUND_SELECT
95131 ** Name of the connection operator, used for error messages.
95133 static const char *selectOpName(int id){
95134 char *z;
95135 switch( id ){
95136 case TK_ALL: z = "UNION ALL"; break;
95137 case TK_INTERSECT: z = "INTERSECT"; break;
95138 case TK_EXCEPT: z = "EXCEPT"; break;
95139 default: z = "UNION"; break;
95141 return z;
95143 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
95145 #ifndef SQLITE_OMIT_EXPLAIN
95147 ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
95148 ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
95149 ** where the caption is of the form:
95151 ** "USE TEMP B-TREE FOR xxx"
95153 ** where xxx is one of "DISTINCT", "ORDER BY" or "GROUP BY". Exactly which
95154 ** is determined by the zUsage argument.
95156 static void explainTempTable(Parse *pParse, const char *zUsage){
95157 if( pParse->explain==2 ){
95158 Vdbe *v = pParse->pVdbe;
95159 char *zMsg = sqlite3MPrintf(pParse->db, "USE TEMP B-TREE FOR %s", zUsage);
95160 sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
95165 ** Assign expression b to lvalue a. A second, no-op, version of this macro
95166 ** is provided when SQLITE_OMIT_EXPLAIN is defined. This allows the code
95167 ** in sqlite3Select() to assign values to structure member variables that
95168 ** only exist if SQLITE_OMIT_EXPLAIN is not defined without polluting the
95169 ** code with #ifndef directives.
95171 # define explainSetInteger(a, b) a = b
95173 #else
95174 /* No-op versions of the explainXXX() functions and macros. */
95175 # define explainTempTable(y,z)
95176 # define explainSetInteger(y,z)
95177 #endif
95179 #if !defined(SQLITE_OMIT_EXPLAIN) && !defined(SQLITE_OMIT_COMPOUND_SELECT)
95181 ** Unless an "EXPLAIN QUERY PLAN" command is being processed, this function
95182 ** is a no-op. Otherwise, it adds a single row of output to the EQP result,
95183 ** where the caption is of one of the two forms:
95185 ** "COMPOSITE SUBQUERIES iSub1 and iSub2 (op)"
95186 ** "COMPOSITE SUBQUERIES iSub1 and iSub2 USING TEMP B-TREE (op)"
95188 ** where iSub1 and iSub2 are the integers passed as the corresponding
95189 ** function parameters, and op is the text representation of the parameter
95190 ** of the same name. The parameter "op" must be one of TK_UNION, TK_EXCEPT,
95191 ** TK_INTERSECT or TK_ALL. The first form is used if argument bUseTmp is
95192 ** false, or the second form if it is true.
95194 static void explainComposite(
95195 Parse *pParse, /* Parse context */
95196 int op, /* One of TK_UNION, TK_EXCEPT etc. */
95197 int iSub1, /* Subquery id 1 */
95198 int iSub2, /* Subquery id 2 */
95199 int bUseTmp /* True if a temp table was used */
95201 assert( op==TK_UNION || op==TK_EXCEPT || op==TK_INTERSECT || op==TK_ALL );
95202 if( pParse->explain==2 ){
95203 Vdbe *v = pParse->pVdbe;
95204 char *zMsg = sqlite3MPrintf(
95205 pParse->db, "COMPOUND SUBQUERIES %d AND %d %s(%s)", iSub1, iSub2,
95206 bUseTmp?"USING TEMP B-TREE ":"", selectOpName(op)
95208 sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
95211 #else
95212 /* No-op versions of the explainXXX() functions and macros. */
95213 # define explainComposite(v,w,x,y,z)
95214 #endif
95217 ** If the inner loop was generated using a non-null pOrderBy argument,
95218 ** then the results were placed in a sorter. After the loop is terminated
95219 ** we need to run the sorter and output the results. The following
95220 ** routine generates the code needed to do that.
95222 static void generateSortTail(
95223 Parse *pParse, /* Parsing context */
95224 Select *p, /* The SELECT statement */
95225 Vdbe *v, /* Generate code into this VDBE */
95226 int nColumn, /* Number of columns of data */
95227 SelectDest *pDest /* Write the sorted results here */
95229 int addrBreak = sqlite3VdbeMakeLabel(v); /* Jump here to exit loop */
95230 int addrContinue = sqlite3VdbeMakeLabel(v); /* Jump here for next cycle */
95231 int addr;
95232 int iTab;
95233 int pseudoTab = 0;
95234 ExprList *pOrderBy = p->pOrderBy;
95236 int eDest = pDest->eDest;
95237 int iParm = pDest->iParm;
95239 int regRow;
95240 int regRowid;
95242 iTab = pOrderBy->iECursor;
95243 regRow = sqlite3GetTempReg(pParse);
95244 if( eDest==SRT_Output || eDest==SRT_Coroutine ){
95245 pseudoTab = pParse->nTab++;
95246 sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, regRow, nColumn);
95247 regRowid = 0;
95248 }else{
95249 regRowid = sqlite3GetTempReg(pParse);
95251 if( p->selFlags & SF_UseSorter ){
95252 int regSortOut = ++pParse->nMem;
95253 int ptab2 = pParse->nTab++;
95254 sqlite3VdbeAddOp3(v, OP_OpenPseudo, ptab2, regSortOut, pOrderBy->nExpr+2);
95255 addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
95256 codeOffset(v, p, addrContinue);
95257 sqlite3VdbeAddOp2(v, OP_SorterData, iTab, regSortOut);
95258 sqlite3VdbeAddOp3(v, OP_Column, ptab2, pOrderBy->nExpr+1, regRow);
95259 sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
95260 }else{
95261 addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak);
95262 codeOffset(v, p, addrContinue);
95263 sqlite3VdbeAddOp3(v, OP_Column, iTab, pOrderBy->nExpr+1, regRow);
95265 switch( eDest ){
95266 case SRT_Table:
95267 case SRT_EphemTab: {
95268 testcase( eDest==SRT_Table );
95269 testcase( eDest==SRT_EphemTab );
95270 sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
95271 sqlite3VdbeAddOp3(v, OP_Insert, iParm, regRow, regRowid);
95272 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
95273 break;
95275 #ifndef SQLITE_OMIT_SUBQUERY
95276 case SRT_Set: {
95277 assert( nColumn==1 );
95278 sqlite3VdbeAddOp4(v, OP_MakeRecord, regRow, 1, regRowid, &p->affinity, 1);
95279 sqlite3ExprCacheAffinityChange(pParse, regRow, 1);
95280 sqlite3VdbeAddOp2(v, OP_IdxInsert, iParm, regRowid);
95281 break;
95283 case SRT_Mem: {
95284 assert( nColumn==1 );
95285 sqlite3ExprCodeMove(pParse, regRow, iParm, 1);
95286 /* The LIMIT clause will terminate the loop for us */
95287 break;
95289 #endif
95290 default: {
95291 int i;
95292 assert( eDest==SRT_Output || eDest==SRT_Coroutine );
95293 testcase( eDest==SRT_Output );
95294 testcase( eDest==SRT_Coroutine );
95295 for(i=0; i<nColumn; i++){
95296 assert( regRow!=pDest->iMem+i );
95297 sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iMem+i);
95298 if( i==0 ){
95299 sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
95302 if( eDest==SRT_Output ){
95303 sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iMem, nColumn);
95304 sqlite3ExprCacheAffinityChange(pParse, pDest->iMem, nColumn);
95305 }else{
95306 sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
95308 break;
95311 sqlite3ReleaseTempReg(pParse, regRow);
95312 sqlite3ReleaseTempReg(pParse, regRowid);
95314 /* The bottom of the loop
95316 sqlite3VdbeResolveLabel(v, addrContinue);
95317 if( p->selFlags & SF_UseSorter ){
95318 sqlite3VdbeAddOp2(v, OP_SorterNext, iTab, addr);
95319 }else{
95320 sqlite3VdbeAddOp2(v, OP_Next, iTab, addr);
95322 sqlite3VdbeResolveLabel(v, addrBreak);
95323 if( eDest==SRT_Output || eDest==SRT_Coroutine ){
95324 sqlite3VdbeAddOp2(v, OP_Close, pseudoTab, 0);
95329 ** Return a pointer to a string containing the 'declaration type' of the
95330 ** expression pExpr. The string may be treated as static by the caller.
95332 ** The declaration type is the exact datatype definition extracted from the
95333 ** original CREATE TABLE statement if the expression is a column. The
95334 ** declaration type for a ROWID field is INTEGER. Exactly when an expression
95335 ** is considered a column can be complex in the presence of subqueries. The
95336 ** result-set expression in all of the following SELECT statements is
95337 ** considered a column by this function.
95339 ** SELECT col FROM tbl;
95340 ** SELECT (SELECT col FROM tbl;
95341 ** SELECT (SELECT col FROM tbl);
95342 ** SELECT abc FROM (SELECT col AS abc FROM tbl);
95344 ** The declaration type for any expression other than a column is NULL.
95346 static const char *columnType(
95347 NameContext *pNC,
95348 Expr *pExpr,
95349 const char **pzOriginDb,
95350 const char **pzOriginTab,
95351 const char **pzOriginCol
95353 char const *zType = 0;
95354 char const *zOriginDb = 0;
95355 char const *zOriginTab = 0;
95356 char const *zOriginCol = 0;
95357 int j;
95358 if( NEVER(pExpr==0) || pNC->pSrcList==0 ) return 0;
95360 switch( pExpr->op ){
95361 case TK_AGG_COLUMN:
95362 case TK_COLUMN: {
95363 /* The expression is a column. Locate the table the column is being
95364 ** extracted from in NameContext.pSrcList. This table may be real
95365 ** database table or a subquery.
95367 Table *pTab = 0; /* Table structure column is extracted from */
95368 Select *pS = 0; /* Select the column is extracted from */
95369 int iCol = pExpr->iColumn; /* Index of column in pTab */
95370 testcase( pExpr->op==TK_AGG_COLUMN );
95371 testcase( pExpr->op==TK_COLUMN );
95372 while( pNC && !pTab ){
95373 SrcList *pTabList = pNC->pSrcList;
95374 for(j=0;j<pTabList->nSrc && pTabList->a[j].iCursor!=pExpr->iTable;j++);
95375 if( j<pTabList->nSrc ){
95376 pTab = pTabList->a[j].pTab;
95377 pS = pTabList->a[j].pSelect;
95378 }else{
95379 pNC = pNC->pNext;
95383 if( pTab==0 ){
95384 /* At one time, code such as "SELECT new.x" within a trigger would
95385 ** cause this condition to run. Since then, we have restructured how
95386 ** trigger code is generated and so this condition is no longer
95387 ** possible. However, it can still be true for statements like
95388 ** the following:
95390 ** CREATE TABLE t1(col INTEGER);
95391 ** SELECT (SELECT t1.col) FROM FROM t1;
95393 ** when columnType() is called on the expression "t1.col" in the
95394 ** sub-select. In this case, set the column type to NULL, even
95395 ** though it should really be "INTEGER".
95397 ** This is not a problem, as the column type of "t1.col" is never
95398 ** used. When columnType() is called on the expression
95399 ** "(SELECT t1.col)", the correct type is returned (see the TK_SELECT
95400 ** branch below. */
95401 break;
95404 assert( pTab && pExpr->pTab==pTab );
95405 if( pS ){
95406 /* The "table" is actually a sub-select or a view in the FROM clause
95407 ** of the SELECT statement. Return the declaration type and origin
95408 ** data for the result-set column of the sub-select.
95410 if( iCol>=0 && ALWAYS(iCol<pS->pEList->nExpr) ){
95411 /* If iCol is less than zero, then the expression requests the
95412 ** rowid of the sub-select or view. This expression is legal (see
95413 ** test case misc2.2.2) - it always evaluates to NULL.
95415 NameContext sNC;
95416 Expr *p = pS->pEList->a[iCol].pExpr;
95417 sNC.pSrcList = pS->pSrc;
95418 sNC.pNext = pNC;
95419 sNC.pParse = pNC->pParse;
95420 zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol);
95422 }else if( ALWAYS(pTab->pSchema) ){
95423 /* A real table */
95424 assert( !pS );
95425 if( iCol<0 ) iCol = pTab->iPKey;
95426 assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
95427 if( iCol<0 ){
95428 zType = "INTEGER";
95429 zOriginCol = "rowid";
95430 }else{
95431 zType = pTab->aCol[iCol].zType;
95432 zOriginCol = pTab->aCol[iCol].zName;
95434 zOriginTab = pTab->zName;
95435 if( pNC->pParse ){
95436 int iDb = sqlite3SchemaToIndex(pNC->pParse->db, pTab->pSchema);
95437 zOriginDb = pNC->pParse->db->aDb[iDb].zName;
95440 break;
95442 #ifndef SQLITE_OMIT_SUBQUERY
95443 case TK_SELECT: {
95444 /* The expression is a sub-select. Return the declaration type and
95445 ** origin info for the single column in the result set of the SELECT
95446 ** statement.
95448 NameContext sNC;
95449 Select *pS = pExpr->x.pSelect;
95450 Expr *p = pS->pEList->a[0].pExpr;
95451 assert( ExprHasProperty(pExpr, EP_xIsSelect) );
95452 sNC.pSrcList = pS->pSrc;
95453 sNC.pNext = pNC;
95454 sNC.pParse = pNC->pParse;
95455 zType = columnType(&sNC, p, &zOriginDb, &zOriginTab, &zOriginCol);
95456 break;
95458 #endif
95461 if( pzOriginDb ){
95462 assert( pzOriginTab && pzOriginCol );
95463 *pzOriginDb = zOriginDb;
95464 *pzOriginTab = zOriginTab;
95465 *pzOriginCol = zOriginCol;
95467 return zType;
95471 ** Generate code that will tell the VDBE the declaration types of columns
95472 ** in the result set.
95474 static void generateColumnTypes(
95475 Parse *pParse, /* Parser context */
95476 SrcList *pTabList, /* List of tables */
95477 ExprList *pEList /* Expressions defining the result set */
95479 #ifndef SQLITE_OMIT_DECLTYPE
95480 Vdbe *v = pParse->pVdbe;
95481 int i;
95482 NameContext sNC;
95483 sNC.pSrcList = pTabList;
95484 sNC.pParse = pParse;
95485 for(i=0; i<pEList->nExpr; i++){
95486 Expr *p = pEList->a[i].pExpr;
95487 const char *zType;
95488 #ifdef SQLITE_ENABLE_COLUMN_METADATA
95489 const char *zOrigDb = 0;
95490 const char *zOrigTab = 0;
95491 const char *zOrigCol = 0;
95492 zType = columnType(&sNC, p, &zOrigDb, &zOrigTab, &zOrigCol);
95494 /* The vdbe must make its own copy of the column-type and other
95495 ** column specific strings, in case the schema is reset before this
95496 ** virtual machine is deleted.
95498 sqlite3VdbeSetColName(v, i, COLNAME_DATABASE, zOrigDb, SQLITE_TRANSIENT);
95499 sqlite3VdbeSetColName(v, i, COLNAME_TABLE, zOrigTab, SQLITE_TRANSIENT);
95500 sqlite3VdbeSetColName(v, i, COLNAME_COLUMN, zOrigCol, SQLITE_TRANSIENT);
95501 #else
95502 zType = columnType(&sNC, p, 0, 0, 0);
95503 #endif
95504 sqlite3VdbeSetColName(v, i, COLNAME_DECLTYPE, zType, SQLITE_TRANSIENT);
95506 #endif /* SQLITE_OMIT_DECLTYPE */
95510 ** Generate code that will tell the VDBE the names of columns
95511 ** in the result set. This information is used to provide the
95512 ** azCol[] values in the callback.
95514 static void generateColumnNames(
95515 Parse *pParse, /* Parser context */
95516 SrcList *pTabList, /* List of tables */
95517 ExprList *pEList /* Expressions defining the result set */
95519 Vdbe *v = pParse->pVdbe;
95520 int i, j;
95521 sqlite3 *db = pParse->db;
95522 int fullNames, shortNames;
95524 #ifndef SQLITE_OMIT_EXPLAIN
95525 /* If this is an EXPLAIN, skip this step */
95526 if( pParse->explain ){
95527 return;
95529 #endif
95531 if( pParse->colNamesSet || NEVER(v==0) || db->mallocFailed ) return;
95532 pParse->colNamesSet = 1;
95533 fullNames = (db->flags & SQLITE_FullColNames)!=0;
95534 shortNames = (db->flags & SQLITE_ShortColNames)!=0;
95535 sqlite3VdbeSetNumCols(v, pEList->nExpr);
95536 for(i=0; i<pEList->nExpr; i++){
95537 Expr *p;
95538 p = pEList->a[i].pExpr;
95539 if( NEVER(p==0) ) continue;
95540 if( pEList->a[i].zName ){
95541 char *zName = pEList->a[i].zName;
95542 sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_TRANSIENT);
95543 }else if( (p->op==TK_COLUMN || p->op==TK_AGG_COLUMN) && pTabList ){
95544 Table *pTab;
95545 char *zCol;
95546 int iCol = p->iColumn;
95547 for(j=0; ALWAYS(j<pTabList->nSrc); j++){
95548 if( pTabList->a[j].iCursor==p->iTable ) break;
95550 assert( j<pTabList->nSrc );
95551 pTab = pTabList->a[j].pTab;
95552 if( iCol<0 ) iCol = pTab->iPKey;
95553 assert( iCol==-1 || (iCol>=0 && iCol<pTab->nCol) );
95554 if( iCol<0 ){
95555 zCol = "rowid";
95556 }else{
95557 zCol = pTab->aCol[iCol].zName;
95559 if( !shortNames && !fullNames ){
95560 sqlite3VdbeSetColName(v, i, COLNAME_NAME,
95561 sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
95562 }else if( fullNames ){
95563 char *zName = 0;
95564 zName = sqlite3MPrintf(db, "%s.%s", pTab->zName, zCol);
95565 sqlite3VdbeSetColName(v, i, COLNAME_NAME, zName, SQLITE_DYNAMIC);
95566 }else{
95567 sqlite3VdbeSetColName(v, i, COLNAME_NAME, zCol, SQLITE_TRANSIENT);
95569 }else{
95570 sqlite3VdbeSetColName(v, i, COLNAME_NAME,
95571 sqlite3DbStrDup(db, pEList->a[i].zSpan), SQLITE_DYNAMIC);
95574 generateColumnTypes(pParse, pTabList, pEList);
95578 ** Given a an expression list (which is really the list of expressions
95579 ** that form the result set of a SELECT statement) compute appropriate
95580 ** column names for a table that would hold the expression list.
95582 ** All column names will be unique.
95584 ** Only the column names are computed. Column.zType, Column.zColl,
95585 ** and other fields of Column are zeroed.
95587 ** Return SQLITE_OK on success. If a memory allocation error occurs,
95588 ** store NULL in *paCol and 0 in *pnCol and return SQLITE_NOMEM.
95590 static int selectColumnsFromExprList(
95591 Parse *pParse, /* Parsing context */
95592 ExprList *pEList, /* Expr list from which to derive column names */
95593 int *pnCol, /* Write the number of columns here */
95594 Column **paCol /* Write the new column list here */
95596 sqlite3 *db = pParse->db; /* Database connection */
95597 int i, j; /* Loop counters */
95598 int cnt; /* Index added to make the name unique */
95599 Column *aCol, *pCol; /* For looping over result columns */
95600 int nCol; /* Number of columns in the result set */
95601 Expr *p; /* Expression for a single result column */
95602 char *zName; /* Column name */
95603 int nName; /* Size of name in zName[] */
95605 *pnCol = nCol = pEList->nExpr;
95606 aCol = *paCol = sqlite3DbMallocZero(db, sizeof(aCol[0])*nCol);
95607 if( aCol==0 ) return SQLITE_NOMEM;
95608 for(i=0, pCol=aCol; i<nCol; i++, pCol++){
95609 /* Get an appropriate name for the column
95611 p = pEList->a[i].pExpr;
95612 assert( p->pRight==0 || ExprHasProperty(p->pRight, EP_IntValue)
95613 || p->pRight->u.zToken==0 || p->pRight->u.zToken[0]!=0 );
95614 if( (zName = pEList->a[i].zName)!=0 ){
95615 /* If the column contains an "AS <name>" phrase, use <name> as the name */
95616 zName = sqlite3DbStrDup(db, zName);
95617 }else{
95618 Expr *pColExpr = p; /* The expression that is the result column name */
95619 Table *pTab; /* Table associated with this expression */
95620 while( pColExpr->op==TK_DOT ){
95621 pColExpr = pColExpr->pRight;
95622 assert( pColExpr!=0 );
95624 if( pColExpr->op==TK_COLUMN && ALWAYS(pColExpr->pTab!=0) ){
95625 /* For columns use the column name name */
95626 int iCol = pColExpr->iColumn;
95627 pTab = pColExpr->pTab;
95628 if( iCol<0 ) iCol = pTab->iPKey;
95629 zName = sqlite3MPrintf(db, "%s",
95630 iCol>=0 ? pTab->aCol[iCol].zName : "rowid");
95631 }else if( pColExpr->op==TK_ID ){
95632 assert( !ExprHasProperty(pColExpr, EP_IntValue) );
95633 zName = sqlite3MPrintf(db, "%s", pColExpr->u.zToken);
95634 }else{
95635 /* Use the original text of the column expression as its name */
95636 zName = sqlite3MPrintf(db, "%s", pEList->a[i].zSpan);
95639 if( db->mallocFailed ){
95640 sqlite3DbFree(db, zName);
95641 break;
95644 /* Make sure the column name is unique. If the name is not unique,
95645 ** append a integer to the name so that it becomes unique.
95647 nName = sqlite3Strlen30(zName);
95648 for(j=cnt=0; j<i; j++){
95649 if( sqlite3StrICmp(aCol[j].zName, zName)==0 ){
95650 char *zNewName;
95651 zName[nName] = 0;
95652 zNewName = sqlite3MPrintf(db, "%s:%d", zName, ++cnt);
95653 sqlite3DbFree(db, zName);
95654 zName = zNewName;
95655 j = -1;
95656 if( zName==0 ) break;
95659 pCol->zName = zName;
95661 if( db->mallocFailed ){
95662 for(j=0; j<i; j++){
95663 sqlite3DbFree(db, aCol[j].zName);
95665 sqlite3DbFree(db, aCol);
95666 *paCol = 0;
95667 *pnCol = 0;
95668 return SQLITE_NOMEM;
95670 return SQLITE_OK;
95674 ** Add type and collation information to a column list based on
95675 ** a SELECT statement.
95677 ** The column list presumably came from selectColumnNamesFromExprList().
95678 ** The column list has only names, not types or collations. This
95679 ** routine goes through and adds the types and collations.
95681 ** This routine requires that all identifiers in the SELECT
95682 ** statement be resolved.
95684 static void selectAddColumnTypeAndCollation(
95685 Parse *pParse, /* Parsing contexts */
95686 int nCol, /* Number of columns */
95687 Column *aCol, /* List of columns */
95688 Select *pSelect /* SELECT used to determine types and collations */
95690 sqlite3 *db = pParse->db;
95691 NameContext sNC;
95692 Column *pCol;
95693 CollSeq *pColl;
95694 int i;
95695 Expr *p;
95696 struct ExprList_item *a;
95698 assert( pSelect!=0 );
95699 assert( (pSelect->selFlags & SF_Resolved)!=0 );
95700 assert( nCol==pSelect->pEList->nExpr || db->mallocFailed );
95701 if( db->mallocFailed ) return;
95702 memset(&sNC, 0, sizeof(sNC));
95703 sNC.pSrcList = pSelect->pSrc;
95704 a = pSelect->pEList->a;
95705 for(i=0, pCol=aCol; i<nCol; i++, pCol++){
95706 p = a[i].pExpr;
95707 pCol->zType = sqlite3DbStrDup(db, columnType(&sNC, p, 0, 0, 0));
95708 pCol->affinity = sqlite3ExprAffinity(p);
95709 if( pCol->affinity==0 ) pCol->affinity = SQLITE_AFF_NONE;
95710 pColl = sqlite3ExprCollSeq(pParse, p);
95711 if( pColl ){
95712 pCol->zColl = sqlite3DbStrDup(db, pColl->zName);
95718 ** Given a SELECT statement, generate a Table structure that describes
95719 ** the result set of that SELECT.
95721 SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse *pParse, Select *pSelect){
95722 Table *pTab;
95723 sqlite3 *db = pParse->db;
95724 int savedFlags;
95726 savedFlags = db->flags;
95727 db->flags &= ~SQLITE_FullColNames;
95728 db->flags |= SQLITE_ShortColNames;
95729 sqlite3SelectPrep(pParse, pSelect, 0);
95730 if( pParse->nErr ) return 0;
95731 while( pSelect->pPrior ) pSelect = pSelect->pPrior;
95732 db->flags = savedFlags;
95733 pTab = sqlite3DbMallocZero(db, sizeof(Table) );
95734 if( pTab==0 ){
95735 return 0;
95737 /* The sqlite3ResultSetOfSelect() is only used n contexts where lookaside
95738 ** is disabled */
95739 assert( db->lookaside.bEnabled==0 );
95740 pTab->nRef = 1;
95741 pTab->zName = 0;
95742 pTab->nRowEst = 1000000;
95743 selectColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
95744 selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSelect);
95745 pTab->iPKey = -1;
95746 if( db->mallocFailed ){
95747 sqlite3DeleteTable(db, pTab);
95748 return 0;
95750 return pTab;
95754 ** Get a VDBE for the given parser context. Create a new one if necessary.
95755 ** If an error occurs, return NULL and leave a message in pParse.
95757 SQLITE_PRIVATE Vdbe *sqlite3GetVdbe(Parse *pParse){
95758 Vdbe *v = pParse->pVdbe;
95759 if( v==0 ){
95760 v = pParse->pVdbe = sqlite3VdbeCreate(pParse->db);
95761 #ifndef SQLITE_OMIT_TRACE
95762 if( v ){
95763 sqlite3VdbeAddOp0(v, OP_Trace);
95765 #endif
95767 return v;
95772 ** Compute the iLimit and iOffset fields of the SELECT based on the
95773 ** pLimit and pOffset expressions. pLimit and pOffset hold the expressions
95774 ** that appear in the original SQL statement after the LIMIT and OFFSET
95775 ** keywords. Or NULL if those keywords are omitted. iLimit and iOffset
95776 ** are the integer memory register numbers for counters used to compute
95777 ** the limit and offset. If there is no limit and/or offset, then
95778 ** iLimit and iOffset are negative.
95780 ** This routine changes the values of iLimit and iOffset only if
95781 ** a limit or offset is defined by pLimit and pOffset. iLimit and
95782 ** iOffset should have been preset to appropriate default values
95783 ** (usually but not always -1) prior to calling this routine.
95784 ** Only if pLimit!=0 or pOffset!=0 do the limit registers get
95785 ** redefined. The UNION ALL operator uses this property to force
95786 ** the reuse of the same limit and offset registers across multiple
95787 ** SELECT statements.
95789 static void computeLimitRegisters(Parse *pParse, Select *p, int iBreak){
95790 Vdbe *v = 0;
95791 int iLimit = 0;
95792 int iOffset;
95793 int addr1, n;
95794 if( p->iLimit ) return;
95797 ** "LIMIT -1" always shows all rows. There is some
95798 ** contraversy about what the correct behavior should be.
95799 ** The current implementation interprets "LIMIT 0" to mean
95800 ** no rows.
95802 sqlite3ExprCacheClear(pParse);
95803 assert( p->pOffset==0 || p->pLimit!=0 );
95804 if( p->pLimit ){
95805 p->iLimit = iLimit = ++pParse->nMem;
95806 v = sqlite3GetVdbe(pParse);
95807 if( NEVER(v==0) ) return; /* VDBE should have already been allocated */
95808 if( sqlite3ExprIsInteger(p->pLimit, &n) ){
95809 sqlite3VdbeAddOp2(v, OP_Integer, n, iLimit);
95810 VdbeComment((v, "LIMIT counter"));
95811 if( n==0 ){
95812 sqlite3VdbeAddOp2(v, OP_Goto, 0, iBreak);
95813 }else{
95814 if( p->nSelectRow > (double)n ) p->nSelectRow = (double)n;
95816 }else{
95817 sqlite3ExprCode(pParse, p->pLimit, iLimit);
95818 sqlite3VdbeAddOp1(v, OP_MustBeInt, iLimit);
95819 VdbeComment((v, "LIMIT counter"));
95820 sqlite3VdbeAddOp2(v, OP_IfZero, iLimit, iBreak);
95822 if( p->pOffset ){
95823 p->iOffset = iOffset = ++pParse->nMem;
95824 pParse->nMem++; /* Allocate an extra register for limit+offset */
95825 sqlite3ExprCode(pParse, p->pOffset, iOffset);
95826 sqlite3VdbeAddOp1(v, OP_MustBeInt, iOffset);
95827 VdbeComment((v, "OFFSET counter"));
95828 addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iOffset);
95829 sqlite3VdbeAddOp2(v, OP_Integer, 0, iOffset);
95830 sqlite3VdbeJumpHere(v, addr1);
95831 sqlite3VdbeAddOp3(v, OP_Add, iLimit, iOffset, iOffset+1);
95832 VdbeComment((v, "LIMIT+OFFSET"));
95833 addr1 = sqlite3VdbeAddOp1(v, OP_IfPos, iLimit);
95834 sqlite3VdbeAddOp2(v, OP_Integer, -1, iOffset+1);
95835 sqlite3VdbeJumpHere(v, addr1);
95840 #ifndef SQLITE_OMIT_COMPOUND_SELECT
95842 ** Return the appropriate collating sequence for the iCol-th column of
95843 ** the result set for the compound-select statement "p". Return NULL if
95844 ** the column has no default collating sequence.
95846 ** The collating sequence for the compound select is taken from the
95847 ** left-most term of the select that has a collating sequence.
95849 static CollSeq *multiSelectCollSeq(Parse *pParse, Select *p, int iCol){
95850 CollSeq *pRet;
95851 if( p->pPrior ){
95852 pRet = multiSelectCollSeq(pParse, p->pPrior, iCol);
95853 }else{
95854 pRet = 0;
95856 assert( iCol>=0 );
95857 if( pRet==0 && iCol<p->pEList->nExpr ){
95858 pRet = sqlite3ExprCollSeq(pParse, p->pEList->a[iCol].pExpr);
95860 return pRet;
95862 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
95864 /* Forward reference */
95865 static int multiSelectOrderBy(
95866 Parse *pParse, /* Parsing context */
95867 Select *p, /* The right-most of SELECTs to be coded */
95868 SelectDest *pDest /* What to do with query results */
95872 #ifndef SQLITE_OMIT_COMPOUND_SELECT
95874 ** This routine is called to process a compound query form from
95875 ** two or more separate queries using UNION, UNION ALL, EXCEPT, or
95876 ** INTERSECT
95878 ** "p" points to the right-most of the two queries. the query on the
95879 ** left is p->pPrior. The left query could also be a compound query
95880 ** in which case this routine will be called recursively.
95882 ** The results of the total query are to be written into a destination
95883 ** of type eDest with parameter iParm.
95885 ** Example 1: Consider a three-way compound SQL statement.
95887 ** SELECT a FROM t1 UNION SELECT b FROM t2 UNION SELECT c FROM t3
95889 ** This statement is parsed up as follows:
95891 ** SELECT c FROM t3
95892 ** |
95893 ** `-----> SELECT b FROM t2
95894 ** |
95895 ** `------> SELECT a FROM t1
95897 ** The arrows in the diagram above represent the Select.pPrior pointer.
95898 ** So if this routine is called with p equal to the t3 query, then
95899 ** pPrior will be the t2 query. p->op will be TK_UNION in this case.
95901 ** Notice that because of the way SQLite parses compound SELECTs, the
95902 ** individual selects always group from left to right.
95904 static int multiSelect(
95905 Parse *pParse, /* Parsing context */
95906 Select *p, /* The right-most of SELECTs to be coded */
95907 SelectDest *pDest /* What to do with query results */
95909 int rc = SQLITE_OK; /* Success code from a subroutine */
95910 Select *pPrior; /* Another SELECT immediately to our left */
95911 Vdbe *v; /* Generate code to this VDBE */
95912 SelectDest dest; /* Alternative data destination */
95913 Select *pDelete = 0; /* Chain of simple selects to delete */
95914 sqlite3 *db; /* Database connection */
95915 #ifndef SQLITE_OMIT_EXPLAIN
95916 int iSub1; /* EQP id of left-hand query */
95917 int iSub2; /* EQP id of right-hand query */
95918 #endif
95920 /* Make sure there is no ORDER BY or LIMIT clause on prior SELECTs. Only
95921 ** the last (right-most) SELECT in the series may have an ORDER BY or LIMIT.
95923 assert( p && p->pPrior ); /* Calling function guarantees this much */
95924 db = pParse->db;
95925 pPrior = p->pPrior;
95926 assert( pPrior->pRightmost!=pPrior );
95927 assert( pPrior->pRightmost==p->pRightmost );
95928 dest = *pDest;
95929 if( pPrior->pOrderBy ){
95930 sqlite3ErrorMsg(pParse,"ORDER BY clause should come after %s not before",
95931 selectOpName(p->op));
95932 rc = 1;
95933 goto multi_select_end;
95935 if( pPrior->pLimit ){
95936 sqlite3ErrorMsg(pParse,"LIMIT clause should come after %s not before",
95937 selectOpName(p->op));
95938 rc = 1;
95939 goto multi_select_end;
95942 v = sqlite3GetVdbe(pParse);
95943 assert( v!=0 ); /* The VDBE already created by calling function */
95945 /* Create the destination temporary table if necessary
95947 if( dest.eDest==SRT_EphemTab ){
95948 assert( p->pEList );
95949 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr);
95950 sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
95951 dest.eDest = SRT_Table;
95954 /* Make sure all SELECTs in the statement have the same number of elements
95955 ** in their result sets.
95957 assert( p->pEList && pPrior->pEList );
95958 if( p->pEList->nExpr!=pPrior->pEList->nExpr ){
95959 sqlite3ErrorMsg(pParse, "SELECTs to the left and right of %s"
95960 " do not have the same number of result columns", selectOpName(p->op));
95961 rc = 1;
95962 goto multi_select_end;
95965 /* Compound SELECTs that have an ORDER BY clause are handled separately.
95967 if( p->pOrderBy ){
95968 return multiSelectOrderBy(pParse, p, pDest);
95971 /* Generate code for the left and right SELECT statements.
95973 switch( p->op ){
95974 case TK_ALL: {
95975 int addr = 0;
95976 int nLimit;
95977 assert( !pPrior->pLimit );
95978 pPrior->pLimit = p->pLimit;
95979 pPrior->pOffset = p->pOffset;
95980 explainSetInteger(iSub1, pParse->iNextSelectId);
95981 rc = sqlite3Select(pParse, pPrior, &dest);
95982 p->pLimit = 0;
95983 p->pOffset = 0;
95984 if( rc ){
95985 goto multi_select_end;
95987 p->pPrior = 0;
95988 p->iLimit = pPrior->iLimit;
95989 p->iOffset = pPrior->iOffset;
95990 if( p->iLimit ){
95991 addr = sqlite3VdbeAddOp1(v, OP_IfZero, p->iLimit);
95992 VdbeComment((v, "Jump ahead if LIMIT reached"));
95994 explainSetInteger(iSub2, pParse->iNextSelectId);
95995 rc = sqlite3Select(pParse, p, &dest);
95996 testcase( rc!=SQLITE_OK );
95997 pDelete = p->pPrior;
95998 p->pPrior = pPrior;
95999 p->nSelectRow += pPrior->nSelectRow;
96000 if( pPrior->pLimit
96001 && sqlite3ExprIsInteger(pPrior->pLimit, &nLimit)
96002 && p->nSelectRow > (double)nLimit
96004 p->nSelectRow = (double)nLimit;
96006 if( addr ){
96007 sqlite3VdbeJumpHere(v, addr);
96009 break;
96011 case TK_EXCEPT:
96012 case TK_UNION: {
96013 int unionTab; /* Cursor number of the temporary table holding result */
96014 u8 op = 0; /* One of the SRT_ operations to apply to self */
96015 int priorOp; /* The SRT_ operation to apply to prior selects */
96016 Expr *pLimit, *pOffset; /* Saved values of p->nLimit and p->nOffset */
96017 int addr;
96018 SelectDest uniondest;
96020 testcase( p->op==TK_EXCEPT );
96021 testcase( p->op==TK_UNION );
96022 priorOp = SRT_Union;
96023 if( dest.eDest==priorOp && ALWAYS(!p->pLimit &&!p->pOffset) ){
96024 /* We can reuse a temporary table generated by a SELECT to our
96025 ** right.
96027 assert( p->pRightmost!=p ); /* Can only happen for leftward elements
96028 ** of a 3-way or more compound */
96029 assert( p->pLimit==0 ); /* Not allowed on leftward elements */
96030 assert( p->pOffset==0 ); /* Not allowed on leftward elements */
96031 unionTab = dest.iParm;
96032 }else{
96033 /* We will need to create our own temporary table to hold the
96034 ** intermediate results.
96036 unionTab = pParse->nTab++;
96037 assert( p->pOrderBy==0 );
96038 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, unionTab, 0);
96039 assert( p->addrOpenEphm[0] == -1 );
96040 p->addrOpenEphm[0] = addr;
96041 p->pRightmost->selFlags |= SF_UsesEphemeral;
96042 assert( p->pEList );
96045 /* Code the SELECT statements to our left
96047 assert( !pPrior->pOrderBy );
96048 sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
96049 explainSetInteger(iSub1, pParse->iNextSelectId);
96050 rc = sqlite3Select(pParse, pPrior, &uniondest);
96051 if( rc ){
96052 goto multi_select_end;
96055 /* Code the current SELECT statement
96057 if( p->op==TK_EXCEPT ){
96058 op = SRT_Except;
96059 }else{
96060 assert( p->op==TK_UNION );
96061 op = SRT_Union;
96063 p->pPrior = 0;
96064 pLimit = p->pLimit;
96065 p->pLimit = 0;
96066 pOffset = p->pOffset;
96067 p->pOffset = 0;
96068 uniondest.eDest = op;
96069 explainSetInteger(iSub2, pParse->iNextSelectId);
96070 rc = sqlite3Select(pParse, p, &uniondest);
96071 testcase( rc!=SQLITE_OK );
96072 /* Query flattening in sqlite3Select() might refill p->pOrderBy.
96073 ** Be sure to delete p->pOrderBy, therefore, to avoid a memory leak. */
96074 sqlite3ExprListDelete(db, p->pOrderBy);
96075 pDelete = p->pPrior;
96076 p->pPrior = pPrior;
96077 p->pOrderBy = 0;
96078 if( p->op==TK_UNION ) p->nSelectRow += pPrior->nSelectRow;
96079 sqlite3ExprDelete(db, p->pLimit);
96080 p->pLimit = pLimit;
96081 p->pOffset = pOffset;
96082 p->iLimit = 0;
96083 p->iOffset = 0;
96085 /* Convert the data in the temporary table into whatever form
96086 ** it is that we currently need.
96088 assert( unionTab==dest.iParm || dest.eDest!=priorOp );
96089 if( dest.eDest!=priorOp ){
96090 int iCont, iBreak, iStart;
96091 assert( p->pEList );
96092 if( dest.eDest==SRT_Output ){
96093 Select *pFirst = p;
96094 while( pFirst->pPrior ) pFirst = pFirst->pPrior;
96095 generateColumnNames(pParse, 0, pFirst->pEList);
96097 iBreak = sqlite3VdbeMakeLabel(v);
96098 iCont = sqlite3VdbeMakeLabel(v);
96099 computeLimitRegisters(pParse, p, iBreak);
96100 sqlite3VdbeAddOp2(v, OP_Rewind, unionTab, iBreak);
96101 iStart = sqlite3VdbeCurrentAddr(v);
96102 selectInnerLoop(pParse, p, p->pEList, unionTab, p->pEList->nExpr,
96103 0, -1, &dest, iCont, iBreak);
96104 sqlite3VdbeResolveLabel(v, iCont);
96105 sqlite3VdbeAddOp2(v, OP_Next, unionTab, iStart);
96106 sqlite3VdbeResolveLabel(v, iBreak);
96107 sqlite3VdbeAddOp2(v, OP_Close, unionTab, 0);
96109 break;
96111 default: assert( p->op==TK_INTERSECT ); {
96112 int tab1, tab2;
96113 int iCont, iBreak, iStart;
96114 Expr *pLimit, *pOffset;
96115 int addr;
96116 SelectDest intersectdest;
96117 int r1;
96119 /* INTERSECT is different from the others since it requires
96120 ** two temporary tables. Hence it has its own case. Begin
96121 ** by allocating the tables we will need.
96123 tab1 = pParse->nTab++;
96124 tab2 = pParse->nTab++;
96125 assert( p->pOrderBy==0 );
96127 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab1, 0);
96128 assert( p->addrOpenEphm[0] == -1 );
96129 p->addrOpenEphm[0] = addr;
96130 p->pRightmost->selFlags |= SF_UsesEphemeral;
96131 assert( p->pEList );
96133 /* Code the SELECTs to our left into temporary table "tab1".
96135 sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
96136 explainSetInteger(iSub1, pParse->iNextSelectId);
96137 rc = sqlite3Select(pParse, pPrior, &intersectdest);
96138 if( rc ){
96139 goto multi_select_end;
96142 /* Code the current SELECT into temporary table "tab2"
96144 addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, tab2, 0);
96145 assert( p->addrOpenEphm[1] == -1 );
96146 p->addrOpenEphm[1] = addr;
96147 p->pPrior = 0;
96148 pLimit = p->pLimit;
96149 p->pLimit = 0;
96150 pOffset = p->pOffset;
96151 p->pOffset = 0;
96152 intersectdest.iParm = tab2;
96153 explainSetInteger(iSub2, pParse->iNextSelectId);
96154 rc = sqlite3Select(pParse, p, &intersectdest);
96155 testcase( rc!=SQLITE_OK );
96156 pDelete = p->pPrior;
96157 p->pPrior = pPrior;
96158 if( p->nSelectRow>pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
96159 sqlite3ExprDelete(db, p->pLimit);
96160 p->pLimit = pLimit;
96161 p->pOffset = pOffset;
96163 /* Generate code to take the intersection of the two temporary
96164 ** tables.
96166 assert( p->pEList );
96167 if( dest.eDest==SRT_Output ){
96168 Select *pFirst = p;
96169 while( pFirst->pPrior ) pFirst = pFirst->pPrior;
96170 generateColumnNames(pParse, 0, pFirst->pEList);
96172 iBreak = sqlite3VdbeMakeLabel(v);
96173 iCont = sqlite3VdbeMakeLabel(v);
96174 computeLimitRegisters(pParse, p, iBreak);
96175 sqlite3VdbeAddOp2(v, OP_Rewind, tab1, iBreak);
96176 r1 = sqlite3GetTempReg(pParse);
96177 iStart = sqlite3VdbeAddOp2(v, OP_RowKey, tab1, r1);
96178 sqlite3VdbeAddOp4Int(v, OP_NotFound, tab2, iCont, r1, 0);
96179 sqlite3ReleaseTempReg(pParse, r1);
96180 selectInnerLoop(pParse, p, p->pEList, tab1, p->pEList->nExpr,
96181 0, -1, &dest, iCont, iBreak);
96182 sqlite3VdbeResolveLabel(v, iCont);
96183 sqlite3VdbeAddOp2(v, OP_Next, tab1, iStart);
96184 sqlite3VdbeResolveLabel(v, iBreak);
96185 sqlite3VdbeAddOp2(v, OP_Close, tab2, 0);
96186 sqlite3VdbeAddOp2(v, OP_Close, tab1, 0);
96187 break;
96191 explainComposite(pParse, p->op, iSub1, iSub2, p->op!=TK_ALL);
96193 /* Compute collating sequences used by
96194 ** temporary tables needed to implement the compound select.
96195 ** Attach the KeyInfo structure to all temporary tables.
96197 ** This section is run by the right-most SELECT statement only.
96198 ** SELECT statements to the left always skip this part. The right-most
96199 ** SELECT might also skip this part if it has no ORDER BY clause and
96200 ** no temp tables are required.
96202 if( p->selFlags & SF_UsesEphemeral ){
96203 int i; /* Loop counter */
96204 KeyInfo *pKeyInfo; /* Collating sequence for the result set */
96205 Select *pLoop; /* For looping through SELECT statements */
96206 CollSeq **apColl; /* For looping through pKeyInfo->aColl[] */
96207 int nCol; /* Number of columns in result set */
96209 assert( p->pRightmost==p );
96210 nCol = p->pEList->nExpr;
96211 pKeyInfo = sqlite3DbMallocZero(db,
96212 sizeof(*pKeyInfo)+nCol*(sizeof(CollSeq*) + 1));
96213 if( !pKeyInfo ){
96214 rc = SQLITE_NOMEM;
96215 goto multi_select_end;
96218 pKeyInfo->enc = ENC(db);
96219 pKeyInfo->nField = (u16)nCol;
96221 for(i=0, apColl=pKeyInfo->aColl; i<nCol; i++, apColl++){
96222 *apColl = multiSelectCollSeq(pParse, p, i);
96223 if( 0==*apColl ){
96224 *apColl = db->pDfltColl;
96228 for(pLoop=p; pLoop; pLoop=pLoop->pPrior){
96229 for(i=0; i<2; i++){
96230 int addr = pLoop->addrOpenEphm[i];
96231 if( addr<0 ){
96232 /* If [0] is unused then [1] is also unused. So we can
96233 ** always safely abort as soon as the first unused slot is found */
96234 assert( pLoop->addrOpenEphm[1]<0 );
96235 break;
96237 sqlite3VdbeChangeP2(v, addr, nCol);
96238 sqlite3VdbeChangeP4(v, addr, (char*)pKeyInfo, P4_KEYINFO);
96239 pLoop->addrOpenEphm[i] = -1;
96242 sqlite3DbFree(db, pKeyInfo);
96245 multi_select_end:
96246 pDest->iMem = dest.iMem;
96247 pDest->nMem = dest.nMem;
96248 sqlite3SelectDelete(db, pDelete);
96249 return rc;
96251 #endif /* SQLITE_OMIT_COMPOUND_SELECT */
96254 ** Code an output subroutine for a coroutine implementation of a
96255 ** SELECT statment.
96257 ** The data to be output is contained in pIn->iMem. There are
96258 ** pIn->nMem columns to be output. pDest is where the output should
96259 ** be sent.
96261 ** regReturn is the number of the register holding the subroutine
96262 ** return address.
96264 ** If regPrev>0 then it is the first register in a vector that
96265 ** records the previous output. mem[regPrev] is a flag that is false
96266 ** if there has been no previous output. If regPrev>0 then code is
96267 ** generated to suppress duplicates. pKeyInfo is used for comparing
96268 ** keys.
96270 ** If the LIMIT found in p->iLimit is reached, jump immediately to
96271 ** iBreak.
96273 static int generateOutputSubroutine(
96274 Parse *pParse, /* Parsing context */
96275 Select *p, /* The SELECT statement */
96276 SelectDest *pIn, /* Coroutine supplying data */
96277 SelectDest *pDest, /* Where to send the data */
96278 int regReturn, /* The return address register */
96279 int regPrev, /* Previous result register. No uniqueness if 0 */
96280 KeyInfo *pKeyInfo, /* For comparing with previous entry */
96281 int p4type, /* The p4 type for pKeyInfo */
96282 int iBreak /* Jump here if we hit the LIMIT */
96284 Vdbe *v = pParse->pVdbe;
96285 int iContinue;
96286 int addr;
96288 addr = sqlite3VdbeCurrentAddr(v);
96289 iContinue = sqlite3VdbeMakeLabel(v);
96291 /* Suppress duplicates for UNION, EXCEPT, and INTERSECT
96293 if( regPrev ){
96294 int j1, j2;
96295 j1 = sqlite3VdbeAddOp1(v, OP_IfNot, regPrev);
96296 j2 = sqlite3VdbeAddOp4(v, OP_Compare, pIn->iMem, regPrev+1, pIn->nMem,
96297 (char*)pKeyInfo, p4type);
96298 sqlite3VdbeAddOp3(v, OP_Jump, j2+2, iContinue, j2+2);
96299 sqlite3VdbeJumpHere(v, j1);
96300 sqlite3ExprCodeCopy(pParse, pIn->iMem, regPrev+1, pIn->nMem);
96301 sqlite3VdbeAddOp2(v, OP_Integer, 1, regPrev);
96303 if( pParse->db->mallocFailed ) return 0;
96305 /* Suppress the the first OFFSET entries if there is an OFFSET clause
96307 codeOffset(v, p, iContinue);
96309 switch( pDest->eDest ){
96310 /* Store the result as data using a unique key.
96312 case SRT_Table:
96313 case SRT_EphemTab: {
96314 int r1 = sqlite3GetTempReg(pParse);
96315 int r2 = sqlite3GetTempReg(pParse);
96316 testcase( pDest->eDest==SRT_Table );
96317 testcase( pDest->eDest==SRT_EphemTab );
96318 sqlite3VdbeAddOp3(v, OP_MakeRecord, pIn->iMem, pIn->nMem, r1);
96319 sqlite3VdbeAddOp2(v, OP_NewRowid, pDest->iParm, r2);
96320 sqlite3VdbeAddOp3(v, OP_Insert, pDest->iParm, r1, r2);
96321 sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
96322 sqlite3ReleaseTempReg(pParse, r2);
96323 sqlite3ReleaseTempReg(pParse, r1);
96324 break;
96327 #ifndef SQLITE_OMIT_SUBQUERY
96328 /* If we are creating a set for an "expr IN (SELECT ...)" construct,
96329 ** then there should be a single item on the stack. Write this
96330 ** item into the set table with bogus data.
96332 case SRT_Set: {
96333 int r1;
96334 assert( pIn->nMem==1 );
96335 p->affinity =
96336 sqlite3CompareAffinity(p->pEList->a[0].pExpr, pDest->affinity);
96337 r1 = sqlite3GetTempReg(pParse);
96338 sqlite3VdbeAddOp4(v, OP_MakeRecord, pIn->iMem, 1, r1, &p->affinity, 1);
96339 sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, 1);
96340 sqlite3VdbeAddOp2(v, OP_IdxInsert, pDest->iParm, r1);
96341 sqlite3ReleaseTempReg(pParse, r1);
96342 break;
96345 #if 0 /* Never occurs on an ORDER BY query */
96346 /* If any row exist in the result set, record that fact and abort.
96348 case SRT_Exists: {
96349 sqlite3VdbeAddOp2(v, OP_Integer, 1, pDest->iParm);
96350 /* The LIMIT clause will terminate the loop for us */
96351 break;
96353 #endif
96355 /* If this is a scalar select that is part of an expression, then
96356 ** store the results in the appropriate memory cell and break out
96357 ** of the scan loop.
96359 case SRT_Mem: {
96360 assert( pIn->nMem==1 );
96361 sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iParm, 1);
96362 /* The LIMIT clause will jump out of the loop for us */
96363 break;
96365 #endif /* #ifndef SQLITE_OMIT_SUBQUERY */
96367 /* The results are stored in a sequence of registers
96368 ** starting at pDest->iMem. Then the co-routine yields.
96370 case SRT_Coroutine: {
96371 if( pDest->iMem==0 ){
96372 pDest->iMem = sqlite3GetTempRange(pParse, pIn->nMem);
96373 pDest->nMem = pIn->nMem;
96375 sqlite3ExprCodeMove(pParse, pIn->iMem, pDest->iMem, pDest->nMem);
96376 sqlite3VdbeAddOp1(v, OP_Yield, pDest->iParm);
96377 break;
96380 /* If none of the above, then the result destination must be
96381 ** SRT_Output. This routine is never called with any other
96382 ** destination other than the ones handled above or SRT_Output.
96384 ** For SRT_Output, results are stored in a sequence of registers.
96385 ** Then the OP_ResultRow opcode is used to cause sqlite3_step() to
96386 ** return the next row of result.
96388 default: {
96389 assert( pDest->eDest==SRT_Output );
96390 sqlite3VdbeAddOp2(v, OP_ResultRow, pIn->iMem, pIn->nMem);
96391 sqlite3ExprCacheAffinityChange(pParse, pIn->iMem, pIn->nMem);
96392 break;
96396 /* Jump to the end of the loop if the LIMIT is reached.
96398 if( p->iLimit ){
96399 sqlite3VdbeAddOp3(v, OP_IfZero, p->iLimit, iBreak, -1);
96402 /* Generate the subroutine return
96404 sqlite3VdbeResolveLabel(v, iContinue);
96405 sqlite3VdbeAddOp1(v, OP_Return, regReturn);
96407 return addr;
96411 ** Alternative compound select code generator for cases when there
96412 ** is an ORDER BY clause.
96414 ** We assume a query of the following form:
96416 ** <selectA> <operator> <selectB> ORDER BY <orderbylist>
96418 ** <operator> is one of UNION ALL, UNION, EXCEPT, or INTERSECT. The idea
96419 ** is to code both <selectA> and <selectB> with the ORDER BY clause as
96420 ** co-routines. Then run the co-routines in parallel and merge the results
96421 ** into the output. In addition to the two coroutines (called selectA and
96422 ** selectB) there are 7 subroutines:
96424 ** outA: Move the output of the selectA coroutine into the output
96425 ** of the compound query.
96427 ** outB: Move the output of the selectB coroutine into the output
96428 ** of the compound query. (Only generated for UNION and
96429 ** UNION ALL. EXCEPT and INSERTSECT never output a row that
96430 ** appears only in B.)
96432 ** AltB: Called when there is data from both coroutines and A<B.
96434 ** AeqB: Called when there is data from both coroutines and A==B.
96436 ** AgtB: Called when there is data from both coroutines and A>B.
96438 ** EofA: Called when data is exhausted from selectA.
96440 ** EofB: Called when data is exhausted from selectB.
96442 ** The implementation of the latter five subroutines depend on which
96443 ** <operator> is used:
96446 ** UNION ALL UNION EXCEPT INTERSECT
96447 ** ------------- ----------------- -------------- -----------------
96448 ** AltB: outA, nextA outA, nextA outA, nextA nextA
96450 ** AeqB: outA, nextA nextA nextA outA, nextA
96452 ** AgtB: outB, nextB outB, nextB nextB nextB
96454 ** EofA: outB, nextB outB, nextB halt halt
96456 ** EofB: outA, nextA outA, nextA outA, nextA halt
96458 ** In the AltB, AeqB, and AgtB subroutines, an EOF on A following nextA
96459 ** causes an immediate jump to EofA and an EOF on B following nextB causes
96460 ** an immediate jump to EofB. Within EofA and EofB, and EOF on entry or
96461 ** following nextX causes a jump to the end of the select processing.
96463 ** Duplicate removal in the UNION, EXCEPT, and INTERSECT cases is handled
96464 ** within the output subroutine. The regPrev register set holds the previously
96465 ** output value. A comparison is made against this value and the output
96466 ** is skipped if the next results would be the same as the previous.
96468 ** The implementation plan is to implement the two coroutines and seven
96469 ** subroutines first, then put the control logic at the bottom. Like this:
96471 ** goto Init
96472 ** coA: coroutine for left query (A)
96473 ** coB: coroutine for right query (B)
96474 ** outA: output one row of A
96475 ** outB: output one row of B (UNION and UNION ALL only)
96476 ** EofA: ...
96477 ** EofB: ...
96478 ** AltB: ...
96479 ** AeqB: ...
96480 ** AgtB: ...
96481 ** Init: initialize coroutine registers
96482 ** yield coA
96483 ** if eof(A) goto EofA
96484 ** yield coB
96485 ** if eof(B) goto EofB
96486 ** Cmpr: Compare A, B
96487 ** Jump AltB, AeqB, AgtB
96488 ** End: ...
96490 ** We call AltB, AeqB, AgtB, EofA, and EofB "subroutines" but they are not
96491 ** actually called using Gosub and they do not Return. EofA and EofB loop
96492 ** until all data is exhausted then jump to the "end" labe. AltB, AeqB,
96493 ** and AgtB jump to either L2 or to one of EofA or EofB.
96495 #ifndef SQLITE_OMIT_COMPOUND_SELECT
96496 static int multiSelectOrderBy(
96497 Parse *pParse, /* Parsing context */
96498 Select *p, /* The right-most of SELECTs to be coded */
96499 SelectDest *pDest /* What to do with query results */
96501 int i, j; /* Loop counters */
96502 Select *pPrior; /* Another SELECT immediately to our left */
96503 Vdbe *v; /* Generate code to this VDBE */
96504 SelectDest destA; /* Destination for coroutine A */
96505 SelectDest destB; /* Destination for coroutine B */
96506 int regAddrA; /* Address register for select-A coroutine */
96507 int regEofA; /* Flag to indicate when select-A is complete */
96508 int regAddrB; /* Address register for select-B coroutine */
96509 int regEofB; /* Flag to indicate when select-B is complete */
96510 int addrSelectA; /* Address of the select-A coroutine */
96511 int addrSelectB; /* Address of the select-B coroutine */
96512 int regOutA; /* Address register for the output-A subroutine */
96513 int regOutB; /* Address register for the output-B subroutine */
96514 int addrOutA; /* Address of the output-A subroutine */
96515 int addrOutB = 0; /* Address of the output-B subroutine */
96516 int addrEofA; /* Address of the select-A-exhausted subroutine */
96517 int addrEofB; /* Address of the select-B-exhausted subroutine */
96518 int addrAltB; /* Address of the A<B subroutine */
96519 int addrAeqB; /* Address of the A==B subroutine */
96520 int addrAgtB; /* Address of the A>B subroutine */
96521 int regLimitA; /* Limit register for select-A */
96522 int regLimitB; /* Limit register for select-A */
96523 int regPrev; /* A range of registers to hold previous output */
96524 int savedLimit; /* Saved value of p->iLimit */
96525 int savedOffset; /* Saved value of p->iOffset */
96526 int labelCmpr; /* Label for the start of the merge algorithm */
96527 int labelEnd; /* Label for the end of the overall SELECT stmt */
96528 int j1; /* Jump instructions that get retargetted */
96529 int op; /* One of TK_ALL, TK_UNION, TK_EXCEPT, TK_INTERSECT */
96530 KeyInfo *pKeyDup = 0; /* Comparison information for duplicate removal */
96531 KeyInfo *pKeyMerge; /* Comparison information for merging rows */
96532 sqlite3 *db; /* Database connection */
96533 ExprList *pOrderBy; /* The ORDER BY clause */
96534 int nOrderBy; /* Number of terms in the ORDER BY clause */
96535 int *aPermute; /* Mapping from ORDER BY terms to result set columns */
96536 #ifndef SQLITE_OMIT_EXPLAIN
96537 int iSub1; /* EQP id of left-hand query */
96538 int iSub2; /* EQP id of right-hand query */
96539 #endif
96541 assert( p->pOrderBy!=0 );
96542 assert( pKeyDup==0 ); /* "Managed" code needs this. Ticket #3382. */
96543 db = pParse->db;
96544 v = pParse->pVdbe;
96545 assert( v!=0 ); /* Already thrown the error if VDBE alloc failed */
96546 labelEnd = sqlite3VdbeMakeLabel(v);
96547 labelCmpr = sqlite3VdbeMakeLabel(v);
96550 /* Patch up the ORDER BY clause
96552 op = p->op;
96553 pPrior = p->pPrior;
96554 assert( pPrior->pOrderBy==0 );
96555 pOrderBy = p->pOrderBy;
96556 assert( pOrderBy );
96557 nOrderBy = pOrderBy->nExpr;
96559 /* For operators other than UNION ALL we have to make sure that
96560 ** the ORDER BY clause covers every term of the result set. Add
96561 ** terms to the ORDER BY clause as necessary.
96563 if( op!=TK_ALL ){
96564 for(i=1; db->mallocFailed==0 && i<=p->pEList->nExpr; i++){
96565 struct ExprList_item *pItem;
96566 for(j=0, pItem=pOrderBy->a; j<nOrderBy; j++, pItem++){
96567 assert( pItem->iOrderByCol>0 );
96568 if( pItem->iOrderByCol==i ) break;
96570 if( j==nOrderBy ){
96571 Expr *pNew = sqlite3Expr(db, TK_INTEGER, 0);
96572 if( pNew==0 ) return SQLITE_NOMEM;
96573 pNew->flags |= EP_IntValue;
96574 pNew->u.iValue = i;
96575 pOrderBy = sqlite3ExprListAppend(pParse, pOrderBy, pNew);
96576 pOrderBy->a[nOrderBy++].iOrderByCol = (u16)i;
96581 /* Compute the comparison permutation and keyinfo that is used with
96582 ** the permutation used to determine if the next
96583 ** row of results comes from selectA or selectB. Also add explicit
96584 ** collations to the ORDER BY clause terms so that when the subqueries
96585 ** to the right and the left are evaluated, they use the correct
96586 ** collation.
96588 aPermute = sqlite3DbMallocRaw(db, sizeof(int)*nOrderBy);
96589 if( aPermute ){
96590 struct ExprList_item *pItem;
96591 for(i=0, pItem=pOrderBy->a; i<nOrderBy; i++, pItem++){
96592 assert( pItem->iOrderByCol>0 && pItem->iOrderByCol<=p->pEList->nExpr );
96593 aPermute[i] = pItem->iOrderByCol - 1;
96595 pKeyMerge =
96596 sqlite3DbMallocRaw(db, sizeof(*pKeyMerge)+nOrderBy*(sizeof(CollSeq*)+1));
96597 if( pKeyMerge ){
96598 pKeyMerge->aSortOrder = (u8*)&pKeyMerge->aColl[nOrderBy];
96599 pKeyMerge->nField = (u16)nOrderBy;
96600 pKeyMerge->enc = ENC(db);
96601 for(i=0; i<nOrderBy; i++){
96602 CollSeq *pColl;
96603 Expr *pTerm = pOrderBy->a[i].pExpr;
96604 if( pTerm->flags & EP_ExpCollate ){
96605 pColl = pTerm->pColl;
96606 }else{
96607 pColl = multiSelectCollSeq(pParse, p, aPermute[i]);
96608 pTerm->flags |= EP_ExpCollate;
96609 pTerm->pColl = pColl;
96611 pKeyMerge->aColl[i] = pColl;
96612 pKeyMerge->aSortOrder[i] = pOrderBy->a[i].sortOrder;
96615 }else{
96616 pKeyMerge = 0;
96619 /* Reattach the ORDER BY clause to the query.
96621 p->pOrderBy = pOrderBy;
96622 pPrior->pOrderBy = sqlite3ExprListDup(pParse->db, pOrderBy, 0);
96624 /* Allocate a range of temporary registers and the KeyInfo needed
96625 ** for the logic that removes duplicate result rows when the
96626 ** operator is UNION, EXCEPT, or INTERSECT (but not UNION ALL).
96628 if( op==TK_ALL ){
96629 regPrev = 0;
96630 }else{
96631 int nExpr = p->pEList->nExpr;
96632 assert( nOrderBy>=nExpr || db->mallocFailed );
96633 regPrev = sqlite3GetTempRange(pParse, nExpr+1);
96634 sqlite3VdbeAddOp2(v, OP_Integer, 0, regPrev);
96635 pKeyDup = sqlite3DbMallocZero(db,
96636 sizeof(*pKeyDup) + nExpr*(sizeof(CollSeq*)+1) );
96637 if( pKeyDup ){
96638 pKeyDup->aSortOrder = (u8*)&pKeyDup->aColl[nExpr];
96639 pKeyDup->nField = (u16)nExpr;
96640 pKeyDup->enc = ENC(db);
96641 for(i=0; i<nExpr; i++){
96642 pKeyDup->aColl[i] = multiSelectCollSeq(pParse, p, i);
96643 pKeyDup->aSortOrder[i] = 0;
96648 /* Separate the left and the right query from one another
96650 p->pPrior = 0;
96651 sqlite3ResolveOrderGroupBy(pParse, p, p->pOrderBy, "ORDER");
96652 if( pPrior->pPrior==0 ){
96653 sqlite3ResolveOrderGroupBy(pParse, pPrior, pPrior->pOrderBy, "ORDER");
96656 /* Compute the limit registers */
96657 computeLimitRegisters(pParse, p, labelEnd);
96658 if( p->iLimit && op==TK_ALL ){
96659 regLimitA = ++pParse->nMem;
96660 regLimitB = ++pParse->nMem;
96661 sqlite3VdbeAddOp2(v, OP_Copy, p->iOffset ? p->iOffset+1 : p->iLimit,
96662 regLimitA);
96663 sqlite3VdbeAddOp2(v, OP_Copy, regLimitA, regLimitB);
96664 }else{
96665 regLimitA = regLimitB = 0;
96667 sqlite3ExprDelete(db, p->pLimit);
96668 p->pLimit = 0;
96669 sqlite3ExprDelete(db, p->pOffset);
96670 p->pOffset = 0;
96672 regAddrA = ++pParse->nMem;
96673 regEofA = ++pParse->nMem;
96674 regAddrB = ++pParse->nMem;
96675 regEofB = ++pParse->nMem;
96676 regOutA = ++pParse->nMem;
96677 regOutB = ++pParse->nMem;
96678 sqlite3SelectDestInit(&destA, SRT_Coroutine, regAddrA);
96679 sqlite3SelectDestInit(&destB, SRT_Coroutine, regAddrB);
96681 /* Jump past the various subroutines and coroutines to the main
96682 ** merge loop
96684 j1 = sqlite3VdbeAddOp0(v, OP_Goto);
96685 addrSelectA = sqlite3VdbeCurrentAddr(v);
96688 /* Generate a coroutine to evaluate the SELECT statement to the
96689 ** left of the compound operator - the "A" select.
96691 VdbeNoopComment((v, "Begin coroutine for left SELECT"));
96692 pPrior->iLimit = regLimitA;
96693 explainSetInteger(iSub1, pParse->iNextSelectId);
96694 sqlite3Select(pParse, pPrior, &destA);
96695 sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofA);
96696 sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96697 VdbeNoopComment((v, "End coroutine for left SELECT"));
96699 /* Generate a coroutine to evaluate the SELECT statement on
96700 ** the right - the "B" select
96702 addrSelectB = sqlite3VdbeCurrentAddr(v);
96703 VdbeNoopComment((v, "Begin coroutine for right SELECT"));
96704 savedLimit = p->iLimit;
96705 savedOffset = p->iOffset;
96706 p->iLimit = regLimitB;
96707 p->iOffset = 0;
96708 explainSetInteger(iSub2, pParse->iNextSelectId);
96709 sqlite3Select(pParse, p, &destB);
96710 p->iLimit = savedLimit;
96711 p->iOffset = savedOffset;
96712 sqlite3VdbeAddOp2(v, OP_Integer, 1, regEofB);
96713 sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
96714 VdbeNoopComment((v, "End coroutine for right SELECT"));
96716 /* Generate a subroutine that outputs the current row of the A
96717 ** select as the next output row of the compound select.
96719 VdbeNoopComment((v, "Output routine for A"));
96720 addrOutA = generateOutputSubroutine(pParse,
96721 p, &destA, pDest, regOutA,
96722 regPrev, pKeyDup, P4_KEYINFO_HANDOFF, labelEnd);
96724 /* Generate a subroutine that outputs the current row of the B
96725 ** select as the next output row of the compound select.
96727 if( op==TK_ALL || op==TK_UNION ){
96728 VdbeNoopComment((v, "Output routine for B"));
96729 addrOutB = generateOutputSubroutine(pParse,
96730 p, &destB, pDest, regOutB,
96731 regPrev, pKeyDup, P4_KEYINFO_STATIC, labelEnd);
96734 /* Generate a subroutine to run when the results from select A
96735 ** are exhausted and only data in select B remains.
96737 VdbeNoopComment((v, "eof-A subroutine"));
96738 if( op==TK_EXCEPT || op==TK_INTERSECT ){
96739 addrEofA = sqlite3VdbeAddOp2(v, OP_Goto, 0, labelEnd);
96740 }else{
96741 addrEofA = sqlite3VdbeAddOp2(v, OP_If, regEofB, labelEnd);
96742 sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
96743 sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
96744 sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofA);
96745 p->nSelectRow += pPrior->nSelectRow;
96748 /* Generate a subroutine to run when the results from select B
96749 ** are exhausted and only data in select A remains.
96751 if( op==TK_INTERSECT ){
96752 addrEofB = addrEofA;
96753 if( p->nSelectRow > pPrior->nSelectRow ) p->nSelectRow = pPrior->nSelectRow;
96754 }else{
96755 VdbeNoopComment((v, "eof-B subroutine"));
96756 addrEofB = sqlite3VdbeAddOp2(v, OP_If, regEofA, labelEnd);
96757 sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
96758 sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96759 sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEofB);
96762 /* Generate code to handle the case of A<B
96764 VdbeNoopComment((v, "A-lt-B subroutine"));
96765 addrAltB = sqlite3VdbeAddOp2(v, OP_Gosub, regOutA, addrOutA);
96766 sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96767 sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
96768 sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
96770 /* Generate code to handle the case of A==B
96772 if( op==TK_ALL ){
96773 addrAeqB = addrAltB;
96774 }else if( op==TK_INTERSECT ){
96775 addrAeqB = addrAltB;
96776 addrAltB++;
96777 }else{
96778 VdbeNoopComment((v, "A-eq-B subroutine"));
96779 addrAeqB =
96780 sqlite3VdbeAddOp1(v, OP_Yield, regAddrA);
96781 sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
96782 sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
96785 /* Generate code to handle the case of A>B
96787 VdbeNoopComment((v, "A-gt-B subroutine"));
96788 addrAgtB = sqlite3VdbeCurrentAddr(v);
96789 if( op==TK_ALL || op==TK_UNION ){
96790 sqlite3VdbeAddOp2(v, OP_Gosub, regOutB, addrOutB);
96792 sqlite3VdbeAddOp1(v, OP_Yield, regAddrB);
96793 sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
96794 sqlite3VdbeAddOp2(v, OP_Goto, 0, labelCmpr);
96796 /* This code runs once to initialize everything.
96798 sqlite3VdbeJumpHere(v, j1);
96799 sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofA);
96800 sqlite3VdbeAddOp2(v, OP_Integer, 0, regEofB);
96801 sqlite3VdbeAddOp2(v, OP_Gosub, regAddrA, addrSelectA);
96802 sqlite3VdbeAddOp2(v, OP_Gosub, regAddrB, addrSelectB);
96803 sqlite3VdbeAddOp2(v, OP_If, regEofA, addrEofA);
96804 sqlite3VdbeAddOp2(v, OP_If, regEofB, addrEofB);
96806 /* Implement the main merge loop
96808 sqlite3VdbeResolveLabel(v, labelCmpr);
96809 sqlite3VdbeAddOp4(v, OP_Permutation, 0, 0, 0, (char*)aPermute, P4_INTARRAY);
96810 sqlite3VdbeAddOp4(v, OP_Compare, destA.iMem, destB.iMem, nOrderBy,
96811 (char*)pKeyMerge, P4_KEYINFO_HANDOFF);
96812 sqlite3VdbeAddOp3(v, OP_Jump, addrAltB, addrAeqB, addrAgtB);
96814 /* Release temporary registers
96816 if( regPrev ){
96817 sqlite3ReleaseTempRange(pParse, regPrev, nOrderBy+1);
96820 /* Jump to the this point in order to terminate the query.
96822 sqlite3VdbeResolveLabel(v, labelEnd);
96824 /* Set the number of output columns
96826 if( pDest->eDest==SRT_Output ){
96827 Select *pFirst = pPrior;
96828 while( pFirst->pPrior ) pFirst = pFirst->pPrior;
96829 generateColumnNames(pParse, 0, pFirst->pEList);
96832 /* Reassembly the compound query so that it will be freed correctly
96833 ** by the calling function */
96834 if( p->pPrior ){
96835 sqlite3SelectDelete(db, p->pPrior);
96837 p->pPrior = pPrior;
96839 /*** TBD: Insert subroutine calls to close cursors on incomplete
96840 **** subqueries ****/
96841 explainComposite(pParse, p->op, iSub1, iSub2, 0);
96842 return SQLITE_OK;
96844 #endif
96846 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
96847 /* Forward Declarations */
96848 static void substExprList(sqlite3*, ExprList*, int, ExprList*);
96849 static void substSelect(sqlite3*, Select *, int, ExprList *);
96852 ** Scan through the expression pExpr. Replace every reference to
96853 ** a column in table number iTable with a copy of the iColumn-th
96854 ** entry in pEList. (But leave references to the ROWID column
96855 ** unchanged.)
96857 ** This routine is part of the flattening procedure. A subquery
96858 ** whose result set is defined by pEList appears as entry in the
96859 ** FROM clause of a SELECT such that the VDBE cursor assigned to that
96860 ** FORM clause entry is iTable. This routine make the necessary
96861 ** changes to pExpr so that it refers directly to the source table
96862 ** of the subquery rather the result set of the subquery.
96864 static Expr *substExpr(
96865 sqlite3 *db, /* Report malloc errors to this connection */
96866 Expr *pExpr, /* Expr in which substitution occurs */
96867 int iTable, /* Table to be substituted */
96868 ExprList *pEList /* Substitute expressions */
96870 if( pExpr==0 ) return 0;
96871 if( pExpr->op==TK_COLUMN && pExpr->iTable==iTable ){
96872 if( pExpr->iColumn<0 ){
96873 pExpr->op = TK_NULL;
96874 }else{
96875 Expr *pNew;
96876 assert( pEList!=0 && pExpr->iColumn<pEList->nExpr );
96877 assert( pExpr->pLeft==0 && pExpr->pRight==0 );
96878 pNew = sqlite3ExprDup(db, pEList->a[pExpr->iColumn].pExpr, 0);
96879 if( pNew && pExpr->pColl ){
96880 pNew->pColl = pExpr->pColl;
96882 sqlite3ExprDelete(db, pExpr);
96883 pExpr = pNew;
96885 }else{
96886 pExpr->pLeft = substExpr(db, pExpr->pLeft, iTable, pEList);
96887 pExpr->pRight = substExpr(db, pExpr->pRight, iTable, pEList);
96888 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
96889 substSelect(db, pExpr->x.pSelect, iTable, pEList);
96890 }else{
96891 substExprList(db, pExpr->x.pList, iTable, pEList);
96894 return pExpr;
96896 static void substExprList(
96897 sqlite3 *db, /* Report malloc errors here */
96898 ExprList *pList, /* List to scan and in which to make substitutes */
96899 int iTable, /* Table to be substituted */
96900 ExprList *pEList /* Substitute values */
96902 int i;
96903 if( pList==0 ) return;
96904 for(i=0; i<pList->nExpr; i++){
96905 pList->a[i].pExpr = substExpr(db, pList->a[i].pExpr, iTable, pEList);
96908 static void substSelect(
96909 sqlite3 *db, /* Report malloc errors here */
96910 Select *p, /* SELECT statement in which to make substitutions */
96911 int iTable, /* Table to be replaced */
96912 ExprList *pEList /* Substitute values */
96914 SrcList *pSrc;
96915 struct SrcList_item *pItem;
96916 int i;
96917 if( !p ) return;
96918 substExprList(db, p->pEList, iTable, pEList);
96919 substExprList(db, p->pGroupBy, iTable, pEList);
96920 substExprList(db, p->pOrderBy, iTable, pEList);
96921 p->pHaving = substExpr(db, p->pHaving, iTable, pEList);
96922 p->pWhere = substExpr(db, p->pWhere, iTable, pEList);
96923 substSelect(db, p->pPrior, iTable, pEList);
96924 pSrc = p->pSrc;
96925 assert( pSrc ); /* Even for (SELECT 1) we have: pSrc!=0 but pSrc->nSrc==0 */
96926 if( ALWAYS(pSrc) ){
96927 for(i=pSrc->nSrc, pItem=pSrc->a; i>0; i--, pItem++){
96928 substSelect(db, pItem->pSelect, iTable, pEList);
96932 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
96934 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
96936 ** This routine attempts to flatten subqueries as a performance optimization.
96937 ** This routine returns 1 if it makes changes and 0 if no flattening occurs.
96939 ** To understand the concept of flattening, consider the following
96940 ** query:
96942 ** SELECT a FROM (SELECT x+y AS a FROM t1 WHERE z<100) WHERE a>5
96944 ** The default way of implementing this query is to execute the
96945 ** subquery first and store the results in a temporary table, then
96946 ** run the outer query on that temporary table. This requires two
96947 ** passes over the data. Furthermore, because the temporary table
96948 ** has no indices, the WHERE clause on the outer query cannot be
96949 ** optimized.
96951 ** This routine attempts to rewrite queries such as the above into
96952 ** a single flat select, like this:
96954 ** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
96956 ** The code generated for this simpification gives the same result
96957 ** but only has to scan the data once. And because indices might
96958 ** exist on the table t1, a complete scan of the data might be
96959 ** avoided.
96961 ** Flattening is only attempted if all of the following are true:
96963 ** (1) The subquery and the outer query do not both use aggregates.
96965 ** (2) The subquery is not an aggregate or the outer query is not a join.
96967 ** (3) The subquery is not the right operand of a left outer join
96968 ** (Originally ticket #306. Strengthened by ticket #3300)
96970 ** (4) The subquery is not DISTINCT.
96972 ** (**) At one point restrictions (4) and (5) defined a subset of DISTINCT
96973 ** sub-queries that were excluded from this optimization. Restriction
96974 ** (4) has since been expanded to exclude all DISTINCT subqueries.
96976 ** (6) The subquery does not use aggregates or the outer query is not
96977 ** DISTINCT.
96979 ** (7) The subquery has a FROM clause. TODO: For subqueries without
96980 ** A FROM clause, consider adding a FROM close with the special
96981 ** table sqlite_once that consists of a single row containing a
96982 ** single NULL.
96984 ** (8) The subquery does not use LIMIT or the outer query is not a join.
96986 ** (9) The subquery does not use LIMIT or the outer query does not use
96987 ** aggregates.
96989 ** (10) The subquery does not use aggregates or the outer query does not
96990 ** use LIMIT.
96992 ** (11) The subquery and the outer query do not both have ORDER BY clauses.
96994 ** (**) Not implemented. Subsumed into restriction (3). Was previously
96995 ** a separate restriction deriving from ticket #350.
96997 ** (13) The subquery and outer query do not both use LIMIT.
96999 ** (14) The subquery does not use OFFSET.
97001 ** (15) The outer query is not part of a compound select or the
97002 ** subquery does not have a LIMIT clause.
97003 ** (See ticket #2339 and ticket [02a8e81d44]).
97005 ** (16) The outer query is not an aggregate or the subquery does
97006 ** not contain ORDER BY. (Ticket #2942) This used to not matter
97007 ** until we introduced the group_concat() function.
97009 ** (17) The sub-query is not a compound select, or it is a UNION ALL
97010 ** compound clause made up entirely of non-aggregate queries, and
97011 ** the parent query:
97013 ** * is not itself part of a compound select,
97014 ** * is not an aggregate or DISTINCT query, and
97015 ** * is not a join
97017 ** The parent and sub-query may contain WHERE clauses. Subject to
97018 ** rules (11), (13) and (14), they may also contain ORDER BY,
97019 ** LIMIT and OFFSET clauses. The subquery cannot use any compound
97020 ** operator other than UNION ALL because all the other compound
97021 ** operators have an implied DISTINCT which is disallowed by
97022 ** restriction (4).
97024 ** (18) If the sub-query is a compound select, then all terms of the
97025 ** ORDER by clause of the parent must be simple references to
97026 ** columns of the sub-query.
97028 ** (19) The subquery does not use LIMIT or the outer query does not
97029 ** have a WHERE clause.
97031 ** (20) If the sub-query is a compound select, then it must not use
97032 ** an ORDER BY clause. Ticket #3773. We could relax this constraint
97033 ** somewhat by saying that the terms of the ORDER BY clause must
97034 ** appear as unmodified result columns in the outer query. But we
97035 ** have other optimizations in mind to deal with that case.
97037 ** (21) The subquery does not use LIMIT or the outer query is not
97038 ** DISTINCT. (See ticket [752e1646fc]).
97040 ** In this routine, the "p" parameter is a pointer to the outer query.
97041 ** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query
97042 ** uses aggregates and subqueryIsAgg is true if the subquery uses aggregates.
97044 ** If flattening is not attempted, this routine is a no-op and returns 0.
97045 ** If flattening is attempted this routine returns 1.
97047 ** All of the expression analysis must occur on both the outer query and
97048 ** the subquery before this routine runs.
97050 static int flattenSubquery(
97051 Parse *pParse, /* Parsing context */
97052 Select *p, /* The parent or outer SELECT statement */
97053 int iFrom, /* Index in p->pSrc->a[] of the inner subquery */
97054 int isAgg, /* True if outer SELECT uses aggregate functions */
97055 int subqueryIsAgg /* True if the subquery uses aggregate functions */
97057 const char *zSavedAuthContext = pParse->zAuthContext;
97058 Select *pParent;
97059 Select *pSub; /* The inner query or "subquery" */
97060 Select *pSub1; /* Pointer to the rightmost select in sub-query */
97061 SrcList *pSrc; /* The FROM clause of the outer query */
97062 SrcList *pSubSrc; /* The FROM clause of the subquery */
97063 ExprList *pList; /* The result set of the outer query */
97064 int iParent; /* VDBE cursor number of the pSub result set temp table */
97065 int i; /* Loop counter */
97066 Expr *pWhere; /* The WHERE clause */
97067 struct SrcList_item *pSubitem; /* The subquery */
97068 sqlite3 *db = pParse->db;
97070 /* Check to see if flattening is permitted. Return 0 if not.
97072 assert( p!=0 );
97073 assert( p->pPrior==0 ); /* Unable to flatten compound queries */
97074 if( db->flags & SQLITE_QueryFlattener ) return 0;
97075 pSrc = p->pSrc;
97076 assert( pSrc && iFrom>=0 && iFrom<pSrc->nSrc );
97077 pSubitem = &pSrc->a[iFrom];
97078 iParent = pSubitem->iCursor;
97079 pSub = pSubitem->pSelect;
97080 assert( pSub!=0 );
97081 if( isAgg && subqueryIsAgg ) return 0; /* Restriction (1) */
97082 if( subqueryIsAgg && pSrc->nSrc>1 ) return 0; /* Restriction (2) */
97083 pSubSrc = pSub->pSrc;
97084 assert( pSubSrc );
97085 /* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
97086 ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET
97087 ** because they could be computed at compile-time. But when LIMIT and OFFSET
97088 ** became arbitrary expressions, we were forced to add restrictions (13)
97089 ** and (14). */
97090 if( pSub->pLimit && p->pLimit ) return 0; /* Restriction (13) */
97091 if( pSub->pOffset ) return 0; /* Restriction (14) */
97092 if( p->pRightmost && pSub->pLimit ){
97093 return 0; /* Restriction (15) */
97095 if( pSubSrc->nSrc==0 ) return 0; /* Restriction (7) */
97096 if( pSub->selFlags & SF_Distinct ) return 0; /* Restriction (5) */
97097 if( pSub->pLimit && (pSrc->nSrc>1 || isAgg) ){
97098 return 0; /* Restrictions (8)(9) */
97100 if( (p->selFlags & SF_Distinct)!=0 && subqueryIsAgg ){
97101 return 0; /* Restriction (6) */
97103 if( p->pOrderBy && pSub->pOrderBy ){
97104 return 0; /* Restriction (11) */
97106 if( isAgg && pSub->pOrderBy ) return 0; /* Restriction (16) */
97107 if( pSub->pLimit && p->pWhere ) return 0; /* Restriction (19) */
97108 if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
97109 return 0; /* Restriction (21) */
97112 /* OBSOLETE COMMENT 1:
97113 ** Restriction 3: If the subquery is a join, make sure the subquery is
97114 ** not used as the right operand of an outer join. Examples of why this
97115 ** is not allowed:
97117 ** t1 LEFT OUTER JOIN (t2 JOIN t3)
97119 ** If we flatten the above, we would get
97121 ** (t1 LEFT OUTER JOIN t2) JOIN t3
97123 ** which is not at all the same thing.
97125 ** OBSOLETE COMMENT 2:
97126 ** Restriction 12: If the subquery is the right operand of a left outer
97127 ** join, make sure the subquery has no WHERE clause.
97128 ** An examples of why this is not allowed:
97130 ** t1 LEFT OUTER JOIN (SELECT * FROM t2 WHERE t2.x>0)
97132 ** If we flatten the above, we would get
97134 ** (t1 LEFT OUTER JOIN t2) WHERE t2.x>0
97136 ** But the t2.x>0 test will always fail on a NULL row of t2, which
97137 ** effectively converts the OUTER JOIN into an INNER JOIN.
97139 ** THIS OVERRIDES OBSOLETE COMMENTS 1 AND 2 ABOVE:
97140 ** Ticket #3300 shows that flattening the right term of a LEFT JOIN
97141 ** is fraught with danger. Best to avoid the whole thing. If the
97142 ** subquery is the right term of a LEFT JOIN, then do not flatten.
97144 if( (pSubitem->jointype & JT_OUTER)!=0 ){
97145 return 0;
97148 /* Restriction 17: If the sub-query is a compound SELECT, then it must
97149 ** use only the UNION ALL operator. And none of the simple select queries
97150 ** that make up the compound SELECT are allowed to be aggregate or distinct
97151 ** queries.
97153 if( pSub->pPrior ){
97154 if( pSub->pOrderBy ){
97155 return 0; /* Restriction 20 */
97157 if( isAgg || (p->selFlags & SF_Distinct)!=0 || pSrc->nSrc!=1 ){
97158 return 0;
97160 for(pSub1=pSub; pSub1; pSub1=pSub1->pPrior){
97161 testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct );
97162 testcase( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))==SF_Aggregate );
97163 assert( pSub->pSrc!=0 );
97164 if( (pSub1->selFlags & (SF_Distinct|SF_Aggregate))!=0
97165 || (pSub1->pPrior && pSub1->op!=TK_ALL)
97166 || pSub1->pSrc->nSrc<1
97168 return 0;
97170 testcase( pSub1->pSrc->nSrc>1 );
97173 /* Restriction 18. */
97174 if( p->pOrderBy ){
97175 int ii;
97176 for(ii=0; ii<p->pOrderBy->nExpr; ii++){
97177 if( p->pOrderBy->a[ii].iOrderByCol==0 ) return 0;
97182 /***** If we reach this point, flattening is permitted. *****/
97184 /* Authorize the subquery */
97185 pParse->zAuthContext = pSubitem->zName;
97186 sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
97187 pParse->zAuthContext = zSavedAuthContext;
97189 /* If the sub-query is a compound SELECT statement, then (by restrictions
97190 ** 17 and 18 above) it must be a UNION ALL and the parent query must
97191 ** be of the form:
97193 ** SELECT <expr-list> FROM (<sub-query>) <where-clause>
97195 ** followed by any ORDER BY, LIMIT and/or OFFSET clauses. This block
97196 ** creates N-1 copies of the parent query without any ORDER BY, LIMIT or
97197 ** OFFSET clauses and joins them to the left-hand-side of the original
97198 ** using UNION ALL operators. In this case N is the number of simple
97199 ** select statements in the compound sub-query.
97201 ** Example:
97203 ** SELECT a+1 FROM (
97204 ** SELECT x FROM tab
97205 ** UNION ALL
97206 ** SELECT y FROM tab
97207 ** UNION ALL
97208 ** SELECT abs(z*2) FROM tab2
97209 ** ) WHERE a!=5 ORDER BY 1
97211 ** Transformed into:
97213 ** SELECT x+1 FROM tab WHERE x+1!=5
97214 ** UNION ALL
97215 ** SELECT y+1 FROM tab WHERE y+1!=5
97216 ** UNION ALL
97217 ** SELECT abs(z*2)+1 FROM tab2 WHERE abs(z*2)+1!=5
97218 ** ORDER BY 1
97220 ** We call this the "compound-subquery flattening".
97222 for(pSub=pSub->pPrior; pSub; pSub=pSub->pPrior){
97223 Select *pNew;
97224 ExprList *pOrderBy = p->pOrderBy;
97225 Expr *pLimit = p->pLimit;
97226 Select *pPrior = p->pPrior;
97227 p->pOrderBy = 0;
97228 p->pSrc = 0;
97229 p->pPrior = 0;
97230 p->pLimit = 0;
97231 pNew = sqlite3SelectDup(db, p, 0);
97232 p->pLimit = pLimit;
97233 p->pOrderBy = pOrderBy;
97234 p->pSrc = pSrc;
97235 p->op = TK_ALL;
97236 p->pRightmost = 0;
97237 if( pNew==0 ){
97238 pNew = pPrior;
97239 }else{
97240 pNew->pPrior = pPrior;
97241 pNew->pRightmost = 0;
97243 p->pPrior = pNew;
97244 if( db->mallocFailed ) return 1;
97247 /* Begin flattening the iFrom-th entry of the FROM clause
97248 ** in the outer query.
97250 pSub = pSub1 = pSubitem->pSelect;
97252 /* Delete the transient table structure associated with the
97253 ** subquery
97255 sqlite3DbFree(db, pSubitem->zDatabase);
97256 sqlite3DbFree(db, pSubitem->zName);
97257 sqlite3DbFree(db, pSubitem->zAlias);
97258 pSubitem->zDatabase = 0;
97259 pSubitem->zName = 0;
97260 pSubitem->zAlias = 0;
97261 pSubitem->pSelect = 0;
97263 /* Defer deleting the Table object associated with the
97264 ** subquery until code generation is
97265 ** complete, since there may still exist Expr.pTab entries that
97266 ** refer to the subquery even after flattening. Ticket #3346.
97268 ** pSubitem->pTab is always non-NULL by test restrictions and tests above.
97270 if( ALWAYS(pSubitem->pTab!=0) ){
97271 Table *pTabToDel = pSubitem->pTab;
97272 if( pTabToDel->nRef==1 ){
97273 Parse *pToplevel = sqlite3ParseToplevel(pParse);
97274 pTabToDel->pNextZombie = pToplevel->pZombieTab;
97275 pToplevel->pZombieTab = pTabToDel;
97276 }else{
97277 pTabToDel->nRef--;
97279 pSubitem->pTab = 0;
97282 /* The following loop runs once for each term in a compound-subquery
97283 ** flattening (as described above). If we are doing a different kind
97284 ** of flattening - a flattening other than a compound-subquery flattening -
97285 ** then this loop only runs once.
97287 ** This loop moves all of the FROM elements of the subquery into the
97288 ** the FROM clause of the outer query. Before doing this, remember
97289 ** the cursor number for the original outer query FROM element in
97290 ** iParent. The iParent cursor will never be used. Subsequent code
97291 ** will scan expressions looking for iParent references and replace
97292 ** those references with expressions that resolve to the subquery FROM
97293 ** elements we are now copying in.
97295 for(pParent=p; pParent; pParent=pParent->pPrior, pSub=pSub->pPrior){
97296 int nSubSrc;
97297 u8 jointype = 0;
97298 pSubSrc = pSub->pSrc; /* FROM clause of subquery */
97299 nSubSrc = pSubSrc->nSrc; /* Number of terms in subquery FROM clause */
97300 pSrc = pParent->pSrc; /* FROM clause of the outer query */
97302 if( pSrc ){
97303 assert( pParent==p ); /* First time through the loop */
97304 jointype = pSubitem->jointype;
97305 }else{
97306 assert( pParent!=p ); /* 2nd and subsequent times through the loop */
97307 pSrc = pParent->pSrc = sqlite3SrcListAppend(db, 0, 0, 0);
97308 if( pSrc==0 ){
97309 assert( db->mallocFailed );
97310 break;
97314 /* The subquery uses a single slot of the FROM clause of the outer
97315 ** query. If the subquery has more than one element in its FROM clause,
97316 ** then expand the outer query to make space for it to hold all elements
97317 ** of the subquery.
97319 ** Example:
97321 ** SELECT * FROM tabA, (SELECT * FROM sub1, sub2), tabB;
97323 ** The outer query has 3 slots in its FROM clause. One slot of the
97324 ** outer query (the middle slot) is used by the subquery. The next
97325 ** block of code will expand the out query to 4 slots. The middle
97326 ** slot is expanded to two slots in order to make space for the
97327 ** two elements in the FROM clause of the subquery.
97329 if( nSubSrc>1 ){
97330 pParent->pSrc = pSrc = sqlite3SrcListEnlarge(db, pSrc, nSubSrc-1,iFrom+1);
97331 if( db->mallocFailed ){
97332 break;
97336 /* Transfer the FROM clause terms from the subquery into the
97337 ** outer query.
97339 for(i=0; i<nSubSrc; i++){
97340 sqlite3IdListDelete(db, pSrc->a[i+iFrom].pUsing);
97341 pSrc->a[i+iFrom] = pSubSrc->a[i];
97342 memset(&pSubSrc->a[i], 0, sizeof(pSubSrc->a[i]));
97344 pSrc->a[iFrom].jointype = jointype;
97346 /* Now begin substituting subquery result set expressions for
97347 ** references to the iParent in the outer query.
97349 ** Example:
97351 ** SELECT a+5, b*10 FROM (SELECT x*3 AS a, y+10 AS b FROM t1) WHERE a>b;
97352 ** \ \_____________ subquery __________/ /
97353 ** \_____________________ outer query ______________________________/
97355 ** We look at every expression in the outer query and every place we see
97356 ** "a" we substitute "x*3" and every place we see "b" we substitute "y+10".
97358 pList = pParent->pEList;
97359 for(i=0; i<pList->nExpr; i++){
97360 if( pList->a[i].zName==0 ){
97361 const char *zSpan = pList->a[i].zSpan;
97362 if( ALWAYS(zSpan) ){
97363 pList->a[i].zName = sqlite3DbStrDup(db, zSpan);
97367 substExprList(db, pParent->pEList, iParent, pSub->pEList);
97368 if( isAgg ){
97369 substExprList(db, pParent->pGroupBy, iParent, pSub->pEList);
97370 pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
97372 if( pSub->pOrderBy ){
97373 assert( pParent->pOrderBy==0 );
97374 pParent->pOrderBy = pSub->pOrderBy;
97375 pSub->pOrderBy = 0;
97376 }else if( pParent->pOrderBy ){
97377 substExprList(db, pParent->pOrderBy, iParent, pSub->pEList);
97379 if( pSub->pWhere ){
97380 pWhere = sqlite3ExprDup(db, pSub->pWhere, 0);
97381 }else{
97382 pWhere = 0;
97384 if( subqueryIsAgg ){
97385 assert( pParent->pHaving==0 );
97386 pParent->pHaving = pParent->pWhere;
97387 pParent->pWhere = pWhere;
97388 pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
97389 pParent->pHaving = sqlite3ExprAnd(db, pParent->pHaving,
97390 sqlite3ExprDup(db, pSub->pHaving, 0));
97391 assert( pParent->pGroupBy==0 );
97392 pParent->pGroupBy = sqlite3ExprListDup(db, pSub->pGroupBy, 0);
97393 }else{
97394 pParent->pWhere = substExpr(db, pParent->pWhere, iParent, pSub->pEList);
97395 pParent->pWhere = sqlite3ExprAnd(db, pParent->pWhere, pWhere);
97398 /* The flattened query is distinct if either the inner or the
97399 ** outer query is distinct.
97401 pParent->selFlags |= pSub->selFlags & SF_Distinct;
97404 ** SELECT ... FROM (SELECT ... LIMIT a OFFSET b) LIMIT x OFFSET y;
97406 ** One is tempted to try to add a and b to combine the limits. But this
97407 ** does not work if either limit is negative.
97409 if( pSub->pLimit ){
97410 pParent->pLimit = pSub->pLimit;
97411 pSub->pLimit = 0;
97415 /* Finially, delete what is left of the subquery and return
97416 ** success.
97418 sqlite3SelectDelete(db, pSub1);
97420 return 1;
97422 #endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
97425 ** Analyze the SELECT statement passed as an argument to see if it
97426 ** is a min() or max() query. Return WHERE_ORDERBY_MIN or WHERE_ORDERBY_MAX if
97427 ** it is, or 0 otherwise. At present, a query is considered to be
97428 ** a min()/max() query if:
97430 ** 1. There is a single object in the FROM clause.
97432 ** 2. There is a single expression in the result set, and it is
97433 ** either min(x) or max(x), where x is a column reference.
97435 static u8 minMaxQuery(Select *p){
97436 Expr *pExpr;
97437 ExprList *pEList = p->pEList;
97439 if( pEList->nExpr!=1 ) return WHERE_ORDERBY_NORMAL;
97440 pExpr = pEList->a[0].pExpr;
97441 if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
97442 if( NEVER(ExprHasProperty(pExpr, EP_xIsSelect)) ) return 0;
97443 pEList = pExpr->x.pList;
97444 if( pEList==0 || pEList->nExpr!=1 ) return 0;
97445 if( pEList->a[0].pExpr->op!=TK_AGG_COLUMN ) return WHERE_ORDERBY_NORMAL;
97446 assert( !ExprHasProperty(pExpr, EP_IntValue) );
97447 if( sqlite3StrICmp(pExpr->u.zToken,"min")==0 ){
97448 return WHERE_ORDERBY_MIN;
97449 }else if( sqlite3StrICmp(pExpr->u.zToken,"max")==0 ){
97450 return WHERE_ORDERBY_MAX;
97452 return WHERE_ORDERBY_NORMAL;
97456 ** The select statement passed as the first argument is an aggregate query.
97457 ** The second argment is the associated aggregate-info object. This
97458 ** function tests if the SELECT is of the form:
97460 ** SELECT count(*) FROM <tbl>
97462 ** where table is a database table, not a sub-select or view. If the query
97463 ** does match this pattern, then a pointer to the Table object representing
97464 ** <tbl> is returned. Otherwise, 0 is returned.
97466 static Table *isSimpleCount(Select *p, AggInfo *pAggInfo){
97467 Table *pTab;
97468 Expr *pExpr;
97470 assert( !p->pGroupBy );
97472 if( p->pWhere || p->pEList->nExpr!=1
97473 || p->pSrc->nSrc!=1 || p->pSrc->a[0].pSelect
97475 return 0;
97477 pTab = p->pSrc->a[0].pTab;
97478 pExpr = p->pEList->a[0].pExpr;
97479 assert( pTab && !pTab->pSelect && pExpr );
97481 if( IsVirtual(pTab) ) return 0;
97482 if( pExpr->op!=TK_AGG_FUNCTION ) return 0;
97483 if( (pAggInfo->aFunc[0].pFunc->flags&SQLITE_FUNC_COUNT)==0 ) return 0;
97484 if( pExpr->flags&EP_Distinct ) return 0;
97486 return pTab;
97490 ** If the source-list item passed as an argument was augmented with an
97491 ** INDEXED BY clause, then try to locate the specified index. If there
97492 ** was such a clause and the named index cannot be found, return
97493 ** SQLITE_ERROR and leave an error in pParse. Otherwise, populate
97494 ** pFrom->pIndex and return SQLITE_OK.
97496 SQLITE_PRIVATE int sqlite3IndexedByLookup(Parse *pParse, struct SrcList_item *pFrom){
97497 if( pFrom->pTab && pFrom->zIndex ){
97498 Table *pTab = pFrom->pTab;
97499 char *zIndex = pFrom->zIndex;
97500 Index *pIdx;
97501 for(pIdx=pTab->pIndex;
97502 pIdx && sqlite3StrICmp(pIdx->zName, zIndex);
97503 pIdx=pIdx->pNext
97505 if( !pIdx ){
97506 sqlite3ErrorMsg(pParse, "no such index: %s", zIndex, 0);
97507 pParse->checkSchema = 1;
97508 return SQLITE_ERROR;
97510 pFrom->pIndex = pIdx;
97512 return SQLITE_OK;
97516 ** This routine is a Walker callback for "expanding" a SELECT statement.
97517 ** "Expanding" means to do the following:
97519 ** (1) Make sure VDBE cursor numbers have been assigned to every
97520 ** element of the FROM clause.
97522 ** (2) Fill in the pTabList->a[].pTab fields in the SrcList that
97523 ** defines FROM clause. When views appear in the FROM clause,
97524 ** fill pTabList->a[].pSelect with a copy of the SELECT statement
97525 ** that implements the view. A copy is made of the view's SELECT
97526 ** statement so that we can freely modify or delete that statement
97527 ** without worrying about messing up the presistent representation
97528 ** of the view.
97530 ** (3) Add terms to the WHERE clause to accomodate the NATURAL keyword
97531 ** on joins and the ON and USING clause of joins.
97533 ** (4) Scan the list of columns in the result set (pEList) looking
97534 ** for instances of the "*" operator or the TABLE.* operator.
97535 ** If found, expand each "*" to be every column in every table
97536 ** and TABLE.* to be every column in TABLE.
97539 static int selectExpander(Walker *pWalker, Select *p){
97540 Parse *pParse = pWalker->pParse;
97541 int i, j, k;
97542 SrcList *pTabList;
97543 ExprList *pEList;
97544 struct SrcList_item *pFrom;
97545 sqlite3 *db = pParse->db;
97547 if( db->mallocFailed ){
97548 return WRC_Abort;
97550 if( NEVER(p->pSrc==0) || (p->selFlags & SF_Expanded)!=0 ){
97551 return WRC_Prune;
97553 p->selFlags |= SF_Expanded;
97554 pTabList = p->pSrc;
97555 pEList = p->pEList;
97557 /* Make sure cursor numbers have been assigned to all entries in
97558 ** the FROM clause of the SELECT statement.
97560 sqlite3SrcListAssignCursors(pParse, pTabList);
97562 /* Look up every table named in the FROM clause of the select. If
97563 ** an entry of the FROM clause is a subquery instead of a table or view,
97564 ** then create a transient table structure to describe the subquery.
97566 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
97567 Table *pTab;
97568 if( pFrom->pTab!=0 ){
97569 /* This statement has already been prepared. There is no need
97570 ** to go further. */
97571 assert( i==0 );
97572 return WRC_Prune;
97574 if( pFrom->zName==0 ){
97575 #ifndef SQLITE_OMIT_SUBQUERY
97576 Select *pSel = pFrom->pSelect;
97577 /* A sub-query in the FROM clause of a SELECT */
97578 assert( pSel!=0 );
97579 assert( pFrom->pTab==0 );
97580 sqlite3WalkSelect(pWalker, pSel);
97581 pFrom->pTab = pTab = sqlite3DbMallocZero(db, sizeof(Table));
97582 if( pTab==0 ) return WRC_Abort;
97583 pTab->nRef = 1;
97584 pTab->zName = sqlite3MPrintf(db, "sqlite_subquery_%p_", (void*)pTab);
97585 while( pSel->pPrior ){ pSel = pSel->pPrior; }
97586 selectColumnsFromExprList(pParse, pSel->pEList, &pTab->nCol, &pTab->aCol);
97587 pTab->iPKey = -1;
97588 pTab->nRowEst = 1000000;
97589 pTab->tabFlags |= TF_Ephemeral;
97590 #endif
97591 }else{
97592 /* An ordinary table or view name in the FROM clause */
97593 assert( pFrom->pTab==0 );
97594 pFrom->pTab = pTab =
97595 sqlite3LocateTable(pParse,0,pFrom->zName,pFrom->zDatabase);
97596 if( pTab==0 ) return WRC_Abort;
97597 pTab->nRef++;
97598 #if !defined(SQLITE_OMIT_VIEW) || !defined (SQLITE_OMIT_VIRTUALTABLE)
97599 if( pTab->pSelect || IsVirtual(pTab) ){
97600 /* We reach here if the named table is a really a view */
97601 if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
97602 assert( pFrom->pSelect==0 );
97603 pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
97604 sqlite3WalkSelect(pWalker, pFrom->pSelect);
97606 #endif
97609 /* Locate the index named by the INDEXED BY clause, if any. */
97610 if( sqlite3IndexedByLookup(pParse, pFrom) ){
97611 return WRC_Abort;
97615 /* Process NATURAL keywords, and ON and USING clauses of joins.
97617 if( db->mallocFailed || sqliteProcessJoin(pParse, p) ){
97618 return WRC_Abort;
97621 /* For every "*" that occurs in the column list, insert the names of
97622 ** all columns in all tables. And for every TABLE.* insert the names
97623 ** of all columns in TABLE. The parser inserted a special expression
97624 ** with the TK_ALL operator for each "*" that it found in the column list.
97625 ** The following code just has to locate the TK_ALL expressions and expand
97626 ** each one to the list of all columns in all tables.
97628 ** The first loop just checks to see if there are any "*" operators
97629 ** that need expanding.
97631 for(k=0; k<pEList->nExpr; k++){
97632 Expr *pE = pEList->a[k].pExpr;
97633 if( pE->op==TK_ALL ) break;
97634 assert( pE->op!=TK_DOT || pE->pRight!=0 );
97635 assert( pE->op!=TK_DOT || (pE->pLeft!=0 && pE->pLeft->op==TK_ID) );
97636 if( pE->op==TK_DOT && pE->pRight->op==TK_ALL ) break;
97638 if( k<pEList->nExpr ){
97640 ** If we get here it means the result set contains one or more "*"
97641 ** operators that need to be expanded. Loop through each expression
97642 ** in the result set and expand them one by one.
97644 struct ExprList_item *a = pEList->a;
97645 ExprList *pNew = 0;
97646 int flags = pParse->db->flags;
97647 int longNames = (flags & SQLITE_FullColNames)!=0
97648 && (flags & SQLITE_ShortColNames)==0;
97650 for(k=0; k<pEList->nExpr; k++){
97651 Expr *pE = a[k].pExpr;
97652 assert( pE->op!=TK_DOT || pE->pRight!=0 );
97653 if( pE->op!=TK_ALL && (pE->op!=TK_DOT || pE->pRight->op!=TK_ALL) ){
97654 /* This particular expression does not need to be expanded.
97656 pNew = sqlite3ExprListAppend(pParse, pNew, a[k].pExpr);
97657 if( pNew ){
97658 pNew->a[pNew->nExpr-1].zName = a[k].zName;
97659 pNew->a[pNew->nExpr-1].zSpan = a[k].zSpan;
97660 a[k].zName = 0;
97661 a[k].zSpan = 0;
97663 a[k].pExpr = 0;
97664 }else{
97665 /* This expression is a "*" or a "TABLE.*" and needs to be
97666 ** expanded. */
97667 int tableSeen = 0; /* Set to 1 when TABLE matches */
97668 char *zTName; /* text of name of TABLE */
97669 if( pE->op==TK_DOT ){
97670 assert( pE->pLeft!=0 );
97671 assert( !ExprHasProperty(pE->pLeft, EP_IntValue) );
97672 zTName = pE->pLeft->u.zToken;
97673 }else{
97674 zTName = 0;
97676 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
97677 Table *pTab = pFrom->pTab;
97678 char *zTabName = pFrom->zAlias;
97679 if( zTabName==0 ){
97680 zTabName = pTab->zName;
97682 if( db->mallocFailed ) break;
97683 if( zTName && sqlite3StrICmp(zTName, zTabName)!=0 ){
97684 continue;
97686 tableSeen = 1;
97687 for(j=0; j<pTab->nCol; j++){
97688 Expr *pExpr, *pRight;
97689 char *zName = pTab->aCol[j].zName;
97690 char *zColname; /* The computed column name */
97691 char *zToFree; /* Malloced string that needs to be freed */
97692 Token sColname; /* Computed column name as a token */
97694 /* If a column is marked as 'hidden' (currently only possible
97695 ** for virtual tables), do not include it in the expanded
97696 ** result-set list.
97698 if( IsHiddenColumn(&pTab->aCol[j]) ){
97699 assert(IsVirtual(pTab));
97700 continue;
97703 if( i>0 && zTName==0 ){
97704 if( (pFrom->jointype & JT_NATURAL)!=0
97705 && tableAndColumnIndex(pTabList, i, zName, 0, 0)
97707 /* In a NATURAL join, omit the join columns from the
97708 ** table to the right of the join */
97709 continue;
97711 if( sqlite3IdListIndex(pFrom->pUsing, zName)>=0 ){
97712 /* In a join with a USING clause, omit columns in the
97713 ** using clause from the table on the right. */
97714 continue;
97717 pRight = sqlite3Expr(db, TK_ID, zName);
97718 zColname = zName;
97719 zToFree = 0;
97720 if( longNames || pTabList->nSrc>1 ){
97721 Expr *pLeft;
97722 pLeft = sqlite3Expr(db, TK_ID, zTabName);
97723 pExpr = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
97724 if( longNames ){
97725 zColname = sqlite3MPrintf(db, "%s.%s", zTabName, zName);
97726 zToFree = zColname;
97728 }else{
97729 pExpr = pRight;
97731 pNew = sqlite3ExprListAppend(pParse, pNew, pExpr);
97732 sColname.z = zColname;
97733 sColname.n = sqlite3Strlen30(zColname);
97734 sqlite3ExprListSetName(pParse, pNew, &sColname, 0);
97735 sqlite3DbFree(db, zToFree);
97738 if( !tableSeen ){
97739 if( zTName ){
97740 sqlite3ErrorMsg(pParse, "no such table: %s", zTName);
97741 }else{
97742 sqlite3ErrorMsg(pParse, "no tables specified");
97747 sqlite3ExprListDelete(db, pEList);
97748 p->pEList = pNew;
97750 #if SQLITE_MAX_COLUMN
97751 if( p->pEList && p->pEList->nExpr>db->aLimit[SQLITE_LIMIT_COLUMN] ){
97752 sqlite3ErrorMsg(pParse, "too many columns in result set");
97754 #endif
97755 return WRC_Continue;
97759 ** No-op routine for the parse-tree walker.
97761 ** When this routine is the Walker.xExprCallback then expression trees
97762 ** are walked without any actions being taken at each node. Presumably,
97763 ** when this routine is used for Walker.xExprCallback then
97764 ** Walker.xSelectCallback is set to do something useful for every
97765 ** subquery in the parser tree.
97767 static int exprWalkNoop(Walker *NotUsed, Expr *NotUsed2){
97768 UNUSED_PARAMETER2(NotUsed, NotUsed2);
97769 return WRC_Continue;
97773 ** This routine "expands" a SELECT statement and all of its subqueries.
97774 ** For additional information on what it means to "expand" a SELECT
97775 ** statement, see the comment on the selectExpand worker callback above.
97777 ** Expanding a SELECT statement is the first step in processing a
97778 ** SELECT statement. The SELECT statement must be expanded before
97779 ** name resolution is performed.
97781 ** If anything goes wrong, an error message is written into pParse.
97782 ** The calling function can detect the problem by looking at pParse->nErr
97783 ** and/or pParse->db->mallocFailed.
97785 static void sqlite3SelectExpand(Parse *pParse, Select *pSelect){
97786 Walker w;
97787 w.xSelectCallback = selectExpander;
97788 w.xExprCallback = exprWalkNoop;
97789 w.pParse = pParse;
97790 sqlite3WalkSelect(&w, pSelect);
97794 #ifndef SQLITE_OMIT_SUBQUERY
97796 ** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
97797 ** interface.
97799 ** For each FROM-clause subquery, add Column.zType and Column.zColl
97800 ** information to the Table structure that represents the result set
97801 ** of that subquery.
97803 ** The Table structure that represents the result set was constructed
97804 ** by selectExpander() but the type and collation information was omitted
97805 ** at that point because identifiers had not yet been resolved. This
97806 ** routine is called after identifier resolution.
97808 static int selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
97809 Parse *pParse;
97810 int i;
97811 SrcList *pTabList;
97812 struct SrcList_item *pFrom;
97814 assert( p->selFlags & SF_Resolved );
97815 if( (p->selFlags & SF_HasTypeInfo)==0 ){
97816 p->selFlags |= SF_HasTypeInfo;
97817 pParse = pWalker->pParse;
97818 pTabList = p->pSrc;
97819 for(i=0, pFrom=pTabList->a; i<pTabList->nSrc; i++, pFrom++){
97820 Table *pTab = pFrom->pTab;
97821 if( ALWAYS(pTab!=0) && (pTab->tabFlags & TF_Ephemeral)!=0 ){
97822 /* A sub-query in the FROM clause of a SELECT */
97823 Select *pSel = pFrom->pSelect;
97824 assert( pSel );
97825 while( pSel->pPrior ) pSel = pSel->pPrior;
97826 selectAddColumnTypeAndCollation(pParse, pTab->nCol, pTab->aCol, pSel);
97830 return WRC_Continue;
97832 #endif
97836 ** This routine adds datatype and collating sequence information to
97837 ** the Table structures of all FROM-clause subqueries in a
97838 ** SELECT statement.
97840 ** Use this routine after name resolution.
97842 static void sqlite3SelectAddTypeInfo(Parse *pParse, Select *pSelect){
97843 #ifndef SQLITE_OMIT_SUBQUERY
97844 Walker w;
97845 w.xSelectCallback = selectAddSubqueryTypeInfo;
97846 w.xExprCallback = exprWalkNoop;
97847 w.pParse = pParse;
97848 sqlite3WalkSelect(&w, pSelect);
97849 #endif
97854 ** This routine sets of a SELECT statement for processing. The
97855 ** following is accomplished:
97857 ** * VDBE Cursor numbers are assigned to all FROM-clause terms.
97858 ** * Ephemeral Table objects are created for all FROM-clause subqueries.
97859 ** * ON and USING clauses are shifted into WHERE statements
97860 ** * Wildcards "*" and "TABLE.*" in result sets are expanded.
97861 ** * Identifiers in expression are matched to tables.
97863 ** This routine acts recursively on all subqueries within the SELECT.
97865 SQLITE_PRIVATE void sqlite3SelectPrep(
97866 Parse *pParse, /* The parser context */
97867 Select *p, /* The SELECT statement being coded. */
97868 NameContext *pOuterNC /* Name context for container */
97870 sqlite3 *db;
97871 if( NEVER(p==0) ) return;
97872 db = pParse->db;
97873 if( p->selFlags & SF_HasTypeInfo ) return;
97874 sqlite3SelectExpand(pParse, p);
97875 if( pParse->nErr || db->mallocFailed ) return;
97876 sqlite3ResolveSelectNames(pParse, p, pOuterNC);
97877 if( pParse->nErr || db->mallocFailed ) return;
97878 sqlite3SelectAddTypeInfo(pParse, p);
97882 ** Reset the aggregate accumulator.
97884 ** The aggregate accumulator is a set of memory cells that hold
97885 ** intermediate results while calculating an aggregate. This
97886 ** routine simply stores NULLs in all of those memory cells.
97888 static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
97889 Vdbe *v = pParse->pVdbe;
97890 int i;
97891 struct AggInfo_func *pFunc;
97892 if( pAggInfo->nFunc+pAggInfo->nColumn==0 ){
97893 return;
97895 for(i=0; i<pAggInfo->nColumn; i++){
97896 sqlite3VdbeAddOp2(v, OP_Null, 0, pAggInfo->aCol[i].iMem);
97898 for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
97899 sqlite3VdbeAddOp2(v, OP_Null, 0, pFunc->iMem);
97900 if( pFunc->iDistinct>=0 ){
97901 Expr *pE = pFunc->pExpr;
97902 assert( !ExprHasProperty(pE, EP_xIsSelect) );
97903 if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
97904 sqlite3ErrorMsg(pParse, "DISTINCT aggregates must have exactly one "
97905 "argument");
97906 pFunc->iDistinct = -1;
97907 }else{
97908 KeyInfo *pKeyInfo = keyInfoFromExprList(pParse, pE->x.pList);
97909 sqlite3VdbeAddOp4(v, OP_OpenEphemeral, pFunc->iDistinct, 0, 0,
97910 (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
97917 ** Invoke the OP_AggFinalize opcode for every aggregate function
97918 ** in the AggInfo structure.
97920 static void finalizeAggFunctions(Parse *pParse, AggInfo *pAggInfo){
97921 Vdbe *v = pParse->pVdbe;
97922 int i;
97923 struct AggInfo_func *pF;
97924 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
97925 ExprList *pList = pF->pExpr->x.pList;
97926 assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
97927 sqlite3VdbeAddOp4(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0, 0,
97928 (void*)pF->pFunc, P4_FUNCDEF);
97933 ** Update the accumulator memory cells for an aggregate based on
97934 ** the current cursor position.
97936 static void updateAccumulator(Parse *pParse, AggInfo *pAggInfo){
97937 Vdbe *v = pParse->pVdbe;
97938 int i;
97939 struct AggInfo_func *pF;
97940 struct AggInfo_col *pC;
97942 pAggInfo->directMode = 1;
97943 sqlite3ExprCacheClear(pParse);
97944 for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
97945 int nArg;
97946 int addrNext = 0;
97947 int regAgg;
97948 ExprList *pList = pF->pExpr->x.pList;
97949 assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
97950 if( pList ){
97951 nArg = pList->nExpr;
97952 regAgg = sqlite3GetTempRange(pParse, nArg);
97953 sqlite3ExprCodeExprList(pParse, pList, regAgg, 1);
97954 }else{
97955 nArg = 0;
97956 regAgg = 0;
97958 if( pF->iDistinct>=0 ){
97959 addrNext = sqlite3VdbeMakeLabel(v);
97960 assert( nArg==1 );
97961 codeDistinct(pParse, pF->iDistinct, addrNext, 1, regAgg);
97963 if( pF->pFunc->flags & SQLITE_FUNC_NEEDCOLL ){
97964 CollSeq *pColl = 0;
97965 struct ExprList_item *pItem;
97966 int j;
97967 assert( pList!=0 ); /* pList!=0 if pF->pFunc has NEEDCOLL */
97968 for(j=0, pItem=pList->a; !pColl && j<nArg; j++, pItem++){
97969 pColl = sqlite3ExprCollSeq(pParse, pItem->pExpr);
97971 if( !pColl ){
97972 pColl = pParse->db->pDfltColl;
97974 sqlite3VdbeAddOp4(v, OP_CollSeq, 0, 0, 0, (char *)pColl, P4_COLLSEQ);
97976 sqlite3VdbeAddOp4(v, OP_AggStep, 0, regAgg, pF->iMem,
97977 (void*)pF->pFunc, P4_FUNCDEF);
97978 sqlite3VdbeChangeP5(v, (u8)nArg);
97979 sqlite3ExprCacheAffinityChange(pParse, regAgg, nArg);
97980 sqlite3ReleaseTempRange(pParse, regAgg, nArg);
97981 if( addrNext ){
97982 sqlite3VdbeResolveLabel(v, addrNext);
97983 sqlite3ExprCacheClear(pParse);
97987 /* Before populating the accumulator registers, clear the column cache.
97988 ** Otherwise, if any of the required column values are already present
97989 ** in registers, sqlite3ExprCode() may use OP_SCopy to copy the value
97990 ** to pC->iMem. But by the time the value is used, the original register
97991 ** may have been used, invalidating the underlying buffer holding the
97992 ** text or blob value. See ticket [883034dcb5].
97994 ** Another solution would be to change the OP_SCopy used to copy cached
97995 ** values to an OP_Copy.
97997 sqlite3ExprCacheClear(pParse);
97998 for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
97999 sqlite3ExprCode(pParse, pC->pExpr, pC->iMem);
98001 pAggInfo->directMode = 0;
98002 sqlite3ExprCacheClear(pParse);
98006 ** Add a single OP_Explain instruction to the VDBE to explain a simple
98007 ** count(*) query ("SELECT count(*) FROM pTab").
98009 #ifndef SQLITE_OMIT_EXPLAIN
98010 static void explainSimpleCount(
98011 Parse *pParse, /* Parse context */
98012 Table *pTab, /* Table being queried */
98013 Index *pIdx /* Index used to optimize scan, or NULL */
98015 if( pParse->explain==2 ){
98016 char *zEqp = sqlite3MPrintf(pParse->db, "SCAN TABLE %s %s%s(~%d rows)",
98017 pTab->zName,
98018 pIdx ? "USING COVERING INDEX " : "",
98019 pIdx ? pIdx->zName : "",
98020 pTab->nRowEst
98022 sqlite3VdbeAddOp4(
98023 pParse->pVdbe, OP_Explain, pParse->iSelectId, 0, 0, zEqp, P4_DYNAMIC
98027 #else
98028 # define explainSimpleCount(a,b,c)
98029 #endif
98032 ** Generate code for the SELECT statement given in the p argument.
98034 ** The results are distributed in various ways depending on the
98035 ** contents of the SelectDest structure pointed to by argument pDest
98036 ** as follows:
98038 ** pDest->eDest Result
98039 ** ------------ -------------------------------------------
98040 ** SRT_Output Generate a row of output (using the OP_ResultRow
98041 ** opcode) for each row in the result set.
98043 ** SRT_Mem Only valid if the result is a single column.
98044 ** Store the first column of the first result row
98045 ** in register pDest->iParm then abandon the rest
98046 ** of the query. This destination implies "LIMIT 1".
98048 ** SRT_Set The result must be a single column. Store each
98049 ** row of result as the key in table pDest->iParm.
98050 ** Apply the affinity pDest->affinity before storing
98051 ** results. Used to implement "IN (SELECT ...)".
98053 ** SRT_Union Store results as a key in a temporary table pDest->iParm.
98055 ** SRT_Except Remove results from the temporary table pDest->iParm.
98057 ** SRT_Table Store results in temporary table pDest->iParm.
98058 ** This is like SRT_EphemTab except that the table
98059 ** is assumed to already be open.
98061 ** SRT_EphemTab Create an temporary table pDest->iParm and store
98062 ** the result there. The cursor is left open after
98063 ** returning. This is like SRT_Table except that
98064 ** this destination uses OP_OpenEphemeral to create
98065 ** the table first.
98067 ** SRT_Coroutine Generate a co-routine that returns a new row of
98068 ** results each time it is invoked. The entry point
98069 ** of the co-routine is stored in register pDest->iParm.
98071 ** SRT_Exists Store a 1 in memory cell pDest->iParm if the result
98072 ** set is not empty.
98074 ** SRT_Discard Throw the results away. This is used by SELECT
98075 ** statements within triggers whose only purpose is
98076 ** the side-effects of functions.
98078 ** This routine returns the number of errors. If any errors are
98079 ** encountered, then an appropriate error message is left in
98080 ** pParse->zErrMsg.
98082 ** This routine does NOT free the Select structure passed in. The
98083 ** calling function needs to do that.
98085 SQLITE_PRIVATE int sqlite3Select(
98086 Parse *pParse, /* The parser context */
98087 Select *p, /* The SELECT statement being coded. */
98088 SelectDest *pDest /* What to do with the query results */
98090 int i, j; /* Loop counters */
98091 WhereInfo *pWInfo; /* Return from sqlite3WhereBegin() */
98092 Vdbe *v; /* The virtual machine under construction */
98093 int isAgg; /* True for select lists like "count(*)" */
98094 ExprList *pEList; /* List of columns to extract. */
98095 SrcList *pTabList; /* List of tables to select from */
98096 Expr *pWhere; /* The WHERE clause. May be NULL */
98097 ExprList *pOrderBy; /* The ORDER BY clause. May be NULL */
98098 ExprList *pGroupBy; /* The GROUP BY clause. May be NULL */
98099 Expr *pHaving; /* The HAVING clause. May be NULL */
98100 int isDistinct; /* True if the DISTINCT keyword is present */
98101 int distinct; /* Table to use for the distinct set */
98102 int rc = 1; /* Value to return from this function */
98103 int addrSortIndex; /* Address of an OP_OpenEphemeral instruction */
98104 int addrDistinctIndex; /* Address of an OP_OpenEphemeral instruction */
98105 AggInfo sAggInfo; /* Information used by aggregate queries */
98106 int iEnd; /* Address of the end of the query */
98107 sqlite3 *db; /* The database connection */
98109 #ifndef SQLITE_OMIT_EXPLAIN
98110 int iRestoreSelectId = pParse->iSelectId;
98111 pParse->iSelectId = pParse->iNextSelectId++;
98112 #endif
98114 db = pParse->db;
98115 if( p==0 || db->mallocFailed || pParse->nErr ){
98116 return 1;
98118 if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
98119 memset(&sAggInfo, 0, sizeof(sAggInfo));
98121 if( IgnorableOrderby(pDest) ){
98122 assert(pDest->eDest==SRT_Exists || pDest->eDest==SRT_Union ||
98123 pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard);
98124 /* If ORDER BY makes no difference in the output then neither does
98125 ** DISTINCT so it can be removed too. */
98126 sqlite3ExprListDelete(db, p->pOrderBy);
98127 p->pOrderBy = 0;
98128 p->selFlags &= ~SF_Distinct;
98130 sqlite3SelectPrep(pParse, p, 0);
98131 pOrderBy = p->pOrderBy;
98132 pTabList = p->pSrc;
98133 pEList = p->pEList;
98134 if( pParse->nErr || db->mallocFailed ){
98135 goto select_end;
98137 isAgg = (p->selFlags & SF_Aggregate)!=0;
98138 assert( pEList!=0 );
98140 /* Begin generating code.
98142 v = sqlite3GetVdbe(pParse);
98143 if( v==0 ) goto select_end;
98145 /* If writing to memory or generating a set
98146 ** only a single column may be output.
98148 #ifndef SQLITE_OMIT_SUBQUERY
98149 if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
98150 goto select_end;
98152 #endif
98154 /* Generate code for all sub-queries in the FROM clause
98156 #if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
98157 for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
98158 struct SrcList_item *pItem = &pTabList->a[i];
98159 SelectDest dest;
98160 Select *pSub = pItem->pSelect;
98161 int isAggSub;
98163 if( pSub==0 ) continue;
98164 if( pItem->addrFillSub ){
98165 sqlite3VdbeAddOp2(v, OP_Gosub, pItem->regReturn, pItem->addrFillSub);
98166 continue;
98169 /* Increment Parse.nHeight by the height of the largest expression
98170 ** tree refered to by this, the parent select. The child select
98171 ** may contain expression trees of at most
98172 ** (SQLITE_MAX_EXPR_DEPTH-Parse.nHeight) height. This is a bit
98173 ** more conservative than necessary, but much easier than enforcing
98174 ** an exact limit.
98176 pParse->nHeight += sqlite3SelectExprHeight(p);
98178 isAggSub = (pSub->selFlags & SF_Aggregate)!=0;
98179 if( flattenSubquery(pParse, p, i, isAgg, isAggSub) ){
98180 /* This subquery can be absorbed into its parent. */
98181 if( isAggSub ){
98182 isAgg = 1;
98183 p->selFlags |= SF_Aggregate;
98185 i = -1;
98186 }else{
98187 /* Generate a subroutine that will fill an ephemeral table with
98188 ** the content of this subquery. pItem->addrFillSub will point
98189 ** to the address of the generated subroutine. pItem->regReturn
98190 ** is a register allocated to hold the subroutine return address
98192 int topAddr;
98193 int onceAddr = 0;
98194 int retAddr;
98195 assert( pItem->addrFillSub==0 );
98196 pItem->regReturn = ++pParse->nMem;
98197 topAddr = sqlite3VdbeAddOp2(v, OP_Integer, 0, pItem->regReturn);
98198 pItem->addrFillSub = topAddr+1;
98199 VdbeNoopComment((v, "materialize %s", pItem->pTab->zName));
98200 if( pItem->isCorrelated==0 ){
98201 /* If the subquery is no correlated and if we are not inside of
98202 ** a trigger, then we only need to compute the value of the subquery
98203 ** once. */
98204 onceAddr = sqlite3CodeOnce(pParse);
98206 sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
98207 explainSetInteger(pItem->iSelectId, (u8)pParse->iNextSelectId);
98208 sqlite3Select(pParse, pSub, &dest);
98209 pItem->pTab->nRowEst = (unsigned)pSub->nSelectRow;
98210 if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
98211 retAddr = sqlite3VdbeAddOp1(v, OP_Return, pItem->regReturn);
98212 VdbeComment((v, "end %s", pItem->pTab->zName));
98213 sqlite3VdbeChangeP1(v, topAddr, retAddr);
98214 sqlite3ClearTempRegCache(pParse);
98216 if( /*pParse->nErr ||*/ db->mallocFailed ){
98217 goto select_end;
98219 pParse->nHeight -= sqlite3SelectExprHeight(p);
98220 pTabList = p->pSrc;
98221 if( !IgnorableOrderby(pDest) ){
98222 pOrderBy = p->pOrderBy;
98225 pEList = p->pEList;
98226 #endif
98227 pWhere = p->pWhere;
98228 pGroupBy = p->pGroupBy;
98229 pHaving = p->pHaving;
98230 isDistinct = (p->selFlags & SF_Distinct)!=0;
98232 #ifndef SQLITE_OMIT_COMPOUND_SELECT
98233 /* If there is are a sequence of queries, do the earlier ones first.
98235 if( p->pPrior ){
98236 if( p->pRightmost==0 ){
98237 Select *pLoop, *pRight = 0;
98238 int cnt = 0;
98239 int mxSelect;
98240 for(pLoop=p; pLoop; pLoop=pLoop->pPrior, cnt++){
98241 pLoop->pRightmost = p;
98242 pLoop->pNext = pRight;
98243 pRight = pLoop;
98245 mxSelect = db->aLimit[SQLITE_LIMIT_COMPOUND_SELECT];
98246 if( mxSelect && cnt>mxSelect ){
98247 sqlite3ErrorMsg(pParse, "too many terms in compound SELECT");
98248 goto select_end;
98251 rc = multiSelect(pParse, p, pDest);
98252 explainSetInteger(pParse->iSelectId, iRestoreSelectId);
98253 return rc;
98255 #endif
98257 /* If there is both a GROUP BY and an ORDER BY clause and they are
98258 ** identical, then disable the ORDER BY clause since the GROUP BY
98259 ** will cause elements to come out in the correct order. This is
98260 ** an optimization - the correct answer should result regardless.
98261 ** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER
98262 ** to disable this optimization for testing purposes.
98264 if( sqlite3ExprListCompare(p->pGroupBy, pOrderBy)==0
98265 && (db->flags & SQLITE_GroupByOrder)==0 ){
98266 pOrderBy = 0;
98269 /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and
98270 ** if the select-list is the same as the ORDER BY list, then this query
98271 ** can be rewritten as a GROUP BY. In other words, this:
98273 ** SELECT DISTINCT xyz FROM ... ORDER BY xyz
98275 ** is transformed to:
98277 ** SELECT xyz FROM ... GROUP BY xyz
98279 ** The second form is preferred as a single index (or temp-table) may be
98280 ** used for both the ORDER BY and DISTINCT processing. As originally
98281 ** written the query must use a temp-table for at least one of the ORDER
98282 ** BY and DISTINCT, and an index or separate temp-table for the other.
98284 if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct
98285 && sqlite3ExprListCompare(pOrderBy, p->pEList)==0
98287 p->selFlags &= ~SF_Distinct;
98288 p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0);
98289 pGroupBy = p->pGroupBy;
98290 pOrderBy = 0;
98293 /* If there is an ORDER BY clause, then this sorting
98294 ** index might end up being unused if the data can be
98295 ** extracted in pre-sorted order. If that is the case, then the
98296 ** OP_OpenEphemeral instruction will be changed to an OP_Noop once
98297 ** we figure out that the sorting index is not needed. The addrSortIndex
98298 ** variable is used to facilitate that change.
98300 if( pOrderBy ){
98301 KeyInfo *pKeyInfo;
98302 pKeyInfo = keyInfoFromExprList(pParse, pOrderBy);
98303 pOrderBy->iECursor = pParse->nTab++;
98304 p->addrOpenEphm[2] = addrSortIndex =
98305 sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
98306 pOrderBy->iECursor, pOrderBy->nExpr+2, 0,
98307 (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
98308 }else{
98309 addrSortIndex = -1;
98312 /* If the output is destined for a temporary table, open that table.
98314 if( pDest->eDest==SRT_EphemTab ){
98315 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pDest->iParm, pEList->nExpr);
98318 /* Set the limiter.
98320 iEnd = sqlite3VdbeMakeLabel(v);
98321 p->nSelectRow = (double)LARGEST_INT64;
98322 computeLimitRegisters(pParse, p, iEnd);
98323 if( p->iLimit==0 && addrSortIndex>=0 ){
98324 sqlite3VdbeGetOp(v, addrSortIndex)->opcode = OP_SorterOpen;
98325 p->selFlags |= SF_UseSorter;
98328 /* Open a virtual index to use for the distinct set.
98330 if( p->selFlags & SF_Distinct ){
98331 KeyInfo *pKeyInfo;
98332 distinct = pParse->nTab++;
98333 pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
98334 addrDistinctIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
98335 (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
98336 sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
98337 }else{
98338 distinct = addrDistinctIndex = -1;
98341 /* Aggregate and non-aggregate queries are handled differently */
98342 if( !isAgg && pGroupBy==0 ){
98343 ExprList *pDist = (isDistinct ? p->pEList : 0);
98345 /* Begin the database scan. */
98346 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, pDist, 0);
98347 if( pWInfo==0 ) goto select_end;
98348 if( pWInfo->nRowOut < p->nSelectRow ) p->nSelectRow = pWInfo->nRowOut;
98350 /* If sorting index that was created by a prior OP_OpenEphemeral
98351 ** instruction ended up not being needed, then change the OP_OpenEphemeral
98352 ** into an OP_Noop.
98354 if( addrSortIndex>=0 && pOrderBy==0 ){
98355 sqlite3VdbeChangeToNoop(v, addrSortIndex);
98356 p->addrOpenEphm[2] = -1;
98359 if( pWInfo->eDistinct ){
98360 VdbeOp *pOp; /* No longer required OpenEphemeral instr. */
98362 assert( addrDistinctIndex>=0 );
98363 pOp = sqlite3VdbeGetOp(v, addrDistinctIndex);
98365 assert( isDistinct );
98366 assert( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED
98367 || pWInfo->eDistinct==WHERE_DISTINCT_UNIQUE
98369 distinct = -1;
98370 if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED ){
98371 int iJump;
98372 int iExpr;
98373 int iFlag = ++pParse->nMem;
98374 int iBase = pParse->nMem+1;
98375 int iBase2 = iBase + pEList->nExpr;
98376 pParse->nMem += (pEList->nExpr*2);
98378 /* Change the OP_OpenEphemeral coded earlier to an OP_Integer. The
98379 ** OP_Integer initializes the "first row" flag. */
98380 pOp->opcode = OP_Integer;
98381 pOp->p1 = 1;
98382 pOp->p2 = iFlag;
98384 sqlite3ExprCodeExprList(pParse, pEList, iBase, 1);
98385 iJump = sqlite3VdbeCurrentAddr(v) + 1 + pEList->nExpr + 1 + 1;
98386 sqlite3VdbeAddOp2(v, OP_If, iFlag, iJump-1);
98387 for(iExpr=0; iExpr<pEList->nExpr; iExpr++){
98388 CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[iExpr].pExpr);
98389 sqlite3VdbeAddOp3(v, OP_Ne, iBase+iExpr, iJump, iBase2+iExpr);
98390 sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ);
98391 sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
98393 sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iContinue);
98395 sqlite3VdbeAddOp2(v, OP_Integer, 0, iFlag);
98396 assert( sqlite3VdbeCurrentAddr(v)==iJump );
98397 sqlite3VdbeAddOp3(v, OP_Move, iBase, iBase2, pEList->nExpr);
98398 }else{
98399 pOp->opcode = OP_Noop;
98403 /* Use the standard inner loop. */
98404 selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, pDest,
98405 pWInfo->iContinue, pWInfo->iBreak);
98407 /* End the database scan loop.
98409 sqlite3WhereEnd(pWInfo);
98410 }else{
98411 /* This is the processing for aggregate queries */
98412 NameContext sNC; /* Name context for processing aggregate information */
98413 int iAMem; /* First Mem address for storing current GROUP BY */
98414 int iBMem; /* First Mem address for previous GROUP BY */
98415 int iUseFlag; /* Mem address holding flag indicating that at least
98416 ** one row of the input to the aggregator has been
98417 ** processed */
98418 int iAbortFlag; /* Mem address which causes query abort if positive */
98419 int groupBySort; /* Rows come from source in GROUP BY order */
98420 int addrEnd; /* End of processing for this SELECT */
98421 int sortPTab = 0; /* Pseudotable used to decode sorting results */
98422 int sortOut = 0; /* Output register from the sorter */
98424 /* Remove any and all aliases between the result set and the
98425 ** GROUP BY clause.
98427 if( pGroupBy ){
98428 int k; /* Loop counter */
98429 struct ExprList_item *pItem; /* For looping over expression in a list */
98431 for(k=p->pEList->nExpr, pItem=p->pEList->a; k>0; k--, pItem++){
98432 pItem->iAlias = 0;
98434 for(k=pGroupBy->nExpr, pItem=pGroupBy->a; k>0; k--, pItem++){
98435 pItem->iAlias = 0;
98437 if( p->nSelectRow>(double)100 ) p->nSelectRow = (double)100;
98438 }else{
98439 p->nSelectRow = (double)1;
98443 /* Create a label to jump to when we want to abort the query */
98444 addrEnd = sqlite3VdbeMakeLabel(v);
98446 /* Convert TK_COLUMN nodes into TK_AGG_COLUMN and make entries in
98447 ** sAggInfo for all TK_AGG_FUNCTION nodes in expressions of the
98448 ** SELECT statement.
98450 memset(&sNC, 0, sizeof(sNC));
98451 sNC.pParse = pParse;
98452 sNC.pSrcList = pTabList;
98453 sNC.pAggInfo = &sAggInfo;
98454 sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
98455 sAggInfo.pGroupBy = pGroupBy;
98456 sqlite3ExprAnalyzeAggList(&sNC, pEList);
98457 sqlite3ExprAnalyzeAggList(&sNC, pOrderBy);
98458 if( pHaving ){
98459 sqlite3ExprAnalyzeAggregates(&sNC, pHaving);
98461 sAggInfo.nAccumulator = sAggInfo.nColumn;
98462 for(i=0; i<sAggInfo.nFunc; i++){
98463 assert( !ExprHasProperty(sAggInfo.aFunc[i].pExpr, EP_xIsSelect) );
98464 sqlite3ExprAnalyzeAggList(&sNC, sAggInfo.aFunc[i].pExpr->x.pList);
98466 if( db->mallocFailed ) goto select_end;
98468 /* Processing for aggregates with GROUP BY is very different and
98469 ** much more complex than aggregates without a GROUP BY.
98471 if( pGroupBy ){
98472 KeyInfo *pKeyInfo; /* Keying information for the group by clause */
98473 int j1; /* A-vs-B comparision jump */
98474 int addrOutputRow; /* Start of subroutine that outputs a result row */
98475 int regOutputRow; /* Return address register for output subroutine */
98476 int addrSetAbort; /* Set the abort flag and return */
98477 int addrTopOfLoop; /* Top of the input loop */
98478 int addrSortingIdx; /* The OP_OpenEphemeral for the sorting index */
98479 int addrReset; /* Subroutine for resetting the accumulator */
98480 int regReset; /* Return address register for reset subroutine */
98482 /* If there is a GROUP BY clause we might need a sorting index to
98483 ** implement it. Allocate that sorting index now. If it turns out
98484 ** that we do not need it after all, the OP_SorterOpen instruction
98485 ** will be converted into a Noop.
98487 sAggInfo.sortingIdx = pParse->nTab++;
98488 pKeyInfo = keyInfoFromExprList(pParse, pGroupBy);
98489 addrSortingIdx = sqlite3VdbeAddOp4(v, OP_SorterOpen,
98490 sAggInfo.sortingIdx, sAggInfo.nSortingColumn,
98491 0, (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
98493 /* Initialize memory locations used by GROUP BY aggregate processing
98495 iUseFlag = ++pParse->nMem;
98496 iAbortFlag = ++pParse->nMem;
98497 regOutputRow = ++pParse->nMem;
98498 addrOutputRow = sqlite3VdbeMakeLabel(v);
98499 regReset = ++pParse->nMem;
98500 addrReset = sqlite3VdbeMakeLabel(v);
98501 iAMem = pParse->nMem + 1;
98502 pParse->nMem += pGroupBy->nExpr;
98503 iBMem = pParse->nMem + 1;
98504 pParse->nMem += pGroupBy->nExpr;
98505 sqlite3VdbeAddOp2(v, OP_Integer, 0, iAbortFlag);
98506 VdbeComment((v, "clear abort flag"));
98507 sqlite3VdbeAddOp2(v, OP_Integer, 0, iUseFlag);
98508 VdbeComment((v, "indicate accumulator empty"));
98509 sqlite3VdbeAddOp3(v, OP_Null, 0, iAMem, iAMem+pGroupBy->nExpr-1);
98511 /* Begin a loop that will extract all source rows in GROUP BY order.
98512 ** This might involve two separate loops with an OP_Sort in between, or
98513 ** it might be a single loop that uses an index to extract information
98514 ** in the right order to begin with.
98516 sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
98517 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0, 0);
98518 if( pWInfo==0 ) goto select_end;
98519 if( pGroupBy==0 ){
98520 /* The optimizer is able to deliver rows in group by order so
98521 ** we do not have to sort. The OP_OpenEphemeral table will be
98522 ** cancelled later because we still need to use the pKeyInfo
98524 pGroupBy = p->pGroupBy;
98525 groupBySort = 0;
98526 }else{
98527 /* Rows are coming out in undetermined order. We have to push
98528 ** each row into a sorting index, terminate the first loop,
98529 ** then loop over the sorting index in order to get the output
98530 ** in sorted order
98532 int regBase;
98533 int regRecord;
98534 int nCol;
98535 int nGroupBy;
98537 explainTempTable(pParse,
98538 isDistinct && !(p->selFlags&SF_Distinct)?"DISTINCT":"GROUP BY");
98540 groupBySort = 1;
98541 nGroupBy = pGroupBy->nExpr;
98542 nCol = nGroupBy + 1;
98543 j = nGroupBy+1;
98544 for(i=0; i<sAggInfo.nColumn; i++){
98545 if( sAggInfo.aCol[i].iSorterColumn>=j ){
98546 nCol++;
98547 j++;
98550 regBase = sqlite3GetTempRange(pParse, nCol);
98551 sqlite3ExprCacheClear(pParse);
98552 sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0);
98553 sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy);
98554 j = nGroupBy+1;
98555 for(i=0; i<sAggInfo.nColumn; i++){
98556 struct AggInfo_col *pCol = &sAggInfo.aCol[i];
98557 if( pCol->iSorterColumn>=j ){
98558 int r1 = j + regBase;
98559 int r2;
98561 r2 = sqlite3ExprCodeGetColumn(pParse,
98562 pCol->pTab, pCol->iColumn, pCol->iTable, r1);
98563 if( r1!=r2 ){
98564 sqlite3VdbeAddOp2(v, OP_SCopy, r2, r1);
98566 j++;
98569 regRecord = sqlite3GetTempReg(pParse);
98570 sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
98571 sqlite3VdbeAddOp2(v, OP_SorterInsert, sAggInfo.sortingIdx, regRecord);
98572 sqlite3ReleaseTempReg(pParse, regRecord);
98573 sqlite3ReleaseTempRange(pParse, regBase, nCol);
98574 sqlite3WhereEnd(pWInfo);
98575 sAggInfo.sortingIdxPTab = sortPTab = pParse->nTab++;
98576 sortOut = sqlite3GetTempReg(pParse);
98577 sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol);
98578 sqlite3VdbeAddOp2(v, OP_SorterSort, sAggInfo.sortingIdx, addrEnd);
98579 VdbeComment((v, "GROUP BY sort"));
98580 sAggInfo.useSortingIdx = 1;
98581 sqlite3ExprCacheClear(pParse);
98584 /* Evaluate the current GROUP BY terms and store in b0, b1, b2...
98585 ** (b0 is memory location iBMem+0, b1 is iBMem+1, and so forth)
98586 ** Then compare the current GROUP BY terms against the GROUP BY terms
98587 ** from the previous row currently stored in a0, a1, a2...
98589 addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
98590 sqlite3ExprCacheClear(pParse);
98591 if( groupBySort ){
98592 sqlite3VdbeAddOp2(v, OP_SorterData, sAggInfo.sortingIdx, sortOut);
98594 for(j=0; j<pGroupBy->nExpr; j++){
98595 if( groupBySort ){
98596 sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j);
98597 if( j==0 ) sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
98598 }else{
98599 sAggInfo.directMode = 1;
98600 sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
98603 sqlite3VdbeAddOp4(v, OP_Compare, iAMem, iBMem, pGroupBy->nExpr,
98604 (char*)pKeyInfo, P4_KEYINFO);
98605 j1 = sqlite3VdbeCurrentAddr(v);
98606 sqlite3VdbeAddOp3(v, OP_Jump, j1+1, 0, j1+1);
98608 /* Generate code that runs whenever the GROUP BY changes.
98609 ** Changes in the GROUP BY are detected by the previous code
98610 ** block. If there were no changes, this block is skipped.
98612 ** This code copies current group by terms in b0,b1,b2,...
98613 ** over to a0,a1,a2. It then calls the output subroutine
98614 ** and resets the aggregate accumulator registers in preparation
98615 ** for the next GROUP BY batch.
98617 sqlite3ExprCodeMove(pParse, iBMem, iAMem, pGroupBy->nExpr);
98618 sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
98619 VdbeComment((v, "output one row"));
98620 sqlite3VdbeAddOp2(v, OP_IfPos, iAbortFlag, addrEnd);
98621 VdbeComment((v, "check abort flag"));
98622 sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
98623 VdbeComment((v, "reset accumulator"));
98625 /* Update the aggregate accumulators based on the content of
98626 ** the current row
98628 sqlite3VdbeJumpHere(v, j1);
98629 updateAccumulator(pParse, &sAggInfo);
98630 sqlite3VdbeAddOp2(v, OP_Integer, 1, iUseFlag);
98631 VdbeComment((v, "indicate data in accumulator"));
98633 /* End of the loop
98635 if( groupBySort ){
98636 sqlite3VdbeAddOp2(v, OP_SorterNext, sAggInfo.sortingIdx, addrTopOfLoop);
98637 }else{
98638 sqlite3WhereEnd(pWInfo);
98639 sqlite3VdbeChangeToNoop(v, addrSortingIdx);
98642 /* Output the final row of result
98644 sqlite3VdbeAddOp2(v, OP_Gosub, regOutputRow, addrOutputRow);
98645 VdbeComment((v, "output final row"));
98647 /* Jump over the subroutines
98649 sqlite3VdbeAddOp2(v, OP_Goto, 0, addrEnd);
98651 /* Generate a subroutine that outputs a single row of the result
98652 ** set. This subroutine first looks at the iUseFlag. If iUseFlag
98653 ** is less than or equal to zero, the subroutine is a no-op. If
98654 ** the processing calls for the query to abort, this subroutine
98655 ** increments the iAbortFlag memory location before returning in
98656 ** order to signal the caller to abort.
98658 addrSetAbort = sqlite3VdbeCurrentAddr(v);
98659 sqlite3VdbeAddOp2(v, OP_Integer, 1, iAbortFlag);
98660 VdbeComment((v, "set abort flag"));
98661 sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
98662 sqlite3VdbeResolveLabel(v, addrOutputRow);
98663 addrOutputRow = sqlite3VdbeCurrentAddr(v);
98664 sqlite3VdbeAddOp2(v, OP_IfPos, iUseFlag, addrOutputRow+2);
98665 VdbeComment((v, "Groupby result generator entry point"));
98666 sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
98667 finalizeAggFunctions(pParse, &sAggInfo);
98668 sqlite3ExprIfFalse(pParse, pHaving, addrOutputRow+1, SQLITE_JUMPIFNULL);
98669 selectInnerLoop(pParse, p, p->pEList, 0, 0, pOrderBy,
98670 distinct, pDest,
98671 addrOutputRow+1, addrSetAbort);
98672 sqlite3VdbeAddOp1(v, OP_Return, regOutputRow);
98673 VdbeComment((v, "end groupby result generator"));
98675 /* Generate a subroutine that will reset the group-by accumulator
98677 sqlite3VdbeResolveLabel(v, addrReset);
98678 resetAccumulator(pParse, &sAggInfo);
98679 sqlite3VdbeAddOp1(v, OP_Return, regReset);
98681 } /* endif pGroupBy. Begin aggregate queries without GROUP BY: */
98682 else {
98683 ExprList *pDel = 0;
98684 #ifndef SQLITE_OMIT_BTREECOUNT
98685 Table *pTab;
98686 if( (pTab = isSimpleCount(p, &sAggInfo))!=0 ){
98687 /* If isSimpleCount() returns a pointer to a Table structure, then
98688 ** the SQL statement is of the form:
98690 ** SELECT count(*) FROM <tbl>
98692 ** where the Table structure returned represents table <tbl>.
98694 ** This statement is so common that it is optimized specially. The
98695 ** OP_Count instruction is executed either on the intkey table that
98696 ** contains the data for table <tbl> or on one of its indexes. It
98697 ** is better to execute the op on an index, as indexes are almost
98698 ** always spread across less pages than their corresponding tables.
98700 const int iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
98701 const int iCsr = pParse->nTab++; /* Cursor to scan b-tree */
98702 Index *pIdx; /* Iterator variable */
98703 KeyInfo *pKeyInfo = 0; /* Keyinfo for scanned index */
98704 Index *pBest = 0; /* Best index found so far */
98705 int iRoot = pTab->tnum; /* Root page of scanned b-tree */
98707 sqlite3CodeVerifySchema(pParse, iDb);
98708 sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
98710 /* Search for the index that has the least amount of columns. If
98711 ** there is such an index, and it has less columns than the table
98712 ** does, then we can assume that it consumes less space on disk and
98713 ** will therefore be cheaper to scan to determine the query result.
98714 ** In this case set iRoot to the root page number of the index b-tree
98715 ** and pKeyInfo to the KeyInfo structure required to navigate the
98716 ** index.
98718 ** (2011-04-15) Do not do a full scan of an unordered index.
98720 ** In practice the KeyInfo structure will not be used. It is only
98721 ** passed to keep OP_OpenRead happy.
98723 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
98724 if( pIdx->bUnordered==0 && (!pBest || pIdx->nColumn<pBest->nColumn) ){
98725 pBest = pIdx;
98728 if( pBest && pBest->nColumn<pTab->nCol ){
98729 iRoot = pBest->tnum;
98730 pKeyInfo = sqlite3IndexKeyinfo(pParse, pBest);
98733 /* Open a read-only cursor, execute the OP_Count, close the cursor. */
98734 sqlite3VdbeAddOp3(v, OP_OpenRead, iCsr, iRoot, iDb);
98735 if( pKeyInfo ){
98736 sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO_HANDOFF);
98738 sqlite3VdbeAddOp2(v, OP_Count, iCsr, sAggInfo.aFunc[0].iMem);
98739 sqlite3VdbeAddOp1(v, OP_Close, iCsr);
98740 explainSimpleCount(pParse, pTab, pBest);
98741 }else
98742 #endif /* SQLITE_OMIT_BTREECOUNT */
98744 /* Check if the query is of one of the following forms:
98746 ** SELECT min(x) FROM ...
98747 ** SELECT max(x) FROM ...
98749 ** If it is, then ask the code in where.c to attempt to sort results
98750 ** as if there was an "ORDER ON x" or "ORDER ON x DESC" clause.
98751 ** If where.c is able to produce results sorted in this order, then
98752 ** add vdbe code to break out of the processing loop after the
98753 ** first iteration (since the first iteration of the loop is
98754 ** guaranteed to operate on the row with the minimum or maximum
98755 ** value of x, the only row required).
98757 ** A special flag must be passed to sqlite3WhereBegin() to slightly
98758 ** modify behaviour as follows:
98760 ** + If the query is a "SELECT min(x)", then the loop coded by
98761 ** where.c should not iterate over any values with a NULL value
98762 ** for x.
98764 ** + The optimizer code in where.c (the thing that decides which
98765 ** index or indices to use) should place a different priority on
98766 ** satisfying the 'ORDER BY' clause than it does in other cases.
98767 ** Refer to code and comments in where.c for details.
98769 ExprList *pMinMax = 0;
98770 u8 flag = minMaxQuery(p);
98771 if( flag ){
98772 assert( !ExprHasProperty(p->pEList->a[0].pExpr, EP_xIsSelect) );
98773 pMinMax = sqlite3ExprListDup(db, p->pEList->a[0].pExpr->x.pList,0);
98774 pDel = pMinMax;
98775 if( pMinMax && !db->mallocFailed ){
98776 pMinMax->a[0].sortOrder = flag!=WHERE_ORDERBY_MIN ?1:0;
98777 pMinMax->a[0].pExpr->op = TK_COLUMN;
98781 /* This case runs if the aggregate has no GROUP BY clause. The
98782 ** processing is much simpler since there is only a single row
98783 ** of output.
98785 resetAccumulator(pParse, &sAggInfo);
98786 pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, 0, flag);
98787 if( pWInfo==0 ){
98788 sqlite3ExprListDelete(db, pDel);
98789 goto select_end;
98791 updateAccumulator(pParse, &sAggInfo);
98792 if( !pMinMax && flag ){
98793 sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iBreak);
98794 VdbeComment((v, "%s() by index",
98795 (flag==WHERE_ORDERBY_MIN?"min":"max")));
98797 sqlite3WhereEnd(pWInfo);
98798 finalizeAggFunctions(pParse, &sAggInfo);
98801 pOrderBy = 0;
98802 sqlite3ExprIfFalse(pParse, pHaving, addrEnd, SQLITE_JUMPIFNULL);
98803 selectInnerLoop(pParse, p, p->pEList, 0, 0, 0, -1,
98804 pDest, addrEnd, addrEnd);
98805 sqlite3ExprListDelete(db, pDel);
98807 sqlite3VdbeResolveLabel(v, addrEnd);
98809 } /* endif aggregate query */
98811 if( distinct>=0 ){
98812 explainTempTable(pParse, "DISTINCT");
98815 /* If there is an ORDER BY clause, then we need to sort the results
98816 ** and send them to the callback one by one.
98818 if( pOrderBy ){
98819 explainTempTable(pParse, "ORDER BY");
98820 generateSortTail(pParse, p, v, pEList->nExpr, pDest);
98823 /* Jump here to skip this query
98825 sqlite3VdbeResolveLabel(v, iEnd);
98827 /* The SELECT was successfully coded. Set the return code to 0
98828 ** to indicate no errors.
98830 rc = 0;
98832 /* Control jumps to here if an error is encountered above, or upon
98833 ** successful coding of the SELECT.
98835 select_end:
98836 explainSetInteger(pParse->iSelectId, iRestoreSelectId);
98838 /* Identify column names if results of the SELECT are to be output.
98840 if( rc==SQLITE_OK && pDest->eDest==SRT_Output ){
98841 generateColumnNames(pParse, pTabList, pEList);
98844 sqlite3DbFree(db, sAggInfo.aCol);
98845 sqlite3DbFree(db, sAggInfo.aFunc);
98846 return rc;
98849 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
98851 ** Generate a human-readable description of a the Select object.
98853 static void explainOneSelect(Vdbe *pVdbe, Select *p){
98854 sqlite3ExplainPrintf(pVdbe, "SELECT ");
98855 if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
98856 if( p->selFlags & SF_Distinct ){
98857 sqlite3ExplainPrintf(pVdbe, "DISTINCT ");
98859 if( p->selFlags & SF_Aggregate ){
98860 sqlite3ExplainPrintf(pVdbe, "agg_flag ");
98862 sqlite3ExplainNL(pVdbe);
98863 sqlite3ExplainPrintf(pVdbe, " ");
98865 sqlite3ExplainExprList(pVdbe, p->pEList);
98866 sqlite3ExplainNL(pVdbe);
98867 if( p->pSrc && p->pSrc->nSrc ){
98868 int i;
98869 sqlite3ExplainPrintf(pVdbe, "FROM ");
98870 sqlite3ExplainPush(pVdbe);
98871 for(i=0; i<p->pSrc->nSrc; i++){
98872 struct SrcList_item *pItem = &p->pSrc->a[i];
98873 sqlite3ExplainPrintf(pVdbe, "{%d,*} = ", pItem->iCursor);
98874 if( pItem->pSelect ){
98875 sqlite3ExplainSelect(pVdbe, pItem->pSelect);
98876 if( pItem->pTab ){
98877 sqlite3ExplainPrintf(pVdbe, " (tabname=%s)", pItem->pTab->zName);
98879 }else if( pItem->zName ){
98880 sqlite3ExplainPrintf(pVdbe, "%s", pItem->zName);
98882 if( pItem->zAlias ){
98883 sqlite3ExplainPrintf(pVdbe, " (AS %s)", pItem->zAlias);
98885 if( pItem->jointype & JT_LEFT ){
98886 sqlite3ExplainPrintf(pVdbe, " LEFT-JOIN");
98888 sqlite3ExplainNL(pVdbe);
98890 sqlite3ExplainPop(pVdbe);
98892 if( p->pWhere ){
98893 sqlite3ExplainPrintf(pVdbe, "WHERE ");
98894 sqlite3ExplainExpr(pVdbe, p->pWhere);
98895 sqlite3ExplainNL(pVdbe);
98897 if( p->pGroupBy ){
98898 sqlite3ExplainPrintf(pVdbe, "GROUPBY ");
98899 sqlite3ExplainExprList(pVdbe, p->pGroupBy);
98900 sqlite3ExplainNL(pVdbe);
98902 if( p->pHaving ){
98903 sqlite3ExplainPrintf(pVdbe, "HAVING ");
98904 sqlite3ExplainExpr(pVdbe, p->pHaving);
98905 sqlite3ExplainNL(pVdbe);
98907 if( p->pOrderBy ){
98908 sqlite3ExplainPrintf(pVdbe, "ORDERBY ");
98909 sqlite3ExplainExprList(pVdbe, p->pOrderBy);
98910 sqlite3ExplainNL(pVdbe);
98912 if( p->pLimit ){
98913 sqlite3ExplainPrintf(pVdbe, "LIMIT ");
98914 sqlite3ExplainExpr(pVdbe, p->pLimit);
98915 sqlite3ExplainNL(pVdbe);
98917 if( p->pOffset ){
98918 sqlite3ExplainPrintf(pVdbe, "OFFSET ");
98919 sqlite3ExplainExpr(pVdbe, p->pOffset);
98920 sqlite3ExplainNL(pVdbe);
98923 SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe *pVdbe, Select *p){
98924 if( p==0 ){
98925 sqlite3ExplainPrintf(pVdbe, "(null-select)");
98926 return;
98928 while( p->pPrior ) p = p->pPrior;
98929 sqlite3ExplainPush(pVdbe);
98930 while( p ){
98931 explainOneSelect(pVdbe, p);
98932 p = p->pNext;
98933 if( p==0 ) break;
98934 sqlite3ExplainNL(pVdbe);
98935 sqlite3ExplainPrintf(pVdbe, "%s\n", selectOpName(p->op));
98937 sqlite3ExplainPrintf(pVdbe, "END");
98938 sqlite3ExplainPop(pVdbe);
98941 /* End of the structure debug printing code
98942 *****************************************************************************/
98943 #endif /* defined(SQLITE_TEST) || defined(SQLITE_DEBUG) */
98945 /************** End of select.c **********************************************/
98946 /************** Begin file table.c *******************************************/
98948 ** 2001 September 15
98950 ** The author disclaims copyright to this source code. In place of
98951 ** a legal notice, here is a blessing:
98953 ** May you do good and not evil.
98954 ** May you find forgiveness for yourself and forgive others.
98955 ** May you share freely, never taking more than you give.
98957 *************************************************************************
98958 ** This file contains the sqlite3_get_table() and sqlite3_free_table()
98959 ** interface routines. These are just wrappers around the main
98960 ** interface routine of sqlite3_exec().
98962 ** These routines are in a separate files so that they will not be linked
98963 ** if they are not used.
98965 /* #include <stdlib.h> */
98966 /* #include <string.h> */
98968 #ifndef SQLITE_OMIT_GET_TABLE
98971 ** This structure is used to pass data from sqlite3_get_table() through
98972 ** to the callback function is uses to build the result.
98974 typedef struct TabResult {
98975 char **azResult; /* Accumulated output */
98976 char *zErrMsg; /* Error message text, if an error occurs */
98977 int nAlloc; /* Slots allocated for azResult[] */
98978 int nRow; /* Number of rows in the result */
98979 int nColumn; /* Number of columns in the result */
98980 int nData; /* Slots used in azResult[]. (nRow+1)*nColumn */
98981 int rc; /* Return code from sqlite3_exec() */
98982 } TabResult;
98985 ** This routine is called once for each row in the result table. Its job
98986 ** is to fill in the TabResult structure appropriately, allocating new
98987 ** memory as necessary.
98989 static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
98990 TabResult *p = (TabResult*)pArg; /* Result accumulator */
98991 int need; /* Slots needed in p->azResult[] */
98992 int i; /* Loop counter */
98993 char *z; /* A single column of result */
98995 /* Make sure there is enough space in p->azResult to hold everything
98996 ** we need to remember from this invocation of the callback.
98998 if( p->nRow==0 && argv!=0 ){
98999 need = nCol*2;
99000 }else{
99001 need = nCol;
99003 if( p->nData + need > p->nAlloc ){
99004 char **azNew;
99005 p->nAlloc = p->nAlloc*2 + need;
99006 azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc );
99007 if( azNew==0 ) goto malloc_failed;
99008 p->azResult = azNew;
99011 /* If this is the first row, then generate an extra row containing
99012 ** the names of all columns.
99014 if( p->nRow==0 ){
99015 p->nColumn = nCol;
99016 for(i=0; i<nCol; i++){
99017 z = sqlite3_mprintf("%s", colv[i]);
99018 if( z==0 ) goto malloc_failed;
99019 p->azResult[p->nData++] = z;
99021 }else if( p->nColumn!=nCol ){
99022 sqlite3_free(p->zErrMsg);
99023 p->zErrMsg = sqlite3_mprintf(
99024 "sqlite3_get_table() called with two or more incompatible queries"
99026 p->rc = SQLITE_ERROR;
99027 return 1;
99030 /* Copy over the row data
99032 if( argv!=0 ){
99033 for(i=0; i<nCol; i++){
99034 if( argv[i]==0 ){
99035 z = 0;
99036 }else{
99037 int n = sqlite3Strlen30(argv[i])+1;
99038 z = sqlite3_malloc( n );
99039 if( z==0 ) goto malloc_failed;
99040 memcpy(z, argv[i], n);
99042 p->azResult[p->nData++] = z;
99044 p->nRow++;
99046 return 0;
99048 malloc_failed:
99049 p->rc = SQLITE_NOMEM;
99050 return 1;
99054 ** Query the database. But instead of invoking a callback for each row,
99055 ** malloc() for space to hold the result and return the entire results
99056 ** at the conclusion of the call.
99058 ** The result that is written to ***pazResult is held in memory obtained
99059 ** from malloc(). But the caller cannot free this memory directly.
99060 ** Instead, the entire table should be passed to sqlite3_free_table() when
99061 ** the calling procedure is finished using it.
99063 SQLITE_API int sqlite3_get_table(
99064 sqlite3 *db, /* The database on which the SQL executes */
99065 const char *zSql, /* The SQL to be executed */
99066 char ***pazResult, /* Write the result table here */
99067 int *pnRow, /* Write the number of rows in the result here */
99068 int *pnColumn, /* Write the number of columns of result here */
99069 char **pzErrMsg /* Write error messages here */
99071 int rc;
99072 TabResult res;
99074 *pazResult = 0;
99075 if( pnColumn ) *pnColumn = 0;
99076 if( pnRow ) *pnRow = 0;
99077 if( pzErrMsg ) *pzErrMsg = 0;
99078 res.zErrMsg = 0;
99079 res.nRow = 0;
99080 res.nColumn = 0;
99081 res.nData = 1;
99082 res.nAlloc = 20;
99083 res.rc = SQLITE_OK;
99084 res.azResult = sqlite3_malloc(sizeof(char*)*res.nAlloc );
99085 if( res.azResult==0 ){
99086 db->errCode = SQLITE_NOMEM;
99087 return SQLITE_NOMEM;
99089 res.azResult[0] = 0;
99090 rc = sqlite3_exec(db, zSql, sqlite3_get_table_cb, &res, pzErrMsg);
99091 assert( sizeof(res.azResult[0])>= sizeof(res.nData) );
99092 res.azResult[0] = SQLITE_INT_TO_PTR(res.nData);
99093 if( (rc&0xff)==SQLITE_ABORT ){
99094 sqlite3_free_table(&res.azResult[1]);
99095 if( res.zErrMsg ){
99096 if( pzErrMsg ){
99097 sqlite3_free(*pzErrMsg);
99098 *pzErrMsg = sqlite3_mprintf("%s",res.zErrMsg);
99100 sqlite3_free(res.zErrMsg);
99102 db->errCode = res.rc; /* Assume 32-bit assignment is atomic */
99103 return res.rc;
99105 sqlite3_free(res.zErrMsg);
99106 if( rc!=SQLITE_OK ){
99107 sqlite3_free_table(&res.azResult[1]);
99108 return rc;
99110 if( res.nAlloc>res.nData ){
99111 char **azNew;
99112 azNew = sqlite3_realloc( res.azResult, sizeof(char*)*res.nData );
99113 if( azNew==0 ){
99114 sqlite3_free_table(&res.azResult[1]);
99115 db->errCode = SQLITE_NOMEM;
99116 return SQLITE_NOMEM;
99118 res.azResult = azNew;
99120 *pazResult = &res.azResult[1];
99121 if( pnColumn ) *pnColumn = res.nColumn;
99122 if( pnRow ) *pnRow = res.nRow;
99123 return rc;
99127 ** This routine frees the space the sqlite3_get_table() malloced.
99129 SQLITE_API void sqlite3_free_table(
99130 char **azResult /* Result returned from from sqlite3_get_table() */
99132 if( azResult ){
99133 int i, n;
99134 azResult--;
99135 assert( azResult!=0 );
99136 n = SQLITE_PTR_TO_INT(azResult[0]);
99137 for(i=1; i<n; i++){ if( azResult[i] ) sqlite3_free(azResult[i]); }
99138 sqlite3_free(azResult);
99142 #endif /* SQLITE_OMIT_GET_TABLE */
99144 /************** End of table.c ***********************************************/
99145 /************** Begin file trigger.c *****************************************/
99148 ** The author disclaims copyright to this source code. In place of
99149 ** a legal notice, here is a blessing:
99151 ** May you do good and not evil.
99152 ** May you find forgiveness for yourself and forgive others.
99153 ** May you share freely, never taking more than you give.
99155 *************************************************************************
99156 ** This file contains the implementation for TRIGGERs
99159 #ifndef SQLITE_OMIT_TRIGGER
99161 ** Delete a linked list of TriggerStep structures.
99163 SQLITE_PRIVATE void sqlite3DeleteTriggerStep(sqlite3 *db, TriggerStep *pTriggerStep){
99164 while( pTriggerStep ){
99165 TriggerStep * pTmp = pTriggerStep;
99166 pTriggerStep = pTriggerStep->pNext;
99168 sqlite3ExprDelete(db, pTmp->pWhere);
99169 sqlite3ExprListDelete(db, pTmp->pExprList);
99170 sqlite3SelectDelete(db, pTmp->pSelect);
99171 sqlite3IdListDelete(db, pTmp->pIdList);
99173 sqlite3DbFree(db, pTmp);
99178 ** Given table pTab, return a list of all the triggers attached to
99179 ** the table. The list is connected by Trigger.pNext pointers.
99181 ** All of the triggers on pTab that are in the same database as pTab
99182 ** are already attached to pTab->pTrigger. But there might be additional
99183 ** triggers on pTab in the TEMP schema. This routine prepends all
99184 ** TEMP triggers on pTab to the beginning of the pTab->pTrigger list
99185 ** and returns the combined list.
99187 ** To state it another way: This routine returns a list of all triggers
99188 ** that fire off of pTab. The list will include any TEMP triggers on
99189 ** pTab as well as the triggers lised in pTab->pTrigger.
99191 SQLITE_PRIVATE Trigger *sqlite3TriggerList(Parse *pParse, Table *pTab){
99192 Schema * const pTmpSchema = pParse->db->aDb[1].pSchema;
99193 Trigger *pList = 0; /* List of triggers to return */
99195 if( pParse->disableTriggers ){
99196 return 0;
99199 if( pTmpSchema!=pTab->pSchema ){
99200 HashElem *p;
99201 assert( sqlite3SchemaMutexHeld(pParse->db, 0, pTmpSchema) );
99202 for(p=sqliteHashFirst(&pTmpSchema->trigHash); p; p=sqliteHashNext(p)){
99203 Trigger *pTrig = (Trigger *)sqliteHashData(p);
99204 if( pTrig->pTabSchema==pTab->pSchema
99205 && 0==sqlite3StrICmp(pTrig->table, pTab->zName)
99207 pTrig->pNext = (pList ? pList : pTab->pTrigger);
99208 pList = pTrig;
99213 return (pList ? pList : pTab->pTrigger);
99217 ** This is called by the parser when it sees a CREATE TRIGGER statement
99218 ** up to the point of the BEGIN before the trigger actions. A Trigger
99219 ** structure is generated based on the information available and stored
99220 ** in pParse->pNewTrigger. After the trigger actions have been parsed, the
99221 ** sqlite3FinishTrigger() function is called to complete the trigger
99222 ** construction process.
99224 SQLITE_PRIVATE void sqlite3BeginTrigger(
99225 Parse *pParse, /* The parse context of the CREATE TRIGGER statement */
99226 Token *pName1, /* The name of the trigger */
99227 Token *pName2, /* The name of the trigger */
99228 int tr_tm, /* One of TK_BEFORE, TK_AFTER, TK_INSTEAD */
99229 int op, /* One of TK_INSERT, TK_UPDATE, TK_DELETE */
99230 IdList *pColumns, /* column list if this is an UPDATE OF trigger */
99231 SrcList *pTableName,/* The name of the table/view the trigger applies to */
99232 Expr *pWhen, /* WHEN clause */
99233 int isTemp, /* True if the TEMPORARY keyword is present */
99234 int noErr /* Suppress errors if the trigger already exists */
99236 Trigger *pTrigger = 0; /* The new trigger */
99237 Table *pTab; /* Table that the trigger fires off of */
99238 char *zName = 0; /* Name of the trigger */
99239 sqlite3 *db = pParse->db; /* The database connection */
99240 int iDb; /* The database to store the trigger in */
99241 Token *pName; /* The unqualified db name */
99242 DbFixer sFix; /* State vector for the DB fixer */
99243 int iTabDb; /* Index of the database holding pTab */
99245 assert( pName1!=0 ); /* pName1->z might be NULL, but not pName1 itself */
99246 assert( pName2!=0 );
99247 assert( op==TK_INSERT || op==TK_UPDATE || op==TK_DELETE );
99248 assert( op>0 && op<0xff );
99249 if( isTemp ){
99250 /* If TEMP was specified, then the trigger name may not be qualified. */
99251 if( pName2->n>0 ){
99252 sqlite3ErrorMsg(pParse, "temporary trigger may not have qualified name");
99253 goto trigger_cleanup;
99255 iDb = 1;
99256 pName = pName1;
99257 }else{
99258 /* Figure out the db that the the trigger will be created in */
99259 iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
99260 if( iDb<0 ){
99261 goto trigger_cleanup;
99264 if( !pTableName || db->mallocFailed ){
99265 goto trigger_cleanup;
99268 /* A long-standing parser bug is that this syntax was allowed:
99270 ** CREATE TRIGGER attached.demo AFTER INSERT ON attached.tab ....
99271 ** ^^^^^^^^
99273 ** To maintain backwards compatibility, ignore the database
99274 ** name on pTableName if we are reparsing our of SQLITE_MASTER.
99276 if( db->init.busy && iDb!=1 ){
99277 sqlite3DbFree(db, pTableName->a[0].zDatabase);
99278 pTableName->a[0].zDatabase = 0;
99281 /* If the trigger name was unqualified, and the table is a temp table,
99282 ** then set iDb to 1 to create the trigger in the temporary database.
99283 ** If sqlite3SrcListLookup() returns 0, indicating the table does not
99284 ** exist, the error is caught by the block below.
99286 pTab = sqlite3SrcListLookup(pParse, pTableName);
99287 if( db->init.busy==0 && pName2->n==0 && pTab
99288 && pTab->pSchema==db->aDb[1].pSchema ){
99289 iDb = 1;
99292 /* Ensure the table name matches database name and that the table exists */
99293 if( db->mallocFailed ) goto trigger_cleanup;
99294 assert( pTableName->nSrc==1 );
99295 if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", pName) &&
99296 sqlite3FixSrcList(&sFix, pTableName) ){
99297 goto trigger_cleanup;
99299 pTab = sqlite3SrcListLookup(pParse, pTableName);
99300 if( !pTab ){
99301 /* The table does not exist. */
99302 if( db->init.iDb==1 ){
99303 /* Ticket #3810.
99304 ** Normally, whenever a table is dropped, all associated triggers are
99305 ** dropped too. But if a TEMP trigger is created on a non-TEMP table
99306 ** and the table is dropped by a different database connection, the
99307 ** trigger is not visible to the database connection that does the
99308 ** drop so the trigger cannot be dropped. This results in an
99309 ** "orphaned trigger" - a trigger whose associated table is missing.
99311 db->init.orphanTrigger = 1;
99313 goto trigger_cleanup;
99315 if( IsVirtual(pTab) ){
99316 sqlite3ErrorMsg(pParse, "cannot create triggers on virtual tables");
99317 goto trigger_cleanup;
99320 /* Check that the trigger name is not reserved and that no trigger of the
99321 ** specified name exists */
99322 zName = sqlite3NameFromToken(db, pName);
99323 if( !zName || SQLITE_OK!=sqlite3CheckObjectName(pParse, zName) ){
99324 goto trigger_cleanup;
99326 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
99327 if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),
99328 zName, sqlite3Strlen30(zName)) ){
99329 if( !noErr ){
99330 sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);
99331 }else{
99332 assert( !db->init.busy );
99333 sqlite3CodeVerifySchema(pParse, iDb);
99335 goto trigger_cleanup;
99338 /* Do not create a trigger on a system table */
99339 if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0 ){
99340 sqlite3ErrorMsg(pParse, "cannot create trigger on system table");
99341 pParse->nErr++;
99342 goto trigger_cleanup;
99345 /* INSTEAD of triggers are only for views and views only support INSTEAD
99346 ** of triggers.
99348 if( pTab->pSelect && tr_tm!=TK_INSTEAD ){
99349 sqlite3ErrorMsg(pParse, "cannot create %s trigger on view: %S",
99350 (tr_tm == TK_BEFORE)?"BEFORE":"AFTER", pTableName, 0);
99351 goto trigger_cleanup;
99353 if( !pTab->pSelect && tr_tm==TK_INSTEAD ){
99354 sqlite3ErrorMsg(pParse, "cannot create INSTEAD OF"
99355 " trigger on table: %S", pTableName, 0);
99356 goto trigger_cleanup;
99358 iTabDb = sqlite3SchemaToIndex(db, pTab->pSchema);
99360 #ifndef SQLITE_OMIT_AUTHORIZATION
99362 int code = SQLITE_CREATE_TRIGGER;
99363 const char *zDb = db->aDb[iTabDb].zName;
99364 const char *zDbTrig = isTemp ? db->aDb[1].zName : zDb;
99365 if( iTabDb==1 || isTemp ) code = SQLITE_CREATE_TEMP_TRIGGER;
99366 if( sqlite3AuthCheck(pParse, code, zName, pTab->zName, zDbTrig) ){
99367 goto trigger_cleanup;
99369 if( sqlite3AuthCheck(pParse, SQLITE_INSERT, SCHEMA_TABLE(iTabDb),0,zDb)){
99370 goto trigger_cleanup;
99373 #endif
99375 /* INSTEAD OF triggers can only appear on views and BEFORE triggers
99376 ** cannot appear on views. So we might as well translate every
99377 ** INSTEAD OF trigger into a BEFORE trigger. It simplifies code
99378 ** elsewhere.
99380 if (tr_tm == TK_INSTEAD){
99381 tr_tm = TK_BEFORE;
99384 /* Build the Trigger object */
99385 pTrigger = (Trigger*)sqlite3DbMallocZero(db, sizeof(Trigger));
99386 if( pTrigger==0 ) goto trigger_cleanup;
99387 pTrigger->zName = zName;
99388 zName = 0;
99389 pTrigger->table = sqlite3DbStrDup(db, pTableName->a[0].zName);
99390 pTrigger->pSchema = db->aDb[iDb].pSchema;
99391 pTrigger->pTabSchema = pTab->pSchema;
99392 pTrigger->op = (u8)op;
99393 pTrigger->tr_tm = tr_tm==TK_BEFORE ? TRIGGER_BEFORE : TRIGGER_AFTER;
99394 pTrigger->pWhen = sqlite3ExprDup(db, pWhen, EXPRDUP_REDUCE);
99395 pTrigger->pColumns = sqlite3IdListDup(db, pColumns);
99396 assert( pParse->pNewTrigger==0 );
99397 pParse->pNewTrigger = pTrigger;
99399 trigger_cleanup:
99400 sqlite3DbFree(db, zName);
99401 sqlite3SrcListDelete(db, pTableName);
99402 sqlite3IdListDelete(db, pColumns);
99403 sqlite3ExprDelete(db, pWhen);
99404 if( !pParse->pNewTrigger ){
99405 sqlite3DeleteTrigger(db, pTrigger);
99406 }else{
99407 assert( pParse->pNewTrigger==pTrigger );
99412 ** This routine is called after all of the trigger actions have been parsed
99413 ** in order to complete the process of building the trigger.
99415 SQLITE_PRIVATE void sqlite3FinishTrigger(
99416 Parse *pParse, /* Parser context */
99417 TriggerStep *pStepList, /* The triggered program */
99418 Token *pAll /* Token that describes the complete CREATE TRIGGER */
99420 Trigger *pTrig = pParse->pNewTrigger; /* Trigger being finished */
99421 char *zName; /* Name of trigger */
99422 sqlite3 *db = pParse->db; /* The database */
99423 DbFixer sFix; /* Fixer object */
99424 int iDb; /* Database containing the trigger */
99425 Token nameToken; /* Trigger name for error reporting */
99427 pParse->pNewTrigger = 0;
99428 if( NEVER(pParse->nErr) || !pTrig ) goto triggerfinish_cleanup;
99429 zName = pTrig->zName;
99430 iDb = sqlite3SchemaToIndex(pParse->db, pTrig->pSchema);
99431 pTrig->step_list = pStepList;
99432 while( pStepList ){
99433 pStepList->pTrig = pTrig;
99434 pStepList = pStepList->pNext;
99436 nameToken.z = pTrig->zName;
99437 nameToken.n = sqlite3Strlen30(nameToken.z);
99438 if( sqlite3FixInit(&sFix, pParse, iDb, "trigger", &nameToken)
99439 && sqlite3FixTriggerStep(&sFix, pTrig->step_list) ){
99440 goto triggerfinish_cleanup;
99443 /* if we are not initializing,
99444 ** build the sqlite_master entry
99446 if( !db->init.busy ){
99447 Vdbe *v;
99448 char *z;
99450 /* Make an entry in the sqlite_master table */
99451 v = sqlite3GetVdbe(pParse);
99452 if( v==0 ) goto triggerfinish_cleanup;
99453 sqlite3BeginWriteOperation(pParse, 0, iDb);
99454 z = sqlite3DbStrNDup(db, (char*)pAll->z, pAll->n);
99455 sqlite3NestedParse(pParse,
99456 "INSERT INTO %Q.%s VALUES('trigger',%Q,%Q,0,'CREATE TRIGGER %q')",
99457 db->aDb[iDb].zName, SCHEMA_TABLE(iDb), zName,
99458 pTrig->table, z);
99459 sqlite3DbFree(db, z);
99460 sqlite3ChangeCookie(pParse, iDb);
99461 sqlite3VdbeAddParseSchemaOp(v, iDb,
99462 sqlite3MPrintf(db, "type='trigger' AND name='%q'", zName));
99465 if( db->init.busy ){
99466 Trigger *pLink = pTrig;
99467 Hash *pHash = &db->aDb[iDb].pSchema->trigHash;
99468 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
99469 pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig);
99470 if( pTrig ){
99471 db->mallocFailed = 1;
99472 }else if( pLink->pSchema==pLink->pTabSchema ){
99473 Table *pTab;
99474 int n = sqlite3Strlen30(pLink->table);
99475 pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n);
99476 assert( pTab!=0 );
99477 pLink->pNext = pTab->pTrigger;
99478 pTab->pTrigger = pLink;
99482 triggerfinish_cleanup:
99483 sqlite3DeleteTrigger(db, pTrig);
99484 assert( !pParse->pNewTrigger );
99485 sqlite3DeleteTriggerStep(db, pStepList);
99489 ** Turn a SELECT statement (that the pSelect parameter points to) into
99490 ** a trigger step. Return a pointer to a TriggerStep structure.
99492 ** The parser calls this routine when it finds a SELECT statement in
99493 ** body of a TRIGGER.
99495 SQLITE_PRIVATE TriggerStep *sqlite3TriggerSelectStep(sqlite3 *db, Select *pSelect){
99496 TriggerStep *pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep));
99497 if( pTriggerStep==0 ) {
99498 sqlite3SelectDelete(db, pSelect);
99499 return 0;
99501 pTriggerStep->op = TK_SELECT;
99502 pTriggerStep->pSelect = pSelect;
99503 pTriggerStep->orconf = OE_Default;
99504 return pTriggerStep;
99508 ** Allocate space to hold a new trigger step. The allocated space
99509 ** holds both the TriggerStep object and the TriggerStep.target.z string.
99511 ** If an OOM error occurs, NULL is returned and db->mallocFailed is set.
99513 static TriggerStep *triggerStepAllocate(
99514 sqlite3 *db, /* Database connection */
99515 u8 op, /* Trigger opcode */
99516 Token *pName /* The target name */
99518 TriggerStep *pTriggerStep;
99520 pTriggerStep = sqlite3DbMallocZero(db, sizeof(TriggerStep) + pName->n);
99521 if( pTriggerStep ){
99522 char *z = (char*)&pTriggerStep[1];
99523 memcpy(z, pName->z, pName->n);
99524 pTriggerStep->target.z = z;
99525 pTriggerStep->target.n = pName->n;
99526 pTriggerStep->op = op;
99528 return pTriggerStep;
99532 ** Build a trigger step out of an INSERT statement. Return a pointer
99533 ** to the new trigger step.
99535 ** The parser calls this routine when it sees an INSERT inside the
99536 ** body of a trigger.
99538 SQLITE_PRIVATE TriggerStep *sqlite3TriggerInsertStep(
99539 sqlite3 *db, /* The database connection */
99540 Token *pTableName, /* Name of the table into which we insert */
99541 IdList *pColumn, /* List of columns in pTableName to insert into */
99542 ExprList *pEList, /* The VALUE clause: a list of values to be inserted */
99543 Select *pSelect, /* A SELECT statement that supplies values */
99544 u8 orconf /* The conflict algorithm (OE_Abort, OE_Replace, etc.) */
99546 TriggerStep *pTriggerStep;
99548 assert(pEList == 0 || pSelect == 0);
99549 assert(pEList != 0 || pSelect != 0 || db->mallocFailed);
99551 pTriggerStep = triggerStepAllocate(db, TK_INSERT, pTableName);
99552 if( pTriggerStep ){
99553 pTriggerStep->pSelect = sqlite3SelectDup(db, pSelect, EXPRDUP_REDUCE);
99554 pTriggerStep->pIdList = pColumn;
99555 pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
99556 pTriggerStep->orconf = orconf;
99557 }else{
99558 sqlite3IdListDelete(db, pColumn);
99560 sqlite3ExprListDelete(db, pEList);
99561 sqlite3SelectDelete(db, pSelect);
99563 return pTriggerStep;
99567 ** Construct a trigger step that implements an UPDATE statement and return
99568 ** a pointer to that trigger step. The parser calls this routine when it
99569 ** sees an UPDATE statement inside the body of a CREATE TRIGGER.
99571 SQLITE_PRIVATE TriggerStep *sqlite3TriggerUpdateStep(
99572 sqlite3 *db, /* The database connection */
99573 Token *pTableName, /* Name of the table to be updated */
99574 ExprList *pEList, /* The SET clause: list of column and new values */
99575 Expr *pWhere, /* The WHERE clause */
99576 u8 orconf /* The conflict algorithm. (OE_Abort, OE_Ignore, etc) */
99578 TriggerStep *pTriggerStep;
99580 pTriggerStep = triggerStepAllocate(db, TK_UPDATE, pTableName);
99581 if( pTriggerStep ){
99582 pTriggerStep->pExprList = sqlite3ExprListDup(db, pEList, EXPRDUP_REDUCE);
99583 pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
99584 pTriggerStep->orconf = orconf;
99586 sqlite3ExprListDelete(db, pEList);
99587 sqlite3ExprDelete(db, pWhere);
99588 return pTriggerStep;
99592 ** Construct a trigger step that implements a DELETE statement and return
99593 ** a pointer to that trigger step. The parser calls this routine when it
99594 ** sees a DELETE statement inside the body of a CREATE TRIGGER.
99596 SQLITE_PRIVATE TriggerStep *sqlite3TriggerDeleteStep(
99597 sqlite3 *db, /* Database connection */
99598 Token *pTableName, /* The table from which rows are deleted */
99599 Expr *pWhere /* The WHERE clause */
99601 TriggerStep *pTriggerStep;
99603 pTriggerStep = triggerStepAllocate(db, TK_DELETE, pTableName);
99604 if( pTriggerStep ){
99605 pTriggerStep->pWhere = sqlite3ExprDup(db, pWhere, EXPRDUP_REDUCE);
99606 pTriggerStep->orconf = OE_Default;
99608 sqlite3ExprDelete(db, pWhere);
99609 return pTriggerStep;
99613 ** Recursively delete a Trigger structure
99615 SQLITE_PRIVATE void sqlite3DeleteTrigger(sqlite3 *db, Trigger *pTrigger){
99616 if( pTrigger==0 ) return;
99617 sqlite3DeleteTriggerStep(db, pTrigger->step_list);
99618 sqlite3DbFree(db, pTrigger->zName);
99619 sqlite3DbFree(db, pTrigger->table);
99620 sqlite3ExprDelete(db, pTrigger->pWhen);
99621 sqlite3IdListDelete(db, pTrigger->pColumns);
99622 sqlite3DbFree(db, pTrigger);
99626 ** This function is called to drop a trigger from the database schema.
99628 ** This may be called directly from the parser and therefore identifies
99629 ** the trigger by name. The sqlite3DropTriggerPtr() routine does the
99630 ** same job as this routine except it takes a pointer to the trigger
99631 ** instead of the trigger name.
99633 SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr){
99634 Trigger *pTrigger = 0;
99635 int i;
99636 const char *zDb;
99637 const char *zName;
99638 int nName;
99639 sqlite3 *db = pParse->db;
99641 if( db->mallocFailed ) goto drop_trigger_cleanup;
99642 if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
99643 goto drop_trigger_cleanup;
99646 assert( pName->nSrc==1 );
99647 zDb = pName->a[0].zDatabase;
99648 zName = pName->a[0].zName;
99649 nName = sqlite3Strlen30(zName);
99650 assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
99651 for(i=OMIT_TEMPDB; i<db->nDb; i++){
99652 int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
99653 if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue;
99654 assert( sqlite3SchemaMutexHeld(db, j, 0) );
99655 pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName, nName);
99656 if( pTrigger ) break;
99658 if( !pTrigger ){
99659 if( !noErr ){
99660 sqlite3ErrorMsg(pParse, "no such trigger: %S", pName, 0);
99661 }else{
99662 sqlite3CodeVerifyNamedSchema(pParse, zDb);
99664 pParse->checkSchema = 1;
99665 goto drop_trigger_cleanup;
99667 sqlite3DropTriggerPtr(pParse, pTrigger);
99669 drop_trigger_cleanup:
99670 sqlite3SrcListDelete(db, pName);
99674 ** Return a pointer to the Table structure for the table that a trigger
99675 ** is set on.
99677 static Table *tableOfTrigger(Trigger *pTrigger){
99678 int n = sqlite3Strlen30(pTrigger->table);
99679 return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n);
99684 ** Drop a trigger given a pointer to that trigger.
99686 SQLITE_PRIVATE void sqlite3DropTriggerPtr(Parse *pParse, Trigger *pTrigger){
99687 Table *pTable;
99688 Vdbe *v;
99689 sqlite3 *db = pParse->db;
99690 int iDb;
99692 iDb = sqlite3SchemaToIndex(pParse->db, pTrigger->pSchema);
99693 assert( iDb>=0 && iDb<db->nDb );
99694 pTable = tableOfTrigger(pTrigger);
99695 assert( pTable );
99696 assert( pTable->pSchema==pTrigger->pSchema || iDb==1 );
99697 #ifndef SQLITE_OMIT_AUTHORIZATION
99699 int code = SQLITE_DROP_TRIGGER;
99700 const char *zDb = db->aDb[iDb].zName;
99701 const char *zTab = SCHEMA_TABLE(iDb);
99702 if( iDb==1 ) code = SQLITE_DROP_TEMP_TRIGGER;
99703 if( sqlite3AuthCheck(pParse, code, pTrigger->zName, pTable->zName, zDb) ||
99704 sqlite3AuthCheck(pParse, SQLITE_DELETE, zTab, 0, zDb) ){
99705 return;
99708 #endif
99710 /* Generate code to destroy the database record of the trigger.
99712 assert( pTable!=0 );
99713 if( (v = sqlite3GetVdbe(pParse))!=0 ){
99714 int base;
99715 static const VdbeOpList dropTrigger[] = {
99716 { OP_Rewind, 0, ADDR(9), 0},
99717 { OP_String8, 0, 1, 0}, /* 1 */
99718 { OP_Column, 0, 1, 2},
99719 { OP_Ne, 2, ADDR(8), 1},
99720 { OP_String8, 0, 1, 0}, /* 4: "trigger" */
99721 { OP_Column, 0, 0, 2},
99722 { OP_Ne, 2, ADDR(8), 1},
99723 { OP_Delete, 0, 0, 0},
99724 { OP_Next, 0, ADDR(1), 0}, /* 8 */
99727 sqlite3BeginWriteOperation(pParse, 0, iDb);
99728 sqlite3OpenMasterTable(pParse, iDb);
99729 base = sqlite3VdbeAddOpList(v, ArraySize(dropTrigger), dropTrigger);
99730 sqlite3VdbeChangeP4(v, base+1, pTrigger->zName, P4_TRANSIENT);
99731 sqlite3VdbeChangeP4(v, base+4, "trigger", P4_STATIC);
99732 sqlite3ChangeCookie(pParse, iDb);
99733 sqlite3VdbeAddOp2(v, OP_Close, 0, 0);
99734 sqlite3VdbeAddOp4(v, OP_DropTrigger, iDb, 0, 0, pTrigger->zName, 0);
99735 if( pParse->nMem<3 ){
99736 pParse->nMem = 3;
99742 ** Remove a trigger from the hash tables of the sqlite* pointer.
99744 SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const char *zName){
99745 Trigger *pTrigger;
99746 Hash *pHash;
99748 assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
99749 pHash = &(db->aDb[iDb].pSchema->trigHash);
99750 pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0);
99751 if( ALWAYS(pTrigger) ){
99752 if( pTrigger->pSchema==pTrigger->pTabSchema ){
99753 Table *pTab = tableOfTrigger(pTrigger);
99754 Trigger **pp;
99755 for(pp=&pTab->pTrigger; *pp!=pTrigger; pp=&((*pp)->pNext));
99756 *pp = (*pp)->pNext;
99758 sqlite3DeleteTrigger(db, pTrigger);
99759 db->flags |= SQLITE_InternChanges;
99764 ** pEList is the SET clause of an UPDATE statement. Each entry
99765 ** in pEList is of the format <id>=<expr>. If any of the entries
99766 ** in pEList have an <id> which matches an identifier in pIdList,
99767 ** then return TRUE. If pIdList==NULL, then it is considered a
99768 ** wildcard that matches anything. Likewise if pEList==NULL then
99769 ** it matches anything so always return true. Return false only
99770 ** if there is no match.
99772 static int checkColumnOverlap(IdList *pIdList, ExprList *pEList){
99773 int e;
99774 if( pIdList==0 || NEVER(pEList==0) ) return 1;
99775 for(e=0; e<pEList->nExpr; e++){
99776 if( sqlite3IdListIndex(pIdList, pEList->a[e].zName)>=0 ) return 1;
99778 return 0;
99782 ** Return a list of all triggers on table pTab if there exists at least
99783 ** one trigger that must be fired when an operation of type 'op' is
99784 ** performed on the table, and, if that operation is an UPDATE, if at
99785 ** least one of the columns in pChanges is being modified.
99787 SQLITE_PRIVATE Trigger *sqlite3TriggersExist(
99788 Parse *pParse, /* Parse context */
99789 Table *pTab, /* The table the contains the triggers */
99790 int op, /* one of TK_DELETE, TK_INSERT, TK_UPDATE */
99791 ExprList *pChanges, /* Columns that change in an UPDATE statement */
99792 int *pMask /* OUT: Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
99794 int mask = 0;
99795 Trigger *pList = 0;
99796 Trigger *p;
99798 if( (pParse->db->flags & SQLITE_EnableTrigger)!=0 ){
99799 pList = sqlite3TriggerList(pParse, pTab);
99801 assert( pList==0 || IsVirtual(pTab)==0 );
99802 for(p=pList; p; p=p->pNext){
99803 if( p->op==op && checkColumnOverlap(p->pColumns, pChanges) ){
99804 mask |= p->tr_tm;
99807 if( pMask ){
99808 *pMask = mask;
99810 return (mask ? pList : 0);
99814 ** Convert the pStep->target token into a SrcList and return a pointer
99815 ** to that SrcList.
99817 ** This routine adds a specific database name, if needed, to the target when
99818 ** forming the SrcList. This prevents a trigger in one database from
99819 ** referring to a target in another database. An exception is when the
99820 ** trigger is in TEMP in which case it can refer to any other database it
99821 ** wants.
99823 static SrcList *targetSrcList(
99824 Parse *pParse, /* The parsing context */
99825 TriggerStep *pStep /* The trigger containing the target token */
99827 int iDb; /* Index of the database to use */
99828 SrcList *pSrc; /* SrcList to be returned */
99830 pSrc = sqlite3SrcListAppend(pParse->db, 0, &pStep->target, 0);
99831 if( pSrc ){
99832 assert( pSrc->nSrc>0 );
99833 assert( pSrc->a!=0 );
99834 iDb = sqlite3SchemaToIndex(pParse->db, pStep->pTrig->pSchema);
99835 if( iDb==0 || iDb>=2 ){
99836 sqlite3 *db = pParse->db;
99837 assert( iDb<pParse->db->nDb );
99838 pSrc->a[pSrc->nSrc-1].zDatabase = sqlite3DbStrDup(db, db->aDb[iDb].zName);
99841 return pSrc;
99845 ** Generate VDBE code for the statements inside the body of a single
99846 ** trigger.
99848 static int codeTriggerProgram(
99849 Parse *pParse, /* The parser context */
99850 TriggerStep *pStepList, /* List of statements inside the trigger body */
99851 int orconf /* Conflict algorithm. (OE_Abort, etc) */
99853 TriggerStep *pStep;
99854 Vdbe *v = pParse->pVdbe;
99855 sqlite3 *db = pParse->db;
99857 assert( pParse->pTriggerTab && pParse->pToplevel );
99858 assert( pStepList );
99859 assert( v!=0 );
99860 for(pStep=pStepList; pStep; pStep=pStep->pNext){
99861 /* Figure out the ON CONFLICT policy that will be used for this step
99862 ** of the trigger program. If the statement that caused this trigger
99863 ** to fire had an explicit ON CONFLICT, then use it. Otherwise, use
99864 ** the ON CONFLICT policy that was specified as part of the trigger
99865 ** step statement. Example:
99867 ** CREATE TRIGGER AFTER INSERT ON t1 BEGIN;
99868 ** INSERT OR REPLACE INTO t2 VALUES(new.a, new.b);
99869 ** END;
99871 ** INSERT INTO t1 ... ; -- insert into t2 uses REPLACE policy
99872 ** INSERT OR IGNORE INTO t1 ... ; -- insert into t2 uses IGNORE policy
99874 pParse->eOrconf = (orconf==OE_Default)?pStep->orconf:(u8)orconf;
99876 switch( pStep->op ){
99877 case TK_UPDATE: {
99878 sqlite3Update(pParse,
99879 targetSrcList(pParse, pStep),
99880 sqlite3ExprListDup(db, pStep->pExprList, 0),
99881 sqlite3ExprDup(db, pStep->pWhere, 0),
99882 pParse->eOrconf
99884 break;
99886 case TK_INSERT: {
99887 sqlite3Insert(pParse,
99888 targetSrcList(pParse, pStep),
99889 sqlite3ExprListDup(db, pStep->pExprList, 0),
99890 sqlite3SelectDup(db, pStep->pSelect, 0),
99891 sqlite3IdListDup(db, pStep->pIdList),
99892 pParse->eOrconf
99894 break;
99896 case TK_DELETE: {
99897 sqlite3DeleteFrom(pParse,
99898 targetSrcList(pParse, pStep),
99899 sqlite3ExprDup(db, pStep->pWhere, 0)
99901 break;
99903 default: assert( pStep->op==TK_SELECT ); {
99904 SelectDest sDest;
99905 Select *pSelect = sqlite3SelectDup(db, pStep->pSelect, 0);
99906 sqlite3SelectDestInit(&sDest, SRT_Discard, 0);
99907 sqlite3Select(pParse, pSelect, &sDest);
99908 sqlite3SelectDelete(db, pSelect);
99909 break;
99912 if( pStep->op!=TK_SELECT ){
99913 sqlite3VdbeAddOp0(v, OP_ResetCount);
99917 return 0;
99920 #ifdef SQLITE_DEBUG
99922 ** This function is used to add VdbeComment() annotations to a VDBE
99923 ** program. It is not used in production code, only for debugging.
99925 static const char *onErrorText(int onError){
99926 switch( onError ){
99927 case OE_Abort: return "abort";
99928 case OE_Rollback: return "rollback";
99929 case OE_Fail: return "fail";
99930 case OE_Replace: return "replace";
99931 case OE_Ignore: return "ignore";
99932 case OE_Default: return "default";
99934 return "n/a";
99936 #endif
99939 ** Parse context structure pFrom has just been used to create a sub-vdbe
99940 ** (trigger program). If an error has occurred, transfer error information
99941 ** from pFrom to pTo.
99943 static void transferParseError(Parse *pTo, Parse *pFrom){
99944 assert( pFrom->zErrMsg==0 || pFrom->nErr );
99945 assert( pTo->zErrMsg==0 || pTo->nErr );
99946 if( pTo->nErr==0 ){
99947 pTo->zErrMsg = pFrom->zErrMsg;
99948 pTo->nErr = pFrom->nErr;
99949 }else{
99950 sqlite3DbFree(pFrom->db, pFrom->zErrMsg);
99955 ** Create and populate a new TriggerPrg object with a sub-program
99956 ** implementing trigger pTrigger with ON CONFLICT policy orconf.
99958 static TriggerPrg *codeRowTrigger(
99959 Parse *pParse, /* Current parse context */
99960 Trigger *pTrigger, /* Trigger to code */
99961 Table *pTab, /* The table pTrigger is attached to */
99962 int orconf /* ON CONFLICT policy to code trigger program with */
99964 Parse *pTop = sqlite3ParseToplevel(pParse);
99965 sqlite3 *db = pParse->db; /* Database handle */
99966 TriggerPrg *pPrg; /* Value to return */
99967 Expr *pWhen = 0; /* Duplicate of trigger WHEN expression */
99968 Vdbe *v; /* Temporary VM */
99969 NameContext sNC; /* Name context for sub-vdbe */
99970 SubProgram *pProgram = 0; /* Sub-vdbe for trigger program */
99971 Parse *pSubParse; /* Parse context for sub-vdbe */
99972 int iEndTrigger = 0; /* Label to jump to if WHEN is false */
99974 assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
99975 assert( pTop->pVdbe );
99977 /* Allocate the TriggerPrg and SubProgram objects. To ensure that they
99978 ** are freed if an error occurs, link them into the Parse.pTriggerPrg
99979 ** list of the top-level Parse object sooner rather than later. */
99980 pPrg = sqlite3DbMallocZero(db, sizeof(TriggerPrg));
99981 if( !pPrg ) return 0;
99982 pPrg->pNext = pTop->pTriggerPrg;
99983 pTop->pTriggerPrg = pPrg;
99984 pPrg->pProgram = pProgram = sqlite3DbMallocZero(db, sizeof(SubProgram));
99985 if( !pProgram ) return 0;
99986 sqlite3VdbeLinkSubProgram(pTop->pVdbe, pProgram);
99987 pPrg->pTrigger = pTrigger;
99988 pPrg->orconf = orconf;
99989 pPrg->aColmask[0] = 0xffffffff;
99990 pPrg->aColmask[1] = 0xffffffff;
99992 /* Allocate and populate a new Parse context to use for coding the
99993 ** trigger sub-program. */
99994 pSubParse = sqlite3StackAllocZero(db, sizeof(Parse));
99995 if( !pSubParse ) return 0;
99996 memset(&sNC, 0, sizeof(sNC));
99997 sNC.pParse = pSubParse;
99998 pSubParse->db = db;
99999 pSubParse->pTriggerTab = pTab;
100000 pSubParse->pToplevel = pTop;
100001 pSubParse->zAuthContext = pTrigger->zName;
100002 pSubParse->eTriggerOp = pTrigger->op;
100003 pSubParse->nQueryLoop = pParse->nQueryLoop;
100005 v = sqlite3GetVdbe(pSubParse);
100006 if( v ){
100007 VdbeComment((v, "Start: %s.%s (%s %s%s%s ON %s)",
100008 pTrigger->zName, onErrorText(orconf),
100009 (pTrigger->tr_tm==TRIGGER_BEFORE ? "BEFORE" : "AFTER"),
100010 (pTrigger->op==TK_UPDATE ? "UPDATE" : ""),
100011 (pTrigger->op==TK_INSERT ? "INSERT" : ""),
100012 (pTrigger->op==TK_DELETE ? "DELETE" : ""),
100013 pTab->zName
100015 #ifndef SQLITE_OMIT_TRACE
100016 sqlite3VdbeChangeP4(v, -1,
100017 sqlite3MPrintf(db, "-- TRIGGER %s", pTrigger->zName), P4_DYNAMIC
100019 #endif
100021 /* If one was specified, code the WHEN clause. If it evaluates to false
100022 ** (or NULL) the sub-vdbe is immediately halted by jumping to the
100023 ** OP_Halt inserted at the end of the program. */
100024 if( pTrigger->pWhen ){
100025 pWhen = sqlite3ExprDup(db, pTrigger->pWhen, 0);
100026 if( SQLITE_OK==sqlite3ResolveExprNames(&sNC, pWhen)
100027 && db->mallocFailed==0
100029 iEndTrigger = sqlite3VdbeMakeLabel(v);
100030 sqlite3ExprIfFalse(pSubParse, pWhen, iEndTrigger, SQLITE_JUMPIFNULL);
100032 sqlite3ExprDelete(db, pWhen);
100035 /* Code the trigger program into the sub-vdbe. */
100036 codeTriggerProgram(pSubParse, pTrigger->step_list, orconf);
100038 /* Insert an OP_Halt at the end of the sub-program. */
100039 if( iEndTrigger ){
100040 sqlite3VdbeResolveLabel(v, iEndTrigger);
100042 sqlite3VdbeAddOp0(v, OP_Halt);
100043 VdbeComment((v, "End: %s.%s", pTrigger->zName, onErrorText(orconf)));
100045 transferParseError(pParse, pSubParse);
100046 if( db->mallocFailed==0 ){
100047 pProgram->aOp = sqlite3VdbeTakeOpArray(v, &pProgram->nOp, &pTop->nMaxArg);
100049 pProgram->nMem = pSubParse->nMem;
100050 pProgram->nCsr = pSubParse->nTab;
100051 pProgram->nOnce = pSubParse->nOnce;
100052 pProgram->token = (void *)pTrigger;
100053 pPrg->aColmask[0] = pSubParse->oldmask;
100054 pPrg->aColmask[1] = pSubParse->newmask;
100055 sqlite3VdbeDelete(v);
100058 assert( !pSubParse->pAinc && !pSubParse->pZombieTab );
100059 assert( !pSubParse->pTriggerPrg && !pSubParse->nMaxArg );
100060 sqlite3StackFree(db, pSubParse);
100062 return pPrg;
100066 ** Return a pointer to a TriggerPrg object containing the sub-program for
100067 ** trigger pTrigger with default ON CONFLICT algorithm orconf. If no such
100068 ** TriggerPrg object exists, a new object is allocated and populated before
100069 ** being returned.
100071 static TriggerPrg *getRowTrigger(
100072 Parse *pParse, /* Current parse context */
100073 Trigger *pTrigger, /* Trigger to code */
100074 Table *pTab, /* The table trigger pTrigger is attached to */
100075 int orconf /* ON CONFLICT algorithm. */
100077 Parse *pRoot = sqlite3ParseToplevel(pParse);
100078 TriggerPrg *pPrg;
100080 assert( pTrigger->zName==0 || pTab==tableOfTrigger(pTrigger) );
100082 /* It may be that this trigger has already been coded (or is in the
100083 ** process of being coded). If this is the case, then an entry with
100084 ** a matching TriggerPrg.pTrigger field will be present somewhere
100085 ** in the Parse.pTriggerPrg list. Search for such an entry. */
100086 for(pPrg=pRoot->pTriggerPrg;
100087 pPrg && (pPrg->pTrigger!=pTrigger || pPrg->orconf!=orconf);
100088 pPrg=pPrg->pNext
100091 /* If an existing TriggerPrg could not be located, create a new one. */
100092 if( !pPrg ){
100093 pPrg = codeRowTrigger(pParse, pTrigger, pTab, orconf);
100096 return pPrg;
100100 ** Generate code for the trigger program associated with trigger p on
100101 ** table pTab. The reg, orconf and ignoreJump parameters passed to this
100102 ** function are the same as those described in the header function for
100103 ** sqlite3CodeRowTrigger()
100105 SQLITE_PRIVATE void sqlite3CodeRowTriggerDirect(
100106 Parse *pParse, /* Parse context */
100107 Trigger *p, /* Trigger to code */
100108 Table *pTab, /* The table to code triggers from */
100109 int reg, /* Reg array containing OLD.* and NEW.* values */
100110 int orconf, /* ON CONFLICT policy */
100111 int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */
100113 Vdbe *v = sqlite3GetVdbe(pParse); /* Main VM */
100114 TriggerPrg *pPrg;
100115 pPrg = getRowTrigger(pParse, p, pTab, orconf);
100116 assert( pPrg || pParse->nErr || pParse->db->mallocFailed );
100118 /* Code the OP_Program opcode in the parent VDBE. P4 of the OP_Program
100119 ** is a pointer to the sub-vdbe containing the trigger program. */
100120 if( pPrg ){
100121 int bRecursive = (p->zName && 0==(pParse->db->flags&SQLITE_RecTriggers));
100123 sqlite3VdbeAddOp3(v, OP_Program, reg, ignoreJump, ++pParse->nMem);
100124 sqlite3VdbeChangeP4(v, -1, (const char *)pPrg->pProgram, P4_SUBPROGRAM);
100125 VdbeComment(
100126 (v, "Call: %s.%s", (p->zName?p->zName:"fkey"), onErrorText(orconf)));
100128 /* Set the P5 operand of the OP_Program instruction to non-zero if
100129 ** recursive invocation of this trigger program is disallowed. Recursive
100130 ** invocation is disallowed if (a) the sub-program is really a trigger,
100131 ** not a foreign key action, and (b) the flag to enable recursive triggers
100132 ** is clear. */
100133 sqlite3VdbeChangeP5(v, (u8)bRecursive);
100138 ** This is called to code the required FOR EACH ROW triggers for an operation
100139 ** on table pTab. The operation to code triggers for (INSERT, UPDATE or DELETE)
100140 ** is given by the op paramater. The tr_tm parameter determines whether the
100141 ** BEFORE or AFTER triggers are coded. If the operation is an UPDATE, then
100142 ** parameter pChanges is passed the list of columns being modified.
100144 ** If there are no triggers that fire at the specified time for the specified
100145 ** operation on pTab, this function is a no-op.
100147 ** The reg argument is the address of the first in an array of registers
100148 ** that contain the values substituted for the new.* and old.* references
100149 ** in the trigger program. If N is the number of columns in table pTab
100150 ** (a copy of pTab->nCol), then registers are populated as follows:
100152 ** Register Contains
100153 ** ------------------------------------------------------
100154 ** reg+0 OLD.rowid
100155 ** reg+1 OLD.* value of left-most column of pTab
100156 ** ... ...
100157 ** reg+N OLD.* value of right-most column of pTab
100158 ** reg+N+1 NEW.rowid
100159 ** reg+N+2 OLD.* value of left-most column of pTab
100160 ** ... ...
100161 ** reg+N+N+1 NEW.* value of right-most column of pTab
100163 ** For ON DELETE triggers, the registers containing the NEW.* values will
100164 ** never be accessed by the trigger program, so they are not allocated or
100165 ** populated by the caller (there is no data to populate them with anyway).
100166 ** Similarly, for ON INSERT triggers the values stored in the OLD.* registers
100167 ** are never accessed, and so are not allocated by the caller. So, for an
100168 ** ON INSERT trigger, the value passed to this function as parameter reg
100169 ** is not a readable register, although registers (reg+N) through
100170 ** (reg+N+N+1) are.
100172 ** Parameter orconf is the default conflict resolution algorithm for the
100173 ** trigger program to use (REPLACE, IGNORE etc.). Parameter ignoreJump
100174 ** is the instruction that control should jump to if a trigger program
100175 ** raises an IGNORE exception.
100177 SQLITE_PRIVATE void sqlite3CodeRowTrigger(
100178 Parse *pParse, /* Parse context */
100179 Trigger *pTrigger, /* List of triggers on table pTab */
100180 int op, /* One of TK_UPDATE, TK_INSERT, TK_DELETE */
100181 ExprList *pChanges, /* Changes list for any UPDATE OF triggers */
100182 int tr_tm, /* One of TRIGGER_BEFORE, TRIGGER_AFTER */
100183 Table *pTab, /* The table to code triggers from */
100184 int reg, /* The first in an array of registers (see above) */
100185 int orconf, /* ON CONFLICT policy */
100186 int ignoreJump /* Instruction to jump to for RAISE(IGNORE) */
100188 Trigger *p; /* Used to iterate through pTrigger list */
100190 assert( op==TK_UPDATE || op==TK_INSERT || op==TK_DELETE );
100191 assert( tr_tm==TRIGGER_BEFORE || tr_tm==TRIGGER_AFTER );
100192 assert( (op==TK_UPDATE)==(pChanges!=0) );
100194 for(p=pTrigger; p; p=p->pNext){
100196 /* Sanity checking: The schema for the trigger and for the table are
100197 ** always defined. The trigger must be in the same schema as the table
100198 ** or else it must be a TEMP trigger. */
100199 assert( p->pSchema!=0 );
100200 assert( p->pTabSchema!=0 );
100201 assert( p->pSchema==p->pTabSchema
100202 || p->pSchema==pParse->db->aDb[1].pSchema );
100204 /* Determine whether we should code this trigger */
100205 if( p->op==op
100206 && p->tr_tm==tr_tm
100207 && checkColumnOverlap(p->pColumns, pChanges)
100209 sqlite3CodeRowTriggerDirect(pParse, p, pTab, reg, orconf, ignoreJump);
100215 ** Triggers may access values stored in the old.* or new.* pseudo-table.
100216 ** This function returns a 32-bit bitmask indicating which columns of the
100217 ** old.* or new.* tables actually are used by triggers. This information
100218 ** may be used by the caller, for example, to avoid having to load the entire
100219 ** old.* record into memory when executing an UPDATE or DELETE command.
100221 ** Bit 0 of the returned mask is set if the left-most column of the
100222 ** table may be accessed using an [old|new].<col> reference. Bit 1 is set if
100223 ** the second leftmost column value is required, and so on. If there
100224 ** are more than 32 columns in the table, and at least one of the columns
100225 ** with an index greater than 32 may be accessed, 0xffffffff is returned.
100227 ** It is not possible to determine if the old.rowid or new.rowid column is
100228 ** accessed by triggers. The caller must always assume that it is.
100230 ** Parameter isNew must be either 1 or 0. If it is 0, then the mask returned
100231 ** applies to the old.* table. If 1, the new.* table.
100233 ** Parameter tr_tm must be a mask with one or both of the TRIGGER_BEFORE
100234 ** and TRIGGER_AFTER bits set. Values accessed by BEFORE triggers are only
100235 ** included in the returned mask if the TRIGGER_BEFORE bit is set in the
100236 ** tr_tm parameter. Similarly, values accessed by AFTER triggers are only
100237 ** included in the returned mask if the TRIGGER_AFTER bit is set in tr_tm.
100239 SQLITE_PRIVATE u32 sqlite3TriggerColmask(
100240 Parse *pParse, /* Parse context */
100241 Trigger *pTrigger, /* List of triggers on table pTab */
100242 ExprList *pChanges, /* Changes list for any UPDATE OF triggers */
100243 int isNew, /* 1 for new.* ref mask, 0 for old.* ref mask */
100244 int tr_tm, /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
100245 Table *pTab, /* The table to code triggers from */
100246 int orconf /* Default ON CONFLICT policy for trigger steps */
100248 const int op = pChanges ? TK_UPDATE : TK_DELETE;
100249 u32 mask = 0;
100250 Trigger *p;
100252 assert( isNew==1 || isNew==0 );
100253 for(p=pTrigger; p; p=p->pNext){
100254 if( p->op==op && (tr_tm&p->tr_tm)
100255 && checkColumnOverlap(p->pColumns,pChanges)
100257 TriggerPrg *pPrg;
100258 pPrg = getRowTrigger(pParse, p, pTab, orconf);
100259 if( pPrg ){
100260 mask |= pPrg->aColmask[isNew];
100265 return mask;
100268 #endif /* !defined(SQLITE_OMIT_TRIGGER) */
100270 /************** End of trigger.c *********************************************/
100271 /************** Begin file update.c ******************************************/
100273 ** 2001 September 15
100275 ** The author disclaims copyright to this source code. In place of
100276 ** a legal notice, here is a blessing:
100278 ** May you do good and not evil.
100279 ** May you find forgiveness for yourself and forgive others.
100280 ** May you share freely, never taking more than you give.
100282 *************************************************************************
100283 ** This file contains C code routines that are called by the parser
100284 ** to handle UPDATE statements.
100287 #ifndef SQLITE_OMIT_VIRTUALTABLE
100288 /* Forward declaration */
100289 static void updateVirtualTable(
100290 Parse *pParse, /* The parsing context */
100291 SrcList *pSrc, /* The virtual table to be modified */
100292 Table *pTab, /* The virtual table */
100293 ExprList *pChanges, /* The columns to change in the UPDATE statement */
100294 Expr *pRowidExpr, /* Expression used to recompute the rowid */
100295 int *aXRef, /* Mapping from columns of pTab to entries in pChanges */
100296 Expr *pWhere, /* WHERE clause of the UPDATE statement */
100297 int onError /* ON CONFLICT strategy */
100299 #endif /* SQLITE_OMIT_VIRTUALTABLE */
100302 ** The most recently coded instruction was an OP_Column to retrieve the
100303 ** i-th column of table pTab. This routine sets the P4 parameter of the
100304 ** OP_Column to the default value, if any.
100306 ** The default value of a column is specified by a DEFAULT clause in the
100307 ** column definition. This was either supplied by the user when the table
100308 ** was created, or added later to the table definition by an ALTER TABLE
100309 ** command. If the latter, then the row-records in the table btree on disk
100310 ** may not contain a value for the column and the default value, taken
100311 ** from the P4 parameter of the OP_Column instruction, is returned instead.
100312 ** If the former, then all row-records are guaranteed to include a value
100313 ** for the column and the P4 value is not required.
100315 ** Column definitions created by an ALTER TABLE command may only have
100316 ** literal default values specified: a number, null or a string. (If a more
100317 ** complicated default expression value was provided, it is evaluated
100318 ** when the ALTER TABLE is executed and one of the literal values written
100319 ** into the sqlite_master table.)
100321 ** Therefore, the P4 parameter is only required if the default value for
100322 ** the column is a literal number, string or null. The sqlite3ValueFromExpr()
100323 ** function is capable of transforming these types of expressions into
100324 ** sqlite3_value objects.
100326 ** If parameter iReg is not negative, code an OP_RealAffinity instruction
100327 ** on register iReg. This is used when an equivalent integer value is
100328 ** stored in place of an 8-byte floating point value in order to save
100329 ** space.
100331 SQLITE_PRIVATE void sqlite3ColumnDefault(Vdbe *v, Table *pTab, int i, int iReg){
100332 assert( pTab!=0 );
100333 if( !pTab->pSelect ){
100334 sqlite3_value *pValue;
100335 u8 enc = ENC(sqlite3VdbeDb(v));
100336 Column *pCol = &pTab->aCol[i];
100337 VdbeComment((v, "%s.%s", pTab->zName, pCol->zName));
100338 assert( i<pTab->nCol );
100339 sqlite3ValueFromExpr(sqlite3VdbeDb(v), pCol->pDflt, enc,
100340 pCol->affinity, &pValue);
100341 if( pValue ){
100342 sqlite3VdbeChangeP4(v, -1, (const char *)pValue, P4_MEM);
100344 #ifndef SQLITE_OMIT_FLOATING_POINT
100345 if( iReg>=0 && pTab->aCol[i].affinity==SQLITE_AFF_REAL ){
100346 sqlite3VdbeAddOp1(v, OP_RealAffinity, iReg);
100348 #endif
100353 ** Process an UPDATE statement.
100355 ** UPDATE OR IGNORE table_wxyz SET a=b, c=d WHERE e<5 AND f NOT NULL;
100356 ** \_______/ \________/ \______/ \________________/
100357 * onError pTabList pChanges pWhere
100359 SQLITE_PRIVATE void sqlite3Update(
100360 Parse *pParse, /* The parser context */
100361 SrcList *pTabList, /* The table in which we should change things */
100362 ExprList *pChanges, /* Things to be changed */
100363 Expr *pWhere, /* The WHERE clause. May be null */
100364 int onError /* How to handle constraint errors */
100366 int i, j; /* Loop counters */
100367 Table *pTab; /* The table to be updated */
100368 int addr = 0; /* VDBE instruction address of the start of the loop */
100369 WhereInfo *pWInfo; /* Information about the WHERE clause */
100370 Vdbe *v; /* The virtual database engine */
100371 Index *pIdx; /* For looping over indices */
100372 int nIdx; /* Number of indices that need updating */
100373 int iCur; /* VDBE Cursor number of pTab */
100374 sqlite3 *db; /* The database structure */
100375 int *aRegIdx = 0; /* One register assigned to each index to be updated */
100376 int *aXRef = 0; /* aXRef[i] is the index in pChanges->a[] of the
100377 ** an expression for the i-th column of the table.
100378 ** aXRef[i]==-1 if the i-th column is not changed. */
100379 int chngRowid; /* True if the record number is being changed */
100380 Expr *pRowidExpr = 0; /* Expression defining the new record number */
100381 int openAll = 0; /* True if all indices need to be opened */
100382 AuthContext sContext; /* The authorization context */
100383 NameContext sNC; /* The name-context to resolve expressions in */
100384 int iDb; /* Database containing the table being updated */
100385 int okOnePass; /* True for one-pass algorithm without the FIFO */
100386 int hasFK; /* True if foreign key processing is required */
100388 #ifndef SQLITE_OMIT_TRIGGER
100389 int isView; /* True when updating a view (INSTEAD OF trigger) */
100390 Trigger *pTrigger; /* List of triggers on pTab, if required */
100391 int tmask; /* Mask of TRIGGER_BEFORE|TRIGGER_AFTER */
100392 #endif
100393 int newmask; /* Mask of NEW.* columns accessed by BEFORE triggers */
100395 /* Register Allocations */
100396 int regRowCount = 0; /* A count of rows changed */
100397 int regOldRowid; /* The old rowid */
100398 int regNewRowid; /* The new rowid */
100399 int regNew; /* Content of the NEW.* table in triggers */
100400 int regOld = 0; /* Content of OLD.* table in triggers */
100401 int regRowSet = 0; /* Rowset of rows to be updated */
100403 memset(&sContext, 0, sizeof(sContext));
100404 db = pParse->db;
100405 if( pParse->nErr || db->mallocFailed ){
100406 goto update_cleanup;
100408 assert( pTabList->nSrc==1 );
100410 /* Locate the table which we want to update.
100412 pTab = sqlite3SrcListLookup(pParse, pTabList);
100413 if( pTab==0 ) goto update_cleanup;
100414 iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
100416 /* Figure out if we have any triggers and if the table being
100417 ** updated is a view.
100419 #ifndef SQLITE_OMIT_TRIGGER
100420 pTrigger = sqlite3TriggersExist(pParse, pTab, TK_UPDATE, pChanges, &tmask);
100421 isView = pTab->pSelect!=0;
100422 assert( pTrigger || tmask==0 );
100423 #else
100424 # define pTrigger 0
100425 # define isView 0
100426 # define tmask 0
100427 #endif
100428 #ifdef SQLITE_OMIT_VIEW
100429 # undef isView
100430 # define isView 0
100431 #endif
100433 if( sqlite3ViewGetColumnNames(pParse, pTab) ){
100434 goto update_cleanup;
100436 if( sqlite3IsReadOnly(pParse, pTab, tmask) ){
100437 goto update_cleanup;
100439 aXRef = sqlite3DbMallocRaw(db, sizeof(int) * pTab->nCol );
100440 if( aXRef==0 ) goto update_cleanup;
100441 for(i=0; i<pTab->nCol; i++) aXRef[i] = -1;
100443 /* Allocate a cursors for the main database table and for all indices.
100444 ** The index cursors might not be used, but if they are used they
100445 ** need to occur right after the database cursor. So go ahead and
100446 ** allocate enough space, just in case.
100448 pTabList->a[0].iCursor = iCur = pParse->nTab++;
100449 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
100450 pParse->nTab++;
100453 /* Initialize the name-context */
100454 memset(&sNC, 0, sizeof(sNC));
100455 sNC.pParse = pParse;
100456 sNC.pSrcList = pTabList;
100458 /* Resolve the column names in all the expressions of the
100459 ** of the UPDATE statement. Also find the column index
100460 ** for each column to be updated in the pChanges array. For each
100461 ** column to be updated, make sure we have authorization to change
100462 ** that column.
100464 chngRowid = 0;
100465 for(i=0; i<pChanges->nExpr; i++){
100466 if( sqlite3ResolveExprNames(&sNC, pChanges->a[i].pExpr) ){
100467 goto update_cleanup;
100469 for(j=0; j<pTab->nCol; j++){
100470 if( sqlite3StrICmp(pTab->aCol[j].zName, pChanges->a[i].zName)==0 ){
100471 if( j==pTab->iPKey ){
100472 chngRowid = 1;
100473 pRowidExpr = pChanges->a[i].pExpr;
100475 aXRef[j] = i;
100476 break;
100479 if( j>=pTab->nCol ){
100480 if( sqlite3IsRowid(pChanges->a[i].zName) ){
100481 chngRowid = 1;
100482 pRowidExpr = pChanges->a[i].pExpr;
100483 }else{
100484 sqlite3ErrorMsg(pParse, "no such column: %s", pChanges->a[i].zName);
100485 pParse->checkSchema = 1;
100486 goto update_cleanup;
100489 #ifndef SQLITE_OMIT_AUTHORIZATION
100491 int rc;
100492 rc = sqlite3AuthCheck(pParse, SQLITE_UPDATE, pTab->zName,
100493 pTab->aCol[j].zName, db->aDb[iDb].zName);
100494 if( rc==SQLITE_DENY ){
100495 goto update_cleanup;
100496 }else if( rc==SQLITE_IGNORE ){
100497 aXRef[j] = -1;
100500 #endif
100503 hasFK = sqlite3FkRequired(pParse, pTab, aXRef, chngRowid);
100505 /* Allocate memory for the array aRegIdx[]. There is one entry in the
100506 ** array for each index associated with table being updated. Fill in
100507 ** the value with a register number for indices that are to be used
100508 ** and with zero for unused indices.
100510 for(nIdx=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, nIdx++){}
100511 if( nIdx>0 ){
100512 aRegIdx = sqlite3DbMallocRaw(db, sizeof(Index*) * nIdx );
100513 if( aRegIdx==0 ) goto update_cleanup;
100515 for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
100516 int reg;
100517 if( hasFK || chngRowid ){
100518 reg = ++pParse->nMem;
100519 }else{
100520 reg = 0;
100521 for(i=0; i<pIdx->nColumn; i++){
100522 if( aXRef[pIdx->aiColumn[i]]>=0 ){
100523 reg = ++pParse->nMem;
100524 break;
100528 aRegIdx[j] = reg;
100531 /* Begin generating code. */
100532 v = sqlite3GetVdbe(pParse);
100533 if( v==0 ) goto update_cleanup;
100534 if( pParse->nested==0 ) sqlite3VdbeCountChanges(v);
100535 sqlite3BeginWriteOperation(pParse, 1, iDb);
100537 #ifndef SQLITE_OMIT_VIRTUALTABLE
100538 /* Virtual tables must be handled separately */
100539 if( IsVirtual(pTab) ){
100540 updateVirtualTable(pParse, pTabList, pTab, pChanges, pRowidExpr, aXRef,
100541 pWhere, onError);
100542 pWhere = 0;
100543 pTabList = 0;
100544 goto update_cleanup;
100546 #endif
100548 /* Allocate required registers. */
100549 regRowSet = ++pParse->nMem;
100550 regOldRowid = regNewRowid = ++pParse->nMem;
100551 if( pTrigger || hasFK ){
100552 regOld = pParse->nMem + 1;
100553 pParse->nMem += pTab->nCol;
100555 if( chngRowid || pTrigger || hasFK ){
100556 regNewRowid = ++pParse->nMem;
100558 regNew = pParse->nMem + 1;
100559 pParse->nMem += pTab->nCol;
100561 /* Start the view context. */
100562 if( isView ){
100563 sqlite3AuthContextPush(pParse, &sContext, pTab->zName);
100566 /* If we are trying to update a view, realize that view into
100567 ** a ephemeral table.
100569 #if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
100570 if( isView ){
100571 sqlite3MaterializeView(pParse, pTab, pWhere, iCur);
100573 #endif
100575 /* Resolve the column names in all the expressions in the
100576 ** WHERE clause.
100578 if( sqlite3ResolveExprNames(&sNC, pWhere) ){
100579 goto update_cleanup;
100582 /* Begin the database scan
100584 sqlite3VdbeAddOp3(v, OP_Null, 0, regRowSet, regOldRowid);
100585 pWInfo = sqlite3WhereBegin(
100586 pParse, pTabList, pWhere, 0, 0, WHERE_ONEPASS_DESIRED
100588 if( pWInfo==0 ) goto update_cleanup;
100589 okOnePass = pWInfo->okOnePass;
100591 /* Remember the rowid of every item to be updated.
100593 sqlite3VdbeAddOp2(v, OP_Rowid, iCur, regOldRowid);
100594 if( !okOnePass ){
100595 sqlite3VdbeAddOp2(v, OP_RowSetAdd, regRowSet, regOldRowid);
100598 /* End the database scan loop.
100600 sqlite3WhereEnd(pWInfo);
100602 /* Initialize the count of updated rows
100604 if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab ){
100605 regRowCount = ++pParse->nMem;
100606 sqlite3VdbeAddOp2(v, OP_Integer, 0, regRowCount);
100609 if( !isView ){
100611 ** Open every index that needs updating. Note that if any
100612 ** index could potentially invoke a REPLACE conflict resolution
100613 ** action, then we need to open all indices because we might need
100614 ** to be deleting some records.
100616 if( !okOnePass ) sqlite3OpenTable(pParse, iCur, iDb, pTab, OP_OpenWrite);
100617 if( onError==OE_Replace ){
100618 openAll = 1;
100619 }else{
100620 openAll = 0;
100621 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
100622 if( pIdx->onError==OE_Replace ){
100623 openAll = 1;
100624 break;
100628 for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
100629 assert( aRegIdx );
100630 if( openAll || aRegIdx[i]>0 ){
100631 KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
100632 sqlite3VdbeAddOp4(v, OP_OpenWrite, iCur+i+1, pIdx->tnum, iDb,
100633 (char*)pKey, P4_KEYINFO_HANDOFF);
100634 assert( pParse->nTab>iCur+i+1 );
100639 /* Top of the update loop */
100640 if( okOnePass ){
100641 int a1 = sqlite3VdbeAddOp1(v, OP_NotNull, regOldRowid);
100642 addr = sqlite3VdbeAddOp0(v, OP_Goto);
100643 sqlite3VdbeJumpHere(v, a1);
100644 }else{
100645 addr = sqlite3VdbeAddOp3(v, OP_RowSetRead, regRowSet, 0, regOldRowid);
100648 /* Make cursor iCur point to the record that is being updated. If
100649 ** this record does not exist for some reason (deleted by a trigger,
100650 ** for example, then jump to the next iteration of the RowSet loop. */
100651 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
100653 /* If the record number will change, set register regNewRowid to
100654 ** contain the new value. If the record number is not being modified,
100655 ** then regNewRowid is the same register as regOldRowid, which is
100656 ** already populated. */
100657 assert( chngRowid || pTrigger || hasFK || regOldRowid==regNewRowid );
100658 if( chngRowid ){
100659 sqlite3ExprCode(pParse, pRowidExpr, regNewRowid);
100660 sqlite3VdbeAddOp1(v, OP_MustBeInt, regNewRowid);
100663 /* If there are triggers on this table, populate an array of registers
100664 ** with the required old.* column data. */
100665 if( hasFK || pTrigger ){
100666 u32 oldmask = (hasFK ? sqlite3FkOldmask(pParse, pTab) : 0);
100667 oldmask |= sqlite3TriggerColmask(pParse,
100668 pTrigger, pChanges, 0, TRIGGER_BEFORE|TRIGGER_AFTER, pTab, onError
100670 for(i=0; i<pTab->nCol; i++){
100671 if( aXRef[i]<0 || oldmask==0xffffffff || (i<32 && (oldmask & (1<<i))) ){
100672 sqlite3ExprCodeGetColumnOfTable(v, pTab, iCur, i, regOld+i);
100673 }else{
100674 sqlite3VdbeAddOp2(v, OP_Null, 0, regOld+i);
100677 if( chngRowid==0 ){
100678 sqlite3VdbeAddOp2(v, OP_Copy, regOldRowid, regNewRowid);
100682 /* Populate the array of registers beginning at regNew with the new
100683 ** row data. This array is used to check constaints, create the new
100684 ** table and index records, and as the values for any new.* references
100685 ** made by triggers.
100687 ** If there are one or more BEFORE triggers, then do not populate the
100688 ** registers associated with columns that are (a) not modified by
100689 ** this UPDATE statement and (b) not accessed by new.* references. The
100690 ** values for registers not modified by the UPDATE must be reloaded from
100691 ** the database after the BEFORE triggers are fired anyway (as the trigger
100692 ** may have modified them). So not loading those that are not going to
100693 ** be used eliminates some redundant opcodes.
100695 newmask = sqlite3TriggerColmask(
100696 pParse, pTrigger, pChanges, 1, TRIGGER_BEFORE, pTab, onError
100698 sqlite3VdbeAddOp3(v, OP_Null, 0, regNew, regNew+pTab->nCol-1);
100699 for(i=0; i<pTab->nCol; i++){
100700 if( i==pTab->iPKey ){
100701 /*sqlite3VdbeAddOp2(v, OP_Null, 0, regNew+i);*/
100702 }else{
100703 j = aXRef[i];
100704 if( j>=0 ){
100705 sqlite3ExprCode(pParse, pChanges->a[j].pExpr, regNew+i);
100706 }else if( 0==(tmask&TRIGGER_BEFORE) || i>31 || (newmask&(1<<i)) ){
100707 /* This branch loads the value of a column that will not be changed
100708 ** into a register. This is done if there are no BEFORE triggers, or
100709 ** if there are one or more BEFORE triggers that use this value via
100710 ** a new.* reference in a trigger program.
100712 testcase( i==31 );
100713 testcase( i==32 );
100714 sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
100715 sqlite3ColumnDefault(v, pTab, i, regNew+i);
100720 /* Fire any BEFORE UPDATE triggers. This happens before constraints are
100721 ** verified. One could argue that this is wrong.
100723 if( tmask&TRIGGER_BEFORE ){
100724 sqlite3VdbeAddOp2(v, OP_Affinity, regNew, pTab->nCol);
100725 sqlite3TableAffinityStr(v, pTab);
100726 sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges,
100727 TRIGGER_BEFORE, pTab, regOldRowid, onError, addr);
100729 /* The row-trigger may have deleted the row being updated. In this
100730 ** case, jump to the next row. No updates or AFTER triggers are
100731 ** required. This behaviour - what happens when the row being updated
100732 ** is deleted or renamed by a BEFORE trigger - is left undefined in the
100733 ** documentation.
100735 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addr, regOldRowid);
100737 /* If it did not delete it, the row-trigger may still have modified
100738 ** some of the columns of the row being updated. Load the values for
100739 ** all columns not modified by the update statement into their
100740 ** registers in case this has happened.
100742 for(i=0; i<pTab->nCol; i++){
100743 if( aXRef[i]<0 && i!=pTab->iPKey ){
100744 sqlite3VdbeAddOp3(v, OP_Column, iCur, i, regNew+i);
100745 sqlite3ColumnDefault(v, pTab, i, regNew+i);
100750 if( !isView ){
100751 int j1; /* Address of jump instruction */
100753 /* Do constraint checks. */
100754 sqlite3GenerateConstraintChecks(pParse, pTab, iCur, regNewRowid,
100755 aRegIdx, (chngRowid?regOldRowid:0), 1, onError, addr, 0);
100757 /* Do FK constraint checks. */
100758 if( hasFK ){
100759 sqlite3FkCheck(pParse, pTab, regOldRowid, 0);
100762 /* Delete the index entries associated with the current record. */
100763 j1 = sqlite3VdbeAddOp3(v, OP_NotExists, iCur, 0, regOldRowid);
100764 sqlite3GenerateRowIndexDelete(pParse, pTab, iCur, aRegIdx);
100766 /* If changing the record number, delete the old record. */
100767 if( hasFK || chngRowid ){
100768 sqlite3VdbeAddOp2(v, OP_Delete, iCur, 0);
100770 sqlite3VdbeJumpHere(v, j1);
100772 if( hasFK ){
100773 sqlite3FkCheck(pParse, pTab, 0, regNewRowid);
100776 /* Insert the new index entries and the new record. */
100777 sqlite3CompleteInsertion(pParse, pTab, iCur, regNewRowid, aRegIdx, 1, 0, 0);
100779 /* Do any ON CASCADE, SET NULL or SET DEFAULT operations required to
100780 ** handle rows (possibly in other tables) that refer via a foreign key
100781 ** to the row just updated. */
100782 if( hasFK ){
100783 sqlite3FkActions(pParse, pTab, pChanges, regOldRowid);
100787 /* Increment the row counter
100789 if( (db->flags & SQLITE_CountRows) && !pParse->pTriggerTab){
100790 sqlite3VdbeAddOp2(v, OP_AddImm, regRowCount, 1);
100793 sqlite3CodeRowTrigger(pParse, pTrigger, TK_UPDATE, pChanges,
100794 TRIGGER_AFTER, pTab, regOldRowid, onError, addr);
100796 /* Repeat the above with the next record to be updated, until
100797 ** all record selected by the WHERE clause have been updated.
100799 sqlite3VdbeAddOp2(v, OP_Goto, 0, addr);
100800 sqlite3VdbeJumpHere(v, addr);
100802 /* Close all tables */
100803 for(i=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, i++){
100804 assert( aRegIdx );
100805 if( openAll || aRegIdx[i]>0 ){
100806 sqlite3VdbeAddOp2(v, OP_Close, iCur+i+1, 0);
100809 sqlite3VdbeAddOp2(v, OP_Close, iCur, 0);
100811 /* Update the sqlite_sequence table by storing the content of the
100812 ** maximum rowid counter values recorded while inserting into
100813 ** autoincrement tables.
100815 if( pParse->nested==0 && pParse->pTriggerTab==0 ){
100816 sqlite3AutoincrementEnd(pParse);
100820 ** Return the number of rows that were changed. If this routine is
100821 ** generating code because of a call to sqlite3NestedParse(), do not
100822 ** invoke the callback function.
100824 if( (db->flags&SQLITE_CountRows) && !pParse->pTriggerTab && !pParse->nested ){
100825 sqlite3VdbeAddOp2(v, OP_ResultRow, regRowCount, 1);
100826 sqlite3VdbeSetNumCols(v, 1);
100827 sqlite3VdbeSetColName(v, 0, COLNAME_NAME, "rows updated", SQLITE_STATIC);
100830 update_cleanup:
100831 sqlite3AuthContextPop(&sContext);
100832 sqlite3DbFree(db, aRegIdx);
100833 sqlite3DbFree(db, aXRef);
100834 sqlite3SrcListDelete(db, pTabList);
100835 sqlite3ExprListDelete(db, pChanges);
100836 sqlite3ExprDelete(db, pWhere);
100837 return;
100839 /* Make sure "isView" and other macros defined above are undefined. Otherwise
100840 ** thely may interfere with compilation of other functions in this file
100841 ** (or in another file, if this file becomes part of the amalgamation). */
100842 #ifdef isView
100843 #undef isView
100844 #endif
100845 #ifdef pTrigger
100846 #undef pTrigger
100847 #endif
100849 #ifndef SQLITE_OMIT_VIRTUALTABLE
100851 ** Generate code for an UPDATE of a virtual table.
100853 ** The strategy is that we create an ephemerial table that contains
100854 ** for each row to be changed:
100856 ** (A) The original rowid of that row.
100857 ** (B) The revised rowid for the row. (note1)
100858 ** (C) The content of every column in the row.
100860 ** Then we loop over this ephemeral table and for each row in
100861 ** the ephermeral table call VUpdate.
100863 ** When finished, drop the ephemeral table.
100865 ** (note1) Actually, if we know in advance that (A) is always the same
100866 ** as (B) we only store (A), then duplicate (A) when pulling
100867 ** it out of the ephemeral table before calling VUpdate.
100869 static void updateVirtualTable(
100870 Parse *pParse, /* The parsing context */
100871 SrcList *pSrc, /* The virtual table to be modified */
100872 Table *pTab, /* The virtual table */
100873 ExprList *pChanges, /* The columns to change in the UPDATE statement */
100874 Expr *pRowid, /* Expression used to recompute the rowid */
100875 int *aXRef, /* Mapping from columns of pTab to entries in pChanges */
100876 Expr *pWhere, /* WHERE clause of the UPDATE statement */
100877 int onError /* ON CONFLICT strategy */
100879 Vdbe *v = pParse->pVdbe; /* Virtual machine under construction */
100880 ExprList *pEList = 0; /* The result set of the SELECT statement */
100881 Select *pSelect = 0; /* The SELECT statement */
100882 Expr *pExpr; /* Temporary expression */
100883 int ephemTab; /* Table holding the result of the SELECT */
100884 int i; /* Loop counter */
100885 int addr; /* Address of top of loop */
100886 int iReg; /* First register in set passed to OP_VUpdate */
100887 sqlite3 *db = pParse->db; /* Database connection */
100888 const char *pVTab = (const char*)sqlite3GetVTable(db, pTab);
100889 SelectDest dest;
100891 /* Construct the SELECT statement that will find the new values for
100892 ** all updated rows.
100894 pEList = sqlite3ExprListAppend(pParse, 0, sqlite3Expr(db, TK_ID, "_rowid_"));
100895 if( pRowid ){
100896 pEList = sqlite3ExprListAppend(pParse, pEList,
100897 sqlite3ExprDup(db, pRowid, 0));
100899 assert( pTab->iPKey<0 );
100900 for(i=0; i<pTab->nCol; i++){
100901 if( aXRef[i]>=0 ){
100902 pExpr = sqlite3ExprDup(db, pChanges->a[aXRef[i]].pExpr, 0);
100903 }else{
100904 pExpr = sqlite3Expr(db, TK_ID, pTab->aCol[i].zName);
100906 pEList = sqlite3ExprListAppend(pParse, pEList, pExpr);
100908 pSelect = sqlite3SelectNew(pParse, pEList, pSrc, pWhere, 0, 0, 0, 0, 0, 0);
100910 /* Create the ephemeral table into which the update results will
100911 ** be stored.
100913 assert( v );
100914 ephemTab = pParse->nTab++;
100915 sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0));
100916 sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
100918 /* fill the ephemeral table
100920 sqlite3SelectDestInit(&dest, SRT_Table, ephemTab);
100921 sqlite3Select(pParse, pSelect, &dest);
100923 /* Generate code to scan the ephemeral table and call VUpdate. */
100924 iReg = ++pParse->nMem;
100925 pParse->nMem += pTab->nCol+1;
100926 addr = sqlite3VdbeAddOp2(v, OP_Rewind, ephemTab, 0);
100927 sqlite3VdbeAddOp3(v, OP_Column, ephemTab, 0, iReg);
100928 sqlite3VdbeAddOp3(v, OP_Column, ephemTab, (pRowid?1:0), iReg+1);
100929 for(i=0; i<pTab->nCol; i++){
100930 sqlite3VdbeAddOp3(v, OP_Column, ephemTab, i+1+(pRowid!=0), iReg+2+i);
100932 sqlite3VtabMakeWritable(pParse, pTab);
100933 sqlite3VdbeAddOp4(v, OP_VUpdate, 0, pTab->nCol+2, iReg, pVTab, P4_VTAB);
100934 sqlite3VdbeChangeP5(v, onError==OE_Default ? OE_Abort : onError);
100935 sqlite3MayAbort(pParse);
100936 sqlite3VdbeAddOp2(v, OP_Next, ephemTab, addr+1);
100937 sqlite3VdbeJumpHere(v, addr);
100938 sqlite3VdbeAddOp2(v, OP_Close, ephemTab, 0);
100940 /* Cleanup */
100941 sqlite3SelectDelete(db, pSelect);
100943 #endif /* SQLITE_OMIT_VIRTUALTABLE */
100945 /************** End of update.c **********************************************/
100946 /************** Begin file vacuum.c ******************************************/
100948 ** 2003 April 6
100950 ** The author disclaims copyright to this source code. In place of
100951 ** a legal notice, here is a blessing:
100953 ** May you do good and not evil.
100954 ** May you find forgiveness for yourself and forgive others.
100955 ** May you share freely, never taking more than you give.
100957 *************************************************************************
100958 ** This file contains code used to implement the VACUUM command.
100960 ** Most of the code in this file may be omitted by defining the
100961 ** SQLITE_OMIT_VACUUM macro.
100964 #if !defined(SQLITE_OMIT_VACUUM) && !defined(SQLITE_OMIT_ATTACH)
100966 ** Finalize a prepared statement. If there was an error, store the
100967 ** text of the error message in *pzErrMsg. Return the result code.
100969 static int vacuumFinalize(sqlite3 *db, sqlite3_stmt *pStmt, char **pzErrMsg){
100970 int rc;
100971 rc = sqlite3VdbeFinalize((Vdbe*)pStmt);
100972 if( rc ){
100973 sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
100975 return rc;
100979 ** Execute zSql on database db. Return an error code.
100981 static int execSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
100982 sqlite3_stmt *pStmt;
100983 VVA_ONLY( int rc; )
100984 if( !zSql ){
100985 return SQLITE_NOMEM;
100987 if( SQLITE_OK!=sqlite3_prepare(db, zSql, -1, &pStmt, 0) ){
100988 sqlite3SetString(pzErrMsg, db, sqlite3_errmsg(db));
100989 return sqlite3_errcode(db);
100991 VVA_ONLY( rc = ) sqlite3_step(pStmt);
100992 assert( rc!=SQLITE_ROW || (db->flags&SQLITE_CountRows) );
100993 return vacuumFinalize(db, pStmt, pzErrMsg);
100997 ** Execute zSql on database db. The statement returns exactly
100998 ** one column. Execute this as SQL on the same database.
101000 static int execExecSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
101001 sqlite3_stmt *pStmt;
101002 int rc;
101004 rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
101005 if( rc!=SQLITE_OK ) return rc;
101007 while( SQLITE_ROW==sqlite3_step(pStmt) ){
101008 rc = execSql(db, pzErrMsg, (char*)sqlite3_column_text(pStmt, 0));
101009 if( rc!=SQLITE_OK ){
101010 vacuumFinalize(db, pStmt, pzErrMsg);
101011 return rc;
101015 return vacuumFinalize(db, pStmt, pzErrMsg);
101019 ** The non-standard VACUUM command is used to clean up the database,
101020 ** collapse free space, etc. It is modelled after the VACUUM command
101021 ** in PostgreSQL.
101023 ** In version 1.0.x of SQLite, the VACUUM command would call
101024 ** gdbm_reorganize() on all the database tables. But beginning
101025 ** with 2.0.0, SQLite no longer uses GDBM so this command has
101026 ** become a no-op.
101028 SQLITE_PRIVATE void sqlite3Vacuum(Parse *pParse){
101029 Vdbe *v = sqlite3GetVdbe(pParse);
101030 if( v ){
101031 sqlite3VdbeAddOp2(v, OP_Vacuum, 0, 0);
101033 return;
101037 ** This routine implements the OP_Vacuum opcode of the VDBE.
101039 SQLITE_PRIVATE int sqlite3RunVacuum(char **pzErrMsg, sqlite3 *db){
101040 int rc = SQLITE_OK; /* Return code from service routines */
101041 Btree *pMain; /* The database being vacuumed */
101042 Btree *pTemp; /* The temporary database we vacuum into */
101043 char *zSql = 0; /* SQL statements */
101044 int saved_flags; /* Saved value of the db->flags */
101045 int saved_nChange; /* Saved value of db->nChange */
101046 int saved_nTotalChange; /* Saved value of db->nTotalChange */
101047 void (*saved_xTrace)(void*,const char*); /* Saved db->xTrace */
101048 Db *pDb = 0; /* Database to detach at end of vacuum */
101049 int isMemDb; /* True if vacuuming a :memory: database */
101050 int nRes; /* Bytes of reserved space at the end of each page */
101051 int nDb; /* Number of attached databases */
101053 if( !db->autoCommit ){
101054 sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
101055 return SQLITE_ERROR;
101057 if( db->activeVdbeCnt>1 ){
101058 sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress");
101059 return SQLITE_ERROR;
101062 /* Save the current value of the database flags so that it can be
101063 ** restored before returning. Then set the writable-schema flag, and
101064 ** disable CHECK and foreign key constraints. */
101065 saved_flags = db->flags;
101066 saved_nChange = db->nChange;
101067 saved_nTotalChange = db->nTotalChange;
101068 saved_xTrace = db->xTrace;
101069 db->flags |= SQLITE_WriteSchema | SQLITE_IgnoreChecks | SQLITE_PreferBuiltin;
101070 db->flags &= ~(SQLITE_ForeignKeys | SQLITE_ReverseOrder);
101071 db->xTrace = 0;
101073 pMain = db->aDb[0].pBt;
101074 isMemDb = sqlite3PagerIsMemdb(sqlite3BtreePager(pMain));
101076 /* Attach the temporary database as 'vacuum_db'. The synchronous pragma
101077 ** can be set to 'off' for this file, as it is not recovered if a crash
101078 ** occurs anyway. The integrity of the database is maintained by a
101079 ** (possibly synchronous) transaction opened on the main database before
101080 ** sqlite3BtreeCopyFile() is called.
101082 ** An optimisation would be to use a non-journaled pager.
101083 ** (Later:) I tried setting "PRAGMA vacuum_db.journal_mode=OFF" but
101084 ** that actually made the VACUUM run slower. Very little journalling
101085 ** actually occurs when doing a vacuum since the vacuum_db is initially
101086 ** empty. Only the journal header is written. Apparently it takes more
101087 ** time to parse and run the PRAGMA to turn journalling off than it does
101088 ** to write the journal header file.
101090 nDb = db->nDb;
101091 if( sqlite3TempInMemory(db) ){
101092 zSql = "ATTACH ':memory:' AS vacuum_db;";
101093 }else{
101094 zSql = "ATTACH '' AS vacuum_db;";
101096 rc = execSql(db, pzErrMsg, zSql);
101097 if( db->nDb>nDb ){
101098 pDb = &db->aDb[db->nDb-1];
101099 assert( strcmp(pDb->zName,"vacuum_db")==0 );
101101 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101102 pTemp = db->aDb[db->nDb-1].pBt;
101104 /* The call to execSql() to attach the temp database has left the file
101105 ** locked (as there was more than one active statement when the transaction
101106 ** to read the schema was concluded. Unlock it here so that this doesn't
101107 ** cause problems for the call to BtreeSetPageSize() below. */
101108 sqlite3BtreeCommit(pTemp);
101110 nRes = sqlite3BtreeGetReserve(pMain);
101112 /* A VACUUM cannot change the pagesize of an encrypted database. */
101113 #ifdef SQLITE_HAS_CODEC
101114 if( db->nextPagesize ){
101115 extern void sqlite3CodecGetKey(sqlite3*, int, void**, int*);
101116 int nKey;
101117 char *zKey;
101118 sqlite3CodecGetKey(db, 0, (void**)&zKey, &nKey);
101119 if( nKey ) db->nextPagesize = 0;
101121 #endif
101123 /* Do not attempt to change the page size for a WAL database */
101124 if( sqlite3PagerGetJournalMode(sqlite3BtreePager(pMain))
101125 ==PAGER_JOURNALMODE_WAL ){
101126 db->nextPagesize = 0;
101129 if( sqlite3BtreeSetPageSize(pTemp, sqlite3BtreeGetPageSize(pMain), nRes, 0)
101130 || (!isMemDb && sqlite3BtreeSetPageSize(pTemp, db->nextPagesize, nRes, 0))
101131 || NEVER(db->mallocFailed)
101133 rc = SQLITE_NOMEM;
101134 goto end_of_vacuum;
101136 rc = execSql(db, pzErrMsg, "PRAGMA vacuum_db.synchronous=OFF");
101137 if( rc!=SQLITE_OK ){
101138 goto end_of_vacuum;
101141 #ifndef SQLITE_OMIT_AUTOVACUUM
101142 sqlite3BtreeSetAutoVacuum(pTemp, db->nextAutovac>=0 ? db->nextAutovac :
101143 sqlite3BtreeGetAutoVacuum(pMain));
101144 #endif
101146 /* Begin a transaction */
101147 rc = execSql(db, pzErrMsg, "BEGIN EXCLUSIVE;");
101148 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101150 /* Query the schema of the main database. Create a mirror schema
101151 ** in the temporary database.
101153 rc = execExecSql(db, pzErrMsg,
101154 "SELECT 'CREATE TABLE vacuum_db.' || substr(sql,14) "
101155 " FROM sqlite_master WHERE type='table' AND name!='sqlite_sequence'"
101156 " AND rootpage>0"
101158 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101159 rc = execExecSql(db, pzErrMsg,
101160 "SELECT 'CREATE INDEX vacuum_db.' || substr(sql,14)"
101161 " FROM sqlite_master WHERE sql LIKE 'CREATE INDEX %' ");
101162 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101163 rc = execExecSql(db, pzErrMsg,
101164 "SELECT 'CREATE UNIQUE INDEX vacuum_db.' || substr(sql,21) "
101165 " FROM sqlite_master WHERE sql LIKE 'CREATE UNIQUE INDEX %'");
101166 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101168 /* Loop through the tables in the main database. For each, do
101169 ** an "INSERT INTO vacuum_db.xxx SELECT * FROM main.xxx;" to copy
101170 ** the contents to the temporary database.
101172 rc = execExecSql(db, pzErrMsg,
101173 "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
101174 "|| ' SELECT * FROM main.' || quote(name) || ';'"
101175 "FROM main.sqlite_master "
101176 "WHERE type = 'table' AND name!='sqlite_sequence' "
101177 " AND rootpage>0"
101179 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101181 /* Copy over the sequence table
101183 rc = execExecSql(db, pzErrMsg,
101184 "SELECT 'DELETE FROM vacuum_db.' || quote(name) || ';' "
101185 "FROM vacuum_db.sqlite_master WHERE name='sqlite_sequence' "
101187 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101188 rc = execExecSql(db, pzErrMsg,
101189 "SELECT 'INSERT INTO vacuum_db.' || quote(name) "
101190 "|| ' SELECT * FROM main.' || quote(name) || ';' "
101191 "FROM vacuum_db.sqlite_master WHERE name=='sqlite_sequence';"
101193 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101196 /* Copy the triggers, views, and virtual tables from the main database
101197 ** over to the temporary database. None of these objects has any
101198 ** associated storage, so all we have to do is copy their entries
101199 ** from the SQLITE_MASTER table.
101201 rc = execSql(db, pzErrMsg,
101202 "INSERT INTO vacuum_db.sqlite_master "
101203 " SELECT type, name, tbl_name, rootpage, sql"
101204 " FROM main.sqlite_master"
101205 " WHERE type='view' OR type='trigger'"
101206 " OR (type='table' AND rootpage=0)"
101208 if( rc ) goto end_of_vacuum;
101210 /* At this point, there is a write transaction open on both the
101211 ** vacuum database and the main database. Assuming no error occurs,
101212 ** both transactions are closed by this block - the main database
101213 ** transaction by sqlite3BtreeCopyFile() and the other by an explicit
101214 ** call to sqlite3BtreeCommit().
101217 u32 meta;
101218 int i;
101220 /* This array determines which meta meta values are preserved in the
101221 ** vacuum. Even entries are the meta value number and odd entries
101222 ** are an increment to apply to the meta value after the vacuum.
101223 ** The increment is used to increase the schema cookie so that other
101224 ** connections to the same database will know to reread the schema.
101226 static const unsigned char aCopy[] = {
101227 BTREE_SCHEMA_VERSION, 1, /* Add one to the old schema cookie */
101228 BTREE_DEFAULT_CACHE_SIZE, 0, /* Preserve the default page cache size */
101229 BTREE_TEXT_ENCODING, 0, /* Preserve the text encoding */
101230 BTREE_USER_VERSION, 0, /* Preserve the user version */
101233 assert( 1==sqlite3BtreeIsInTrans(pTemp) );
101234 assert( 1==sqlite3BtreeIsInTrans(pMain) );
101236 /* Copy Btree meta values */
101237 for(i=0; i<ArraySize(aCopy); i+=2){
101238 /* GetMeta() and UpdateMeta() cannot fail in this context because
101239 ** we already have page 1 loaded into cache and marked dirty. */
101240 sqlite3BtreeGetMeta(pMain, aCopy[i], &meta);
101241 rc = sqlite3BtreeUpdateMeta(pTemp, aCopy[i], meta+aCopy[i+1]);
101242 if( NEVER(rc!=SQLITE_OK) ) goto end_of_vacuum;
101245 rc = sqlite3BtreeCopyFile(pMain, pTemp);
101246 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101247 rc = sqlite3BtreeCommit(pTemp);
101248 if( rc!=SQLITE_OK ) goto end_of_vacuum;
101249 #ifndef SQLITE_OMIT_AUTOVACUUM
101250 sqlite3BtreeSetAutoVacuum(pMain, sqlite3BtreeGetAutoVacuum(pTemp));
101251 #endif
101254 assert( rc==SQLITE_OK );
101255 rc = sqlite3BtreeSetPageSize(pMain, sqlite3BtreeGetPageSize(pTemp), nRes,1);
101257 end_of_vacuum:
101258 /* Restore the original value of db->flags */
101259 db->flags = saved_flags;
101260 db->nChange = saved_nChange;
101261 db->nTotalChange = saved_nTotalChange;
101262 db->xTrace = saved_xTrace;
101263 sqlite3BtreeSetPageSize(pMain, -1, -1, 1);
101265 /* Currently there is an SQL level transaction open on the vacuum
101266 ** database. No locks are held on any other files (since the main file
101267 ** was committed at the btree level). So it safe to end the transaction
101268 ** by manually setting the autoCommit flag to true and detaching the
101269 ** vacuum database. The vacuum_db journal file is deleted when the pager
101270 ** is closed by the DETACH.
101272 db->autoCommit = 1;
101274 if( pDb ){
101275 sqlite3BtreeClose(pDb->pBt);
101276 pDb->pBt = 0;
101277 pDb->pSchema = 0;
101280 /* This both clears the schemas and reduces the size of the db->aDb[]
101281 ** array. */
101282 sqlite3ResetInternalSchema(db, -1);
101284 return rc;
101287 #endif /* SQLITE_OMIT_VACUUM && SQLITE_OMIT_ATTACH */
101289 /************** End of vacuum.c **********************************************/
101290 /************** Begin file vtab.c ********************************************/
101292 ** 2006 June 10
101294 ** The author disclaims copyright to this source code. In place of
101295 ** a legal notice, here is a blessing:
101297 ** May you do good and not evil.
101298 ** May you find forgiveness for yourself and forgive others.
101299 ** May you share freely, never taking more than you give.
101301 *************************************************************************
101302 ** This file contains code used to help implement virtual tables.
101304 #ifndef SQLITE_OMIT_VIRTUALTABLE
101307 ** Before a virtual table xCreate() or xConnect() method is invoked, the
101308 ** sqlite3.pVtabCtx member variable is set to point to an instance of
101309 ** this struct allocated on the stack. It is used by the implementation of
101310 ** the sqlite3_declare_vtab() and sqlite3_vtab_config() APIs, both of which
101311 ** are invoked only from within xCreate and xConnect methods.
101313 struct VtabCtx {
101314 Table *pTab;
101315 VTable *pVTable;
101319 ** The actual function that does the work of creating a new module.
101320 ** This function implements the sqlite3_create_module() and
101321 ** sqlite3_create_module_v2() interfaces.
101323 static int createModule(
101324 sqlite3 *db, /* Database in which module is registered */
101325 const char *zName, /* Name assigned to this module */
101326 const sqlite3_module *pModule, /* The definition of the module */
101327 void *pAux, /* Context pointer for xCreate/xConnect */
101328 void (*xDestroy)(void *) /* Module destructor function */
101330 int rc, nName;
101331 Module *pMod;
101333 sqlite3_mutex_enter(db->mutex);
101334 nName = sqlite3Strlen30(zName);
101335 pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1);
101336 if( pMod ){
101337 Module *pDel;
101338 char *zCopy = (char *)(&pMod[1]);
101339 memcpy(zCopy, zName, nName+1);
101340 pMod->zName = zCopy;
101341 pMod->pModule = pModule;
101342 pMod->pAux = pAux;
101343 pMod->xDestroy = xDestroy;
101344 pDel = (Module *)sqlite3HashInsert(&db->aModule, zCopy, nName, (void*)pMod);
101345 if( pDel && pDel->xDestroy ){
101346 sqlite3ResetInternalSchema(db, -1);
101347 pDel->xDestroy(pDel->pAux);
101349 sqlite3DbFree(db, pDel);
101350 if( pDel==pMod ){
101351 db->mallocFailed = 1;
101353 }else if( xDestroy ){
101354 xDestroy(pAux);
101356 rc = sqlite3ApiExit(db, SQLITE_OK);
101357 sqlite3_mutex_leave(db->mutex);
101358 return rc;
101363 ** External API function used to create a new virtual-table module.
101365 SQLITE_API int sqlite3_create_module(
101366 sqlite3 *db, /* Database in which module is registered */
101367 const char *zName, /* Name assigned to this module */
101368 const sqlite3_module *pModule, /* The definition of the module */
101369 void *pAux /* Context pointer for xCreate/xConnect */
101371 return createModule(db, zName, pModule, pAux, 0);
101375 ** External API function used to create a new virtual-table module.
101377 SQLITE_API int sqlite3_create_module_v2(
101378 sqlite3 *db, /* Database in which module is registered */
101379 const char *zName, /* Name assigned to this module */
101380 const sqlite3_module *pModule, /* The definition of the module */
101381 void *pAux, /* Context pointer for xCreate/xConnect */
101382 void (*xDestroy)(void *) /* Module destructor function */
101384 return createModule(db, zName, pModule, pAux, xDestroy);
101388 ** Lock the virtual table so that it cannot be disconnected.
101389 ** Locks nest. Every lock should have a corresponding unlock.
101390 ** If an unlock is omitted, resources leaks will occur.
101392 ** If a disconnect is attempted while a virtual table is locked,
101393 ** the disconnect is deferred until all locks have been removed.
101395 SQLITE_PRIVATE void sqlite3VtabLock(VTable *pVTab){
101396 pVTab->nRef++;
101401 ** pTab is a pointer to a Table structure representing a virtual-table.
101402 ** Return a pointer to the VTable object used by connection db to access
101403 ** this virtual-table, if one has been created, or NULL otherwise.
101405 SQLITE_PRIVATE VTable *sqlite3GetVTable(sqlite3 *db, Table *pTab){
101406 VTable *pVtab;
101407 assert( IsVirtual(pTab) );
101408 for(pVtab=pTab->pVTable; pVtab && pVtab->db!=db; pVtab=pVtab->pNext);
101409 return pVtab;
101413 ** Decrement the ref-count on a virtual table object. When the ref-count
101414 ** reaches zero, call the xDisconnect() method to delete the object.
101416 SQLITE_PRIVATE void sqlite3VtabUnlock(VTable *pVTab){
101417 sqlite3 *db = pVTab->db;
101419 assert( db );
101420 assert( pVTab->nRef>0 );
101421 assert( sqlite3SafetyCheckOk(db) );
101423 pVTab->nRef--;
101424 if( pVTab->nRef==0 ){
101425 sqlite3_vtab *p = pVTab->pVtab;
101426 if( p ){
101427 p->pModule->xDisconnect(p);
101429 sqlite3DbFree(db, pVTab);
101434 ** Table p is a virtual table. This function moves all elements in the
101435 ** p->pVTable list to the sqlite3.pDisconnect lists of their associated
101436 ** database connections to be disconnected at the next opportunity.
101437 ** Except, if argument db is not NULL, then the entry associated with
101438 ** connection db is left in the p->pVTable list.
101440 static VTable *vtabDisconnectAll(sqlite3 *db, Table *p){
101441 VTable *pRet = 0;
101442 VTable *pVTable = p->pVTable;
101443 p->pVTable = 0;
101445 /* Assert that the mutex (if any) associated with the BtShared database
101446 ** that contains table p is held by the caller. See header comments
101447 ** above function sqlite3VtabUnlockList() for an explanation of why
101448 ** this makes it safe to access the sqlite3.pDisconnect list of any
101449 ** database connection that may have an entry in the p->pVTable list.
101451 assert( db==0 || sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
101453 while( pVTable ){
101454 sqlite3 *db2 = pVTable->db;
101455 VTable *pNext = pVTable->pNext;
101456 assert( db2 );
101457 if( db2==db ){
101458 pRet = pVTable;
101459 p->pVTable = pRet;
101460 pRet->pNext = 0;
101461 }else{
101462 pVTable->pNext = db2->pDisconnect;
101463 db2->pDisconnect = pVTable;
101465 pVTable = pNext;
101468 assert( !db || pRet );
101469 return pRet;
101474 ** Disconnect all the virtual table objects in the sqlite3.pDisconnect list.
101476 ** This function may only be called when the mutexes associated with all
101477 ** shared b-tree databases opened using connection db are held by the
101478 ** caller. This is done to protect the sqlite3.pDisconnect list. The
101479 ** sqlite3.pDisconnect list is accessed only as follows:
101481 ** 1) By this function. In this case, all BtShared mutexes and the mutex
101482 ** associated with the database handle itself must be held.
101484 ** 2) By function vtabDisconnectAll(), when it adds a VTable entry to
101485 ** the sqlite3.pDisconnect list. In this case either the BtShared mutex
101486 ** associated with the database the virtual table is stored in is held
101487 ** or, if the virtual table is stored in a non-sharable database, then
101488 ** the database handle mutex is held.
101490 ** As a result, a sqlite3.pDisconnect cannot be accessed simultaneously
101491 ** by multiple threads. It is thread-safe.
101493 SQLITE_PRIVATE void sqlite3VtabUnlockList(sqlite3 *db){
101494 VTable *p = db->pDisconnect;
101495 db->pDisconnect = 0;
101497 assert( sqlite3BtreeHoldsAllMutexes(db) );
101498 assert( sqlite3_mutex_held(db->mutex) );
101500 if( p ){
101501 sqlite3ExpirePreparedStatements(db);
101503 VTable *pNext = p->pNext;
101504 sqlite3VtabUnlock(p);
101505 p = pNext;
101506 }while( p );
101511 ** Clear any and all virtual-table information from the Table record.
101512 ** This routine is called, for example, just before deleting the Table
101513 ** record.
101515 ** Since it is a virtual-table, the Table structure contains a pointer
101516 ** to the head of a linked list of VTable structures. Each VTable
101517 ** structure is associated with a single sqlite3* user of the schema.
101518 ** The reference count of the VTable structure associated with database
101519 ** connection db is decremented immediately (which may lead to the
101520 ** structure being xDisconnected and free). Any other VTable structures
101521 ** in the list are moved to the sqlite3.pDisconnect list of the associated
101522 ** database connection.
101524 SQLITE_PRIVATE void sqlite3VtabClear(sqlite3 *db, Table *p){
101525 if( !db || db->pnBytesFreed==0 ) vtabDisconnectAll(0, p);
101526 if( p->azModuleArg ){
101527 int i;
101528 for(i=0; i<p->nModuleArg; i++){
101529 sqlite3DbFree(db, p->azModuleArg[i]);
101531 sqlite3DbFree(db, p->azModuleArg);
101536 ** Add a new module argument to pTable->azModuleArg[].
101537 ** The string is not copied - the pointer is stored. The
101538 ** string will be freed automatically when the table is
101539 ** deleted.
101541 static void addModuleArgument(sqlite3 *db, Table *pTable, char *zArg){
101542 int i = pTable->nModuleArg++;
101543 int nBytes = sizeof(char *)*(1+pTable->nModuleArg);
101544 char **azModuleArg;
101545 azModuleArg = sqlite3DbRealloc(db, pTable->azModuleArg, nBytes);
101546 if( azModuleArg==0 ){
101547 int j;
101548 for(j=0; j<i; j++){
101549 sqlite3DbFree(db, pTable->azModuleArg[j]);
101551 sqlite3DbFree(db, zArg);
101552 sqlite3DbFree(db, pTable->azModuleArg);
101553 pTable->nModuleArg = 0;
101554 }else{
101555 azModuleArg[i] = zArg;
101556 azModuleArg[i+1] = 0;
101558 pTable->azModuleArg = azModuleArg;
101562 ** The parser calls this routine when it first sees a CREATE VIRTUAL TABLE
101563 ** statement. The module name has been parsed, but the optional list
101564 ** of parameters that follow the module name are still pending.
101566 SQLITE_PRIVATE void sqlite3VtabBeginParse(
101567 Parse *pParse, /* Parsing context */
101568 Token *pName1, /* Name of new table, or database name */
101569 Token *pName2, /* Name of new table or NULL */
101570 Token *pModuleName /* Name of the module for the virtual table */
101572 int iDb; /* The database the table is being created in */
101573 Table *pTable; /* The new virtual table */
101574 sqlite3 *db; /* Database connection */
101576 sqlite3StartTable(pParse, pName1, pName2, 0, 0, 1, 0);
101577 pTable = pParse->pNewTable;
101578 if( pTable==0 ) return;
101579 assert( 0==pTable->pIndex );
101581 db = pParse->db;
101582 iDb = sqlite3SchemaToIndex(db, pTable->pSchema);
101583 assert( iDb>=0 );
101585 pTable->tabFlags |= TF_Virtual;
101586 pTable->nModuleArg = 0;
101587 addModuleArgument(db, pTable, sqlite3NameFromToken(db, pModuleName));
101588 addModuleArgument(db, pTable, sqlite3DbStrDup(db, db->aDb[iDb].zName));
101589 addModuleArgument(db, pTable, sqlite3DbStrDup(db, pTable->zName));
101590 pParse->sNameToken.n = (int)(&pModuleName->z[pModuleName->n] - pName1->z);
101592 #ifndef SQLITE_OMIT_AUTHORIZATION
101593 /* Creating a virtual table invokes the authorization callback twice.
101594 ** The first invocation, to obtain permission to INSERT a row into the
101595 ** sqlite_master table, has already been made by sqlite3StartTable().
101596 ** The second call, to obtain permission to create the table, is made now.
101598 if( pTable->azModuleArg ){
101599 sqlite3AuthCheck(pParse, SQLITE_CREATE_VTABLE, pTable->zName,
101600 pTable->azModuleArg[0], pParse->db->aDb[iDb].zName);
101602 #endif
101606 ** This routine takes the module argument that has been accumulating
101607 ** in pParse->zArg[] and appends it to the list of arguments on the
101608 ** virtual table currently under construction in pParse->pTable.
101610 static void addArgumentToVtab(Parse *pParse){
101611 if( pParse->sArg.z && ALWAYS(pParse->pNewTable) ){
101612 const char *z = (const char*)pParse->sArg.z;
101613 int n = pParse->sArg.n;
101614 sqlite3 *db = pParse->db;
101615 addModuleArgument(db, pParse->pNewTable, sqlite3DbStrNDup(db, z, n));
101620 ** The parser calls this routine after the CREATE VIRTUAL TABLE statement
101621 ** has been completely parsed.
101623 SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
101624 Table *pTab = pParse->pNewTable; /* The table being constructed */
101625 sqlite3 *db = pParse->db; /* The database connection */
101627 if( pTab==0 ) return;
101628 addArgumentToVtab(pParse);
101629 pParse->sArg.z = 0;
101630 if( pTab->nModuleArg<1 ) return;
101632 /* If the CREATE VIRTUAL TABLE statement is being entered for the
101633 ** first time (in other words if the virtual table is actually being
101634 ** created now instead of just being read out of sqlite_master) then
101635 ** do additional initialization work and store the statement text
101636 ** in the sqlite_master table.
101638 if( !db->init.busy ){
101639 char *zStmt;
101640 char *zWhere;
101641 int iDb;
101642 Vdbe *v;
101644 /* Compute the complete text of the CREATE VIRTUAL TABLE statement */
101645 if( pEnd ){
101646 pParse->sNameToken.n = (int)(pEnd->z - pParse->sNameToken.z) + pEnd->n;
101648 zStmt = sqlite3MPrintf(db, "CREATE VIRTUAL TABLE %T", &pParse->sNameToken);
101650 /* A slot for the record has already been allocated in the
101651 ** SQLITE_MASTER table. We just need to update that slot with all
101652 ** the information we've collected.
101654 ** The VM register number pParse->regRowid holds the rowid of an
101655 ** entry in the sqlite_master table tht was created for this vtab
101656 ** by sqlite3StartTable().
101658 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
101659 sqlite3NestedParse(pParse,
101660 "UPDATE %Q.%s "
101661 "SET type='table', name=%Q, tbl_name=%Q, rootpage=0, sql=%Q "
101662 "WHERE rowid=#%d",
101663 db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
101664 pTab->zName,
101665 pTab->zName,
101666 zStmt,
101667 pParse->regRowid
101669 sqlite3DbFree(db, zStmt);
101670 v = sqlite3GetVdbe(pParse);
101671 sqlite3ChangeCookie(pParse, iDb);
101673 sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
101674 zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName);
101675 sqlite3VdbeAddParseSchemaOp(v, iDb, zWhere);
101676 sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0,
101677 pTab->zName, sqlite3Strlen30(pTab->zName) + 1);
101680 /* If we are rereading the sqlite_master table create the in-memory
101681 ** record of the table. The xConnect() method is not called until
101682 ** the first time the virtual table is used in an SQL statement. This
101683 ** allows a schema that contains virtual tables to be loaded before
101684 ** the required virtual table implementations are registered. */
101685 else {
101686 Table *pOld;
101687 Schema *pSchema = pTab->pSchema;
101688 const char *zName = pTab->zName;
101689 int nName = sqlite3Strlen30(zName);
101690 assert( sqlite3SchemaMutexHeld(db, 0, pSchema) );
101691 pOld = sqlite3HashInsert(&pSchema->tblHash, zName, nName, pTab);
101692 if( pOld ){
101693 db->mallocFailed = 1;
101694 assert( pTab==pOld ); /* Malloc must have failed inside HashInsert() */
101695 return;
101697 pParse->pNewTable = 0;
101702 ** The parser calls this routine when it sees the first token
101703 ** of an argument to the module name in a CREATE VIRTUAL TABLE statement.
101705 SQLITE_PRIVATE void sqlite3VtabArgInit(Parse *pParse){
101706 addArgumentToVtab(pParse);
101707 pParse->sArg.z = 0;
101708 pParse->sArg.n = 0;
101712 ** The parser calls this routine for each token after the first token
101713 ** in an argument to the module name in a CREATE VIRTUAL TABLE statement.
101715 SQLITE_PRIVATE void sqlite3VtabArgExtend(Parse *pParse, Token *p){
101716 Token *pArg = &pParse->sArg;
101717 if( pArg->z==0 ){
101718 pArg->z = p->z;
101719 pArg->n = p->n;
101720 }else{
101721 assert(pArg->z < p->z);
101722 pArg->n = (int)(&p->z[p->n] - pArg->z);
101727 ** Invoke a virtual table constructor (either xCreate or xConnect). The
101728 ** pointer to the function to invoke is passed as the fourth parameter
101729 ** to this procedure.
101731 static int vtabCallConstructor(
101732 sqlite3 *db,
101733 Table *pTab,
101734 Module *pMod,
101735 int (*xConstruct)(sqlite3*,void*,int,const char*const*,sqlite3_vtab**,char**),
101736 char **pzErr
101738 VtabCtx sCtx;
101739 VTable *pVTable;
101740 int rc;
101741 const char *const*azArg = (const char *const*)pTab->azModuleArg;
101742 int nArg = pTab->nModuleArg;
101743 char *zErr = 0;
101744 char *zModuleName = sqlite3MPrintf(db, "%s", pTab->zName);
101746 if( !zModuleName ){
101747 return SQLITE_NOMEM;
101750 pVTable = sqlite3DbMallocZero(db, sizeof(VTable));
101751 if( !pVTable ){
101752 sqlite3DbFree(db, zModuleName);
101753 return SQLITE_NOMEM;
101755 pVTable->db = db;
101756 pVTable->pMod = pMod;
101758 /* Invoke the virtual table constructor */
101759 assert( &db->pVtabCtx );
101760 assert( xConstruct );
101761 sCtx.pTab = pTab;
101762 sCtx.pVTable = pVTable;
101763 db->pVtabCtx = &sCtx;
101764 rc = xConstruct(db, pMod->pAux, nArg, azArg, &pVTable->pVtab, &zErr);
101765 db->pVtabCtx = 0;
101766 if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
101768 if( SQLITE_OK!=rc ){
101769 if( zErr==0 ){
101770 *pzErr = sqlite3MPrintf(db, "vtable constructor failed: %s", zModuleName);
101771 }else {
101772 *pzErr = sqlite3MPrintf(db, "%s", zErr);
101773 sqlite3_free(zErr);
101775 sqlite3DbFree(db, pVTable);
101776 }else if( ALWAYS(pVTable->pVtab) ){
101777 /* Justification of ALWAYS(): A correct vtab constructor must allocate
101778 ** the sqlite3_vtab object if successful. */
101779 pVTable->pVtab->pModule = pMod->pModule;
101780 pVTable->nRef = 1;
101781 if( sCtx.pTab ){
101782 const char *zFormat = "vtable constructor did not declare schema: %s";
101783 *pzErr = sqlite3MPrintf(db, zFormat, pTab->zName);
101784 sqlite3VtabUnlock(pVTable);
101785 rc = SQLITE_ERROR;
101786 }else{
101787 int iCol;
101788 /* If everything went according to plan, link the new VTable structure
101789 ** into the linked list headed by pTab->pVTable. Then loop through the
101790 ** columns of the table to see if any of them contain the token "hidden".
101791 ** If so, set the Column.isHidden flag and remove the token from
101792 ** the type string. */
101793 pVTable->pNext = pTab->pVTable;
101794 pTab->pVTable = pVTable;
101796 for(iCol=0; iCol<pTab->nCol; iCol++){
101797 char *zType = pTab->aCol[iCol].zType;
101798 int nType;
101799 int i = 0;
101800 if( !zType ) continue;
101801 nType = sqlite3Strlen30(zType);
101802 if( sqlite3StrNICmp("hidden", zType, 6)||(zType[6] && zType[6]!=' ') ){
101803 for(i=0; i<nType; i++){
101804 if( (0==sqlite3StrNICmp(" hidden", &zType[i], 7))
101805 && (zType[i+7]=='\0' || zType[i+7]==' ')
101808 break;
101812 if( i<nType ){
101813 int j;
101814 int nDel = 6 + (zType[i+6] ? 1 : 0);
101815 for(j=i; (j+nDel)<=nType; j++){
101816 zType[j] = zType[j+nDel];
101818 if( zType[i]=='\0' && i>0 ){
101819 assert(zType[i-1]==' ');
101820 zType[i-1] = '\0';
101822 pTab->aCol[iCol].isHidden = 1;
101828 sqlite3DbFree(db, zModuleName);
101829 return rc;
101833 ** This function is invoked by the parser to call the xConnect() method
101834 ** of the virtual table pTab. If an error occurs, an error code is returned
101835 ** and an error left in pParse.
101837 ** This call is a no-op if table pTab is not a virtual table.
101839 SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
101840 sqlite3 *db = pParse->db;
101841 const char *zMod;
101842 Module *pMod;
101843 int rc;
101845 assert( pTab );
101846 if( (pTab->tabFlags & TF_Virtual)==0 || sqlite3GetVTable(db, pTab) ){
101847 return SQLITE_OK;
101850 /* Locate the required virtual table module */
101851 zMod = pTab->azModuleArg[0];
101852 pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
101854 if( !pMod ){
101855 const char *zModule = pTab->azModuleArg[0];
101856 sqlite3ErrorMsg(pParse, "no such module: %s", zModule);
101857 rc = SQLITE_ERROR;
101858 }else{
101859 char *zErr = 0;
101860 rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xConnect, &zErr);
101861 if( rc!=SQLITE_OK ){
101862 sqlite3ErrorMsg(pParse, "%s", zErr);
101864 sqlite3DbFree(db, zErr);
101867 return rc;
101870 ** Grow the db->aVTrans[] array so that there is room for at least one
101871 ** more v-table. Return SQLITE_NOMEM if a malloc fails, or SQLITE_OK otherwise.
101873 static int growVTrans(sqlite3 *db){
101874 const int ARRAY_INCR = 5;
101876 /* Grow the sqlite3.aVTrans array if required */
101877 if( (db->nVTrans%ARRAY_INCR)==0 ){
101878 VTable **aVTrans;
101879 int nBytes = sizeof(sqlite3_vtab *) * (db->nVTrans + ARRAY_INCR);
101880 aVTrans = sqlite3DbRealloc(db, (void *)db->aVTrans, nBytes);
101881 if( !aVTrans ){
101882 return SQLITE_NOMEM;
101884 memset(&aVTrans[db->nVTrans], 0, sizeof(sqlite3_vtab *)*ARRAY_INCR);
101885 db->aVTrans = aVTrans;
101888 return SQLITE_OK;
101892 ** Add the virtual table pVTab to the array sqlite3.aVTrans[]. Space should
101893 ** have already been reserved using growVTrans().
101895 static void addToVTrans(sqlite3 *db, VTable *pVTab){
101896 /* Add pVtab to the end of sqlite3.aVTrans */
101897 db->aVTrans[db->nVTrans++] = pVTab;
101898 sqlite3VtabLock(pVTab);
101902 ** This function is invoked by the vdbe to call the xCreate method
101903 ** of the virtual table named zTab in database iDb.
101905 ** If an error occurs, *pzErr is set to point an an English language
101906 ** description of the error and an SQLITE_XXX error code is returned.
101907 ** In this case the caller must call sqlite3DbFree(db, ) on *pzErr.
101909 SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab, char **pzErr){
101910 int rc = SQLITE_OK;
101911 Table *pTab;
101912 Module *pMod;
101913 const char *zMod;
101915 pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
101916 assert( pTab && (pTab->tabFlags & TF_Virtual)!=0 && !pTab->pVTable );
101918 /* Locate the required virtual table module */
101919 zMod = pTab->azModuleArg[0];
101920 pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
101922 /* If the module has been registered and includes a Create method,
101923 ** invoke it now. If the module has not been registered, return an
101924 ** error. Otherwise, do nothing.
101926 if( !pMod ){
101927 *pzErr = sqlite3MPrintf(db, "no such module: %s", zMod);
101928 rc = SQLITE_ERROR;
101929 }else{
101930 rc = vtabCallConstructor(db, pTab, pMod, pMod->pModule->xCreate, pzErr);
101933 /* Justification of ALWAYS(): The xConstructor method is required to
101934 ** create a valid sqlite3_vtab if it returns SQLITE_OK. */
101935 if( rc==SQLITE_OK && ALWAYS(sqlite3GetVTable(db, pTab)) ){
101936 rc = growVTrans(db);
101937 if( rc==SQLITE_OK ){
101938 addToVTrans(db, sqlite3GetVTable(db, pTab));
101942 return rc;
101946 ** This function is used to set the schema of a virtual table. It is only
101947 ** valid to call this function from within the xCreate() or xConnect() of a
101948 ** virtual table module.
101950 SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
101951 Parse *pParse;
101953 int rc = SQLITE_OK;
101954 Table *pTab;
101955 char *zErr = 0;
101957 sqlite3_mutex_enter(db->mutex);
101958 if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){
101959 sqlite3Error(db, SQLITE_MISUSE, 0);
101960 sqlite3_mutex_leave(db->mutex);
101961 return SQLITE_MISUSE_BKPT;
101963 assert( (pTab->tabFlags & TF_Virtual)!=0 );
101965 pParse = sqlite3StackAllocZero(db, sizeof(*pParse));
101966 if( pParse==0 ){
101967 rc = SQLITE_NOMEM;
101968 }else{
101969 pParse->declareVtab = 1;
101970 pParse->db = db;
101971 pParse->nQueryLoop = 1;
101973 if( SQLITE_OK==sqlite3RunParser(pParse, zCreateTable, &zErr)
101974 && pParse->pNewTable
101975 && !db->mallocFailed
101976 && !pParse->pNewTable->pSelect
101977 && (pParse->pNewTable->tabFlags & TF_Virtual)==0
101979 if( !pTab->aCol ){
101980 pTab->aCol = pParse->pNewTable->aCol;
101981 pTab->nCol = pParse->pNewTable->nCol;
101982 pParse->pNewTable->nCol = 0;
101983 pParse->pNewTable->aCol = 0;
101985 db->pVtabCtx->pTab = 0;
101986 }else{
101987 sqlite3Error(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
101988 sqlite3DbFree(db, zErr);
101989 rc = SQLITE_ERROR;
101991 pParse->declareVtab = 0;
101993 if( pParse->pVdbe ){
101994 sqlite3VdbeFinalize(pParse->pVdbe);
101996 sqlite3DeleteTable(db, pParse->pNewTable);
101997 sqlite3StackFree(db, pParse);
102000 assert( (rc&0xff)==rc );
102001 rc = sqlite3ApiExit(db, rc);
102002 sqlite3_mutex_leave(db->mutex);
102003 return rc;
102007 ** This function is invoked by the vdbe to call the xDestroy method
102008 ** of the virtual table named zTab in database iDb. This occurs
102009 ** when a DROP TABLE is mentioned.
102011 ** This call is a no-op if zTab is not a virtual table.
102013 SQLITE_PRIVATE int sqlite3VtabCallDestroy(sqlite3 *db, int iDb, const char *zTab){
102014 int rc = SQLITE_OK;
102015 Table *pTab;
102017 pTab = sqlite3FindTable(db, zTab, db->aDb[iDb].zName);
102018 if( ALWAYS(pTab!=0 && pTab->pVTable!=0) ){
102019 VTable *p = vtabDisconnectAll(db, pTab);
102021 assert( rc==SQLITE_OK );
102022 rc = p->pMod->pModule->xDestroy(p->pVtab);
102024 /* Remove the sqlite3_vtab* from the aVTrans[] array, if applicable */
102025 if( rc==SQLITE_OK ){
102026 assert( pTab->pVTable==p && p->pNext==0 );
102027 p->pVtab = 0;
102028 pTab->pVTable = 0;
102029 sqlite3VtabUnlock(p);
102033 return rc;
102037 ** This function invokes either the xRollback or xCommit method
102038 ** of each of the virtual tables in the sqlite3.aVTrans array. The method
102039 ** called is identified by the second argument, "offset", which is
102040 ** the offset of the method to call in the sqlite3_module structure.
102042 ** The array is cleared after invoking the callbacks.
102044 static void callFinaliser(sqlite3 *db, int offset){
102045 int i;
102046 if( db->aVTrans ){
102047 for(i=0; i<db->nVTrans; i++){
102048 VTable *pVTab = db->aVTrans[i];
102049 sqlite3_vtab *p = pVTab->pVtab;
102050 if( p ){
102051 int (*x)(sqlite3_vtab *);
102052 x = *(int (**)(sqlite3_vtab *))((char *)p->pModule + offset);
102053 if( x ) x(p);
102055 pVTab->iSavepoint = 0;
102056 sqlite3VtabUnlock(pVTab);
102058 sqlite3DbFree(db, db->aVTrans);
102059 db->nVTrans = 0;
102060 db->aVTrans = 0;
102065 ** Invoke the xSync method of all virtual tables in the sqlite3.aVTrans
102066 ** array. Return the error code for the first error that occurs, or
102067 ** SQLITE_OK if all xSync operations are successful.
102069 ** Set *pzErrmsg to point to a buffer that should be released using
102070 ** sqlite3DbFree() containing an error message, if one is available.
102072 SQLITE_PRIVATE int sqlite3VtabSync(sqlite3 *db, char **pzErrmsg){
102073 int i;
102074 int rc = SQLITE_OK;
102075 VTable **aVTrans = db->aVTrans;
102077 db->aVTrans = 0;
102078 for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){
102079 int (*x)(sqlite3_vtab *);
102080 sqlite3_vtab *pVtab = aVTrans[i]->pVtab;
102081 if( pVtab && (x = pVtab->pModule->xSync)!=0 ){
102082 rc = x(pVtab);
102083 sqlite3DbFree(db, *pzErrmsg);
102084 *pzErrmsg = sqlite3DbStrDup(db, pVtab->zErrMsg);
102085 sqlite3_free(pVtab->zErrMsg);
102088 db->aVTrans = aVTrans;
102089 return rc;
102093 ** Invoke the xRollback method of all virtual tables in the
102094 ** sqlite3.aVTrans array. Then clear the array itself.
102096 SQLITE_PRIVATE int sqlite3VtabRollback(sqlite3 *db){
102097 callFinaliser(db, offsetof(sqlite3_module,xRollback));
102098 return SQLITE_OK;
102102 ** Invoke the xCommit method of all virtual tables in the
102103 ** sqlite3.aVTrans array. Then clear the array itself.
102105 SQLITE_PRIVATE int sqlite3VtabCommit(sqlite3 *db){
102106 callFinaliser(db, offsetof(sqlite3_module,xCommit));
102107 return SQLITE_OK;
102111 ** If the virtual table pVtab supports the transaction interface
102112 ** (xBegin/xRollback/xCommit and optionally xSync) and a transaction is
102113 ** not currently open, invoke the xBegin method now.
102115 ** If the xBegin call is successful, place the sqlite3_vtab pointer
102116 ** in the sqlite3.aVTrans array.
102118 SQLITE_PRIVATE int sqlite3VtabBegin(sqlite3 *db, VTable *pVTab){
102119 int rc = SQLITE_OK;
102120 const sqlite3_module *pModule;
102122 /* Special case: If db->aVTrans is NULL and db->nVTrans is greater
102123 ** than zero, then this function is being called from within a
102124 ** virtual module xSync() callback. It is illegal to write to
102125 ** virtual module tables in this case, so return SQLITE_LOCKED.
102127 if( sqlite3VtabInSync(db) ){
102128 return SQLITE_LOCKED;
102130 if( !pVTab ){
102131 return SQLITE_OK;
102133 pModule = pVTab->pVtab->pModule;
102135 if( pModule->xBegin ){
102136 int i;
102138 /* If pVtab is already in the aVTrans array, return early */
102139 for(i=0; i<db->nVTrans; i++){
102140 if( db->aVTrans[i]==pVTab ){
102141 return SQLITE_OK;
102145 /* Invoke the xBegin method. If successful, add the vtab to the
102146 ** sqlite3.aVTrans[] array. */
102147 rc = growVTrans(db);
102148 if( rc==SQLITE_OK ){
102149 rc = pModule->xBegin(pVTab->pVtab);
102150 if( rc==SQLITE_OK ){
102151 addToVTrans(db, pVTab);
102155 return rc;
102159 ** Invoke either the xSavepoint, xRollbackTo or xRelease method of all
102160 ** virtual tables that currently have an open transaction. Pass iSavepoint
102161 ** as the second argument to the virtual table method invoked.
102163 ** If op is SAVEPOINT_BEGIN, the xSavepoint method is invoked. If it is
102164 ** SAVEPOINT_ROLLBACK, the xRollbackTo method. Otherwise, if op is
102165 ** SAVEPOINT_RELEASE, then the xRelease method of each virtual table with
102166 ** an open transaction is invoked.
102168 ** If any virtual table method returns an error code other than SQLITE_OK,
102169 ** processing is abandoned and the error returned to the caller of this
102170 ** function immediately. If all calls to virtual table methods are successful,
102171 ** SQLITE_OK is returned.
102173 SQLITE_PRIVATE int sqlite3VtabSavepoint(sqlite3 *db, int op, int iSavepoint){
102174 int rc = SQLITE_OK;
102176 assert( op==SAVEPOINT_RELEASE||op==SAVEPOINT_ROLLBACK||op==SAVEPOINT_BEGIN );
102177 assert( iSavepoint>=0 );
102178 if( db->aVTrans ){
102179 int i;
102180 for(i=0; rc==SQLITE_OK && i<db->nVTrans; i++){
102181 VTable *pVTab = db->aVTrans[i];
102182 const sqlite3_module *pMod = pVTab->pMod->pModule;
102183 if( pVTab->pVtab && pMod->iVersion>=2 ){
102184 int (*xMethod)(sqlite3_vtab *, int);
102185 switch( op ){
102186 case SAVEPOINT_BEGIN:
102187 xMethod = pMod->xSavepoint;
102188 pVTab->iSavepoint = iSavepoint+1;
102189 break;
102190 case SAVEPOINT_ROLLBACK:
102191 xMethod = pMod->xRollbackTo;
102192 break;
102193 default:
102194 xMethod = pMod->xRelease;
102195 break;
102197 if( xMethod && pVTab->iSavepoint>iSavepoint ){
102198 rc = xMethod(pVTab->pVtab, iSavepoint);
102203 return rc;
102207 ** The first parameter (pDef) is a function implementation. The
102208 ** second parameter (pExpr) is the first argument to this function.
102209 ** If pExpr is a column in a virtual table, then let the virtual
102210 ** table implementation have an opportunity to overload the function.
102212 ** This routine is used to allow virtual table implementations to
102213 ** overload MATCH, LIKE, GLOB, and REGEXP operators.
102215 ** Return either the pDef argument (indicating no change) or a
102216 ** new FuncDef structure that is marked as ephemeral using the
102217 ** SQLITE_FUNC_EPHEM flag.
102219 SQLITE_PRIVATE FuncDef *sqlite3VtabOverloadFunction(
102220 sqlite3 *db, /* Database connection for reporting malloc problems */
102221 FuncDef *pDef, /* Function to possibly overload */
102222 int nArg, /* Number of arguments to the function */
102223 Expr *pExpr /* First argument to the function */
102225 Table *pTab;
102226 sqlite3_vtab *pVtab;
102227 sqlite3_module *pMod;
102228 void (*xFunc)(sqlite3_context*,int,sqlite3_value**) = 0;
102229 void *pArg = 0;
102230 FuncDef *pNew;
102231 int rc = 0;
102232 char *zLowerName;
102233 unsigned char *z;
102236 /* Check to see the left operand is a column in a virtual table */
102237 if( NEVER(pExpr==0) ) return pDef;
102238 if( pExpr->op!=TK_COLUMN ) return pDef;
102239 pTab = pExpr->pTab;
102240 if( NEVER(pTab==0) ) return pDef;
102241 if( (pTab->tabFlags & TF_Virtual)==0 ) return pDef;
102242 pVtab = sqlite3GetVTable(db, pTab)->pVtab;
102243 assert( pVtab!=0 );
102244 assert( pVtab->pModule!=0 );
102245 pMod = (sqlite3_module *)pVtab->pModule;
102246 if( pMod->xFindFunction==0 ) return pDef;
102248 /* Call the xFindFunction method on the virtual table implementation
102249 ** to see if the implementation wants to overload this function
102251 zLowerName = sqlite3DbStrDup(db, pDef->zName);
102252 if( zLowerName ){
102253 for(z=(unsigned char*)zLowerName; *z; z++){
102254 *z = sqlite3UpperToLower[*z];
102256 rc = pMod->xFindFunction(pVtab, nArg, zLowerName, &xFunc, &pArg);
102257 sqlite3DbFree(db, zLowerName);
102259 if( rc==0 ){
102260 return pDef;
102263 /* Create a new ephemeral function definition for the overloaded
102264 ** function */
102265 pNew = sqlite3DbMallocZero(db, sizeof(*pNew)
102266 + sqlite3Strlen30(pDef->zName) + 1);
102267 if( pNew==0 ){
102268 return pDef;
102270 *pNew = *pDef;
102271 pNew->zName = (char *)&pNew[1];
102272 memcpy(pNew->zName, pDef->zName, sqlite3Strlen30(pDef->zName)+1);
102273 pNew->xFunc = xFunc;
102274 pNew->pUserData = pArg;
102275 pNew->flags |= SQLITE_FUNC_EPHEM;
102276 return pNew;
102280 ** Make sure virtual table pTab is contained in the pParse->apVirtualLock[]
102281 ** array so that an OP_VBegin will get generated for it. Add pTab to the
102282 ** array if it is missing. If pTab is already in the array, this routine
102283 ** is a no-op.
102285 SQLITE_PRIVATE void sqlite3VtabMakeWritable(Parse *pParse, Table *pTab){
102286 Parse *pToplevel = sqlite3ParseToplevel(pParse);
102287 int i, n;
102288 Table **apVtabLock;
102290 assert( IsVirtual(pTab) );
102291 for(i=0; i<pToplevel->nVtabLock; i++){
102292 if( pTab==pToplevel->apVtabLock[i] ) return;
102294 n = (pToplevel->nVtabLock+1)*sizeof(pToplevel->apVtabLock[0]);
102295 apVtabLock = sqlite3_realloc(pToplevel->apVtabLock, n);
102296 if( apVtabLock ){
102297 pToplevel->apVtabLock = apVtabLock;
102298 pToplevel->apVtabLock[pToplevel->nVtabLock++] = pTab;
102299 }else{
102300 pToplevel->db->mallocFailed = 1;
102305 ** Return the ON CONFLICT resolution mode in effect for the virtual
102306 ** table update operation currently in progress.
102308 ** The results of this routine are undefined unless it is called from
102309 ** within an xUpdate method.
102311 SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *db){
102312 static const unsigned char aMap[] = {
102313 SQLITE_ROLLBACK, SQLITE_ABORT, SQLITE_FAIL, SQLITE_IGNORE, SQLITE_REPLACE
102315 assert( OE_Rollback==1 && OE_Abort==2 && OE_Fail==3 );
102316 assert( OE_Ignore==4 && OE_Replace==5 );
102317 assert( db->vtabOnConflict>=1 && db->vtabOnConflict<=5 );
102318 return (int)aMap[db->vtabOnConflict-1];
102322 ** Call from within the xCreate() or xConnect() methods to provide
102323 ** the SQLite core with additional information about the behavior
102324 ** of the virtual table being implemented.
102326 SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
102327 va_list ap;
102328 int rc = SQLITE_OK;
102330 sqlite3_mutex_enter(db->mutex);
102332 va_start(ap, op);
102333 switch( op ){
102334 case SQLITE_VTAB_CONSTRAINT_SUPPORT: {
102335 VtabCtx *p = db->pVtabCtx;
102336 if( !p ){
102337 rc = SQLITE_MISUSE_BKPT;
102338 }else{
102339 assert( p->pTab==0 || (p->pTab->tabFlags & TF_Virtual)!=0 );
102340 p->pVTable->bConstraint = (u8)va_arg(ap, int);
102342 break;
102344 default:
102345 rc = SQLITE_MISUSE_BKPT;
102346 break;
102348 va_end(ap);
102350 if( rc!=SQLITE_OK ) sqlite3Error(db, rc, 0);
102351 sqlite3_mutex_leave(db->mutex);
102352 return rc;
102355 #endif /* SQLITE_OMIT_VIRTUALTABLE */
102357 /************** End of vtab.c ************************************************/
102358 /************** Begin file where.c *******************************************/
102360 ** 2001 September 15
102362 ** The author disclaims copyright to this source code. In place of
102363 ** a legal notice, here is a blessing:
102365 ** May you do good and not evil.
102366 ** May you find forgiveness for yourself and forgive others.
102367 ** May you share freely, never taking more than you give.
102369 *************************************************************************
102370 ** This module contains C code that generates VDBE code used to process
102371 ** the WHERE clause of SQL statements. This module is responsible for
102372 ** generating the code that loops through a table looking for applicable
102373 ** rows. Indices are selected and used to speed the search when doing
102374 ** so is applicable. Because this module is responsible for selecting
102375 ** indices, you might also think of this module as the "query optimizer".
102380 ** Trace output macros
102382 #if defined(SQLITE_TEST) || defined(SQLITE_DEBUG)
102383 SQLITE_PRIVATE int sqlite3WhereTrace = 0;
102384 #endif
102385 #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
102386 # define WHERETRACE(X) if(sqlite3WhereTrace) sqlite3DebugPrintf X
102387 #else
102388 # define WHERETRACE(X)
102389 #endif
102391 /* Forward reference
102393 typedef struct WhereClause WhereClause;
102394 typedef struct WhereMaskSet WhereMaskSet;
102395 typedef struct WhereOrInfo WhereOrInfo;
102396 typedef struct WhereAndInfo WhereAndInfo;
102397 typedef struct WhereCost WhereCost;
102400 ** The query generator uses an array of instances of this structure to
102401 ** help it analyze the subexpressions of the WHERE clause. Each WHERE
102402 ** clause subexpression is separated from the others by AND operators,
102403 ** usually, or sometimes subexpressions separated by OR.
102405 ** All WhereTerms are collected into a single WhereClause structure.
102406 ** The following identity holds:
102408 ** WhereTerm.pWC->a[WhereTerm.idx] == WhereTerm
102410 ** When a term is of the form:
102412 ** X <op> <expr>
102414 ** where X is a column name and <op> is one of certain operators,
102415 ** then WhereTerm.leftCursor and WhereTerm.u.leftColumn record the
102416 ** cursor number and column number for X. WhereTerm.eOperator records
102417 ** the <op> using a bitmask encoding defined by WO_xxx below. The
102418 ** use of a bitmask encoding for the operator allows us to search
102419 ** quickly for terms that match any of several different operators.
102421 ** A WhereTerm might also be two or more subterms connected by OR:
102423 ** (t1.X <op> <expr>) OR (t1.Y <op> <expr>) OR ....
102425 ** In this second case, wtFlag as the TERM_ORINFO set and eOperator==WO_OR
102426 ** and the WhereTerm.u.pOrInfo field points to auxiliary information that
102427 ** is collected about the
102429 ** If a term in the WHERE clause does not match either of the two previous
102430 ** categories, then eOperator==0. The WhereTerm.pExpr field is still set
102431 ** to the original subexpression content and wtFlags is set up appropriately
102432 ** but no other fields in the WhereTerm object are meaningful.
102434 ** When eOperator!=0, prereqRight and prereqAll record sets of cursor numbers,
102435 ** but they do so indirectly. A single WhereMaskSet structure translates
102436 ** cursor number into bits and the translated bit is stored in the prereq
102437 ** fields. The translation is used in order to maximize the number of
102438 ** bits that will fit in a Bitmask. The VDBE cursor numbers might be
102439 ** spread out over the non-negative integers. For example, the cursor
102440 ** numbers might be 3, 8, 9, 10, 20, 23, 41, and 45. The WhereMaskSet
102441 ** translates these sparse cursor numbers into consecutive integers
102442 ** beginning with 0 in order to make the best possible use of the available
102443 ** bits in the Bitmask. So, in the example above, the cursor numbers
102444 ** would be mapped into integers 0 through 7.
102446 ** The number of terms in a join is limited by the number of bits
102447 ** in prereqRight and prereqAll. The default is 64 bits, hence SQLite
102448 ** is only able to process joins with 64 or fewer tables.
102450 typedef struct WhereTerm WhereTerm;
102451 struct WhereTerm {
102452 Expr *pExpr; /* Pointer to the subexpression that is this term */
102453 int iParent; /* Disable pWC->a[iParent] when this term disabled */
102454 int leftCursor; /* Cursor number of X in "X <op> <expr>" */
102455 union {
102456 int leftColumn; /* Column number of X in "X <op> <expr>" */
102457 WhereOrInfo *pOrInfo; /* Extra information if eOperator==WO_OR */
102458 WhereAndInfo *pAndInfo; /* Extra information if eOperator==WO_AND */
102460 u16 eOperator; /* A WO_xx value describing <op> */
102461 u8 wtFlags; /* TERM_xxx bit flags. See below */
102462 u8 nChild; /* Number of children that must disable us */
102463 WhereClause *pWC; /* The clause this term is part of */
102464 Bitmask prereqRight; /* Bitmask of tables used by pExpr->pRight */
102465 Bitmask prereqAll; /* Bitmask of tables referenced by pExpr */
102469 ** Allowed values of WhereTerm.wtFlags
102471 #define TERM_DYNAMIC 0x01 /* Need to call sqlite3ExprDelete(db, pExpr) */
102472 #define TERM_VIRTUAL 0x02 /* Added by the optimizer. Do not code */
102473 #define TERM_CODED 0x04 /* This term is already coded */
102474 #define TERM_COPIED 0x08 /* Has a child */
102475 #define TERM_ORINFO 0x10 /* Need to free the WhereTerm.u.pOrInfo object */
102476 #define TERM_ANDINFO 0x20 /* Need to free the WhereTerm.u.pAndInfo obj */
102477 #define TERM_OR_OK 0x40 /* Used during OR-clause processing */
102478 #ifdef SQLITE_ENABLE_STAT3
102479 # define TERM_VNULL 0x80 /* Manufactured x>NULL or x<=NULL term */
102480 #else
102481 # define TERM_VNULL 0x00 /* Disabled if not using stat3 */
102482 #endif
102485 ** An instance of the following structure holds all information about a
102486 ** WHERE clause. Mostly this is a container for one or more WhereTerms.
102488 ** Explanation of pOuter: For a WHERE clause of the form
102490 ** a AND ((b AND c) OR (d AND e)) AND f
102492 ** There are separate WhereClause objects for the whole clause and for
102493 ** the subclauses "(b AND c)" and "(d AND e)". The pOuter field of the
102494 ** subclauses points to the WhereClause object for the whole clause.
102496 struct WhereClause {
102497 Parse *pParse; /* The parser context */
102498 WhereMaskSet *pMaskSet; /* Mapping of table cursor numbers to bitmasks */
102499 Bitmask vmask; /* Bitmask identifying virtual table cursors */
102500 WhereClause *pOuter; /* Outer conjunction */
102501 u8 op; /* Split operator. TK_AND or TK_OR */
102502 u16 wctrlFlags; /* Might include WHERE_AND_ONLY */
102503 int nTerm; /* Number of terms */
102504 int nSlot; /* Number of entries in a[] */
102505 WhereTerm *a; /* Each a[] describes a term of the WHERE cluase */
102506 #if defined(SQLITE_SMALL_STACK)
102507 WhereTerm aStatic[1]; /* Initial static space for a[] */
102508 #else
102509 WhereTerm aStatic[8]; /* Initial static space for a[] */
102510 #endif
102514 ** A WhereTerm with eOperator==WO_OR has its u.pOrInfo pointer set to
102515 ** a dynamically allocated instance of the following structure.
102517 struct WhereOrInfo {
102518 WhereClause wc; /* Decomposition into subterms */
102519 Bitmask indexable; /* Bitmask of all indexable tables in the clause */
102523 ** A WhereTerm with eOperator==WO_AND has its u.pAndInfo pointer set to
102524 ** a dynamically allocated instance of the following structure.
102526 struct WhereAndInfo {
102527 WhereClause wc; /* The subexpression broken out */
102531 ** An instance of the following structure keeps track of a mapping
102532 ** between VDBE cursor numbers and bits of the bitmasks in WhereTerm.
102534 ** The VDBE cursor numbers are small integers contained in
102535 ** SrcList_item.iCursor and Expr.iTable fields. For any given WHERE
102536 ** clause, the cursor numbers might not begin with 0 and they might
102537 ** contain gaps in the numbering sequence. But we want to make maximum
102538 ** use of the bits in our bitmasks. This structure provides a mapping
102539 ** from the sparse cursor numbers into consecutive integers beginning
102540 ** with 0.
102542 ** If WhereMaskSet.ix[A]==B it means that The A-th bit of a Bitmask
102543 ** corresponds VDBE cursor number B. The A-th bit of a bitmask is 1<<A.
102545 ** For example, if the WHERE clause expression used these VDBE
102546 ** cursors: 4, 5, 8, 29, 57, 73. Then the WhereMaskSet structure
102547 ** would map those cursor numbers into bits 0 through 5.
102549 ** Note that the mapping is not necessarily ordered. In the example
102550 ** above, the mapping might go like this: 4->3, 5->1, 8->2, 29->0,
102551 ** 57->5, 73->4. Or one of 719 other combinations might be used. It
102552 ** does not really matter. What is important is that sparse cursor
102553 ** numbers all get mapped into bit numbers that begin with 0 and contain
102554 ** no gaps.
102556 struct WhereMaskSet {
102557 int n; /* Number of assigned cursor values */
102558 int ix[BMS]; /* Cursor assigned to each bit */
102562 ** A WhereCost object records a lookup strategy and the estimated
102563 ** cost of pursuing that strategy.
102565 struct WhereCost {
102566 WherePlan plan; /* The lookup strategy */
102567 double rCost; /* Overall cost of pursuing this search strategy */
102568 Bitmask used; /* Bitmask of cursors used by this plan */
102572 ** Bitmasks for the operators that indices are able to exploit. An
102573 ** OR-ed combination of these values can be used when searching for
102574 ** terms in the where clause.
102576 #define WO_IN 0x001
102577 #define WO_EQ 0x002
102578 #define WO_LT (WO_EQ<<(TK_LT-TK_EQ))
102579 #define WO_LE (WO_EQ<<(TK_LE-TK_EQ))
102580 #define WO_GT (WO_EQ<<(TK_GT-TK_EQ))
102581 #define WO_GE (WO_EQ<<(TK_GE-TK_EQ))
102582 #define WO_MATCH 0x040
102583 #define WO_ISNULL 0x080
102584 #define WO_OR 0x100 /* Two or more OR-connected terms */
102585 #define WO_AND 0x200 /* Two or more AND-connected terms */
102586 #define WO_NOOP 0x800 /* This term does not restrict search space */
102588 #define WO_ALL 0xfff /* Mask of all possible WO_* values */
102589 #define WO_SINGLE 0x0ff /* Mask of all non-compound WO_* values */
102592 ** Value for wsFlags returned by bestIndex() and stored in
102593 ** WhereLevel.wsFlags. These flags determine which search
102594 ** strategies are appropriate.
102596 ** The least significant 12 bits is reserved as a mask for WO_ values above.
102597 ** The WhereLevel.wsFlags field is usually set to WO_IN|WO_EQ|WO_ISNULL.
102598 ** But if the table is the right table of a left join, WhereLevel.wsFlags
102599 ** is set to WO_IN|WO_EQ. The WhereLevel.wsFlags field can then be used as
102600 ** the "op" parameter to findTerm when we are resolving equality constraints.
102601 ** ISNULL constraints will then not be used on the right table of a left
102602 ** join. Tickets #2177 and #2189.
102604 #define WHERE_ROWID_EQ 0x00001000 /* rowid=EXPR or rowid IN (...) */
102605 #define WHERE_ROWID_RANGE 0x00002000 /* rowid<EXPR and/or rowid>EXPR */
102606 #define WHERE_COLUMN_EQ 0x00010000 /* x=EXPR or x IN (...) or x IS NULL */
102607 #define WHERE_COLUMN_RANGE 0x00020000 /* x<EXPR and/or x>EXPR */
102608 #define WHERE_COLUMN_IN 0x00040000 /* x IN (...) */
102609 #define WHERE_COLUMN_NULL 0x00080000 /* x IS NULL */
102610 #define WHERE_INDEXED 0x000f0000 /* Anything that uses an index */
102611 #define WHERE_NOT_FULLSCAN 0x100f3000 /* Does not do a full table scan */
102612 #define WHERE_IN_ABLE 0x000f1000 /* Able to support an IN operator */
102613 #define WHERE_TOP_LIMIT 0x00100000 /* x<EXPR or x<=EXPR constraint */
102614 #define WHERE_BTM_LIMIT 0x00200000 /* x>EXPR or x>=EXPR constraint */
102615 #define WHERE_BOTH_LIMIT 0x00300000 /* Both x>EXPR and x<EXPR */
102616 #define WHERE_IDX_ONLY 0x00800000 /* Use index only - omit table */
102617 #define WHERE_ORDERBY 0x01000000 /* Output will appear in correct order */
102618 #define WHERE_REVERSE 0x02000000 /* Scan in reverse order */
102619 #define WHERE_UNIQUE 0x04000000 /* Selects no more than one row */
102620 #define WHERE_VIRTUALTABLE 0x08000000 /* Use virtual-table processing */
102621 #define WHERE_MULTI_OR 0x10000000 /* OR using multiple indices */
102622 #define WHERE_TEMP_INDEX 0x20000000 /* Uses an ephemeral index */
102623 #define WHERE_DISTINCT 0x40000000 /* Correct order for DISTINCT */
102626 ** Initialize a preallocated WhereClause structure.
102628 static void whereClauseInit(
102629 WhereClause *pWC, /* The WhereClause to be initialized */
102630 Parse *pParse, /* The parsing context */
102631 WhereMaskSet *pMaskSet, /* Mapping from table cursor numbers to bitmasks */
102632 u16 wctrlFlags /* Might include WHERE_AND_ONLY */
102634 pWC->pParse = pParse;
102635 pWC->pMaskSet = pMaskSet;
102636 pWC->pOuter = 0;
102637 pWC->nTerm = 0;
102638 pWC->nSlot = ArraySize(pWC->aStatic);
102639 pWC->a = pWC->aStatic;
102640 pWC->vmask = 0;
102641 pWC->wctrlFlags = wctrlFlags;
102644 /* Forward reference */
102645 static void whereClauseClear(WhereClause*);
102648 ** Deallocate all memory associated with a WhereOrInfo object.
102650 static void whereOrInfoDelete(sqlite3 *db, WhereOrInfo *p){
102651 whereClauseClear(&p->wc);
102652 sqlite3DbFree(db, p);
102656 ** Deallocate all memory associated with a WhereAndInfo object.
102658 static void whereAndInfoDelete(sqlite3 *db, WhereAndInfo *p){
102659 whereClauseClear(&p->wc);
102660 sqlite3DbFree(db, p);
102664 ** Deallocate a WhereClause structure. The WhereClause structure
102665 ** itself is not freed. This routine is the inverse of whereClauseInit().
102667 static void whereClauseClear(WhereClause *pWC){
102668 int i;
102669 WhereTerm *a;
102670 sqlite3 *db = pWC->pParse->db;
102671 for(i=pWC->nTerm-1, a=pWC->a; i>=0; i--, a++){
102672 if( a->wtFlags & TERM_DYNAMIC ){
102673 sqlite3ExprDelete(db, a->pExpr);
102675 if( a->wtFlags & TERM_ORINFO ){
102676 whereOrInfoDelete(db, a->u.pOrInfo);
102677 }else if( a->wtFlags & TERM_ANDINFO ){
102678 whereAndInfoDelete(db, a->u.pAndInfo);
102681 if( pWC->a!=pWC->aStatic ){
102682 sqlite3DbFree(db, pWC->a);
102687 ** Add a single new WhereTerm entry to the WhereClause object pWC.
102688 ** The new WhereTerm object is constructed from Expr p and with wtFlags.
102689 ** The index in pWC->a[] of the new WhereTerm is returned on success.
102690 ** 0 is returned if the new WhereTerm could not be added due to a memory
102691 ** allocation error. The memory allocation failure will be recorded in
102692 ** the db->mallocFailed flag so that higher-level functions can detect it.
102694 ** This routine will increase the size of the pWC->a[] array as necessary.
102696 ** If the wtFlags argument includes TERM_DYNAMIC, then responsibility
102697 ** for freeing the expression p is assumed by the WhereClause object pWC.
102698 ** This is true even if this routine fails to allocate a new WhereTerm.
102700 ** WARNING: This routine might reallocate the space used to store
102701 ** WhereTerms. All pointers to WhereTerms should be invalidated after
102702 ** calling this routine. Such pointers may be reinitialized by referencing
102703 ** the pWC->a[] array.
102705 static int whereClauseInsert(WhereClause *pWC, Expr *p, u8 wtFlags){
102706 WhereTerm *pTerm;
102707 int idx;
102708 testcase( wtFlags & TERM_VIRTUAL ); /* EV: R-00211-15100 */
102709 if( pWC->nTerm>=pWC->nSlot ){
102710 WhereTerm *pOld = pWC->a;
102711 sqlite3 *db = pWC->pParse->db;
102712 pWC->a = sqlite3DbMallocRaw(db, sizeof(pWC->a[0])*pWC->nSlot*2 );
102713 if( pWC->a==0 ){
102714 if( wtFlags & TERM_DYNAMIC ){
102715 sqlite3ExprDelete(db, p);
102717 pWC->a = pOld;
102718 return 0;
102720 memcpy(pWC->a, pOld, sizeof(pWC->a[0])*pWC->nTerm);
102721 if( pOld!=pWC->aStatic ){
102722 sqlite3DbFree(db, pOld);
102724 pWC->nSlot = sqlite3DbMallocSize(db, pWC->a)/sizeof(pWC->a[0]);
102726 pTerm = &pWC->a[idx = pWC->nTerm++];
102727 pTerm->pExpr = p;
102728 pTerm->wtFlags = wtFlags;
102729 pTerm->pWC = pWC;
102730 pTerm->iParent = -1;
102731 return idx;
102735 ** This routine identifies subexpressions in the WHERE clause where
102736 ** each subexpression is separated by the AND operator or some other
102737 ** operator specified in the op parameter. The WhereClause structure
102738 ** is filled with pointers to subexpressions. For example:
102740 ** WHERE a=='hello' AND coalesce(b,11)<10 AND (c+12!=d OR c==22)
102741 ** \________/ \_______________/ \________________/
102742 ** slot[0] slot[1] slot[2]
102744 ** The original WHERE clause in pExpr is unaltered. All this routine
102745 ** does is make slot[] entries point to substructure within pExpr.
102747 ** In the previous sentence and in the diagram, "slot[]" refers to
102748 ** the WhereClause.a[] array. The slot[] array grows as needed to contain
102749 ** all terms of the WHERE clause.
102751 static void whereSplit(WhereClause *pWC, Expr *pExpr, int op){
102752 pWC->op = (u8)op;
102753 if( pExpr==0 ) return;
102754 if( pExpr->op!=op ){
102755 whereClauseInsert(pWC, pExpr, 0);
102756 }else{
102757 whereSplit(pWC, pExpr->pLeft, op);
102758 whereSplit(pWC, pExpr->pRight, op);
102763 ** Initialize an expression mask set (a WhereMaskSet object)
102765 #define initMaskSet(P) memset(P, 0, sizeof(*P))
102768 ** Return the bitmask for the given cursor number. Return 0 if
102769 ** iCursor is not in the set.
102771 static Bitmask getMask(WhereMaskSet *pMaskSet, int iCursor){
102772 int i;
102773 assert( pMaskSet->n<=(int)sizeof(Bitmask)*8 );
102774 for(i=0; i<pMaskSet->n; i++){
102775 if( pMaskSet->ix[i]==iCursor ){
102776 return ((Bitmask)1)<<i;
102779 return 0;
102783 ** Create a new mask for cursor iCursor.
102785 ** There is one cursor per table in the FROM clause. The number of
102786 ** tables in the FROM clause is limited by a test early in the
102787 ** sqlite3WhereBegin() routine. So we know that the pMaskSet->ix[]
102788 ** array will never overflow.
102790 static void createMask(WhereMaskSet *pMaskSet, int iCursor){
102791 assert( pMaskSet->n < ArraySize(pMaskSet->ix) );
102792 pMaskSet->ix[pMaskSet->n++] = iCursor;
102796 ** This routine walks (recursively) an expression tree and generates
102797 ** a bitmask indicating which tables are used in that expression
102798 ** tree.
102800 ** In order for this routine to work, the calling function must have
102801 ** previously invoked sqlite3ResolveExprNames() on the expression. See
102802 ** the header comment on that routine for additional information.
102803 ** The sqlite3ResolveExprNames() routines looks for column names and
102804 ** sets their opcodes to TK_COLUMN and their Expr.iTable fields to
102805 ** the VDBE cursor number of the table. This routine just has to
102806 ** translate the cursor numbers into bitmask values and OR all
102807 ** the bitmasks together.
102809 static Bitmask exprListTableUsage(WhereMaskSet*, ExprList*);
102810 static Bitmask exprSelectTableUsage(WhereMaskSet*, Select*);
102811 static Bitmask exprTableUsage(WhereMaskSet *pMaskSet, Expr *p){
102812 Bitmask mask = 0;
102813 if( p==0 ) return 0;
102814 if( p->op==TK_COLUMN ){
102815 mask = getMask(pMaskSet, p->iTable);
102816 return mask;
102818 mask = exprTableUsage(pMaskSet, p->pRight);
102819 mask |= exprTableUsage(pMaskSet, p->pLeft);
102820 if( ExprHasProperty(p, EP_xIsSelect) ){
102821 mask |= exprSelectTableUsage(pMaskSet, p->x.pSelect);
102822 }else{
102823 mask |= exprListTableUsage(pMaskSet, p->x.pList);
102825 return mask;
102827 static Bitmask exprListTableUsage(WhereMaskSet *pMaskSet, ExprList *pList){
102828 int i;
102829 Bitmask mask = 0;
102830 if( pList ){
102831 for(i=0; i<pList->nExpr; i++){
102832 mask |= exprTableUsage(pMaskSet, pList->a[i].pExpr);
102835 return mask;
102837 static Bitmask exprSelectTableUsage(WhereMaskSet *pMaskSet, Select *pS){
102838 Bitmask mask = 0;
102839 while( pS ){
102840 SrcList *pSrc = pS->pSrc;
102841 mask |= exprListTableUsage(pMaskSet, pS->pEList);
102842 mask |= exprListTableUsage(pMaskSet, pS->pGroupBy);
102843 mask |= exprListTableUsage(pMaskSet, pS->pOrderBy);
102844 mask |= exprTableUsage(pMaskSet, pS->pWhere);
102845 mask |= exprTableUsage(pMaskSet, pS->pHaving);
102846 if( ALWAYS(pSrc!=0) ){
102847 int i;
102848 for(i=0; i<pSrc->nSrc; i++){
102849 mask |= exprSelectTableUsage(pMaskSet, pSrc->a[i].pSelect);
102850 mask |= exprTableUsage(pMaskSet, pSrc->a[i].pOn);
102853 pS = pS->pPrior;
102855 return mask;
102859 ** Return TRUE if the given operator is one of the operators that is
102860 ** allowed for an indexable WHERE clause term. The allowed operators are
102861 ** "=", "<", ">", "<=", ">=", and "IN".
102863 ** IMPLEMENTATION-OF: R-59926-26393 To be usable by an index a term must be
102864 ** of one of the following forms: column = expression column > expression
102865 ** column >= expression column < expression column <= expression
102866 ** expression = column expression > column expression >= column
102867 ** expression < column expression <= column column IN
102868 ** (expression-list) column IN (subquery) column IS NULL
102870 static int allowedOp(int op){
102871 assert( TK_GT>TK_EQ && TK_GT<TK_GE );
102872 assert( TK_LT>TK_EQ && TK_LT<TK_GE );
102873 assert( TK_LE>TK_EQ && TK_LE<TK_GE );
102874 assert( TK_GE==TK_EQ+4 );
102875 return op==TK_IN || (op>=TK_EQ && op<=TK_GE) || op==TK_ISNULL;
102879 ** Swap two objects of type TYPE.
102881 #define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
102884 ** Commute a comparison operator. Expressions of the form "X op Y"
102885 ** are converted into "Y op X".
102887 ** If a collation sequence is associated with either the left or right
102888 ** side of the comparison, it remains associated with the same side after
102889 ** the commutation. So "Y collate NOCASE op X" becomes
102890 ** "X collate NOCASE op Y". This is because any collation sequence on
102891 ** the left hand side of a comparison overrides any collation sequence
102892 ** attached to the right. For the same reason the EP_ExpCollate flag
102893 ** is not commuted.
102895 static void exprCommute(Parse *pParse, Expr *pExpr){
102896 u16 expRight = (pExpr->pRight->flags & EP_ExpCollate);
102897 u16 expLeft = (pExpr->pLeft->flags & EP_ExpCollate);
102898 assert( allowedOp(pExpr->op) && pExpr->op!=TK_IN );
102899 pExpr->pRight->pColl = sqlite3ExprCollSeq(pParse, pExpr->pRight);
102900 pExpr->pLeft->pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
102901 SWAP(CollSeq*,pExpr->pRight->pColl,pExpr->pLeft->pColl);
102902 pExpr->pRight->flags = (pExpr->pRight->flags & ~EP_ExpCollate) | expLeft;
102903 pExpr->pLeft->flags = (pExpr->pLeft->flags & ~EP_ExpCollate) | expRight;
102904 SWAP(Expr*,pExpr->pRight,pExpr->pLeft);
102905 if( pExpr->op>=TK_GT ){
102906 assert( TK_LT==TK_GT+2 );
102907 assert( TK_GE==TK_LE+2 );
102908 assert( TK_GT>TK_EQ );
102909 assert( TK_GT<TK_LE );
102910 assert( pExpr->op>=TK_GT && pExpr->op<=TK_GE );
102911 pExpr->op = ((pExpr->op-TK_GT)^2)+TK_GT;
102916 ** Translate from TK_xx operator to WO_xx bitmask.
102918 static u16 operatorMask(int op){
102919 u16 c;
102920 assert( allowedOp(op) );
102921 if( op==TK_IN ){
102922 c = WO_IN;
102923 }else if( op==TK_ISNULL ){
102924 c = WO_ISNULL;
102925 }else{
102926 assert( (WO_EQ<<(op-TK_EQ)) < 0x7fff );
102927 c = (u16)(WO_EQ<<(op-TK_EQ));
102929 assert( op!=TK_ISNULL || c==WO_ISNULL );
102930 assert( op!=TK_IN || c==WO_IN );
102931 assert( op!=TK_EQ || c==WO_EQ );
102932 assert( op!=TK_LT || c==WO_LT );
102933 assert( op!=TK_LE || c==WO_LE );
102934 assert( op!=TK_GT || c==WO_GT );
102935 assert( op!=TK_GE || c==WO_GE );
102936 return c;
102940 ** Search for a term in the WHERE clause that is of the form "X <op> <expr>"
102941 ** where X is a reference to the iColumn of table iCur and <op> is one of
102942 ** the WO_xx operator codes specified by the op parameter.
102943 ** Return a pointer to the term. Return 0 if not found.
102945 static WhereTerm *findTerm(
102946 WhereClause *pWC, /* The WHERE clause to be searched */
102947 int iCur, /* Cursor number of LHS */
102948 int iColumn, /* Column number of LHS */
102949 Bitmask notReady, /* RHS must not overlap with this mask */
102950 u32 op, /* Mask of WO_xx values describing operator */
102951 Index *pIdx /* Must be compatible with this index, if not NULL */
102953 WhereTerm *pTerm;
102954 int k;
102955 assert( iCur>=0 );
102956 op &= WO_ALL;
102957 for(; pWC; pWC=pWC->pOuter){
102958 for(pTerm=pWC->a, k=pWC->nTerm; k; k--, pTerm++){
102959 if( pTerm->leftCursor==iCur
102960 && (pTerm->prereqRight & notReady)==0
102961 && pTerm->u.leftColumn==iColumn
102962 && (pTerm->eOperator & op)!=0
102964 if( iColumn>=0 && pIdx && pTerm->eOperator!=WO_ISNULL ){
102965 Expr *pX = pTerm->pExpr;
102966 CollSeq *pColl;
102967 char idxaff;
102968 int j;
102969 Parse *pParse = pWC->pParse;
102971 idxaff = pIdx->pTable->aCol[iColumn].affinity;
102972 if( !sqlite3IndexAffinityOk(pX, idxaff) ) continue;
102974 /* Figure out the collation sequence required from an index for
102975 ** it to be useful for optimising expression pX. Store this
102976 ** value in variable pColl.
102978 assert(pX->pLeft);
102979 pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
102980 assert(pColl || pParse->nErr);
102982 for(j=0; pIdx->aiColumn[j]!=iColumn; j++){
102983 if( NEVER(j>=pIdx->nColumn) ) return 0;
102985 if( pColl && sqlite3StrICmp(pColl->zName, pIdx->azColl[j]) ) continue;
102987 return pTerm;
102991 return 0;
102994 /* Forward reference */
102995 static void exprAnalyze(SrcList*, WhereClause*, int);
102998 ** Call exprAnalyze on all terms in a WHERE clause.
103002 static void exprAnalyzeAll(
103003 SrcList *pTabList, /* the FROM clause */
103004 WhereClause *pWC /* the WHERE clause to be analyzed */
103006 int i;
103007 for(i=pWC->nTerm-1; i>=0; i--){
103008 exprAnalyze(pTabList, pWC, i);
103012 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
103014 ** Check to see if the given expression is a LIKE or GLOB operator that
103015 ** can be optimized using inequality constraints. Return TRUE if it is
103016 ** so and false if not.
103018 ** In order for the operator to be optimizible, the RHS must be a string
103019 ** literal that does not begin with a wildcard.
103021 static int isLikeOrGlob(
103022 Parse *pParse, /* Parsing and code generating context */
103023 Expr *pExpr, /* Test this expression */
103024 Expr **ppPrefix, /* Pointer to TK_STRING expression with pattern prefix */
103025 int *pisComplete, /* True if the only wildcard is % in the last character */
103026 int *pnoCase /* True if uppercase is equivalent to lowercase */
103028 const char *z = 0; /* String on RHS of LIKE operator */
103029 Expr *pRight, *pLeft; /* Right and left size of LIKE operator */
103030 ExprList *pList; /* List of operands to the LIKE operator */
103031 int c; /* One character in z[] */
103032 int cnt; /* Number of non-wildcard prefix characters */
103033 char wc[3]; /* Wildcard characters */
103034 sqlite3 *db = pParse->db; /* Database connection */
103035 sqlite3_value *pVal = 0;
103036 int op; /* Opcode of pRight */
103038 if( !sqlite3IsLikeFunction(db, pExpr, pnoCase, wc) ){
103039 return 0;
103041 #ifdef SQLITE_EBCDIC
103042 if( *pnoCase ) return 0;
103043 #endif
103044 pList = pExpr->x.pList;
103045 pLeft = pList->a[1].pExpr;
103046 if( pLeft->op!=TK_COLUMN || sqlite3ExprAffinity(pLeft)!=SQLITE_AFF_TEXT ){
103047 /* IMP: R-02065-49465 The left-hand side of the LIKE or GLOB operator must
103048 ** be the name of an indexed column with TEXT affinity. */
103049 return 0;
103051 assert( pLeft->iColumn!=(-1) ); /* Because IPK never has AFF_TEXT */
103053 pRight = pList->a[0].pExpr;
103054 op = pRight->op;
103055 if( op==TK_REGISTER ){
103056 op = pRight->op2;
103058 if( op==TK_VARIABLE ){
103059 Vdbe *pReprepare = pParse->pReprepare;
103060 int iCol = pRight->iColumn;
103061 pVal = sqlite3VdbeGetValue(pReprepare, iCol, SQLITE_AFF_NONE);
103062 if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){
103063 z = (char *)sqlite3_value_text(pVal);
103065 sqlite3VdbeSetVarmask(pParse->pVdbe, iCol);
103066 assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER );
103067 }else if( op==TK_STRING ){
103068 z = pRight->u.zToken;
103070 if( z ){
103071 cnt = 0;
103072 while( (c=z[cnt])!=0 && c!=wc[0] && c!=wc[1] && c!=wc[2] ){
103073 cnt++;
103075 if( cnt!=0 && 255!=(u8)z[cnt-1] ){
103076 Expr *pPrefix;
103077 *pisComplete = c==wc[0] && z[cnt+1]==0;
103078 pPrefix = sqlite3Expr(db, TK_STRING, z);
103079 if( pPrefix ) pPrefix->u.zToken[cnt] = 0;
103080 *ppPrefix = pPrefix;
103081 if( op==TK_VARIABLE ){
103082 Vdbe *v = pParse->pVdbe;
103083 sqlite3VdbeSetVarmask(v, pRight->iColumn);
103084 if( *pisComplete && pRight->u.zToken[1] ){
103085 /* If the rhs of the LIKE expression is a variable, and the current
103086 ** value of the variable means there is no need to invoke the LIKE
103087 ** function, then no OP_Variable will be added to the program.
103088 ** This causes problems for the sqlite3_bind_parameter_name()
103089 ** API. To workaround them, add a dummy OP_Variable here.
103091 int r1 = sqlite3GetTempReg(pParse);
103092 sqlite3ExprCodeTarget(pParse, pRight, r1);
103093 sqlite3VdbeChangeP3(v, sqlite3VdbeCurrentAddr(v)-1, 0);
103094 sqlite3ReleaseTempReg(pParse, r1);
103097 }else{
103098 z = 0;
103102 sqlite3ValueFree(pVal);
103103 return (z!=0);
103105 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
103108 #ifndef SQLITE_OMIT_VIRTUALTABLE
103110 ** Check to see if the given expression is of the form
103112 ** column MATCH expr
103114 ** If it is then return TRUE. If not, return FALSE.
103116 static int isMatchOfColumn(
103117 Expr *pExpr /* Test this expression */
103119 ExprList *pList;
103121 if( pExpr->op!=TK_FUNCTION ){
103122 return 0;
103124 if( sqlite3StrICmp(pExpr->u.zToken,"match")!=0 ){
103125 return 0;
103127 pList = pExpr->x.pList;
103128 if( pList->nExpr!=2 ){
103129 return 0;
103131 if( pList->a[1].pExpr->op != TK_COLUMN ){
103132 return 0;
103134 return 1;
103136 #endif /* SQLITE_OMIT_VIRTUALTABLE */
103139 ** If the pBase expression originated in the ON or USING clause of
103140 ** a join, then transfer the appropriate markings over to derived.
103142 static void transferJoinMarkings(Expr *pDerived, Expr *pBase){
103143 pDerived->flags |= pBase->flags & EP_FromJoin;
103144 pDerived->iRightJoinTable = pBase->iRightJoinTable;
103147 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
103149 ** Analyze a term that consists of two or more OR-connected
103150 ** subterms. So in:
103152 ** ... WHERE (a=5) AND (b=7 OR c=9 OR d=13) AND (d=13)
103153 ** ^^^^^^^^^^^^^^^^^^^^
103155 ** This routine analyzes terms such as the middle term in the above example.
103156 ** A WhereOrTerm object is computed and attached to the term under
103157 ** analysis, regardless of the outcome of the analysis. Hence:
103159 ** WhereTerm.wtFlags |= TERM_ORINFO
103160 ** WhereTerm.u.pOrInfo = a dynamically allocated WhereOrTerm object
103162 ** The term being analyzed must have two or more of OR-connected subterms.
103163 ** A single subterm might be a set of AND-connected sub-subterms.
103164 ** Examples of terms under analysis:
103166 ** (A) t1.x=t2.y OR t1.x=t2.z OR t1.y=15 OR t1.z=t3.a+5
103167 ** (B) x=expr1 OR expr2=x OR x=expr3
103168 ** (C) t1.x=t2.y OR (t1.x=t2.z AND t1.y=15)
103169 ** (D) x=expr1 OR (y>11 AND y<22 AND z LIKE '*hello*')
103170 ** (E) (p.a=1 AND q.b=2 AND r.c=3) OR (p.x=4 AND q.y=5 AND r.z=6)
103172 ** CASE 1:
103174 ** If all subterms are of the form T.C=expr for some single column of C
103175 ** a single table T (as shown in example B above) then create a new virtual
103176 ** term that is an equivalent IN expression. In other words, if the term
103177 ** being analyzed is:
103179 ** x = expr1 OR expr2 = x OR x = expr3
103181 ** then create a new virtual term like this:
103183 ** x IN (expr1,expr2,expr3)
103185 ** CASE 2:
103187 ** If all subterms are indexable by a single table T, then set
103189 ** WhereTerm.eOperator = WO_OR
103190 ** WhereTerm.u.pOrInfo->indexable |= the cursor number for table T
103192 ** A subterm is "indexable" if it is of the form
103193 ** "T.C <op> <expr>" where C is any column of table T and
103194 ** <op> is one of "=", "<", "<=", ">", ">=", "IS NULL", or "IN".
103195 ** A subterm is also indexable if it is an AND of two or more
103196 ** subsubterms at least one of which is indexable. Indexable AND
103197 ** subterms have their eOperator set to WO_AND and they have
103198 ** u.pAndInfo set to a dynamically allocated WhereAndTerm object.
103200 ** From another point of view, "indexable" means that the subterm could
103201 ** potentially be used with an index if an appropriate index exists.
103202 ** This analysis does not consider whether or not the index exists; that
103203 ** is something the bestIndex() routine will determine. This analysis
103204 ** only looks at whether subterms appropriate for indexing exist.
103206 ** All examples A through E above all satisfy case 2. But if a term
103207 ** also statisfies case 1 (such as B) we know that the optimizer will
103208 ** always prefer case 1, so in that case we pretend that case 2 is not
103209 ** satisfied.
103211 ** It might be the case that multiple tables are indexable. For example,
103212 ** (E) above is indexable on tables P, Q, and R.
103214 ** Terms that satisfy case 2 are candidates for lookup by using
103215 ** separate indices to find rowids for each subterm and composing
103216 ** the union of all rowids using a RowSet object. This is similar
103217 ** to "bitmap indices" in other database engines.
103219 ** OTHERWISE:
103221 ** If neither case 1 nor case 2 apply, then leave the eOperator set to
103222 ** zero. This term is not useful for search.
103224 static void exprAnalyzeOrTerm(
103225 SrcList *pSrc, /* the FROM clause */
103226 WhereClause *pWC, /* the complete WHERE clause */
103227 int idxTerm /* Index of the OR-term to be analyzed */
103229 Parse *pParse = pWC->pParse; /* Parser context */
103230 sqlite3 *db = pParse->db; /* Database connection */
103231 WhereTerm *pTerm = &pWC->a[idxTerm]; /* The term to be analyzed */
103232 Expr *pExpr = pTerm->pExpr; /* The expression of the term */
103233 WhereMaskSet *pMaskSet = pWC->pMaskSet; /* Table use masks */
103234 int i; /* Loop counters */
103235 WhereClause *pOrWc; /* Breakup of pTerm into subterms */
103236 WhereTerm *pOrTerm; /* A Sub-term within the pOrWc */
103237 WhereOrInfo *pOrInfo; /* Additional information associated with pTerm */
103238 Bitmask chngToIN; /* Tables that might satisfy case 1 */
103239 Bitmask indexable; /* Tables that are indexable, satisfying case 2 */
103242 ** Break the OR clause into its separate subterms. The subterms are
103243 ** stored in a WhereClause structure containing within the WhereOrInfo
103244 ** object that is attached to the original OR clause term.
103246 assert( (pTerm->wtFlags & (TERM_DYNAMIC|TERM_ORINFO|TERM_ANDINFO))==0 );
103247 assert( pExpr->op==TK_OR );
103248 pTerm->u.pOrInfo = pOrInfo = sqlite3DbMallocZero(db, sizeof(*pOrInfo));
103249 if( pOrInfo==0 ) return;
103250 pTerm->wtFlags |= TERM_ORINFO;
103251 pOrWc = &pOrInfo->wc;
103252 whereClauseInit(pOrWc, pWC->pParse, pMaskSet, pWC->wctrlFlags);
103253 whereSplit(pOrWc, pExpr, TK_OR);
103254 exprAnalyzeAll(pSrc, pOrWc);
103255 if( db->mallocFailed ) return;
103256 assert( pOrWc->nTerm>=2 );
103259 ** Compute the set of tables that might satisfy cases 1 or 2.
103261 indexable = ~(Bitmask)0;
103262 chngToIN = ~(pWC->vmask);
103263 for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0 && indexable; i--, pOrTerm++){
103264 if( (pOrTerm->eOperator & WO_SINGLE)==0 ){
103265 WhereAndInfo *pAndInfo;
103266 assert( pOrTerm->eOperator==0 );
103267 assert( (pOrTerm->wtFlags & (TERM_ANDINFO|TERM_ORINFO))==0 );
103268 chngToIN = 0;
103269 pAndInfo = sqlite3DbMallocRaw(db, sizeof(*pAndInfo));
103270 if( pAndInfo ){
103271 WhereClause *pAndWC;
103272 WhereTerm *pAndTerm;
103273 int j;
103274 Bitmask b = 0;
103275 pOrTerm->u.pAndInfo = pAndInfo;
103276 pOrTerm->wtFlags |= TERM_ANDINFO;
103277 pOrTerm->eOperator = WO_AND;
103278 pAndWC = &pAndInfo->wc;
103279 whereClauseInit(pAndWC, pWC->pParse, pMaskSet, pWC->wctrlFlags);
103280 whereSplit(pAndWC, pOrTerm->pExpr, TK_AND);
103281 exprAnalyzeAll(pSrc, pAndWC);
103282 pAndWC->pOuter = pWC;
103283 testcase( db->mallocFailed );
103284 if( !db->mallocFailed ){
103285 for(j=0, pAndTerm=pAndWC->a; j<pAndWC->nTerm; j++, pAndTerm++){
103286 assert( pAndTerm->pExpr );
103287 if( allowedOp(pAndTerm->pExpr->op) ){
103288 b |= getMask(pMaskSet, pAndTerm->leftCursor);
103292 indexable &= b;
103294 }else if( pOrTerm->wtFlags & TERM_COPIED ){
103295 /* Skip this term for now. We revisit it when we process the
103296 ** corresponding TERM_VIRTUAL term */
103297 }else{
103298 Bitmask b;
103299 b = getMask(pMaskSet, pOrTerm->leftCursor);
103300 if( pOrTerm->wtFlags & TERM_VIRTUAL ){
103301 WhereTerm *pOther = &pOrWc->a[pOrTerm->iParent];
103302 b |= getMask(pMaskSet, pOther->leftCursor);
103304 indexable &= b;
103305 if( pOrTerm->eOperator!=WO_EQ ){
103306 chngToIN = 0;
103307 }else{
103308 chngToIN &= b;
103314 ** Record the set of tables that satisfy case 2. The set might be
103315 ** empty.
103317 pOrInfo->indexable = indexable;
103318 pTerm->eOperator = indexable==0 ? 0 : WO_OR;
103321 ** chngToIN holds a set of tables that *might* satisfy case 1. But
103322 ** we have to do some additional checking to see if case 1 really
103323 ** is satisfied.
103325 ** chngToIN will hold either 0, 1, or 2 bits. The 0-bit case means
103326 ** that there is no possibility of transforming the OR clause into an
103327 ** IN operator because one or more terms in the OR clause contain
103328 ** something other than == on a column in the single table. The 1-bit
103329 ** case means that every term of the OR clause is of the form
103330 ** "table.column=expr" for some single table. The one bit that is set
103331 ** will correspond to the common table. We still need to check to make
103332 ** sure the same column is used on all terms. The 2-bit case is when
103333 ** the all terms are of the form "table1.column=table2.column". It
103334 ** might be possible to form an IN operator with either table1.column
103335 ** or table2.column as the LHS if either is common to every term of
103336 ** the OR clause.
103338 ** Note that terms of the form "table.column1=table.column2" (the
103339 ** same table on both sizes of the ==) cannot be optimized.
103341 if( chngToIN ){
103342 int okToChngToIN = 0; /* True if the conversion to IN is valid */
103343 int iColumn = -1; /* Column index on lhs of IN operator */
103344 int iCursor = -1; /* Table cursor common to all terms */
103345 int j = 0; /* Loop counter */
103347 /* Search for a table and column that appears on one side or the
103348 ** other of the == operator in every subterm. That table and column
103349 ** will be recorded in iCursor and iColumn. There might not be any
103350 ** such table and column. Set okToChngToIN if an appropriate table
103351 ** and column is found but leave okToChngToIN false if not found.
103353 for(j=0; j<2 && !okToChngToIN; j++){
103354 pOrTerm = pOrWc->a;
103355 for(i=pOrWc->nTerm-1; i>=0; i--, pOrTerm++){
103356 assert( pOrTerm->eOperator==WO_EQ );
103357 pOrTerm->wtFlags &= ~TERM_OR_OK;
103358 if( pOrTerm->leftCursor==iCursor ){
103359 /* This is the 2-bit case and we are on the second iteration and
103360 ** current term is from the first iteration. So skip this term. */
103361 assert( j==1 );
103362 continue;
103364 if( (chngToIN & getMask(pMaskSet, pOrTerm->leftCursor))==0 ){
103365 /* This term must be of the form t1.a==t2.b where t2 is in the
103366 ** chngToIN set but t1 is not. This term will be either preceeded
103367 ** or follwed by an inverted copy (t2.b==t1.a). Skip this term
103368 ** and use its inversion. */
103369 testcase( pOrTerm->wtFlags & TERM_COPIED );
103370 testcase( pOrTerm->wtFlags & TERM_VIRTUAL );
103371 assert( pOrTerm->wtFlags & (TERM_COPIED|TERM_VIRTUAL) );
103372 continue;
103374 iColumn = pOrTerm->u.leftColumn;
103375 iCursor = pOrTerm->leftCursor;
103376 break;
103378 if( i<0 ){
103379 /* No candidate table+column was found. This can only occur
103380 ** on the second iteration */
103381 assert( j==1 );
103382 assert( (chngToIN&(chngToIN-1))==0 );
103383 assert( chngToIN==getMask(pMaskSet, iCursor) );
103384 break;
103386 testcase( j==1 );
103388 /* We have found a candidate table and column. Check to see if that
103389 ** table and column is common to every term in the OR clause */
103390 okToChngToIN = 1;
103391 for(; i>=0 && okToChngToIN; i--, pOrTerm++){
103392 assert( pOrTerm->eOperator==WO_EQ );
103393 if( pOrTerm->leftCursor!=iCursor ){
103394 pOrTerm->wtFlags &= ~TERM_OR_OK;
103395 }else if( pOrTerm->u.leftColumn!=iColumn ){
103396 okToChngToIN = 0;
103397 }else{
103398 int affLeft, affRight;
103399 /* If the right-hand side is also a column, then the affinities
103400 ** of both right and left sides must be such that no type
103401 ** conversions are required on the right. (Ticket #2249)
103403 affRight = sqlite3ExprAffinity(pOrTerm->pExpr->pRight);
103404 affLeft = sqlite3ExprAffinity(pOrTerm->pExpr->pLeft);
103405 if( affRight!=0 && affRight!=affLeft ){
103406 okToChngToIN = 0;
103407 }else{
103408 pOrTerm->wtFlags |= TERM_OR_OK;
103414 /* At this point, okToChngToIN is true if original pTerm satisfies
103415 ** case 1. In that case, construct a new virtual term that is
103416 ** pTerm converted into an IN operator.
103418 ** EV: R-00211-15100
103420 if( okToChngToIN ){
103421 Expr *pDup; /* A transient duplicate expression */
103422 ExprList *pList = 0; /* The RHS of the IN operator */
103423 Expr *pLeft = 0; /* The LHS of the IN operator */
103424 Expr *pNew; /* The complete IN operator */
103426 for(i=pOrWc->nTerm-1, pOrTerm=pOrWc->a; i>=0; i--, pOrTerm++){
103427 if( (pOrTerm->wtFlags & TERM_OR_OK)==0 ) continue;
103428 assert( pOrTerm->eOperator==WO_EQ );
103429 assert( pOrTerm->leftCursor==iCursor );
103430 assert( pOrTerm->u.leftColumn==iColumn );
103431 pDup = sqlite3ExprDup(db, pOrTerm->pExpr->pRight, 0);
103432 pList = sqlite3ExprListAppend(pWC->pParse, pList, pDup);
103433 pLeft = pOrTerm->pExpr->pLeft;
103435 assert( pLeft!=0 );
103436 pDup = sqlite3ExprDup(db, pLeft, 0);
103437 pNew = sqlite3PExpr(pParse, TK_IN, pDup, 0, 0);
103438 if( pNew ){
103439 int idxNew;
103440 transferJoinMarkings(pNew, pExpr);
103441 assert( !ExprHasProperty(pNew, EP_xIsSelect) );
103442 pNew->x.pList = pList;
103443 idxNew = whereClauseInsert(pWC, pNew, TERM_VIRTUAL|TERM_DYNAMIC);
103444 testcase( idxNew==0 );
103445 exprAnalyze(pSrc, pWC, idxNew);
103446 pTerm = &pWC->a[idxTerm];
103447 pWC->a[idxNew].iParent = idxTerm;
103448 pTerm->nChild = 1;
103449 }else{
103450 sqlite3ExprListDelete(db, pList);
103452 pTerm->eOperator = WO_NOOP; /* case 1 trumps case 2 */
103456 #endif /* !SQLITE_OMIT_OR_OPTIMIZATION && !SQLITE_OMIT_SUBQUERY */
103460 ** The input to this routine is an WhereTerm structure with only the
103461 ** "pExpr" field filled in. The job of this routine is to analyze the
103462 ** subexpression and populate all the other fields of the WhereTerm
103463 ** structure.
103465 ** If the expression is of the form "<expr> <op> X" it gets commuted
103466 ** to the standard form of "X <op> <expr>".
103468 ** If the expression is of the form "X <op> Y" where both X and Y are
103469 ** columns, then the original expression is unchanged and a new virtual
103470 ** term of the form "Y <op> X" is added to the WHERE clause and
103471 ** analyzed separately. The original term is marked with TERM_COPIED
103472 ** and the new term is marked with TERM_DYNAMIC (because it's pExpr
103473 ** needs to be freed with the WhereClause) and TERM_VIRTUAL (because it
103474 ** is a commuted copy of a prior term.) The original term has nChild=1
103475 ** and the copy has idxParent set to the index of the original term.
103477 static void exprAnalyze(
103478 SrcList *pSrc, /* the FROM clause */
103479 WhereClause *pWC, /* the WHERE clause */
103480 int idxTerm /* Index of the term to be analyzed */
103482 WhereTerm *pTerm; /* The term to be analyzed */
103483 WhereMaskSet *pMaskSet; /* Set of table index masks */
103484 Expr *pExpr; /* The expression to be analyzed */
103485 Bitmask prereqLeft; /* Prerequesites of the pExpr->pLeft */
103486 Bitmask prereqAll; /* Prerequesites of pExpr */
103487 Bitmask extraRight = 0; /* Extra dependencies on LEFT JOIN */
103488 Expr *pStr1 = 0; /* RHS of LIKE/GLOB operator */
103489 int isComplete = 0; /* RHS of LIKE/GLOB ends with wildcard */
103490 int noCase = 0; /* LIKE/GLOB distinguishes case */
103491 int op; /* Top-level operator. pExpr->op */
103492 Parse *pParse = pWC->pParse; /* Parsing context */
103493 sqlite3 *db = pParse->db; /* Database connection */
103495 if( db->mallocFailed ){
103496 return;
103498 pTerm = &pWC->a[idxTerm];
103499 pMaskSet = pWC->pMaskSet;
103500 pExpr = pTerm->pExpr;
103501 prereqLeft = exprTableUsage(pMaskSet, pExpr->pLeft);
103502 op = pExpr->op;
103503 if( op==TK_IN ){
103504 assert( pExpr->pRight==0 );
103505 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
103506 pTerm->prereqRight = exprSelectTableUsage(pMaskSet, pExpr->x.pSelect);
103507 }else{
103508 pTerm->prereqRight = exprListTableUsage(pMaskSet, pExpr->x.pList);
103510 }else if( op==TK_ISNULL ){
103511 pTerm->prereqRight = 0;
103512 }else{
103513 pTerm->prereqRight = exprTableUsage(pMaskSet, pExpr->pRight);
103515 prereqAll = exprTableUsage(pMaskSet, pExpr);
103516 if( ExprHasProperty(pExpr, EP_FromJoin) ){
103517 Bitmask x = getMask(pMaskSet, pExpr->iRightJoinTable);
103518 prereqAll |= x;
103519 extraRight = x-1; /* ON clause terms may not be used with an index
103520 ** on left table of a LEFT JOIN. Ticket #3015 */
103522 pTerm->prereqAll = prereqAll;
103523 pTerm->leftCursor = -1;
103524 pTerm->iParent = -1;
103525 pTerm->eOperator = 0;
103526 if( allowedOp(op) && (pTerm->prereqRight & prereqLeft)==0 ){
103527 Expr *pLeft = pExpr->pLeft;
103528 Expr *pRight = pExpr->pRight;
103529 if( pLeft->op==TK_COLUMN ){
103530 pTerm->leftCursor = pLeft->iTable;
103531 pTerm->u.leftColumn = pLeft->iColumn;
103532 pTerm->eOperator = operatorMask(op);
103534 if( pRight && pRight->op==TK_COLUMN ){
103535 WhereTerm *pNew;
103536 Expr *pDup;
103537 if( pTerm->leftCursor>=0 ){
103538 int idxNew;
103539 pDup = sqlite3ExprDup(db, pExpr, 0);
103540 if( db->mallocFailed ){
103541 sqlite3ExprDelete(db, pDup);
103542 return;
103544 idxNew = whereClauseInsert(pWC, pDup, TERM_VIRTUAL|TERM_DYNAMIC);
103545 if( idxNew==0 ) return;
103546 pNew = &pWC->a[idxNew];
103547 pNew->iParent = idxTerm;
103548 pTerm = &pWC->a[idxTerm];
103549 pTerm->nChild = 1;
103550 pTerm->wtFlags |= TERM_COPIED;
103551 }else{
103552 pDup = pExpr;
103553 pNew = pTerm;
103555 exprCommute(pParse, pDup);
103556 pLeft = pDup->pLeft;
103557 pNew->leftCursor = pLeft->iTable;
103558 pNew->u.leftColumn = pLeft->iColumn;
103559 testcase( (prereqLeft | extraRight) != prereqLeft );
103560 pNew->prereqRight = prereqLeft | extraRight;
103561 pNew->prereqAll = prereqAll;
103562 pNew->eOperator = operatorMask(pDup->op);
103566 #ifndef SQLITE_OMIT_BETWEEN_OPTIMIZATION
103567 /* If a term is the BETWEEN operator, create two new virtual terms
103568 ** that define the range that the BETWEEN implements. For example:
103570 ** a BETWEEN b AND c
103572 ** is converted into:
103574 ** (a BETWEEN b AND c) AND (a>=b) AND (a<=c)
103576 ** The two new terms are added onto the end of the WhereClause object.
103577 ** The new terms are "dynamic" and are children of the original BETWEEN
103578 ** term. That means that if the BETWEEN term is coded, the children are
103579 ** skipped. Or, if the children are satisfied by an index, the original
103580 ** BETWEEN term is skipped.
103582 else if( pExpr->op==TK_BETWEEN && pWC->op==TK_AND ){
103583 ExprList *pList = pExpr->x.pList;
103584 int i;
103585 static const u8 ops[] = {TK_GE, TK_LE};
103586 assert( pList!=0 );
103587 assert( pList->nExpr==2 );
103588 for(i=0; i<2; i++){
103589 Expr *pNewExpr;
103590 int idxNew;
103591 pNewExpr = sqlite3PExpr(pParse, ops[i],
103592 sqlite3ExprDup(db, pExpr->pLeft, 0),
103593 sqlite3ExprDup(db, pList->a[i].pExpr, 0), 0);
103594 idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
103595 testcase( idxNew==0 );
103596 exprAnalyze(pSrc, pWC, idxNew);
103597 pTerm = &pWC->a[idxTerm];
103598 pWC->a[idxNew].iParent = idxTerm;
103600 pTerm->nChild = 2;
103602 #endif /* SQLITE_OMIT_BETWEEN_OPTIMIZATION */
103604 #if !defined(SQLITE_OMIT_OR_OPTIMIZATION) && !defined(SQLITE_OMIT_SUBQUERY)
103605 /* Analyze a term that is composed of two or more subterms connected by
103606 ** an OR operator.
103608 else if( pExpr->op==TK_OR ){
103609 assert( pWC->op==TK_AND );
103610 exprAnalyzeOrTerm(pSrc, pWC, idxTerm);
103611 pTerm = &pWC->a[idxTerm];
103613 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
103615 #ifndef SQLITE_OMIT_LIKE_OPTIMIZATION
103616 /* Add constraints to reduce the search space on a LIKE or GLOB
103617 ** operator.
103619 ** A like pattern of the form "x LIKE 'abc%'" is changed into constraints
103621 ** x>='abc' AND x<'abd' AND x LIKE 'abc%'
103623 ** The last character of the prefix "abc" is incremented to form the
103624 ** termination condition "abd".
103626 if( pWC->op==TK_AND
103627 && isLikeOrGlob(pParse, pExpr, &pStr1, &isComplete, &noCase)
103629 Expr *pLeft; /* LHS of LIKE/GLOB operator */
103630 Expr *pStr2; /* Copy of pStr1 - RHS of LIKE/GLOB operator */
103631 Expr *pNewExpr1;
103632 Expr *pNewExpr2;
103633 int idxNew1;
103634 int idxNew2;
103635 CollSeq *pColl; /* Collating sequence to use */
103637 pLeft = pExpr->x.pList->a[1].pExpr;
103638 pStr2 = sqlite3ExprDup(db, pStr1, 0);
103639 if( !db->mallocFailed ){
103640 u8 c, *pC; /* Last character before the first wildcard */
103641 pC = (u8*)&pStr2->u.zToken[sqlite3Strlen30(pStr2->u.zToken)-1];
103642 c = *pC;
103643 if( noCase ){
103644 /* The point is to increment the last character before the first
103645 ** wildcard. But if we increment '@', that will push it into the
103646 ** alphabetic range where case conversions will mess up the
103647 ** inequality. To avoid this, make sure to also run the full
103648 ** LIKE on all candidate expressions by clearing the isComplete flag
103650 if( c=='A'-1 ) isComplete = 0; /* EV: R-64339-08207 */
103653 c = sqlite3UpperToLower[c];
103655 *pC = c + 1;
103657 pColl = sqlite3FindCollSeq(db, SQLITE_UTF8, noCase ? "NOCASE" : "BINARY",0);
103658 pNewExpr1 = sqlite3PExpr(pParse, TK_GE,
103659 sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
103660 pStr1, 0);
103661 idxNew1 = whereClauseInsert(pWC, pNewExpr1, TERM_VIRTUAL|TERM_DYNAMIC);
103662 testcase( idxNew1==0 );
103663 exprAnalyze(pSrc, pWC, idxNew1);
103664 pNewExpr2 = sqlite3PExpr(pParse, TK_LT,
103665 sqlite3ExprSetColl(sqlite3ExprDup(db,pLeft,0), pColl),
103666 pStr2, 0);
103667 idxNew2 = whereClauseInsert(pWC, pNewExpr2, TERM_VIRTUAL|TERM_DYNAMIC);
103668 testcase( idxNew2==0 );
103669 exprAnalyze(pSrc, pWC, idxNew2);
103670 pTerm = &pWC->a[idxTerm];
103671 if( isComplete ){
103672 pWC->a[idxNew1].iParent = idxTerm;
103673 pWC->a[idxNew2].iParent = idxTerm;
103674 pTerm->nChild = 2;
103677 #endif /* SQLITE_OMIT_LIKE_OPTIMIZATION */
103679 #ifndef SQLITE_OMIT_VIRTUALTABLE
103680 /* Add a WO_MATCH auxiliary term to the constraint set if the
103681 ** current expression is of the form: column MATCH expr.
103682 ** This information is used by the xBestIndex methods of
103683 ** virtual tables. The native query optimizer does not attempt
103684 ** to do anything with MATCH functions.
103686 if( isMatchOfColumn(pExpr) ){
103687 int idxNew;
103688 Expr *pRight, *pLeft;
103689 WhereTerm *pNewTerm;
103690 Bitmask prereqColumn, prereqExpr;
103692 pRight = pExpr->x.pList->a[0].pExpr;
103693 pLeft = pExpr->x.pList->a[1].pExpr;
103694 prereqExpr = exprTableUsage(pMaskSet, pRight);
103695 prereqColumn = exprTableUsage(pMaskSet, pLeft);
103696 if( (prereqExpr & prereqColumn)==0 ){
103697 Expr *pNewExpr;
103698 pNewExpr = sqlite3PExpr(pParse, TK_MATCH,
103699 0, sqlite3ExprDup(db, pRight, 0), 0);
103700 idxNew = whereClauseInsert(pWC, pNewExpr, TERM_VIRTUAL|TERM_DYNAMIC);
103701 testcase( idxNew==0 );
103702 pNewTerm = &pWC->a[idxNew];
103703 pNewTerm->prereqRight = prereqExpr;
103704 pNewTerm->leftCursor = pLeft->iTable;
103705 pNewTerm->u.leftColumn = pLeft->iColumn;
103706 pNewTerm->eOperator = WO_MATCH;
103707 pNewTerm->iParent = idxTerm;
103708 pTerm = &pWC->a[idxTerm];
103709 pTerm->nChild = 1;
103710 pTerm->wtFlags |= TERM_COPIED;
103711 pNewTerm->prereqAll = pTerm->prereqAll;
103714 #endif /* SQLITE_OMIT_VIRTUALTABLE */
103716 #ifdef SQLITE_ENABLE_STAT3
103717 /* When sqlite_stat3 histogram data is available an operator of the
103718 ** form "x IS NOT NULL" can sometimes be evaluated more efficiently
103719 ** as "x>NULL" if x is not an INTEGER PRIMARY KEY. So construct a
103720 ** virtual term of that form.
103722 ** Note that the virtual term must be tagged with TERM_VNULL. This
103723 ** TERM_VNULL tag will suppress the not-null check at the beginning
103724 ** of the loop. Without the TERM_VNULL flag, the not-null check at
103725 ** the start of the loop will prevent any results from being returned.
103727 if( pExpr->op==TK_NOTNULL
103728 && pExpr->pLeft->op==TK_COLUMN
103729 && pExpr->pLeft->iColumn>=0
103731 Expr *pNewExpr;
103732 Expr *pLeft = pExpr->pLeft;
103733 int idxNew;
103734 WhereTerm *pNewTerm;
103736 pNewExpr = sqlite3PExpr(pParse, TK_GT,
103737 sqlite3ExprDup(db, pLeft, 0),
103738 sqlite3PExpr(pParse, TK_NULL, 0, 0, 0), 0);
103740 idxNew = whereClauseInsert(pWC, pNewExpr,
103741 TERM_VIRTUAL|TERM_DYNAMIC|TERM_VNULL);
103742 if( idxNew ){
103743 pNewTerm = &pWC->a[idxNew];
103744 pNewTerm->prereqRight = 0;
103745 pNewTerm->leftCursor = pLeft->iTable;
103746 pNewTerm->u.leftColumn = pLeft->iColumn;
103747 pNewTerm->eOperator = WO_GT;
103748 pNewTerm->iParent = idxTerm;
103749 pTerm = &pWC->a[idxTerm];
103750 pTerm->nChild = 1;
103751 pTerm->wtFlags |= TERM_COPIED;
103752 pNewTerm->prereqAll = pTerm->prereqAll;
103755 #endif /* SQLITE_ENABLE_STAT */
103757 /* Prevent ON clause terms of a LEFT JOIN from being used to drive
103758 ** an index for tables to the left of the join.
103760 pTerm->prereqRight |= extraRight;
103764 ** Return TRUE if any of the expressions in pList->a[iFirst...] contain
103765 ** a reference to any table other than the iBase table.
103767 static int referencesOtherTables(
103768 ExprList *pList, /* Search expressions in ths list */
103769 WhereMaskSet *pMaskSet, /* Mapping from tables to bitmaps */
103770 int iFirst, /* Be searching with the iFirst-th expression */
103771 int iBase /* Ignore references to this table */
103773 Bitmask allowed = ~getMask(pMaskSet, iBase);
103774 while( iFirst<pList->nExpr ){
103775 if( (exprTableUsage(pMaskSet, pList->a[iFirst++].pExpr)&allowed)!=0 ){
103776 return 1;
103779 return 0;
103783 ** This function searches the expression list passed as the second argument
103784 ** for an expression of type TK_COLUMN that refers to the same column and
103785 ** uses the same collation sequence as the iCol'th column of index pIdx.
103786 ** Argument iBase is the cursor number used for the table that pIdx refers
103787 ** to.
103789 ** If such an expression is found, its index in pList->a[] is returned. If
103790 ** no expression is found, -1 is returned.
103792 static int findIndexCol(
103793 Parse *pParse, /* Parse context */
103794 ExprList *pList, /* Expression list to search */
103795 int iBase, /* Cursor for table associated with pIdx */
103796 Index *pIdx, /* Index to match column of */
103797 int iCol /* Column of index to match */
103799 int i;
103800 const char *zColl = pIdx->azColl[iCol];
103802 for(i=0; i<pList->nExpr; i++){
103803 Expr *p = pList->a[i].pExpr;
103804 if( p->op==TK_COLUMN
103805 && p->iColumn==pIdx->aiColumn[iCol]
103806 && p->iTable==iBase
103808 CollSeq *pColl = sqlite3ExprCollSeq(pParse, p);
103809 if( ALWAYS(pColl) && 0==sqlite3StrICmp(pColl->zName, zColl) ){
103810 return i;
103815 return -1;
103819 ** This routine determines if pIdx can be used to assist in processing a
103820 ** DISTINCT qualifier. In other words, it tests whether or not using this
103821 ** index for the outer loop guarantees that rows with equal values for
103822 ** all expressions in the pDistinct list are delivered grouped together.
103824 ** For example, the query
103826 ** SELECT DISTINCT a, b, c FROM tbl WHERE a = ?
103828 ** can benefit from any index on columns "b" and "c".
103830 static int isDistinctIndex(
103831 Parse *pParse, /* Parsing context */
103832 WhereClause *pWC, /* The WHERE clause */
103833 Index *pIdx, /* The index being considered */
103834 int base, /* Cursor number for the table pIdx is on */
103835 ExprList *pDistinct, /* The DISTINCT expressions */
103836 int nEqCol /* Number of index columns with == */
103838 Bitmask mask = 0; /* Mask of unaccounted for pDistinct exprs */
103839 int i; /* Iterator variable */
103841 if( pIdx->zName==0 || pDistinct==0 || pDistinct->nExpr>=BMS ) return 0;
103842 testcase( pDistinct->nExpr==BMS-1 );
103844 /* Loop through all the expressions in the distinct list. If any of them
103845 ** are not simple column references, return early. Otherwise, test if the
103846 ** WHERE clause contains a "col=X" clause. If it does, the expression
103847 ** can be ignored. If it does not, and the column does not belong to the
103848 ** same table as index pIdx, return early. Finally, if there is no
103849 ** matching "col=X" expression and the column is on the same table as pIdx,
103850 ** set the corresponding bit in variable mask.
103852 for(i=0; i<pDistinct->nExpr; i++){
103853 WhereTerm *pTerm;
103854 Expr *p = pDistinct->a[i].pExpr;
103855 if( p->op!=TK_COLUMN ) return 0;
103856 pTerm = findTerm(pWC, p->iTable, p->iColumn, ~(Bitmask)0, WO_EQ, 0);
103857 if( pTerm ){
103858 Expr *pX = pTerm->pExpr;
103859 CollSeq *p1 = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
103860 CollSeq *p2 = sqlite3ExprCollSeq(pParse, p);
103861 if( p1==p2 ) continue;
103863 if( p->iTable!=base ) return 0;
103864 mask |= (((Bitmask)1) << i);
103867 for(i=nEqCol; mask && i<pIdx->nColumn; i++){
103868 int iExpr = findIndexCol(pParse, pDistinct, base, pIdx, i);
103869 if( iExpr<0 ) break;
103870 mask &= ~(((Bitmask)1) << iExpr);
103873 return (mask==0);
103878 ** Return true if the DISTINCT expression-list passed as the third argument
103879 ** is redundant. A DISTINCT list is redundant if the database contains a
103880 ** UNIQUE index that guarantees that the result of the query will be distinct
103881 ** anyway.
103883 static int isDistinctRedundant(
103884 Parse *pParse,
103885 SrcList *pTabList,
103886 WhereClause *pWC,
103887 ExprList *pDistinct
103889 Table *pTab;
103890 Index *pIdx;
103891 int i;
103892 int iBase;
103894 /* If there is more than one table or sub-select in the FROM clause of
103895 ** this query, then it will not be possible to show that the DISTINCT
103896 ** clause is redundant. */
103897 if( pTabList->nSrc!=1 ) return 0;
103898 iBase = pTabList->a[0].iCursor;
103899 pTab = pTabList->a[0].pTab;
103901 /* If any of the expressions is an IPK column on table iBase, then return
103902 ** true. Note: The (p->iTable==iBase) part of this test may be false if the
103903 ** current SELECT is a correlated sub-query.
103905 for(i=0; i<pDistinct->nExpr; i++){
103906 Expr *p = pDistinct->a[i].pExpr;
103907 if( p->op==TK_COLUMN && p->iTable==iBase && p->iColumn<0 ) return 1;
103910 /* Loop through all indices on the table, checking each to see if it makes
103911 ** the DISTINCT qualifier redundant. It does so if:
103913 ** 1. The index is itself UNIQUE, and
103915 ** 2. All of the columns in the index are either part of the pDistinct
103916 ** list, or else the WHERE clause contains a term of the form "col=X",
103917 ** where X is a constant value. The collation sequences of the
103918 ** comparison and select-list expressions must match those of the index.
103920 for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
103921 if( pIdx->onError==OE_None ) continue;
103922 for(i=0; i<pIdx->nColumn; i++){
103923 int iCol = pIdx->aiColumn[i];
103924 if( 0==findTerm(pWC, iBase, iCol, ~(Bitmask)0, WO_EQ, pIdx)
103925 && 0>findIndexCol(pParse, pDistinct, iBase, pIdx, i)
103927 break;
103930 if( i==pIdx->nColumn ){
103931 /* This index implies that the DISTINCT qualifier is redundant. */
103932 return 1;
103936 return 0;
103940 ** This routine decides if pIdx can be used to satisfy the ORDER BY
103941 ** clause. If it can, it returns 1. If pIdx cannot satisfy the
103942 ** ORDER BY clause, this routine returns 0.
103944 ** pOrderBy is an ORDER BY clause from a SELECT statement. pTab is the
103945 ** left-most table in the FROM clause of that same SELECT statement and
103946 ** the table has a cursor number of "base". pIdx is an index on pTab.
103948 ** nEqCol is the number of columns of pIdx that are used as equality
103949 ** constraints. Any of these columns may be missing from the ORDER BY
103950 ** clause and the match can still be a success.
103952 ** All terms of the ORDER BY that match against the index must be either
103953 ** ASC or DESC. (Terms of the ORDER BY clause past the end of a UNIQUE
103954 ** index do not need to satisfy this constraint.) The *pbRev value is
103955 ** set to 1 if the ORDER BY clause is all DESC and it is set to 0 if
103956 ** the ORDER BY clause is all ASC.
103958 static int isSortingIndex(
103959 Parse *pParse, /* Parsing context */
103960 WhereMaskSet *pMaskSet, /* Mapping from table cursor numbers to bitmaps */
103961 Index *pIdx, /* The index we are testing */
103962 int base, /* Cursor number for the table to be sorted */
103963 ExprList *pOrderBy, /* The ORDER BY clause */
103964 int nEqCol, /* Number of index columns with == constraints */
103965 int wsFlags, /* Index usages flags */
103966 int *pbRev /* Set to 1 if ORDER BY is DESC */
103968 int i, j; /* Loop counters */
103969 int sortOrder = 0; /* XOR of index and ORDER BY sort direction */
103970 int nTerm; /* Number of ORDER BY terms */
103971 struct ExprList_item *pTerm; /* A term of the ORDER BY clause */
103972 sqlite3 *db = pParse->db;
103974 if( !pOrderBy ) return 0;
103975 if( wsFlags & WHERE_COLUMN_IN ) return 0;
103976 if( pIdx->bUnordered ) return 0;
103978 nTerm = pOrderBy->nExpr;
103979 assert( nTerm>0 );
103981 /* Argument pIdx must either point to a 'real' named index structure,
103982 ** or an index structure allocated on the stack by bestBtreeIndex() to
103983 ** represent the rowid index that is part of every table. */
103984 assert( pIdx->zName || (pIdx->nColumn==1 && pIdx->aiColumn[0]==-1) );
103986 /* Match terms of the ORDER BY clause against columns of
103987 ** the index.
103989 ** Note that indices have pIdx->nColumn regular columns plus
103990 ** one additional column containing the rowid. The rowid column
103991 ** of the index is also allowed to match against the ORDER BY
103992 ** clause.
103994 for(i=j=0, pTerm=pOrderBy->a; j<nTerm && i<=pIdx->nColumn; i++){
103995 Expr *pExpr; /* The expression of the ORDER BY pTerm */
103996 CollSeq *pColl; /* The collating sequence of pExpr */
103997 int termSortOrder; /* Sort order for this term */
103998 int iColumn; /* The i-th column of the index. -1 for rowid */
103999 int iSortOrder; /* 1 for DESC, 0 for ASC on the i-th index term */
104000 const char *zColl; /* Name of the collating sequence for i-th index term */
104002 pExpr = pTerm->pExpr;
104003 if( pExpr->op!=TK_COLUMN || pExpr->iTable!=base ){
104004 /* Can not use an index sort on anything that is not a column in the
104005 ** left-most table of the FROM clause */
104006 break;
104008 pColl = sqlite3ExprCollSeq(pParse, pExpr);
104009 if( !pColl ){
104010 pColl = db->pDfltColl;
104012 if( pIdx->zName && i<pIdx->nColumn ){
104013 iColumn = pIdx->aiColumn[i];
104014 if( iColumn==pIdx->pTable->iPKey ){
104015 iColumn = -1;
104017 iSortOrder = pIdx->aSortOrder[i];
104018 zColl = pIdx->azColl[i];
104019 }else{
104020 iColumn = -1;
104021 iSortOrder = 0;
104022 zColl = pColl->zName;
104024 if( pExpr->iColumn!=iColumn || sqlite3StrICmp(pColl->zName, zColl) ){
104025 /* Term j of the ORDER BY clause does not match column i of the index */
104026 if( i<nEqCol ){
104027 /* If an index column that is constrained by == fails to match an
104028 ** ORDER BY term, that is OK. Just ignore that column of the index
104030 continue;
104031 }else if( i==pIdx->nColumn ){
104032 /* Index column i is the rowid. All other terms match. */
104033 break;
104034 }else{
104035 /* If an index column fails to match and is not constrained by ==
104036 ** then the index cannot satisfy the ORDER BY constraint.
104038 return 0;
104041 assert( pIdx->aSortOrder!=0 || iColumn==-1 );
104042 assert( pTerm->sortOrder==0 || pTerm->sortOrder==1 );
104043 assert( iSortOrder==0 || iSortOrder==1 );
104044 termSortOrder = iSortOrder ^ pTerm->sortOrder;
104045 if( i>nEqCol ){
104046 if( termSortOrder!=sortOrder ){
104047 /* Indices can only be used if all ORDER BY terms past the
104048 ** equality constraints are all either DESC or ASC. */
104049 return 0;
104051 }else{
104052 sortOrder = termSortOrder;
104055 pTerm++;
104056 if( iColumn<0 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
104057 /* If the indexed column is the primary key and everything matches
104058 ** so far and none of the ORDER BY terms to the right reference other
104059 ** tables in the join, then we are assured that the index can be used
104060 ** to sort because the primary key is unique and so none of the other
104061 ** columns will make any difference
104063 j = nTerm;
104067 *pbRev = sortOrder!=0;
104068 if( j>=nTerm ){
104069 /* All terms of the ORDER BY clause are covered by this index so
104070 ** this index can be used for sorting. */
104071 return 1;
104073 if( pIdx->onError!=OE_None && i==pIdx->nColumn
104074 && (wsFlags & WHERE_COLUMN_NULL)==0
104075 && !referencesOtherTables(pOrderBy, pMaskSet, j, base) ){
104076 /* All terms of this index match some prefix of the ORDER BY clause
104077 ** and the index is UNIQUE and no terms on the tail of the ORDER BY
104078 ** clause reference other tables in a join. If this is all true then
104079 ** the order by clause is superfluous. Not that if the matching
104080 ** condition is IS NULL then the result is not necessarily unique
104081 ** even on a UNIQUE index, so disallow those cases. */
104082 return 1;
104084 return 0;
104088 ** Prepare a crude estimate of the logarithm of the input value.
104089 ** The results need not be exact. This is only used for estimating
104090 ** the total cost of performing operations with O(logN) or O(NlogN)
104091 ** complexity. Because N is just a guess, it is no great tragedy if
104092 ** logN is a little off.
104094 static double estLog(double N){
104095 double logN = 1;
104096 double x = 10;
104097 while( N>x ){
104098 logN += 1;
104099 x *= 10;
104101 return logN;
104105 ** Two routines for printing the content of an sqlite3_index_info
104106 ** structure. Used for testing and debugging only. If neither
104107 ** SQLITE_TEST or SQLITE_DEBUG are defined, then these routines
104108 ** are no-ops.
104110 #if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(SQLITE_DEBUG)
104111 static void TRACE_IDX_INPUTS(sqlite3_index_info *p){
104112 int i;
104113 if( !sqlite3WhereTrace ) return;
104114 for(i=0; i<p->nConstraint; i++){
104115 sqlite3DebugPrintf(" constraint[%d]: col=%d termid=%d op=%d usabled=%d\n",
104117 p->aConstraint[i].iColumn,
104118 p->aConstraint[i].iTermOffset,
104119 p->aConstraint[i].op,
104120 p->aConstraint[i].usable);
104122 for(i=0; i<p->nOrderBy; i++){
104123 sqlite3DebugPrintf(" orderby[%d]: col=%d desc=%d\n",
104125 p->aOrderBy[i].iColumn,
104126 p->aOrderBy[i].desc);
104129 static void TRACE_IDX_OUTPUTS(sqlite3_index_info *p){
104130 int i;
104131 if( !sqlite3WhereTrace ) return;
104132 for(i=0; i<p->nConstraint; i++){
104133 sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n",
104135 p->aConstraintUsage[i].argvIndex,
104136 p->aConstraintUsage[i].omit);
104138 sqlite3DebugPrintf(" idxNum=%d\n", p->idxNum);
104139 sqlite3DebugPrintf(" idxStr=%s\n", p->idxStr);
104140 sqlite3DebugPrintf(" orderByConsumed=%d\n", p->orderByConsumed);
104141 sqlite3DebugPrintf(" estimatedCost=%g\n", p->estimatedCost);
104143 #else
104144 #define TRACE_IDX_INPUTS(A)
104145 #define TRACE_IDX_OUTPUTS(A)
104146 #endif
104149 ** Required because bestIndex() is called by bestOrClauseIndex()
104151 static void bestIndex(
104152 Parse*, WhereClause*, struct SrcList_item*,
104153 Bitmask, Bitmask, ExprList*, WhereCost*);
104156 ** This routine attempts to find an scanning strategy that can be used
104157 ** to optimize an 'OR' expression that is part of a WHERE clause.
104159 ** The table associated with FROM clause term pSrc may be either a
104160 ** regular B-Tree table or a virtual table.
104162 static void bestOrClauseIndex(
104163 Parse *pParse, /* The parsing context */
104164 WhereClause *pWC, /* The WHERE clause */
104165 struct SrcList_item *pSrc, /* The FROM clause term to search */
104166 Bitmask notReady, /* Mask of cursors not available for indexing */
104167 Bitmask notValid, /* Cursors not available for any purpose */
104168 ExprList *pOrderBy, /* The ORDER BY clause */
104169 WhereCost *pCost /* Lowest cost query plan */
104171 #ifndef SQLITE_OMIT_OR_OPTIMIZATION
104172 const int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */
104173 const Bitmask maskSrc = getMask(pWC->pMaskSet, iCur); /* Bitmask for pSrc */
104174 WhereTerm * const pWCEnd = &pWC->a[pWC->nTerm]; /* End of pWC->a[] */
104175 WhereTerm *pTerm; /* A single term of the WHERE clause */
104177 /* The OR-clause optimization is disallowed if the INDEXED BY or
104178 ** NOT INDEXED clauses are used or if the WHERE_AND_ONLY bit is set. */
104179 if( pSrc->notIndexed || pSrc->pIndex!=0 ){
104180 return;
104182 if( pWC->wctrlFlags & WHERE_AND_ONLY ){
104183 return;
104186 /* Search the WHERE clause terms for a usable WO_OR term. */
104187 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104188 if( pTerm->eOperator==WO_OR
104189 && ((pTerm->prereqAll & ~maskSrc) & notReady)==0
104190 && (pTerm->u.pOrInfo->indexable & maskSrc)!=0
104192 WhereClause * const pOrWC = &pTerm->u.pOrInfo->wc;
104193 WhereTerm * const pOrWCEnd = &pOrWC->a[pOrWC->nTerm];
104194 WhereTerm *pOrTerm;
104195 int flags = WHERE_MULTI_OR;
104196 double rTotal = 0;
104197 double nRow = 0;
104198 Bitmask used = 0;
104200 for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
104201 WhereCost sTermCost;
104202 WHERETRACE(("... Multi-index OR testing for term %d of %d....\n",
104203 (pOrTerm - pOrWC->a), (pTerm - pWC->a)
104205 if( pOrTerm->eOperator==WO_AND ){
104206 WhereClause *pAndWC = &pOrTerm->u.pAndInfo->wc;
104207 bestIndex(pParse, pAndWC, pSrc, notReady, notValid, 0, &sTermCost);
104208 }else if( pOrTerm->leftCursor==iCur ){
104209 WhereClause tempWC;
104210 tempWC.pParse = pWC->pParse;
104211 tempWC.pMaskSet = pWC->pMaskSet;
104212 tempWC.pOuter = pWC;
104213 tempWC.op = TK_AND;
104214 tempWC.a = pOrTerm;
104215 tempWC.wctrlFlags = 0;
104216 tempWC.nTerm = 1;
104217 bestIndex(pParse, &tempWC, pSrc, notReady, notValid, 0, &sTermCost);
104218 }else{
104219 continue;
104221 rTotal += sTermCost.rCost;
104222 nRow += sTermCost.plan.nRow;
104223 used |= sTermCost.used;
104224 if( rTotal>=pCost->rCost ) break;
104227 /* If there is an ORDER BY clause, increase the scan cost to account
104228 ** for the cost of the sort. */
104229 if( pOrderBy!=0 ){
104230 WHERETRACE(("... sorting increases OR cost %.9g to %.9g\n",
104231 rTotal, rTotal+nRow*estLog(nRow)));
104232 rTotal += nRow*estLog(nRow);
104235 /* If the cost of scanning using this OR term for optimization is
104236 ** less than the current cost stored in pCost, replace the contents
104237 ** of pCost. */
104238 WHERETRACE(("... multi-index OR cost=%.9g nrow=%.9g\n", rTotal, nRow));
104239 if( rTotal<pCost->rCost ){
104240 pCost->rCost = rTotal;
104241 pCost->used = used;
104242 pCost->plan.nRow = nRow;
104243 pCost->plan.wsFlags = flags;
104244 pCost->plan.u.pTerm = pTerm;
104248 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
104251 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
104253 ** Return TRUE if the WHERE clause term pTerm is of a form where it
104254 ** could be used with an index to access pSrc, assuming an appropriate
104255 ** index existed.
104257 static int termCanDriveIndex(
104258 WhereTerm *pTerm, /* WHERE clause term to check */
104259 struct SrcList_item *pSrc, /* Table we are trying to access */
104260 Bitmask notReady /* Tables in outer loops of the join */
104262 char aff;
104263 if( pTerm->leftCursor!=pSrc->iCursor ) return 0;
104264 if( pTerm->eOperator!=WO_EQ ) return 0;
104265 if( (pTerm->prereqRight & notReady)!=0 ) return 0;
104266 aff = pSrc->pTab->aCol[pTerm->u.leftColumn].affinity;
104267 if( !sqlite3IndexAffinityOk(pTerm->pExpr, aff) ) return 0;
104268 return 1;
104270 #endif
104272 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
104274 ** If the query plan for pSrc specified in pCost is a full table scan
104275 ** and indexing is allows (if there is no NOT INDEXED clause) and it
104276 ** possible to construct a transient index that would perform better
104277 ** than a full table scan even when the cost of constructing the index
104278 ** is taken into account, then alter the query plan to use the
104279 ** transient index.
104281 static void bestAutomaticIndex(
104282 Parse *pParse, /* The parsing context */
104283 WhereClause *pWC, /* The WHERE clause */
104284 struct SrcList_item *pSrc, /* The FROM clause term to search */
104285 Bitmask notReady, /* Mask of cursors that are not available */
104286 WhereCost *pCost /* Lowest cost query plan */
104288 double nTableRow; /* Rows in the input table */
104289 double logN; /* log(nTableRow) */
104290 double costTempIdx; /* per-query cost of the transient index */
104291 WhereTerm *pTerm; /* A single term of the WHERE clause */
104292 WhereTerm *pWCEnd; /* End of pWC->a[] */
104293 Table *pTable; /* Table tht might be indexed */
104295 if( pParse->nQueryLoop<=(double)1 ){
104296 /* There is no point in building an automatic index for a single scan */
104297 return;
104299 if( (pParse->db->flags & SQLITE_AutoIndex)==0 ){
104300 /* Automatic indices are disabled at run-time */
104301 return;
104303 if( (pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)!=0 ){
104304 /* We already have some kind of index in use for this query. */
104305 return;
104307 if( pSrc->notIndexed ){
104308 /* The NOT INDEXED clause appears in the SQL. */
104309 return;
104311 if( pSrc->isCorrelated ){
104312 /* The source is a correlated sub-query. No point in indexing it. */
104313 return;
104316 assert( pParse->nQueryLoop >= (double)1 );
104317 pTable = pSrc->pTab;
104318 nTableRow = pTable->nRowEst;
104319 logN = estLog(nTableRow);
104320 costTempIdx = 2*logN*(nTableRow/pParse->nQueryLoop + 1);
104321 if( costTempIdx>=pCost->rCost ){
104322 /* The cost of creating the transient table would be greater than
104323 ** doing the full table scan */
104324 return;
104327 /* Search for any equality comparison term */
104328 pWCEnd = &pWC->a[pWC->nTerm];
104329 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104330 if( termCanDriveIndex(pTerm, pSrc, notReady) ){
104331 WHERETRACE(("auto-index reduces cost from %.1f to %.1f\n",
104332 pCost->rCost, costTempIdx));
104333 pCost->rCost = costTempIdx;
104334 pCost->plan.nRow = logN + 1;
104335 pCost->plan.wsFlags = WHERE_TEMP_INDEX;
104336 pCost->used = pTerm->prereqRight;
104337 break;
104341 #else
104342 # define bestAutomaticIndex(A,B,C,D,E) /* no-op */
104343 #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
104346 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
104348 ** Generate code to construct the Index object for an automatic index
104349 ** and to set up the WhereLevel object pLevel so that the code generator
104350 ** makes use of the automatic index.
104352 static void constructAutomaticIndex(
104353 Parse *pParse, /* The parsing context */
104354 WhereClause *pWC, /* The WHERE clause */
104355 struct SrcList_item *pSrc, /* The FROM clause term to get the next index */
104356 Bitmask notReady, /* Mask of cursors that are not available */
104357 WhereLevel *pLevel /* Write new index here */
104359 int nColumn; /* Number of columns in the constructed index */
104360 WhereTerm *pTerm; /* A single term of the WHERE clause */
104361 WhereTerm *pWCEnd; /* End of pWC->a[] */
104362 int nByte; /* Byte of memory needed for pIdx */
104363 Index *pIdx; /* Object describing the transient index */
104364 Vdbe *v; /* Prepared statement under construction */
104365 int addrInit; /* Address of the initialization bypass jump */
104366 Table *pTable; /* The table being indexed */
104367 KeyInfo *pKeyinfo; /* Key information for the index */
104368 int addrTop; /* Top of the index fill loop */
104369 int regRecord; /* Register holding an index record */
104370 int n; /* Column counter */
104371 int i; /* Loop counter */
104372 int mxBitCol; /* Maximum column in pSrc->colUsed */
104373 CollSeq *pColl; /* Collating sequence to on a column */
104374 Bitmask idxCols; /* Bitmap of columns used for indexing */
104375 Bitmask extraCols; /* Bitmap of additional columns */
104377 /* Generate code to skip over the creation and initialization of the
104378 ** transient index on 2nd and subsequent iterations of the loop. */
104379 v = pParse->pVdbe;
104380 assert( v!=0 );
104381 addrInit = sqlite3CodeOnce(pParse);
104383 /* Count the number of columns that will be added to the index
104384 ** and used to match WHERE clause constraints */
104385 nColumn = 0;
104386 pTable = pSrc->pTab;
104387 pWCEnd = &pWC->a[pWC->nTerm];
104388 idxCols = 0;
104389 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104390 if( termCanDriveIndex(pTerm, pSrc, notReady) ){
104391 int iCol = pTerm->u.leftColumn;
104392 Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
104393 testcase( iCol==BMS );
104394 testcase( iCol==BMS-1 );
104395 if( (idxCols & cMask)==0 ){
104396 nColumn++;
104397 idxCols |= cMask;
104401 assert( nColumn>0 );
104402 pLevel->plan.nEq = nColumn;
104404 /* Count the number of additional columns needed to create a
104405 ** covering index. A "covering index" is an index that contains all
104406 ** columns that are needed by the query. With a covering index, the
104407 ** original table never needs to be accessed. Automatic indices must
104408 ** be a covering index because the index will not be updated if the
104409 ** original table changes and the index and table cannot both be used
104410 ** if they go out of sync.
104412 extraCols = pSrc->colUsed & (~idxCols | (((Bitmask)1)<<(BMS-1)));
104413 mxBitCol = (pTable->nCol >= BMS-1) ? BMS-1 : pTable->nCol;
104414 testcase( pTable->nCol==BMS-1 );
104415 testcase( pTable->nCol==BMS-2 );
104416 for(i=0; i<mxBitCol; i++){
104417 if( extraCols & (((Bitmask)1)<<i) ) nColumn++;
104419 if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
104420 nColumn += pTable->nCol - BMS + 1;
104422 pLevel->plan.wsFlags |= WHERE_COLUMN_EQ | WHERE_IDX_ONLY | WO_EQ;
104424 /* Construct the Index object to describe this index */
104425 nByte = sizeof(Index);
104426 nByte += nColumn*sizeof(int); /* Index.aiColumn */
104427 nByte += nColumn*sizeof(char*); /* Index.azColl */
104428 nByte += nColumn; /* Index.aSortOrder */
104429 pIdx = sqlite3DbMallocZero(pParse->db, nByte);
104430 if( pIdx==0 ) return;
104431 pLevel->plan.u.pIdx = pIdx;
104432 pIdx->azColl = (char**)&pIdx[1];
104433 pIdx->aiColumn = (int*)&pIdx->azColl[nColumn];
104434 pIdx->aSortOrder = (u8*)&pIdx->aiColumn[nColumn];
104435 pIdx->zName = "auto-index";
104436 pIdx->nColumn = nColumn;
104437 pIdx->pTable = pTable;
104438 n = 0;
104439 idxCols = 0;
104440 for(pTerm=pWC->a; pTerm<pWCEnd; pTerm++){
104441 if( termCanDriveIndex(pTerm, pSrc, notReady) ){
104442 int iCol = pTerm->u.leftColumn;
104443 Bitmask cMask = iCol>=BMS ? ((Bitmask)1)<<(BMS-1) : ((Bitmask)1)<<iCol;
104444 if( (idxCols & cMask)==0 ){
104445 Expr *pX = pTerm->pExpr;
104446 idxCols |= cMask;
104447 pIdx->aiColumn[n] = pTerm->u.leftColumn;
104448 pColl = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
104449 pIdx->azColl[n] = ALWAYS(pColl) ? pColl->zName : "BINARY";
104454 assert( (u32)n==pLevel->plan.nEq );
104456 /* Add additional columns needed to make the automatic index into
104457 ** a covering index */
104458 for(i=0; i<mxBitCol; i++){
104459 if( extraCols & (((Bitmask)1)<<i) ){
104460 pIdx->aiColumn[n] = i;
104461 pIdx->azColl[n] = "BINARY";
104465 if( pSrc->colUsed & (((Bitmask)1)<<(BMS-1)) ){
104466 for(i=BMS-1; i<pTable->nCol; i++){
104467 pIdx->aiColumn[n] = i;
104468 pIdx->azColl[n] = "BINARY";
104472 assert( n==nColumn );
104474 /* Create the automatic index */
104475 pKeyinfo = sqlite3IndexKeyinfo(pParse, pIdx);
104476 assert( pLevel->iIdxCur>=0 );
104477 sqlite3VdbeAddOp4(v, OP_OpenAutoindex, pLevel->iIdxCur, nColumn+1, 0,
104478 (char*)pKeyinfo, P4_KEYINFO_HANDOFF);
104479 VdbeComment((v, "for %s", pTable->zName));
104481 /* Fill the automatic index with content */
104482 addrTop = sqlite3VdbeAddOp1(v, OP_Rewind, pLevel->iTabCur);
104483 regRecord = sqlite3GetTempReg(pParse);
104484 sqlite3GenerateIndexKey(pParse, pIdx, pLevel->iTabCur, regRecord, 1);
104485 sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
104486 sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
104487 sqlite3VdbeAddOp2(v, OP_Next, pLevel->iTabCur, addrTop+1);
104488 sqlite3VdbeChangeP5(v, SQLITE_STMTSTATUS_AUTOINDEX);
104489 sqlite3VdbeJumpHere(v, addrTop);
104490 sqlite3ReleaseTempReg(pParse, regRecord);
104492 /* Jump here when skipping the initialization */
104493 sqlite3VdbeJumpHere(v, addrInit);
104495 #endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
104497 #ifndef SQLITE_OMIT_VIRTUALTABLE
104499 ** Allocate and populate an sqlite3_index_info structure. It is the
104500 ** responsibility of the caller to eventually release the structure
104501 ** by passing the pointer returned by this function to sqlite3_free().
104503 static sqlite3_index_info *allocateIndexInfo(
104504 Parse *pParse,
104505 WhereClause *pWC,
104506 struct SrcList_item *pSrc,
104507 ExprList *pOrderBy
104509 int i, j;
104510 int nTerm;
104511 struct sqlite3_index_constraint *pIdxCons;
104512 struct sqlite3_index_orderby *pIdxOrderBy;
104513 struct sqlite3_index_constraint_usage *pUsage;
104514 WhereTerm *pTerm;
104515 int nOrderBy;
104516 sqlite3_index_info *pIdxInfo;
104518 WHERETRACE(("Recomputing index info for %s...\n", pSrc->pTab->zName));
104520 /* Count the number of possible WHERE clause constraints referring
104521 ** to this virtual table */
104522 for(i=nTerm=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
104523 if( pTerm->leftCursor != pSrc->iCursor ) continue;
104524 assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
104525 testcase( pTerm->eOperator==WO_IN );
104526 testcase( pTerm->eOperator==WO_ISNULL );
104527 if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
104528 if( pTerm->wtFlags & TERM_VNULL ) continue;
104529 nTerm++;
104532 /* If the ORDER BY clause contains only columns in the current
104533 ** virtual table then allocate space for the aOrderBy part of
104534 ** the sqlite3_index_info structure.
104536 nOrderBy = 0;
104537 if( pOrderBy ){
104538 for(i=0; i<pOrderBy->nExpr; i++){
104539 Expr *pExpr = pOrderBy->a[i].pExpr;
104540 if( pExpr->op!=TK_COLUMN || pExpr->iTable!=pSrc->iCursor ) break;
104542 if( i==pOrderBy->nExpr ){
104543 nOrderBy = pOrderBy->nExpr;
104547 /* Allocate the sqlite3_index_info structure
104549 pIdxInfo = sqlite3DbMallocZero(pParse->db, sizeof(*pIdxInfo)
104550 + (sizeof(*pIdxCons) + sizeof(*pUsage))*nTerm
104551 + sizeof(*pIdxOrderBy)*nOrderBy );
104552 if( pIdxInfo==0 ){
104553 sqlite3ErrorMsg(pParse, "out of memory");
104554 /* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
104555 return 0;
104558 /* Initialize the structure. The sqlite3_index_info structure contains
104559 ** many fields that are declared "const" to prevent xBestIndex from
104560 ** changing them. We have to do some funky casting in order to
104561 ** initialize those fields.
104563 pIdxCons = (struct sqlite3_index_constraint*)&pIdxInfo[1];
104564 pIdxOrderBy = (struct sqlite3_index_orderby*)&pIdxCons[nTerm];
104565 pUsage = (struct sqlite3_index_constraint_usage*)&pIdxOrderBy[nOrderBy];
104566 *(int*)&pIdxInfo->nConstraint = nTerm;
104567 *(int*)&pIdxInfo->nOrderBy = nOrderBy;
104568 *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint = pIdxCons;
104569 *(struct sqlite3_index_orderby**)&pIdxInfo->aOrderBy = pIdxOrderBy;
104570 *(struct sqlite3_index_constraint_usage**)&pIdxInfo->aConstraintUsage =
104571 pUsage;
104573 for(i=j=0, pTerm=pWC->a; i<pWC->nTerm; i++, pTerm++){
104574 if( pTerm->leftCursor != pSrc->iCursor ) continue;
104575 assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
104576 testcase( pTerm->eOperator==WO_IN );
104577 testcase( pTerm->eOperator==WO_ISNULL );
104578 if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
104579 if( pTerm->wtFlags & TERM_VNULL ) continue;
104580 pIdxCons[j].iColumn = pTerm->u.leftColumn;
104581 pIdxCons[j].iTermOffset = i;
104582 pIdxCons[j].op = (u8)pTerm->eOperator;
104583 /* The direct assignment in the previous line is possible only because
104584 ** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The
104585 ** following asserts verify this fact. */
104586 assert( WO_EQ==SQLITE_INDEX_CONSTRAINT_EQ );
104587 assert( WO_LT==SQLITE_INDEX_CONSTRAINT_LT );
104588 assert( WO_LE==SQLITE_INDEX_CONSTRAINT_LE );
104589 assert( WO_GT==SQLITE_INDEX_CONSTRAINT_GT );
104590 assert( WO_GE==SQLITE_INDEX_CONSTRAINT_GE );
104591 assert( WO_MATCH==SQLITE_INDEX_CONSTRAINT_MATCH );
104592 assert( pTerm->eOperator & (WO_EQ|WO_LT|WO_LE|WO_GT|WO_GE|WO_MATCH) );
104595 for(i=0; i<nOrderBy; i++){
104596 Expr *pExpr = pOrderBy->a[i].pExpr;
104597 pIdxOrderBy[i].iColumn = pExpr->iColumn;
104598 pIdxOrderBy[i].desc = pOrderBy->a[i].sortOrder;
104601 return pIdxInfo;
104605 ** The table object reference passed as the second argument to this function
104606 ** must represent a virtual table. This function invokes the xBestIndex()
104607 ** method of the virtual table with the sqlite3_index_info pointer passed
104608 ** as the argument.
104610 ** If an error occurs, pParse is populated with an error message and a
104611 ** non-zero value is returned. Otherwise, 0 is returned and the output
104612 ** part of the sqlite3_index_info structure is left populated.
104614 ** Whether or not an error is returned, it is the responsibility of the
104615 ** caller to eventually free p->idxStr if p->needToFreeIdxStr indicates
104616 ** that this is required.
104618 static int vtabBestIndex(Parse *pParse, Table *pTab, sqlite3_index_info *p){
104619 sqlite3_vtab *pVtab = sqlite3GetVTable(pParse->db, pTab)->pVtab;
104620 int i;
104621 int rc;
104623 WHERETRACE(("xBestIndex for %s\n", pTab->zName));
104624 TRACE_IDX_INPUTS(p);
104625 rc = pVtab->pModule->xBestIndex(pVtab, p);
104626 TRACE_IDX_OUTPUTS(p);
104628 if( rc!=SQLITE_OK ){
104629 if( rc==SQLITE_NOMEM ){
104630 pParse->db->mallocFailed = 1;
104631 }else if( !pVtab->zErrMsg ){
104632 sqlite3ErrorMsg(pParse, "%s", sqlite3ErrStr(rc));
104633 }else{
104634 sqlite3ErrorMsg(pParse, "%s", pVtab->zErrMsg);
104637 sqlite3_free(pVtab->zErrMsg);
104638 pVtab->zErrMsg = 0;
104640 for(i=0; i<p->nConstraint; i++){
104641 if( !p->aConstraint[i].usable && p->aConstraintUsage[i].argvIndex>0 ){
104642 sqlite3ErrorMsg(pParse,
104643 "table %s: xBestIndex returned an invalid plan", pTab->zName);
104647 return pParse->nErr;
104652 ** Compute the best index for a virtual table.
104654 ** The best index is computed by the xBestIndex method of the virtual
104655 ** table module. This routine is really just a wrapper that sets up
104656 ** the sqlite3_index_info structure that is used to communicate with
104657 ** xBestIndex.
104659 ** In a join, this routine might be called multiple times for the
104660 ** same virtual table. The sqlite3_index_info structure is created
104661 ** and initialized on the first invocation and reused on all subsequent
104662 ** invocations. The sqlite3_index_info structure is also used when
104663 ** code is generated to access the virtual table. The whereInfoDelete()
104664 ** routine takes care of freeing the sqlite3_index_info structure after
104665 ** everybody has finished with it.
104667 static void bestVirtualIndex(
104668 Parse *pParse, /* The parsing context */
104669 WhereClause *pWC, /* The WHERE clause */
104670 struct SrcList_item *pSrc, /* The FROM clause term to search */
104671 Bitmask notReady, /* Mask of cursors not available for index */
104672 Bitmask notValid, /* Cursors not valid for any purpose */
104673 ExprList *pOrderBy, /* The order by clause */
104674 WhereCost *pCost, /* Lowest cost query plan */
104675 sqlite3_index_info **ppIdxInfo /* Index information passed to xBestIndex */
104677 Table *pTab = pSrc->pTab;
104678 sqlite3_index_info *pIdxInfo;
104679 struct sqlite3_index_constraint *pIdxCons;
104680 struct sqlite3_index_constraint_usage *pUsage;
104681 WhereTerm *pTerm;
104682 int i, j;
104683 int nOrderBy;
104684 double rCost;
104686 /* Make sure wsFlags is initialized to some sane value. Otherwise, if the
104687 ** malloc in allocateIndexInfo() fails and this function returns leaving
104688 ** wsFlags in an uninitialized state, the caller may behave unpredictably.
104690 memset(pCost, 0, sizeof(*pCost));
104691 pCost->plan.wsFlags = WHERE_VIRTUALTABLE;
104693 /* If the sqlite3_index_info structure has not been previously
104694 ** allocated and initialized, then allocate and initialize it now.
104696 pIdxInfo = *ppIdxInfo;
104697 if( pIdxInfo==0 ){
104698 *ppIdxInfo = pIdxInfo = allocateIndexInfo(pParse, pWC, pSrc, pOrderBy);
104700 if( pIdxInfo==0 ){
104701 return;
104704 /* At this point, the sqlite3_index_info structure that pIdxInfo points
104705 ** to will have been initialized, either during the current invocation or
104706 ** during some prior invocation. Now we just have to customize the
104707 ** details of pIdxInfo for the current invocation and pass it to
104708 ** xBestIndex.
104711 /* The module name must be defined. Also, by this point there must
104712 ** be a pointer to an sqlite3_vtab structure. Otherwise
104713 ** sqlite3ViewGetColumnNames() would have picked up the error.
104715 assert( pTab->azModuleArg && pTab->azModuleArg[0] );
104716 assert( sqlite3GetVTable(pParse->db, pTab) );
104718 /* Set the aConstraint[].usable fields and initialize all
104719 ** output variables to zero.
104721 ** aConstraint[].usable is true for constraints where the right-hand
104722 ** side contains only references to tables to the left of the current
104723 ** table. In other words, if the constraint is of the form:
104725 ** column = expr
104727 ** and we are evaluating a join, then the constraint on column is
104728 ** only valid if all tables referenced in expr occur to the left
104729 ** of the table containing column.
104731 ** The aConstraints[] array contains entries for all constraints
104732 ** on the current table. That way we only have to compute it once
104733 ** even though we might try to pick the best index multiple times.
104734 ** For each attempt at picking an index, the order of tables in the
104735 ** join might be different so we have to recompute the usable flag
104736 ** each time.
104738 pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
104739 pUsage = pIdxInfo->aConstraintUsage;
104740 for(i=0; i<pIdxInfo->nConstraint; i++, pIdxCons++){
104741 j = pIdxCons->iTermOffset;
104742 pTerm = &pWC->a[j];
104743 pIdxCons->usable = (pTerm->prereqRight&notReady) ? 0 : 1;
104745 memset(pUsage, 0, sizeof(pUsage[0])*pIdxInfo->nConstraint);
104746 if( pIdxInfo->needToFreeIdxStr ){
104747 sqlite3_free(pIdxInfo->idxStr);
104749 pIdxInfo->idxStr = 0;
104750 pIdxInfo->idxNum = 0;
104751 pIdxInfo->needToFreeIdxStr = 0;
104752 pIdxInfo->orderByConsumed = 0;
104753 /* ((double)2) In case of SQLITE_OMIT_FLOATING_POINT... */
104754 pIdxInfo->estimatedCost = SQLITE_BIG_DBL / ((double)2);
104755 nOrderBy = pIdxInfo->nOrderBy;
104756 if( !pOrderBy ){
104757 pIdxInfo->nOrderBy = 0;
104760 if( vtabBestIndex(pParse, pTab, pIdxInfo) ){
104761 return;
104764 pIdxCons = *(struct sqlite3_index_constraint**)&pIdxInfo->aConstraint;
104765 for(i=0; i<pIdxInfo->nConstraint; i++){
104766 if( pUsage[i].argvIndex>0 ){
104767 pCost->used |= pWC->a[pIdxCons[i].iTermOffset].prereqRight;
104771 /* If there is an ORDER BY clause, and the selected virtual table index
104772 ** does not satisfy it, increase the cost of the scan accordingly. This
104773 ** matches the processing for non-virtual tables in bestBtreeIndex().
104775 rCost = pIdxInfo->estimatedCost;
104776 if( pOrderBy && pIdxInfo->orderByConsumed==0 ){
104777 rCost += estLog(rCost)*rCost;
104780 /* The cost is not allowed to be larger than SQLITE_BIG_DBL (the
104781 ** inital value of lowestCost in this loop. If it is, then the
104782 ** (cost<lowestCost) test below will never be true.
104784 ** Use "(double)2" instead of "2.0" in case OMIT_FLOATING_POINT
104785 ** is defined.
104787 if( (SQLITE_BIG_DBL/((double)2))<rCost ){
104788 pCost->rCost = (SQLITE_BIG_DBL/((double)2));
104789 }else{
104790 pCost->rCost = rCost;
104792 pCost->plan.u.pVtabIdx = pIdxInfo;
104793 if( pIdxInfo->orderByConsumed ){
104794 pCost->plan.wsFlags |= WHERE_ORDERBY;
104796 pCost->plan.nEq = 0;
104797 pIdxInfo->nOrderBy = nOrderBy;
104799 /* Try to find a more efficient access pattern by using multiple indexes
104800 ** to optimize an OR expression within the WHERE clause.
104802 bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
104804 #endif /* SQLITE_OMIT_VIRTUALTABLE */
104806 #ifdef SQLITE_ENABLE_STAT3
104808 ** Estimate the location of a particular key among all keys in an
104809 ** index. Store the results in aStat as follows:
104811 ** aStat[0] Est. number of rows less than pVal
104812 ** aStat[1] Est. number of rows equal to pVal
104814 ** Return SQLITE_OK on success.
104816 static int whereKeyStats(
104817 Parse *pParse, /* Database connection */
104818 Index *pIdx, /* Index to consider domain of */
104819 sqlite3_value *pVal, /* Value to consider */
104820 int roundUp, /* Round up if true. Round down if false */
104821 tRowcnt *aStat /* OUT: stats written here */
104823 tRowcnt n;
104824 IndexSample *aSample;
104825 int i, eType;
104826 int isEq = 0;
104827 i64 v;
104828 double r, rS;
104830 assert( roundUp==0 || roundUp==1 );
104831 assert( pIdx->nSample>0 );
104832 if( pVal==0 ) return SQLITE_ERROR;
104833 n = pIdx->aiRowEst[0];
104834 aSample = pIdx->aSample;
104835 eType = sqlite3_value_type(pVal);
104837 if( eType==SQLITE_INTEGER ){
104838 v = sqlite3_value_int64(pVal);
104839 r = (i64)v;
104840 for(i=0; i<pIdx->nSample; i++){
104841 if( aSample[i].eType==SQLITE_NULL ) continue;
104842 if( aSample[i].eType>=SQLITE_TEXT ) break;
104843 if( aSample[i].eType==SQLITE_INTEGER ){
104844 if( aSample[i].u.i>=v ){
104845 isEq = aSample[i].u.i==v;
104846 break;
104848 }else{
104849 assert( aSample[i].eType==SQLITE_FLOAT );
104850 if( aSample[i].u.r>=r ){
104851 isEq = aSample[i].u.r==r;
104852 break;
104856 }else if( eType==SQLITE_FLOAT ){
104857 r = sqlite3_value_double(pVal);
104858 for(i=0; i<pIdx->nSample; i++){
104859 if( aSample[i].eType==SQLITE_NULL ) continue;
104860 if( aSample[i].eType>=SQLITE_TEXT ) break;
104861 if( aSample[i].eType==SQLITE_FLOAT ){
104862 rS = aSample[i].u.r;
104863 }else{
104864 rS = aSample[i].u.i;
104866 if( rS>=r ){
104867 isEq = rS==r;
104868 break;
104871 }else if( eType==SQLITE_NULL ){
104872 i = 0;
104873 if( aSample[0].eType==SQLITE_NULL ) isEq = 1;
104874 }else{
104875 assert( eType==SQLITE_TEXT || eType==SQLITE_BLOB );
104876 for(i=0; i<pIdx->nSample; i++){
104877 if( aSample[i].eType==SQLITE_TEXT || aSample[i].eType==SQLITE_BLOB ){
104878 break;
104881 if( i<pIdx->nSample ){
104882 sqlite3 *db = pParse->db;
104883 CollSeq *pColl;
104884 const u8 *z;
104885 if( eType==SQLITE_BLOB ){
104886 z = (const u8 *)sqlite3_value_blob(pVal);
104887 pColl = db->pDfltColl;
104888 assert( pColl->enc==SQLITE_UTF8 );
104889 }else{
104890 pColl = sqlite3GetCollSeq(db, SQLITE_UTF8, 0, *pIdx->azColl);
104891 if( pColl==0 ){
104892 sqlite3ErrorMsg(pParse, "no such collation sequence: %s",
104893 *pIdx->azColl);
104894 return SQLITE_ERROR;
104896 z = (const u8 *)sqlite3ValueText(pVal, pColl->enc);
104897 if( !z ){
104898 return SQLITE_NOMEM;
104900 assert( z && pColl && pColl->xCmp );
104902 n = sqlite3ValueBytes(pVal, pColl->enc);
104904 for(; i<pIdx->nSample; i++){
104905 int c;
104906 int eSampletype = aSample[i].eType;
104907 if( eSampletype<eType ) continue;
104908 if( eSampletype!=eType ) break;
104909 #ifndef SQLITE_OMIT_UTF16
104910 if( pColl->enc!=SQLITE_UTF8 ){
104911 int nSample;
104912 char *zSample = sqlite3Utf8to16(
104913 db, pColl->enc, aSample[i].u.z, aSample[i].nByte, &nSample
104915 if( !zSample ){
104916 assert( db->mallocFailed );
104917 return SQLITE_NOMEM;
104919 c = pColl->xCmp(pColl->pUser, nSample, zSample, n, z);
104920 sqlite3DbFree(db, zSample);
104921 }else
104922 #endif
104924 c = pColl->xCmp(pColl->pUser, aSample[i].nByte, aSample[i].u.z, n, z);
104926 if( c>=0 ){
104927 if( c==0 ) isEq = 1;
104928 break;
104934 /* At this point, aSample[i] is the first sample that is greater than
104935 ** or equal to pVal. Or if i==pIdx->nSample, then all samples are less
104936 ** than pVal. If aSample[i]==pVal, then isEq==1.
104938 if( isEq ){
104939 assert( i<pIdx->nSample );
104940 aStat[0] = aSample[i].nLt;
104941 aStat[1] = aSample[i].nEq;
104942 }else{
104943 tRowcnt iLower, iUpper, iGap;
104944 if( i==0 ){
104945 iLower = 0;
104946 iUpper = aSample[0].nLt;
104947 }else{
104948 iUpper = i>=pIdx->nSample ? n : aSample[i].nLt;
104949 iLower = aSample[i-1].nEq + aSample[i-1].nLt;
104951 aStat[1] = pIdx->avgEq;
104952 if( iLower>=iUpper ){
104953 iGap = 0;
104954 }else{
104955 iGap = iUpper - iLower;
104957 if( roundUp ){
104958 iGap = (iGap*2)/3;
104959 }else{
104960 iGap = iGap/3;
104962 aStat[0] = iLower + iGap;
104964 return SQLITE_OK;
104966 #endif /* SQLITE_ENABLE_STAT3 */
104969 ** If expression pExpr represents a literal value, set *pp to point to
104970 ** an sqlite3_value structure containing the same value, with affinity
104971 ** aff applied to it, before returning. It is the responsibility of the
104972 ** caller to eventually release this structure by passing it to
104973 ** sqlite3ValueFree().
104975 ** If the current parse is a recompile (sqlite3Reprepare()) and pExpr
104976 ** is an SQL variable that currently has a non-NULL value bound to it,
104977 ** create an sqlite3_value structure containing this value, again with
104978 ** affinity aff applied to it, instead.
104980 ** If neither of the above apply, set *pp to NULL.
104982 ** If an error occurs, return an error code. Otherwise, SQLITE_OK.
104984 #ifdef SQLITE_ENABLE_STAT3
104985 static int valueFromExpr(
104986 Parse *pParse,
104987 Expr *pExpr,
104988 u8 aff,
104989 sqlite3_value **pp
104991 if( pExpr->op==TK_VARIABLE
104992 || (pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE)
104994 int iVar = pExpr->iColumn;
104995 sqlite3VdbeSetVarmask(pParse->pVdbe, iVar);
104996 *pp = sqlite3VdbeGetValue(pParse->pReprepare, iVar, aff);
104997 return SQLITE_OK;
104999 return sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, aff, pp);
105001 #endif
105004 ** This function is used to estimate the number of rows that will be visited
105005 ** by scanning an index for a range of values. The range may have an upper
105006 ** bound, a lower bound, or both. The WHERE clause terms that set the upper
105007 ** and lower bounds are represented by pLower and pUpper respectively. For
105008 ** example, assuming that index p is on t1(a):
105010 ** ... FROM t1 WHERE a > ? AND a < ? ...
105011 ** |_____| |_____|
105012 ** | |
105013 ** pLower pUpper
105015 ** If either of the upper or lower bound is not present, then NULL is passed in
105016 ** place of the corresponding WhereTerm.
105018 ** The nEq parameter is passed the index of the index column subject to the
105019 ** range constraint. Or, equivalently, the number of equality constraints
105020 ** optimized by the proposed index scan. For example, assuming index p is
105021 ** on t1(a, b), and the SQL query is:
105023 ** ... FROM t1 WHERE a = ? AND b > ? AND b < ? ...
105025 ** then nEq should be passed the value 1 (as the range restricted column,
105026 ** b, is the second left-most column of the index). Or, if the query is:
105028 ** ... FROM t1 WHERE a > ? AND a < ? ...
105030 ** then nEq should be passed 0.
105032 ** The returned value is an integer divisor to reduce the estimated
105033 ** search space. A return value of 1 means that range constraints are
105034 ** no help at all. A return value of 2 means range constraints are
105035 ** expected to reduce the search space by half. And so forth...
105037 ** In the absence of sqlite_stat3 ANALYZE data, each range inequality
105038 ** reduces the search space by a factor of 4. Hence a single constraint (x>?)
105039 ** results in a return of 4 and a range constraint (x>? AND x<?) results
105040 ** in a return of 16.
105042 static int whereRangeScanEst(
105043 Parse *pParse, /* Parsing & code generating context */
105044 Index *p, /* The index containing the range-compared column; "x" */
105045 int nEq, /* index into p->aCol[] of the range-compared column */
105046 WhereTerm *pLower, /* Lower bound on the range. ex: "x>123" Might be NULL */
105047 WhereTerm *pUpper, /* Upper bound on the range. ex: "x<455" Might be NULL */
105048 double *pRangeDiv /* OUT: Reduce search space by this divisor */
105050 int rc = SQLITE_OK;
105052 #ifdef SQLITE_ENABLE_STAT3
105054 if( nEq==0 && p->nSample ){
105055 sqlite3_value *pRangeVal;
105056 tRowcnt iLower = 0;
105057 tRowcnt iUpper = p->aiRowEst[0];
105058 tRowcnt a[2];
105059 u8 aff = p->pTable->aCol[p->aiColumn[0]].affinity;
105061 if( pLower ){
105062 Expr *pExpr = pLower->pExpr->pRight;
105063 rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal);
105064 assert( pLower->eOperator==WO_GT || pLower->eOperator==WO_GE );
105065 if( rc==SQLITE_OK
105066 && whereKeyStats(pParse, p, pRangeVal, 0, a)==SQLITE_OK
105068 iLower = a[0];
105069 if( pLower->eOperator==WO_GT ) iLower += a[1];
105071 sqlite3ValueFree(pRangeVal);
105073 if( rc==SQLITE_OK && pUpper ){
105074 Expr *pExpr = pUpper->pExpr->pRight;
105075 rc = valueFromExpr(pParse, pExpr, aff, &pRangeVal);
105076 assert( pUpper->eOperator==WO_LT || pUpper->eOperator==WO_LE );
105077 if( rc==SQLITE_OK
105078 && whereKeyStats(pParse, p, pRangeVal, 1, a)==SQLITE_OK
105080 iUpper = a[0];
105081 if( pUpper->eOperator==WO_LE ) iUpper += a[1];
105083 sqlite3ValueFree(pRangeVal);
105085 if( rc==SQLITE_OK ){
105086 if( iUpper<=iLower ){
105087 *pRangeDiv = (double)p->aiRowEst[0];
105088 }else{
105089 *pRangeDiv = (double)p->aiRowEst[0]/(double)(iUpper - iLower);
105091 WHERETRACE(("range scan regions: %u..%u div=%g\n",
105092 (u32)iLower, (u32)iUpper, *pRangeDiv));
105093 return SQLITE_OK;
105096 #else
105097 UNUSED_PARAMETER(pParse);
105098 UNUSED_PARAMETER(p);
105099 UNUSED_PARAMETER(nEq);
105100 #endif
105101 assert( pLower || pUpper );
105102 *pRangeDiv = (double)1;
105103 if( pLower && (pLower->wtFlags & TERM_VNULL)==0 ) *pRangeDiv *= (double)4;
105104 if( pUpper ) *pRangeDiv *= (double)4;
105105 return rc;
105108 #ifdef SQLITE_ENABLE_STAT3
105110 ** Estimate the number of rows that will be returned based on
105111 ** an equality constraint x=VALUE and where that VALUE occurs in
105112 ** the histogram data. This only works when x is the left-most
105113 ** column of an index and sqlite_stat3 histogram data is available
105114 ** for that index. When pExpr==NULL that means the constraint is
105115 ** "x IS NULL" instead of "x=VALUE".
105117 ** Write the estimated row count into *pnRow and return SQLITE_OK.
105118 ** If unable to make an estimate, leave *pnRow unchanged and return
105119 ** non-zero.
105121 ** This routine can fail if it is unable to load a collating sequence
105122 ** required for string comparison, or if unable to allocate memory
105123 ** for a UTF conversion required for comparison. The error is stored
105124 ** in the pParse structure.
105126 static int whereEqualScanEst(
105127 Parse *pParse, /* Parsing & code generating context */
105128 Index *p, /* The index whose left-most column is pTerm */
105129 Expr *pExpr, /* Expression for VALUE in the x=VALUE constraint */
105130 double *pnRow /* Write the revised row estimate here */
105132 sqlite3_value *pRhs = 0; /* VALUE on right-hand side of pTerm */
105133 u8 aff; /* Column affinity */
105134 int rc; /* Subfunction return code */
105135 tRowcnt a[2]; /* Statistics */
105137 assert( p->aSample!=0 );
105138 assert( p->nSample>0 );
105139 aff = p->pTable->aCol[p->aiColumn[0]].affinity;
105140 if( pExpr ){
105141 rc = valueFromExpr(pParse, pExpr, aff, &pRhs);
105142 if( rc ) goto whereEqualScanEst_cancel;
105143 }else{
105144 pRhs = sqlite3ValueNew(pParse->db);
105146 if( pRhs==0 ) return SQLITE_NOTFOUND;
105147 rc = whereKeyStats(pParse, p, pRhs, 0, a);
105148 if( rc==SQLITE_OK ){
105149 WHERETRACE(("equality scan regions: %d\n", (int)a[1]));
105150 *pnRow = a[1];
105152 whereEqualScanEst_cancel:
105153 sqlite3ValueFree(pRhs);
105154 return rc;
105156 #endif /* defined(SQLITE_ENABLE_STAT3) */
105158 #ifdef SQLITE_ENABLE_STAT3
105160 ** Estimate the number of rows that will be returned based on
105161 ** an IN constraint where the right-hand side of the IN operator
105162 ** is a list of values. Example:
105164 ** WHERE x IN (1,2,3,4)
105166 ** Write the estimated row count into *pnRow and return SQLITE_OK.
105167 ** If unable to make an estimate, leave *pnRow unchanged and return
105168 ** non-zero.
105170 ** This routine can fail if it is unable to load a collating sequence
105171 ** required for string comparison, or if unable to allocate memory
105172 ** for a UTF conversion required for comparison. The error is stored
105173 ** in the pParse structure.
105175 static int whereInScanEst(
105176 Parse *pParse, /* Parsing & code generating context */
105177 Index *p, /* The index whose left-most column is pTerm */
105178 ExprList *pList, /* The value list on the RHS of "x IN (v1,v2,v3,...)" */
105179 double *pnRow /* Write the revised row estimate here */
105181 int rc = SQLITE_OK; /* Subfunction return code */
105182 double nEst; /* Number of rows for a single term */
105183 double nRowEst = (double)0; /* New estimate of the number of rows */
105184 int i; /* Loop counter */
105186 assert( p->aSample!=0 );
105187 for(i=0; rc==SQLITE_OK && i<pList->nExpr; i++){
105188 nEst = p->aiRowEst[0];
105189 rc = whereEqualScanEst(pParse, p, pList->a[i].pExpr, &nEst);
105190 nRowEst += nEst;
105192 if( rc==SQLITE_OK ){
105193 if( nRowEst > p->aiRowEst[0] ) nRowEst = p->aiRowEst[0];
105194 *pnRow = nRowEst;
105195 WHERETRACE(("IN row estimate: est=%g\n", nRowEst));
105197 return rc;
105199 #endif /* defined(SQLITE_ENABLE_STAT3) */
105203 ** Find the best query plan for accessing a particular table. Write the
105204 ** best query plan and its cost into the WhereCost object supplied as the
105205 ** last parameter.
105207 ** The lowest cost plan wins. The cost is an estimate of the amount of
105208 ** CPU and disk I/O needed to process the requested result.
105209 ** Factors that influence cost include:
105211 ** * The estimated number of rows that will be retrieved. (The
105212 ** fewer the better.)
105214 ** * Whether or not sorting must occur.
105216 ** * Whether or not there must be separate lookups in the
105217 ** index and in the main table.
105219 ** If there was an INDEXED BY clause (pSrc->pIndex) attached to the table in
105220 ** the SQL statement, then this function only considers plans using the
105221 ** named index. If no such plan is found, then the returned cost is
105222 ** SQLITE_BIG_DBL. If a plan is found that uses the named index,
105223 ** then the cost is calculated in the usual way.
105225 ** If a NOT INDEXED clause (pSrc->notIndexed!=0) was attached to the table
105226 ** in the SELECT statement, then no indexes are considered. However, the
105227 ** selected plan may still take advantage of the built-in rowid primary key
105228 ** index.
105230 static void bestBtreeIndex(
105231 Parse *pParse, /* The parsing context */
105232 WhereClause *pWC, /* The WHERE clause */
105233 struct SrcList_item *pSrc, /* The FROM clause term to search */
105234 Bitmask notReady, /* Mask of cursors not available for indexing */
105235 Bitmask notValid, /* Cursors not available for any purpose */
105236 ExprList *pOrderBy, /* The ORDER BY clause */
105237 ExprList *pDistinct, /* The select-list if query is DISTINCT */
105238 WhereCost *pCost /* Lowest cost query plan */
105240 int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */
105241 Index *pProbe; /* An index we are evaluating */
105242 Index *pIdx; /* Copy of pProbe, or zero for IPK index */
105243 int eqTermMask; /* Current mask of valid equality operators */
105244 int idxEqTermMask; /* Index mask of valid equality operators */
105245 Index sPk; /* A fake index object for the primary key */
105246 tRowcnt aiRowEstPk[2]; /* The aiRowEst[] value for the sPk index */
105247 int aiColumnPk = -1; /* The aColumn[] value for the sPk index */
105248 int wsFlagMask; /* Allowed flags in pCost->plan.wsFlag */
105250 /* Initialize the cost to a worst-case value */
105251 memset(pCost, 0, sizeof(*pCost));
105252 pCost->rCost = SQLITE_BIG_DBL;
105254 /* If the pSrc table is the right table of a LEFT JOIN then we may not
105255 ** use an index to satisfy IS NULL constraints on that table. This is
105256 ** because columns might end up being NULL if the table does not match -
105257 ** a circumstance which the index cannot help us discover. Ticket #2177.
105259 if( pSrc->jointype & JT_LEFT ){
105260 idxEqTermMask = WO_EQ|WO_IN;
105261 }else{
105262 idxEqTermMask = WO_EQ|WO_IN|WO_ISNULL;
105265 if( pSrc->pIndex ){
105266 /* An INDEXED BY clause specifies a particular index to use */
105267 pIdx = pProbe = pSrc->pIndex;
105268 wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
105269 eqTermMask = idxEqTermMask;
105270 }else{
105271 /* There is no INDEXED BY clause. Create a fake Index object in local
105272 ** variable sPk to represent the rowid primary key index. Make this
105273 ** fake index the first in a chain of Index objects with all of the real
105274 ** indices to follow */
105275 Index *pFirst; /* First of real indices on the table */
105276 memset(&sPk, 0, sizeof(Index));
105277 sPk.nColumn = 1;
105278 sPk.aiColumn = &aiColumnPk;
105279 sPk.aiRowEst = aiRowEstPk;
105280 sPk.onError = OE_Replace;
105281 sPk.pTable = pSrc->pTab;
105282 aiRowEstPk[0] = pSrc->pTab->nRowEst;
105283 aiRowEstPk[1] = 1;
105284 pFirst = pSrc->pTab->pIndex;
105285 if( pSrc->notIndexed==0 ){
105286 /* The real indices of the table are only considered if the
105287 ** NOT INDEXED qualifier is omitted from the FROM clause */
105288 sPk.pNext = pFirst;
105290 pProbe = &sPk;
105291 wsFlagMask = ~(
105292 WHERE_COLUMN_IN|WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_RANGE
105294 eqTermMask = WO_EQ|WO_IN;
105295 pIdx = 0;
105298 /* Loop over all indices looking for the best one to use
105300 for(; pProbe; pIdx=pProbe=pProbe->pNext){
105301 const tRowcnt * const aiRowEst = pProbe->aiRowEst;
105302 double cost; /* Cost of using pProbe */
105303 double nRow; /* Estimated number of rows in result set */
105304 double log10N = (double)1; /* base-10 logarithm of nRow (inexact) */
105305 int rev; /* True to scan in reverse order */
105306 int wsFlags = 0;
105307 Bitmask used = 0;
105309 /* The following variables are populated based on the properties of
105310 ** index being evaluated. They are then used to determine the expected
105311 ** cost and number of rows returned.
105313 ** nEq:
105314 ** Number of equality terms that can be implemented using the index.
105315 ** In other words, the number of initial fields in the index that
105316 ** are used in == or IN or NOT NULL constraints of the WHERE clause.
105318 ** nInMul:
105319 ** The "in-multiplier". This is an estimate of how many seek operations
105320 ** SQLite must perform on the index in question. For example, if the
105321 ** WHERE clause is:
105323 ** WHERE a IN (1, 2, 3) AND b IN (4, 5, 6)
105325 ** SQLite must perform 9 lookups on an index on (a, b), so nInMul is
105326 ** set to 9. Given the same schema and either of the following WHERE
105327 ** clauses:
105329 ** WHERE a = 1
105330 ** WHERE a >= 2
105332 ** nInMul is set to 1.
105334 ** If there exists a WHERE term of the form "x IN (SELECT ...)", then
105335 ** the sub-select is assumed to return 25 rows for the purposes of
105336 ** determining nInMul.
105338 ** bInEst:
105339 ** Set to true if there was at least one "x IN (SELECT ...)" term used
105340 ** in determining the value of nInMul. Note that the RHS of the
105341 ** IN operator must be a SELECT, not a value list, for this variable
105342 ** to be true.
105344 ** rangeDiv:
105345 ** An estimate of a divisor by which to reduce the search space due
105346 ** to inequality constraints. In the absence of sqlite_stat3 ANALYZE
105347 ** data, a single inequality reduces the search space to 1/4rd its
105348 ** original size (rangeDiv==4). Two inequalities reduce the search
105349 ** space to 1/16th of its original size (rangeDiv==16).
105351 ** bSort:
105352 ** Boolean. True if there is an ORDER BY clause that will require an
105353 ** external sort (i.e. scanning the index being evaluated will not
105354 ** correctly order records).
105356 ** bLookup:
105357 ** Boolean. True if a table lookup is required for each index entry
105358 ** visited. In other words, true if this is not a covering index.
105359 ** This is always false for the rowid primary key index of a table.
105360 ** For other indexes, it is true unless all the columns of the table
105361 ** used by the SELECT statement are present in the index (such an
105362 ** index is sometimes described as a covering index).
105363 ** For example, given the index on (a, b), the second of the following
105364 ** two queries requires table b-tree lookups in order to find the value
105365 ** of column c, but the first does not because columns a and b are
105366 ** both available in the index.
105368 ** SELECT a, b FROM tbl WHERE a = 1;
105369 ** SELECT a, b, c FROM tbl WHERE a = 1;
105371 int nEq; /* Number of == or IN terms matching index */
105372 int bInEst = 0; /* True if "x IN (SELECT...)" seen */
105373 int nInMul = 1; /* Number of distinct equalities to lookup */
105374 double rangeDiv = (double)1; /* Estimated reduction in search space */
105375 int nBound = 0; /* Number of range constraints seen */
105376 int bSort = !!pOrderBy; /* True if external sort required */
105377 int bDist = !!pDistinct; /* True if index cannot help with DISTINCT */
105378 int bLookup = 0; /* True if not a covering index */
105379 WhereTerm *pTerm; /* A single term of the WHERE clause */
105380 #ifdef SQLITE_ENABLE_STAT3
105381 WhereTerm *pFirstTerm = 0; /* First term matching the index */
105382 #endif
105384 /* Determine the values of nEq and nInMul */
105385 for(nEq=0; nEq<pProbe->nColumn; nEq++){
105386 int j = pProbe->aiColumn[nEq];
105387 pTerm = findTerm(pWC, iCur, j, notReady, eqTermMask, pIdx);
105388 if( pTerm==0 ) break;
105389 wsFlags |= (WHERE_COLUMN_EQ|WHERE_ROWID_EQ);
105390 testcase( pTerm->pWC!=pWC );
105391 if( pTerm->eOperator & WO_IN ){
105392 Expr *pExpr = pTerm->pExpr;
105393 wsFlags |= WHERE_COLUMN_IN;
105394 if( ExprHasProperty(pExpr, EP_xIsSelect) ){
105395 /* "x IN (SELECT ...)": Assume the SELECT returns 25 rows */
105396 nInMul *= 25;
105397 bInEst = 1;
105398 }else if( ALWAYS(pExpr->x.pList && pExpr->x.pList->nExpr) ){
105399 /* "x IN (value, value, ...)" */
105400 nInMul *= pExpr->x.pList->nExpr;
105402 }else if( pTerm->eOperator & WO_ISNULL ){
105403 wsFlags |= WHERE_COLUMN_NULL;
105405 #ifdef SQLITE_ENABLE_STAT3
105406 if( nEq==0 && pProbe->aSample ) pFirstTerm = pTerm;
105407 #endif
105408 used |= pTerm->prereqRight;
105411 /* If the index being considered is UNIQUE, and there is an equality
105412 ** constraint for all columns in the index, then this search will find
105413 ** at most a single row. In this case set the WHERE_UNIQUE flag to
105414 ** indicate this to the caller.
105416 ** Otherwise, if the search may find more than one row, test to see if
105417 ** there is a range constraint on indexed column (nEq+1) that can be
105418 ** optimized using the index.
105420 if( nEq==pProbe->nColumn && pProbe->onError!=OE_None ){
105421 testcase( wsFlags & WHERE_COLUMN_IN );
105422 testcase( wsFlags & WHERE_COLUMN_NULL );
105423 if( (wsFlags & (WHERE_COLUMN_IN|WHERE_COLUMN_NULL))==0 ){
105424 wsFlags |= WHERE_UNIQUE;
105426 }else if( pProbe->bUnordered==0 ){
105427 int j = (nEq==pProbe->nColumn ? -1 : pProbe->aiColumn[nEq]);
105428 if( findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE|WO_GT|WO_GE, pIdx) ){
105429 WhereTerm *pTop = findTerm(pWC, iCur, j, notReady, WO_LT|WO_LE, pIdx);
105430 WhereTerm *pBtm = findTerm(pWC, iCur, j, notReady, WO_GT|WO_GE, pIdx);
105431 whereRangeScanEst(pParse, pProbe, nEq, pBtm, pTop, &rangeDiv);
105432 if( pTop ){
105433 nBound = 1;
105434 wsFlags |= WHERE_TOP_LIMIT;
105435 used |= pTop->prereqRight;
105436 testcase( pTop->pWC!=pWC );
105438 if( pBtm ){
105439 nBound++;
105440 wsFlags |= WHERE_BTM_LIMIT;
105441 used |= pBtm->prereqRight;
105442 testcase( pBtm->pWC!=pWC );
105444 wsFlags |= (WHERE_COLUMN_RANGE|WHERE_ROWID_RANGE);
105448 /* If there is an ORDER BY clause and the index being considered will
105449 ** naturally scan rows in the required order, set the appropriate flags
105450 ** in wsFlags. Otherwise, if there is an ORDER BY clause but the index
105451 ** will scan rows in a different order, set the bSort variable. */
105452 if( isSortingIndex(
105453 pParse, pWC->pMaskSet, pProbe, iCur, pOrderBy, nEq, wsFlags, &rev)
105455 bSort = 0;
105456 wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_ORDERBY;
105457 wsFlags |= (rev ? WHERE_REVERSE : 0);
105460 /* If there is a DISTINCT qualifier and this index will scan rows in
105461 ** order of the DISTINCT expressions, clear bDist and set the appropriate
105462 ** flags in wsFlags. */
105463 if( isDistinctIndex(pParse, pWC, pProbe, iCur, pDistinct, nEq) ){
105464 bDist = 0;
105465 wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_DISTINCT;
105468 /* If currently calculating the cost of using an index (not the IPK
105469 ** index), determine if all required column data may be obtained without
105470 ** using the main table (i.e. if the index is a covering
105471 ** index for this query). If it is, set the WHERE_IDX_ONLY flag in
105472 ** wsFlags. Otherwise, set the bLookup variable to true. */
105473 if( pIdx && wsFlags ){
105474 Bitmask m = pSrc->colUsed;
105475 int j;
105476 for(j=0; j<pIdx->nColumn; j++){
105477 int x = pIdx->aiColumn[j];
105478 if( x<BMS-1 ){
105479 m &= ~(((Bitmask)1)<<x);
105482 if( m==0 ){
105483 wsFlags |= WHERE_IDX_ONLY;
105484 }else{
105485 bLookup = 1;
105490 ** Estimate the number of rows of output. For an "x IN (SELECT...)"
105491 ** constraint, do not let the estimate exceed half the rows in the table.
105493 nRow = (double)(aiRowEst[nEq] * nInMul);
105494 if( bInEst && nRow*2>aiRowEst[0] ){
105495 nRow = aiRowEst[0]/2;
105496 nInMul = (int)(nRow / aiRowEst[nEq]);
105499 #ifdef SQLITE_ENABLE_STAT3
105500 /* If the constraint is of the form x=VALUE or x IN (E1,E2,...)
105501 ** and we do not think that values of x are unique and if histogram
105502 ** data is available for column x, then it might be possible
105503 ** to get a better estimate on the number of rows based on
105504 ** VALUE and how common that value is according to the histogram.
105506 if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 && aiRowEst[1]>1 ){
105507 assert( (pFirstTerm->eOperator & (WO_EQ|WO_ISNULL|WO_IN))!=0 );
105508 if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){
105509 testcase( pFirstTerm->eOperator==WO_EQ );
105510 testcase( pFirstTerm->eOperator==WO_ISNULL );
105511 whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
105512 }else if( bInEst==0 ){
105513 assert( pFirstTerm->eOperator==WO_IN );
105514 whereInScanEst(pParse, pProbe, pFirstTerm->pExpr->x.pList, &nRow);
105517 #endif /* SQLITE_ENABLE_STAT3 */
105519 /* Adjust the number of output rows and downward to reflect rows
105520 ** that are excluded by range constraints.
105522 nRow = nRow/rangeDiv;
105523 if( nRow<1 ) nRow = 1;
105525 /* Experiments run on real SQLite databases show that the time needed
105526 ** to do a binary search to locate a row in a table or index is roughly
105527 ** log10(N) times the time to move from one row to the next row within
105528 ** a table or index. The actual times can vary, with the size of
105529 ** records being an important factor. Both moves and searches are
105530 ** slower with larger records, presumably because fewer records fit
105531 ** on one page and hence more pages have to be fetched.
105533 ** The ANALYZE command and the sqlite_stat1 and sqlite_stat3 tables do
105534 ** not give us data on the relative sizes of table and index records.
105535 ** So this computation assumes table records are about twice as big
105536 ** as index records
105538 if( (wsFlags & WHERE_NOT_FULLSCAN)==0 ){
105539 /* The cost of a full table scan is a number of move operations equal
105540 ** to the number of rows in the table.
105542 ** We add an additional 4x penalty to full table scans. This causes
105543 ** the cost function to err on the side of choosing an index over
105544 ** choosing a full scan. This 4x full-scan penalty is an arguable
105545 ** decision and one which we expect to revisit in the future. But
105546 ** it seems to be working well enough at the moment.
105548 cost = aiRowEst[0]*4;
105549 }else{
105550 log10N = estLog(aiRowEst[0]);
105551 cost = nRow;
105552 if( pIdx ){
105553 if( bLookup ){
105554 /* For an index lookup followed by a table lookup:
105555 ** nInMul index searches to find the start of each index range
105556 ** + nRow steps through the index
105557 ** + nRow table searches to lookup the table entry using the rowid
105559 cost += (nInMul + nRow)*log10N;
105560 }else{
105561 /* For a covering index:
105562 ** nInMul index searches to find the initial entry
105563 ** + nRow steps through the index
105565 cost += nInMul*log10N;
105567 }else{
105568 /* For a rowid primary key lookup:
105569 ** nInMult table searches to find the initial entry for each range
105570 ** + nRow steps through the table
105572 cost += nInMul*log10N;
105576 /* Add in the estimated cost of sorting the result. Actual experimental
105577 ** measurements of sorting performance in SQLite show that sorting time
105578 ** adds C*N*log10(N) to the cost, where N is the number of rows to be
105579 ** sorted and C is a factor between 1.95 and 4.3. We will split the
105580 ** difference and select C of 3.0.
105582 if( bSort ){
105583 cost += nRow*estLog(nRow)*3;
105585 if( bDist ){
105586 cost += nRow*estLog(nRow)*3;
105589 /**** Cost of using this index has now been computed ****/
105591 /* If there are additional constraints on this table that cannot
105592 ** be used with the current index, but which might lower the number
105593 ** of output rows, adjust the nRow value accordingly. This only
105594 ** matters if the current index is the least costly, so do not bother
105595 ** with this step if we already know this index will not be chosen.
105596 ** Also, never reduce the output row count below 2 using this step.
105598 ** It is critical that the notValid mask be used here instead of
105599 ** the notReady mask. When computing an "optimal" index, the notReady
105600 ** mask will only have one bit set - the bit for the current table.
105601 ** The notValid mask, on the other hand, always has all bits set for
105602 ** tables that are not in outer loops. If notReady is used here instead
105603 ** of notValid, then a optimal index that depends on inner joins loops
105604 ** might be selected even when there exists an optimal index that has
105605 ** no such dependency.
105607 if( nRow>2 && cost<=pCost->rCost ){
105608 int k; /* Loop counter */
105609 int nSkipEq = nEq; /* Number of == constraints to skip */
105610 int nSkipRange = nBound; /* Number of < constraints to skip */
105611 Bitmask thisTab; /* Bitmap for pSrc */
105613 thisTab = getMask(pWC->pMaskSet, iCur);
105614 for(pTerm=pWC->a, k=pWC->nTerm; nRow>2 && k; k--, pTerm++){
105615 if( pTerm->wtFlags & TERM_VIRTUAL ) continue;
105616 if( (pTerm->prereqAll & notValid)!=thisTab ) continue;
105617 if( pTerm->eOperator & (WO_EQ|WO_IN|WO_ISNULL) ){
105618 if( nSkipEq ){
105619 /* Ignore the first nEq equality matches since the index
105620 ** has already accounted for these */
105621 nSkipEq--;
105622 }else{
105623 /* Assume each additional equality match reduces the result
105624 ** set size by a factor of 10 */
105625 nRow /= 10;
105627 }else if( pTerm->eOperator & (WO_LT|WO_LE|WO_GT|WO_GE) ){
105628 if( nSkipRange ){
105629 /* Ignore the first nSkipRange range constraints since the index
105630 ** has already accounted for these */
105631 nSkipRange--;
105632 }else{
105633 /* Assume each additional range constraint reduces the result
105634 ** set size by a factor of 3. Indexed range constraints reduce
105635 ** the search space by a larger factor: 4. We make indexed range
105636 ** more selective intentionally because of the subjective
105637 ** observation that indexed range constraints really are more
105638 ** selective in practice, on average. */
105639 nRow /= 3;
105641 }else if( pTerm->eOperator!=WO_NOOP ){
105642 /* Any other expression lowers the output row count by half */
105643 nRow /= 2;
105646 if( nRow<2 ) nRow = 2;
105650 WHERETRACE((
105651 "%s(%s): nEq=%d nInMul=%d rangeDiv=%d bSort=%d bLookup=%d wsFlags=0x%x\n"
105652 " notReady=0x%llx log10N=%.1f nRow=%.1f cost=%.1f used=0x%llx\n",
105653 pSrc->pTab->zName, (pIdx ? pIdx->zName : "ipk"),
105654 nEq, nInMul, (int)rangeDiv, bSort, bLookup, wsFlags,
105655 notReady, log10N, nRow, cost, used
105658 /* If this index is the best we have seen so far, then record this
105659 ** index and its cost in the pCost structure.
105661 if( (!pIdx || wsFlags)
105662 && (cost<pCost->rCost || (cost<=pCost->rCost && nRow<pCost->plan.nRow))
105664 pCost->rCost = cost;
105665 pCost->used = used;
105666 pCost->plan.nRow = nRow;
105667 pCost->plan.wsFlags = (wsFlags&wsFlagMask);
105668 pCost->plan.nEq = nEq;
105669 pCost->plan.u.pIdx = pIdx;
105672 /* If there was an INDEXED BY clause, then only that one index is
105673 ** considered. */
105674 if( pSrc->pIndex ) break;
105676 /* Reset masks for the next index in the loop */
105677 wsFlagMask = ~(WHERE_ROWID_EQ|WHERE_ROWID_RANGE);
105678 eqTermMask = idxEqTermMask;
105681 /* If there is no ORDER BY clause and the SQLITE_ReverseOrder flag
105682 ** is set, then reverse the order that the index will be scanned
105683 ** in. This is used for application testing, to help find cases
105684 ** where application behaviour depends on the (undefined) order that
105685 ** SQLite outputs rows in in the absence of an ORDER BY clause. */
105686 if( !pOrderBy && pParse->db->flags & SQLITE_ReverseOrder ){
105687 pCost->plan.wsFlags |= WHERE_REVERSE;
105690 assert( pOrderBy || (pCost->plan.wsFlags&WHERE_ORDERBY)==0 );
105691 assert( pCost->plan.u.pIdx==0 || (pCost->plan.wsFlags&WHERE_ROWID_EQ)==0 );
105692 assert( pSrc->pIndex==0
105693 || pCost->plan.u.pIdx==0
105694 || pCost->plan.u.pIdx==pSrc->pIndex
105697 WHERETRACE(("best index is: %s\n",
105698 ((pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ? "none" :
105699 pCost->plan.u.pIdx ? pCost->plan.u.pIdx->zName : "ipk")
105702 bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
105703 bestAutomaticIndex(pParse, pWC, pSrc, notReady, pCost);
105704 pCost->plan.wsFlags |= eqTermMask;
105708 ** Find the query plan for accessing table pSrc->pTab. Write the
105709 ** best query plan and its cost into the WhereCost object supplied
105710 ** as the last parameter. This function may calculate the cost of
105711 ** both real and virtual table scans.
105713 static void bestIndex(
105714 Parse *pParse, /* The parsing context */
105715 WhereClause *pWC, /* The WHERE clause */
105716 struct SrcList_item *pSrc, /* The FROM clause term to search */
105717 Bitmask notReady, /* Mask of cursors not available for indexing */
105718 Bitmask notValid, /* Cursors not available for any purpose */
105719 ExprList *pOrderBy, /* The ORDER BY clause */
105720 WhereCost *pCost /* Lowest cost query plan */
105722 #ifndef SQLITE_OMIT_VIRTUALTABLE
105723 if( IsVirtual(pSrc->pTab) ){
105724 sqlite3_index_info *p = 0;
105725 bestVirtualIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost,&p);
105726 if( p->needToFreeIdxStr ){
105727 sqlite3_free(p->idxStr);
105729 sqlite3DbFree(pParse->db, p);
105730 }else
105731 #endif
105733 bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, 0, pCost);
105738 ** Disable a term in the WHERE clause. Except, do not disable the term
105739 ** if it controls a LEFT OUTER JOIN and it did not originate in the ON
105740 ** or USING clause of that join.
105742 ** Consider the term t2.z='ok' in the following queries:
105744 ** (1) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x WHERE t2.z='ok'
105745 ** (2) SELECT * FROM t1 LEFT JOIN t2 ON t1.a=t2.x AND t2.z='ok'
105746 ** (3) SELECT * FROM t1, t2 WHERE t1.a=t2.x AND t2.z='ok'
105748 ** The t2.z='ok' is disabled in the in (2) because it originates
105749 ** in the ON clause. The term is disabled in (3) because it is not part
105750 ** of a LEFT OUTER JOIN. In (1), the term is not disabled.
105752 ** IMPLEMENTATION-OF: R-24597-58655 No tests are done for terms that are
105753 ** completely satisfied by indices.
105755 ** Disabling a term causes that term to not be tested in the inner loop
105756 ** of the join. Disabling is an optimization. When terms are satisfied
105757 ** by indices, we disable them to prevent redundant tests in the inner
105758 ** loop. We would get the correct results if nothing were ever disabled,
105759 ** but joins might run a little slower. The trick is to disable as much
105760 ** as we can without disabling too much. If we disabled in (1), we'd get
105761 ** the wrong answer. See ticket #813.
105763 static void disableTerm(WhereLevel *pLevel, WhereTerm *pTerm){
105764 if( pTerm
105765 && (pTerm->wtFlags & TERM_CODED)==0
105766 && (pLevel->iLeftJoin==0 || ExprHasProperty(pTerm->pExpr, EP_FromJoin))
105768 pTerm->wtFlags |= TERM_CODED;
105769 if( pTerm->iParent>=0 ){
105770 WhereTerm *pOther = &pTerm->pWC->a[pTerm->iParent];
105771 if( (--pOther->nChild)==0 ){
105772 disableTerm(pLevel, pOther);
105779 ** Code an OP_Affinity opcode to apply the column affinity string zAff
105780 ** to the n registers starting at base.
105782 ** As an optimization, SQLITE_AFF_NONE entries (which are no-ops) at the
105783 ** beginning and end of zAff are ignored. If all entries in zAff are
105784 ** SQLITE_AFF_NONE, then no code gets generated.
105786 ** This routine makes its own copy of zAff so that the caller is free
105787 ** to modify zAff after this routine returns.
105789 static void codeApplyAffinity(Parse *pParse, int base, int n, char *zAff){
105790 Vdbe *v = pParse->pVdbe;
105791 if( zAff==0 ){
105792 assert( pParse->db->mallocFailed );
105793 return;
105795 assert( v!=0 );
105797 /* Adjust base and n to skip over SQLITE_AFF_NONE entries at the beginning
105798 ** and end of the affinity string.
105800 while( n>0 && zAff[0]==SQLITE_AFF_NONE ){
105802 base++;
105803 zAff++;
105805 while( n>1 && zAff[n-1]==SQLITE_AFF_NONE ){
105809 /* Code the OP_Affinity opcode if there is anything left to do. */
105810 if( n>0 ){
105811 sqlite3VdbeAddOp2(v, OP_Affinity, base, n);
105812 sqlite3VdbeChangeP4(v, -1, zAff, n);
105813 sqlite3ExprCacheAffinityChange(pParse, base, n);
105819 ** Generate code for a single equality term of the WHERE clause. An equality
105820 ** term can be either X=expr or X IN (...). pTerm is the term to be
105821 ** coded.
105823 ** The current value for the constraint is left in register iReg.
105825 ** For a constraint of the form X=expr, the expression is evaluated and its
105826 ** result is left on the stack. For constraints of the form X IN (...)
105827 ** this routine sets up a loop that will iterate over all values of X.
105829 static int codeEqualityTerm(
105830 Parse *pParse, /* The parsing context */
105831 WhereTerm *pTerm, /* The term of the WHERE clause to be coded */
105832 WhereLevel *pLevel, /* When level of the FROM clause we are working on */
105833 int iTarget /* Attempt to leave results in this register */
105835 Expr *pX = pTerm->pExpr;
105836 Vdbe *v = pParse->pVdbe;
105837 int iReg; /* Register holding results */
105839 assert( iTarget>0 );
105840 if( pX->op==TK_EQ ){
105841 iReg = sqlite3ExprCodeTarget(pParse, pX->pRight, iTarget);
105842 }else if( pX->op==TK_ISNULL ){
105843 iReg = iTarget;
105844 sqlite3VdbeAddOp2(v, OP_Null, 0, iReg);
105845 #ifndef SQLITE_OMIT_SUBQUERY
105846 }else{
105847 int eType;
105848 int iTab;
105849 struct InLoop *pIn;
105851 assert( pX->op==TK_IN );
105852 iReg = iTarget;
105853 eType = sqlite3FindInIndex(pParse, pX, 0);
105854 iTab = pX->iTable;
105855 sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
105856 assert( pLevel->plan.wsFlags & WHERE_IN_ABLE );
105857 if( pLevel->u.in.nIn==0 ){
105858 pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
105860 pLevel->u.in.nIn++;
105861 pLevel->u.in.aInLoop =
105862 sqlite3DbReallocOrFree(pParse->db, pLevel->u.in.aInLoop,
105863 sizeof(pLevel->u.in.aInLoop[0])*pLevel->u.in.nIn);
105864 pIn = pLevel->u.in.aInLoop;
105865 if( pIn ){
105866 pIn += pLevel->u.in.nIn - 1;
105867 pIn->iCur = iTab;
105868 if( eType==IN_INDEX_ROWID ){
105869 pIn->addrInTop = sqlite3VdbeAddOp2(v, OP_Rowid, iTab, iReg);
105870 }else{
105871 pIn->addrInTop = sqlite3VdbeAddOp3(v, OP_Column, iTab, 0, iReg);
105873 sqlite3VdbeAddOp1(v, OP_IsNull, iReg);
105874 }else{
105875 pLevel->u.in.nIn = 0;
105877 #endif
105879 disableTerm(pLevel, pTerm);
105880 return iReg;
105884 ** Generate code that will evaluate all == and IN constraints for an
105885 ** index.
105887 ** For example, consider table t1(a,b,c,d,e,f) with index i1(a,b,c).
105888 ** Suppose the WHERE clause is this: a==5 AND b IN (1,2,3) AND c>5 AND c<10
105889 ** The index has as many as three equality constraints, but in this
105890 ** example, the third "c" value is an inequality. So only two
105891 ** constraints are coded. This routine will generate code to evaluate
105892 ** a==5 and b IN (1,2,3). The current values for a and b will be stored
105893 ** in consecutive registers and the index of the first register is returned.
105895 ** In the example above nEq==2. But this subroutine works for any value
105896 ** of nEq including 0. If nEq==0, this routine is nearly a no-op.
105897 ** The only thing it does is allocate the pLevel->iMem memory cell and
105898 ** compute the affinity string.
105900 ** This routine always allocates at least one memory cell and returns
105901 ** the index of that memory cell. The code that
105902 ** calls this routine will use that memory cell to store the termination
105903 ** key value of the loop. If one or more IN operators appear, then
105904 ** this routine allocates an additional nEq memory cells for internal
105905 ** use.
105907 ** Before returning, *pzAff is set to point to a buffer containing a
105908 ** copy of the column affinity string of the index allocated using
105909 ** sqlite3DbMalloc(). Except, entries in the copy of the string associated
105910 ** with equality constraints that use NONE affinity are set to
105911 ** SQLITE_AFF_NONE. This is to deal with SQL such as the following:
105913 ** CREATE TABLE t1(a TEXT PRIMARY KEY, b);
105914 ** SELECT ... FROM t1 AS t2, t1 WHERE t1.a = t2.b;
105916 ** In the example above, the index on t1(a) has TEXT affinity. But since
105917 ** the right hand side of the equality constraint (t2.b) has NONE affinity,
105918 ** no conversion should be attempted before using a t2.b value as part of
105919 ** a key to search the index. Hence the first byte in the returned affinity
105920 ** string in this example would be set to SQLITE_AFF_NONE.
105922 static int codeAllEqualityTerms(
105923 Parse *pParse, /* Parsing context */
105924 WhereLevel *pLevel, /* Which nested loop of the FROM we are coding */
105925 WhereClause *pWC, /* The WHERE clause */
105926 Bitmask notReady, /* Which parts of FROM have not yet been coded */
105927 int nExtraReg, /* Number of extra registers to allocate */
105928 char **pzAff /* OUT: Set to point to affinity string */
105930 int nEq = pLevel->plan.nEq; /* The number of == or IN constraints to code */
105931 Vdbe *v = pParse->pVdbe; /* The vm under construction */
105932 Index *pIdx; /* The index being used for this loop */
105933 int iCur = pLevel->iTabCur; /* The cursor of the table */
105934 WhereTerm *pTerm; /* A single constraint term */
105935 int j; /* Loop counter */
105936 int regBase; /* Base register */
105937 int nReg; /* Number of registers to allocate */
105938 char *zAff; /* Affinity string to return */
105940 /* This module is only called on query plans that use an index. */
105941 assert( pLevel->plan.wsFlags & WHERE_INDEXED );
105942 pIdx = pLevel->plan.u.pIdx;
105944 /* Figure out how many memory cells we will need then allocate them.
105946 regBase = pParse->nMem + 1;
105947 nReg = pLevel->plan.nEq + nExtraReg;
105948 pParse->nMem += nReg;
105950 zAff = sqlite3DbStrDup(pParse->db, sqlite3IndexAffinityStr(v, pIdx));
105951 if( !zAff ){
105952 pParse->db->mallocFailed = 1;
105955 /* Evaluate the equality constraints
105957 assert( pIdx->nColumn>=nEq );
105958 for(j=0; j<nEq; j++){
105959 int r1;
105960 int k = pIdx->aiColumn[j];
105961 pTerm = findTerm(pWC, iCur, k, notReady, pLevel->plan.wsFlags, pIdx);
105962 if( NEVER(pTerm==0) ) break;
105963 /* The following true for indices with redundant columns.
105964 ** Ex: CREATE INDEX i1 ON t1(a,b,a); SELECT * FROM t1 WHERE a=0 AND b=0; */
105965 testcase( (pTerm->wtFlags & TERM_CODED)!=0 );
105966 testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
105967 r1 = codeEqualityTerm(pParse, pTerm, pLevel, regBase+j);
105968 if( r1!=regBase+j ){
105969 if( nReg==1 ){
105970 sqlite3ReleaseTempReg(pParse, regBase);
105971 regBase = r1;
105972 }else{
105973 sqlite3VdbeAddOp2(v, OP_SCopy, r1, regBase+j);
105976 testcase( pTerm->eOperator & WO_ISNULL );
105977 testcase( pTerm->eOperator & WO_IN );
105978 if( (pTerm->eOperator & (WO_ISNULL|WO_IN))==0 ){
105979 Expr *pRight = pTerm->pExpr->pRight;
105980 sqlite3ExprCodeIsNullJump(v, pRight, regBase+j, pLevel->addrBrk);
105981 if( zAff ){
105982 if( sqlite3CompareAffinity(pRight, zAff[j])==SQLITE_AFF_NONE ){
105983 zAff[j] = SQLITE_AFF_NONE;
105985 if( sqlite3ExprNeedsNoAffinityChange(pRight, zAff[j]) ){
105986 zAff[j] = SQLITE_AFF_NONE;
105991 *pzAff = zAff;
105992 return regBase;
105995 #ifndef SQLITE_OMIT_EXPLAIN
105997 ** This routine is a helper for explainIndexRange() below
105999 ** pStr holds the text of an expression that we are building up one term
106000 ** at a time. This routine adds a new term to the end of the expression.
106001 ** Terms are separated by AND so add the "AND" text for second and subsequent
106002 ** terms only.
106004 static void explainAppendTerm(
106005 StrAccum *pStr, /* The text expression being built */
106006 int iTerm, /* Index of this term. First is zero */
106007 const char *zColumn, /* Name of the column */
106008 const char *zOp /* Name of the operator */
106010 if( iTerm ) sqlite3StrAccumAppend(pStr, " AND ", 5);
106011 sqlite3StrAccumAppend(pStr, zColumn, -1);
106012 sqlite3StrAccumAppend(pStr, zOp, 1);
106013 sqlite3StrAccumAppend(pStr, "?", 1);
106017 ** Argument pLevel describes a strategy for scanning table pTab. This
106018 ** function returns a pointer to a string buffer containing a description
106019 ** of the subset of table rows scanned by the strategy in the form of an
106020 ** SQL expression. Or, if all rows are scanned, NULL is returned.
106022 ** For example, if the query:
106024 ** SELECT * FROM t1 WHERE a=1 AND b>2;
106026 ** is run and there is an index on (a, b), then this function returns a
106027 ** string similar to:
106029 ** "a=? AND b>?"
106031 ** The returned pointer points to memory obtained from sqlite3DbMalloc().
106032 ** It is the responsibility of the caller to free the buffer when it is
106033 ** no longer required.
106035 static char *explainIndexRange(sqlite3 *db, WhereLevel *pLevel, Table *pTab){
106036 WherePlan *pPlan = &pLevel->plan;
106037 Index *pIndex = pPlan->u.pIdx;
106038 int nEq = pPlan->nEq;
106039 int i, j;
106040 Column *aCol = pTab->aCol;
106041 int *aiColumn = pIndex->aiColumn;
106042 StrAccum txt;
106044 if( nEq==0 && (pPlan->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){
106045 return 0;
106047 sqlite3StrAccumInit(&txt, 0, 0, SQLITE_MAX_LENGTH);
106048 txt.db = db;
106049 sqlite3StrAccumAppend(&txt, " (", 2);
106050 for(i=0; i<nEq; i++){
106051 explainAppendTerm(&txt, i, aCol[aiColumn[i]].zName, "=");
106054 j = i;
106055 if( pPlan->wsFlags&WHERE_BTM_LIMIT ){
106056 char *z = (j==pIndex->nColumn ) ? "rowid" : aCol[aiColumn[j]].zName;
106057 explainAppendTerm(&txt, i++, z, ">");
106059 if( pPlan->wsFlags&WHERE_TOP_LIMIT ){
106060 char *z = (j==pIndex->nColumn ) ? "rowid" : aCol[aiColumn[j]].zName;
106061 explainAppendTerm(&txt, i, z, "<");
106063 sqlite3StrAccumAppend(&txt, ")", 1);
106064 return sqlite3StrAccumFinish(&txt);
106068 ** This function is a no-op unless currently processing an EXPLAIN QUERY PLAN
106069 ** command. If the query being compiled is an EXPLAIN QUERY PLAN, a single
106070 ** record is added to the output to describe the table scan strategy in
106071 ** pLevel.
106073 static void explainOneScan(
106074 Parse *pParse, /* Parse context */
106075 SrcList *pTabList, /* Table list this loop refers to */
106076 WhereLevel *pLevel, /* Scan to write OP_Explain opcode for */
106077 int iLevel, /* Value for "level" column of output */
106078 int iFrom, /* Value for "from" column of output */
106079 u16 wctrlFlags /* Flags passed to sqlite3WhereBegin() */
106081 if( pParse->explain==2 ){
106082 u32 flags = pLevel->plan.wsFlags;
106083 struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
106084 Vdbe *v = pParse->pVdbe; /* VM being constructed */
106085 sqlite3 *db = pParse->db; /* Database handle */
106086 char *zMsg; /* Text to add to EQP output */
106087 sqlite3_int64 nRow; /* Expected number of rows visited by scan */
106088 int iId = pParse->iSelectId; /* Select id (left-most output column) */
106089 int isSearch; /* True for a SEARCH. False for SCAN. */
106091 if( (flags&WHERE_MULTI_OR) || (wctrlFlags&WHERE_ONETABLE_ONLY) ) return;
106093 isSearch = (pLevel->plan.nEq>0)
106094 || (flags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0
106095 || (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
106097 zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN");
106098 if( pItem->pSelect ){
106099 zMsg = sqlite3MAppendf(db, zMsg, "%s SUBQUERY %d", zMsg,pItem->iSelectId);
106100 }else{
106101 zMsg = sqlite3MAppendf(db, zMsg, "%s TABLE %s", zMsg, pItem->zName);
106104 if( pItem->zAlias ){
106105 zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias);
106107 if( (flags & WHERE_INDEXED)!=0 ){
106108 char *zWhere = explainIndexRange(db, pLevel, pItem->pTab);
106109 zMsg = sqlite3MAppendf(db, zMsg, "%s USING %s%sINDEX%s%s%s", zMsg,
106110 ((flags & WHERE_TEMP_INDEX)?"AUTOMATIC ":""),
106111 ((flags & WHERE_IDX_ONLY)?"COVERING ":""),
106112 ((flags & WHERE_TEMP_INDEX)?"":" "),
106113 ((flags & WHERE_TEMP_INDEX)?"": pLevel->plan.u.pIdx->zName),
106114 zWhere
106116 sqlite3DbFree(db, zWhere);
106117 }else if( flags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
106118 zMsg = sqlite3MAppendf(db, zMsg, "%s USING INTEGER PRIMARY KEY", zMsg);
106120 if( flags&WHERE_ROWID_EQ ){
106121 zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg);
106122 }else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){
106123 zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid<?)", zMsg);
106124 }else if( flags&WHERE_BTM_LIMIT ){
106125 zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>?)", zMsg);
106126 }else if( flags&WHERE_TOP_LIMIT ){
106127 zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid<?)", zMsg);
106130 #ifndef SQLITE_OMIT_VIRTUALTABLE
106131 else if( (flags & WHERE_VIRTUALTABLE)!=0 ){
106132 sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
106133 zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg,
106134 pVtabIdx->idxNum, pVtabIdx->idxStr);
106136 #endif
106137 if( wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX) ){
106138 testcase( wctrlFlags & WHERE_ORDERBY_MIN );
106139 nRow = 1;
106140 }else{
106141 nRow = (sqlite3_int64)pLevel->plan.nRow;
106143 zMsg = sqlite3MAppendf(db, zMsg, "%s (~%lld rows)", zMsg, nRow);
106144 sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
106147 #else
106148 # define explainOneScan(u,v,w,x,y,z)
106149 #endif /* SQLITE_OMIT_EXPLAIN */
106153 ** Generate code for the start of the iLevel-th loop in the WHERE clause
106154 ** implementation described by pWInfo.
106156 static Bitmask codeOneLoopStart(
106157 WhereInfo *pWInfo, /* Complete information about the WHERE clause */
106158 int iLevel, /* Which level of pWInfo->a[] should be coded */
106159 u16 wctrlFlags, /* One of the WHERE_* flags defined in sqliteInt.h */
106160 Bitmask notReady, /* Which tables are currently available */
106161 Expr *pWhere /* Complete WHERE clause */
106163 int j, k; /* Loop counters */
106164 int iCur; /* The VDBE cursor for the table */
106165 int addrNxt; /* Where to jump to continue with the next IN case */
106166 int omitTable; /* True if we use the index only */
106167 int bRev; /* True if we need to scan in reverse order */
106168 WhereLevel *pLevel; /* The where level to be coded */
106169 WhereClause *pWC; /* Decomposition of the entire WHERE clause */
106170 WhereTerm *pTerm; /* A WHERE clause term */
106171 Parse *pParse; /* Parsing context */
106172 Vdbe *v; /* The prepared stmt under constructions */
106173 struct SrcList_item *pTabItem; /* FROM clause term being coded */
106174 int addrBrk; /* Jump here to break out of the loop */
106175 int addrCont; /* Jump here to continue with next cycle */
106176 int iRowidReg = 0; /* Rowid is stored in this register, if not zero */
106177 int iReleaseReg = 0; /* Temp register to free before returning */
106179 pParse = pWInfo->pParse;
106180 v = pParse->pVdbe;
106181 pWC = pWInfo->pWC;
106182 pLevel = &pWInfo->a[iLevel];
106183 pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
106184 iCur = pTabItem->iCursor;
106185 bRev = (pLevel->plan.wsFlags & WHERE_REVERSE)!=0;
106186 omitTable = (pLevel->plan.wsFlags & WHERE_IDX_ONLY)!=0
106187 && (wctrlFlags & WHERE_FORCE_TABLE)==0;
106189 /* Create labels for the "break" and "continue" instructions
106190 ** for the current loop. Jump to addrBrk to break out of a loop.
106191 ** Jump to cont to go immediately to the next iteration of the
106192 ** loop.
106194 ** When there is an IN operator, we also have a "addrNxt" label that
106195 ** means to continue with the next IN value combination. When
106196 ** there are no IN operators in the constraints, the "addrNxt" label
106197 ** is the same as "addrBrk".
106199 addrBrk = pLevel->addrBrk = pLevel->addrNxt = sqlite3VdbeMakeLabel(v);
106200 addrCont = pLevel->addrCont = sqlite3VdbeMakeLabel(v);
106202 /* If this is the right table of a LEFT OUTER JOIN, allocate and
106203 ** initialize a memory cell that records if this table matches any
106204 ** row of the left table of the join.
106206 if( pLevel->iFrom>0 && (pTabItem[0].jointype & JT_LEFT)!=0 ){
106207 pLevel->iLeftJoin = ++pParse->nMem;
106208 sqlite3VdbeAddOp2(v, OP_Integer, 0, pLevel->iLeftJoin);
106209 VdbeComment((v, "init LEFT JOIN no-match flag"));
106212 #ifndef SQLITE_OMIT_VIRTUALTABLE
106213 if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
106214 /* Case 0: The table is a virtual-table. Use the VFilter and VNext
106215 ** to access the data.
106217 int iReg; /* P3 Value for OP_VFilter */
106218 sqlite3_index_info *pVtabIdx = pLevel->plan.u.pVtabIdx;
106219 int nConstraint = pVtabIdx->nConstraint;
106220 struct sqlite3_index_constraint_usage *aUsage =
106221 pVtabIdx->aConstraintUsage;
106222 const struct sqlite3_index_constraint *aConstraint =
106223 pVtabIdx->aConstraint;
106225 sqlite3ExprCachePush(pParse);
106226 iReg = sqlite3GetTempRange(pParse, nConstraint+2);
106227 for(j=1; j<=nConstraint; j++){
106228 for(k=0; k<nConstraint; k++){
106229 if( aUsage[k].argvIndex==j ){
106230 int iTerm = aConstraint[k].iTermOffset;
106231 sqlite3ExprCode(pParse, pWC->a[iTerm].pExpr->pRight, iReg+j+1);
106232 break;
106235 if( k==nConstraint ) break;
106237 sqlite3VdbeAddOp2(v, OP_Integer, pVtabIdx->idxNum, iReg);
106238 sqlite3VdbeAddOp2(v, OP_Integer, j-1, iReg+1);
106239 sqlite3VdbeAddOp4(v, OP_VFilter, iCur, addrBrk, iReg, pVtabIdx->idxStr,
106240 pVtabIdx->needToFreeIdxStr ? P4_MPRINTF : P4_STATIC);
106241 pVtabIdx->needToFreeIdxStr = 0;
106242 for(j=0; j<nConstraint; j++){
106243 if( aUsage[j].omit ){
106244 int iTerm = aConstraint[j].iTermOffset;
106245 disableTerm(pLevel, &pWC->a[iTerm]);
106248 pLevel->op = OP_VNext;
106249 pLevel->p1 = iCur;
106250 pLevel->p2 = sqlite3VdbeCurrentAddr(v);
106251 sqlite3ReleaseTempRange(pParse, iReg, nConstraint+2);
106252 sqlite3ExprCachePop(pParse, 1);
106253 }else
106254 #endif /* SQLITE_OMIT_VIRTUALTABLE */
106256 if( pLevel->plan.wsFlags & WHERE_ROWID_EQ ){
106257 /* Case 1: We can directly reference a single row using an
106258 ** equality comparison against the ROWID field. Or
106259 ** we reference multiple rows using a "rowid IN (...)"
106260 ** construct.
106262 iReleaseReg = sqlite3GetTempReg(pParse);
106263 pTerm = findTerm(pWC, iCur, -1, notReady, WO_EQ|WO_IN, 0);
106264 assert( pTerm!=0 );
106265 assert( pTerm->pExpr!=0 );
106266 assert( pTerm->leftCursor==iCur );
106267 assert( omitTable==0 );
106268 testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106269 iRowidReg = codeEqualityTerm(pParse, pTerm, pLevel, iReleaseReg);
106270 addrNxt = pLevel->addrNxt;
106271 sqlite3VdbeAddOp2(v, OP_MustBeInt, iRowidReg, addrNxt);
106272 sqlite3VdbeAddOp3(v, OP_NotExists, iCur, addrNxt, iRowidReg);
106273 sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
106274 VdbeComment((v, "pk"));
106275 pLevel->op = OP_Noop;
106276 }else if( pLevel->plan.wsFlags & WHERE_ROWID_RANGE ){
106277 /* Case 2: We have an inequality comparison against the ROWID field.
106279 int testOp = OP_Noop;
106280 int start;
106281 int memEndValue = 0;
106282 WhereTerm *pStart, *pEnd;
106284 assert( omitTable==0 );
106285 pStart = findTerm(pWC, iCur, -1, notReady, WO_GT|WO_GE, 0);
106286 pEnd = findTerm(pWC, iCur, -1, notReady, WO_LT|WO_LE, 0);
106287 if( bRev ){
106288 pTerm = pStart;
106289 pStart = pEnd;
106290 pEnd = pTerm;
106292 if( pStart ){
106293 Expr *pX; /* The expression that defines the start bound */
106294 int r1, rTemp; /* Registers for holding the start boundary */
106296 /* The following constant maps TK_xx codes into corresponding
106297 ** seek opcodes. It depends on a particular ordering of TK_xx
106299 const u8 aMoveOp[] = {
106300 /* TK_GT */ OP_SeekGt,
106301 /* TK_LE */ OP_SeekLe,
106302 /* TK_LT */ OP_SeekLt,
106303 /* TK_GE */ OP_SeekGe
106305 assert( TK_LE==TK_GT+1 ); /* Make sure the ordering.. */
106306 assert( TK_LT==TK_GT+2 ); /* ... of the TK_xx values... */
106307 assert( TK_GE==TK_GT+3 ); /* ... is correcct. */
106309 testcase( pStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106310 pX = pStart->pExpr;
106311 assert( pX!=0 );
106312 assert( pStart->leftCursor==iCur );
106313 r1 = sqlite3ExprCodeTemp(pParse, pX->pRight, &rTemp);
106314 sqlite3VdbeAddOp3(v, aMoveOp[pX->op-TK_GT], iCur, addrBrk, r1);
106315 VdbeComment((v, "pk"));
106316 sqlite3ExprCacheAffinityChange(pParse, r1, 1);
106317 sqlite3ReleaseTempReg(pParse, rTemp);
106318 disableTerm(pLevel, pStart);
106319 }else{
106320 sqlite3VdbeAddOp2(v, bRev ? OP_Last : OP_Rewind, iCur, addrBrk);
106322 if( pEnd ){
106323 Expr *pX;
106324 pX = pEnd->pExpr;
106325 assert( pX!=0 );
106326 assert( pEnd->leftCursor==iCur );
106327 testcase( pEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106328 memEndValue = ++pParse->nMem;
106329 sqlite3ExprCode(pParse, pX->pRight, memEndValue);
106330 if( pX->op==TK_LT || pX->op==TK_GT ){
106331 testOp = bRev ? OP_Le : OP_Ge;
106332 }else{
106333 testOp = bRev ? OP_Lt : OP_Gt;
106335 disableTerm(pLevel, pEnd);
106337 start = sqlite3VdbeCurrentAddr(v);
106338 pLevel->op = bRev ? OP_Prev : OP_Next;
106339 pLevel->p1 = iCur;
106340 pLevel->p2 = start;
106341 if( pStart==0 && pEnd==0 ){
106342 pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
106343 }else{
106344 assert( pLevel->p5==0 );
106346 if( testOp!=OP_Noop ){
106347 iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
106348 sqlite3VdbeAddOp2(v, OP_Rowid, iCur, iRowidReg);
106349 sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
106350 sqlite3VdbeAddOp3(v, testOp, memEndValue, addrBrk, iRowidReg);
106351 sqlite3VdbeChangeP5(v, SQLITE_AFF_NUMERIC | SQLITE_JUMPIFNULL);
106353 }else if( pLevel->plan.wsFlags & (WHERE_COLUMN_RANGE|WHERE_COLUMN_EQ) ){
106354 /* Case 3: A scan using an index.
106356 ** The WHERE clause may contain zero or more equality
106357 ** terms ("==" or "IN" operators) that refer to the N
106358 ** left-most columns of the index. It may also contain
106359 ** inequality constraints (>, <, >= or <=) on the indexed
106360 ** column that immediately follows the N equalities. Only
106361 ** the right-most column can be an inequality - the rest must
106362 ** use the "==" and "IN" operators. For example, if the
106363 ** index is on (x,y,z), then the following clauses are all
106364 ** optimized:
106366 ** x=5
106367 ** x=5 AND y=10
106368 ** x=5 AND y<10
106369 ** x=5 AND y>5 AND y<10
106370 ** x=5 AND y=5 AND z<=10
106372 ** The z<10 term of the following cannot be used, only
106373 ** the x=5 term:
106375 ** x=5 AND z<10
106377 ** N may be zero if there are inequality constraints.
106378 ** If there are no inequality constraints, then N is at
106379 ** least one.
106381 ** This case is also used when there are no WHERE clause
106382 ** constraints but an index is selected anyway, in order
106383 ** to force the output order to conform to an ORDER BY.
106385 static const u8 aStartOp[] = {
106388 OP_Rewind, /* 2: (!start_constraints && startEq && !bRev) */
106389 OP_Last, /* 3: (!start_constraints && startEq && bRev) */
106390 OP_SeekGt, /* 4: (start_constraints && !startEq && !bRev) */
106391 OP_SeekLt, /* 5: (start_constraints && !startEq && bRev) */
106392 OP_SeekGe, /* 6: (start_constraints && startEq && !bRev) */
106393 OP_SeekLe /* 7: (start_constraints && startEq && bRev) */
106395 static const u8 aEndOp[] = {
106396 OP_Noop, /* 0: (!end_constraints) */
106397 OP_IdxGE, /* 1: (end_constraints && !bRev) */
106398 OP_IdxLT /* 2: (end_constraints && bRev) */
106400 int nEq = pLevel->plan.nEq; /* Number of == or IN terms */
106401 int isMinQuery = 0; /* If this is an optimized SELECT min(x).. */
106402 int regBase; /* Base register holding constraint values */
106403 int r1; /* Temp register */
106404 WhereTerm *pRangeStart = 0; /* Inequality constraint at range start */
106405 WhereTerm *pRangeEnd = 0; /* Inequality constraint at range end */
106406 int startEq; /* True if range start uses ==, >= or <= */
106407 int endEq; /* True if range end uses ==, >= or <= */
106408 int start_constraints; /* Start of range is constrained */
106409 int nConstraint; /* Number of constraint terms */
106410 Index *pIdx; /* The index we will be using */
106411 int iIdxCur; /* The VDBE cursor for the index */
106412 int nExtraReg = 0; /* Number of extra registers needed */
106413 int op; /* Instruction opcode */
106414 char *zStartAff; /* Affinity for start of range constraint */
106415 char *zEndAff; /* Affinity for end of range constraint */
106417 pIdx = pLevel->plan.u.pIdx;
106418 iIdxCur = pLevel->iIdxCur;
106419 k = (nEq==pIdx->nColumn ? -1 : pIdx->aiColumn[nEq]);
106421 /* If this loop satisfies a sort order (pOrderBy) request that
106422 ** was passed to this function to implement a "SELECT min(x) ..."
106423 ** query, then the caller will only allow the loop to run for
106424 ** a single iteration. This means that the first row returned
106425 ** should not have a NULL value stored in 'x'. If column 'x' is
106426 ** the first one after the nEq equality constraints in the index,
106427 ** this requires some special handling.
106429 if( (wctrlFlags&WHERE_ORDERBY_MIN)!=0
106430 && (pLevel->plan.wsFlags&WHERE_ORDERBY)
106431 && (pIdx->nColumn>nEq)
106433 /* assert( pOrderBy->nExpr==1 ); */
106434 /* assert( pOrderBy->a[0].pExpr->iColumn==pIdx->aiColumn[nEq] ); */
106435 isMinQuery = 1;
106436 nExtraReg = 1;
106439 /* Find any inequality constraint terms for the start and end
106440 ** of the range.
106442 if( pLevel->plan.wsFlags & WHERE_TOP_LIMIT ){
106443 pRangeEnd = findTerm(pWC, iCur, k, notReady, (WO_LT|WO_LE), pIdx);
106444 nExtraReg = 1;
106446 if( pLevel->plan.wsFlags & WHERE_BTM_LIMIT ){
106447 pRangeStart = findTerm(pWC, iCur, k, notReady, (WO_GT|WO_GE), pIdx);
106448 nExtraReg = 1;
106451 /* Generate code to evaluate all constraint terms using == or IN
106452 ** and store the values of those terms in an array of registers
106453 ** starting at regBase.
106455 regBase = codeAllEqualityTerms(
106456 pParse, pLevel, pWC, notReady, nExtraReg, &zStartAff
106458 zEndAff = sqlite3DbStrDup(pParse->db, zStartAff);
106459 addrNxt = pLevel->addrNxt;
106461 /* If we are doing a reverse order scan on an ascending index, or
106462 ** a forward order scan on a descending index, interchange the
106463 ** start and end terms (pRangeStart and pRangeEnd).
106465 if( (nEq<pIdx->nColumn && bRev==(pIdx->aSortOrder[nEq]==SQLITE_SO_ASC))
106466 || (bRev && pIdx->nColumn==nEq)
106468 SWAP(WhereTerm *, pRangeEnd, pRangeStart);
106471 testcase( pRangeStart && pRangeStart->eOperator & WO_LE );
106472 testcase( pRangeStart && pRangeStart->eOperator & WO_GE );
106473 testcase( pRangeEnd && pRangeEnd->eOperator & WO_LE );
106474 testcase( pRangeEnd && pRangeEnd->eOperator & WO_GE );
106475 startEq = !pRangeStart || pRangeStart->eOperator & (WO_LE|WO_GE);
106476 endEq = !pRangeEnd || pRangeEnd->eOperator & (WO_LE|WO_GE);
106477 start_constraints = pRangeStart || nEq>0;
106479 /* Seek the index cursor to the start of the range. */
106480 nConstraint = nEq;
106481 if( pRangeStart ){
106482 Expr *pRight = pRangeStart->pExpr->pRight;
106483 sqlite3ExprCode(pParse, pRight, regBase+nEq);
106484 if( (pRangeStart->wtFlags & TERM_VNULL)==0 ){
106485 sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
106487 if( zStartAff ){
106488 if( sqlite3CompareAffinity(pRight, zStartAff[nEq])==SQLITE_AFF_NONE){
106489 /* Since the comparison is to be performed with no conversions
106490 ** applied to the operands, set the affinity to apply to pRight to
106491 ** SQLITE_AFF_NONE. */
106492 zStartAff[nEq] = SQLITE_AFF_NONE;
106494 if( sqlite3ExprNeedsNoAffinityChange(pRight, zStartAff[nEq]) ){
106495 zStartAff[nEq] = SQLITE_AFF_NONE;
106498 nConstraint++;
106499 testcase( pRangeStart->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106500 }else if( isMinQuery ){
106501 sqlite3VdbeAddOp2(v, OP_Null, 0, regBase+nEq);
106502 nConstraint++;
106503 startEq = 0;
106504 start_constraints = 1;
106506 codeApplyAffinity(pParse, regBase, nConstraint, zStartAff);
106507 op = aStartOp[(start_constraints<<2) + (startEq<<1) + bRev];
106508 assert( op!=0 );
106509 testcase( op==OP_Rewind );
106510 testcase( op==OP_Last );
106511 testcase( op==OP_SeekGt );
106512 testcase( op==OP_SeekGe );
106513 testcase( op==OP_SeekLe );
106514 testcase( op==OP_SeekLt );
106515 sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
106517 /* Load the value for the inequality constraint at the end of the
106518 ** range (if any).
106520 nConstraint = nEq;
106521 if( pRangeEnd ){
106522 Expr *pRight = pRangeEnd->pExpr->pRight;
106523 sqlite3ExprCacheRemove(pParse, regBase+nEq, 1);
106524 sqlite3ExprCode(pParse, pRight, regBase+nEq);
106525 if( (pRangeEnd->wtFlags & TERM_VNULL)==0 ){
106526 sqlite3ExprCodeIsNullJump(v, pRight, regBase+nEq, addrNxt);
106528 if( zEndAff ){
106529 if( sqlite3CompareAffinity(pRight, zEndAff[nEq])==SQLITE_AFF_NONE){
106530 /* Since the comparison is to be performed with no conversions
106531 ** applied to the operands, set the affinity to apply to pRight to
106532 ** SQLITE_AFF_NONE. */
106533 zEndAff[nEq] = SQLITE_AFF_NONE;
106535 if( sqlite3ExprNeedsNoAffinityChange(pRight, zEndAff[nEq]) ){
106536 zEndAff[nEq] = SQLITE_AFF_NONE;
106539 codeApplyAffinity(pParse, regBase, nEq+1, zEndAff);
106540 nConstraint++;
106541 testcase( pRangeEnd->wtFlags & TERM_VIRTUAL ); /* EV: R-30575-11662 */
106543 sqlite3DbFree(pParse->db, zStartAff);
106544 sqlite3DbFree(pParse->db, zEndAff);
106546 /* Top of the loop body */
106547 pLevel->p2 = sqlite3VdbeCurrentAddr(v);
106549 /* Check if the index cursor is past the end of the range. */
106550 op = aEndOp[(pRangeEnd || nEq) * (1 + bRev)];
106551 testcase( op==OP_Noop );
106552 testcase( op==OP_IdxGE );
106553 testcase( op==OP_IdxLT );
106554 if( op!=OP_Noop ){
106555 sqlite3VdbeAddOp4Int(v, op, iIdxCur, addrNxt, regBase, nConstraint);
106556 sqlite3VdbeChangeP5(v, endEq!=bRev ?1:0);
106559 /* If there are inequality constraints, check that the value
106560 ** of the table column that the inequality contrains is not NULL.
106561 ** If it is, jump to the next iteration of the loop.
106563 r1 = sqlite3GetTempReg(pParse);
106564 testcase( pLevel->plan.wsFlags & WHERE_BTM_LIMIT );
106565 testcase( pLevel->plan.wsFlags & WHERE_TOP_LIMIT );
106566 if( (pLevel->plan.wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))!=0 ){
106567 sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, nEq, r1);
106568 sqlite3VdbeAddOp2(v, OP_IsNull, r1, addrCont);
106570 sqlite3ReleaseTempReg(pParse, r1);
106572 /* Seek the table cursor, if required */
106573 disableTerm(pLevel, pRangeStart);
106574 disableTerm(pLevel, pRangeEnd);
106575 if( !omitTable ){
106576 iRowidReg = iReleaseReg = sqlite3GetTempReg(pParse);
106577 sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, iRowidReg);
106578 sqlite3ExprCacheStore(pParse, iCur, -1, iRowidReg);
106579 sqlite3VdbeAddOp2(v, OP_Seek, iCur, iRowidReg); /* Deferred seek */
106582 /* Record the instruction used to terminate the loop. Disable
106583 ** WHERE clause terms made redundant by the index range scan.
106585 if( pLevel->plan.wsFlags & WHERE_UNIQUE ){
106586 pLevel->op = OP_Noop;
106587 }else if( bRev ){
106588 pLevel->op = OP_Prev;
106589 }else{
106590 pLevel->op = OP_Next;
106592 pLevel->p1 = iIdxCur;
106593 }else
106595 #ifndef SQLITE_OMIT_OR_OPTIMIZATION
106596 if( pLevel->plan.wsFlags & WHERE_MULTI_OR ){
106597 /* Case 4: Two or more separately indexed terms connected by OR
106599 ** Example:
106601 ** CREATE TABLE t1(a,b,c,d);
106602 ** CREATE INDEX i1 ON t1(a);
106603 ** CREATE INDEX i2 ON t1(b);
106604 ** CREATE INDEX i3 ON t1(c);
106606 ** SELECT * FROM t1 WHERE a=5 OR b=7 OR (c=11 AND d=13)
106608 ** In the example, there are three indexed terms connected by OR.
106609 ** The top of the loop looks like this:
106611 ** Null 1 # Zero the rowset in reg 1
106613 ** Then, for each indexed term, the following. The arguments to
106614 ** RowSetTest are such that the rowid of the current row is inserted
106615 ** into the RowSet. If it is already present, control skips the
106616 ** Gosub opcode and jumps straight to the code generated by WhereEnd().
106618 ** sqlite3WhereBegin(<term>)
106619 ** RowSetTest # Insert rowid into rowset
106620 ** Gosub 2 A
106621 ** sqlite3WhereEnd()
106623 ** Following the above, code to terminate the loop. Label A, the target
106624 ** of the Gosub above, jumps to the instruction right after the Goto.
106626 ** Null 1 # Zero the rowset in reg 1
106627 ** Goto B # The loop is finished.
106629 ** A: <loop body> # Return data, whatever.
106631 ** Return 2 # Jump back to the Gosub
106633 ** B: <after the loop>
106636 WhereClause *pOrWc; /* The OR-clause broken out into subterms */
106637 SrcList *pOrTab; /* Shortened table list or OR-clause generation */
106639 int regReturn = ++pParse->nMem; /* Register used with OP_Gosub */
106640 int regRowset = 0; /* Register for RowSet object */
106641 int regRowid = 0; /* Register holding rowid */
106642 int iLoopBody = sqlite3VdbeMakeLabel(v); /* Start of loop body */
106643 int iRetInit; /* Address of regReturn init */
106644 int untestedTerms = 0; /* Some terms not completely tested */
106645 int ii; /* Loop counter */
106646 Expr *pAndExpr = 0; /* An ".. AND (...)" expression */
106648 pTerm = pLevel->plan.u.pTerm;
106649 assert( pTerm!=0 );
106650 assert( pTerm->eOperator==WO_OR );
106651 assert( (pTerm->wtFlags & TERM_ORINFO)!=0 );
106652 pOrWc = &pTerm->u.pOrInfo->wc;
106653 pLevel->op = OP_Return;
106654 pLevel->p1 = regReturn;
106656 /* Set up a new SrcList ni pOrTab containing the table being scanned
106657 ** by this loop in the a[0] slot and all notReady tables in a[1..] slots.
106658 ** This becomes the SrcList in the recursive call to sqlite3WhereBegin().
106660 if( pWInfo->nLevel>1 ){
106661 int nNotReady; /* The number of notReady tables */
106662 struct SrcList_item *origSrc; /* Original list of tables */
106663 nNotReady = pWInfo->nLevel - iLevel - 1;
106664 pOrTab = sqlite3StackAllocRaw(pParse->db,
106665 sizeof(*pOrTab)+ nNotReady*sizeof(pOrTab->a[0]));
106666 if( pOrTab==0 ) return notReady;
106667 pOrTab->nAlloc = (i16)(nNotReady + 1);
106668 pOrTab->nSrc = pOrTab->nAlloc;
106669 memcpy(pOrTab->a, pTabItem, sizeof(*pTabItem));
106670 origSrc = pWInfo->pTabList->a;
106671 for(k=1; k<=nNotReady; k++){
106672 memcpy(&pOrTab->a[k], &origSrc[pLevel[k].iFrom], sizeof(pOrTab->a[k]));
106674 }else{
106675 pOrTab = pWInfo->pTabList;
106678 /* Initialize the rowset register to contain NULL. An SQL NULL is
106679 ** equivalent to an empty rowset.
106681 ** Also initialize regReturn to contain the address of the instruction
106682 ** immediately following the OP_Return at the bottom of the loop. This
106683 ** is required in a few obscure LEFT JOIN cases where control jumps
106684 ** over the top of the loop into the body of it. In this case the
106685 ** correct response for the end-of-loop code (the OP_Return) is to
106686 ** fall through to the next instruction, just as an OP_Next does if
106687 ** called on an uninitialized cursor.
106689 if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
106690 regRowset = ++pParse->nMem;
106691 regRowid = ++pParse->nMem;
106692 sqlite3VdbeAddOp2(v, OP_Null, 0, regRowset);
106694 iRetInit = sqlite3VdbeAddOp2(v, OP_Integer, 0, regReturn);
106696 /* If the original WHERE clause is z of the form: (x1 OR x2 OR ...) AND y
106697 ** Then for every term xN, evaluate as the subexpression: xN AND z
106698 ** That way, terms in y that are factored into the disjunction will
106699 ** be picked up by the recursive calls to sqlite3WhereBegin() below.
106701 if( pWC->nTerm>1 ){
106702 pAndExpr = sqlite3ExprAlloc(pParse->db, TK_AND, 0, 0);
106703 pAndExpr->pRight = pWhere;
106706 for(ii=0; ii<pOrWc->nTerm; ii++){
106707 WhereTerm *pOrTerm = &pOrWc->a[ii];
106708 if( pOrTerm->leftCursor==iCur || pOrTerm->eOperator==WO_AND ){
106709 WhereInfo *pSubWInfo; /* Info for single OR-term scan */
106710 Expr *pOrExpr = pOrTerm->pExpr;
106711 if( pAndExpr ){
106712 pAndExpr->pLeft = pOrExpr;
106713 pOrExpr = pAndExpr;
106715 /* Loop through table entries that match term pOrTerm. */
106716 pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
106717 WHERE_OMIT_OPEN_CLOSE | WHERE_AND_ONLY |
106718 WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY);
106719 if( pSubWInfo ){
106720 explainOneScan(
106721 pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
106723 if( (wctrlFlags & WHERE_DUPLICATES_OK)==0 ){
106724 int iSet = ((ii==pOrWc->nTerm-1)?-1:ii);
106725 int r;
106726 r = sqlite3ExprCodeGetColumn(pParse, pTabItem->pTab, -1, iCur,
106727 regRowid);
106728 sqlite3VdbeAddOp4Int(v, OP_RowSetTest, regRowset,
106729 sqlite3VdbeCurrentAddr(v)+2, r, iSet);
106731 sqlite3VdbeAddOp2(v, OP_Gosub, regReturn, iLoopBody);
106733 /* The pSubWInfo->untestedTerms flag means that this OR term
106734 ** contained one or more AND term from a notReady table. The
106735 ** terms from the notReady table could not be tested and will
106736 ** need to be tested later.
106738 if( pSubWInfo->untestedTerms ) untestedTerms = 1;
106740 /* Finish the loop through table entries that match term pOrTerm. */
106741 sqlite3WhereEnd(pSubWInfo);
106745 sqlite3DbFree(pParse->db, pAndExpr);
106746 sqlite3VdbeChangeP1(v, iRetInit, sqlite3VdbeCurrentAddr(v));
106747 sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrBrk);
106748 sqlite3VdbeResolveLabel(v, iLoopBody);
106750 if( pWInfo->nLevel>1 ) sqlite3StackFree(pParse->db, pOrTab);
106751 if( !untestedTerms ) disableTerm(pLevel, pTerm);
106752 }else
106753 #endif /* SQLITE_OMIT_OR_OPTIMIZATION */
106756 /* Case 5: There is no usable index. We must do a complete
106757 ** scan of the entire table.
106759 static const u8 aStep[] = { OP_Next, OP_Prev };
106760 static const u8 aStart[] = { OP_Rewind, OP_Last };
106761 assert( bRev==0 || bRev==1 );
106762 assert( omitTable==0 );
106763 pLevel->op = aStep[bRev];
106764 pLevel->p1 = iCur;
106765 pLevel->p2 = 1 + sqlite3VdbeAddOp2(v, aStart[bRev], iCur, addrBrk);
106766 pLevel->p5 = SQLITE_STMTSTATUS_FULLSCAN_STEP;
106768 notReady &= ~getMask(pWC->pMaskSet, iCur);
106770 /* Insert code to test every subexpression that can be completely
106771 ** computed using the current set of tables.
106773 ** IMPLEMENTATION-OF: R-49525-50935 Terms that cannot be satisfied through
106774 ** the use of indices become tests that are evaluated against each row of
106775 ** the relevant input tables.
106777 for(pTerm=pWC->a, j=pWC->nTerm; j>0; j--, pTerm++){
106778 Expr *pE;
106779 testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* IMP: R-30575-11662 */
106780 testcase( pTerm->wtFlags & TERM_CODED );
106781 if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
106782 if( (pTerm->prereqAll & notReady)!=0 ){
106783 testcase( pWInfo->untestedTerms==0
106784 && (pWInfo->wctrlFlags & WHERE_ONETABLE_ONLY)!=0 );
106785 pWInfo->untestedTerms = 1;
106786 continue;
106788 pE = pTerm->pExpr;
106789 assert( pE!=0 );
106790 if( pLevel->iLeftJoin && !ExprHasProperty(pE, EP_FromJoin) ){
106791 continue;
106793 sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL);
106794 pTerm->wtFlags |= TERM_CODED;
106797 /* For a LEFT OUTER JOIN, generate code that will record the fact that
106798 ** at least one row of the right table has matched the left table.
106800 if( pLevel->iLeftJoin ){
106801 pLevel->addrFirst = sqlite3VdbeCurrentAddr(v);
106802 sqlite3VdbeAddOp2(v, OP_Integer, 1, pLevel->iLeftJoin);
106803 VdbeComment((v, "record LEFT JOIN hit"));
106804 sqlite3ExprCacheClear(pParse);
106805 for(pTerm=pWC->a, j=0; j<pWC->nTerm; j++, pTerm++){
106806 testcase( pTerm->wtFlags & TERM_VIRTUAL ); /* IMP: R-30575-11662 */
106807 testcase( pTerm->wtFlags & TERM_CODED );
106808 if( pTerm->wtFlags & (TERM_VIRTUAL|TERM_CODED) ) continue;
106809 if( (pTerm->prereqAll & notReady)!=0 ){
106810 assert( pWInfo->untestedTerms );
106811 continue;
106813 assert( pTerm->pExpr );
106814 sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL);
106815 pTerm->wtFlags |= TERM_CODED;
106818 sqlite3ReleaseTempReg(pParse, iReleaseReg);
106820 return notReady;
106823 #if defined(SQLITE_TEST)
106825 ** The following variable holds a text description of query plan generated
106826 ** by the most recent call to sqlite3WhereBegin(). Each call to WhereBegin
106827 ** overwrites the previous. This information is used for testing and
106828 ** analysis only.
106830 SQLITE_API char sqlite3_query_plan[BMS*2*40]; /* Text of the join */
106831 static int nQPlan = 0; /* Next free slow in _query_plan[] */
106833 #endif /* SQLITE_TEST */
106837 ** Free a WhereInfo structure
106839 static void whereInfoFree(sqlite3 *db, WhereInfo *pWInfo){
106840 if( ALWAYS(pWInfo) ){
106841 int i;
106842 for(i=0; i<pWInfo->nLevel; i++){
106843 sqlite3_index_info *pInfo = pWInfo->a[i].pIdxInfo;
106844 if( pInfo ){
106845 /* assert( pInfo->needToFreeIdxStr==0 || db->mallocFailed ); */
106846 if( pInfo->needToFreeIdxStr ){
106847 sqlite3_free(pInfo->idxStr);
106849 sqlite3DbFree(db, pInfo);
106851 if( pWInfo->a[i].plan.wsFlags & WHERE_TEMP_INDEX ){
106852 Index *pIdx = pWInfo->a[i].plan.u.pIdx;
106853 if( pIdx ){
106854 sqlite3DbFree(db, pIdx->zColAff);
106855 sqlite3DbFree(db, pIdx);
106859 whereClauseClear(pWInfo->pWC);
106860 sqlite3DbFree(db, pWInfo);
106866 ** Generate the beginning of the loop used for WHERE clause processing.
106867 ** The return value is a pointer to an opaque structure that contains
106868 ** information needed to terminate the loop. Later, the calling routine
106869 ** should invoke sqlite3WhereEnd() with the return value of this function
106870 ** in order to complete the WHERE clause processing.
106872 ** If an error occurs, this routine returns NULL.
106874 ** The basic idea is to do a nested loop, one loop for each table in
106875 ** the FROM clause of a select. (INSERT and UPDATE statements are the
106876 ** same as a SELECT with only a single table in the FROM clause.) For
106877 ** example, if the SQL is this:
106879 ** SELECT * FROM t1, t2, t3 WHERE ...;
106881 ** Then the code generated is conceptually like the following:
106883 ** foreach row1 in t1 do \ Code generated
106884 ** foreach row2 in t2 do |-- by sqlite3WhereBegin()
106885 ** foreach row3 in t3 do /
106886 ** ...
106887 ** end \ Code generated
106888 ** end |-- by sqlite3WhereEnd()
106889 ** end /
106891 ** Note that the loops might not be nested in the order in which they
106892 ** appear in the FROM clause if a different order is better able to make
106893 ** use of indices. Note also that when the IN operator appears in
106894 ** the WHERE clause, it might result in additional nested loops for
106895 ** scanning through all values on the right-hand side of the IN.
106897 ** There are Btree cursors associated with each table. t1 uses cursor
106898 ** number pTabList->a[0].iCursor. t2 uses the cursor pTabList->a[1].iCursor.
106899 ** And so forth. This routine generates code to open those VDBE cursors
106900 ** and sqlite3WhereEnd() generates the code to close them.
106902 ** The code that sqlite3WhereBegin() generates leaves the cursors named
106903 ** in pTabList pointing at their appropriate entries. The [...] code
106904 ** can use OP_Column and OP_Rowid opcodes on these cursors to extract
106905 ** data from the various tables of the loop.
106907 ** If the WHERE clause is empty, the foreach loops must each scan their
106908 ** entire tables. Thus a three-way join is an O(N^3) operation. But if
106909 ** the tables have indices and there are terms in the WHERE clause that
106910 ** refer to those indices, a complete table scan can be avoided and the
106911 ** code will run much faster. Most of the work of this routine is checking
106912 ** to see if there are indices that can be used to speed up the loop.
106914 ** Terms of the WHERE clause are also used to limit which rows actually
106915 ** make it to the "..." in the middle of the loop. After each "foreach",
106916 ** terms of the WHERE clause that use only terms in that loop and outer
106917 ** loops are evaluated and if false a jump is made around all subsequent
106918 ** inner loops (or around the "..." if the test occurs within the inner-
106919 ** most loop)
106921 ** OUTER JOINS
106923 ** An outer join of tables t1 and t2 is conceptally coded as follows:
106925 ** foreach row1 in t1 do
106926 ** flag = 0
106927 ** foreach row2 in t2 do
106928 ** start:
106929 ** ...
106930 ** flag = 1
106931 ** end
106932 ** if flag==0 then
106933 ** move the row2 cursor to a null row
106934 ** goto start
106935 ** fi
106936 ** end
106938 ** ORDER BY CLAUSE PROCESSING
106940 ** *ppOrderBy is a pointer to the ORDER BY clause of a SELECT statement,
106941 ** if there is one. If there is no ORDER BY clause or if this routine
106942 ** is called from an UPDATE or DELETE statement, then ppOrderBy is NULL.
106944 ** If an index can be used so that the natural output order of the table
106945 ** scan is correct for the ORDER BY clause, then that index is used and
106946 ** *ppOrderBy is set to NULL. This is an optimization that prevents an
106947 ** unnecessary sort of the result set if an index appropriate for the
106948 ** ORDER BY clause already exists.
106950 ** If the where clause loops cannot be arranged to provide the correct
106951 ** output order, then the *ppOrderBy is unchanged.
106953 SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
106954 Parse *pParse, /* The parser context */
106955 SrcList *pTabList, /* A list of all tables to be scanned */
106956 Expr *pWhere, /* The WHERE clause */
106957 ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */
106958 ExprList *pDistinct, /* The select-list for DISTINCT queries - or NULL */
106959 u16 wctrlFlags /* One of the WHERE_* flags defined in sqliteInt.h */
106961 int i; /* Loop counter */
106962 int nByteWInfo; /* Num. bytes allocated for WhereInfo struct */
106963 int nTabList; /* Number of elements in pTabList */
106964 WhereInfo *pWInfo; /* Will become the return value of this function */
106965 Vdbe *v = pParse->pVdbe; /* The virtual database engine */
106966 Bitmask notReady; /* Cursors that are not yet positioned */
106967 WhereMaskSet *pMaskSet; /* The expression mask set */
106968 WhereClause *pWC; /* Decomposition of the WHERE clause */
106969 struct SrcList_item *pTabItem; /* A single entry from pTabList */
106970 WhereLevel *pLevel; /* A single level in the pWInfo list */
106971 int iFrom; /* First unused FROM clause element */
106972 int andFlags; /* AND-ed combination of all pWC->a[].wtFlags */
106973 sqlite3 *db; /* Database connection */
106975 /* The number of tables in the FROM clause is limited by the number of
106976 ** bits in a Bitmask
106978 testcase( pTabList->nSrc==BMS );
106979 if( pTabList->nSrc>BMS ){
106980 sqlite3ErrorMsg(pParse, "at most %d tables in a join", BMS);
106981 return 0;
106984 /* This function normally generates a nested loop for all tables in
106985 ** pTabList. But if the WHERE_ONETABLE_ONLY flag is set, then we should
106986 ** only generate code for the first table in pTabList and assume that
106987 ** any cursors associated with subsequent tables are uninitialized.
106989 nTabList = (wctrlFlags & WHERE_ONETABLE_ONLY) ? 1 : pTabList->nSrc;
106991 /* Allocate and initialize the WhereInfo structure that will become the
106992 ** return value. A single allocation is used to store the WhereInfo
106993 ** struct, the contents of WhereInfo.a[], the WhereClause structure
106994 ** and the WhereMaskSet structure. Since WhereClause contains an 8-byte
106995 ** field (type Bitmask) it must be aligned on an 8-byte boundary on
106996 ** some architectures. Hence the ROUND8() below.
106998 db = pParse->db;
106999 nByteWInfo = ROUND8(sizeof(WhereInfo)+(nTabList-1)*sizeof(WhereLevel));
107000 pWInfo = sqlite3DbMallocZero(db,
107001 nByteWInfo +
107002 sizeof(WhereClause) +
107003 sizeof(WhereMaskSet)
107005 if( db->mallocFailed ){
107006 sqlite3DbFree(db, pWInfo);
107007 pWInfo = 0;
107008 goto whereBeginError;
107010 pWInfo->nLevel = nTabList;
107011 pWInfo->pParse = pParse;
107012 pWInfo->pTabList = pTabList;
107013 pWInfo->iBreak = sqlite3VdbeMakeLabel(v);
107014 pWInfo->pWC = pWC = (WhereClause *)&((u8 *)pWInfo)[nByteWInfo];
107015 pWInfo->wctrlFlags = wctrlFlags;
107016 pWInfo->savedNQueryLoop = pParse->nQueryLoop;
107017 pMaskSet = (WhereMaskSet*)&pWC[1];
107019 /* Disable the DISTINCT optimization if SQLITE_DistinctOpt is set via
107020 ** sqlite3_test_ctrl(SQLITE_TESTCTRL_OPTIMIZATIONS,...) */
107021 if( db->flags & SQLITE_DistinctOpt ) pDistinct = 0;
107023 /* Split the WHERE clause into separate subexpressions where each
107024 ** subexpression is separated by an AND operator.
107026 initMaskSet(pMaskSet);
107027 whereClauseInit(pWC, pParse, pMaskSet, wctrlFlags);
107028 sqlite3ExprCodeConstants(pParse, pWhere);
107029 whereSplit(pWC, pWhere, TK_AND); /* IMP: R-15842-53296 */
107031 /* Special case: a WHERE clause that is constant. Evaluate the
107032 ** expression and either jump over all of the code or fall thru.
107034 if( pWhere && (nTabList==0 || sqlite3ExprIsConstantNotJoin(pWhere)) ){
107035 sqlite3ExprIfFalse(pParse, pWhere, pWInfo->iBreak, SQLITE_JUMPIFNULL);
107036 pWhere = 0;
107039 /* Assign a bit from the bitmask to every term in the FROM clause.
107041 ** When assigning bitmask values to FROM clause cursors, it must be
107042 ** the case that if X is the bitmask for the N-th FROM clause term then
107043 ** the bitmask for all FROM clause terms to the left of the N-th term
107044 ** is (X-1). An expression from the ON clause of a LEFT JOIN can use
107045 ** its Expr.iRightJoinTable value to find the bitmask of the right table
107046 ** of the join. Subtracting one from the right table bitmask gives a
107047 ** bitmask for all tables to the left of the join. Knowing the bitmask
107048 ** for all tables to the left of a left join is important. Ticket #3015.
107050 ** Configure the WhereClause.vmask variable so that bits that correspond
107051 ** to virtual table cursors are set. This is used to selectively disable
107052 ** the OR-to-IN transformation in exprAnalyzeOrTerm(). It is not helpful
107053 ** with virtual tables.
107055 ** Note that bitmasks are created for all pTabList->nSrc tables in
107056 ** pTabList, not just the first nTabList tables. nTabList is normally
107057 ** equal to pTabList->nSrc but might be shortened to 1 if the
107058 ** WHERE_ONETABLE_ONLY flag is set.
107060 assert( pWC->vmask==0 && pMaskSet->n==0 );
107061 for(i=0; i<pTabList->nSrc; i++){
107062 createMask(pMaskSet, pTabList->a[i].iCursor);
107063 #ifndef SQLITE_OMIT_VIRTUALTABLE
107064 if( ALWAYS(pTabList->a[i].pTab) && IsVirtual(pTabList->a[i].pTab) ){
107065 pWC->vmask |= ((Bitmask)1 << i);
107067 #endif
107069 #ifndef NDEBUG
107071 Bitmask toTheLeft = 0;
107072 for(i=0; i<pTabList->nSrc; i++){
107073 Bitmask m = getMask(pMaskSet, pTabList->a[i].iCursor);
107074 assert( (m-1)==toTheLeft );
107075 toTheLeft |= m;
107078 #endif
107080 /* Analyze all of the subexpressions. Note that exprAnalyze() might
107081 ** add new virtual terms onto the end of the WHERE clause. We do not
107082 ** want to analyze these virtual terms, so start analyzing at the end
107083 ** and work forward so that the added virtual terms are never processed.
107085 exprAnalyzeAll(pTabList, pWC);
107086 if( db->mallocFailed ){
107087 goto whereBeginError;
107090 /* Check if the DISTINCT qualifier, if there is one, is redundant.
107091 ** If it is, then set pDistinct to NULL and WhereInfo.eDistinct to
107092 ** WHERE_DISTINCT_UNIQUE to tell the caller to ignore the DISTINCT.
107094 if( pDistinct && isDistinctRedundant(pParse, pTabList, pWC, pDistinct) ){
107095 pDistinct = 0;
107096 pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
107099 /* Chose the best index to use for each table in the FROM clause.
107101 ** This loop fills in the following fields:
107103 ** pWInfo->a[].pIdx The index to use for this level of the loop.
107104 ** pWInfo->a[].wsFlags WHERE_xxx flags associated with pIdx
107105 ** pWInfo->a[].nEq The number of == and IN constraints
107106 ** pWInfo->a[].iFrom Which term of the FROM clause is being coded
107107 ** pWInfo->a[].iTabCur The VDBE cursor for the database table
107108 ** pWInfo->a[].iIdxCur The VDBE cursor for the index
107109 ** pWInfo->a[].pTerm When wsFlags==WO_OR, the OR-clause term
107111 ** This loop also figures out the nesting order of tables in the FROM
107112 ** clause.
107114 notReady = ~(Bitmask)0;
107115 andFlags = ~0;
107116 WHERETRACE(("*** Optimizer Start ***\n"));
107117 for(i=iFrom=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
107118 WhereCost bestPlan; /* Most efficient plan seen so far */
107119 Index *pIdx; /* Index for FROM table at pTabItem */
107120 int j; /* For looping over FROM tables */
107121 int bestJ = -1; /* The value of j */
107122 Bitmask m; /* Bitmask value for j or bestJ */
107123 int isOptimal; /* Iterator for optimal/non-optimal search */
107124 int nUnconstrained; /* Number tables without INDEXED BY */
107125 Bitmask notIndexed; /* Mask of tables that cannot use an index */
107127 memset(&bestPlan, 0, sizeof(bestPlan));
107128 bestPlan.rCost = SQLITE_BIG_DBL;
107129 WHERETRACE(("*** Begin search for loop %d ***\n", i));
107131 /* Loop through the remaining entries in the FROM clause to find the
107132 ** next nested loop. The loop tests all FROM clause entries
107133 ** either once or twice.
107135 ** The first test is always performed if there are two or more entries
107136 ** remaining and never performed if there is only one FROM clause entry
107137 ** to choose from. The first test looks for an "optimal" scan. In
107138 ** this context an optimal scan is one that uses the same strategy
107139 ** for the given FROM clause entry as would be selected if the entry
107140 ** were used as the innermost nested loop. In other words, a table
107141 ** is chosen such that the cost of running that table cannot be reduced
107142 ** by waiting for other tables to run first. This "optimal" test works
107143 ** by first assuming that the FROM clause is on the inner loop and finding
107144 ** its query plan, then checking to see if that query plan uses any
107145 ** other FROM clause terms that are notReady. If no notReady terms are
107146 ** used then the "optimal" query plan works.
107148 ** Note that the WhereCost.nRow parameter for an optimal scan might
107149 ** not be as small as it would be if the table really were the innermost
107150 ** join. The nRow value can be reduced by WHERE clause constraints
107151 ** that do not use indices. But this nRow reduction only happens if the
107152 ** table really is the innermost join.
107154 ** The second loop iteration is only performed if no optimal scan
107155 ** strategies were found by the first iteration. This second iteration
107156 ** is used to search for the lowest cost scan overall.
107158 ** Previous versions of SQLite performed only the second iteration -
107159 ** the next outermost loop was always that with the lowest overall
107160 ** cost. However, this meant that SQLite could select the wrong plan
107161 ** for scripts such as the following:
107163 ** CREATE TABLE t1(a, b);
107164 ** CREATE TABLE t2(c, d);
107165 ** SELECT * FROM t2, t1 WHERE t2.rowid = t1.a;
107167 ** The best strategy is to iterate through table t1 first. However it
107168 ** is not possible to determine this with a simple greedy algorithm.
107169 ** Since the cost of a linear scan through table t2 is the same
107170 ** as the cost of a linear scan through table t1, a simple greedy
107171 ** algorithm may choose to use t2 for the outer loop, which is a much
107172 ** costlier approach.
107174 nUnconstrained = 0;
107175 notIndexed = 0;
107176 for(isOptimal=(iFrom<nTabList-1); isOptimal>=0 && bestJ<0; isOptimal--){
107177 Bitmask mask; /* Mask of tables not yet ready */
107178 for(j=iFrom, pTabItem=&pTabList->a[j]; j<nTabList; j++, pTabItem++){
107179 int doNotReorder; /* True if this table should not be reordered */
107180 WhereCost sCost; /* Cost information from best[Virtual]Index() */
107181 ExprList *pOrderBy; /* ORDER BY clause for index to optimize */
107182 ExprList *pDist; /* DISTINCT clause for index to optimize */
107184 doNotReorder = (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0;
107185 if( j!=iFrom && doNotReorder ) break;
107186 m = getMask(pMaskSet, pTabItem->iCursor);
107187 if( (m & notReady)==0 ){
107188 if( j==iFrom ) iFrom++;
107189 continue;
107191 mask = (isOptimal ? m : notReady);
107192 pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0);
107193 pDist = (i==0 ? pDistinct : 0);
107194 if( pTabItem->pIndex==0 ) nUnconstrained++;
107196 WHERETRACE(("=== trying table %d with isOptimal=%d ===\n",
107197 j, isOptimal));
107198 assert( pTabItem->pTab );
107199 #ifndef SQLITE_OMIT_VIRTUALTABLE
107200 if( IsVirtual(pTabItem->pTab) ){
107201 sqlite3_index_info **pp = &pWInfo->a[j].pIdxInfo;
107202 bestVirtualIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
107203 &sCost, pp);
107204 }else
107205 #endif
107207 bestBtreeIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
107208 pDist, &sCost);
107210 assert( isOptimal || (sCost.used&notReady)==0 );
107212 /* If an INDEXED BY clause is present, then the plan must use that
107213 ** index if it uses any index at all */
107214 assert( pTabItem->pIndex==0
107215 || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
107216 || sCost.plan.u.pIdx==pTabItem->pIndex );
107218 if( isOptimal && (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ){
107219 notIndexed |= m;
107222 /* Conditions under which this table becomes the best so far:
107224 ** (1) The table must not depend on other tables that have not
107225 ** yet run.
107227 ** (2) A full-table-scan plan cannot supercede indexed plan unless
107228 ** the full-table-scan is an "optimal" plan as defined above.
107230 ** (3) All tables have an INDEXED BY clause or this table lacks an
107231 ** INDEXED BY clause or this table uses the specific
107232 ** index specified by its INDEXED BY clause. This rule ensures
107233 ** that a best-so-far is always selected even if an impossible
107234 ** combination of INDEXED BY clauses are given. The error
107235 ** will be detected and relayed back to the application later.
107236 ** The NEVER() comes about because rule (2) above prevents
107237 ** An indexable full-table-scan from reaching rule (3).
107239 ** (4) The plan cost must be lower than prior plans or else the
107240 ** cost must be the same and the number of rows must be lower.
107242 if( (sCost.used&notReady)==0 /* (1) */
107243 && (bestJ<0 || (notIndexed&m)!=0 /* (2) */
107244 || (bestPlan.plan.wsFlags & WHERE_NOT_FULLSCAN)==0
107245 || (sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0)
107246 && (nUnconstrained==0 || pTabItem->pIndex==0 /* (3) */
107247 || NEVER((sCost.plan.wsFlags & WHERE_NOT_FULLSCAN)!=0))
107248 && (bestJ<0 || sCost.rCost<bestPlan.rCost /* (4) */
107249 || (sCost.rCost<=bestPlan.rCost
107250 && sCost.plan.nRow<bestPlan.plan.nRow))
107252 WHERETRACE(("=== table %d is best so far"
107253 " with cost=%g and nRow=%g\n",
107254 j, sCost.rCost, sCost.plan.nRow));
107255 bestPlan = sCost;
107256 bestJ = j;
107258 if( doNotReorder ) break;
107261 assert( bestJ>=0 );
107262 assert( notReady & getMask(pMaskSet, pTabList->a[bestJ].iCursor) );
107263 WHERETRACE(("*** Optimizer selects table %d for loop %d"
107264 " with cost=%g and nRow=%g\n",
107265 bestJ, pLevel-pWInfo->a, bestPlan.rCost, bestPlan.plan.nRow));
107266 /* The ALWAYS() that follows was added to hush up clang scan-build */
107267 if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 && ALWAYS(ppOrderBy) ){
107268 *ppOrderBy = 0;
107270 if( (bestPlan.plan.wsFlags & WHERE_DISTINCT)!=0 ){
107271 assert( pWInfo->eDistinct==0 );
107272 pWInfo->eDistinct = WHERE_DISTINCT_ORDERED;
107274 andFlags &= bestPlan.plan.wsFlags;
107275 pLevel->plan = bestPlan.plan;
107276 testcase( bestPlan.plan.wsFlags & WHERE_INDEXED );
107277 testcase( bestPlan.plan.wsFlags & WHERE_TEMP_INDEX );
107278 if( bestPlan.plan.wsFlags & (WHERE_INDEXED|WHERE_TEMP_INDEX) ){
107279 pLevel->iIdxCur = pParse->nTab++;
107280 }else{
107281 pLevel->iIdxCur = -1;
107283 notReady &= ~getMask(pMaskSet, pTabList->a[bestJ].iCursor);
107284 pLevel->iFrom = (u8)bestJ;
107285 if( bestPlan.plan.nRow>=(double)1 ){
107286 pParse->nQueryLoop *= bestPlan.plan.nRow;
107289 /* Check that if the table scanned by this loop iteration had an
107290 ** INDEXED BY clause attached to it, that the named index is being
107291 ** used for the scan. If not, then query compilation has failed.
107292 ** Return an error.
107294 pIdx = pTabList->a[bestJ].pIndex;
107295 if( pIdx ){
107296 if( (bestPlan.plan.wsFlags & WHERE_INDEXED)==0 ){
107297 sqlite3ErrorMsg(pParse, "cannot use index: %s", pIdx->zName);
107298 goto whereBeginError;
107299 }else{
107300 /* If an INDEXED BY clause is used, the bestIndex() function is
107301 ** guaranteed to find the index specified in the INDEXED BY clause
107302 ** if it find an index at all. */
107303 assert( bestPlan.plan.u.pIdx==pIdx );
107307 WHERETRACE(("*** Optimizer Finished ***\n"));
107308 if( pParse->nErr || db->mallocFailed ){
107309 goto whereBeginError;
107312 /* If the total query only selects a single row, then the ORDER BY
107313 ** clause is irrelevant.
107315 if( (andFlags & WHERE_UNIQUE)!=0 && ppOrderBy ){
107316 *ppOrderBy = 0;
107319 /* If the caller is an UPDATE or DELETE statement that is requesting
107320 ** to use a one-pass algorithm, determine if this is appropriate.
107321 ** The one-pass algorithm only works if the WHERE clause constraints
107322 ** the statement to update a single row.
107324 assert( (wctrlFlags & WHERE_ONEPASS_DESIRED)==0 || pWInfo->nLevel==1 );
107325 if( (wctrlFlags & WHERE_ONEPASS_DESIRED)!=0 && (andFlags & WHERE_UNIQUE)!=0 ){
107326 pWInfo->okOnePass = 1;
107327 pWInfo->a[0].plan.wsFlags &= ~WHERE_IDX_ONLY;
107330 /* Open all tables in the pTabList and any indices selected for
107331 ** searching those tables.
107333 sqlite3CodeVerifySchema(pParse, -1); /* Insert the cookie verifier Goto */
107334 notReady = ~(Bitmask)0;
107335 pWInfo->nRowOut = (double)1;
107336 for(i=0, pLevel=pWInfo->a; i<nTabList; i++, pLevel++){
107337 Table *pTab; /* Table to open */
107338 int iDb; /* Index of database containing table/index */
107340 pTabItem = &pTabList->a[pLevel->iFrom];
107341 pTab = pTabItem->pTab;
107342 pLevel->iTabCur = pTabItem->iCursor;
107343 pWInfo->nRowOut *= pLevel->plan.nRow;
107344 iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
107345 if( (pTab->tabFlags & TF_Ephemeral)!=0 || pTab->pSelect ){
107346 /* Do nothing */
107347 }else
107348 #ifndef SQLITE_OMIT_VIRTUALTABLE
107349 if( (pLevel->plan.wsFlags & WHERE_VIRTUALTABLE)!=0 ){
107350 const char *pVTab = (const char *)sqlite3GetVTable(db, pTab);
107351 int iCur = pTabItem->iCursor;
107352 sqlite3VdbeAddOp4(v, OP_VOpen, iCur, 0, 0, pVTab, P4_VTAB);
107353 }else
107354 #endif
107355 if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
107356 && (wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0 ){
107357 int op = pWInfo->okOnePass ? OP_OpenWrite : OP_OpenRead;
107358 sqlite3OpenTable(pParse, pTabItem->iCursor, iDb, pTab, op);
107359 testcase( pTab->nCol==BMS-1 );
107360 testcase( pTab->nCol==BMS );
107361 if( !pWInfo->okOnePass && pTab->nCol<BMS ){
107362 Bitmask b = pTabItem->colUsed;
107363 int n = 0;
107364 for(; b; b=b>>1, n++){}
107365 sqlite3VdbeChangeP4(v, sqlite3VdbeCurrentAddr(v)-1,
107366 SQLITE_INT_TO_PTR(n), P4_INT32);
107367 assert( n<=pTab->nCol );
107369 }else{
107370 sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
107372 #ifndef SQLITE_OMIT_AUTOMATIC_INDEX
107373 if( (pLevel->plan.wsFlags & WHERE_TEMP_INDEX)!=0 ){
107374 constructAutomaticIndex(pParse, pWC, pTabItem, notReady, pLevel);
107375 }else
107376 #endif
107377 if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
107378 Index *pIx = pLevel->plan.u.pIdx;
107379 KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIx);
107380 int iIdxCur = pLevel->iIdxCur;
107381 assert( pIx->pSchema==pTab->pSchema );
107382 assert( iIdxCur>=0 );
107383 sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIx->tnum, iDb,
107384 (char*)pKey, P4_KEYINFO_HANDOFF);
107385 VdbeComment((v, "%s", pIx->zName));
107387 sqlite3CodeVerifySchema(pParse, iDb);
107388 notReady &= ~getMask(pWC->pMaskSet, pTabItem->iCursor);
107390 pWInfo->iTop = sqlite3VdbeCurrentAddr(v);
107391 if( db->mallocFailed ) goto whereBeginError;
107393 /* Generate the code to do the search. Each iteration of the for
107394 ** loop below generates code for a single nested loop of the VM
107395 ** program.
107397 notReady = ~(Bitmask)0;
107398 for(i=0; i<nTabList; i++){
107399 pLevel = &pWInfo->a[i];
107400 explainOneScan(pParse, pTabList, pLevel, i, pLevel->iFrom, wctrlFlags);
107401 notReady = codeOneLoopStart(pWInfo, i, wctrlFlags, notReady, pWhere);
107402 pWInfo->iContinue = pLevel->addrCont;
107405 #ifdef SQLITE_TEST /* For testing and debugging use only */
107406 /* Record in the query plan information about the current table
107407 ** and the index used to access it (if any). If the table itself
107408 ** is not used, its name is just '{}'. If no index is used
107409 ** the index is listed as "{}". If the primary key is used the
107410 ** index name is '*'.
107412 for(i=0; i<nTabList; i++){
107413 char *z;
107414 int n;
107415 pLevel = &pWInfo->a[i];
107416 pTabItem = &pTabList->a[pLevel->iFrom];
107417 z = pTabItem->zAlias;
107418 if( z==0 ) z = pTabItem->pTab->zName;
107419 n = sqlite3Strlen30(z);
107420 if( n+nQPlan < sizeof(sqlite3_query_plan)-10 ){
107421 if( pLevel->plan.wsFlags & WHERE_IDX_ONLY ){
107422 memcpy(&sqlite3_query_plan[nQPlan], "{}", 2);
107423 nQPlan += 2;
107424 }else{
107425 memcpy(&sqlite3_query_plan[nQPlan], z, n);
107426 nQPlan += n;
107428 sqlite3_query_plan[nQPlan++] = ' ';
107430 testcase( pLevel->plan.wsFlags & WHERE_ROWID_EQ );
107431 testcase( pLevel->plan.wsFlags & WHERE_ROWID_RANGE );
107432 if( pLevel->plan.wsFlags & (WHERE_ROWID_EQ|WHERE_ROWID_RANGE) ){
107433 memcpy(&sqlite3_query_plan[nQPlan], "* ", 2);
107434 nQPlan += 2;
107435 }else if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 ){
107436 n = sqlite3Strlen30(pLevel->plan.u.pIdx->zName);
107437 if( n+nQPlan < sizeof(sqlite3_query_plan)-2 ){
107438 memcpy(&sqlite3_query_plan[nQPlan], pLevel->plan.u.pIdx->zName, n);
107439 nQPlan += n;
107440 sqlite3_query_plan[nQPlan++] = ' ';
107442 }else{
107443 memcpy(&sqlite3_query_plan[nQPlan], "{} ", 3);
107444 nQPlan += 3;
107447 while( nQPlan>0 && sqlite3_query_plan[nQPlan-1]==' ' ){
107448 sqlite3_query_plan[--nQPlan] = 0;
107450 sqlite3_query_plan[nQPlan] = 0;
107451 nQPlan = 0;
107452 #endif /* SQLITE_TEST // Testing and debugging use only */
107454 /* Record the continuation address in the WhereInfo structure. Then
107455 ** clean up and return.
107457 return pWInfo;
107459 /* Jump here if malloc fails */
107460 whereBeginError:
107461 if( pWInfo ){
107462 pParse->nQueryLoop = pWInfo->savedNQueryLoop;
107463 whereInfoFree(db, pWInfo);
107465 return 0;
107469 ** Generate the end of the WHERE loop. See comments on
107470 ** sqlite3WhereBegin() for additional information.
107472 SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo *pWInfo){
107473 Parse *pParse = pWInfo->pParse;
107474 Vdbe *v = pParse->pVdbe;
107475 int i;
107476 WhereLevel *pLevel;
107477 SrcList *pTabList = pWInfo->pTabList;
107478 sqlite3 *db = pParse->db;
107480 /* Generate loop termination code.
107482 sqlite3ExprCacheClear(pParse);
107483 for(i=pWInfo->nLevel-1; i>=0; i--){
107484 pLevel = &pWInfo->a[i];
107485 sqlite3VdbeResolveLabel(v, pLevel->addrCont);
107486 if( pLevel->op!=OP_Noop ){
107487 sqlite3VdbeAddOp2(v, pLevel->op, pLevel->p1, pLevel->p2);
107488 sqlite3VdbeChangeP5(v, pLevel->p5);
107490 if( pLevel->plan.wsFlags & WHERE_IN_ABLE && pLevel->u.in.nIn>0 ){
107491 struct InLoop *pIn;
107492 int j;
107493 sqlite3VdbeResolveLabel(v, pLevel->addrNxt);
107494 for(j=pLevel->u.in.nIn, pIn=&pLevel->u.in.aInLoop[j-1]; j>0; j--, pIn--){
107495 sqlite3VdbeJumpHere(v, pIn->addrInTop+1);
107496 sqlite3VdbeAddOp2(v, OP_Next, pIn->iCur, pIn->addrInTop);
107497 sqlite3VdbeJumpHere(v, pIn->addrInTop-1);
107499 sqlite3DbFree(db, pLevel->u.in.aInLoop);
107501 sqlite3VdbeResolveLabel(v, pLevel->addrBrk);
107502 if( pLevel->iLeftJoin ){
107503 int addr;
107504 addr = sqlite3VdbeAddOp1(v, OP_IfPos, pLevel->iLeftJoin);
107505 assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
107506 || (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 );
107507 if( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0 ){
107508 sqlite3VdbeAddOp1(v, OP_NullRow, pTabList->a[i].iCursor);
107510 if( pLevel->iIdxCur>=0 ){
107511 sqlite3VdbeAddOp1(v, OP_NullRow, pLevel->iIdxCur);
107513 if( pLevel->op==OP_Return ){
107514 sqlite3VdbeAddOp2(v, OP_Gosub, pLevel->p1, pLevel->addrFirst);
107515 }else{
107516 sqlite3VdbeAddOp2(v, OP_Goto, 0, pLevel->addrFirst);
107518 sqlite3VdbeJumpHere(v, addr);
107522 /* The "break" point is here, just past the end of the outer loop.
107523 ** Set it.
107525 sqlite3VdbeResolveLabel(v, pWInfo->iBreak);
107527 /* Close all of the cursors that were opened by sqlite3WhereBegin.
107529 assert( pWInfo->nLevel==1 || pWInfo->nLevel==pTabList->nSrc );
107530 for(i=0, pLevel=pWInfo->a; i<pWInfo->nLevel; i++, pLevel++){
107531 struct SrcList_item *pTabItem = &pTabList->a[pLevel->iFrom];
107532 Table *pTab = pTabItem->pTab;
107533 assert( pTab!=0 );
107534 if( (pTab->tabFlags & TF_Ephemeral)==0
107535 && pTab->pSelect==0
107536 && (pWInfo->wctrlFlags & WHERE_OMIT_OPEN_CLOSE)==0
107538 int ws = pLevel->plan.wsFlags;
107539 if( !pWInfo->okOnePass && (ws & WHERE_IDX_ONLY)==0 ){
107540 sqlite3VdbeAddOp1(v, OP_Close, pTabItem->iCursor);
107542 if( (ws & WHERE_INDEXED)!=0 && (ws & WHERE_TEMP_INDEX)==0 ){
107543 sqlite3VdbeAddOp1(v, OP_Close, pLevel->iIdxCur);
107547 /* If this scan uses an index, make code substitutions to read data
107548 ** from the index in preference to the table. Sometimes, this means
107549 ** the table need never be read from. This is a performance boost,
107550 ** as the vdbe level waits until the table is read before actually
107551 ** seeking the table cursor to the record corresponding to the current
107552 ** position in the index.
107554 ** Calls to the code generator in between sqlite3WhereBegin and
107555 ** sqlite3WhereEnd will have created code that references the table
107556 ** directly. This loop scans all that code looking for opcodes
107557 ** that reference the table and converts them into opcodes that
107558 ** reference the index.
107560 if( (pLevel->plan.wsFlags & WHERE_INDEXED)!=0 && !db->mallocFailed){
107561 int k, j, last;
107562 VdbeOp *pOp;
107563 Index *pIdx = pLevel->plan.u.pIdx;
107565 assert( pIdx!=0 );
107566 pOp = sqlite3VdbeGetOp(v, pWInfo->iTop);
107567 last = sqlite3VdbeCurrentAddr(v);
107568 for(k=pWInfo->iTop; k<last; k++, pOp++){
107569 if( pOp->p1!=pLevel->iTabCur ) continue;
107570 if( pOp->opcode==OP_Column ){
107571 for(j=0; j<pIdx->nColumn; j++){
107572 if( pOp->p2==pIdx->aiColumn[j] ){
107573 pOp->p2 = j;
107574 pOp->p1 = pLevel->iIdxCur;
107575 break;
107578 assert( (pLevel->plan.wsFlags & WHERE_IDX_ONLY)==0
107579 || j<pIdx->nColumn );
107580 }else if( pOp->opcode==OP_Rowid ){
107581 pOp->p1 = pLevel->iIdxCur;
107582 pOp->opcode = OP_IdxRowid;
107588 /* Final cleanup
107590 pParse->nQueryLoop = pWInfo->savedNQueryLoop;
107591 whereInfoFree(db, pWInfo);
107592 return;
107595 /************** End of where.c ***********************************************/
107596 /************** Begin file parse.c *******************************************/
107597 /* Driver template for the LEMON parser generator.
107598 ** The author disclaims copyright to this source code.
107600 ** This version of "lempar.c" is modified, slightly, for use by SQLite.
107601 ** The only modifications are the addition of a couple of NEVER()
107602 ** macros to disable tests that are needed in the case of a general
107603 ** LALR(1) grammar but which are always false in the
107604 ** specific grammar used by SQLite.
107606 /* First off, code is included that follows the "include" declaration
107607 ** in the input grammar file. */
107608 /* #include <stdio.h> */
107612 ** Disable all error recovery processing in the parser push-down
107613 ** automaton.
107615 #define YYNOERRORRECOVERY 1
107618 ** Make yytestcase() the same as testcase()
107620 #define yytestcase(X) testcase(X)
107623 ** An instance of this structure holds information about the
107624 ** LIMIT clause of a SELECT statement.
107626 struct LimitVal {
107627 Expr *pLimit; /* The LIMIT expression. NULL if there is no limit */
107628 Expr *pOffset; /* The OFFSET expression. NULL if there is none */
107632 ** An instance of this structure is used to store the LIKE,
107633 ** GLOB, NOT LIKE, and NOT GLOB operators.
107635 struct LikeOp {
107636 Token eOperator; /* "like" or "glob" or "regexp" */
107637 int not; /* True if the NOT keyword is present */
107641 ** An instance of the following structure describes the event of a
107642 ** TRIGGER. "a" is the event type, one of TK_UPDATE, TK_INSERT,
107643 ** TK_DELETE, or TK_INSTEAD. If the event is of the form
107645 ** UPDATE ON (a,b,c)
107647 ** Then the "b" IdList records the list "a,b,c".
107649 struct TrigEvent { int a; IdList * b; };
107652 ** An instance of this structure holds the ATTACH key and the key type.
107654 struct AttachKey { int type; Token key; };
107657 /* This is a utility routine used to set the ExprSpan.zStart and
107658 ** ExprSpan.zEnd values of pOut so that the span covers the complete
107659 ** range of text beginning with pStart and going to the end of pEnd.
107661 static void spanSet(ExprSpan *pOut, Token *pStart, Token *pEnd){
107662 pOut->zStart = pStart->z;
107663 pOut->zEnd = &pEnd->z[pEnd->n];
107666 /* Construct a new Expr object from a single identifier. Use the
107667 ** new Expr to populate pOut. Set the span of pOut to be the identifier
107668 ** that created the expression.
107670 static void spanExpr(ExprSpan *pOut, Parse *pParse, int op, Token *pValue){
107671 pOut->pExpr = sqlite3PExpr(pParse, op, 0, 0, pValue);
107672 pOut->zStart = pValue->z;
107673 pOut->zEnd = &pValue->z[pValue->n];
107676 /* This routine constructs a binary expression node out of two ExprSpan
107677 ** objects and uses the result to populate a new ExprSpan object.
107679 static void spanBinaryExpr(
107680 ExprSpan *pOut, /* Write the result here */
107681 Parse *pParse, /* The parsing context. Errors accumulate here */
107682 int op, /* The binary operation */
107683 ExprSpan *pLeft, /* The left operand */
107684 ExprSpan *pRight /* The right operand */
107686 pOut->pExpr = sqlite3PExpr(pParse, op, pLeft->pExpr, pRight->pExpr, 0);
107687 pOut->zStart = pLeft->zStart;
107688 pOut->zEnd = pRight->zEnd;
107691 /* Construct an expression node for a unary postfix operator
107693 static void spanUnaryPostfix(
107694 ExprSpan *pOut, /* Write the new expression node here */
107695 Parse *pParse, /* Parsing context to record errors */
107696 int op, /* The operator */
107697 ExprSpan *pOperand, /* The operand */
107698 Token *pPostOp /* The operand token for setting the span */
107700 pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
107701 pOut->zStart = pOperand->zStart;
107702 pOut->zEnd = &pPostOp->z[pPostOp->n];
107705 /* A routine to convert a binary TK_IS or TK_ISNOT expression into a
107706 ** unary TK_ISNULL or TK_NOTNULL expression. */
107707 static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
107708 sqlite3 *db = pParse->db;
107709 if( db->mallocFailed==0 && pY->op==TK_NULL ){
107710 pA->op = (u8)op;
107711 sqlite3ExprDelete(db, pA->pRight);
107712 pA->pRight = 0;
107716 /* Construct an expression node for a unary prefix operator
107718 static void spanUnaryPrefix(
107719 ExprSpan *pOut, /* Write the new expression node here */
107720 Parse *pParse, /* Parsing context to record errors */
107721 int op, /* The operator */
107722 ExprSpan *pOperand, /* The operand */
107723 Token *pPreOp /* The operand token for setting the span */
107725 pOut->pExpr = sqlite3PExpr(pParse, op, pOperand->pExpr, 0, 0);
107726 pOut->zStart = pPreOp->z;
107727 pOut->zEnd = pOperand->zEnd;
107729 /* Next is all token values, in a form suitable for use by makeheaders.
107730 ** This section will be null unless lemon is run with the -m switch.
107733 ** These constants (all generated automatically by the parser generator)
107734 ** specify the various kinds of tokens (terminals) that the parser
107735 ** understands.
107737 ** Each symbol here is a terminal symbol in the grammar.
107739 /* Make sure the INTERFACE macro is defined.
107741 #ifndef INTERFACE
107742 # define INTERFACE 1
107743 #endif
107744 /* The next thing included is series of defines which control
107745 ** various aspects of the generated parser.
107746 ** YYCODETYPE is the data type used for storing terminal
107747 ** and nonterminal numbers. "unsigned char" is
107748 ** used if there are fewer than 250 terminals
107749 ** and nonterminals. "int" is used otherwise.
107750 ** YYNOCODE is a number of type YYCODETYPE which corresponds
107751 ** to no legal terminal or nonterminal number. This
107752 ** number is used to fill in empty slots of the hash
107753 ** table.
107754 ** YYFALLBACK If defined, this indicates that one or more tokens
107755 ** have fall-back values which should be used if the
107756 ** original value of the token will not parse.
107757 ** YYACTIONTYPE is the data type used for storing terminal
107758 ** and nonterminal numbers. "unsigned char" is
107759 ** used if there are fewer than 250 rules and
107760 ** states combined. "int" is used otherwise.
107761 ** sqlite3ParserTOKENTYPE is the data type used for minor tokens given
107762 ** directly to the parser from the tokenizer.
107763 ** YYMINORTYPE is the data type used for all minor tokens.
107764 ** This is typically a union of many types, one of
107765 ** which is sqlite3ParserTOKENTYPE. The entry in the union
107766 ** for base tokens is called "yy0".
107767 ** YYSTACKDEPTH is the maximum depth of the parser's stack. If
107768 ** zero the stack is dynamically sized using realloc()
107769 ** sqlite3ParserARG_SDECL A static variable declaration for the %extra_argument
107770 ** sqlite3ParserARG_PDECL A parameter declaration for the %extra_argument
107771 ** sqlite3ParserARG_STORE Code to store %extra_argument into yypParser
107772 ** sqlite3ParserARG_FETCH Code to extract %extra_argument from yypParser
107773 ** YYNSTATE the combined number of states.
107774 ** YYNRULE the number of rules in the grammar
107775 ** YYERRORSYMBOL is the code number of the error symbol. If not
107776 ** defined, then do no error processing.
107778 #define YYCODETYPE unsigned char
107779 #define YYNOCODE 253
107780 #define YYACTIONTYPE unsigned short int
107781 #define YYWILDCARD 67
107782 #define sqlite3ParserTOKENTYPE Token
107783 typedef union {
107784 int yyinit;
107785 sqlite3ParserTOKENTYPE yy0;
107786 int yy4;
107787 struct TrigEvent yy90;
107788 ExprSpan yy118;
107789 TriggerStep* yy203;
107790 u8 yy210;
107791 struct {int value; int mask;} yy215;
107792 SrcList* yy259;
107793 struct LimitVal yy292;
107794 Expr* yy314;
107795 ExprList* yy322;
107796 struct LikeOp yy342;
107797 IdList* yy384;
107798 Select* yy387;
107799 } YYMINORTYPE;
107800 #ifndef YYSTACKDEPTH
107801 #define YYSTACKDEPTH 100
107802 #endif
107803 #define sqlite3ParserARG_SDECL Parse *pParse;
107804 #define sqlite3ParserARG_PDECL ,Parse *pParse
107805 #define sqlite3ParserARG_FETCH Parse *pParse = yypParser->pParse
107806 #define sqlite3ParserARG_STORE yypParser->pParse = pParse
107807 #define YYNSTATE 630
107808 #define YYNRULE 329
107809 #define YYFALLBACK 1
107810 #define YY_NO_ACTION (YYNSTATE+YYNRULE+2)
107811 #define YY_ACCEPT_ACTION (YYNSTATE+YYNRULE+1)
107812 #define YY_ERROR_ACTION (YYNSTATE+YYNRULE)
107814 /* The yyzerominor constant is used to initialize instances of
107815 ** YYMINORTYPE objects to zero. */
107816 static const YYMINORTYPE yyzerominor = { 0 };
107818 /* Define the yytestcase() macro to be a no-op if is not already defined
107819 ** otherwise.
107821 ** Applications can choose to define yytestcase() in the %include section
107822 ** to a macro that can assist in verifying code coverage. For production
107823 ** code the yytestcase() macro should be turned off. But it is useful
107824 ** for testing.
107826 #ifndef yytestcase
107827 # define yytestcase(X)
107828 #endif
107831 /* Next are the tables used to determine what action to take based on the
107832 ** current state and lookahead token. These tables are used to implement
107833 ** functions that take a state number and lookahead value and return an
107834 ** action integer.
107836 ** Suppose the action integer is N. Then the action is determined as
107837 ** follows
107839 ** 0 <= N < YYNSTATE Shift N. That is, push the lookahead
107840 ** token onto the stack and goto state N.
107842 ** YYNSTATE <= N < YYNSTATE+YYNRULE Reduce by rule N-YYNSTATE.
107844 ** N == YYNSTATE+YYNRULE A syntax error has occurred.
107846 ** N == YYNSTATE+YYNRULE+1 The parser accepts its input.
107848 ** N == YYNSTATE+YYNRULE+2 No such action. Denotes unused
107849 ** slots in the yy_action[] table.
107851 ** The action table is constructed as a single large table named yy_action[].
107852 ** Given state S and lookahead X, the action is computed as
107854 ** yy_action[ yy_shift_ofst[S] + X ]
107856 ** If the index value yy_shift_ofst[S]+X is out of range or if the value
107857 ** yy_lookahead[yy_shift_ofst[S]+X] is not equal to X or if yy_shift_ofst[S]
107858 ** is equal to YY_SHIFT_USE_DFLT, it means that the action is not in the table
107859 ** and that yy_default[S] should be used instead.
107861 ** The formula above is for computing the action when the lookahead is
107862 ** a terminal symbol. If the lookahead is a non-terminal (as occurs after
107863 ** a reduce action) then the yy_reduce_ofst[] array is used in place of
107864 ** the yy_shift_ofst[] array and YY_REDUCE_USE_DFLT is used in place of
107865 ** YY_SHIFT_USE_DFLT.
107867 ** The following are the tables generated in this section:
107869 ** yy_action[] A single table containing all actions.
107870 ** yy_lookahead[] A table containing the lookahead for each entry in
107871 ** yy_action. Used to detect hash collisions.
107872 ** yy_shift_ofst[] For each state, the offset into yy_action for
107873 ** shifting terminals.
107874 ** yy_reduce_ofst[] For each state, the offset into yy_action for
107875 ** shifting non-terminals after a reduce.
107876 ** yy_default[] Default action for each state.
107878 #define YY_ACTTAB_COUNT (1557)
107879 static const YYACTIONTYPE yy_action[] = {
107880 /* 0 */ 313, 960, 186, 419, 2, 172, 627, 597, 55, 55,
107881 /* 10 */ 55, 55, 48, 53, 53, 53, 53, 52, 52, 51,
107882 /* 20 */ 51, 51, 50, 238, 302, 283, 623, 622, 516, 515,
107883 /* 30 */ 590, 584, 55, 55, 55, 55, 282, 53, 53, 53,
107884 /* 40 */ 53, 52, 52, 51, 51, 51, 50, 238, 6, 56,
107885 /* 50 */ 57, 47, 582, 581, 583, 583, 54, 54, 55, 55,
107886 /* 60 */ 55, 55, 608, 53, 53, 53, 53, 52, 52, 51,
107887 /* 70 */ 51, 51, 50, 238, 313, 597, 409, 330, 579, 579,
107888 /* 80 */ 32, 53, 53, 53, 53, 52, 52, 51, 51, 51,
107889 /* 90 */ 50, 238, 330, 217, 620, 619, 166, 411, 624, 382,
107890 /* 100 */ 379, 378, 7, 491, 590, 584, 200, 199, 198, 58,
107891 /* 110 */ 377, 300, 414, 621, 481, 66, 623, 622, 621, 580,
107892 /* 120 */ 254, 601, 94, 56, 57, 47, 582, 581, 583, 583,
107893 /* 130 */ 54, 54, 55, 55, 55, 55, 671, 53, 53, 53,
107894 /* 140 */ 53, 52, 52, 51, 51, 51, 50, 238, 313, 532,
107895 /* 150 */ 226, 506, 507, 133, 177, 139, 284, 385, 279, 384,
107896 /* 160 */ 169, 197, 342, 398, 251, 226, 253, 275, 388, 167,
107897 /* 170 */ 139, 284, 385, 279, 384, 169, 570, 236, 590, 584,
107898 /* 180 */ 672, 240, 275, 157, 620, 619, 554, 437, 51, 51,
107899 /* 190 */ 51, 50, 238, 343, 439, 553, 438, 56, 57, 47,
107900 /* 200 */ 582, 581, 583, 583, 54, 54, 55, 55, 55, 55,
107901 /* 210 */ 465, 53, 53, 53, 53, 52, 52, 51, 51, 51,
107902 /* 220 */ 50, 238, 313, 390, 52, 52, 51, 51, 51, 50,
107903 /* 230 */ 238, 391, 166, 491, 566, 382, 379, 378, 409, 440,
107904 /* 240 */ 579, 579, 252, 440, 607, 66, 377, 513, 621, 49,
107905 /* 250 */ 46, 147, 590, 584, 621, 16, 466, 189, 621, 441,
107906 /* 260 */ 442, 673, 526, 441, 340, 577, 595, 64, 194, 482,
107907 /* 270 */ 434, 56, 57, 47, 582, 581, 583, 583, 54, 54,
107908 /* 280 */ 55, 55, 55, 55, 30, 53, 53, 53, 53, 52,
107909 /* 290 */ 52, 51, 51, 51, 50, 238, 313, 593, 593, 593,
107910 /* 300 */ 387, 578, 606, 493, 259, 351, 258, 411, 1, 623,
107911 /* 310 */ 622, 496, 623, 622, 65, 240, 623, 622, 597, 443,
107912 /* 320 */ 237, 239, 414, 341, 237, 602, 590, 584, 18, 603,
107913 /* 330 */ 166, 601, 87, 382, 379, 378, 67, 623, 622, 38,
107914 /* 340 */ 623, 622, 176, 270, 377, 56, 57, 47, 582, 581,
107915 /* 350 */ 583, 583, 54, 54, 55, 55, 55, 55, 175, 53,
107916 /* 360 */ 53, 53, 53, 52, 52, 51, 51, 51, 50, 238,
107917 /* 370 */ 313, 396, 233, 411, 531, 565, 317, 620, 619, 44,
107918 /* 380 */ 620, 619, 240, 206, 620, 619, 597, 266, 414, 268,
107919 /* 390 */ 409, 597, 579, 579, 352, 184, 505, 601, 73, 533,
107920 /* 400 */ 590, 584, 466, 548, 190, 620, 619, 576, 620, 619,
107921 /* 410 */ 547, 383, 551, 35, 332, 575, 574, 600, 504, 56,
107922 /* 420 */ 57, 47, 582, 581, 583, 583, 54, 54, 55, 55,
107923 /* 430 */ 55, 55, 567, 53, 53, 53, 53, 52, 52, 51,
107924 /* 440 */ 51, 51, 50, 238, 313, 411, 561, 561, 528, 364,
107925 /* 450 */ 259, 351, 258, 183, 361, 549, 524, 374, 411, 597,
107926 /* 460 */ 414, 240, 560, 560, 409, 604, 579, 579, 328, 601,
107927 /* 470 */ 93, 623, 622, 414, 590, 584, 237, 564, 559, 559,
107928 /* 480 */ 520, 402, 601, 87, 409, 210, 579, 579, 168, 421,
107929 /* 490 */ 950, 519, 950, 56, 57, 47, 582, 581, 583, 583,
107930 /* 500 */ 54, 54, 55, 55, 55, 55, 192, 53, 53, 53,
107931 /* 510 */ 53, 52, 52, 51, 51, 51, 50, 238, 313, 600,
107932 /* 520 */ 293, 563, 511, 234, 357, 146, 475, 475, 367, 411,
107933 /* 530 */ 562, 411, 358, 542, 425, 171, 411, 215, 144, 620,
107934 /* 540 */ 619, 544, 318, 353, 414, 203, 414, 275, 590, 584,
107935 /* 550 */ 549, 414, 174, 601, 94, 601, 79, 558, 471, 61,
107936 /* 560 */ 601, 79, 421, 949, 350, 949, 34, 56, 57, 47,
107937 /* 570 */ 582, 581, 583, 583, 54, 54, 55, 55, 55, 55,
107938 /* 580 */ 535, 53, 53, 53, 53, 52, 52, 51, 51, 51,
107939 /* 590 */ 50, 238, 313, 307, 424, 394, 272, 49, 46, 147,
107940 /* 600 */ 349, 322, 4, 411, 491, 312, 321, 425, 568, 492,
107941 /* 610 */ 216, 264, 407, 575, 574, 429, 66, 549, 414, 621,
107942 /* 620 */ 540, 602, 590, 584, 13, 603, 621, 601, 72, 12,
107943 /* 630 */ 618, 617, 616, 202, 210, 621, 546, 469, 422, 319,
107944 /* 640 */ 148, 56, 57, 47, 582, 581, 583, 583, 54, 54,
107945 /* 650 */ 55, 55, 55, 55, 338, 53, 53, 53, 53, 52,
107946 /* 660 */ 52, 51, 51, 51, 50, 238, 313, 600, 600, 411,
107947 /* 670 */ 39, 21, 37, 170, 237, 875, 411, 572, 572, 201,
107948 /* 680 */ 144, 473, 538, 331, 414, 474, 143, 146, 630, 628,
107949 /* 690 */ 334, 414, 353, 601, 68, 168, 590, 584, 132, 365,
107950 /* 700 */ 601, 96, 307, 423, 530, 336, 49, 46, 147, 568,
107951 /* 710 */ 406, 216, 549, 360, 529, 56, 57, 47, 582, 581,
107952 /* 720 */ 583, 583, 54, 54, 55, 55, 55, 55, 411, 53,
107953 /* 730 */ 53, 53, 53, 52, 52, 51, 51, 51, 50, 238,
107954 /* 740 */ 313, 411, 605, 414, 484, 510, 172, 422, 597, 318,
107955 /* 750 */ 496, 485, 601, 99, 411, 142, 414, 411, 231, 411,
107956 /* 760 */ 540, 411, 359, 629, 2, 601, 97, 426, 308, 414,
107957 /* 770 */ 590, 584, 414, 20, 414, 621, 414, 621, 601, 106,
107958 /* 780 */ 503, 601, 105, 601, 108, 601, 109, 204, 28, 56,
107959 /* 790 */ 57, 47, 582, 581, 583, 583, 54, 54, 55, 55,
107960 /* 800 */ 55, 55, 411, 53, 53, 53, 53, 52, 52, 51,
107961 /* 810 */ 51, 51, 50, 238, 313, 411, 597, 414, 411, 276,
107962 /* 820 */ 214, 600, 411, 366, 213, 381, 601, 134, 274, 500,
107963 /* 830 */ 414, 167, 130, 414, 621, 411, 354, 414, 376, 601,
107964 /* 840 */ 135, 129, 601, 100, 590, 584, 601, 104, 522, 521,
107965 /* 850 */ 414, 621, 224, 273, 600, 167, 327, 282, 600, 601,
107966 /* 860 */ 103, 468, 521, 56, 57, 47, 582, 581, 583, 583,
107967 /* 870 */ 54, 54, 55, 55, 55, 55, 411, 53, 53, 53,
107968 /* 880 */ 53, 52, 52, 51, 51, 51, 50, 238, 313, 411,
107969 /* 890 */ 27, 414, 411, 375, 276, 167, 359, 544, 50, 238,
107970 /* 900 */ 601, 95, 128, 223, 414, 411, 165, 414, 411, 621,
107971 /* 910 */ 411, 621, 612, 601, 102, 372, 601, 76, 590, 584,
107972 /* 920 */ 414, 570, 236, 414, 470, 414, 167, 621, 188, 601,
107973 /* 930 */ 98, 225, 601, 138, 601, 137, 232, 56, 45, 47,
107974 /* 940 */ 582, 581, 583, 583, 54, 54, 55, 55, 55, 55,
107975 /* 950 */ 411, 53, 53, 53, 53, 52, 52, 51, 51, 51,
107976 /* 960 */ 50, 238, 313, 276, 276, 414, 411, 276, 544, 459,
107977 /* 970 */ 359, 171, 209, 479, 601, 136, 628, 334, 621, 621,
107978 /* 980 */ 125, 414, 621, 368, 411, 621, 257, 540, 589, 588,
107979 /* 990 */ 601, 75, 590, 584, 458, 446, 23, 23, 124, 414,
107980 /* 1000 */ 326, 325, 621, 427, 324, 309, 600, 288, 601, 92,
107981 /* 1010 */ 586, 585, 57, 47, 582, 581, 583, 583, 54, 54,
107982 /* 1020 */ 55, 55, 55, 55, 411, 53, 53, 53, 53, 52,
107983 /* 1030 */ 52, 51, 51, 51, 50, 238, 313, 587, 411, 414,
107984 /* 1040 */ 411, 207, 611, 476, 171, 472, 160, 123, 601, 91,
107985 /* 1050 */ 323, 261, 15, 414, 464, 414, 411, 621, 411, 354,
107986 /* 1060 */ 222, 411, 601, 74, 601, 90, 590, 584, 159, 264,
107987 /* 1070 */ 158, 414, 461, 414, 621, 600, 414, 121, 120, 25,
107988 /* 1080 */ 601, 89, 601, 101, 621, 601, 88, 47, 582, 581,
107989 /* 1090 */ 583, 583, 54, 54, 55, 55, 55, 55, 544, 53,
107990 /* 1100 */ 53, 53, 53, 52, 52, 51, 51, 51, 50, 238,
107991 /* 1110 */ 43, 405, 263, 3, 610, 264, 140, 415, 622, 24,
107992 /* 1120 */ 410, 11, 456, 594, 118, 155, 219, 452, 408, 621,
107993 /* 1130 */ 621, 621, 156, 43, 405, 621, 3, 286, 621, 113,
107994 /* 1140 */ 415, 622, 111, 445, 411, 400, 557, 403, 545, 10,
107995 /* 1150 */ 411, 408, 264, 110, 205, 436, 541, 566, 453, 414,
107996 /* 1160 */ 621, 621, 63, 621, 435, 414, 411, 621, 601, 94,
107997 /* 1170 */ 403, 621, 411, 337, 601, 86, 150, 40, 41, 534,
107998 /* 1180 */ 566, 414, 242, 264, 42, 413, 412, 414, 600, 595,
107999 /* 1190 */ 601, 85, 191, 333, 107, 451, 601, 84, 621, 539,
108000 /* 1200 */ 40, 41, 420, 230, 411, 149, 316, 42, 413, 412,
108001 /* 1210 */ 398, 127, 595, 315, 621, 399, 278, 625, 181, 414,
108002 /* 1220 */ 593, 593, 593, 592, 591, 14, 450, 411, 601, 71,
108003 /* 1230 */ 240, 621, 43, 405, 264, 3, 615, 180, 264, 415,
108004 /* 1240 */ 622, 614, 414, 593, 593, 593, 592, 591, 14, 621,
108005 /* 1250 */ 408, 601, 70, 621, 417, 33, 405, 613, 3, 411,
108006 /* 1260 */ 264, 411, 415, 622, 418, 626, 178, 509, 8, 403,
108007 /* 1270 */ 241, 416, 126, 408, 414, 621, 414, 449, 208, 566,
108008 /* 1280 */ 240, 221, 621, 601, 83, 601, 82, 599, 297, 277,
108009 /* 1290 */ 296, 30, 403, 31, 395, 264, 295, 397, 489, 40,
108010 /* 1300 */ 41, 411, 566, 220, 621, 294, 42, 413, 412, 271,
108011 /* 1310 */ 621, 595, 600, 621, 59, 60, 414, 269, 267, 623,
108012 /* 1320 */ 622, 36, 40, 41, 621, 601, 81, 598, 235, 42,
108013 /* 1330 */ 413, 412, 621, 621, 595, 265, 344, 411, 248, 556,
108014 /* 1340 */ 173, 185, 593, 593, 593, 592, 591, 14, 218, 29,
108015 /* 1350 */ 621, 543, 414, 305, 304, 303, 179, 301, 411, 566,
108016 /* 1360 */ 454, 601, 80, 289, 335, 593, 593, 593, 592, 591,
108017 /* 1370 */ 14, 411, 287, 414, 151, 392, 246, 260, 411, 196,
108018 /* 1380 */ 195, 523, 601, 69, 411, 245, 414, 526, 537, 285,
108019 /* 1390 */ 389, 595, 621, 414, 536, 601, 17, 362, 153, 414,
108020 /* 1400 */ 466, 463, 601, 78, 154, 414, 462, 152, 601, 77,
108021 /* 1410 */ 355, 255, 621, 455, 601, 9, 621, 386, 444, 517,
108022 /* 1420 */ 247, 621, 593, 593, 593, 621, 621, 244, 621, 243,
108023 /* 1430 */ 430, 518, 292, 621, 329, 621, 145, 393, 280, 513,
108024 /* 1440 */ 291, 131, 621, 514, 621, 621, 311, 621, 259, 346,
108025 /* 1450 */ 249, 621, 621, 229, 314, 621, 228, 512, 227, 240,
108026 /* 1460 */ 494, 488, 310, 164, 487, 486, 373, 480, 163, 262,
108027 /* 1470 */ 369, 371, 162, 26, 212, 478, 477, 161, 141, 363,
108028 /* 1480 */ 467, 122, 339, 187, 119, 348, 347, 117, 116, 115,
108029 /* 1490 */ 114, 112, 182, 457, 320, 22, 433, 432, 448, 19,
108030 /* 1500 */ 609, 431, 428, 62, 193, 596, 573, 298, 555, 552,
108031 /* 1510 */ 571, 404, 290, 380, 498, 510, 495, 306, 281, 499,
108032 /* 1520 */ 250, 5, 497, 460, 345, 447, 569, 550, 238, 299,
108033 /* 1530 */ 527, 525, 508, 961, 502, 501, 961, 401, 961, 211,
108034 /* 1540 */ 490, 356, 256, 961, 483, 961, 961, 961, 961, 961,
108035 /* 1550 */ 961, 961, 961, 961, 961, 961, 370,
108037 static const YYCODETYPE yy_lookahead[] = {
108038 /* 0 */ 19, 142, 143, 144, 145, 24, 1, 26, 77, 78,
108039 /* 10 */ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
108040 /* 20 */ 89, 90, 91, 92, 15, 98, 26, 27, 7, 8,
108041 /* 30 */ 49, 50, 77, 78, 79, 80, 109, 82, 83, 84,
108042 /* 40 */ 85, 86, 87, 88, 89, 90, 91, 92, 22, 68,
108043 /* 50 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
108044 /* 60 */ 79, 80, 23, 82, 83, 84, 85, 86, 87, 88,
108045 /* 70 */ 89, 90, 91, 92, 19, 94, 112, 19, 114, 115,
108046 /* 80 */ 25, 82, 83, 84, 85, 86, 87, 88, 89, 90,
108047 /* 90 */ 91, 92, 19, 22, 94, 95, 96, 150, 150, 99,
108048 /* 100 */ 100, 101, 76, 150, 49, 50, 105, 106, 107, 54,
108049 /* 110 */ 110, 158, 165, 165, 161, 162, 26, 27, 165, 113,
108050 /* 120 */ 16, 174, 175, 68, 69, 70, 71, 72, 73, 74,
108051 /* 130 */ 75, 76, 77, 78, 79, 80, 118, 82, 83, 84,
108052 /* 140 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 23,
108053 /* 150 */ 92, 97, 98, 24, 96, 97, 98, 99, 100, 101,
108054 /* 160 */ 102, 25, 97, 216, 60, 92, 62, 109, 221, 25,
108055 /* 170 */ 97, 98, 99, 100, 101, 102, 86, 87, 49, 50,
108056 /* 180 */ 118, 116, 109, 25, 94, 95, 32, 97, 88, 89,
108057 /* 190 */ 90, 91, 92, 128, 104, 41, 106, 68, 69, 70,
108058 /* 200 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
108059 /* 210 */ 11, 82, 83, 84, 85, 86, 87, 88, 89, 90,
108060 /* 220 */ 91, 92, 19, 19, 86, 87, 88, 89, 90, 91,
108061 /* 230 */ 92, 27, 96, 150, 66, 99, 100, 101, 112, 150,
108062 /* 240 */ 114, 115, 138, 150, 161, 162, 110, 103, 165, 222,
108063 /* 250 */ 223, 224, 49, 50, 165, 22, 57, 24, 165, 170,
108064 /* 260 */ 171, 118, 94, 170, 171, 23, 98, 25, 185, 186,
108065 /* 270 */ 243, 68, 69, 70, 71, 72, 73, 74, 75, 76,
108066 /* 280 */ 77, 78, 79, 80, 126, 82, 83, 84, 85, 86,
108067 /* 290 */ 87, 88, 89, 90, 91, 92, 19, 129, 130, 131,
108068 /* 300 */ 88, 23, 172, 173, 105, 106, 107, 150, 22, 26,
108069 /* 310 */ 27, 181, 26, 27, 22, 116, 26, 27, 26, 230,
108070 /* 320 */ 231, 197, 165, 230, 231, 113, 49, 50, 204, 117,
108071 /* 330 */ 96, 174, 175, 99, 100, 101, 22, 26, 27, 136,
108072 /* 340 */ 26, 27, 118, 16, 110, 68, 69, 70, 71, 72,
108073 /* 350 */ 73, 74, 75, 76, 77, 78, 79, 80, 118, 82,
108074 /* 360 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
108075 /* 370 */ 19, 214, 215, 150, 23, 23, 155, 94, 95, 22,
108076 /* 380 */ 94, 95, 116, 160, 94, 95, 94, 60, 165, 62,
108077 /* 390 */ 112, 26, 114, 115, 128, 23, 36, 174, 175, 88,
108078 /* 400 */ 49, 50, 57, 120, 22, 94, 95, 23, 94, 95,
108079 /* 410 */ 120, 51, 25, 136, 169, 170, 171, 194, 58, 68,
108080 /* 420 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
108081 /* 430 */ 79, 80, 23, 82, 83, 84, 85, 86, 87, 88,
108082 /* 440 */ 89, 90, 91, 92, 19, 150, 12, 12, 23, 228,
108083 /* 450 */ 105, 106, 107, 23, 233, 25, 165, 19, 150, 94,
108084 /* 460 */ 165, 116, 28, 28, 112, 174, 114, 115, 108, 174,
108085 /* 470 */ 175, 26, 27, 165, 49, 50, 231, 11, 44, 44,
108086 /* 480 */ 46, 46, 174, 175, 112, 160, 114, 115, 50, 22,
108087 /* 490 */ 23, 57, 25, 68, 69, 70, 71, 72, 73, 74,
108088 /* 500 */ 75, 76, 77, 78, 79, 80, 119, 82, 83, 84,
108089 /* 510 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 194,
108090 /* 520 */ 225, 23, 23, 215, 19, 95, 105, 106, 107, 150,
108091 /* 530 */ 23, 150, 27, 23, 67, 25, 150, 206, 207, 94,
108092 /* 540 */ 95, 166, 104, 218, 165, 22, 165, 109, 49, 50,
108093 /* 550 */ 120, 165, 25, 174, 175, 174, 175, 23, 21, 234,
108094 /* 560 */ 174, 175, 22, 23, 239, 25, 25, 68, 69, 70,
108095 /* 570 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
108096 /* 580 */ 205, 82, 83, 84, 85, 86, 87, 88, 89, 90,
108097 /* 590 */ 91, 92, 19, 22, 23, 216, 23, 222, 223, 224,
108098 /* 600 */ 63, 220, 35, 150, 150, 163, 220, 67, 166, 167,
108099 /* 610 */ 168, 150, 169, 170, 171, 161, 162, 25, 165, 165,
108100 /* 620 */ 150, 113, 49, 50, 25, 117, 165, 174, 175, 35,
108101 /* 630 */ 7, 8, 9, 160, 160, 165, 120, 100, 67, 247,
108102 /* 640 */ 248, 68, 69, 70, 71, 72, 73, 74, 75, 76,
108103 /* 650 */ 77, 78, 79, 80, 193, 82, 83, 84, 85, 86,
108104 /* 660 */ 87, 88, 89, 90, 91, 92, 19, 194, 194, 150,
108105 /* 670 */ 135, 24, 137, 35, 231, 138, 150, 129, 130, 206,
108106 /* 680 */ 207, 30, 27, 213, 165, 34, 118, 95, 0, 1,
108107 /* 690 */ 2, 165, 218, 174, 175, 50, 49, 50, 22, 48,
108108 /* 700 */ 174, 175, 22, 23, 23, 244, 222, 223, 224, 166,
108109 /* 710 */ 167, 168, 120, 239, 23, 68, 69, 70, 71, 72,
108110 /* 720 */ 73, 74, 75, 76, 77, 78, 79, 80, 150, 82,
108111 /* 730 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
108112 /* 740 */ 19, 150, 173, 165, 181, 182, 24, 67, 26, 104,
108113 /* 750 */ 181, 188, 174, 175, 150, 39, 165, 150, 52, 150,
108114 /* 760 */ 150, 150, 150, 144, 145, 174, 175, 249, 250, 165,
108115 /* 770 */ 49, 50, 165, 52, 165, 165, 165, 165, 174, 175,
108116 /* 780 */ 29, 174, 175, 174, 175, 174, 175, 160, 22, 68,
108117 /* 790 */ 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
108118 /* 800 */ 79, 80, 150, 82, 83, 84, 85, 86, 87, 88,
108119 /* 810 */ 89, 90, 91, 92, 19, 150, 94, 165, 150, 150,
108120 /* 820 */ 160, 194, 150, 213, 160, 52, 174, 175, 23, 23,
108121 /* 830 */ 165, 25, 22, 165, 165, 150, 150, 165, 52, 174,
108122 /* 840 */ 175, 22, 174, 175, 49, 50, 174, 175, 190, 191,
108123 /* 850 */ 165, 165, 240, 23, 194, 25, 187, 109, 194, 174,
108124 /* 860 */ 175, 190, 191, 68, 69, 70, 71, 72, 73, 74,
108125 /* 870 */ 75, 76, 77, 78, 79, 80, 150, 82, 83, 84,
108126 /* 880 */ 85, 86, 87, 88, 89, 90, 91, 92, 19, 150,
108127 /* 890 */ 22, 165, 150, 23, 150, 25, 150, 166, 91, 92,
108128 /* 900 */ 174, 175, 22, 217, 165, 150, 102, 165, 150, 165,
108129 /* 910 */ 150, 165, 150, 174, 175, 19, 174, 175, 49, 50,
108130 /* 920 */ 165, 86, 87, 165, 23, 165, 25, 165, 24, 174,
108131 /* 930 */ 175, 187, 174, 175, 174, 175, 205, 68, 69, 70,
108132 /* 940 */ 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
108133 /* 950 */ 150, 82, 83, 84, 85, 86, 87, 88, 89, 90,
108134 /* 960 */ 91, 92, 19, 150, 150, 165, 150, 150, 166, 23,
108135 /* 970 */ 150, 25, 160, 20, 174, 175, 1, 2, 165, 165,
108136 /* 980 */ 104, 165, 165, 43, 150, 165, 240, 150, 49, 50,
108137 /* 990 */ 174, 175, 49, 50, 23, 23, 25, 25, 53, 165,
108138 /* 1000 */ 187, 187, 165, 23, 187, 25, 194, 205, 174, 175,
108139 /* 1010 */ 71, 72, 69, 70, 71, 72, 73, 74, 75, 76,
108140 /* 1020 */ 77, 78, 79, 80, 150, 82, 83, 84, 85, 86,
108141 /* 1030 */ 87, 88, 89, 90, 91, 92, 19, 98, 150, 165,
108142 /* 1040 */ 150, 160, 150, 59, 25, 53, 104, 22, 174, 175,
108143 /* 1050 */ 213, 138, 5, 165, 1, 165, 150, 165, 150, 150,
108144 /* 1060 */ 240, 150, 174, 175, 174, 175, 49, 50, 118, 150,
108145 /* 1070 */ 35, 165, 27, 165, 165, 194, 165, 108, 127, 76,
108146 /* 1080 */ 174, 175, 174, 175, 165, 174, 175, 70, 71, 72,
108147 /* 1090 */ 73, 74, 75, 76, 77, 78, 79, 80, 166, 82,
108148 /* 1100 */ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
108149 /* 1110 */ 19, 20, 193, 22, 150, 150, 150, 26, 27, 76,
108150 /* 1120 */ 150, 22, 1, 150, 119, 121, 217, 20, 37, 165,
108151 /* 1130 */ 165, 165, 16, 19, 20, 165, 22, 205, 165, 119,
108152 /* 1140 */ 26, 27, 108, 128, 150, 150, 150, 56, 150, 22,
108153 /* 1150 */ 150, 37, 150, 127, 160, 23, 150, 66, 193, 165,
108154 /* 1160 */ 165, 165, 16, 165, 23, 165, 150, 165, 174, 175,
108155 /* 1170 */ 56, 165, 150, 65, 174, 175, 15, 86, 87, 88,
108156 /* 1180 */ 66, 165, 140, 150, 93, 94, 95, 165, 194, 98,
108157 /* 1190 */ 174, 175, 22, 3, 164, 193, 174, 175, 165, 150,
108158 /* 1200 */ 86, 87, 4, 180, 150, 248, 251, 93, 94, 95,
108159 /* 1210 */ 216, 180, 98, 251, 165, 221, 150, 149, 6, 165,
108160 /* 1220 */ 129, 130, 131, 132, 133, 134, 193, 150, 174, 175,
108161 /* 1230 */ 116, 165, 19, 20, 150, 22, 149, 151, 150, 26,
108162 /* 1240 */ 27, 149, 165, 129, 130, 131, 132, 133, 134, 165,
108163 /* 1250 */ 37, 174, 175, 165, 149, 19, 20, 13, 22, 150,
108164 /* 1260 */ 150, 150, 26, 27, 146, 147, 151, 150, 25, 56,
108165 /* 1270 */ 152, 159, 154, 37, 165, 165, 165, 193, 160, 66,
108166 /* 1280 */ 116, 193, 165, 174, 175, 174, 175, 194, 199, 150,
108167 /* 1290 */ 200, 126, 56, 124, 123, 150, 201, 122, 150, 86,
108168 /* 1300 */ 87, 150, 66, 193, 165, 202, 93, 94, 95, 150,
108169 /* 1310 */ 165, 98, 194, 165, 125, 22, 165, 150, 150, 26,
108170 /* 1320 */ 27, 135, 86, 87, 165, 174, 175, 203, 226, 93,
108171 /* 1330 */ 94, 95, 165, 165, 98, 150, 218, 150, 193, 157,
108172 /* 1340 */ 118, 157, 129, 130, 131, 132, 133, 134, 5, 104,
108173 /* 1350 */ 165, 211, 165, 10, 11, 12, 13, 14, 150, 66,
108174 /* 1360 */ 17, 174, 175, 210, 246, 129, 130, 131, 132, 133,
108175 /* 1370 */ 134, 150, 210, 165, 31, 121, 33, 150, 150, 86,
108176 /* 1380 */ 87, 176, 174, 175, 150, 42, 165, 94, 211, 210,
108177 /* 1390 */ 150, 98, 165, 165, 211, 174, 175, 150, 55, 165,
108178 /* 1400 */ 57, 150, 174, 175, 61, 165, 150, 64, 174, 175,
108179 /* 1410 */ 150, 150, 165, 150, 174, 175, 165, 104, 150, 184,
108180 /* 1420 */ 150, 165, 129, 130, 131, 165, 165, 150, 165, 150,
108181 /* 1430 */ 150, 176, 150, 165, 47, 165, 150, 150, 176, 103,
108182 /* 1440 */ 150, 22, 165, 178, 165, 165, 179, 165, 105, 106,
108183 /* 1450 */ 107, 165, 165, 229, 111, 165, 92, 176, 229, 116,
108184 /* 1460 */ 184, 176, 179, 156, 176, 176, 18, 157, 156, 237,
108185 /* 1470 */ 45, 157, 156, 135, 157, 157, 238, 156, 68, 157,
108186 /* 1480 */ 189, 189, 139, 219, 22, 157, 18, 192, 192, 192,
108187 /* 1490 */ 192, 189, 219, 199, 157, 242, 40, 157, 199, 242,
108188 /* 1500 */ 153, 157, 38, 245, 196, 166, 232, 198, 177, 177,
108189 /* 1510 */ 232, 227, 209, 178, 166, 182, 166, 148, 177, 177,
108190 /* 1520 */ 209, 196, 177, 199, 209, 199, 166, 208, 92, 195,
108191 /* 1530 */ 174, 174, 183, 252, 183, 183, 252, 191, 252, 235,
108192 /* 1540 */ 186, 241, 241, 252, 186, 252, 252, 252, 252, 252,
108193 /* 1550 */ 252, 252, 252, 252, 252, 252, 236,
108195 #define YY_SHIFT_USE_DFLT (-74)
108196 #define YY_SHIFT_COUNT (418)
108197 #define YY_SHIFT_MIN (-73)
108198 #define YY_SHIFT_MAX (1468)
108199 static const short yy_shift_ofst[] = {
108200 /* 0 */ 975, 1114, 1343, 1114, 1213, 1213, 90, 90, 0, -19,
108201 /* 10 */ 1213, 1213, 1213, 1213, 1213, 345, 445, 721, 1091, 1213,
108202 /* 20 */ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
108203 /* 30 */ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
108204 /* 40 */ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1236, 1213, 1213,
108205 /* 50 */ 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213, 1213,
108206 /* 60 */ 1213, 199, 445, 445, 835, 835, 365, 1164, 55, 647,
108207 /* 70 */ 573, 499, 425, 351, 277, 203, 129, 795, 795, 795,
108208 /* 80 */ 795, 795, 795, 795, 795, 795, 795, 795, 795, 795,
108209 /* 90 */ 795, 795, 795, 795, 795, 869, 795, 943, 1017, 1017,
108210 /* 100 */ -69, -45, -45, -45, -45, -45, -1, 58, 138, 100,
108211 /* 110 */ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
108212 /* 120 */ 445, 445, 445, 445, 445, 445, 537, 438, 445, 445,
108213 /* 130 */ 445, 445, 445, 365, 807, 1436, -74, -74, -74, 1293,
108214 /* 140 */ 73, 434, 434, 311, 314, 290, 283, 286, 540, 467,
108215 /* 150 */ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
108216 /* 160 */ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
108217 /* 170 */ 445, 445, 445, 445, 445, 445, 445, 445, 445, 445,
108218 /* 180 */ 445, 445, 65, 722, 722, 722, 688, 266, 1164, 1164,
108219 /* 190 */ 1164, -74, -74, -74, 136, 168, 168, 234, 360, 360,
108220 /* 200 */ 360, 430, 372, 435, 352, 278, 126, -36, -36, -36,
108221 /* 210 */ -36, 421, 651, -36, -36, 592, 292, 212, 623, 158,
108222 /* 220 */ 204, 204, 505, 158, 505, 144, 365, 154, 365, 154,
108223 /* 230 */ 645, 154, 204, 154, 154, 535, 548, 548, 365, 387,
108224 /* 240 */ 508, 233, 1464, 1222, 1222, 1456, 1456, 1222, 1462, 1410,
108225 /* 250 */ 1165, 1468, 1468, 1468, 1468, 1222, 1165, 1462, 1410, 1410,
108226 /* 260 */ 1222, 1448, 1338, 1425, 1222, 1222, 1448, 1222, 1448, 1222,
108227 /* 270 */ 1448, 1419, 1313, 1313, 1313, 1387, 1364, 1364, 1419, 1313,
108228 /* 280 */ 1336, 1313, 1387, 1313, 1313, 1254, 1245, 1254, 1245, 1254,
108229 /* 290 */ 1245, 1222, 1222, 1186, 1189, 1175, 1169, 1171, 1165, 1164,
108230 /* 300 */ 1243, 1244, 1244, 1212, 1212, 1212, 1212, -74, -74, -74,
108231 /* 310 */ -74, -74, -74, 939, 104, 680, 571, 327, 1, 980,
108232 /* 320 */ 26, 972, 971, 946, 901, 870, 830, 806, 54, 21,
108233 /* 330 */ -73, 510, 242, 1198, 1190, 1170, 1042, 1161, 1108, 1146,
108234 /* 340 */ 1141, 1132, 1015, 1127, 1026, 1034, 1020, 1107, 1004, 1116,
108235 /* 350 */ 1121, 1005, 1099, 951, 1043, 1003, 969, 1045, 1035, 950,
108236 /* 360 */ 1053, 1047, 1025, 942, 913, 992, 1019, 945, 984, 940,
108237 /* 370 */ 876, 904, 953, 896, 748, 804, 880, 786, 868, 819,
108238 /* 380 */ 805, 810, 773, 751, 766, 706, 716, 691, 681, 568,
108239 /* 390 */ 655, 638, 676, 516, 541, 594, 599, 567, 541, 534,
108240 /* 400 */ 507, 527, 498, 523, 466, 382, 409, 384, 357, 6,
108241 /* 410 */ 240, 224, 143, 62, 18, 71, 39, 9, 5,
108243 #define YY_REDUCE_USE_DFLT (-142)
108244 #define YY_REDUCE_COUNT (312)
108245 #define YY_REDUCE_MIN (-141)
108246 #define YY_REDUCE_MAX (1369)
108247 static const short yy_reduce_ofst[] = {
108248 /* 0 */ -141, 994, 1118, 223, 157, -53, 93, 89, 83, 375,
108249 /* 10 */ 386, 381, 379, 308, 295, 325, -47, 27, 1240, 1234,
108250 /* 20 */ 1228, 1221, 1208, 1187, 1151, 1111, 1109, 1077, 1054, 1022,
108251 /* 30 */ 1016, 1000, 911, 908, 906, 890, 888, 874, 834, 816,
108252 /* 40 */ 800, 760, 758, 755, 742, 739, 726, 685, 672, 668,
108253 /* 50 */ 665, 652, 611, 609, 607, 604, 591, 578, 526, 519,
108254 /* 60 */ 453, 474, 454, 461, 443, 245, 442, 473, 484, 484,
108255 /* 70 */ 484, 484, 484, 484, 484, 484, 484, 484, 484, 484,
108256 /* 80 */ 484, 484, 484, 484, 484, 484, 484, 484, 484, 484,
108257 /* 90 */ 484, 484, 484, 484, 484, 484, 484, 484, 484, 484,
108258 /* 100 */ 484, 484, 484, 484, 484, 484, 484, 130, 484, 484,
108259 /* 110 */ 1145, 909, 1110, 1088, 1084, 1033, 1002, 965, 820, 837,
108260 /* 120 */ 746, 686, 612, 817, 610, 919, 221, 563, 814, 813,
108261 /* 130 */ 744, 669, 470, 543, 484, 484, 484, 484, 484, 291,
108262 /* 140 */ 569, 671, 658, 970, 1290, 1287, 1286, 1282, 518, 518,
108263 /* 150 */ 1280, 1279, 1277, 1270, 1268, 1263, 1261, 1260, 1256, 1251,
108264 /* 160 */ 1247, 1227, 1185, 1168, 1167, 1159, 1148, 1139, 1117, 1066,
108265 /* 170 */ 1049, 1006, 998, 996, 995, 973, 970, 966, 964, 892,
108266 /* 180 */ 762, -52, 881, 932, 802, 731, 619, 812, 664, 660,
108267 /* 190 */ 627, 392, 331, 124, 1358, 1357, 1356, 1354, 1352, 1351,
108268 /* 200 */ 1349, 1319, 1334, 1346, 1334, 1334, 1334, 1334, 1334, 1334,
108269 /* 210 */ 1334, 1320, 1304, 1334, 1334, 1319, 1360, 1325, 1369, 1326,
108270 /* 220 */ 1315, 1311, 1301, 1324, 1300, 1335, 1350, 1345, 1348, 1342,
108271 /* 230 */ 1333, 1341, 1303, 1332, 1331, 1284, 1278, 1274, 1339, 1309,
108272 /* 240 */ 1308, 1347, 1258, 1344, 1340, 1257, 1253, 1337, 1273, 1302,
108273 /* 250 */ 1299, 1298, 1297, 1296, 1295, 1328, 1294, 1264, 1292, 1291,
108274 /* 260 */ 1322, 1321, 1238, 1232, 1318, 1317, 1316, 1314, 1312, 1310,
108275 /* 270 */ 1307, 1283, 1289, 1288, 1285, 1276, 1229, 1224, 1267, 1281,
108276 /* 280 */ 1265, 1262, 1235, 1255, 1205, 1183, 1179, 1177, 1162, 1140,
108277 /* 290 */ 1153, 1184, 1182, 1102, 1124, 1103, 1095, 1090, 1089, 1093,
108278 /* 300 */ 1112, 1115, 1086, 1105, 1092, 1087, 1068, 962, 955, 957,
108279 /* 310 */ 1031, 1023, 1030,
108281 static const YYACTIONTYPE yy_default[] = {
108282 /* 0 */ 635, 870, 959, 959, 959, 870, 899, 899, 959, 759,
108283 /* 10 */ 959, 959, 959, 959, 868, 959, 959, 933, 959, 959,
108284 /* 20 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108285 /* 30 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108286 /* 40 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108287 /* 50 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108288 /* 60 */ 959, 959, 959, 959, 899, 899, 674, 763, 794, 959,
108289 /* 70 */ 959, 959, 959, 959, 959, 959, 959, 932, 934, 809,
108290 /* 80 */ 808, 802, 801, 912, 774, 799, 792, 785, 796, 871,
108291 /* 90 */ 864, 865, 863, 867, 872, 959, 795, 831, 848, 830,
108292 /* 100 */ 842, 847, 854, 846, 843, 833, 832, 666, 834, 835,
108293 /* 110 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108294 /* 120 */ 959, 959, 959, 959, 959, 959, 661, 728, 959, 959,
108295 /* 130 */ 959, 959, 959, 959, 836, 837, 851, 850, 849, 959,
108296 /* 140 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108297 /* 150 */ 959, 939, 937, 959, 883, 959, 959, 959, 959, 959,
108298 /* 160 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108299 /* 170 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108300 /* 180 */ 959, 641, 959, 759, 759, 759, 635, 959, 959, 959,
108301 /* 190 */ 959, 951, 763, 753, 719, 959, 959, 959, 959, 959,
108302 /* 200 */ 959, 959, 959, 959, 959, 959, 959, 804, 742, 922,
108303 /* 210 */ 924, 959, 905, 740, 663, 761, 676, 751, 643, 798,
108304 /* 220 */ 776, 776, 917, 798, 917, 700, 959, 788, 959, 788,
108305 /* 230 */ 697, 788, 776, 788, 788, 866, 959, 959, 959, 760,
108306 /* 240 */ 751, 959, 944, 767, 767, 936, 936, 767, 810, 732,
108307 /* 250 */ 798, 739, 739, 739, 739, 767, 798, 810, 732, 732,
108308 /* 260 */ 767, 658, 911, 909, 767, 767, 658, 767, 658, 767,
108309 /* 270 */ 658, 876, 730, 730, 730, 715, 880, 880, 876, 730,
108310 /* 280 */ 700, 730, 715, 730, 730, 780, 775, 780, 775, 780,
108311 /* 290 */ 775, 767, 767, 959, 793, 781, 791, 789, 798, 959,
108312 /* 300 */ 718, 651, 651, 640, 640, 640, 640, 956, 956, 951,
108313 /* 310 */ 702, 702, 684, 959, 959, 959, 959, 959, 959, 959,
108314 /* 320 */ 885, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108315 /* 330 */ 959, 959, 959, 959, 636, 946, 959, 959, 943, 959,
108316 /* 340 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108317 /* 350 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 915,
108318 /* 360 */ 959, 959, 959, 959, 959, 959, 908, 907, 959, 959,
108319 /* 370 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108320 /* 380 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 959,
108321 /* 390 */ 959, 959, 959, 959, 790, 959, 782, 959, 869, 959,
108322 /* 400 */ 959, 959, 959, 959, 959, 959, 959, 959, 959, 745,
108323 /* 410 */ 819, 959, 818, 822, 817, 668, 959, 649, 959, 632,
108324 /* 420 */ 637, 955, 958, 957, 954, 953, 952, 947, 945, 942,
108325 /* 430 */ 941, 940, 938, 935, 931, 889, 887, 894, 893, 892,
108326 /* 440 */ 891, 890, 888, 886, 884, 805, 803, 800, 797, 930,
108327 /* 450 */ 882, 741, 738, 737, 657, 948, 914, 923, 921, 811,
108328 /* 460 */ 920, 919, 918, 916, 913, 900, 807, 806, 733, 874,
108329 /* 470 */ 873, 660, 904, 903, 902, 906, 910, 901, 769, 659,
108330 /* 480 */ 656, 665, 722, 721, 729, 727, 726, 725, 724, 723,
108331 /* 490 */ 720, 667, 675, 686, 714, 699, 698, 879, 881, 878,
108332 /* 500 */ 877, 707, 706, 712, 711, 710, 709, 708, 705, 704,
108333 /* 510 */ 703, 696, 695, 701, 694, 717, 716, 713, 693, 736,
108334 /* 520 */ 735, 734, 731, 692, 691, 690, 822, 689, 688, 828,
108335 /* 530 */ 827, 815, 858, 756, 755, 754, 766, 765, 778, 777,
108336 /* 540 */ 813, 812, 779, 764, 758, 757, 773, 772, 771, 770,
108337 /* 550 */ 762, 752, 784, 787, 786, 783, 860, 768, 857, 929,
108338 /* 560 */ 928, 927, 926, 925, 862, 861, 829, 826, 679, 680,
108339 /* 570 */ 898, 896, 897, 895, 682, 681, 678, 677, 859, 747,
108340 /* 580 */ 746, 855, 852, 844, 840, 856, 853, 845, 841, 839,
108341 /* 590 */ 838, 824, 823, 821, 820, 816, 825, 670, 748, 744,
108342 /* 600 */ 743, 814, 750, 749, 687, 685, 683, 664, 662, 655,
108343 /* 610 */ 653, 652, 654, 650, 648, 647, 646, 645, 644, 673,
108344 /* 620 */ 672, 671, 669, 668, 642, 639, 638, 634, 633, 631,
108347 /* The next table maps tokens into fallback tokens. If a construct
108348 ** like the following:
108350 ** %fallback ID X Y Z.
108352 ** appears in the grammar, then ID becomes a fallback token for X, Y,
108353 ** and Z. Whenever one of the tokens X, Y, or Z is input to the parser
108354 ** but it does not parse, the type of the token is changed to ID and
108355 ** the parse is retried before an error is thrown.
108357 #ifdef YYFALLBACK
108358 static const YYCODETYPE yyFallback[] = {
108359 0, /* $ => nothing */
108360 0, /* SEMI => nothing */
108361 26, /* EXPLAIN => ID */
108362 26, /* QUERY => ID */
108363 26, /* PLAN => ID */
108364 26, /* BEGIN => ID */
108365 0, /* TRANSACTION => nothing */
108366 26, /* DEFERRED => ID */
108367 26, /* IMMEDIATE => ID */
108368 26, /* EXCLUSIVE => ID */
108369 0, /* COMMIT => nothing */
108370 26, /* END => ID */
108371 26, /* ROLLBACK => ID */
108372 26, /* SAVEPOINT => ID */
108373 26, /* RELEASE => ID */
108374 0, /* TO => nothing */
108375 0, /* TABLE => nothing */
108376 0, /* CREATE => nothing */
108377 26, /* IF => ID */
108378 0, /* NOT => nothing */
108379 0, /* EXISTS => nothing */
108380 26, /* TEMP => ID */
108381 0, /* LP => nothing */
108382 0, /* RP => nothing */
108383 0, /* AS => nothing */
108384 0, /* COMMA => nothing */
108385 0, /* ID => nothing */
108386 0, /* INDEXED => nothing */
108387 26, /* ABORT => ID */
108388 26, /* ACTION => ID */
108389 26, /* AFTER => ID */
108390 26, /* ANALYZE => ID */
108391 26, /* ASC => ID */
108392 26, /* ATTACH => ID */
108393 26, /* BEFORE => ID */
108394 26, /* BY => ID */
108395 26, /* CASCADE => ID */
108396 26, /* CAST => ID */
108397 26, /* COLUMNKW => ID */
108398 26, /* CONFLICT => ID */
108399 26, /* DATABASE => ID */
108400 26, /* DESC => ID */
108401 26, /* DETACH => ID */
108402 26, /* EACH => ID */
108403 26, /* FAIL => ID */
108404 26, /* FOR => ID */
108405 26, /* IGNORE => ID */
108406 26, /* INITIALLY => ID */
108407 26, /* INSTEAD => ID */
108408 26, /* LIKE_KW => ID */
108409 26, /* MATCH => ID */
108410 26, /* NO => ID */
108411 26, /* KEY => ID */
108412 26, /* OF => ID */
108413 26, /* OFFSET => ID */
108414 26, /* PRAGMA => ID */
108415 26, /* RAISE => ID */
108416 26, /* REPLACE => ID */
108417 26, /* RESTRICT => ID */
108418 26, /* ROW => ID */
108419 26, /* TRIGGER => ID */
108420 26, /* VACUUM => ID */
108421 26, /* VIEW => ID */
108422 26, /* VIRTUAL => ID */
108423 26, /* REINDEX => ID */
108424 26, /* RENAME => ID */
108425 26, /* CTIME_KW => ID */
108427 #endif /* YYFALLBACK */
108429 /* The following structure represents a single element of the
108430 ** parser's stack. Information stored includes:
108432 ** + The state number for the parser at this level of the stack.
108434 ** + The value of the token stored at this level of the stack.
108435 ** (In other words, the "major" token.)
108437 ** + The semantic value stored at this level of the stack. This is
108438 ** the information used by the action routines in the grammar.
108439 ** It is sometimes called the "minor" token.
108441 struct yyStackEntry {
108442 YYACTIONTYPE stateno; /* The state-number */
108443 YYCODETYPE major; /* The major token value. This is the code
108444 ** number for the token at this stack level */
108445 YYMINORTYPE minor; /* The user-supplied minor token value. This
108446 ** is the value of the token */
108448 typedef struct yyStackEntry yyStackEntry;
108450 /* The state of the parser is completely contained in an instance of
108451 ** the following structure */
108452 struct yyParser {
108453 int yyidx; /* Index of top element in stack */
108454 #ifdef YYTRACKMAXSTACKDEPTH
108455 int yyidxMax; /* Maximum value of yyidx */
108456 #endif
108457 int yyerrcnt; /* Shifts left before out of the error */
108458 sqlite3ParserARG_SDECL /* A place to hold %extra_argument */
108459 #if YYSTACKDEPTH<=0
108460 int yystksz; /* Current side of the stack */
108461 yyStackEntry *yystack; /* The parser's stack */
108462 #else
108463 yyStackEntry yystack[YYSTACKDEPTH]; /* The parser's stack */
108464 #endif
108466 typedef struct yyParser yyParser;
108468 #ifndef NDEBUG
108469 /* #include <stdio.h> */
108470 static FILE *yyTraceFILE = 0;
108471 static char *yyTracePrompt = 0;
108472 #endif /* NDEBUG */
108474 #ifndef NDEBUG
108476 ** Turn parser tracing on by giving a stream to which to write the trace
108477 ** and a prompt to preface each trace message. Tracing is turned off
108478 ** by making either argument NULL
108480 ** Inputs:
108481 ** <ul>
108482 ** <li> A FILE* to which trace output should be written.
108483 ** If NULL, then tracing is turned off.
108484 ** <li> A prefix string written at the beginning of every
108485 ** line of trace output. If NULL, then tracing is
108486 ** turned off.
108487 ** </ul>
108489 ** Outputs:
108490 ** None.
108492 SQLITE_PRIVATE void sqlite3ParserTrace(FILE *TraceFILE, char *zTracePrompt){
108493 yyTraceFILE = TraceFILE;
108494 yyTracePrompt = zTracePrompt;
108495 if( yyTraceFILE==0 ) yyTracePrompt = 0;
108496 else if( yyTracePrompt==0 ) yyTraceFILE = 0;
108498 #endif /* NDEBUG */
108500 #ifndef NDEBUG
108501 /* For tracing shifts, the names of all terminals and nonterminals
108502 ** are required. The following table supplies these names */
108503 static const char *const yyTokenName[] = {
108504 "$", "SEMI", "EXPLAIN", "QUERY",
108505 "PLAN", "BEGIN", "TRANSACTION", "DEFERRED",
108506 "IMMEDIATE", "EXCLUSIVE", "COMMIT", "END",
108507 "ROLLBACK", "SAVEPOINT", "RELEASE", "TO",
108508 "TABLE", "CREATE", "IF", "NOT",
108509 "EXISTS", "TEMP", "LP", "RP",
108510 "AS", "COMMA", "ID", "INDEXED",
108511 "ABORT", "ACTION", "AFTER", "ANALYZE",
108512 "ASC", "ATTACH", "BEFORE", "BY",
108513 "CASCADE", "CAST", "COLUMNKW", "CONFLICT",
108514 "DATABASE", "DESC", "DETACH", "EACH",
108515 "FAIL", "FOR", "IGNORE", "INITIALLY",
108516 "INSTEAD", "LIKE_KW", "MATCH", "NO",
108517 "KEY", "OF", "OFFSET", "PRAGMA",
108518 "RAISE", "REPLACE", "RESTRICT", "ROW",
108519 "TRIGGER", "VACUUM", "VIEW", "VIRTUAL",
108520 "REINDEX", "RENAME", "CTIME_KW", "ANY",
108521 "OR", "AND", "IS", "BETWEEN",
108522 "IN", "ISNULL", "NOTNULL", "NE",
108523 "EQ", "GT", "LE", "LT",
108524 "GE", "ESCAPE", "BITAND", "BITOR",
108525 "LSHIFT", "RSHIFT", "PLUS", "MINUS",
108526 "STAR", "SLASH", "REM", "CONCAT",
108527 "COLLATE", "BITNOT", "STRING", "JOIN_KW",
108528 "CONSTRAINT", "DEFAULT", "NULL", "PRIMARY",
108529 "UNIQUE", "CHECK", "REFERENCES", "AUTOINCR",
108530 "ON", "INSERT", "DELETE", "UPDATE",
108531 "SET", "DEFERRABLE", "FOREIGN", "DROP",
108532 "UNION", "ALL", "EXCEPT", "INTERSECT",
108533 "SELECT", "DISTINCT", "DOT", "FROM",
108534 "JOIN", "USING", "ORDER", "GROUP",
108535 "HAVING", "LIMIT", "WHERE", "INTO",
108536 "VALUES", "INTEGER", "FLOAT", "BLOB",
108537 "REGISTER", "VARIABLE", "CASE", "WHEN",
108538 "THEN", "ELSE", "INDEX", "ALTER",
108539 "ADD", "error", "input", "cmdlist",
108540 "ecmd", "explain", "cmdx", "cmd",
108541 "transtype", "trans_opt", "nm", "savepoint_opt",
108542 "create_table", "create_table_args", "createkw", "temp",
108543 "ifnotexists", "dbnm", "columnlist", "conslist_opt",
108544 "select", "column", "columnid", "type",
108545 "carglist", "id", "ids", "typetoken",
108546 "typename", "signed", "plus_num", "minus_num",
108547 "carg", "ccons", "term", "expr",
108548 "onconf", "sortorder", "autoinc", "idxlist_opt",
108549 "refargs", "defer_subclause", "refarg", "refact",
108550 "init_deferred_pred_opt", "conslist", "tcons", "idxlist",
108551 "defer_subclause_opt", "orconf", "resolvetype", "raisetype",
108552 "ifexists", "fullname", "oneselect", "multiselect_op",
108553 "distinct", "selcollist", "from", "where_opt",
108554 "groupby_opt", "having_opt", "orderby_opt", "limit_opt",
108555 "sclp", "as", "seltablist", "stl_prefix",
108556 "joinop", "indexed_opt", "on_opt", "using_opt",
108557 "joinop2", "inscollist", "sortlist", "sortitem",
108558 "nexprlist", "setlist", "insert_cmd", "inscollist_opt",
108559 "itemlist", "exprlist", "likeop", "between_op",
108560 "in_op", "case_operand", "case_exprlist", "case_else",
108561 "uniqueflag", "collate", "nmnum", "plus_opt",
108562 "number", "trigger_decl", "trigger_cmd_list", "trigger_time",
108563 "trigger_event", "foreach_clause", "when_clause", "trigger_cmd",
108564 "trnm", "tridxby", "database_kw_opt", "key_opt",
108565 "add_column_fullname", "kwcolumn_opt", "create_vtab", "vtabarglist",
108566 "vtabarg", "vtabargtoken", "lp", "anylist",
108568 #endif /* NDEBUG */
108570 #ifndef NDEBUG
108571 /* For tracing reduce actions, the names of all rules are required.
108573 static const char *const yyRuleName[] = {
108574 /* 0 */ "input ::= cmdlist",
108575 /* 1 */ "cmdlist ::= cmdlist ecmd",
108576 /* 2 */ "cmdlist ::= ecmd",
108577 /* 3 */ "ecmd ::= SEMI",
108578 /* 4 */ "ecmd ::= explain cmdx SEMI",
108579 /* 5 */ "explain ::=",
108580 /* 6 */ "explain ::= EXPLAIN",
108581 /* 7 */ "explain ::= EXPLAIN QUERY PLAN",
108582 /* 8 */ "cmdx ::= cmd",
108583 /* 9 */ "cmd ::= BEGIN transtype trans_opt",
108584 /* 10 */ "trans_opt ::=",
108585 /* 11 */ "trans_opt ::= TRANSACTION",
108586 /* 12 */ "trans_opt ::= TRANSACTION nm",
108587 /* 13 */ "transtype ::=",
108588 /* 14 */ "transtype ::= DEFERRED",
108589 /* 15 */ "transtype ::= IMMEDIATE",
108590 /* 16 */ "transtype ::= EXCLUSIVE",
108591 /* 17 */ "cmd ::= COMMIT trans_opt",
108592 /* 18 */ "cmd ::= END trans_opt",
108593 /* 19 */ "cmd ::= ROLLBACK trans_opt",
108594 /* 20 */ "savepoint_opt ::= SAVEPOINT",
108595 /* 21 */ "savepoint_opt ::=",
108596 /* 22 */ "cmd ::= SAVEPOINT nm",
108597 /* 23 */ "cmd ::= RELEASE savepoint_opt nm",
108598 /* 24 */ "cmd ::= ROLLBACK trans_opt TO savepoint_opt nm",
108599 /* 25 */ "cmd ::= create_table create_table_args",
108600 /* 26 */ "create_table ::= createkw temp TABLE ifnotexists nm dbnm",
108601 /* 27 */ "createkw ::= CREATE",
108602 /* 28 */ "ifnotexists ::=",
108603 /* 29 */ "ifnotexists ::= IF NOT EXISTS",
108604 /* 30 */ "temp ::= TEMP",
108605 /* 31 */ "temp ::=",
108606 /* 32 */ "create_table_args ::= LP columnlist conslist_opt RP",
108607 /* 33 */ "create_table_args ::= AS select",
108608 /* 34 */ "columnlist ::= columnlist COMMA column",
108609 /* 35 */ "columnlist ::= column",
108610 /* 36 */ "column ::= columnid type carglist",
108611 /* 37 */ "columnid ::= nm",
108612 /* 38 */ "id ::= ID",
108613 /* 39 */ "id ::= INDEXED",
108614 /* 40 */ "ids ::= ID|STRING",
108615 /* 41 */ "nm ::= id",
108616 /* 42 */ "nm ::= STRING",
108617 /* 43 */ "nm ::= JOIN_KW",
108618 /* 44 */ "type ::=",
108619 /* 45 */ "type ::= typetoken",
108620 /* 46 */ "typetoken ::= typename",
108621 /* 47 */ "typetoken ::= typename LP signed RP",
108622 /* 48 */ "typetoken ::= typename LP signed COMMA signed RP",
108623 /* 49 */ "typename ::= ids",
108624 /* 50 */ "typename ::= typename ids",
108625 /* 51 */ "signed ::= plus_num",
108626 /* 52 */ "signed ::= minus_num",
108627 /* 53 */ "carglist ::= carglist carg",
108628 /* 54 */ "carglist ::=",
108629 /* 55 */ "carg ::= CONSTRAINT nm ccons",
108630 /* 56 */ "carg ::= ccons",
108631 /* 57 */ "ccons ::= DEFAULT term",
108632 /* 58 */ "ccons ::= DEFAULT LP expr RP",
108633 /* 59 */ "ccons ::= DEFAULT PLUS term",
108634 /* 60 */ "ccons ::= DEFAULT MINUS term",
108635 /* 61 */ "ccons ::= DEFAULT id",
108636 /* 62 */ "ccons ::= NULL onconf",
108637 /* 63 */ "ccons ::= NOT NULL onconf",
108638 /* 64 */ "ccons ::= PRIMARY KEY sortorder onconf autoinc",
108639 /* 65 */ "ccons ::= UNIQUE onconf",
108640 /* 66 */ "ccons ::= CHECK LP expr RP",
108641 /* 67 */ "ccons ::= REFERENCES nm idxlist_opt refargs",
108642 /* 68 */ "ccons ::= defer_subclause",
108643 /* 69 */ "ccons ::= COLLATE ids",
108644 /* 70 */ "autoinc ::=",
108645 /* 71 */ "autoinc ::= AUTOINCR",
108646 /* 72 */ "refargs ::=",
108647 /* 73 */ "refargs ::= refargs refarg",
108648 /* 74 */ "refarg ::= MATCH nm",
108649 /* 75 */ "refarg ::= ON INSERT refact",
108650 /* 76 */ "refarg ::= ON DELETE refact",
108651 /* 77 */ "refarg ::= ON UPDATE refact",
108652 /* 78 */ "refact ::= SET NULL",
108653 /* 79 */ "refact ::= SET DEFAULT",
108654 /* 80 */ "refact ::= CASCADE",
108655 /* 81 */ "refact ::= RESTRICT",
108656 /* 82 */ "refact ::= NO ACTION",
108657 /* 83 */ "defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt",
108658 /* 84 */ "defer_subclause ::= DEFERRABLE init_deferred_pred_opt",
108659 /* 85 */ "init_deferred_pred_opt ::=",
108660 /* 86 */ "init_deferred_pred_opt ::= INITIALLY DEFERRED",
108661 /* 87 */ "init_deferred_pred_opt ::= INITIALLY IMMEDIATE",
108662 /* 88 */ "conslist_opt ::=",
108663 /* 89 */ "conslist_opt ::= COMMA conslist",
108664 /* 90 */ "conslist ::= conslist COMMA tcons",
108665 /* 91 */ "conslist ::= conslist tcons",
108666 /* 92 */ "conslist ::= tcons",
108667 /* 93 */ "tcons ::= CONSTRAINT nm",
108668 /* 94 */ "tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf",
108669 /* 95 */ "tcons ::= UNIQUE LP idxlist RP onconf",
108670 /* 96 */ "tcons ::= CHECK LP expr RP onconf",
108671 /* 97 */ "tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt",
108672 /* 98 */ "defer_subclause_opt ::=",
108673 /* 99 */ "defer_subclause_opt ::= defer_subclause",
108674 /* 100 */ "onconf ::=",
108675 /* 101 */ "onconf ::= ON CONFLICT resolvetype",
108676 /* 102 */ "orconf ::=",
108677 /* 103 */ "orconf ::= OR resolvetype",
108678 /* 104 */ "resolvetype ::= raisetype",
108679 /* 105 */ "resolvetype ::= IGNORE",
108680 /* 106 */ "resolvetype ::= REPLACE",
108681 /* 107 */ "cmd ::= DROP TABLE ifexists fullname",
108682 /* 108 */ "ifexists ::= IF EXISTS",
108683 /* 109 */ "ifexists ::=",
108684 /* 110 */ "cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select",
108685 /* 111 */ "cmd ::= DROP VIEW ifexists fullname",
108686 /* 112 */ "cmd ::= select",
108687 /* 113 */ "select ::= oneselect",
108688 /* 114 */ "select ::= select multiselect_op oneselect",
108689 /* 115 */ "multiselect_op ::= UNION",
108690 /* 116 */ "multiselect_op ::= UNION ALL",
108691 /* 117 */ "multiselect_op ::= EXCEPT|INTERSECT",
108692 /* 118 */ "oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt",
108693 /* 119 */ "distinct ::= DISTINCT",
108694 /* 120 */ "distinct ::= ALL",
108695 /* 121 */ "distinct ::=",
108696 /* 122 */ "sclp ::= selcollist COMMA",
108697 /* 123 */ "sclp ::=",
108698 /* 124 */ "selcollist ::= sclp expr as",
108699 /* 125 */ "selcollist ::= sclp STAR",
108700 /* 126 */ "selcollist ::= sclp nm DOT STAR",
108701 /* 127 */ "as ::= AS nm",
108702 /* 128 */ "as ::= ids",
108703 /* 129 */ "as ::=",
108704 /* 130 */ "from ::=",
108705 /* 131 */ "from ::= FROM seltablist",
108706 /* 132 */ "stl_prefix ::= seltablist joinop",
108707 /* 133 */ "stl_prefix ::=",
108708 /* 134 */ "seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt",
108709 /* 135 */ "seltablist ::= stl_prefix LP select RP as on_opt using_opt",
108710 /* 136 */ "seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt",
108711 /* 137 */ "dbnm ::=",
108712 /* 138 */ "dbnm ::= DOT nm",
108713 /* 139 */ "fullname ::= nm dbnm",
108714 /* 140 */ "joinop ::= COMMA|JOIN",
108715 /* 141 */ "joinop ::= JOIN_KW JOIN",
108716 /* 142 */ "joinop ::= JOIN_KW nm JOIN",
108717 /* 143 */ "joinop ::= JOIN_KW nm nm JOIN",
108718 /* 144 */ "on_opt ::= ON expr",
108719 /* 145 */ "on_opt ::=",
108720 /* 146 */ "indexed_opt ::=",
108721 /* 147 */ "indexed_opt ::= INDEXED BY nm",
108722 /* 148 */ "indexed_opt ::= NOT INDEXED",
108723 /* 149 */ "using_opt ::= USING LP inscollist RP",
108724 /* 150 */ "using_opt ::=",
108725 /* 151 */ "orderby_opt ::=",
108726 /* 152 */ "orderby_opt ::= ORDER BY sortlist",
108727 /* 153 */ "sortlist ::= sortlist COMMA sortitem sortorder",
108728 /* 154 */ "sortlist ::= sortitem sortorder",
108729 /* 155 */ "sortitem ::= expr",
108730 /* 156 */ "sortorder ::= ASC",
108731 /* 157 */ "sortorder ::= DESC",
108732 /* 158 */ "sortorder ::=",
108733 /* 159 */ "groupby_opt ::=",
108734 /* 160 */ "groupby_opt ::= GROUP BY nexprlist",
108735 /* 161 */ "having_opt ::=",
108736 /* 162 */ "having_opt ::= HAVING expr",
108737 /* 163 */ "limit_opt ::=",
108738 /* 164 */ "limit_opt ::= LIMIT expr",
108739 /* 165 */ "limit_opt ::= LIMIT expr OFFSET expr",
108740 /* 166 */ "limit_opt ::= LIMIT expr COMMA expr",
108741 /* 167 */ "cmd ::= DELETE FROM fullname indexed_opt where_opt",
108742 /* 168 */ "where_opt ::=",
108743 /* 169 */ "where_opt ::= WHERE expr",
108744 /* 170 */ "cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt",
108745 /* 171 */ "setlist ::= setlist COMMA nm EQ expr",
108746 /* 172 */ "setlist ::= nm EQ expr",
108747 /* 173 */ "cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP",
108748 /* 174 */ "cmd ::= insert_cmd INTO fullname inscollist_opt select",
108749 /* 175 */ "cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES",
108750 /* 176 */ "insert_cmd ::= INSERT orconf",
108751 /* 177 */ "insert_cmd ::= REPLACE",
108752 /* 178 */ "itemlist ::= itemlist COMMA expr",
108753 /* 179 */ "itemlist ::= expr",
108754 /* 180 */ "inscollist_opt ::=",
108755 /* 181 */ "inscollist_opt ::= LP inscollist RP",
108756 /* 182 */ "inscollist ::= inscollist COMMA nm",
108757 /* 183 */ "inscollist ::= nm",
108758 /* 184 */ "expr ::= term",
108759 /* 185 */ "expr ::= LP expr RP",
108760 /* 186 */ "term ::= NULL",
108761 /* 187 */ "expr ::= id",
108762 /* 188 */ "expr ::= JOIN_KW",
108763 /* 189 */ "expr ::= nm DOT nm",
108764 /* 190 */ "expr ::= nm DOT nm DOT nm",
108765 /* 191 */ "term ::= INTEGER|FLOAT|BLOB",
108766 /* 192 */ "term ::= STRING",
108767 /* 193 */ "expr ::= REGISTER",
108768 /* 194 */ "expr ::= VARIABLE",
108769 /* 195 */ "expr ::= expr COLLATE ids",
108770 /* 196 */ "expr ::= CAST LP expr AS typetoken RP",
108771 /* 197 */ "expr ::= ID LP distinct exprlist RP",
108772 /* 198 */ "expr ::= ID LP STAR RP",
108773 /* 199 */ "term ::= CTIME_KW",
108774 /* 200 */ "expr ::= expr AND expr",
108775 /* 201 */ "expr ::= expr OR expr",
108776 /* 202 */ "expr ::= expr LT|GT|GE|LE expr",
108777 /* 203 */ "expr ::= expr EQ|NE expr",
108778 /* 204 */ "expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr",
108779 /* 205 */ "expr ::= expr PLUS|MINUS expr",
108780 /* 206 */ "expr ::= expr STAR|SLASH|REM expr",
108781 /* 207 */ "expr ::= expr CONCAT expr",
108782 /* 208 */ "likeop ::= LIKE_KW",
108783 /* 209 */ "likeop ::= NOT LIKE_KW",
108784 /* 210 */ "likeop ::= MATCH",
108785 /* 211 */ "likeop ::= NOT MATCH",
108786 /* 212 */ "expr ::= expr likeop expr",
108787 /* 213 */ "expr ::= expr likeop expr ESCAPE expr",
108788 /* 214 */ "expr ::= expr ISNULL|NOTNULL",
108789 /* 215 */ "expr ::= expr NOT NULL",
108790 /* 216 */ "expr ::= expr IS expr",
108791 /* 217 */ "expr ::= expr IS NOT expr",
108792 /* 218 */ "expr ::= NOT expr",
108793 /* 219 */ "expr ::= BITNOT expr",
108794 /* 220 */ "expr ::= MINUS expr",
108795 /* 221 */ "expr ::= PLUS expr",
108796 /* 222 */ "between_op ::= BETWEEN",
108797 /* 223 */ "between_op ::= NOT BETWEEN",
108798 /* 224 */ "expr ::= expr between_op expr AND expr",
108799 /* 225 */ "in_op ::= IN",
108800 /* 226 */ "in_op ::= NOT IN",
108801 /* 227 */ "expr ::= expr in_op LP exprlist RP",
108802 /* 228 */ "expr ::= LP select RP",
108803 /* 229 */ "expr ::= expr in_op LP select RP",
108804 /* 230 */ "expr ::= expr in_op nm dbnm",
108805 /* 231 */ "expr ::= EXISTS LP select RP",
108806 /* 232 */ "expr ::= CASE case_operand case_exprlist case_else END",
108807 /* 233 */ "case_exprlist ::= case_exprlist WHEN expr THEN expr",
108808 /* 234 */ "case_exprlist ::= WHEN expr THEN expr",
108809 /* 235 */ "case_else ::= ELSE expr",
108810 /* 236 */ "case_else ::=",
108811 /* 237 */ "case_operand ::= expr",
108812 /* 238 */ "case_operand ::=",
108813 /* 239 */ "exprlist ::= nexprlist",
108814 /* 240 */ "exprlist ::=",
108815 /* 241 */ "nexprlist ::= nexprlist COMMA expr",
108816 /* 242 */ "nexprlist ::= expr",
108817 /* 243 */ "cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP",
108818 /* 244 */ "uniqueflag ::= UNIQUE",
108819 /* 245 */ "uniqueflag ::=",
108820 /* 246 */ "idxlist_opt ::=",
108821 /* 247 */ "idxlist_opt ::= LP idxlist RP",
108822 /* 248 */ "idxlist ::= idxlist COMMA nm collate sortorder",
108823 /* 249 */ "idxlist ::= nm collate sortorder",
108824 /* 250 */ "collate ::=",
108825 /* 251 */ "collate ::= COLLATE ids",
108826 /* 252 */ "cmd ::= DROP INDEX ifexists fullname",
108827 /* 253 */ "cmd ::= VACUUM",
108828 /* 254 */ "cmd ::= VACUUM nm",
108829 /* 255 */ "cmd ::= PRAGMA nm dbnm",
108830 /* 256 */ "cmd ::= PRAGMA nm dbnm EQ nmnum",
108831 /* 257 */ "cmd ::= PRAGMA nm dbnm LP nmnum RP",
108832 /* 258 */ "cmd ::= PRAGMA nm dbnm EQ minus_num",
108833 /* 259 */ "cmd ::= PRAGMA nm dbnm LP minus_num RP",
108834 /* 260 */ "nmnum ::= plus_num",
108835 /* 261 */ "nmnum ::= nm",
108836 /* 262 */ "nmnum ::= ON",
108837 /* 263 */ "nmnum ::= DELETE",
108838 /* 264 */ "nmnum ::= DEFAULT",
108839 /* 265 */ "plus_num ::= plus_opt number",
108840 /* 266 */ "minus_num ::= MINUS number",
108841 /* 267 */ "number ::= INTEGER|FLOAT",
108842 /* 268 */ "plus_opt ::= PLUS",
108843 /* 269 */ "plus_opt ::=",
108844 /* 270 */ "cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END",
108845 /* 271 */ "trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause",
108846 /* 272 */ "trigger_time ::= BEFORE",
108847 /* 273 */ "trigger_time ::= AFTER",
108848 /* 274 */ "trigger_time ::= INSTEAD OF",
108849 /* 275 */ "trigger_time ::=",
108850 /* 276 */ "trigger_event ::= DELETE|INSERT",
108851 /* 277 */ "trigger_event ::= UPDATE",
108852 /* 278 */ "trigger_event ::= UPDATE OF inscollist",
108853 /* 279 */ "foreach_clause ::=",
108854 /* 280 */ "foreach_clause ::= FOR EACH ROW",
108855 /* 281 */ "when_clause ::=",
108856 /* 282 */ "when_clause ::= WHEN expr",
108857 /* 283 */ "trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI",
108858 /* 284 */ "trigger_cmd_list ::= trigger_cmd SEMI",
108859 /* 285 */ "trnm ::= nm",
108860 /* 286 */ "trnm ::= nm DOT nm",
108861 /* 287 */ "tridxby ::=",
108862 /* 288 */ "tridxby ::= INDEXED BY nm",
108863 /* 289 */ "tridxby ::= NOT INDEXED",
108864 /* 290 */ "trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt",
108865 /* 291 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP",
108866 /* 292 */ "trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select",
108867 /* 293 */ "trigger_cmd ::= DELETE FROM trnm tridxby where_opt",
108868 /* 294 */ "trigger_cmd ::= select",
108869 /* 295 */ "expr ::= RAISE LP IGNORE RP",
108870 /* 296 */ "expr ::= RAISE LP raisetype COMMA nm RP",
108871 /* 297 */ "raisetype ::= ROLLBACK",
108872 /* 298 */ "raisetype ::= ABORT",
108873 /* 299 */ "raisetype ::= FAIL",
108874 /* 300 */ "cmd ::= DROP TRIGGER ifexists fullname",
108875 /* 301 */ "cmd ::= ATTACH database_kw_opt expr AS expr key_opt",
108876 /* 302 */ "cmd ::= DETACH database_kw_opt expr",
108877 /* 303 */ "key_opt ::=",
108878 /* 304 */ "key_opt ::= KEY expr",
108879 /* 305 */ "database_kw_opt ::= DATABASE",
108880 /* 306 */ "database_kw_opt ::=",
108881 /* 307 */ "cmd ::= REINDEX",
108882 /* 308 */ "cmd ::= REINDEX nm dbnm",
108883 /* 309 */ "cmd ::= ANALYZE",
108884 /* 310 */ "cmd ::= ANALYZE nm dbnm",
108885 /* 311 */ "cmd ::= ALTER TABLE fullname RENAME TO nm",
108886 /* 312 */ "cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column",
108887 /* 313 */ "add_column_fullname ::= fullname",
108888 /* 314 */ "kwcolumn_opt ::=",
108889 /* 315 */ "kwcolumn_opt ::= COLUMNKW",
108890 /* 316 */ "cmd ::= create_vtab",
108891 /* 317 */ "cmd ::= create_vtab LP vtabarglist RP",
108892 /* 318 */ "create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm",
108893 /* 319 */ "vtabarglist ::= vtabarg",
108894 /* 320 */ "vtabarglist ::= vtabarglist COMMA vtabarg",
108895 /* 321 */ "vtabarg ::=",
108896 /* 322 */ "vtabarg ::= vtabarg vtabargtoken",
108897 /* 323 */ "vtabargtoken ::= ANY",
108898 /* 324 */ "vtabargtoken ::= lp anylist RP",
108899 /* 325 */ "lp ::= LP",
108900 /* 326 */ "anylist ::=",
108901 /* 327 */ "anylist ::= anylist LP anylist RP",
108902 /* 328 */ "anylist ::= anylist ANY",
108904 #endif /* NDEBUG */
108907 #if YYSTACKDEPTH<=0
108909 ** Try to increase the size of the parser stack.
108911 static void yyGrowStack(yyParser *p){
108912 int newSize;
108913 yyStackEntry *pNew;
108915 newSize = p->yystksz*2 + 100;
108916 pNew = realloc(p->yystack, newSize*sizeof(pNew[0]));
108917 if( pNew ){
108918 p->yystack = pNew;
108919 p->yystksz = newSize;
108920 #ifndef NDEBUG
108921 if( yyTraceFILE ){
108922 fprintf(yyTraceFILE,"%sStack grows to %d entries!\n",
108923 yyTracePrompt, p->yystksz);
108925 #endif
108928 #endif
108931 ** This function allocates a new parser.
108932 ** The only argument is a pointer to a function which works like
108933 ** malloc.
108935 ** Inputs:
108936 ** A pointer to the function used to allocate memory.
108938 ** Outputs:
108939 ** A pointer to a parser. This pointer is used in subsequent calls
108940 ** to sqlite3Parser and sqlite3ParserFree.
108942 SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(size_t)){
108943 yyParser *pParser;
108944 pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
108945 if( pParser ){
108946 pParser->yyidx = -1;
108947 #ifdef YYTRACKMAXSTACKDEPTH
108948 pParser->yyidxMax = 0;
108949 #endif
108950 #if YYSTACKDEPTH<=0
108951 pParser->yystack = NULL;
108952 pParser->yystksz = 0;
108953 yyGrowStack(pParser);
108954 #endif
108956 return pParser;
108959 /* The following function deletes the value associated with a
108960 ** symbol. The symbol can be either a terminal or nonterminal.
108961 ** "yymajor" is the symbol code, and "yypminor" is a pointer to
108962 ** the value.
108964 static void yy_destructor(
108965 yyParser *yypParser, /* The parser */
108966 YYCODETYPE yymajor, /* Type code for object to destroy */
108967 YYMINORTYPE *yypminor /* The object to be destroyed */
108969 sqlite3ParserARG_FETCH;
108970 switch( yymajor ){
108971 /* Here is inserted the actions which take place when a
108972 ** terminal or non-terminal is destroyed. This can happen
108973 ** when the symbol is popped from the stack during a
108974 ** reduce or during error processing or when a parser is
108975 ** being destroyed before it is finished parsing.
108977 ** Note: during a reduce, the only symbols destroyed are those
108978 ** which appear on the RHS of the rule, but which are not used
108979 ** inside the C code.
108981 case 160: /* select */
108982 case 194: /* oneselect */
108984 sqlite3SelectDelete(pParse->db, (yypminor->yy387));
108986 break;
108987 case 174: /* term */
108988 case 175: /* expr */
108990 sqlite3ExprDelete(pParse->db, (yypminor->yy118).pExpr);
108992 break;
108993 case 179: /* idxlist_opt */
108994 case 187: /* idxlist */
108995 case 197: /* selcollist */
108996 case 200: /* groupby_opt */
108997 case 202: /* orderby_opt */
108998 case 204: /* sclp */
108999 case 214: /* sortlist */
109000 case 216: /* nexprlist */
109001 case 217: /* setlist */
109002 case 220: /* itemlist */
109003 case 221: /* exprlist */
109004 case 226: /* case_exprlist */
109006 sqlite3ExprListDelete(pParse->db, (yypminor->yy322));
109008 break;
109009 case 193: /* fullname */
109010 case 198: /* from */
109011 case 206: /* seltablist */
109012 case 207: /* stl_prefix */
109014 sqlite3SrcListDelete(pParse->db, (yypminor->yy259));
109016 break;
109017 case 199: /* where_opt */
109018 case 201: /* having_opt */
109019 case 210: /* on_opt */
109020 case 215: /* sortitem */
109021 case 225: /* case_operand */
109022 case 227: /* case_else */
109023 case 238: /* when_clause */
109024 case 243: /* key_opt */
109026 sqlite3ExprDelete(pParse->db, (yypminor->yy314));
109028 break;
109029 case 211: /* using_opt */
109030 case 213: /* inscollist */
109031 case 219: /* inscollist_opt */
109033 sqlite3IdListDelete(pParse->db, (yypminor->yy384));
109035 break;
109036 case 234: /* trigger_cmd_list */
109037 case 239: /* trigger_cmd */
109039 sqlite3DeleteTriggerStep(pParse->db, (yypminor->yy203));
109041 break;
109042 case 236: /* trigger_event */
109044 sqlite3IdListDelete(pParse->db, (yypminor->yy90).b);
109046 break;
109047 default: break; /* If no destructor action specified: do nothing */
109052 ** Pop the parser's stack once.
109054 ** If there is a destructor routine associated with the token which
109055 ** is popped from the stack, then call it.
109057 ** Return the major token number for the symbol popped.
109059 static int yy_pop_parser_stack(yyParser *pParser){
109060 YYCODETYPE yymajor;
109061 yyStackEntry *yytos = &pParser->yystack[pParser->yyidx];
109063 /* There is no mechanism by which the parser stack can be popped below
109064 ** empty in SQLite. */
109065 if( NEVER(pParser->yyidx<0) ) return 0;
109066 #ifndef NDEBUG
109067 if( yyTraceFILE && pParser->yyidx>=0 ){
109068 fprintf(yyTraceFILE,"%sPopping %s\n",
109069 yyTracePrompt,
109070 yyTokenName[yytos->major]);
109072 #endif
109073 yymajor = yytos->major;
109074 yy_destructor(pParser, yymajor, &yytos->minor);
109075 pParser->yyidx--;
109076 return yymajor;
109080 ** Deallocate and destroy a parser. Destructors are all called for
109081 ** all stack elements before shutting the parser down.
109083 ** Inputs:
109084 ** <ul>
109085 ** <li> A pointer to the parser. This should be a pointer
109086 ** obtained from sqlite3ParserAlloc.
109087 ** <li> A pointer to a function used to reclaim memory obtained
109088 ** from malloc.
109089 ** </ul>
109091 SQLITE_PRIVATE void sqlite3ParserFree(
109092 void *p, /* The parser to be deleted */
109093 void (*freeProc)(void*) /* Function used to reclaim memory */
109095 yyParser *pParser = (yyParser*)p;
109096 /* In SQLite, we never try to destroy a parser that was not successfully
109097 ** created in the first place. */
109098 if( NEVER(pParser==0) ) return;
109099 while( pParser->yyidx>=0 ) yy_pop_parser_stack(pParser);
109100 #if YYSTACKDEPTH<=0
109101 free(pParser->yystack);
109102 #endif
109103 (*freeProc)((void*)pParser);
109107 ** Return the peak depth of the stack for a parser.
109109 #ifdef YYTRACKMAXSTACKDEPTH
109110 SQLITE_PRIVATE int sqlite3ParserStackPeak(void *p){
109111 yyParser *pParser = (yyParser*)p;
109112 return pParser->yyidxMax;
109114 #endif
109117 ** Find the appropriate action for a parser given the terminal
109118 ** look-ahead token iLookAhead.
109120 ** If the look-ahead token is YYNOCODE, then check to see if the action is
109121 ** independent of the look-ahead. If it is, return the action, otherwise
109122 ** return YY_NO_ACTION.
109124 static int yy_find_shift_action(
109125 yyParser *pParser, /* The parser */
109126 YYCODETYPE iLookAhead /* The look-ahead token */
109128 int i;
109129 int stateno = pParser->yystack[pParser->yyidx].stateno;
109131 if( stateno>YY_SHIFT_COUNT
109132 || (i = yy_shift_ofst[stateno])==YY_SHIFT_USE_DFLT ){
109133 return yy_default[stateno];
109135 assert( iLookAhead!=YYNOCODE );
109136 i += iLookAhead;
109137 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
109138 if( iLookAhead>0 ){
109139 #ifdef YYFALLBACK
109140 YYCODETYPE iFallback; /* Fallback token */
109141 if( iLookAhead<sizeof(yyFallback)/sizeof(yyFallback[0])
109142 && (iFallback = yyFallback[iLookAhead])!=0 ){
109143 #ifndef NDEBUG
109144 if( yyTraceFILE ){
109145 fprintf(yyTraceFILE, "%sFALLBACK %s => %s\n",
109146 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[iFallback]);
109148 #endif
109149 return yy_find_shift_action(pParser, iFallback);
109151 #endif
109152 #ifdef YYWILDCARD
109154 int j = i - iLookAhead + YYWILDCARD;
109156 #if YY_SHIFT_MIN+YYWILDCARD<0
109157 j>=0 &&
109158 #endif
109159 #if YY_SHIFT_MAX+YYWILDCARD>=YY_ACTTAB_COUNT
109160 j<YY_ACTTAB_COUNT &&
109161 #endif
109162 yy_lookahead[j]==YYWILDCARD
109164 #ifndef NDEBUG
109165 if( yyTraceFILE ){
109166 fprintf(yyTraceFILE, "%sWILDCARD %s => %s\n",
109167 yyTracePrompt, yyTokenName[iLookAhead], yyTokenName[YYWILDCARD]);
109169 #endif /* NDEBUG */
109170 return yy_action[j];
109173 #endif /* YYWILDCARD */
109175 return yy_default[stateno];
109176 }else{
109177 return yy_action[i];
109182 ** Find the appropriate action for a parser given the non-terminal
109183 ** look-ahead token iLookAhead.
109185 ** If the look-ahead token is YYNOCODE, then check to see if the action is
109186 ** independent of the look-ahead. If it is, return the action, otherwise
109187 ** return YY_NO_ACTION.
109189 static int yy_find_reduce_action(
109190 int stateno, /* Current state number */
109191 YYCODETYPE iLookAhead /* The look-ahead token */
109193 int i;
109194 #ifdef YYERRORSYMBOL
109195 if( stateno>YY_REDUCE_COUNT ){
109196 return yy_default[stateno];
109198 #else
109199 assert( stateno<=YY_REDUCE_COUNT );
109200 #endif
109201 i = yy_reduce_ofst[stateno];
109202 assert( i!=YY_REDUCE_USE_DFLT );
109203 assert( iLookAhead!=YYNOCODE );
109204 i += iLookAhead;
109205 #ifdef YYERRORSYMBOL
109206 if( i<0 || i>=YY_ACTTAB_COUNT || yy_lookahead[i]!=iLookAhead ){
109207 return yy_default[stateno];
109209 #else
109210 assert( i>=0 && i<YY_ACTTAB_COUNT );
109211 assert( yy_lookahead[i]==iLookAhead );
109212 #endif
109213 return yy_action[i];
109217 ** The following routine is called if the stack overflows.
109219 static void yyStackOverflow(yyParser *yypParser, YYMINORTYPE *yypMinor){
109220 sqlite3ParserARG_FETCH;
109221 yypParser->yyidx--;
109222 #ifndef NDEBUG
109223 if( yyTraceFILE ){
109224 fprintf(yyTraceFILE,"%sStack Overflow!\n",yyTracePrompt);
109226 #endif
109227 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
109228 /* Here code is inserted which will execute if the parser
109229 ** stack every overflows */
109231 UNUSED_PARAMETER(yypMinor); /* Silence some compiler warnings */
109232 sqlite3ErrorMsg(pParse, "parser stack overflow");
109233 sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument var */
109237 ** Perform a shift action.
109239 static void yy_shift(
109240 yyParser *yypParser, /* The parser to be shifted */
109241 int yyNewState, /* The new state to shift in */
109242 int yyMajor, /* The major token to shift in */
109243 YYMINORTYPE *yypMinor /* Pointer to the minor token to shift in */
109245 yyStackEntry *yytos;
109246 yypParser->yyidx++;
109247 #ifdef YYTRACKMAXSTACKDEPTH
109248 if( yypParser->yyidx>yypParser->yyidxMax ){
109249 yypParser->yyidxMax = yypParser->yyidx;
109251 #endif
109252 #if YYSTACKDEPTH>0
109253 if( yypParser->yyidx>=YYSTACKDEPTH ){
109254 yyStackOverflow(yypParser, yypMinor);
109255 return;
109257 #else
109258 if( yypParser->yyidx>=yypParser->yystksz ){
109259 yyGrowStack(yypParser);
109260 if( yypParser->yyidx>=yypParser->yystksz ){
109261 yyStackOverflow(yypParser, yypMinor);
109262 return;
109265 #endif
109266 yytos = &yypParser->yystack[yypParser->yyidx];
109267 yytos->stateno = (YYACTIONTYPE)yyNewState;
109268 yytos->major = (YYCODETYPE)yyMajor;
109269 yytos->minor = *yypMinor;
109270 #ifndef NDEBUG
109271 if( yyTraceFILE && yypParser->yyidx>0 ){
109272 int i;
109273 fprintf(yyTraceFILE,"%sShift %d\n",yyTracePrompt,yyNewState);
109274 fprintf(yyTraceFILE,"%sStack:",yyTracePrompt);
109275 for(i=1; i<=yypParser->yyidx; i++)
109276 fprintf(yyTraceFILE," %s",yyTokenName[yypParser->yystack[i].major]);
109277 fprintf(yyTraceFILE,"\n");
109279 #endif
109282 /* The following table contains information about every rule that
109283 ** is used during the reduce.
109285 static const struct {
109286 YYCODETYPE lhs; /* Symbol on the left-hand side of the rule */
109287 unsigned char nrhs; /* Number of right-hand side symbols in the rule */
109288 } yyRuleInfo[] = {
109289 { 142, 1 },
109290 { 143, 2 },
109291 { 143, 1 },
109292 { 144, 1 },
109293 { 144, 3 },
109294 { 145, 0 },
109295 { 145, 1 },
109296 { 145, 3 },
109297 { 146, 1 },
109298 { 147, 3 },
109299 { 149, 0 },
109300 { 149, 1 },
109301 { 149, 2 },
109302 { 148, 0 },
109303 { 148, 1 },
109304 { 148, 1 },
109305 { 148, 1 },
109306 { 147, 2 },
109307 { 147, 2 },
109308 { 147, 2 },
109309 { 151, 1 },
109310 { 151, 0 },
109311 { 147, 2 },
109312 { 147, 3 },
109313 { 147, 5 },
109314 { 147, 2 },
109315 { 152, 6 },
109316 { 154, 1 },
109317 { 156, 0 },
109318 { 156, 3 },
109319 { 155, 1 },
109320 { 155, 0 },
109321 { 153, 4 },
109322 { 153, 2 },
109323 { 158, 3 },
109324 { 158, 1 },
109325 { 161, 3 },
109326 { 162, 1 },
109327 { 165, 1 },
109328 { 165, 1 },
109329 { 166, 1 },
109330 { 150, 1 },
109331 { 150, 1 },
109332 { 150, 1 },
109333 { 163, 0 },
109334 { 163, 1 },
109335 { 167, 1 },
109336 { 167, 4 },
109337 { 167, 6 },
109338 { 168, 1 },
109339 { 168, 2 },
109340 { 169, 1 },
109341 { 169, 1 },
109342 { 164, 2 },
109343 { 164, 0 },
109344 { 172, 3 },
109345 { 172, 1 },
109346 { 173, 2 },
109347 { 173, 4 },
109348 { 173, 3 },
109349 { 173, 3 },
109350 { 173, 2 },
109351 { 173, 2 },
109352 { 173, 3 },
109353 { 173, 5 },
109354 { 173, 2 },
109355 { 173, 4 },
109356 { 173, 4 },
109357 { 173, 1 },
109358 { 173, 2 },
109359 { 178, 0 },
109360 { 178, 1 },
109361 { 180, 0 },
109362 { 180, 2 },
109363 { 182, 2 },
109364 { 182, 3 },
109365 { 182, 3 },
109366 { 182, 3 },
109367 { 183, 2 },
109368 { 183, 2 },
109369 { 183, 1 },
109370 { 183, 1 },
109371 { 183, 2 },
109372 { 181, 3 },
109373 { 181, 2 },
109374 { 184, 0 },
109375 { 184, 2 },
109376 { 184, 2 },
109377 { 159, 0 },
109378 { 159, 2 },
109379 { 185, 3 },
109380 { 185, 2 },
109381 { 185, 1 },
109382 { 186, 2 },
109383 { 186, 7 },
109384 { 186, 5 },
109385 { 186, 5 },
109386 { 186, 10 },
109387 { 188, 0 },
109388 { 188, 1 },
109389 { 176, 0 },
109390 { 176, 3 },
109391 { 189, 0 },
109392 { 189, 2 },
109393 { 190, 1 },
109394 { 190, 1 },
109395 { 190, 1 },
109396 { 147, 4 },
109397 { 192, 2 },
109398 { 192, 0 },
109399 { 147, 8 },
109400 { 147, 4 },
109401 { 147, 1 },
109402 { 160, 1 },
109403 { 160, 3 },
109404 { 195, 1 },
109405 { 195, 2 },
109406 { 195, 1 },
109407 { 194, 9 },
109408 { 196, 1 },
109409 { 196, 1 },
109410 { 196, 0 },
109411 { 204, 2 },
109412 { 204, 0 },
109413 { 197, 3 },
109414 { 197, 2 },
109415 { 197, 4 },
109416 { 205, 2 },
109417 { 205, 1 },
109418 { 205, 0 },
109419 { 198, 0 },
109420 { 198, 2 },
109421 { 207, 2 },
109422 { 207, 0 },
109423 { 206, 7 },
109424 { 206, 7 },
109425 { 206, 7 },
109426 { 157, 0 },
109427 { 157, 2 },
109428 { 193, 2 },
109429 { 208, 1 },
109430 { 208, 2 },
109431 { 208, 3 },
109432 { 208, 4 },
109433 { 210, 2 },
109434 { 210, 0 },
109435 { 209, 0 },
109436 { 209, 3 },
109437 { 209, 2 },
109438 { 211, 4 },
109439 { 211, 0 },
109440 { 202, 0 },
109441 { 202, 3 },
109442 { 214, 4 },
109443 { 214, 2 },
109444 { 215, 1 },
109445 { 177, 1 },
109446 { 177, 1 },
109447 { 177, 0 },
109448 { 200, 0 },
109449 { 200, 3 },
109450 { 201, 0 },
109451 { 201, 2 },
109452 { 203, 0 },
109453 { 203, 2 },
109454 { 203, 4 },
109455 { 203, 4 },
109456 { 147, 5 },
109457 { 199, 0 },
109458 { 199, 2 },
109459 { 147, 7 },
109460 { 217, 5 },
109461 { 217, 3 },
109462 { 147, 8 },
109463 { 147, 5 },
109464 { 147, 6 },
109465 { 218, 2 },
109466 { 218, 1 },
109467 { 220, 3 },
109468 { 220, 1 },
109469 { 219, 0 },
109470 { 219, 3 },
109471 { 213, 3 },
109472 { 213, 1 },
109473 { 175, 1 },
109474 { 175, 3 },
109475 { 174, 1 },
109476 { 175, 1 },
109477 { 175, 1 },
109478 { 175, 3 },
109479 { 175, 5 },
109480 { 174, 1 },
109481 { 174, 1 },
109482 { 175, 1 },
109483 { 175, 1 },
109484 { 175, 3 },
109485 { 175, 6 },
109486 { 175, 5 },
109487 { 175, 4 },
109488 { 174, 1 },
109489 { 175, 3 },
109490 { 175, 3 },
109491 { 175, 3 },
109492 { 175, 3 },
109493 { 175, 3 },
109494 { 175, 3 },
109495 { 175, 3 },
109496 { 175, 3 },
109497 { 222, 1 },
109498 { 222, 2 },
109499 { 222, 1 },
109500 { 222, 2 },
109501 { 175, 3 },
109502 { 175, 5 },
109503 { 175, 2 },
109504 { 175, 3 },
109505 { 175, 3 },
109506 { 175, 4 },
109507 { 175, 2 },
109508 { 175, 2 },
109509 { 175, 2 },
109510 { 175, 2 },
109511 { 223, 1 },
109512 { 223, 2 },
109513 { 175, 5 },
109514 { 224, 1 },
109515 { 224, 2 },
109516 { 175, 5 },
109517 { 175, 3 },
109518 { 175, 5 },
109519 { 175, 4 },
109520 { 175, 4 },
109521 { 175, 5 },
109522 { 226, 5 },
109523 { 226, 4 },
109524 { 227, 2 },
109525 { 227, 0 },
109526 { 225, 1 },
109527 { 225, 0 },
109528 { 221, 1 },
109529 { 221, 0 },
109530 { 216, 3 },
109531 { 216, 1 },
109532 { 147, 11 },
109533 { 228, 1 },
109534 { 228, 0 },
109535 { 179, 0 },
109536 { 179, 3 },
109537 { 187, 5 },
109538 { 187, 3 },
109539 { 229, 0 },
109540 { 229, 2 },
109541 { 147, 4 },
109542 { 147, 1 },
109543 { 147, 2 },
109544 { 147, 3 },
109545 { 147, 5 },
109546 { 147, 6 },
109547 { 147, 5 },
109548 { 147, 6 },
109549 { 230, 1 },
109550 { 230, 1 },
109551 { 230, 1 },
109552 { 230, 1 },
109553 { 230, 1 },
109554 { 170, 2 },
109555 { 171, 2 },
109556 { 232, 1 },
109557 { 231, 1 },
109558 { 231, 0 },
109559 { 147, 5 },
109560 { 233, 11 },
109561 { 235, 1 },
109562 { 235, 1 },
109563 { 235, 2 },
109564 { 235, 0 },
109565 { 236, 1 },
109566 { 236, 1 },
109567 { 236, 3 },
109568 { 237, 0 },
109569 { 237, 3 },
109570 { 238, 0 },
109571 { 238, 2 },
109572 { 234, 3 },
109573 { 234, 2 },
109574 { 240, 1 },
109575 { 240, 3 },
109576 { 241, 0 },
109577 { 241, 3 },
109578 { 241, 2 },
109579 { 239, 7 },
109580 { 239, 8 },
109581 { 239, 5 },
109582 { 239, 5 },
109583 { 239, 1 },
109584 { 175, 4 },
109585 { 175, 6 },
109586 { 191, 1 },
109587 { 191, 1 },
109588 { 191, 1 },
109589 { 147, 4 },
109590 { 147, 6 },
109591 { 147, 3 },
109592 { 243, 0 },
109593 { 243, 2 },
109594 { 242, 1 },
109595 { 242, 0 },
109596 { 147, 1 },
109597 { 147, 3 },
109598 { 147, 1 },
109599 { 147, 3 },
109600 { 147, 6 },
109601 { 147, 6 },
109602 { 244, 1 },
109603 { 245, 0 },
109604 { 245, 1 },
109605 { 147, 1 },
109606 { 147, 4 },
109607 { 246, 7 },
109608 { 247, 1 },
109609 { 247, 3 },
109610 { 248, 0 },
109611 { 248, 2 },
109612 { 249, 1 },
109613 { 249, 3 },
109614 { 250, 1 },
109615 { 251, 0 },
109616 { 251, 4 },
109617 { 251, 2 },
109620 static void yy_accept(yyParser*); /* Forward Declaration */
109623 ** Perform a reduce action and the shift that must immediately
109624 ** follow the reduce.
109626 static void yy_reduce(
109627 yyParser *yypParser, /* The parser */
109628 int yyruleno /* Number of the rule by which to reduce */
109630 int yygoto; /* The next state */
109631 int yyact; /* The next action */
109632 YYMINORTYPE yygotominor; /* The LHS of the rule reduced */
109633 yyStackEntry *yymsp; /* The top of the parser's stack */
109634 int yysize; /* Amount to pop the stack */
109635 sqlite3ParserARG_FETCH;
109636 yymsp = &yypParser->yystack[yypParser->yyidx];
109637 #ifndef NDEBUG
109638 if( yyTraceFILE && yyruleno>=0
109639 && yyruleno<(int)(sizeof(yyRuleName)/sizeof(yyRuleName[0])) ){
109640 fprintf(yyTraceFILE, "%sReduce [%s].\n", yyTracePrompt,
109641 yyRuleName[yyruleno]);
109643 #endif /* NDEBUG */
109645 /* Silence complaints from purify about yygotominor being uninitialized
109646 ** in some cases when it is copied into the stack after the following
109647 ** switch. yygotominor is uninitialized when a rule reduces that does
109648 ** not set the value of its left-hand side nonterminal. Leaving the
109649 ** value of the nonterminal uninitialized is utterly harmless as long
109650 ** as the value is never used. So really the only thing this code
109651 ** accomplishes is to quieten purify.
109653 ** 2007-01-16: The wireshark project (www.wireshark.org) reports that
109654 ** without this code, their parser segfaults. I'm not sure what there
109655 ** parser is doing to make this happen. This is the second bug report
109656 ** from wireshark this week. Clearly they are stressing Lemon in ways
109657 ** that it has not been previously stressed... (SQLite ticket #2172)
109659 /*memset(&yygotominor, 0, sizeof(yygotominor));*/
109660 yygotominor = yyzerominor;
109663 switch( yyruleno ){
109664 /* Beginning here are the reduction cases. A typical example
109665 ** follows:
109666 ** case 0:
109667 ** #line <lineno> <grammarfile>
109668 ** { ... } // User supplied code
109669 ** #line <lineno> <thisfile>
109670 ** break;
109672 case 5: /* explain ::= */
109673 { sqlite3BeginParse(pParse, 0); }
109674 break;
109675 case 6: /* explain ::= EXPLAIN */
109676 { sqlite3BeginParse(pParse, 1); }
109677 break;
109678 case 7: /* explain ::= EXPLAIN QUERY PLAN */
109679 { sqlite3BeginParse(pParse, 2); }
109680 break;
109681 case 8: /* cmdx ::= cmd */
109682 { sqlite3FinishCoding(pParse); }
109683 break;
109684 case 9: /* cmd ::= BEGIN transtype trans_opt */
109685 {sqlite3BeginTransaction(pParse, yymsp[-1].minor.yy4);}
109686 break;
109687 case 13: /* transtype ::= */
109688 {yygotominor.yy4 = TK_DEFERRED;}
109689 break;
109690 case 14: /* transtype ::= DEFERRED */
109691 case 15: /* transtype ::= IMMEDIATE */ yytestcase(yyruleno==15);
109692 case 16: /* transtype ::= EXCLUSIVE */ yytestcase(yyruleno==16);
109693 case 115: /* multiselect_op ::= UNION */ yytestcase(yyruleno==115);
109694 case 117: /* multiselect_op ::= EXCEPT|INTERSECT */ yytestcase(yyruleno==117);
109695 {yygotominor.yy4 = yymsp[0].major;}
109696 break;
109697 case 17: /* cmd ::= COMMIT trans_opt */
109698 case 18: /* cmd ::= END trans_opt */ yytestcase(yyruleno==18);
109699 {sqlite3CommitTransaction(pParse);}
109700 break;
109701 case 19: /* cmd ::= ROLLBACK trans_opt */
109702 {sqlite3RollbackTransaction(pParse);}
109703 break;
109704 case 22: /* cmd ::= SAVEPOINT nm */
109706 sqlite3Savepoint(pParse, SAVEPOINT_BEGIN, &yymsp[0].minor.yy0);
109708 break;
109709 case 23: /* cmd ::= RELEASE savepoint_opt nm */
109711 sqlite3Savepoint(pParse, SAVEPOINT_RELEASE, &yymsp[0].minor.yy0);
109713 break;
109714 case 24: /* cmd ::= ROLLBACK trans_opt TO savepoint_opt nm */
109716 sqlite3Savepoint(pParse, SAVEPOINT_ROLLBACK, &yymsp[0].minor.yy0);
109718 break;
109719 case 26: /* create_table ::= createkw temp TABLE ifnotexists nm dbnm */
109721 sqlite3StartTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,yymsp[-4].minor.yy4,0,0,yymsp[-2].minor.yy4);
109723 break;
109724 case 27: /* createkw ::= CREATE */
109726 pParse->db->lookaside.bEnabled = 0;
109727 yygotominor.yy0 = yymsp[0].minor.yy0;
109729 break;
109730 case 28: /* ifnotexists ::= */
109731 case 31: /* temp ::= */ yytestcase(yyruleno==31);
109732 case 70: /* autoinc ::= */ yytestcase(yyruleno==70);
109733 case 83: /* defer_subclause ::= NOT DEFERRABLE init_deferred_pred_opt */ yytestcase(yyruleno==83);
109734 case 85: /* init_deferred_pred_opt ::= */ yytestcase(yyruleno==85);
109735 case 87: /* init_deferred_pred_opt ::= INITIALLY IMMEDIATE */ yytestcase(yyruleno==87);
109736 case 98: /* defer_subclause_opt ::= */ yytestcase(yyruleno==98);
109737 case 109: /* ifexists ::= */ yytestcase(yyruleno==109);
109738 case 120: /* distinct ::= ALL */ yytestcase(yyruleno==120);
109739 case 121: /* distinct ::= */ yytestcase(yyruleno==121);
109740 case 222: /* between_op ::= BETWEEN */ yytestcase(yyruleno==222);
109741 case 225: /* in_op ::= IN */ yytestcase(yyruleno==225);
109742 {yygotominor.yy4 = 0;}
109743 break;
109744 case 29: /* ifnotexists ::= IF NOT EXISTS */
109745 case 30: /* temp ::= TEMP */ yytestcase(yyruleno==30);
109746 case 71: /* autoinc ::= AUTOINCR */ yytestcase(yyruleno==71);
109747 case 86: /* init_deferred_pred_opt ::= INITIALLY DEFERRED */ yytestcase(yyruleno==86);
109748 case 108: /* ifexists ::= IF EXISTS */ yytestcase(yyruleno==108);
109749 case 119: /* distinct ::= DISTINCT */ yytestcase(yyruleno==119);
109750 case 223: /* between_op ::= NOT BETWEEN */ yytestcase(yyruleno==223);
109751 case 226: /* in_op ::= NOT IN */ yytestcase(yyruleno==226);
109752 {yygotominor.yy4 = 1;}
109753 break;
109754 case 32: /* create_table_args ::= LP columnlist conslist_opt RP */
109756 sqlite3EndTable(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0);
109758 break;
109759 case 33: /* create_table_args ::= AS select */
109761 sqlite3EndTable(pParse,0,0,yymsp[0].minor.yy387);
109762 sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
109764 break;
109765 case 36: /* column ::= columnid type carglist */
109767 yygotominor.yy0.z = yymsp[-2].minor.yy0.z;
109768 yygotominor.yy0.n = (int)(pParse->sLastToken.z-yymsp[-2].minor.yy0.z) + pParse->sLastToken.n;
109770 break;
109771 case 37: /* columnid ::= nm */
109773 sqlite3AddColumn(pParse,&yymsp[0].minor.yy0);
109774 yygotominor.yy0 = yymsp[0].minor.yy0;
109776 break;
109777 case 38: /* id ::= ID */
109778 case 39: /* id ::= INDEXED */ yytestcase(yyruleno==39);
109779 case 40: /* ids ::= ID|STRING */ yytestcase(yyruleno==40);
109780 case 41: /* nm ::= id */ yytestcase(yyruleno==41);
109781 case 42: /* nm ::= STRING */ yytestcase(yyruleno==42);
109782 case 43: /* nm ::= JOIN_KW */ yytestcase(yyruleno==43);
109783 case 46: /* typetoken ::= typename */ yytestcase(yyruleno==46);
109784 case 49: /* typename ::= ids */ yytestcase(yyruleno==49);
109785 case 127: /* as ::= AS nm */ yytestcase(yyruleno==127);
109786 case 128: /* as ::= ids */ yytestcase(yyruleno==128);
109787 case 138: /* dbnm ::= DOT nm */ yytestcase(yyruleno==138);
109788 case 147: /* indexed_opt ::= INDEXED BY nm */ yytestcase(yyruleno==147);
109789 case 251: /* collate ::= COLLATE ids */ yytestcase(yyruleno==251);
109790 case 260: /* nmnum ::= plus_num */ yytestcase(yyruleno==260);
109791 case 261: /* nmnum ::= nm */ yytestcase(yyruleno==261);
109792 case 262: /* nmnum ::= ON */ yytestcase(yyruleno==262);
109793 case 263: /* nmnum ::= DELETE */ yytestcase(yyruleno==263);
109794 case 264: /* nmnum ::= DEFAULT */ yytestcase(yyruleno==264);
109795 case 265: /* plus_num ::= plus_opt number */ yytestcase(yyruleno==265);
109796 case 266: /* minus_num ::= MINUS number */ yytestcase(yyruleno==266);
109797 case 267: /* number ::= INTEGER|FLOAT */ yytestcase(yyruleno==267);
109798 case 285: /* trnm ::= nm */ yytestcase(yyruleno==285);
109799 {yygotominor.yy0 = yymsp[0].minor.yy0;}
109800 break;
109801 case 45: /* type ::= typetoken */
109802 {sqlite3AddColumnType(pParse,&yymsp[0].minor.yy0);}
109803 break;
109804 case 47: /* typetoken ::= typename LP signed RP */
109806 yygotominor.yy0.z = yymsp[-3].minor.yy0.z;
109807 yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-3].minor.yy0.z);
109809 break;
109810 case 48: /* typetoken ::= typename LP signed COMMA signed RP */
109812 yygotominor.yy0.z = yymsp[-5].minor.yy0.z;
109813 yygotominor.yy0.n = (int)(&yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] - yymsp[-5].minor.yy0.z);
109815 break;
109816 case 50: /* typename ::= typename ids */
109817 {yygotominor.yy0.z=yymsp[-1].minor.yy0.z; yygotominor.yy0.n=yymsp[0].minor.yy0.n+(int)(yymsp[0].minor.yy0.z-yymsp[-1].minor.yy0.z);}
109818 break;
109819 case 57: /* ccons ::= DEFAULT term */
109820 case 59: /* ccons ::= DEFAULT PLUS term */ yytestcase(yyruleno==59);
109821 {sqlite3AddDefaultValue(pParse,&yymsp[0].minor.yy118);}
109822 break;
109823 case 58: /* ccons ::= DEFAULT LP expr RP */
109824 {sqlite3AddDefaultValue(pParse,&yymsp[-1].minor.yy118);}
109825 break;
109826 case 60: /* ccons ::= DEFAULT MINUS term */
109828 ExprSpan v;
109829 v.pExpr = sqlite3PExpr(pParse, TK_UMINUS, yymsp[0].minor.yy118.pExpr, 0, 0);
109830 v.zStart = yymsp[-1].minor.yy0.z;
109831 v.zEnd = yymsp[0].minor.yy118.zEnd;
109832 sqlite3AddDefaultValue(pParse,&v);
109834 break;
109835 case 61: /* ccons ::= DEFAULT id */
109837 ExprSpan v;
109838 spanExpr(&v, pParse, TK_STRING, &yymsp[0].minor.yy0);
109839 sqlite3AddDefaultValue(pParse,&v);
109841 break;
109842 case 63: /* ccons ::= NOT NULL onconf */
109843 {sqlite3AddNotNull(pParse, yymsp[0].minor.yy4);}
109844 break;
109845 case 64: /* ccons ::= PRIMARY KEY sortorder onconf autoinc */
109846 {sqlite3AddPrimaryKey(pParse,0,yymsp[-1].minor.yy4,yymsp[0].minor.yy4,yymsp[-2].minor.yy4);}
109847 break;
109848 case 65: /* ccons ::= UNIQUE onconf */
109849 {sqlite3CreateIndex(pParse,0,0,0,0,yymsp[0].minor.yy4,0,0,0,0);}
109850 break;
109851 case 66: /* ccons ::= CHECK LP expr RP */
109852 {sqlite3AddCheckConstraint(pParse,yymsp[-1].minor.yy118.pExpr);}
109853 break;
109854 case 67: /* ccons ::= REFERENCES nm idxlist_opt refargs */
109855 {sqlite3CreateForeignKey(pParse,0,&yymsp[-2].minor.yy0,yymsp[-1].minor.yy322,yymsp[0].minor.yy4);}
109856 break;
109857 case 68: /* ccons ::= defer_subclause */
109858 {sqlite3DeferForeignKey(pParse,yymsp[0].minor.yy4);}
109859 break;
109860 case 69: /* ccons ::= COLLATE ids */
109861 {sqlite3AddCollateType(pParse, &yymsp[0].minor.yy0);}
109862 break;
109863 case 72: /* refargs ::= */
109864 { yygotominor.yy4 = OE_None*0x0101; /* EV: R-19803-45884 */}
109865 break;
109866 case 73: /* refargs ::= refargs refarg */
109867 { yygotominor.yy4 = (yymsp[-1].minor.yy4 & ~yymsp[0].minor.yy215.mask) | yymsp[0].minor.yy215.value; }
109868 break;
109869 case 74: /* refarg ::= MATCH nm */
109870 case 75: /* refarg ::= ON INSERT refact */ yytestcase(yyruleno==75);
109871 { yygotominor.yy215.value = 0; yygotominor.yy215.mask = 0x000000; }
109872 break;
109873 case 76: /* refarg ::= ON DELETE refact */
109874 { yygotominor.yy215.value = yymsp[0].minor.yy4; yygotominor.yy215.mask = 0x0000ff; }
109875 break;
109876 case 77: /* refarg ::= ON UPDATE refact */
109877 { yygotominor.yy215.value = yymsp[0].minor.yy4<<8; yygotominor.yy215.mask = 0x00ff00; }
109878 break;
109879 case 78: /* refact ::= SET NULL */
109880 { yygotominor.yy4 = OE_SetNull; /* EV: R-33326-45252 */}
109881 break;
109882 case 79: /* refact ::= SET DEFAULT */
109883 { yygotominor.yy4 = OE_SetDflt; /* EV: R-33326-45252 */}
109884 break;
109885 case 80: /* refact ::= CASCADE */
109886 { yygotominor.yy4 = OE_Cascade; /* EV: R-33326-45252 */}
109887 break;
109888 case 81: /* refact ::= RESTRICT */
109889 { yygotominor.yy4 = OE_Restrict; /* EV: R-33326-45252 */}
109890 break;
109891 case 82: /* refact ::= NO ACTION */
109892 { yygotominor.yy4 = OE_None; /* EV: R-33326-45252 */}
109893 break;
109894 case 84: /* defer_subclause ::= DEFERRABLE init_deferred_pred_opt */
109895 case 99: /* defer_subclause_opt ::= defer_subclause */ yytestcase(yyruleno==99);
109896 case 101: /* onconf ::= ON CONFLICT resolvetype */ yytestcase(yyruleno==101);
109897 case 104: /* resolvetype ::= raisetype */ yytestcase(yyruleno==104);
109898 {yygotominor.yy4 = yymsp[0].minor.yy4;}
109899 break;
109900 case 88: /* conslist_opt ::= */
109901 {yygotominor.yy0.n = 0; yygotominor.yy0.z = 0;}
109902 break;
109903 case 89: /* conslist_opt ::= COMMA conslist */
109904 {yygotominor.yy0 = yymsp[-1].minor.yy0;}
109905 break;
109906 case 94: /* tcons ::= PRIMARY KEY LP idxlist autoinc RP onconf */
109907 {sqlite3AddPrimaryKey(pParse,yymsp[-3].minor.yy322,yymsp[0].minor.yy4,yymsp[-2].minor.yy4,0);}
109908 break;
109909 case 95: /* tcons ::= UNIQUE LP idxlist RP onconf */
109910 {sqlite3CreateIndex(pParse,0,0,0,yymsp[-2].minor.yy322,yymsp[0].minor.yy4,0,0,0,0);}
109911 break;
109912 case 96: /* tcons ::= CHECK LP expr RP onconf */
109913 {sqlite3AddCheckConstraint(pParse,yymsp[-2].minor.yy118.pExpr);}
109914 break;
109915 case 97: /* tcons ::= FOREIGN KEY LP idxlist RP REFERENCES nm idxlist_opt refargs defer_subclause_opt */
109917 sqlite3CreateForeignKey(pParse, yymsp[-6].minor.yy322, &yymsp[-3].minor.yy0, yymsp[-2].minor.yy322, yymsp[-1].minor.yy4);
109918 sqlite3DeferForeignKey(pParse, yymsp[0].minor.yy4);
109920 break;
109921 case 100: /* onconf ::= */
109922 {yygotominor.yy4 = OE_Default;}
109923 break;
109924 case 102: /* orconf ::= */
109925 {yygotominor.yy210 = OE_Default;}
109926 break;
109927 case 103: /* orconf ::= OR resolvetype */
109928 {yygotominor.yy210 = (u8)yymsp[0].minor.yy4;}
109929 break;
109930 case 105: /* resolvetype ::= IGNORE */
109931 {yygotominor.yy4 = OE_Ignore;}
109932 break;
109933 case 106: /* resolvetype ::= REPLACE */
109934 {yygotominor.yy4 = OE_Replace;}
109935 break;
109936 case 107: /* cmd ::= DROP TABLE ifexists fullname */
109938 sqlite3DropTable(pParse, yymsp[0].minor.yy259, 0, yymsp[-1].minor.yy4);
109940 break;
109941 case 110: /* cmd ::= createkw temp VIEW ifnotexists nm dbnm AS select */
109943 sqlite3CreateView(pParse, &yymsp[-7].minor.yy0, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, yymsp[0].minor.yy387, yymsp[-6].minor.yy4, yymsp[-4].minor.yy4);
109945 break;
109946 case 111: /* cmd ::= DROP VIEW ifexists fullname */
109948 sqlite3DropTable(pParse, yymsp[0].minor.yy259, 1, yymsp[-1].minor.yy4);
109950 break;
109951 case 112: /* cmd ::= select */
109953 SelectDest dest = {SRT_Output, 0, 0, 0, 0};
109954 sqlite3Select(pParse, yymsp[0].minor.yy387, &dest);
109955 sqlite3ExplainBegin(pParse->pVdbe);
109956 sqlite3ExplainSelect(pParse->pVdbe, yymsp[0].minor.yy387);
109957 sqlite3ExplainFinish(pParse->pVdbe);
109958 sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy387);
109960 break;
109961 case 113: /* select ::= oneselect */
109962 {yygotominor.yy387 = yymsp[0].minor.yy387;}
109963 break;
109964 case 114: /* select ::= select multiselect_op oneselect */
109966 if( yymsp[0].minor.yy387 ){
109967 yymsp[0].minor.yy387->op = (u8)yymsp[-1].minor.yy4;
109968 yymsp[0].minor.yy387->pPrior = yymsp[-2].minor.yy387;
109969 }else{
109970 sqlite3SelectDelete(pParse->db, yymsp[-2].minor.yy387);
109972 yygotominor.yy387 = yymsp[0].minor.yy387;
109974 break;
109975 case 116: /* multiselect_op ::= UNION ALL */
109976 {yygotominor.yy4 = TK_ALL;}
109977 break;
109978 case 118: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
109980 yygotominor.yy387 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy322,yymsp[-5].minor.yy259,yymsp[-4].minor.yy314,yymsp[-3].minor.yy322,yymsp[-2].minor.yy314,yymsp[-1].minor.yy322,yymsp[-7].minor.yy4,yymsp[0].minor.yy292.pLimit,yymsp[0].minor.yy292.pOffset);
109982 break;
109983 case 122: /* sclp ::= selcollist COMMA */
109984 case 247: /* idxlist_opt ::= LP idxlist RP */ yytestcase(yyruleno==247);
109985 {yygotominor.yy322 = yymsp[-1].minor.yy322;}
109986 break;
109987 case 123: /* sclp ::= */
109988 case 151: /* orderby_opt ::= */ yytestcase(yyruleno==151);
109989 case 159: /* groupby_opt ::= */ yytestcase(yyruleno==159);
109990 case 240: /* exprlist ::= */ yytestcase(yyruleno==240);
109991 case 246: /* idxlist_opt ::= */ yytestcase(yyruleno==246);
109992 {yygotominor.yy322 = 0;}
109993 break;
109994 case 124: /* selcollist ::= sclp expr as */
109996 yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-2].minor.yy322, yymsp[-1].minor.yy118.pExpr);
109997 if( yymsp[0].minor.yy0.n>0 ) sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[0].minor.yy0, 1);
109998 sqlite3ExprListSetSpan(pParse,yygotominor.yy322,&yymsp[-1].minor.yy118);
110000 break;
110001 case 125: /* selcollist ::= sclp STAR */
110003 Expr *p = sqlite3Expr(pParse->db, TK_ALL, 0);
110004 yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-1].minor.yy322, p);
110006 break;
110007 case 126: /* selcollist ::= sclp nm DOT STAR */
110009 Expr *pRight = sqlite3PExpr(pParse, TK_ALL, 0, 0, &yymsp[0].minor.yy0);
110010 Expr *pLeft = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
110011 Expr *pDot = sqlite3PExpr(pParse, TK_DOT, pLeft, pRight, 0);
110012 yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322, pDot);
110014 break;
110015 case 129: /* as ::= */
110016 {yygotominor.yy0.n = 0;}
110017 break;
110018 case 130: /* from ::= */
110019 {yygotominor.yy259 = sqlite3DbMallocZero(pParse->db, sizeof(*yygotominor.yy259));}
110020 break;
110021 case 131: /* from ::= FROM seltablist */
110023 yygotominor.yy259 = yymsp[0].minor.yy259;
110024 sqlite3SrcListShiftJoinType(yygotominor.yy259);
110026 break;
110027 case 132: /* stl_prefix ::= seltablist joinop */
110029 yygotominor.yy259 = yymsp[-1].minor.yy259;
110030 if( ALWAYS(yygotominor.yy259 && yygotominor.yy259->nSrc>0) ) yygotominor.yy259->a[yygotominor.yy259->nSrc-1].jointype = (u8)yymsp[0].minor.yy4;
110032 break;
110033 case 133: /* stl_prefix ::= */
110034 {yygotominor.yy259 = 0;}
110035 break;
110036 case 134: /* seltablist ::= stl_prefix nm dbnm as indexed_opt on_opt using_opt */
110038 yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,&yymsp[-5].minor.yy0,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,0,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
110039 sqlite3SrcListIndexedBy(pParse, yygotominor.yy259, &yymsp[-2].minor.yy0);
110041 break;
110042 case 135: /* seltablist ::= stl_prefix LP select RP as on_opt using_opt */
110044 yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,yymsp[-4].minor.yy387,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
110046 break;
110047 case 136: /* seltablist ::= stl_prefix LP seltablist RP as on_opt using_opt */
110049 if( yymsp[-6].minor.yy259==0 && yymsp[-2].minor.yy0.n==0 && yymsp[-1].minor.yy314==0 && yymsp[0].minor.yy384==0 ){
110050 yygotominor.yy259 = yymsp[-4].minor.yy259;
110051 }else{
110052 Select *pSubquery;
110053 sqlite3SrcListShiftJoinType(yymsp[-4].minor.yy259);
110054 pSubquery = sqlite3SelectNew(pParse,0,yymsp[-4].minor.yy259,0,0,0,0,0,0,0);
110055 yygotominor.yy259 = sqlite3SrcListAppendFromTerm(pParse,yymsp[-6].minor.yy259,0,0,&yymsp[-2].minor.yy0,pSubquery,yymsp[-1].minor.yy314,yymsp[0].minor.yy384);
110058 break;
110059 case 137: /* dbnm ::= */
110060 case 146: /* indexed_opt ::= */ yytestcase(yyruleno==146);
110061 {yygotominor.yy0.z=0; yygotominor.yy0.n=0;}
110062 break;
110063 case 139: /* fullname ::= nm dbnm */
110064 {yygotominor.yy259 = sqlite3SrcListAppend(pParse->db,0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);}
110065 break;
110066 case 140: /* joinop ::= COMMA|JOIN */
110067 { yygotominor.yy4 = JT_INNER; }
110068 break;
110069 case 141: /* joinop ::= JOIN_KW JOIN */
110070 { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-1].minor.yy0,0,0); }
110071 break;
110072 case 142: /* joinop ::= JOIN_KW nm JOIN */
110073 { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0,0); }
110074 break;
110075 case 143: /* joinop ::= JOIN_KW nm nm JOIN */
110076 { yygotominor.yy4 = sqlite3JoinType(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[-1].minor.yy0); }
110077 break;
110078 case 144: /* on_opt ::= ON expr */
110079 case 155: /* sortitem ::= expr */ yytestcase(yyruleno==155);
110080 case 162: /* having_opt ::= HAVING expr */ yytestcase(yyruleno==162);
110081 case 169: /* where_opt ::= WHERE expr */ yytestcase(yyruleno==169);
110082 case 235: /* case_else ::= ELSE expr */ yytestcase(yyruleno==235);
110083 case 237: /* case_operand ::= expr */ yytestcase(yyruleno==237);
110084 {yygotominor.yy314 = yymsp[0].minor.yy118.pExpr;}
110085 break;
110086 case 145: /* on_opt ::= */
110087 case 161: /* having_opt ::= */ yytestcase(yyruleno==161);
110088 case 168: /* where_opt ::= */ yytestcase(yyruleno==168);
110089 case 236: /* case_else ::= */ yytestcase(yyruleno==236);
110090 case 238: /* case_operand ::= */ yytestcase(yyruleno==238);
110091 {yygotominor.yy314 = 0;}
110092 break;
110093 case 148: /* indexed_opt ::= NOT INDEXED */
110094 {yygotominor.yy0.z=0; yygotominor.yy0.n=1;}
110095 break;
110096 case 149: /* using_opt ::= USING LP inscollist RP */
110097 case 181: /* inscollist_opt ::= LP inscollist RP */ yytestcase(yyruleno==181);
110098 {yygotominor.yy384 = yymsp[-1].minor.yy384;}
110099 break;
110100 case 150: /* using_opt ::= */
110101 case 180: /* inscollist_opt ::= */ yytestcase(yyruleno==180);
110102 {yygotominor.yy384 = 0;}
110103 break;
110104 case 152: /* orderby_opt ::= ORDER BY sortlist */
110105 case 160: /* groupby_opt ::= GROUP BY nexprlist */ yytestcase(yyruleno==160);
110106 case 239: /* exprlist ::= nexprlist */ yytestcase(yyruleno==239);
110107 {yygotominor.yy322 = yymsp[0].minor.yy322;}
110108 break;
110109 case 153: /* sortlist ::= sortlist COMMA sortitem sortorder */
110111 yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-3].minor.yy322,yymsp[-1].minor.yy314);
110112 if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
110114 break;
110115 case 154: /* sortlist ::= sortitem sortorder */
110117 yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[-1].minor.yy314);
110118 if( yygotominor.yy322 && ALWAYS(yygotominor.yy322->a) ) yygotominor.yy322->a[0].sortOrder = (u8)yymsp[0].minor.yy4;
110120 break;
110121 case 156: /* sortorder ::= ASC */
110122 case 158: /* sortorder ::= */ yytestcase(yyruleno==158);
110123 {yygotominor.yy4 = SQLITE_SO_ASC;}
110124 break;
110125 case 157: /* sortorder ::= DESC */
110126 {yygotominor.yy4 = SQLITE_SO_DESC;}
110127 break;
110128 case 163: /* limit_opt ::= */
110129 {yygotominor.yy292.pLimit = 0; yygotominor.yy292.pOffset = 0;}
110130 break;
110131 case 164: /* limit_opt ::= LIMIT expr */
110132 {yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr; yygotominor.yy292.pOffset = 0;}
110133 break;
110134 case 165: /* limit_opt ::= LIMIT expr OFFSET expr */
110135 {yygotominor.yy292.pLimit = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pOffset = yymsp[0].minor.yy118.pExpr;}
110136 break;
110137 case 166: /* limit_opt ::= LIMIT expr COMMA expr */
110138 {yygotominor.yy292.pOffset = yymsp[-2].minor.yy118.pExpr; yygotominor.yy292.pLimit = yymsp[0].minor.yy118.pExpr;}
110139 break;
110140 case 167: /* cmd ::= DELETE FROM fullname indexed_opt where_opt */
110142 sqlite3SrcListIndexedBy(pParse, yymsp[-2].minor.yy259, &yymsp[-1].minor.yy0);
110143 sqlite3DeleteFrom(pParse,yymsp[-2].minor.yy259,yymsp[0].minor.yy314);
110145 break;
110146 case 170: /* cmd ::= UPDATE orconf fullname indexed_opt SET setlist where_opt */
110148 sqlite3SrcListIndexedBy(pParse, yymsp[-4].minor.yy259, &yymsp[-3].minor.yy0);
110149 sqlite3ExprListCheckLength(pParse,yymsp[-1].minor.yy322,"set list");
110150 sqlite3Update(pParse,yymsp[-4].minor.yy259,yymsp[-1].minor.yy322,yymsp[0].minor.yy314,yymsp[-5].minor.yy210);
110152 break;
110153 case 171: /* setlist ::= setlist COMMA nm EQ expr */
110155 yygotominor.yy322 = sqlite3ExprListAppend(pParse, yymsp[-4].minor.yy322, yymsp[0].minor.yy118.pExpr);
110156 sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
110158 break;
110159 case 172: /* setlist ::= nm EQ expr */
110161 yygotominor.yy322 = sqlite3ExprListAppend(pParse, 0, yymsp[0].minor.yy118.pExpr);
110162 sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
110164 break;
110165 case 173: /* cmd ::= insert_cmd INTO fullname inscollist_opt VALUES LP itemlist RP */
110166 {sqlite3Insert(pParse, yymsp[-5].minor.yy259, yymsp[-1].minor.yy322, 0, yymsp[-4].minor.yy384, yymsp[-7].minor.yy210);}
110167 break;
110168 case 174: /* cmd ::= insert_cmd INTO fullname inscollist_opt select */
110169 {sqlite3Insert(pParse, yymsp[-2].minor.yy259, 0, yymsp[0].minor.yy387, yymsp[-1].minor.yy384, yymsp[-4].minor.yy210);}
110170 break;
110171 case 175: /* cmd ::= insert_cmd INTO fullname inscollist_opt DEFAULT VALUES */
110172 {sqlite3Insert(pParse, yymsp[-3].minor.yy259, 0, 0, yymsp[-2].minor.yy384, yymsp[-5].minor.yy210);}
110173 break;
110174 case 176: /* insert_cmd ::= INSERT orconf */
110175 {yygotominor.yy210 = yymsp[0].minor.yy210;}
110176 break;
110177 case 177: /* insert_cmd ::= REPLACE */
110178 {yygotominor.yy210 = OE_Replace;}
110179 break;
110180 case 178: /* itemlist ::= itemlist COMMA expr */
110181 case 241: /* nexprlist ::= nexprlist COMMA expr */ yytestcase(yyruleno==241);
110182 {yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-2].minor.yy322,yymsp[0].minor.yy118.pExpr);}
110183 break;
110184 case 179: /* itemlist ::= expr */
110185 case 242: /* nexprlist ::= expr */ yytestcase(yyruleno==242);
110186 {yygotominor.yy322 = sqlite3ExprListAppend(pParse,0,yymsp[0].minor.yy118.pExpr);}
110187 break;
110188 case 182: /* inscollist ::= inscollist COMMA nm */
110189 {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,yymsp[-2].minor.yy384,&yymsp[0].minor.yy0);}
110190 break;
110191 case 183: /* inscollist ::= nm */
110192 {yygotominor.yy384 = sqlite3IdListAppend(pParse->db,0,&yymsp[0].minor.yy0);}
110193 break;
110194 case 184: /* expr ::= term */
110195 {yygotominor.yy118 = yymsp[0].minor.yy118;}
110196 break;
110197 case 185: /* expr ::= LP expr RP */
110198 {yygotominor.yy118.pExpr = yymsp[-1].minor.yy118.pExpr; spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);}
110199 break;
110200 case 186: /* term ::= NULL */
110201 case 191: /* term ::= INTEGER|FLOAT|BLOB */ yytestcase(yyruleno==191);
110202 case 192: /* term ::= STRING */ yytestcase(yyruleno==192);
110203 {spanExpr(&yygotominor.yy118, pParse, yymsp[0].major, &yymsp[0].minor.yy0);}
110204 break;
110205 case 187: /* expr ::= id */
110206 case 188: /* expr ::= JOIN_KW */ yytestcase(yyruleno==188);
110207 {spanExpr(&yygotominor.yy118, pParse, TK_ID, &yymsp[0].minor.yy0);}
110208 break;
110209 case 189: /* expr ::= nm DOT nm */
110211 Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
110212 Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
110213 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp2, 0);
110214 spanSet(&yygotominor.yy118,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0);
110216 break;
110217 case 190: /* expr ::= nm DOT nm DOT nm */
110219 Expr *temp1 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-4].minor.yy0);
110220 Expr *temp2 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[-2].minor.yy0);
110221 Expr *temp3 = sqlite3PExpr(pParse, TK_ID, 0, 0, &yymsp[0].minor.yy0);
110222 Expr *temp4 = sqlite3PExpr(pParse, TK_DOT, temp2, temp3, 0);
110223 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_DOT, temp1, temp4, 0);
110224 spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
110226 break;
110227 case 193: /* expr ::= REGISTER */
110229 /* When doing a nested parse, one can include terms in an expression
110230 ** that look like this: #1 #2 ... These terms refer to registers
110231 ** in the virtual machine. #N is the N-th register. */
110232 if( pParse->nested==0 ){
110233 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &yymsp[0].minor.yy0);
110234 yygotominor.yy118.pExpr = 0;
110235 }else{
110236 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_REGISTER, 0, 0, &yymsp[0].minor.yy0);
110237 if( yygotominor.yy118.pExpr ) sqlite3GetInt32(&yymsp[0].minor.yy0.z[1], &yygotominor.yy118.pExpr->iTable);
110239 spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
110241 break;
110242 case 194: /* expr ::= VARIABLE */
110244 spanExpr(&yygotominor.yy118, pParse, TK_VARIABLE, &yymsp[0].minor.yy0);
110245 sqlite3ExprAssignVarNumber(pParse, yygotominor.yy118.pExpr);
110246 spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
110248 break;
110249 case 195: /* expr ::= expr COLLATE ids */
110251 yygotominor.yy118.pExpr = sqlite3ExprSetCollByToken(pParse, yymsp[-2].minor.yy118.pExpr, &yymsp[0].minor.yy0);
110252 yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
110253 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110255 break;
110256 case 196: /* expr ::= CAST LP expr AS typetoken RP */
110258 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CAST, yymsp[-3].minor.yy118.pExpr, 0, &yymsp[-1].minor.yy0);
110259 spanSet(&yygotominor.yy118,&yymsp[-5].minor.yy0,&yymsp[0].minor.yy0);
110261 break;
110262 case 197: /* expr ::= ID LP distinct exprlist RP */
110264 if( yymsp[-1].minor.yy322 && yymsp[-1].minor.yy322->nExpr>pParse->db->aLimit[SQLITE_LIMIT_FUNCTION_ARG] ){
110265 sqlite3ErrorMsg(pParse, "too many arguments on function %T", &yymsp[-4].minor.yy0);
110267 yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, yymsp[-1].minor.yy322, &yymsp[-4].minor.yy0);
110268 spanSet(&yygotominor.yy118,&yymsp[-4].minor.yy0,&yymsp[0].minor.yy0);
110269 if( yymsp[-2].minor.yy4 && yygotominor.yy118.pExpr ){
110270 yygotominor.yy118.pExpr->flags |= EP_Distinct;
110273 break;
110274 case 198: /* expr ::= ID LP STAR RP */
110276 yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0, &yymsp[-3].minor.yy0);
110277 spanSet(&yygotominor.yy118,&yymsp[-3].minor.yy0,&yymsp[0].minor.yy0);
110279 break;
110280 case 199: /* term ::= CTIME_KW */
110282 /* The CURRENT_TIME, CURRENT_DATE, and CURRENT_TIMESTAMP values are
110283 ** treated as functions that return constants */
110284 yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, 0,&yymsp[0].minor.yy0);
110285 if( yygotominor.yy118.pExpr ){
110286 yygotominor.yy118.pExpr->op = TK_CONST_FUNC;
110288 spanSet(&yygotominor.yy118, &yymsp[0].minor.yy0, &yymsp[0].minor.yy0);
110290 break;
110291 case 200: /* expr ::= expr AND expr */
110292 case 201: /* expr ::= expr OR expr */ yytestcase(yyruleno==201);
110293 case 202: /* expr ::= expr LT|GT|GE|LE expr */ yytestcase(yyruleno==202);
110294 case 203: /* expr ::= expr EQ|NE expr */ yytestcase(yyruleno==203);
110295 case 204: /* expr ::= expr BITAND|BITOR|LSHIFT|RSHIFT expr */ yytestcase(yyruleno==204);
110296 case 205: /* expr ::= expr PLUS|MINUS expr */ yytestcase(yyruleno==205);
110297 case 206: /* expr ::= expr STAR|SLASH|REM expr */ yytestcase(yyruleno==206);
110298 case 207: /* expr ::= expr CONCAT expr */ yytestcase(yyruleno==207);
110299 {spanBinaryExpr(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);}
110300 break;
110301 case 208: /* likeop ::= LIKE_KW */
110302 case 210: /* likeop ::= MATCH */ yytestcase(yyruleno==210);
110303 {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 0;}
110304 break;
110305 case 209: /* likeop ::= NOT LIKE_KW */
110306 case 211: /* likeop ::= NOT MATCH */ yytestcase(yyruleno==211);
110307 {yygotominor.yy342.eOperator = yymsp[0].minor.yy0; yygotominor.yy342.not = 1;}
110308 break;
110309 case 212: /* expr ::= expr likeop expr */
110311 ExprList *pList;
110312 pList = sqlite3ExprListAppend(pParse,0, yymsp[0].minor.yy118.pExpr);
110313 pList = sqlite3ExprListAppend(pParse,pList, yymsp[-2].minor.yy118.pExpr);
110314 yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-1].minor.yy342.eOperator);
110315 if( yymsp[-1].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110316 yygotominor.yy118.zStart = yymsp[-2].minor.yy118.zStart;
110317 yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
110318 if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
110320 break;
110321 case 213: /* expr ::= expr likeop expr ESCAPE expr */
110323 ExprList *pList;
110324 pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
110325 pList = sqlite3ExprListAppend(pParse,pList, yymsp[-4].minor.yy118.pExpr);
110326 pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
110327 yygotominor.yy118.pExpr = sqlite3ExprFunction(pParse, pList, &yymsp[-3].minor.yy342.eOperator);
110328 if( yymsp[-3].minor.yy342.not ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110329 yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110330 yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
110331 if( yygotominor.yy118.pExpr ) yygotominor.yy118.pExpr->flags |= EP_InfixFunc;
110333 break;
110334 case 214: /* expr ::= expr ISNULL|NOTNULL */
110335 {spanUnaryPostfix(&yygotominor.yy118,pParse,yymsp[0].major,&yymsp[-1].minor.yy118,&yymsp[0].minor.yy0);}
110336 break;
110337 case 215: /* expr ::= expr NOT NULL */
110338 {spanUnaryPostfix(&yygotominor.yy118,pParse,TK_NOTNULL,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy0);}
110339 break;
110340 case 216: /* expr ::= expr IS expr */
110342 spanBinaryExpr(&yygotominor.yy118,pParse,TK_IS,&yymsp[-2].minor.yy118,&yymsp[0].minor.yy118);
110343 binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_ISNULL);
110345 break;
110346 case 217: /* expr ::= expr IS NOT expr */
110348 spanBinaryExpr(&yygotominor.yy118,pParse,TK_ISNOT,&yymsp[-3].minor.yy118,&yymsp[0].minor.yy118);
110349 binaryToUnaryIfNull(pParse, yymsp[0].minor.yy118.pExpr, yygotominor.yy118.pExpr, TK_NOTNULL);
110351 break;
110352 case 218: /* expr ::= NOT expr */
110353 case 219: /* expr ::= BITNOT expr */ yytestcase(yyruleno==219);
110354 {spanUnaryPrefix(&yygotominor.yy118,pParse,yymsp[-1].major,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
110355 break;
110356 case 220: /* expr ::= MINUS expr */
110357 {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UMINUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
110358 break;
110359 case 221: /* expr ::= PLUS expr */
110360 {spanUnaryPrefix(&yygotominor.yy118,pParse,TK_UPLUS,&yymsp[0].minor.yy118,&yymsp[-1].minor.yy0);}
110361 break;
110362 case 224: /* expr ::= expr between_op expr AND expr */
110364 ExprList *pList = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
110365 pList = sqlite3ExprListAppend(pParse,pList, yymsp[0].minor.yy118.pExpr);
110366 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_BETWEEN, yymsp[-4].minor.yy118.pExpr, 0, 0);
110367 if( yygotominor.yy118.pExpr ){
110368 yygotominor.yy118.pExpr->x.pList = pList;
110369 }else{
110370 sqlite3ExprListDelete(pParse->db, pList);
110372 if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110373 yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110374 yygotominor.yy118.zEnd = yymsp[0].minor.yy118.zEnd;
110376 break;
110377 case 227: /* expr ::= expr in_op LP exprlist RP */
110379 if( yymsp[-1].minor.yy322==0 ){
110380 /* Expressions of the form
110382 ** expr1 IN ()
110383 ** expr1 NOT IN ()
110385 ** simplify to constants 0 (false) and 1 (true), respectively,
110386 ** regardless of the value of expr1.
110388 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_INTEGER, 0, 0, &sqlite3IntTokens[yymsp[-3].minor.yy4]);
110389 sqlite3ExprDelete(pParse->db, yymsp[-4].minor.yy118.pExpr);
110390 }else{
110391 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
110392 if( yygotominor.yy118.pExpr ){
110393 yygotominor.yy118.pExpr->x.pList = yymsp[-1].minor.yy322;
110394 sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110395 }else{
110396 sqlite3ExprListDelete(pParse->db, yymsp[-1].minor.yy322);
110398 if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110400 yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110401 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110403 break;
110404 case 228: /* expr ::= LP select RP */
110406 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_SELECT, 0, 0, 0);
110407 if( yygotominor.yy118.pExpr ){
110408 yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
110409 ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
110410 sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110411 }else{
110412 sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
110414 yygotominor.yy118.zStart = yymsp[-2].minor.yy0.z;
110415 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110417 break;
110418 case 229: /* expr ::= expr in_op LP select RP */
110420 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-4].minor.yy118.pExpr, 0, 0);
110421 if( yygotominor.yy118.pExpr ){
110422 yygotominor.yy118.pExpr->x.pSelect = yymsp[-1].minor.yy387;
110423 ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
110424 sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110425 }else{
110426 sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
110428 if( yymsp[-3].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110429 yygotominor.yy118.zStart = yymsp[-4].minor.yy118.zStart;
110430 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110432 break;
110433 case 230: /* expr ::= expr in_op nm dbnm */
110435 SrcList *pSrc = sqlite3SrcListAppend(pParse->db, 0,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0);
110436 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_IN, yymsp[-3].minor.yy118.pExpr, 0, 0);
110437 if( yygotominor.yy118.pExpr ){
110438 yygotominor.yy118.pExpr->x.pSelect = sqlite3SelectNew(pParse, 0,pSrc,0,0,0,0,0,0,0);
110439 ExprSetProperty(yygotominor.yy118.pExpr, EP_xIsSelect);
110440 sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110441 }else{
110442 sqlite3SrcListDelete(pParse->db, pSrc);
110444 if( yymsp[-2].minor.yy4 ) yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_NOT, yygotominor.yy118.pExpr, 0, 0);
110445 yygotominor.yy118.zStart = yymsp[-3].minor.yy118.zStart;
110446 yygotominor.yy118.zEnd = yymsp[0].minor.yy0.z ? &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n] : &yymsp[-1].minor.yy0.z[yymsp[-1].minor.yy0.n];
110448 break;
110449 case 231: /* expr ::= EXISTS LP select RP */
110451 Expr *p = yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_EXISTS, 0, 0, 0);
110452 if( p ){
110453 p->x.pSelect = yymsp[-1].minor.yy387;
110454 ExprSetProperty(p, EP_xIsSelect);
110455 sqlite3ExprSetHeight(pParse, p);
110456 }else{
110457 sqlite3SelectDelete(pParse->db, yymsp[-1].minor.yy387);
110459 yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
110460 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110462 break;
110463 case 232: /* expr ::= CASE case_operand case_exprlist case_else END */
110465 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_CASE, yymsp[-3].minor.yy314, yymsp[-1].minor.yy314, 0);
110466 if( yygotominor.yy118.pExpr ){
110467 yygotominor.yy118.pExpr->x.pList = yymsp[-2].minor.yy322;
110468 sqlite3ExprSetHeight(pParse, yygotominor.yy118.pExpr);
110469 }else{
110470 sqlite3ExprListDelete(pParse->db, yymsp[-2].minor.yy322);
110472 yygotominor.yy118.zStart = yymsp[-4].minor.yy0.z;
110473 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110475 break;
110476 case 233: /* case_exprlist ::= case_exprlist WHEN expr THEN expr */
110478 yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, yymsp[-2].minor.yy118.pExpr);
110479 yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
110481 break;
110482 case 234: /* case_exprlist ::= WHEN expr THEN expr */
110484 yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, yymsp[-2].minor.yy118.pExpr);
110485 yygotominor.yy322 = sqlite3ExprListAppend(pParse,yygotominor.yy322, yymsp[0].minor.yy118.pExpr);
110487 break;
110488 case 243: /* cmd ::= createkw uniqueflag INDEX ifnotexists nm dbnm ON nm LP idxlist RP */
110490 sqlite3CreateIndex(pParse, &yymsp[-6].minor.yy0, &yymsp[-5].minor.yy0,
110491 sqlite3SrcListAppend(pParse->db,0,&yymsp[-3].minor.yy0,0), yymsp[-1].minor.yy322, yymsp[-9].minor.yy4,
110492 &yymsp[-10].minor.yy0, &yymsp[0].minor.yy0, SQLITE_SO_ASC, yymsp[-7].minor.yy4);
110494 break;
110495 case 244: /* uniqueflag ::= UNIQUE */
110496 case 298: /* raisetype ::= ABORT */ yytestcase(yyruleno==298);
110497 {yygotominor.yy4 = OE_Abort;}
110498 break;
110499 case 245: /* uniqueflag ::= */
110500 {yygotominor.yy4 = OE_None;}
110501 break;
110502 case 248: /* idxlist ::= idxlist COMMA nm collate sortorder */
110504 Expr *p = 0;
110505 if( yymsp[-1].minor.yy0.n>0 ){
110506 p = sqlite3Expr(pParse->db, TK_COLUMN, 0);
110507 sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
110509 yygotominor.yy322 = sqlite3ExprListAppend(pParse,yymsp[-4].minor.yy322, p);
110510 sqlite3ExprListSetName(pParse,yygotominor.yy322,&yymsp[-2].minor.yy0,1);
110511 sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
110512 if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
110514 break;
110515 case 249: /* idxlist ::= nm collate sortorder */
110517 Expr *p = 0;
110518 if( yymsp[-1].minor.yy0.n>0 ){
110519 p = sqlite3PExpr(pParse, TK_COLUMN, 0, 0, 0);
110520 sqlite3ExprSetCollByToken(pParse, p, &yymsp[-1].minor.yy0);
110522 yygotominor.yy322 = sqlite3ExprListAppend(pParse,0, p);
110523 sqlite3ExprListSetName(pParse, yygotominor.yy322, &yymsp[-2].minor.yy0, 1);
110524 sqlite3ExprListCheckLength(pParse, yygotominor.yy322, "index");
110525 if( yygotominor.yy322 ) yygotominor.yy322->a[yygotominor.yy322->nExpr-1].sortOrder = (u8)yymsp[0].minor.yy4;
110527 break;
110528 case 250: /* collate ::= */
110529 {yygotominor.yy0.z = 0; yygotominor.yy0.n = 0;}
110530 break;
110531 case 252: /* cmd ::= DROP INDEX ifexists fullname */
110532 {sqlite3DropIndex(pParse, yymsp[0].minor.yy259, yymsp[-1].minor.yy4);}
110533 break;
110534 case 253: /* cmd ::= VACUUM */
110535 case 254: /* cmd ::= VACUUM nm */ yytestcase(yyruleno==254);
110536 {sqlite3Vacuum(pParse);}
110537 break;
110538 case 255: /* cmd ::= PRAGMA nm dbnm */
110539 {sqlite3Pragma(pParse,&yymsp[-1].minor.yy0,&yymsp[0].minor.yy0,0,0);}
110540 break;
110541 case 256: /* cmd ::= PRAGMA nm dbnm EQ nmnum */
110542 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,0);}
110543 break;
110544 case 257: /* cmd ::= PRAGMA nm dbnm LP nmnum RP */
110545 {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,0);}
110546 break;
110547 case 258: /* cmd ::= PRAGMA nm dbnm EQ minus_num */
110548 {sqlite3Pragma(pParse,&yymsp[-3].minor.yy0,&yymsp[-2].minor.yy0,&yymsp[0].minor.yy0,1);}
110549 break;
110550 case 259: /* cmd ::= PRAGMA nm dbnm LP minus_num RP */
110551 {sqlite3Pragma(pParse,&yymsp[-4].minor.yy0,&yymsp[-3].minor.yy0,&yymsp[-1].minor.yy0,1);}
110552 break;
110553 case 270: /* cmd ::= createkw trigger_decl BEGIN trigger_cmd_list END */
110555 Token all;
110556 all.z = yymsp[-3].minor.yy0.z;
110557 all.n = (int)(yymsp[0].minor.yy0.z - yymsp[-3].minor.yy0.z) + yymsp[0].minor.yy0.n;
110558 sqlite3FinishTrigger(pParse, yymsp[-1].minor.yy203, &all);
110560 break;
110561 case 271: /* trigger_decl ::= temp TRIGGER ifnotexists nm dbnm trigger_time trigger_event ON fullname foreach_clause when_clause */
110563 sqlite3BeginTrigger(pParse, &yymsp[-7].minor.yy0, &yymsp[-6].minor.yy0, yymsp[-5].minor.yy4, yymsp[-4].minor.yy90.a, yymsp[-4].minor.yy90.b, yymsp[-2].minor.yy259, yymsp[0].minor.yy314, yymsp[-10].minor.yy4, yymsp[-8].minor.yy4);
110564 yygotominor.yy0 = (yymsp[-6].minor.yy0.n==0?yymsp[-7].minor.yy0:yymsp[-6].minor.yy0);
110566 break;
110567 case 272: /* trigger_time ::= BEFORE */
110568 case 275: /* trigger_time ::= */ yytestcase(yyruleno==275);
110569 { yygotominor.yy4 = TK_BEFORE; }
110570 break;
110571 case 273: /* trigger_time ::= AFTER */
110572 { yygotominor.yy4 = TK_AFTER; }
110573 break;
110574 case 274: /* trigger_time ::= INSTEAD OF */
110575 { yygotominor.yy4 = TK_INSTEAD;}
110576 break;
110577 case 276: /* trigger_event ::= DELETE|INSERT */
110578 case 277: /* trigger_event ::= UPDATE */ yytestcase(yyruleno==277);
110579 {yygotominor.yy90.a = yymsp[0].major; yygotominor.yy90.b = 0;}
110580 break;
110581 case 278: /* trigger_event ::= UPDATE OF inscollist */
110582 {yygotominor.yy90.a = TK_UPDATE; yygotominor.yy90.b = yymsp[0].minor.yy384;}
110583 break;
110584 case 281: /* when_clause ::= */
110585 case 303: /* key_opt ::= */ yytestcase(yyruleno==303);
110586 { yygotominor.yy314 = 0; }
110587 break;
110588 case 282: /* when_clause ::= WHEN expr */
110589 case 304: /* key_opt ::= KEY expr */ yytestcase(yyruleno==304);
110590 { yygotominor.yy314 = yymsp[0].minor.yy118.pExpr; }
110591 break;
110592 case 283: /* trigger_cmd_list ::= trigger_cmd_list trigger_cmd SEMI */
110594 assert( yymsp[-2].minor.yy203!=0 );
110595 yymsp[-2].minor.yy203->pLast->pNext = yymsp[-1].minor.yy203;
110596 yymsp[-2].minor.yy203->pLast = yymsp[-1].minor.yy203;
110597 yygotominor.yy203 = yymsp[-2].minor.yy203;
110599 break;
110600 case 284: /* trigger_cmd_list ::= trigger_cmd SEMI */
110602 assert( yymsp[-1].minor.yy203!=0 );
110603 yymsp[-1].minor.yy203->pLast = yymsp[-1].minor.yy203;
110604 yygotominor.yy203 = yymsp[-1].minor.yy203;
110606 break;
110607 case 286: /* trnm ::= nm DOT nm */
110609 yygotominor.yy0 = yymsp[0].minor.yy0;
110610 sqlite3ErrorMsg(pParse,
110611 "qualified table names are not allowed on INSERT, UPDATE, and DELETE "
110612 "statements within triggers");
110614 break;
110615 case 288: /* tridxby ::= INDEXED BY nm */
110617 sqlite3ErrorMsg(pParse,
110618 "the INDEXED BY clause is not allowed on UPDATE or DELETE statements "
110619 "within triggers");
110621 break;
110622 case 289: /* tridxby ::= NOT INDEXED */
110624 sqlite3ErrorMsg(pParse,
110625 "the NOT INDEXED clause is not allowed on UPDATE or DELETE statements "
110626 "within triggers");
110628 break;
110629 case 290: /* trigger_cmd ::= UPDATE orconf trnm tridxby SET setlist where_opt */
110630 { yygotominor.yy203 = sqlite3TriggerUpdateStep(pParse->db, &yymsp[-4].minor.yy0, yymsp[-1].minor.yy322, yymsp[0].minor.yy314, yymsp[-5].minor.yy210); }
110631 break;
110632 case 291: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt VALUES LP itemlist RP */
110633 {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-5].minor.yy0, yymsp[-4].minor.yy384, yymsp[-1].minor.yy322, 0, yymsp[-7].minor.yy210);}
110634 break;
110635 case 292: /* trigger_cmd ::= insert_cmd INTO trnm inscollist_opt select */
110636 {yygotominor.yy203 = sqlite3TriggerInsertStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[-1].minor.yy384, 0, yymsp[0].minor.yy387, yymsp[-4].minor.yy210);}
110637 break;
110638 case 293: /* trigger_cmd ::= DELETE FROM trnm tridxby where_opt */
110639 {yygotominor.yy203 = sqlite3TriggerDeleteStep(pParse->db, &yymsp[-2].minor.yy0, yymsp[0].minor.yy314);}
110640 break;
110641 case 294: /* trigger_cmd ::= select */
110642 {yygotominor.yy203 = sqlite3TriggerSelectStep(pParse->db, yymsp[0].minor.yy387); }
110643 break;
110644 case 295: /* expr ::= RAISE LP IGNORE RP */
110646 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, 0);
110647 if( yygotominor.yy118.pExpr ){
110648 yygotominor.yy118.pExpr->affinity = OE_Ignore;
110650 yygotominor.yy118.zStart = yymsp[-3].minor.yy0.z;
110651 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110653 break;
110654 case 296: /* expr ::= RAISE LP raisetype COMMA nm RP */
110656 yygotominor.yy118.pExpr = sqlite3PExpr(pParse, TK_RAISE, 0, 0, &yymsp[-1].minor.yy0);
110657 if( yygotominor.yy118.pExpr ) {
110658 yygotominor.yy118.pExpr->affinity = (char)yymsp[-3].minor.yy4;
110660 yygotominor.yy118.zStart = yymsp[-5].minor.yy0.z;
110661 yygotominor.yy118.zEnd = &yymsp[0].minor.yy0.z[yymsp[0].minor.yy0.n];
110663 break;
110664 case 297: /* raisetype ::= ROLLBACK */
110665 {yygotominor.yy4 = OE_Rollback;}
110666 break;
110667 case 299: /* raisetype ::= FAIL */
110668 {yygotominor.yy4 = OE_Fail;}
110669 break;
110670 case 300: /* cmd ::= DROP TRIGGER ifexists fullname */
110672 sqlite3DropTrigger(pParse,yymsp[0].minor.yy259,yymsp[-1].minor.yy4);
110674 break;
110675 case 301: /* cmd ::= ATTACH database_kw_opt expr AS expr key_opt */
110677 sqlite3Attach(pParse, yymsp[-3].minor.yy118.pExpr, yymsp[-1].minor.yy118.pExpr, yymsp[0].minor.yy314);
110679 break;
110680 case 302: /* cmd ::= DETACH database_kw_opt expr */
110682 sqlite3Detach(pParse, yymsp[0].minor.yy118.pExpr);
110684 break;
110685 case 307: /* cmd ::= REINDEX */
110686 {sqlite3Reindex(pParse, 0, 0);}
110687 break;
110688 case 308: /* cmd ::= REINDEX nm dbnm */
110689 {sqlite3Reindex(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
110690 break;
110691 case 309: /* cmd ::= ANALYZE */
110692 {sqlite3Analyze(pParse, 0, 0);}
110693 break;
110694 case 310: /* cmd ::= ANALYZE nm dbnm */
110695 {sqlite3Analyze(pParse, &yymsp[-1].minor.yy0, &yymsp[0].minor.yy0);}
110696 break;
110697 case 311: /* cmd ::= ALTER TABLE fullname RENAME TO nm */
110699 sqlite3AlterRenameTable(pParse,yymsp[-3].minor.yy259,&yymsp[0].minor.yy0);
110701 break;
110702 case 312: /* cmd ::= ALTER TABLE add_column_fullname ADD kwcolumn_opt column */
110704 sqlite3AlterFinishAddColumn(pParse, &yymsp[0].minor.yy0);
110706 break;
110707 case 313: /* add_column_fullname ::= fullname */
110709 pParse->db->lookaside.bEnabled = 0;
110710 sqlite3AlterBeginAddColumn(pParse, yymsp[0].minor.yy259);
110712 break;
110713 case 316: /* cmd ::= create_vtab */
110714 {sqlite3VtabFinishParse(pParse,0);}
110715 break;
110716 case 317: /* cmd ::= create_vtab LP vtabarglist RP */
110717 {sqlite3VtabFinishParse(pParse,&yymsp[0].minor.yy0);}
110718 break;
110719 case 318: /* create_vtab ::= createkw VIRTUAL TABLE nm dbnm USING nm */
110721 sqlite3VtabBeginParse(pParse, &yymsp[-3].minor.yy0, &yymsp[-2].minor.yy0, &yymsp[0].minor.yy0);
110723 break;
110724 case 321: /* vtabarg ::= */
110725 {sqlite3VtabArgInit(pParse);}
110726 break;
110727 case 323: /* vtabargtoken ::= ANY */
110728 case 324: /* vtabargtoken ::= lp anylist RP */ yytestcase(yyruleno==324);
110729 case 325: /* lp ::= LP */ yytestcase(yyruleno==325);
110730 {sqlite3VtabArgExtend(pParse,&yymsp[0].minor.yy0);}
110731 break;
110732 default:
110733 /* (0) input ::= cmdlist */ yytestcase(yyruleno==0);
110734 /* (1) cmdlist ::= cmdlist ecmd */ yytestcase(yyruleno==1);
110735 /* (2) cmdlist ::= ecmd */ yytestcase(yyruleno==2);
110736 /* (3) ecmd ::= SEMI */ yytestcase(yyruleno==3);
110737 /* (4) ecmd ::= explain cmdx SEMI */ yytestcase(yyruleno==4);
110738 /* (10) trans_opt ::= */ yytestcase(yyruleno==10);
110739 /* (11) trans_opt ::= TRANSACTION */ yytestcase(yyruleno==11);
110740 /* (12) trans_opt ::= TRANSACTION nm */ yytestcase(yyruleno==12);
110741 /* (20) savepoint_opt ::= SAVEPOINT */ yytestcase(yyruleno==20);
110742 /* (21) savepoint_opt ::= */ yytestcase(yyruleno==21);
110743 /* (25) cmd ::= create_table create_table_args */ yytestcase(yyruleno==25);
110744 /* (34) columnlist ::= columnlist COMMA column */ yytestcase(yyruleno==34);
110745 /* (35) columnlist ::= column */ yytestcase(yyruleno==35);
110746 /* (44) type ::= */ yytestcase(yyruleno==44);
110747 /* (51) signed ::= plus_num */ yytestcase(yyruleno==51);
110748 /* (52) signed ::= minus_num */ yytestcase(yyruleno==52);
110749 /* (53) carglist ::= carglist carg */ yytestcase(yyruleno==53);
110750 /* (54) carglist ::= */ yytestcase(yyruleno==54);
110751 /* (55) carg ::= CONSTRAINT nm ccons */ yytestcase(yyruleno==55);
110752 /* (56) carg ::= ccons */ yytestcase(yyruleno==56);
110753 /* (62) ccons ::= NULL onconf */ yytestcase(yyruleno==62);
110754 /* (90) conslist ::= conslist COMMA tcons */ yytestcase(yyruleno==90);
110755 /* (91) conslist ::= conslist tcons */ yytestcase(yyruleno==91);
110756 /* (92) conslist ::= tcons */ yytestcase(yyruleno==92);
110757 /* (93) tcons ::= CONSTRAINT nm */ yytestcase(yyruleno==93);
110758 /* (268) plus_opt ::= PLUS */ yytestcase(yyruleno==268);
110759 /* (269) plus_opt ::= */ yytestcase(yyruleno==269);
110760 /* (279) foreach_clause ::= */ yytestcase(yyruleno==279);
110761 /* (280) foreach_clause ::= FOR EACH ROW */ yytestcase(yyruleno==280);
110762 /* (287) tridxby ::= */ yytestcase(yyruleno==287);
110763 /* (305) database_kw_opt ::= DATABASE */ yytestcase(yyruleno==305);
110764 /* (306) database_kw_opt ::= */ yytestcase(yyruleno==306);
110765 /* (314) kwcolumn_opt ::= */ yytestcase(yyruleno==314);
110766 /* (315) kwcolumn_opt ::= COLUMNKW */ yytestcase(yyruleno==315);
110767 /* (319) vtabarglist ::= vtabarg */ yytestcase(yyruleno==319);
110768 /* (320) vtabarglist ::= vtabarglist COMMA vtabarg */ yytestcase(yyruleno==320);
110769 /* (322) vtabarg ::= vtabarg vtabargtoken */ yytestcase(yyruleno==322);
110770 /* (326) anylist ::= */ yytestcase(yyruleno==326);
110771 /* (327) anylist ::= anylist LP anylist RP */ yytestcase(yyruleno==327);
110772 /* (328) anylist ::= anylist ANY */ yytestcase(yyruleno==328);
110773 break;
110775 yygoto = yyRuleInfo[yyruleno].lhs;
110776 yysize = yyRuleInfo[yyruleno].nrhs;
110777 yypParser->yyidx -= yysize;
110778 yyact = yy_find_reduce_action(yymsp[-yysize].stateno,(YYCODETYPE)yygoto);
110779 if( yyact < YYNSTATE ){
110780 #ifdef NDEBUG
110781 /* If we are not debugging and the reduce action popped at least
110782 ** one element off the stack, then we can push the new element back
110783 ** onto the stack here, and skip the stack overflow test in yy_shift().
110784 ** That gives a significant speed improvement. */
110785 if( yysize ){
110786 yypParser->yyidx++;
110787 yymsp -= yysize-1;
110788 yymsp->stateno = (YYACTIONTYPE)yyact;
110789 yymsp->major = (YYCODETYPE)yygoto;
110790 yymsp->minor = yygotominor;
110791 }else
110792 #endif
110794 yy_shift(yypParser,yyact,yygoto,&yygotominor);
110796 }else{
110797 assert( yyact == YYNSTATE + YYNRULE + 1 );
110798 yy_accept(yypParser);
110803 ** The following code executes when the parse fails
110805 #ifndef YYNOERRORRECOVERY
110806 static void yy_parse_failed(
110807 yyParser *yypParser /* The parser */
110809 sqlite3ParserARG_FETCH;
110810 #ifndef NDEBUG
110811 if( yyTraceFILE ){
110812 fprintf(yyTraceFILE,"%sFail!\n",yyTracePrompt);
110814 #endif
110815 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
110816 /* Here code is inserted which will be executed whenever the
110817 ** parser fails */
110818 sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
110820 #endif /* YYNOERRORRECOVERY */
110823 ** The following code executes when a syntax error first occurs.
110825 static void yy_syntax_error(
110826 yyParser *yypParser, /* The parser */
110827 int yymajor, /* The major type of the error token */
110828 YYMINORTYPE yyminor /* The minor type of the error token */
110830 sqlite3ParserARG_FETCH;
110831 #define TOKEN (yyminor.yy0)
110833 UNUSED_PARAMETER(yymajor); /* Silence some compiler warnings */
110834 assert( TOKEN.z[0] ); /* The tokenizer always gives us a token */
110835 sqlite3ErrorMsg(pParse, "near \"%T\": syntax error", &TOKEN);
110836 sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
110840 ** The following is executed when the parser accepts
110842 static void yy_accept(
110843 yyParser *yypParser /* The parser */
110845 sqlite3ParserARG_FETCH;
110846 #ifndef NDEBUG
110847 if( yyTraceFILE ){
110848 fprintf(yyTraceFILE,"%sAccept!\n",yyTracePrompt);
110850 #endif
110851 while( yypParser->yyidx>=0 ) yy_pop_parser_stack(yypParser);
110852 /* Here code is inserted which will be executed whenever the
110853 ** parser accepts */
110854 sqlite3ParserARG_STORE; /* Suppress warning about unused %extra_argument variable */
110857 /* The main parser program.
110858 ** The first argument is a pointer to a structure obtained from
110859 ** "sqlite3ParserAlloc" which describes the current state of the parser.
110860 ** The second argument is the major token number. The third is
110861 ** the minor token. The fourth optional argument is whatever the
110862 ** user wants (and specified in the grammar) and is available for
110863 ** use by the action routines.
110865 ** Inputs:
110866 ** <ul>
110867 ** <li> A pointer to the parser (an opaque structure.)
110868 ** <li> The major token number.
110869 ** <li> The minor token number.
110870 ** <li> An option argument of a grammar-specified type.
110871 ** </ul>
110873 ** Outputs:
110874 ** None.
110876 SQLITE_PRIVATE void sqlite3Parser(
110877 void *yyp, /* The parser */
110878 int yymajor, /* The major token code number */
110879 sqlite3ParserTOKENTYPE yyminor /* The value for the token */
110880 sqlite3ParserARG_PDECL /* Optional %extra_argument parameter */
110882 YYMINORTYPE yyminorunion;
110883 int yyact; /* The parser action. */
110884 #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
110885 int yyendofinput; /* True if we are at the end of input */
110886 #endif
110887 #ifdef YYERRORSYMBOL
110888 int yyerrorhit = 0; /* True if yymajor has invoked an error */
110889 #endif
110890 yyParser *yypParser; /* The parser */
110892 /* (re)initialize the parser, if necessary */
110893 yypParser = (yyParser*)yyp;
110894 if( yypParser->yyidx<0 ){
110895 #if YYSTACKDEPTH<=0
110896 if( yypParser->yystksz <=0 ){
110897 /*memset(&yyminorunion, 0, sizeof(yyminorunion));*/
110898 yyminorunion = yyzerominor;
110899 yyStackOverflow(yypParser, &yyminorunion);
110900 return;
110902 #endif
110903 yypParser->yyidx = 0;
110904 yypParser->yyerrcnt = -1;
110905 yypParser->yystack[0].stateno = 0;
110906 yypParser->yystack[0].major = 0;
110908 yyminorunion.yy0 = yyminor;
110909 #if !defined(YYERRORSYMBOL) && !defined(YYNOERRORRECOVERY)
110910 yyendofinput = (yymajor==0);
110911 #endif
110912 sqlite3ParserARG_STORE;
110914 #ifndef NDEBUG
110915 if( yyTraceFILE ){
110916 fprintf(yyTraceFILE,"%sInput %s\n",yyTracePrompt,yyTokenName[yymajor]);
110918 #endif
110921 yyact = yy_find_shift_action(yypParser,(YYCODETYPE)yymajor);
110922 if( yyact<YYNSTATE ){
110923 yy_shift(yypParser,yyact,yymajor,&yyminorunion);
110924 yypParser->yyerrcnt--;
110925 yymajor = YYNOCODE;
110926 }else if( yyact < YYNSTATE + YYNRULE ){
110927 yy_reduce(yypParser,yyact-YYNSTATE);
110928 }else{
110929 assert( yyact == YY_ERROR_ACTION );
110930 #ifdef YYERRORSYMBOL
110931 int yymx;
110932 #endif
110933 #ifndef NDEBUG
110934 if( yyTraceFILE ){
110935 fprintf(yyTraceFILE,"%sSyntax Error!\n",yyTracePrompt);
110937 #endif
110938 #ifdef YYERRORSYMBOL
110939 /* A syntax error has occurred.
110940 ** The response to an error depends upon whether or not the
110941 ** grammar defines an error token "ERROR".
110943 ** This is what we do if the grammar does define ERROR:
110945 ** * Call the %syntax_error function.
110947 ** * Begin popping the stack until we enter a state where
110948 ** it is legal to shift the error symbol, then shift
110949 ** the error symbol.
110951 ** * Set the error count to three.
110953 ** * Begin accepting and shifting new tokens. No new error
110954 ** processing will occur until three tokens have been
110955 ** shifted successfully.
110958 if( yypParser->yyerrcnt<0 ){
110959 yy_syntax_error(yypParser,yymajor,yyminorunion);
110961 yymx = yypParser->yystack[yypParser->yyidx].major;
110962 if( yymx==YYERRORSYMBOL || yyerrorhit ){
110963 #ifndef NDEBUG
110964 if( yyTraceFILE ){
110965 fprintf(yyTraceFILE,"%sDiscard input token %s\n",
110966 yyTracePrompt,yyTokenName[yymajor]);
110968 #endif
110969 yy_destructor(yypParser, (YYCODETYPE)yymajor,&yyminorunion);
110970 yymajor = YYNOCODE;
110971 }else{
110972 while(
110973 yypParser->yyidx >= 0 &&
110974 yymx != YYERRORSYMBOL &&
110975 (yyact = yy_find_reduce_action(
110976 yypParser->yystack[yypParser->yyidx].stateno,
110977 YYERRORSYMBOL)) >= YYNSTATE
110979 yy_pop_parser_stack(yypParser);
110981 if( yypParser->yyidx < 0 || yymajor==0 ){
110982 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
110983 yy_parse_failed(yypParser);
110984 yymajor = YYNOCODE;
110985 }else if( yymx!=YYERRORSYMBOL ){
110986 YYMINORTYPE u2;
110987 u2.YYERRSYMDT = 0;
110988 yy_shift(yypParser,yyact,YYERRORSYMBOL,&u2);
110991 yypParser->yyerrcnt = 3;
110992 yyerrorhit = 1;
110993 #elif defined(YYNOERRORRECOVERY)
110994 /* If the YYNOERRORRECOVERY macro is defined, then do not attempt to
110995 ** do any kind of error recovery. Instead, simply invoke the syntax
110996 ** error routine and continue going as if nothing had happened.
110998 ** Applications can set this macro (for example inside %include) if
110999 ** they intend to abandon the parse upon the first syntax error seen.
111001 yy_syntax_error(yypParser,yymajor,yyminorunion);
111002 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
111003 yymajor = YYNOCODE;
111005 #else /* YYERRORSYMBOL is not defined */
111006 /* This is what we do if the grammar does not define ERROR:
111008 ** * Report an error message, and throw away the input token.
111010 ** * If the input token is $, then fail the parse.
111012 ** As before, subsequent error messages are suppressed until
111013 ** three input tokens have been successfully shifted.
111015 if( yypParser->yyerrcnt<=0 ){
111016 yy_syntax_error(yypParser,yymajor,yyminorunion);
111018 yypParser->yyerrcnt = 3;
111019 yy_destructor(yypParser,(YYCODETYPE)yymajor,&yyminorunion);
111020 if( yyendofinput ){
111021 yy_parse_failed(yypParser);
111023 yymajor = YYNOCODE;
111024 #endif
111026 }while( yymajor!=YYNOCODE && yypParser->yyidx>=0 );
111027 return;
111030 /************** End of parse.c ***********************************************/
111031 /************** Begin file tokenize.c ****************************************/
111033 ** 2001 September 15
111035 ** The author disclaims copyright to this source code. In place of
111036 ** a legal notice, here is a blessing:
111038 ** May you do good and not evil.
111039 ** May you find forgiveness for yourself and forgive others.
111040 ** May you share freely, never taking more than you give.
111042 *************************************************************************
111043 ** An tokenizer for SQL
111045 ** This file contains C code that splits an SQL input string up into
111046 ** individual tokens and sends those tokens one-by-one over to the
111047 ** parser for analysis.
111049 /* #include <stdlib.h> */
111052 ** The charMap() macro maps alphabetic characters into their
111053 ** lower-case ASCII equivalent. On ASCII machines, this is just
111054 ** an upper-to-lower case map. On EBCDIC machines we also need
111055 ** to adjust the encoding. Only alphabetic characters and underscores
111056 ** need to be translated.
111058 #ifdef SQLITE_ASCII
111059 # define charMap(X) sqlite3UpperToLower[(unsigned char)X]
111060 #endif
111061 #ifdef SQLITE_EBCDIC
111062 # define charMap(X) ebcdicToAscii[(unsigned char)X]
111063 const unsigned char ebcdicToAscii[] = {
111064 /* 0 1 2 3 4 5 6 7 8 9 A B C D E F */
111065 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
111066 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
111067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
111068 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 3x */
111069 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 4x */
111070 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 5x */
111071 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 95, 0, 0, /* 6x */
111072 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 7x */
111073 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* 8x */
111074 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* 9x */
111075 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ax */
111076 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */
111077 0, 97, 98, 99,100,101,102,103,104,105, 0, 0, 0, 0, 0, 0, /* Cx */
111078 0,106,107,108,109,110,111,112,113,114, 0, 0, 0, 0, 0, 0, /* Dx */
111079 0, 0,115,116,117,118,119,120,121,122, 0, 0, 0, 0, 0, 0, /* Ex */
111080 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Fx */
111082 #endif
111085 ** The sqlite3KeywordCode function looks up an identifier to determine if
111086 ** it is a keyword. If it is a keyword, the token code of that keyword is
111087 ** returned. If the input is not a keyword, TK_ID is returned.
111089 ** The implementation of this routine was generated by a program,
111090 ** mkkeywordhash.h, located in the tool subdirectory of the distribution.
111091 ** The output of the mkkeywordhash.c program is written into a file
111092 ** named keywordhash.h and then included into this source file by
111093 ** the #include below.
111095 /************** Include keywordhash.h in the middle of tokenize.c ************/
111096 /************** Begin file keywordhash.h *************************************/
111097 /***** This file contains automatically generated code ******
111099 ** The code in this file has been automatically generated by
111101 ** sqlite/tool/mkkeywordhash.c
111103 ** The code in this file implements a function that determines whether
111104 ** or not a given identifier is really an SQL keyword. The same thing
111105 ** might be implemented more directly using a hand-written hash table.
111106 ** But by using this automatically generated code, the size of the code
111107 ** is substantially reduced. This is important for embedded applications
111108 ** on platforms with limited memory.
111110 /* Hash score: 175 */
111111 static int keywordCode(const char *z, int n){
111112 /* zText[] encodes 811 bytes of keywords in 541 bytes */
111113 /* REINDEXEDESCAPEACHECKEYBEFOREIGNOREGEXPLAINSTEADDATABASELECT */
111114 /* ABLEFTHENDEFERRABLELSEXCEPTRANSACTIONATURALTERAISEXCLUSIVE */
111115 /* XISTSAVEPOINTERSECTRIGGEREFERENCESCONSTRAINTOFFSETEMPORARY */
111116 /* UNIQUERYATTACHAVINGROUPDATEBEGINNERELEASEBETWEENOTNULLIKE */
111117 /* CASCADELETECASECOLLATECREATECURRENT_DATEDETACHIMMEDIATEJOIN */
111118 /* SERTMATCHPLANALYZEPRAGMABORTVALUESVIRTUALIMITWHENWHERENAME */
111119 /* AFTEREPLACEANDEFAULTAUTOINCREMENTCASTCOLUMNCOMMITCONFLICTCROSS */
111120 /* CURRENT_TIMESTAMPRIMARYDEFERREDISTINCTDROPFAILFROMFULLGLOBYIF */
111121 /* ISNULLORDERESTRICTOUTERIGHTROLLBACKROWUNIONUSINGVACUUMVIEW */
111122 /* INITIALLY */
111123 static const char zText[540] = {
111124 'R','E','I','N','D','E','X','E','D','E','S','C','A','P','E','A','C','H',
111125 'E','C','K','E','Y','B','E','F','O','R','E','I','G','N','O','R','E','G',
111126 'E','X','P','L','A','I','N','S','T','E','A','D','D','A','T','A','B','A',
111127 'S','E','L','E','C','T','A','B','L','E','F','T','H','E','N','D','E','F',
111128 'E','R','R','A','B','L','E','L','S','E','X','C','E','P','T','R','A','N',
111129 'S','A','C','T','I','O','N','A','T','U','R','A','L','T','E','R','A','I',
111130 'S','E','X','C','L','U','S','I','V','E','X','I','S','T','S','A','V','E',
111131 'P','O','I','N','T','E','R','S','E','C','T','R','I','G','G','E','R','E',
111132 'F','E','R','E','N','C','E','S','C','O','N','S','T','R','A','I','N','T',
111133 'O','F','F','S','E','T','E','M','P','O','R','A','R','Y','U','N','I','Q',
111134 'U','E','R','Y','A','T','T','A','C','H','A','V','I','N','G','R','O','U',
111135 'P','D','A','T','E','B','E','G','I','N','N','E','R','E','L','E','A','S',
111136 'E','B','E','T','W','E','E','N','O','T','N','U','L','L','I','K','E','C',
111137 'A','S','C','A','D','E','L','E','T','E','C','A','S','E','C','O','L','L',
111138 'A','T','E','C','R','E','A','T','E','C','U','R','R','E','N','T','_','D',
111139 'A','T','E','D','E','T','A','C','H','I','M','M','E','D','I','A','T','E',
111140 'J','O','I','N','S','E','R','T','M','A','T','C','H','P','L','A','N','A',
111141 'L','Y','Z','E','P','R','A','G','M','A','B','O','R','T','V','A','L','U',
111142 'E','S','V','I','R','T','U','A','L','I','M','I','T','W','H','E','N','W',
111143 'H','E','R','E','N','A','M','E','A','F','T','E','R','E','P','L','A','C',
111144 'E','A','N','D','E','F','A','U','L','T','A','U','T','O','I','N','C','R',
111145 'E','M','E','N','T','C','A','S','T','C','O','L','U','M','N','C','O','M',
111146 'M','I','T','C','O','N','F','L','I','C','T','C','R','O','S','S','C','U',
111147 'R','R','E','N','T','_','T','I','M','E','S','T','A','M','P','R','I','M',
111148 'A','R','Y','D','E','F','E','R','R','E','D','I','S','T','I','N','C','T',
111149 'D','R','O','P','F','A','I','L','F','R','O','M','F','U','L','L','G','L',
111150 'O','B','Y','I','F','I','S','N','U','L','L','O','R','D','E','R','E','S',
111151 'T','R','I','C','T','O','U','T','E','R','I','G','H','T','R','O','L','L',
111152 'B','A','C','K','R','O','W','U','N','I','O','N','U','S','I','N','G','V',
111153 'A','C','U','U','M','V','I','E','W','I','N','I','T','I','A','L','L','Y',
111155 static const unsigned char aHash[127] = {
111156 72, 101, 114, 70, 0, 45, 0, 0, 78, 0, 73, 0, 0,
111157 42, 12, 74, 15, 0, 113, 81, 50, 108, 0, 19, 0, 0,
111158 118, 0, 116, 111, 0, 22, 89, 0, 9, 0, 0, 66, 67,
111159 0, 65, 6, 0, 48, 86, 98, 0, 115, 97, 0, 0, 44,
111160 0, 99, 24, 0, 17, 0, 119, 49, 23, 0, 5, 106, 25,
111161 92, 0, 0, 121, 102, 56, 120, 53, 28, 51, 0, 87, 0,
111162 96, 26, 0, 95, 0, 0, 0, 91, 88, 93, 84, 105, 14,
111163 39, 104, 0, 77, 0, 18, 85, 107, 32, 0, 117, 76, 109,
111164 58, 46, 80, 0, 0, 90, 40, 0, 112, 0, 36, 0, 0,
111165 29, 0, 82, 59, 60, 0, 20, 57, 0, 52,
111167 static const unsigned char aNext[121] = {
111168 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0,
111169 0, 2, 0, 0, 0, 0, 0, 0, 13, 0, 0, 0, 0,
111170 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
111171 0, 0, 0, 0, 33, 0, 21, 0, 0, 0, 43, 3, 47,
111172 0, 0, 0, 0, 30, 0, 54, 0, 38, 0, 0, 0, 1,
111173 62, 0, 0, 63, 0, 41, 0, 0, 0, 0, 0, 0, 0,
111174 61, 0, 0, 0, 0, 31, 55, 16, 34, 10, 0, 0, 0,
111175 0, 0, 0, 0, 11, 68, 75, 0, 8, 0, 100, 94, 0,
111176 103, 0, 83, 0, 71, 0, 0, 110, 27, 37, 69, 79, 0,
111177 35, 64, 0, 0,
111179 static const unsigned char aLen[121] = {
111180 7, 7, 5, 4, 6, 4, 5, 3, 6, 7, 3, 6, 6,
111181 7, 7, 3, 8, 2, 6, 5, 4, 4, 3, 10, 4, 6,
111182 11, 6, 2, 7, 5, 5, 9, 6, 9, 9, 7, 10, 10,
111183 4, 6, 2, 3, 9, 4, 2, 6, 5, 6, 6, 5, 6,
111184 5, 5, 7, 7, 7, 3, 2, 4, 4, 7, 3, 6, 4,
111185 7, 6, 12, 6, 9, 4, 6, 5, 4, 7, 6, 5, 6,
111186 7, 5, 4, 5, 6, 5, 7, 3, 7, 13, 2, 2, 4,
111187 6, 6, 8, 5, 17, 12, 7, 8, 8, 2, 4, 4, 4,
111188 4, 4, 2, 2, 6, 5, 8, 5, 5, 8, 3, 5, 5,
111189 6, 4, 9, 3,
111191 static const unsigned short int aOffset[121] = {
111192 0, 2, 2, 8, 9, 14, 16, 20, 23, 25, 25, 29, 33,
111193 36, 41, 46, 48, 53, 54, 59, 62, 65, 67, 69, 78, 81,
111194 86, 91, 95, 96, 101, 105, 109, 117, 122, 128, 136, 142, 152,
111195 159, 162, 162, 165, 167, 167, 171, 176, 179, 184, 189, 194, 197,
111196 203, 206, 210, 217, 223, 223, 223, 226, 229, 233, 234, 238, 244,
111197 248, 255, 261, 273, 279, 288, 290, 296, 301, 303, 310, 315, 320,
111198 326, 332, 337, 341, 344, 350, 354, 361, 363, 370, 372, 374, 383,
111199 387, 393, 399, 407, 412, 412, 428, 435, 442, 443, 450, 454, 458,
111200 462, 466, 469, 471, 473, 479, 483, 491, 495, 500, 508, 511, 516,
111201 521, 527, 531, 536,
111203 static const unsigned char aCode[121] = {
111204 TK_REINDEX, TK_INDEXED, TK_INDEX, TK_DESC, TK_ESCAPE,
111205 TK_EACH, TK_CHECK, TK_KEY, TK_BEFORE, TK_FOREIGN,
111206 TK_FOR, TK_IGNORE, TK_LIKE_KW, TK_EXPLAIN, TK_INSTEAD,
111207 TK_ADD, TK_DATABASE, TK_AS, TK_SELECT, TK_TABLE,
111208 TK_JOIN_KW, TK_THEN, TK_END, TK_DEFERRABLE, TK_ELSE,
111209 TK_EXCEPT, TK_TRANSACTION,TK_ACTION, TK_ON, TK_JOIN_KW,
111210 TK_ALTER, TK_RAISE, TK_EXCLUSIVE, TK_EXISTS, TK_SAVEPOINT,
111211 TK_INTERSECT, TK_TRIGGER, TK_REFERENCES, TK_CONSTRAINT, TK_INTO,
111212 TK_OFFSET, TK_OF, TK_SET, TK_TEMP, TK_TEMP,
111213 TK_OR, TK_UNIQUE, TK_QUERY, TK_ATTACH, TK_HAVING,
111214 TK_GROUP, TK_UPDATE, TK_BEGIN, TK_JOIN_KW, TK_RELEASE,
111215 TK_BETWEEN, TK_NOTNULL, TK_NOT, TK_NO, TK_NULL,
111216 TK_LIKE_KW, TK_CASCADE, TK_ASC, TK_DELETE, TK_CASE,
111217 TK_COLLATE, TK_CREATE, TK_CTIME_KW, TK_DETACH, TK_IMMEDIATE,
111218 TK_JOIN, TK_INSERT, TK_MATCH, TK_PLAN, TK_ANALYZE,
111219 TK_PRAGMA, TK_ABORT, TK_VALUES, TK_VIRTUAL, TK_LIMIT,
111220 TK_WHEN, TK_WHERE, TK_RENAME, TK_AFTER, TK_REPLACE,
111221 TK_AND, TK_DEFAULT, TK_AUTOINCR, TK_TO, TK_IN,
111222 TK_CAST, TK_COLUMNKW, TK_COMMIT, TK_CONFLICT, TK_JOIN_KW,
111223 TK_CTIME_KW, TK_CTIME_KW, TK_PRIMARY, TK_DEFERRED, TK_DISTINCT,
111224 TK_IS, TK_DROP, TK_FAIL, TK_FROM, TK_JOIN_KW,
111225 TK_LIKE_KW, TK_BY, TK_IF, TK_ISNULL, TK_ORDER,
111226 TK_RESTRICT, TK_JOIN_KW, TK_JOIN_KW, TK_ROLLBACK, TK_ROW,
111227 TK_UNION, TK_USING, TK_VACUUM, TK_VIEW, TK_INITIALLY,
111228 TK_ALL,
111230 int h, i;
111231 if( n<2 ) return TK_ID;
111232 h = ((charMap(z[0])*4) ^
111233 (charMap(z[n-1])*3) ^
111234 n) % 127;
111235 for(i=((int)aHash[h])-1; i>=0; i=((int)aNext[i])-1){
111236 if( aLen[i]==n && sqlite3StrNICmp(&zText[aOffset[i]],z,n)==0 ){
111237 testcase( i==0 ); /* REINDEX */
111238 testcase( i==1 ); /* INDEXED */
111239 testcase( i==2 ); /* INDEX */
111240 testcase( i==3 ); /* DESC */
111241 testcase( i==4 ); /* ESCAPE */
111242 testcase( i==5 ); /* EACH */
111243 testcase( i==6 ); /* CHECK */
111244 testcase( i==7 ); /* KEY */
111245 testcase( i==8 ); /* BEFORE */
111246 testcase( i==9 ); /* FOREIGN */
111247 testcase( i==10 ); /* FOR */
111248 testcase( i==11 ); /* IGNORE */
111249 testcase( i==12 ); /* REGEXP */
111250 testcase( i==13 ); /* EXPLAIN */
111251 testcase( i==14 ); /* INSTEAD */
111252 testcase( i==15 ); /* ADD */
111253 testcase( i==16 ); /* DATABASE */
111254 testcase( i==17 ); /* AS */
111255 testcase( i==18 ); /* SELECT */
111256 testcase( i==19 ); /* TABLE */
111257 testcase( i==20 ); /* LEFT */
111258 testcase( i==21 ); /* THEN */
111259 testcase( i==22 ); /* END */
111260 testcase( i==23 ); /* DEFERRABLE */
111261 testcase( i==24 ); /* ELSE */
111262 testcase( i==25 ); /* EXCEPT */
111263 testcase( i==26 ); /* TRANSACTION */
111264 testcase( i==27 ); /* ACTION */
111265 testcase( i==28 ); /* ON */
111266 testcase( i==29 ); /* NATURAL */
111267 testcase( i==30 ); /* ALTER */
111268 testcase( i==31 ); /* RAISE */
111269 testcase( i==32 ); /* EXCLUSIVE */
111270 testcase( i==33 ); /* EXISTS */
111271 testcase( i==34 ); /* SAVEPOINT */
111272 testcase( i==35 ); /* INTERSECT */
111273 testcase( i==36 ); /* TRIGGER */
111274 testcase( i==37 ); /* REFERENCES */
111275 testcase( i==38 ); /* CONSTRAINT */
111276 testcase( i==39 ); /* INTO */
111277 testcase( i==40 ); /* OFFSET */
111278 testcase( i==41 ); /* OF */
111279 testcase( i==42 ); /* SET */
111280 testcase( i==43 ); /* TEMPORARY */
111281 testcase( i==44 ); /* TEMP */
111282 testcase( i==45 ); /* OR */
111283 testcase( i==46 ); /* UNIQUE */
111284 testcase( i==47 ); /* QUERY */
111285 testcase( i==48 ); /* ATTACH */
111286 testcase( i==49 ); /* HAVING */
111287 testcase( i==50 ); /* GROUP */
111288 testcase( i==51 ); /* UPDATE */
111289 testcase( i==52 ); /* BEGIN */
111290 testcase( i==53 ); /* INNER */
111291 testcase( i==54 ); /* RELEASE */
111292 testcase( i==55 ); /* BETWEEN */
111293 testcase( i==56 ); /* NOTNULL */
111294 testcase( i==57 ); /* NOT */
111295 testcase( i==58 ); /* NO */
111296 testcase( i==59 ); /* NULL */
111297 testcase( i==60 ); /* LIKE */
111298 testcase( i==61 ); /* CASCADE */
111299 testcase( i==62 ); /* ASC */
111300 testcase( i==63 ); /* DELETE */
111301 testcase( i==64 ); /* CASE */
111302 testcase( i==65 ); /* COLLATE */
111303 testcase( i==66 ); /* CREATE */
111304 testcase( i==67 ); /* CURRENT_DATE */
111305 testcase( i==68 ); /* DETACH */
111306 testcase( i==69 ); /* IMMEDIATE */
111307 testcase( i==70 ); /* JOIN */
111308 testcase( i==71 ); /* INSERT */
111309 testcase( i==72 ); /* MATCH */
111310 testcase( i==73 ); /* PLAN */
111311 testcase( i==74 ); /* ANALYZE */
111312 testcase( i==75 ); /* PRAGMA */
111313 testcase( i==76 ); /* ABORT */
111314 testcase( i==77 ); /* VALUES */
111315 testcase( i==78 ); /* VIRTUAL */
111316 testcase( i==79 ); /* LIMIT */
111317 testcase( i==80 ); /* WHEN */
111318 testcase( i==81 ); /* WHERE */
111319 testcase( i==82 ); /* RENAME */
111320 testcase( i==83 ); /* AFTER */
111321 testcase( i==84 ); /* REPLACE */
111322 testcase( i==85 ); /* AND */
111323 testcase( i==86 ); /* DEFAULT */
111324 testcase( i==87 ); /* AUTOINCREMENT */
111325 testcase( i==88 ); /* TO */
111326 testcase( i==89 ); /* IN */
111327 testcase( i==90 ); /* CAST */
111328 testcase( i==91 ); /* COLUMN */
111329 testcase( i==92 ); /* COMMIT */
111330 testcase( i==93 ); /* CONFLICT */
111331 testcase( i==94 ); /* CROSS */
111332 testcase( i==95 ); /* CURRENT_TIMESTAMP */
111333 testcase( i==96 ); /* CURRENT_TIME */
111334 testcase( i==97 ); /* PRIMARY */
111335 testcase( i==98 ); /* DEFERRED */
111336 testcase( i==99 ); /* DISTINCT */
111337 testcase( i==100 ); /* IS */
111338 testcase( i==101 ); /* DROP */
111339 testcase( i==102 ); /* FAIL */
111340 testcase( i==103 ); /* FROM */
111341 testcase( i==104 ); /* FULL */
111342 testcase( i==105 ); /* GLOB */
111343 testcase( i==106 ); /* BY */
111344 testcase( i==107 ); /* IF */
111345 testcase( i==108 ); /* ISNULL */
111346 testcase( i==109 ); /* ORDER */
111347 testcase( i==110 ); /* RESTRICT */
111348 testcase( i==111 ); /* OUTER */
111349 testcase( i==112 ); /* RIGHT */
111350 testcase( i==113 ); /* ROLLBACK */
111351 testcase( i==114 ); /* ROW */
111352 testcase( i==115 ); /* UNION */
111353 testcase( i==116 ); /* USING */
111354 testcase( i==117 ); /* VACUUM */
111355 testcase( i==118 ); /* VIEW */
111356 testcase( i==119 ); /* INITIALLY */
111357 testcase( i==120 ); /* ALL */
111358 return aCode[i];
111361 return TK_ID;
111363 SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){
111364 return keywordCode((char*)z, n);
111366 #define SQLITE_N_KEYWORD 121
111368 /************** End of keywordhash.h *****************************************/
111369 /************** Continuing where we left off in tokenize.c *******************/
111373 ** If X is a character that can be used in an identifier then
111374 ** IdChar(X) will be true. Otherwise it is false.
111376 ** For ASCII, any character with the high-order bit set is
111377 ** allowed in an identifier. For 7-bit characters,
111378 ** sqlite3IsIdChar[X] must be 1.
111380 ** For EBCDIC, the rules are more complex but have the same
111381 ** end result.
111383 ** Ticket #1066. the SQL standard does not allow '$' in the
111384 ** middle of identfiers. But many SQL implementations do.
111385 ** SQLite will allow '$' in identifiers for compatibility.
111386 ** But the feature is undocumented.
111388 #ifdef SQLITE_ASCII
111389 #define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
111390 #endif
111391 #ifdef SQLITE_EBCDIC
111392 SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = {
111393 /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
111394 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 4x */
111395 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0, /* 5x */
111396 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 1, 0, 0, /* 6x */
111397 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, /* 7x */
111398 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, /* 8x */
111399 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 0, 1, 0, /* 9x */
111400 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, /* Ax */
111401 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* Bx */
111402 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Cx */
111403 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Dx */
111404 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, /* Ex */
111405 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, /* Fx */
111407 #define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
111408 #endif
111412 ** Return the length of the token that begins at z[0].
111413 ** Store the token type in *tokenType before returning.
111415 SQLITE_PRIVATE int sqlite3GetToken(const unsigned char *z, int *tokenType){
111416 int i, c;
111417 switch( *z ){
111418 case ' ': case '\t': case '\n': case '\f': case '\r': {
111419 testcase( z[0]==' ' );
111420 testcase( z[0]=='\t' );
111421 testcase( z[0]=='\n' );
111422 testcase( z[0]=='\f' );
111423 testcase( z[0]=='\r' );
111424 for(i=1; sqlite3Isspace(z[i]); i++){}
111425 *tokenType = TK_SPACE;
111426 return i;
111428 case '-': {
111429 if( z[1]=='-' ){
111430 /* IMP: R-50417-27976 -- syntax diagram for comments */
111431 for(i=2; (c=z[i])!=0 && c!='\n'; i++){}
111432 *tokenType = TK_SPACE; /* IMP: R-22934-25134 */
111433 return i;
111435 *tokenType = TK_MINUS;
111436 return 1;
111438 case '(': {
111439 *tokenType = TK_LP;
111440 return 1;
111442 case ')': {
111443 *tokenType = TK_RP;
111444 return 1;
111446 case ';': {
111447 *tokenType = TK_SEMI;
111448 return 1;
111450 case '+': {
111451 *tokenType = TK_PLUS;
111452 return 1;
111454 case '*': {
111455 *tokenType = TK_STAR;
111456 return 1;
111458 case '/': {
111459 if( z[1]!='*' || z[2]==0 ){
111460 *tokenType = TK_SLASH;
111461 return 1;
111463 /* IMP: R-50417-27976 -- syntax diagram for comments */
111464 for(i=3, c=z[2]; (c!='*' || z[i]!='/') && (c=z[i])!=0; i++){}
111465 if( c ) i++;
111466 *tokenType = TK_SPACE; /* IMP: R-22934-25134 */
111467 return i;
111469 case '%': {
111470 *tokenType = TK_REM;
111471 return 1;
111473 case '=': {
111474 *tokenType = TK_EQ;
111475 return 1 + (z[1]=='=');
111477 case '<': {
111478 if( (c=z[1])=='=' ){
111479 *tokenType = TK_LE;
111480 return 2;
111481 }else if( c=='>' ){
111482 *tokenType = TK_NE;
111483 return 2;
111484 }else if( c=='<' ){
111485 *tokenType = TK_LSHIFT;
111486 return 2;
111487 }else{
111488 *tokenType = TK_LT;
111489 return 1;
111492 case '>': {
111493 if( (c=z[1])=='=' ){
111494 *tokenType = TK_GE;
111495 return 2;
111496 }else if( c=='>' ){
111497 *tokenType = TK_RSHIFT;
111498 return 2;
111499 }else{
111500 *tokenType = TK_GT;
111501 return 1;
111504 case '!': {
111505 if( z[1]!='=' ){
111506 *tokenType = TK_ILLEGAL;
111507 return 2;
111508 }else{
111509 *tokenType = TK_NE;
111510 return 2;
111513 case '|': {
111514 if( z[1]!='|' ){
111515 *tokenType = TK_BITOR;
111516 return 1;
111517 }else{
111518 *tokenType = TK_CONCAT;
111519 return 2;
111522 case ',': {
111523 *tokenType = TK_COMMA;
111524 return 1;
111526 case '&': {
111527 *tokenType = TK_BITAND;
111528 return 1;
111530 case '~': {
111531 *tokenType = TK_BITNOT;
111532 return 1;
111534 case '`':
111535 case '\'':
111536 case '"': {
111537 int delim = z[0];
111538 testcase( delim=='`' );
111539 testcase( delim=='\'' );
111540 testcase( delim=='"' );
111541 for(i=1; (c=z[i])!=0; i++){
111542 if( c==delim ){
111543 if( z[i+1]==delim ){
111545 }else{
111546 break;
111550 if( c=='\'' ){
111551 *tokenType = TK_STRING;
111552 return i+1;
111553 }else if( c!=0 ){
111554 *tokenType = TK_ID;
111555 return i+1;
111556 }else{
111557 *tokenType = TK_ILLEGAL;
111558 return i;
111561 case '.': {
111562 #ifndef SQLITE_OMIT_FLOATING_POINT
111563 if( !sqlite3Isdigit(z[1]) )
111564 #endif
111566 *tokenType = TK_DOT;
111567 return 1;
111569 /* If the next character is a digit, this is a floating point
111570 ** number that begins with ".". Fall thru into the next case */
111572 case '0': case '1': case '2': case '3': case '4':
111573 case '5': case '6': case '7': case '8': case '9': {
111574 testcase( z[0]=='0' ); testcase( z[0]=='1' ); testcase( z[0]=='2' );
111575 testcase( z[0]=='3' ); testcase( z[0]=='4' ); testcase( z[0]=='5' );
111576 testcase( z[0]=='6' ); testcase( z[0]=='7' ); testcase( z[0]=='8' );
111577 testcase( z[0]=='9' );
111578 *tokenType = TK_INTEGER;
111579 for(i=0; sqlite3Isdigit(z[i]); i++){}
111580 #ifndef SQLITE_OMIT_FLOATING_POINT
111581 if( z[i]=='.' ){
111583 while( sqlite3Isdigit(z[i]) ){ i++; }
111584 *tokenType = TK_FLOAT;
111586 if( (z[i]=='e' || z[i]=='E') &&
111587 ( sqlite3Isdigit(z[i+1])
111588 || ((z[i+1]=='+' || z[i+1]=='-') && sqlite3Isdigit(z[i+2]))
111591 i += 2;
111592 while( sqlite3Isdigit(z[i]) ){ i++; }
111593 *tokenType = TK_FLOAT;
111595 #endif
111596 while( IdChar(z[i]) ){
111597 *tokenType = TK_ILLEGAL;
111600 return i;
111602 case '[': {
111603 for(i=1, c=z[0]; c!=']' && (c=z[i])!=0; i++){}
111604 *tokenType = c==']' ? TK_ID : TK_ILLEGAL;
111605 return i;
111607 case '?': {
111608 *tokenType = TK_VARIABLE;
111609 for(i=1; sqlite3Isdigit(z[i]); i++){}
111610 return i;
111612 case '#': {
111613 for(i=1; sqlite3Isdigit(z[i]); i++){}
111614 if( i>1 ){
111615 /* Parameters of the form #NNN (where NNN is a number) are used
111616 ** internally by sqlite3NestedParse. */
111617 *tokenType = TK_REGISTER;
111618 return i;
111620 /* Fall through into the next case if the '#' is not followed by
111621 ** a digit. Try to match #AAAA where AAAA is a parameter name. */
111623 #ifndef SQLITE_OMIT_TCL_VARIABLE
111624 case '$':
111625 #endif
111626 case '@': /* For compatibility with MS SQL Server */
111627 case ':': {
111628 int n = 0;
111629 testcase( z[0]=='$' ); testcase( z[0]=='@' ); testcase( z[0]==':' );
111630 *tokenType = TK_VARIABLE;
111631 for(i=1; (c=z[i])!=0; i++){
111632 if( IdChar(c) ){
111634 #ifndef SQLITE_OMIT_TCL_VARIABLE
111635 }else if( c=='(' && n>0 ){
111638 }while( (c=z[i])!=0 && !sqlite3Isspace(c) && c!=')' );
111639 if( c==')' ){
111641 }else{
111642 *tokenType = TK_ILLEGAL;
111644 break;
111645 }else if( c==':' && z[i+1]==':' ){
111647 #endif
111648 }else{
111649 break;
111652 if( n==0 ) *tokenType = TK_ILLEGAL;
111653 return i;
111655 #ifndef SQLITE_OMIT_BLOB_LITERAL
111656 case 'x': case 'X': {
111657 testcase( z[0]=='x' ); testcase( z[0]=='X' );
111658 if( z[1]=='\'' ){
111659 *tokenType = TK_BLOB;
111660 for(i=2; sqlite3Isxdigit(z[i]); i++){}
111661 if( z[i]!='\'' || i%2 ){
111662 *tokenType = TK_ILLEGAL;
111663 while( z[i] && z[i]!='\'' ){ i++; }
111665 if( z[i] ) i++;
111666 return i;
111668 /* Otherwise fall through to the next case */
111670 #endif
111671 default: {
111672 if( !IdChar(*z) ){
111673 break;
111675 for(i=1; IdChar(z[i]); i++){}
111676 *tokenType = keywordCode((char*)z, i);
111677 return i;
111680 *tokenType = TK_ILLEGAL;
111681 return 1;
111685 ** Run the parser on the given SQL string. The parser structure is
111686 ** passed in. An SQLITE_ status code is returned. If an error occurs
111687 ** then an and attempt is made to write an error message into
111688 ** memory obtained from sqlite3_malloc() and to make *pzErrMsg point to that
111689 ** error message.
111691 SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzErrMsg){
111692 int nErr = 0; /* Number of errors encountered */
111693 int i; /* Loop counter */
111694 void *pEngine; /* The LEMON-generated LALR(1) parser */
111695 int tokenType; /* type of the next token */
111696 int lastTokenParsed = -1; /* type of the previous token */
111697 u8 enableLookaside; /* Saved value of db->lookaside.bEnabled */
111698 sqlite3 *db = pParse->db; /* The database connection */
111699 int mxSqlLen; /* Max length of an SQL string */
111702 mxSqlLen = db->aLimit[SQLITE_LIMIT_SQL_LENGTH];
111703 if( db->activeVdbeCnt==0 ){
111704 db->u1.isInterrupted = 0;
111706 pParse->rc = SQLITE_OK;
111707 pParse->zTail = zSql;
111708 i = 0;
111709 assert( pzErrMsg!=0 );
111710 pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc);
111711 if( pEngine==0 ){
111712 db->mallocFailed = 1;
111713 return SQLITE_NOMEM;
111715 assert( pParse->pNewTable==0 );
111716 assert( pParse->pNewTrigger==0 );
111717 assert( pParse->nVar==0 );
111718 assert( pParse->nzVar==0 );
111719 assert( pParse->azVar==0 );
111720 enableLookaside = db->lookaside.bEnabled;
111721 if( db->lookaside.pStart ) db->lookaside.bEnabled = 1;
111722 while( !db->mallocFailed && zSql[i]!=0 ){
111723 assert( i>=0 );
111724 pParse->sLastToken.z = &zSql[i];
111725 pParse->sLastToken.n = sqlite3GetToken((unsigned char*)&zSql[i],&tokenType);
111726 i += pParse->sLastToken.n;
111727 if( i>mxSqlLen ){
111728 pParse->rc = SQLITE_TOOBIG;
111729 break;
111731 switch( tokenType ){
111732 case TK_SPACE: {
111733 if( db->u1.isInterrupted ){
111734 sqlite3ErrorMsg(pParse, "interrupt");
111735 pParse->rc = SQLITE_INTERRUPT;
111736 goto abort_parse;
111738 break;
111740 case TK_ILLEGAL: {
111741 sqlite3DbFree(db, *pzErrMsg);
111742 *pzErrMsg = sqlite3MPrintf(db, "unrecognized token: \"%T\"",
111743 &pParse->sLastToken);
111744 nErr++;
111745 goto abort_parse;
111747 case TK_SEMI: {
111748 pParse->zTail = &zSql[i];
111749 /* Fall thru into the default case */
111751 default: {
111752 sqlite3Parser(pEngine, tokenType, pParse->sLastToken, pParse);
111753 lastTokenParsed = tokenType;
111754 if( pParse->rc!=SQLITE_OK ){
111755 goto abort_parse;
111757 break;
111761 abort_parse:
111762 if( zSql[i]==0 && nErr==0 && pParse->rc==SQLITE_OK ){
111763 if( lastTokenParsed!=TK_SEMI ){
111764 sqlite3Parser(pEngine, TK_SEMI, pParse->sLastToken, pParse);
111765 pParse->zTail = &zSql[i];
111767 sqlite3Parser(pEngine, 0, pParse->sLastToken, pParse);
111769 #ifdef YYTRACKMAXSTACKDEPTH
111770 sqlite3StatusSet(SQLITE_STATUS_PARSER_STACK,
111771 sqlite3ParserStackPeak(pEngine)
111773 #endif /* YYDEBUG */
111774 sqlite3ParserFree(pEngine, sqlite3_free);
111775 db->lookaside.bEnabled = enableLookaside;
111776 if( db->mallocFailed ){
111777 pParse->rc = SQLITE_NOMEM;
111779 if( pParse->rc!=SQLITE_OK && pParse->rc!=SQLITE_DONE && pParse->zErrMsg==0 ){
111780 sqlite3SetString(&pParse->zErrMsg, db, "%s", sqlite3ErrStr(pParse->rc));
111782 assert( pzErrMsg!=0 );
111783 if( pParse->zErrMsg ){
111784 *pzErrMsg = pParse->zErrMsg;
111785 sqlite3_log(pParse->rc, "%s", *pzErrMsg);
111786 pParse->zErrMsg = 0;
111787 nErr++;
111789 if( pParse->pVdbe && pParse->nErr>0 && pParse->nested==0 ){
111790 sqlite3VdbeDelete(pParse->pVdbe);
111791 pParse->pVdbe = 0;
111793 #ifndef SQLITE_OMIT_SHARED_CACHE
111794 if( pParse->nested==0 ){
111795 sqlite3DbFree(db, pParse->aTableLock);
111796 pParse->aTableLock = 0;
111797 pParse->nTableLock = 0;
111799 #endif
111800 #ifndef SQLITE_OMIT_VIRTUALTABLE
111801 sqlite3_free(pParse->apVtabLock);
111802 #endif
111804 if( !IN_DECLARE_VTAB ){
111805 /* If the pParse->declareVtab flag is set, do not delete any table
111806 ** structure built up in pParse->pNewTable. The calling code (see vtab.c)
111807 ** will take responsibility for freeing the Table structure.
111809 sqlite3DeleteTable(db, pParse->pNewTable);
111812 sqlite3DeleteTrigger(db, pParse->pNewTrigger);
111813 for(i=pParse->nzVar-1; i>=0; i--) sqlite3DbFree(db, pParse->azVar[i]);
111814 sqlite3DbFree(db, pParse->azVar);
111815 sqlite3DbFree(db, pParse->aAlias);
111816 while( pParse->pAinc ){
111817 AutoincInfo *p = pParse->pAinc;
111818 pParse->pAinc = p->pNext;
111819 sqlite3DbFree(db, p);
111821 while( pParse->pZombieTab ){
111822 Table *p = pParse->pZombieTab;
111823 pParse->pZombieTab = p->pNextZombie;
111824 sqlite3DeleteTable(db, p);
111826 if( nErr>0 && pParse->rc==SQLITE_OK ){
111827 pParse->rc = SQLITE_ERROR;
111829 return nErr;
111832 /************** End of tokenize.c ********************************************/
111833 /************** Begin file complete.c ****************************************/
111835 ** 2001 September 15
111837 ** The author disclaims copyright to this source code. In place of
111838 ** a legal notice, here is a blessing:
111840 ** May you do good and not evil.
111841 ** May you find forgiveness for yourself and forgive others.
111842 ** May you share freely, never taking more than you give.
111844 *************************************************************************
111845 ** An tokenizer for SQL
111847 ** This file contains C code that implements the sqlite3_complete() API.
111848 ** This code used to be part of the tokenizer.c source file. But by
111849 ** separating it out, the code will be automatically omitted from
111850 ** static links that do not use it.
111852 #ifndef SQLITE_OMIT_COMPLETE
111855 ** This is defined in tokenize.c. We just have to import the definition.
111857 #ifndef SQLITE_AMALGAMATION
111858 #ifdef SQLITE_ASCII
111859 #define IdChar(C) ((sqlite3CtypeMap[(unsigned char)C]&0x46)!=0)
111860 #endif
111861 #ifdef SQLITE_EBCDIC
111862 SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[];
111863 #define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
111864 #endif
111865 #endif /* SQLITE_AMALGAMATION */
111869 ** Token types used by the sqlite3_complete() routine. See the header
111870 ** comments on that procedure for additional information.
111872 #define tkSEMI 0
111873 #define tkWS 1
111874 #define tkOTHER 2
111875 #ifndef SQLITE_OMIT_TRIGGER
111876 #define tkEXPLAIN 3
111877 #define tkCREATE 4
111878 #define tkTEMP 5
111879 #define tkTRIGGER 6
111880 #define tkEND 7
111881 #endif
111884 ** Return TRUE if the given SQL string ends in a semicolon.
111886 ** Special handling is require for CREATE TRIGGER statements.
111887 ** Whenever the CREATE TRIGGER keywords are seen, the statement
111888 ** must end with ";END;".
111890 ** This implementation uses a state machine with 8 states:
111892 ** (0) INVALID We have not yet seen a non-whitespace character.
111894 ** (1) START At the beginning or end of an SQL statement. This routine
111895 ** returns 1 if it ends in the START state and 0 if it ends
111896 ** in any other state.
111898 ** (2) NORMAL We are in the middle of statement which ends with a single
111899 ** semicolon.
111901 ** (3) EXPLAIN The keyword EXPLAIN has been seen at the beginning of
111902 ** a statement.
111904 ** (4) CREATE The keyword CREATE has been seen at the beginning of a
111905 ** statement, possibly preceeded by EXPLAIN and/or followed by
111906 ** TEMP or TEMPORARY
111908 ** (5) TRIGGER We are in the middle of a trigger definition that must be
111909 ** ended by a semicolon, the keyword END, and another semicolon.
111911 ** (6) SEMI We've seen the first semicolon in the ";END;" that occurs at
111912 ** the end of a trigger definition.
111914 ** (7) END We've seen the ";END" of the ";END;" that occurs at the end
111915 ** of a trigger difinition.
111917 ** Transitions between states above are determined by tokens extracted
111918 ** from the input. The following tokens are significant:
111920 ** (0) tkSEMI A semicolon.
111921 ** (1) tkWS Whitespace.
111922 ** (2) tkOTHER Any other SQL token.
111923 ** (3) tkEXPLAIN The "explain" keyword.
111924 ** (4) tkCREATE The "create" keyword.
111925 ** (5) tkTEMP The "temp" or "temporary" keyword.
111926 ** (6) tkTRIGGER The "trigger" keyword.
111927 ** (7) tkEND The "end" keyword.
111929 ** Whitespace never causes a state transition and is always ignored.
111930 ** This means that a SQL string of all whitespace is invalid.
111932 ** If we compile with SQLITE_OMIT_TRIGGER, all of the computation needed
111933 ** to recognize the end of a trigger can be omitted. All we have to do
111934 ** is look for a semicolon that is not part of an string or comment.
111936 SQLITE_API int sqlite3_complete(const char *zSql){
111937 u8 state = 0; /* Current state, using numbers defined in header comment */
111938 u8 token; /* Value of the next token */
111940 #ifndef SQLITE_OMIT_TRIGGER
111941 /* A complex statement machine used to detect the end of a CREATE TRIGGER
111942 ** statement. This is the normal case.
111944 static const u8 trans[8][8] = {
111945 /* Token: */
111946 /* State: ** SEMI WS OTHER EXPLAIN CREATE TEMP TRIGGER END */
111947 /* 0 INVALID: */ { 1, 0, 2, 3, 4, 2, 2, 2, },
111948 /* 1 START: */ { 1, 1, 2, 3, 4, 2, 2, 2, },
111949 /* 2 NORMAL: */ { 1, 2, 2, 2, 2, 2, 2, 2, },
111950 /* 3 EXPLAIN: */ { 1, 3, 3, 2, 4, 2, 2, 2, },
111951 /* 4 CREATE: */ { 1, 4, 2, 2, 2, 4, 5, 2, },
111952 /* 5 TRIGGER: */ { 6, 5, 5, 5, 5, 5, 5, 5, },
111953 /* 6 SEMI: */ { 6, 6, 5, 5, 5, 5, 5, 7, },
111954 /* 7 END: */ { 1, 7, 5, 5, 5, 5, 5, 5, },
111956 #else
111957 /* If triggers are not supported by this compile then the statement machine
111958 ** used to detect the end of a statement is much simplier
111960 static const u8 trans[3][3] = {
111961 /* Token: */
111962 /* State: ** SEMI WS OTHER */
111963 /* 0 INVALID: */ { 1, 0, 2, },
111964 /* 1 START: */ { 1, 1, 2, },
111965 /* 2 NORMAL: */ { 1, 2, 2, },
111967 #endif /* SQLITE_OMIT_TRIGGER */
111969 while( *zSql ){
111970 switch( *zSql ){
111971 case ';': { /* A semicolon */
111972 token = tkSEMI;
111973 break;
111975 case ' ':
111976 case '\r':
111977 case '\t':
111978 case '\n':
111979 case '\f': { /* White space is ignored */
111980 token = tkWS;
111981 break;
111983 case '/': { /* C-style comments */
111984 if( zSql[1]!='*' ){
111985 token = tkOTHER;
111986 break;
111988 zSql += 2;
111989 while( zSql[0] && (zSql[0]!='*' || zSql[1]!='/') ){ zSql++; }
111990 if( zSql[0]==0 ) return 0;
111991 zSql++;
111992 token = tkWS;
111993 break;
111995 case '-': { /* SQL-style comments from "--" to end of line */
111996 if( zSql[1]!='-' ){
111997 token = tkOTHER;
111998 break;
112000 while( *zSql && *zSql!='\n' ){ zSql++; }
112001 if( *zSql==0 ) return state==1;
112002 token = tkWS;
112003 break;
112005 case '[': { /* Microsoft-style identifiers in [...] */
112006 zSql++;
112007 while( *zSql && *zSql!=']' ){ zSql++; }
112008 if( *zSql==0 ) return 0;
112009 token = tkOTHER;
112010 break;
112012 case '`': /* Grave-accent quoted symbols used by MySQL */
112013 case '"': /* single- and double-quoted strings */
112014 case '\'': {
112015 int c = *zSql;
112016 zSql++;
112017 while( *zSql && *zSql!=c ){ zSql++; }
112018 if( *zSql==0 ) return 0;
112019 token = tkOTHER;
112020 break;
112022 default: {
112023 #ifdef SQLITE_EBCDIC
112024 unsigned char c;
112025 #endif
112026 if( IdChar((u8)*zSql) ){
112027 /* Keywords and unquoted identifiers */
112028 int nId;
112029 for(nId=1; IdChar(zSql[nId]); nId++){}
112030 #ifdef SQLITE_OMIT_TRIGGER
112031 token = tkOTHER;
112032 #else
112033 switch( *zSql ){
112034 case 'c': case 'C': {
112035 if( nId==6 && sqlite3StrNICmp(zSql, "create", 6)==0 ){
112036 token = tkCREATE;
112037 }else{
112038 token = tkOTHER;
112040 break;
112042 case 't': case 'T': {
112043 if( nId==7 && sqlite3StrNICmp(zSql, "trigger", 7)==0 ){
112044 token = tkTRIGGER;
112045 }else if( nId==4 && sqlite3StrNICmp(zSql, "temp", 4)==0 ){
112046 token = tkTEMP;
112047 }else if( nId==9 && sqlite3StrNICmp(zSql, "temporary", 9)==0 ){
112048 token = tkTEMP;
112049 }else{
112050 token = tkOTHER;
112052 break;
112054 case 'e': case 'E': {
112055 if( nId==3 && sqlite3StrNICmp(zSql, "end", 3)==0 ){
112056 token = tkEND;
112057 }else
112058 #ifndef SQLITE_OMIT_EXPLAIN
112059 if( nId==7 && sqlite3StrNICmp(zSql, "explain", 7)==0 ){
112060 token = tkEXPLAIN;
112061 }else
112062 #endif
112064 token = tkOTHER;
112066 break;
112068 default: {
112069 token = tkOTHER;
112070 break;
112073 #endif /* SQLITE_OMIT_TRIGGER */
112074 zSql += nId-1;
112075 }else{
112076 /* Operators and special symbols */
112077 token = tkOTHER;
112079 break;
112082 state = trans[state][token];
112083 zSql++;
112085 return state==1;
112088 #ifndef SQLITE_OMIT_UTF16
112090 ** This routine is the same as the sqlite3_complete() routine described
112091 ** above, except that the parameter is required to be UTF-16 encoded, not
112092 ** UTF-8.
112094 SQLITE_API int sqlite3_complete16(const void *zSql){
112095 sqlite3_value *pVal;
112096 char const *zSql8;
112097 int rc = SQLITE_NOMEM;
112099 #ifndef SQLITE_OMIT_AUTOINIT
112100 rc = sqlite3_initialize();
112101 if( rc ) return rc;
112102 #endif
112103 pVal = sqlite3ValueNew(0);
112104 sqlite3ValueSetStr(pVal, -1, zSql, SQLITE_UTF16NATIVE, SQLITE_STATIC);
112105 zSql8 = sqlite3ValueText(pVal, SQLITE_UTF8);
112106 if( zSql8 ){
112107 rc = sqlite3_complete(zSql8);
112108 }else{
112109 rc = SQLITE_NOMEM;
112111 sqlite3ValueFree(pVal);
112112 return sqlite3ApiExit(0, rc);
112114 #endif /* SQLITE_OMIT_UTF16 */
112115 #endif /* SQLITE_OMIT_COMPLETE */
112117 /************** End of complete.c ********************************************/
112118 /************** Begin file main.c ********************************************/
112120 ** 2001 September 15
112122 ** The author disclaims copyright to this source code. In place of
112123 ** a legal notice, here is a blessing:
112125 ** May you do good and not evil.
112126 ** May you find forgiveness for yourself and forgive others.
112127 ** May you share freely, never taking more than you give.
112129 *************************************************************************
112130 ** Main file for the SQLite library. The routines in this file
112131 ** implement the programmer interface to the library. Routines in
112132 ** other files are for internal use by SQLite and should not be
112133 ** accessed by users of the library.
112136 #ifdef SQLITE_ENABLE_FTS3
112137 /************** Include fts3.h in the middle of main.c ***********************/
112138 /************** Begin file fts3.h ********************************************/
112140 ** 2006 Oct 10
112142 ** The author disclaims copyright to this source code. In place of
112143 ** a legal notice, here is a blessing:
112145 ** May you do good and not evil.
112146 ** May you find forgiveness for yourself and forgive others.
112147 ** May you share freely, never taking more than you give.
112149 ******************************************************************************
112151 ** This header file is used by programs that want to link against the
112152 ** FTS3 library. All it does is declare the sqlite3Fts3Init() interface.
112155 #if 0
112156 extern "C" {
112157 #endif /* __cplusplus */
112159 SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db);
112161 #if 0
112162 } /* extern "C" */
112163 #endif /* __cplusplus */
112165 /************** End of fts3.h ************************************************/
112166 /************** Continuing where we left off in main.c ***********************/
112167 #endif
112168 #ifdef SQLITE_ENABLE_RTREE
112169 /************** Include rtree.h in the middle of main.c **********************/
112170 /************** Begin file rtree.h *******************************************/
112172 ** 2008 May 26
112174 ** The author disclaims copyright to this source code. In place of
112175 ** a legal notice, here is a blessing:
112177 ** May you do good and not evil.
112178 ** May you find forgiveness for yourself and forgive others.
112179 ** May you share freely, never taking more than you give.
112181 ******************************************************************************
112183 ** This header file is used by programs that want to link against the
112184 ** RTREE library. All it does is declare the sqlite3RtreeInit() interface.
112187 #if 0
112188 extern "C" {
112189 #endif /* __cplusplus */
112191 SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db);
112193 #if 0
112194 } /* extern "C" */
112195 #endif /* __cplusplus */
112197 /************** End of rtree.h ***********************************************/
112198 /************** Continuing where we left off in main.c ***********************/
112199 #endif
112200 #ifdef SQLITE_ENABLE_ICU
112201 /************** Include sqliteicu.h in the middle of main.c ******************/
112202 /************** Begin file sqliteicu.h ***************************************/
112204 ** 2008 May 26
112206 ** The author disclaims copyright to this source code. In place of
112207 ** a legal notice, here is a blessing:
112209 ** May you do good and not evil.
112210 ** May you find forgiveness for yourself and forgive others.
112211 ** May you share freely, never taking more than you give.
112213 ******************************************************************************
112215 ** This header file is used by programs that want to link against the
112216 ** ICU extension. All it does is declare the sqlite3IcuInit() interface.
112219 #if 0
112220 extern "C" {
112221 #endif /* __cplusplus */
112223 SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db);
112225 #if 0
112226 } /* extern "C" */
112227 #endif /* __cplusplus */
112230 /************** End of sqliteicu.h *******************************************/
112231 /************** Continuing where we left off in main.c ***********************/
112232 #endif
112234 #ifndef SQLITE_AMALGAMATION
112235 /* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
112236 ** contains the text of SQLITE_VERSION macro.
112238 SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
112239 #endif
112241 /* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
112242 ** a pointer to the to the sqlite3_version[] string constant.
112244 SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }
112246 /* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
112247 ** pointer to a string constant whose value is the same as the
112248 ** SQLITE_SOURCE_ID C preprocessor macro.
112250 SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
112252 /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
112253 ** returns an integer equal to SQLITE_VERSION_NUMBER.
112255 SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
112257 /* IMPLEMENTATION-OF: R-20790-14025 The sqlite3_threadsafe() function returns
112258 ** zero if and only if SQLite was compiled with mutexing code omitted due to
112259 ** the SQLITE_THREADSAFE compile-time option being set to 0.
112261 SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
112263 #if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
112265 ** If the following function pointer is not NULL and if
112266 ** SQLITE_ENABLE_IOTRACE is enabled, then messages describing
112267 ** I/O active are written using this function. These messages
112268 ** are intended for debugging activity only.
112270 SQLITE_PRIVATE void (*sqlite3IoTrace)(const char*, ...) = 0;
112271 #endif
112274 ** If the following global variable points to a string which is the
112275 ** name of a directory, then that directory will be used to store
112276 ** temporary files.
112278 ** See also the "PRAGMA temp_store_directory" SQL command.
112280 SQLITE_API char *sqlite3_temp_directory = 0;
112283 ** Initialize SQLite.
112285 ** This routine must be called to initialize the memory allocation,
112286 ** VFS, and mutex subsystems prior to doing any serious work with
112287 ** SQLite. But as long as you do not compile with SQLITE_OMIT_AUTOINIT
112288 ** this routine will be called automatically by key routines such as
112289 ** sqlite3_open().
112291 ** This routine is a no-op except on its very first call for the process,
112292 ** or for the first call after a call to sqlite3_shutdown.
112294 ** The first thread to call this routine runs the initialization to
112295 ** completion. If subsequent threads call this routine before the first
112296 ** thread has finished the initialization process, then the subsequent
112297 ** threads must block until the first thread finishes with the initialization.
112299 ** The first thread might call this routine recursively. Recursive
112300 ** calls to this routine should not block, of course. Otherwise the
112301 ** initialization process would never complete.
112303 ** Let X be the first thread to enter this routine. Let Y be some other
112304 ** thread. Then while the initial invocation of this routine by X is
112305 ** incomplete, it is required that:
112307 ** * Calls to this routine from Y must block until the outer-most
112308 ** call by X completes.
112310 ** * Recursive calls to this routine from thread X return immediately
112311 ** without blocking.
112313 SQLITE_API int sqlite3_initialize(void){
112314 MUTEX_LOGIC( sqlite3_mutex *pMaster; ) /* The main static mutex */
112315 int rc; /* Result code */
112317 #ifdef SQLITE_OMIT_WSD
112318 rc = sqlite3_wsd_init(4096, 24);
112319 if( rc!=SQLITE_OK ){
112320 return rc;
112322 #endif
112324 /* If SQLite is already completely initialized, then this call
112325 ** to sqlite3_initialize() should be a no-op. But the initialization
112326 ** must be complete. So isInit must not be set until the very end
112327 ** of this routine.
112329 if( sqlite3GlobalConfig.isInit ) return SQLITE_OK;
112331 /* Make sure the mutex subsystem is initialized. If unable to
112332 ** initialize the mutex subsystem, return early with the error.
112333 ** If the system is so sick that we are unable to allocate a mutex,
112334 ** there is not much SQLite is going to be able to do.
112336 ** The mutex subsystem must take care of serializing its own
112337 ** initialization.
112339 rc = sqlite3MutexInit();
112340 if( rc ) return rc;
112342 /* Initialize the malloc() system and the recursive pInitMutex mutex.
112343 ** This operation is protected by the STATIC_MASTER mutex. Note that
112344 ** MutexAlloc() is called for a static mutex prior to initializing the
112345 ** malloc subsystem - this implies that the allocation of a static
112346 ** mutex must not require support from the malloc subsystem.
112348 MUTEX_LOGIC( pMaster = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER); )
112349 sqlite3_mutex_enter(pMaster);
112350 sqlite3GlobalConfig.isMutexInit = 1;
112351 if( !sqlite3GlobalConfig.isMallocInit ){
112352 rc = sqlite3MallocInit();
112354 if( rc==SQLITE_OK ){
112355 sqlite3GlobalConfig.isMallocInit = 1;
112356 if( !sqlite3GlobalConfig.pInitMutex ){
112357 sqlite3GlobalConfig.pInitMutex =
112358 sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
112359 if( sqlite3GlobalConfig.bCoreMutex && !sqlite3GlobalConfig.pInitMutex ){
112360 rc = SQLITE_NOMEM;
112364 if( rc==SQLITE_OK ){
112365 sqlite3GlobalConfig.nRefInitMutex++;
112367 sqlite3_mutex_leave(pMaster);
112369 /* If rc is not SQLITE_OK at this point, then either the malloc
112370 ** subsystem could not be initialized or the system failed to allocate
112371 ** the pInitMutex mutex. Return an error in either case. */
112372 if( rc!=SQLITE_OK ){
112373 return rc;
112376 /* Do the rest of the initialization under the recursive mutex so
112377 ** that we will be able to handle recursive calls into
112378 ** sqlite3_initialize(). The recursive calls normally come through
112379 ** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
112380 ** recursive calls might also be possible.
112382 ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
112383 ** to the xInit method, so the xInit method need not be threadsafe.
112385 ** The following mutex is what serializes access to the appdef pcache xInit
112386 ** methods. The sqlite3_pcache_methods.xInit() all is embedded in the
112387 ** call to sqlite3PcacheInitialize().
112389 sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
112390 if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
112391 FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
112392 sqlite3GlobalConfig.inProgress = 1;
112393 memset(pHash, 0, sizeof(sqlite3GlobalFunctions));
112394 sqlite3RegisterGlobalFunctions();
112395 if( sqlite3GlobalConfig.isPCacheInit==0 ){
112396 rc = sqlite3PcacheInitialize();
112398 if( rc==SQLITE_OK ){
112399 sqlite3GlobalConfig.isPCacheInit = 1;
112400 rc = sqlite3OsInit();
112402 if( rc==SQLITE_OK ){
112403 sqlite3PCacheBufferSetup( sqlite3GlobalConfig.pPage,
112404 sqlite3GlobalConfig.szPage, sqlite3GlobalConfig.nPage);
112405 sqlite3GlobalConfig.isInit = 1;
112407 sqlite3GlobalConfig.inProgress = 0;
112409 sqlite3_mutex_leave(sqlite3GlobalConfig.pInitMutex);
112411 /* Go back under the static mutex and clean up the recursive
112412 ** mutex to prevent a resource leak.
112414 sqlite3_mutex_enter(pMaster);
112415 sqlite3GlobalConfig.nRefInitMutex--;
112416 if( sqlite3GlobalConfig.nRefInitMutex<=0 ){
112417 assert( sqlite3GlobalConfig.nRefInitMutex==0 );
112418 sqlite3_mutex_free(sqlite3GlobalConfig.pInitMutex);
112419 sqlite3GlobalConfig.pInitMutex = 0;
112421 sqlite3_mutex_leave(pMaster);
112423 /* The following is just a sanity check to make sure SQLite has
112424 ** been compiled correctly. It is important to run this code, but
112425 ** we don't want to run it too often and soak up CPU cycles for no
112426 ** reason. So we run it once during initialization.
112428 #ifndef NDEBUG
112429 #ifndef SQLITE_OMIT_FLOATING_POINT
112430 /* This section of code's only "output" is via assert() statements. */
112431 if ( rc==SQLITE_OK ){
112432 u64 x = (((u64)1)<<63)-1;
112433 double y;
112434 assert(sizeof(x)==8);
112435 assert(sizeof(x)==sizeof(y));
112436 memcpy(&y, &x, 8);
112437 assert( sqlite3IsNaN(y) );
112439 #endif
112440 #endif
112442 /* Do extra initialization steps requested by the SQLITE_EXTRA_INIT
112443 ** compile-time option.
112445 #ifdef SQLITE_EXTRA_INIT
112446 if( rc==SQLITE_OK && sqlite3GlobalConfig.isInit ){
112447 int SQLITE_EXTRA_INIT(const char*);
112448 rc = SQLITE_EXTRA_INIT(0);
112450 #endif
112452 return rc;
112456 ** Undo the effects of sqlite3_initialize(). Must not be called while
112457 ** there are outstanding database connections or memory allocations or
112458 ** while any part of SQLite is otherwise in use in any thread. This
112459 ** routine is not threadsafe. But it is safe to invoke this routine
112460 ** on when SQLite is already shut down. If SQLite is already shut down
112461 ** when this routine is invoked, then this routine is a harmless no-op.
112463 SQLITE_API int sqlite3_shutdown(void){
112464 if( sqlite3GlobalConfig.isInit ){
112465 #ifdef SQLITE_EXTRA_SHUTDOWN
112466 void SQLITE_EXTRA_SHUTDOWN(void);
112467 SQLITE_EXTRA_SHUTDOWN();
112468 #endif
112469 sqlite3_os_end();
112470 sqlite3_reset_auto_extension();
112471 sqlite3GlobalConfig.isInit = 0;
112473 if( sqlite3GlobalConfig.isPCacheInit ){
112474 sqlite3PcacheShutdown();
112475 sqlite3GlobalConfig.isPCacheInit = 0;
112477 if( sqlite3GlobalConfig.isMallocInit ){
112478 sqlite3MallocEnd();
112479 sqlite3GlobalConfig.isMallocInit = 0;
112481 if( sqlite3GlobalConfig.isMutexInit ){
112482 sqlite3MutexEnd();
112483 sqlite3GlobalConfig.isMutexInit = 0;
112486 return SQLITE_OK;
112490 ** This API allows applications to modify the global configuration of
112491 ** the SQLite library at run-time.
112493 ** This routine should only be called when there are no outstanding
112494 ** database connections or memory allocations. This routine is not
112495 ** threadsafe. Failure to heed these warnings can lead to unpredictable
112496 ** behavior.
112498 SQLITE_API int sqlite3_config(int op, ...){
112499 va_list ap;
112500 int rc = SQLITE_OK;
112502 /* sqlite3_config() shall return SQLITE_MISUSE if it is invoked while
112503 ** the SQLite library is in use. */
112504 if( sqlite3GlobalConfig.isInit ) return SQLITE_MISUSE_BKPT;
112506 va_start(ap, op);
112507 switch( op ){
112509 /* Mutex configuration options are only available in a threadsafe
112510 ** compile.
112512 #if defined(SQLITE_THREADSAFE) && SQLITE_THREADSAFE>0
112513 case SQLITE_CONFIG_SINGLETHREAD: {
112514 /* Disable all mutexing */
112515 sqlite3GlobalConfig.bCoreMutex = 0;
112516 sqlite3GlobalConfig.bFullMutex = 0;
112517 break;
112519 case SQLITE_CONFIG_MULTITHREAD: {
112520 /* Disable mutexing of database connections */
112521 /* Enable mutexing of core data structures */
112522 sqlite3GlobalConfig.bCoreMutex = 1;
112523 sqlite3GlobalConfig.bFullMutex = 0;
112524 break;
112526 case SQLITE_CONFIG_SERIALIZED: {
112527 /* Enable all mutexing */
112528 sqlite3GlobalConfig.bCoreMutex = 1;
112529 sqlite3GlobalConfig.bFullMutex = 1;
112530 break;
112532 case SQLITE_CONFIG_MUTEX: {
112533 /* Specify an alternative mutex implementation */
112534 sqlite3GlobalConfig.mutex = *va_arg(ap, sqlite3_mutex_methods*);
112535 break;
112537 case SQLITE_CONFIG_GETMUTEX: {
112538 /* Retrieve the current mutex implementation */
112539 *va_arg(ap, sqlite3_mutex_methods*) = sqlite3GlobalConfig.mutex;
112540 break;
112542 #endif
112545 case SQLITE_CONFIG_MALLOC: {
112546 /* Specify an alternative malloc implementation */
112547 sqlite3GlobalConfig.m = *va_arg(ap, sqlite3_mem_methods*);
112548 break;
112550 case SQLITE_CONFIG_GETMALLOC: {
112551 /* Retrieve the current malloc() implementation */
112552 if( sqlite3GlobalConfig.m.xMalloc==0 ) sqlite3MemSetDefault();
112553 *va_arg(ap, sqlite3_mem_methods*) = sqlite3GlobalConfig.m;
112554 break;
112556 case SQLITE_CONFIG_MEMSTATUS: {
112557 /* Enable or disable the malloc status collection */
112558 sqlite3GlobalConfig.bMemstat = va_arg(ap, int);
112559 break;
112561 case SQLITE_CONFIG_SCRATCH: {
112562 /* Designate a buffer for scratch memory space */
112563 sqlite3GlobalConfig.pScratch = va_arg(ap, void*);
112564 sqlite3GlobalConfig.szScratch = va_arg(ap, int);
112565 sqlite3GlobalConfig.nScratch = va_arg(ap, int);
112566 break;
112568 case SQLITE_CONFIG_PAGECACHE: {
112569 /* Designate a buffer for page cache memory space */
112570 sqlite3GlobalConfig.pPage = va_arg(ap, void*);
112571 sqlite3GlobalConfig.szPage = va_arg(ap, int);
112572 sqlite3GlobalConfig.nPage = va_arg(ap, int);
112573 break;
112576 case SQLITE_CONFIG_PCACHE: {
112577 /* no-op */
112578 break;
112580 case SQLITE_CONFIG_GETPCACHE: {
112581 /* now an error */
112582 rc = SQLITE_ERROR;
112583 break;
112586 case SQLITE_CONFIG_PCACHE2: {
112587 /* Specify an alternative page cache implementation */
112588 sqlite3GlobalConfig.pcache2 = *va_arg(ap, sqlite3_pcache_methods2*);
112589 break;
112591 case SQLITE_CONFIG_GETPCACHE2: {
112592 if( sqlite3GlobalConfig.pcache2.xInit==0 ){
112593 sqlite3PCacheSetDefault();
112595 *va_arg(ap, sqlite3_pcache_methods2*) = sqlite3GlobalConfig.pcache2;
112596 break;
112599 #if defined(SQLITE_ENABLE_MEMSYS3) || defined(SQLITE_ENABLE_MEMSYS5)
112600 case SQLITE_CONFIG_HEAP: {
112601 /* Designate a buffer for heap memory space */
112602 sqlite3GlobalConfig.pHeap = va_arg(ap, void*);
112603 sqlite3GlobalConfig.nHeap = va_arg(ap, int);
112604 sqlite3GlobalConfig.mnReq = va_arg(ap, int);
112606 if( sqlite3GlobalConfig.mnReq<1 ){
112607 sqlite3GlobalConfig.mnReq = 1;
112608 }else if( sqlite3GlobalConfig.mnReq>(1<<12) ){
112609 /* cap min request size at 2^12 */
112610 sqlite3GlobalConfig.mnReq = (1<<12);
112613 if( sqlite3GlobalConfig.pHeap==0 ){
112614 /* If the heap pointer is NULL, then restore the malloc implementation
112615 ** back to NULL pointers too. This will cause the malloc to go
112616 ** back to its default implementation when sqlite3_initialize() is
112617 ** run.
112619 memset(&sqlite3GlobalConfig.m, 0, sizeof(sqlite3GlobalConfig.m));
112620 }else{
112621 /* The heap pointer is not NULL, then install one of the
112622 ** mem5.c/mem3.c methods. If neither ENABLE_MEMSYS3 nor
112623 ** ENABLE_MEMSYS5 is defined, return an error.
112625 #ifdef SQLITE_ENABLE_MEMSYS3
112626 sqlite3GlobalConfig.m = *sqlite3MemGetMemsys3();
112627 #endif
112628 #ifdef SQLITE_ENABLE_MEMSYS5
112629 sqlite3GlobalConfig.m = *sqlite3MemGetMemsys5();
112630 #endif
112632 break;
112634 #endif
112636 case SQLITE_CONFIG_LOOKASIDE: {
112637 sqlite3GlobalConfig.szLookaside = va_arg(ap, int);
112638 sqlite3GlobalConfig.nLookaside = va_arg(ap, int);
112639 break;
112642 /* Record a pointer to the logger funcction and its first argument.
112643 ** The default is NULL. Logging is disabled if the function pointer is
112644 ** NULL.
112646 case SQLITE_CONFIG_LOG: {
112647 /* MSVC is picky about pulling func ptrs from va lists.
112648 ** http://support.microsoft.com/kb/47961
112649 ** sqlite3GlobalConfig.xLog = va_arg(ap, void(*)(void*,int,const char*));
112651 typedef void(*LOGFUNC_t)(void*,int,const char*);
112652 sqlite3GlobalConfig.xLog = va_arg(ap, LOGFUNC_t);
112653 sqlite3GlobalConfig.pLogArg = va_arg(ap, void*);
112654 break;
112657 case SQLITE_CONFIG_URI: {
112658 sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
112659 break;
112662 default: {
112663 rc = SQLITE_ERROR;
112664 break;
112667 va_end(ap);
112668 return rc;
112672 ** Set up the lookaside buffers for a database connection.
112673 ** Return SQLITE_OK on success.
112674 ** If lookaside is already active, return SQLITE_BUSY.
112676 ** The sz parameter is the number of bytes in each lookaside slot.
112677 ** The cnt parameter is the number of slots. If pStart is NULL the
112678 ** space for the lookaside memory is obtained from sqlite3_malloc().
112679 ** If pStart is not NULL then it is sz*cnt bytes of memory to use for
112680 ** the lookaside memory.
112682 static int setupLookaside(sqlite3 *db, void *pBuf, int sz, int cnt){
112683 void *pStart;
112684 if( db->lookaside.nOut ){
112685 return SQLITE_BUSY;
112687 /* Free any existing lookaside buffer for this handle before
112688 ** allocating a new one so we don't have to have space for
112689 ** both at the same time.
112691 if( db->lookaside.bMalloced ){
112692 sqlite3_free(db->lookaside.pStart);
112694 /* The size of a lookaside slot after ROUNDDOWN8 needs to be larger
112695 ** than a pointer to be useful.
112697 sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
112698 if( sz<=(int)sizeof(LookasideSlot*) ) sz = 0;
112699 if( cnt<0 ) cnt = 0;
112700 if( sz==0 || cnt==0 ){
112701 sz = 0;
112702 pStart = 0;
112703 }else if( pBuf==0 ){
112704 sqlite3BeginBenignMalloc();
112705 pStart = sqlite3Malloc( sz*cnt ); /* IMP: R-61949-35727 */
112706 sqlite3EndBenignMalloc();
112707 if( pStart ) cnt = sqlite3MallocSize(pStart)/sz;
112708 }else{
112709 pStart = pBuf;
112711 db->lookaside.pStart = pStart;
112712 db->lookaside.pFree = 0;
112713 db->lookaside.sz = (u16)sz;
112714 if( pStart ){
112715 int i;
112716 LookasideSlot *p;
112717 assert( sz > (int)sizeof(LookasideSlot*) );
112718 p = (LookasideSlot*)pStart;
112719 for(i=cnt-1; i>=0; i--){
112720 p->pNext = db->lookaside.pFree;
112721 db->lookaside.pFree = p;
112722 p = (LookasideSlot*)&((u8*)p)[sz];
112724 db->lookaside.pEnd = p;
112725 db->lookaside.bEnabled = 1;
112726 db->lookaside.bMalloced = pBuf==0 ?1:0;
112727 }else{
112728 db->lookaside.pEnd = 0;
112729 db->lookaside.bEnabled = 0;
112730 db->lookaside.bMalloced = 0;
112732 return SQLITE_OK;
112736 ** Return the mutex associated with a database connection.
112738 SQLITE_API sqlite3_mutex *sqlite3_db_mutex(sqlite3 *db){
112739 return db->mutex;
112743 ** Free up as much memory as we can from the given database
112744 ** connection.
112746 SQLITE_API int sqlite3_db_release_memory(sqlite3 *db){
112747 int i;
112748 sqlite3_mutex_enter(db->mutex);
112749 sqlite3BtreeEnterAll(db);
112750 for(i=0; i<db->nDb; i++){
112751 Btree *pBt = db->aDb[i].pBt;
112752 if( pBt ){
112753 Pager *pPager = sqlite3BtreePager(pBt);
112754 sqlite3PagerShrink(pPager);
112757 sqlite3BtreeLeaveAll(db);
112758 sqlite3_mutex_leave(db->mutex);
112759 return SQLITE_OK;
112763 ** Configuration settings for an individual database connection
112765 SQLITE_API int sqlite3_db_config(sqlite3 *db, int op, ...){
112766 va_list ap;
112767 int rc;
112768 va_start(ap, op);
112769 switch( op ){
112770 case SQLITE_DBCONFIG_LOOKASIDE: {
112771 void *pBuf = va_arg(ap, void*); /* IMP: R-26835-10964 */
112772 int sz = va_arg(ap, int); /* IMP: R-47871-25994 */
112773 int cnt = va_arg(ap, int); /* IMP: R-04460-53386 */
112774 rc = setupLookaside(db, pBuf, sz, cnt);
112775 break;
112777 default: {
112778 static const struct {
112779 int op; /* The opcode */
112780 u32 mask; /* Mask of the bit in sqlite3.flags to set/clear */
112781 } aFlagOp[] = {
112782 { SQLITE_DBCONFIG_ENABLE_FKEY, SQLITE_ForeignKeys },
112783 { SQLITE_DBCONFIG_ENABLE_TRIGGER, SQLITE_EnableTrigger },
112785 unsigned int i;
112786 rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
112787 for(i=0; i<ArraySize(aFlagOp); i++){
112788 if( aFlagOp[i].op==op ){
112789 int onoff = va_arg(ap, int);
112790 int *pRes = va_arg(ap, int*);
112791 int oldFlags = db->flags;
112792 if( onoff>0 ){
112793 db->flags |= aFlagOp[i].mask;
112794 }else if( onoff==0 ){
112795 db->flags &= ~aFlagOp[i].mask;
112797 if( oldFlags!=db->flags ){
112798 sqlite3ExpirePreparedStatements(db);
112800 if( pRes ){
112801 *pRes = (db->flags & aFlagOp[i].mask)!=0;
112803 rc = SQLITE_OK;
112804 break;
112807 break;
112810 va_end(ap);
112811 return rc;
112816 ** Return true if the buffer z[0..n-1] contains all spaces.
112818 static int allSpaces(const char *z, int n){
112819 while( n>0 && z[n-1]==' ' ){ n--; }
112820 return n==0;
112824 ** This is the default collating function named "BINARY" which is always
112825 ** available.
112827 ** If the padFlag argument is not NULL then space padding at the end
112828 ** of strings is ignored. This implements the RTRIM collation.
112830 static int binCollFunc(
112831 void *padFlag,
112832 int nKey1, const void *pKey1,
112833 int nKey2, const void *pKey2
112835 int rc, n;
112836 n = nKey1<nKey2 ? nKey1 : nKey2;
112837 rc = memcmp(pKey1, pKey2, n);
112838 if( rc==0 ){
112839 if( padFlag
112840 && allSpaces(((char*)pKey1)+n, nKey1-n)
112841 && allSpaces(((char*)pKey2)+n, nKey2-n)
112843 /* Leave rc unchanged at 0 */
112844 }else{
112845 rc = nKey1 - nKey2;
112848 return rc;
112852 ** Another built-in collating sequence: NOCASE.
112854 ** This collating sequence is intended to be used for "case independant
112855 ** comparison". SQLite's knowledge of upper and lower case equivalents
112856 ** extends only to the 26 characters used in the English language.
112858 ** At the moment there is only a UTF-8 implementation.
112860 static int nocaseCollatingFunc(
112861 void *NotUsed,
112862 int nKey1, const void *pKey1,
112863 int nKey2, const void *pKey2
112865 int r = sqlite3StrNICmp(
112866 (const char *)pKey1, (const char *)pKey2, (nKey1<nKey2)?nKey1:nKey2);
112867 UNUSED_PARAMETER(NotUsed);
112868 if( 0==r ){
112869 r = nKey1-nKey2;
112871 return r;
112875 ** Return the ROWID of the most recent insert
112877 SQLITE_API sqlite_int64 sqlite3_last_insert_rowid(sqlite3 *db){
112878 return db->lastRowid;
112882 ** Return the number of changes in the most recent call to sqlite3_exec().
112884 SQLITE_API int sqlite3_changes(sqlite3 *db){
112885 return db->nChange;
112889 ** Return the number of changes since the database handle was opened.
112891 SQLITE_API int sqlite3_total_changes(sqlite3 *db){
112892 return db->nTotalChange;
112896 ** Close all open savepoints. This function only manipulates fields of the
112897 ** database handle object, it does not close any savepoints that may be open
112898 ** at the b-tree/pager level.
112900 SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *db){
112901 while( db->pSavepoint ){
112902 Savepoint *pTmp = db->pSavepoint;
112903 db->pSavepoint = pTmp->pNext;
112904 sqlite3DbFree(db, pTmp);
112906 db->nSavepoint = 0;
112907 db->nStatement = 0;
112908 db->isTransactionSavepoint = 0;
112912 ** Invoke the destructor function associated with FuncDef p, if any. Except,
112913 ** if this is not the last copy of the function, do not invoke it. Multiple
112914 ** copies of a single function are created when create_function() is called
112915 ** with SQLITE_ANY as the encoding.
112917 static void functionDestroy(sqlite3 *db, FuncDef *p){
112918 FuncDestructor *pDestructor = p->pDestructor;
112919 if( pDestructor ){
112920 pDestructor->nRef--;
112921 if( pDestructor->nRef==0 ){
112922 pDestructor->xDestroy(pDestructor->pUserData);
112923 sqlite3DbFree(db, pDestructor);
112929 ** Close an existing SQLite database
112931 SQLITE_API int sqlite3_close(sqlite3 *db){
112932 HashElem *i; /* Hash table iterator */
112933 int j;
112935 if( !db ){
112936 return SQLITE_OK;
112938 if( !sqlite3SafetyCheckSickOrOk(db) ){
112939 return SQLITE_MISUSE_BKPT;
112941 sqlite3_mutex_enter(db->mutex);
112943 /* Force xDestroy calls on all virtual tables */
112944 sqlite3ResetInternalSchema(db, -1);
112946 /* If a transaction is open, the ResetInternalSchema() call above
112947 ** will not have called the xDisconnect() method on any virtual
112948 ** tables in the db->aVTrans[] array. The following sqlite3VtabRollback()
112949 ** call will do so. We need to do this before the check for active
112950 ** SQL statements below, as the v-table implementation may be storing
112951 ** some prepared statements internally.
112953 sqlite3VtabRollback(db);
112955 /* If there are any outstanding VMs, return SQLITE_BUSY. */
112956 if( db->pVdbe ){
112957 sqlite3Error(db, SQLITE_BUSY,
112958 "unable to close due to unfinalised statements");
112959 sqlite3_mutex_leave(db->mutex);
112960 return SQLITE_BUSY;
112962 assert( sqlite3SafetyCheckSickOrOk(db) );
112964 for(j=0; j<db->nDb; j++){
112965 Btree *pBt = db->aDb[j].pBt;
112966 if( pBt && sqlite3BtreeIsInBackup(pBt) ){
112967 sqlite3Error(db, SQLITE_BUSY,
112968 "unable to close due to unfinished backup operation");
112969 sqlite3_mutex_leave(db->mutex);
112970 return SQLITE_BUSY;
112974 /* Free any outstanding Savepoint structures. */
112975 sqlite3CloseSavepoints(db);
112977 for(j=0; j<db->nDb; j++){
112978 struct Db *pDb = &db->aDb[j];
112979 if( pDb->pBt ){
112980 sqlite3BtreeClose(pDb->pBt);
112981 pDb->pBt = 0;
112982 if( j!=1 ){
112983 pDb->pSchema = 0;
112987 sqlite3ResetInternalSchema(db, -1);
112989 /* Tell the code in notify.c that the connection no longer holds any
112990 ** locks and does not require any further unlock-notify callbacks.
112992 sqlite3ConnectionClosed(db);
112994 assert( db->nDb<=2 );
112995 assert( db->aDb==db->aDbStatic );
112996 for(j=0; j<ArraySize(db->aFunc.a); j++){
112997 FuncDef *pNext, *pHash, *p;
112998 for(p=db->aFunc.a[j]; p; p=pHash){
112999 pHash = p->pHash;
113000 while( p ){
113001 functionDestroy(db, p);
113002 pNext = p->pNext;
113003 sqlite3DbFree(db, p);
113004 p = pNext;
113008 for(i=sqliteHashFirst(&db->aCollSeq); i; i=sqliteHashNext(i)){
113009 CollSeq *pColl = (CollSeq *)sqliteHashData(i);
113010 /* Invoke any destructors registered for collation sequence user data. */
113011 for(j=0; j<3; j++){
113012 if( pColl[j].xDel ){
113013 pColl[j].xDel(pColl[j].pUser);
113016 sqlite3DbFree(db, pColl);
113018 sqlite3HashClear(&db->aCollSeq);
113019 #ifndef SQLITE_OMIT_VIRTUALTABLE
113020 for(i=sqliteHashFirst(&db->aModule); i; i=sqliteHashNext(i)){
113021 Module *pMod = (Module *)sqliteHashData(i);
113022 if( pMod->xDestroy ){
113023 pMod->xDestroy(pMod->pAux);
113025 sqlite3DbFree(db, pMod);
113027 sqlite3HashClear(&db->aModule);
113028 #endif
113030 sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
113031 if( db->pErr ){
113032 sqlite3ValueFree(db->pErr);
113034 sqlite3CloseExtensions(db);
113036 db->magic = SQLITE_MAGIC_ERROR;
113038 /* The temp-database schema is allocated differently from the other schema
113039 ** objects (using sqliteMalloc() directly, instead of sqlite3BtreeSchema()).
113040 ** So it needs to be freed here. Todo: Why not roll the temp schema into
113041 ** the same sqliteMalloc() as the one that allocates the database
113042 ** structure?
113044 sqlite3DbFree(db, db->aDb[1].pSchema);
113045 sqlite3_mutex_leave(db->mutex);
113046 db->magic = SQLITE_MAGIC_CLOSED;
113047 sqlite3_mutex_free(db->mutex);
113048 assert( db->lookaside.nOut==0 ); /* Fails on a lookaside memory leak */
113049 if( db->lookaside.bMalloced ){
113050 sqlite3_free(db->lookaside.pStart);
113052 sqlite3_free(db);
113053 return SQLITE_OK;
113057 ** Rollback all database files.
113059 SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db){
113060 int i;
113061 int inTrans = 0;
113062 assert( sqlite3_mutex_held(db->mutex) );
113063 sqlite3BeginBenignMalloc();
113064 for(i=0; i<db->nDb; i++){
113065 if( db->aDb[i].pBt ){
113066 if( sqlite3BtreeIsInTrans(db->aDb[i].pBt) ){
113067 inTrans = 1;
113069 sqlite3BtreeRollback(db->aDb[i].pBt);
113070 db->aDb[i].inTrans = 0;
113073 sqlite3VtabRollback(db);
113074 sqlite3EndBenignMalloc();
113076 if( db->flags&SQLITE_InternChanges ){
113077 sqlite3ExpirePreparedStatements(db);
113078 sqlite3ResetInternalSchema(db, -1);
113081 /* Any deferred constraint violations have now been resolved. */
113082 db->nDeferredCons = 0;
113084 /* If one has been configured, invoke the rollback-hook callback */
113085 if( db->xRollbackCallback && (inTrans || !db->autoCommit) ){
113086 db->xRollbackCallback(db->pRollbackArg);
113091 ** Return a static string that describes the kind of error specified in the
113092 ** argument.
113094 SQLITE_PRIVATE const char *sqlite3ErrStr(int rc){
113095 static const char* const aMsg[] = {
113096 /* SQLITE_OK */ "not an error",
113097 /* SQLITE_ERROR */ "SQL logic error or missing database",
113098 /* SQLITE_INTERNAL */ 0,
113099 /* SQLITE_PERM */ "access permission denied",
113100 /* SQLITE_ABORT */ "callback requested query abort",
113101 /* SQLITE_BUSY */ "database is locked",
113102 /* SQLITE_LOCKED */ "database table is locked",
113103 /* SQLITE_NOMEM */ "out of memory",
113104 /* SQLITE_READONLY */ "attempt to write a readonly database",
113105 /* SQLITE_INTERRUPT */ "interrupted",
113106 /* SQLITE_IOERR */ "disk I/O error",
113107 /* SQLITE_CORRUPT */ "database disk image is malformed",
113108 /* SQLITE_NOTFOUND */ "unknown operation",
113109 /* SQLITE_FULL */ "database or disk is full",
113110 /* SQLITE_CANTOPEN */ "unable to open database file",
113111 /* SQLITE_PROTOCOL */ "locking protocol",
113112 /* SQLITE_EMPTY */ "table contains no data",
113113 /* SQLITE_SCHEMA */ "database schema has changed",
113114 /* SQLITE_TOOBIG */ "string or blob too big",
113115 /* SQLITE_CONSTRAINT */ "constraint failed",
113116 /* SQLITE_MISMATCH */ "datatype mismatch",
113117 /* SQLITE_MISUSE */ "library routine called out of sequence",
113118 /* SQLITE_NOLFS */ "large file support is disabled",
113119 /* SQLITE_AUTH */ "authorization denied",
113120 /* SQLITE_FORMAT */ "auxiliary database format error",
113121 /* SQLITE_RANGE */ "bind or column index out of range",
113122 /* SQLITE_NOTADB */ "file is encrypted or is not a database",
113124 rc &= 0xff;
113125 if( ALWAYS(rc>=0) && rc<(int)(sizeof(aMsg)/sizeof(aMsg[0])) && aMsg[rc]!=0 ){
113126 return aMsg[rc];
113127 }else{
113128 return "unknown error";
113133 ** This routine implements a busy callback that sleeps and tries
113134 ** again until a timeout value is reached. The timeout value is
113135 ** an integer number of milliseconds passed in as the first
113136 ** argument.
113138 static int sqliteDefaultBusyCallback(
113139 void *ptr, /* Database connection */
113140 int count /* Number of times table has been busy */
113142 #if SQLITE_OS_WIN || (defined(HAVE_USLEEP) && HAVE_USLEEP)
113143 static const u8 delays[] =
113144 { 1, 2, 5, 10, 15, 20, 25, 25, 25, 50, 50, 100 };
113145 static const u8 totals[] =
113146 { 0, 1, 3, 8, 18, 33, 53, 78, 103, 128, 178, 228 };
113147 # define NDELAY ArraySize(delays)
113148 sqlite3 *db = (sqlite3 *)ptr;
113149 int timeout = db->busyTimeout;
113150 int delay, prior;
113152 assert( count>=0 );
113153 if( count < NDELAY ){
113154 delay = delays[count];
113155 prior = totals[count];
113156 }else{
113157 delay = delays[NDELAY-1];
113158 prior = totals[NDELAY-1] + delay*(count-(NDELAY-1));
113160 if( prior + delay > timeout ){
113161 delay = timeout - prior;
113162 if( delay<=0 ) return 0;
113164 sqlite3OsSleep(db->pVfs, delay*1000);
113165 return 1;
113166 #else
113167 sqlite3 *db = (sqlite3 *)ptr;
113168 int timeout = ((sqlite3 *)ptr)->busyTimeout;
113169 if( (count+1)*1000 > timeout ){
113170 return 0;
113172 sqlite3OsSleep(db->pVfs, 1000000);
113173 return 1;
113174 #endif
113178 ** Invoke the given busy handler.
113180 ** This routine is called when an operation failed with a lock.
113181 ** If this routine returns non-zero, the lock is retried. If it
113182 ** returns 0, the operation aborts with an SQLITE_BUSY error.
113184 SQLITE_PRIVATE int sqlite3InvokeBusyHandler(BusyHandler *p){
113185 int rc;
113186 if( NEVER(p==0) || p->xFunc==0 || p->nBusy<0 ) return 0;
113187 rc = p->xFunc(p->pArg, p->nBusy);
113188 if( rc==0 ){
113189 p->nBusy = -1;
113190 }else{
113191 p->nBusy++;
113193 return rc;
113197 ** This routine sets the busy callback for an Sqlite database to the
113198 ** given callback function with the given argument.
113200 SQLITE_API int sqlite3_busy_handler(
113201 sqlite3 *db,
113202 int (*xBusy)(void*,int),
113203 void *pArg
113205 sqlite3_mutex_enter(db->mutex);
113206 db->busyHandler.xFunc = xBusy;
113207 db->busyHandler.pArg = pArg;
113208 db->busyHandler.nBusy = 0;
113209 sqlite3_mutex_leave(db->mutex);
113210 return SQLITE_OK;
113213 #ifndef SQLITE_OMIT_PROGRESS_CALLBACK
113215 ** This routine sets the progress callback for an Sqlite database to the
113216 ** given callback function with the given argument. The progress callback will
113217 ** be invoked every nOps opcodes.
113219 SQLITE_API void sqlite3_progress_handler(
113220 sqlite3 *db,
113221 int nOps,
113222 int (*xProgress)(void*),
113223 void *pArg
113225 sqlite3_mutex_enter(db->mutex);
113226 if( nOps>0 ){
113227 db->xProgress = xProgress;
113228 db->nProgressOps = nOps;
113229 db->pProgressArg = pArg;
113230 }else{
113231 db->xProgress = 0;
113232 db->nProgressOps = 0;
113233 db->pProgressArg = 0;
113235 sqlite3_mutex_leave(db->mutex);
113237 #endif
113241 ** This routine installs a default busy handler that waits for the
113242 ** specified number of milliseconds before returning 0.
113244 SQLITE_API int sqlite3_busy_timeout(sqlite3 *db, int ms){
113245 if( ms>0 ){
113246 db->busyTimeout = ms;
113247 sqlite3_busy_handler(db, sqliteDefaultBusyCallback, (void*)db);
113248 }else{
113249 sqlite3_busy_handler(db, 0, 0);
113251 return SQLITE_OK;
113255 ** Cause any pending operation to stop at its earliest opportunity.
113257 SQLITE_API void sqlite3_interrupt(sqlite3 *db){
113258 db->u1.isInterrupted = 1;
113263 ** This function is exactly the same as sqlite3_create_function(), except
113264 ** that it is designed to be called by internal code. The difference is
113265 ** that if a malloc() fails in sqlite3_create_function(), an error code
113266 ** is returned and the mallocFailed flag cleared.
113268 SQLITE_PRIVATE int sqlite3CreateFunc(
113269 sqlite3 *db,
113270 const char *zFunctionName,
113271 int nArg,
113272 int enc,
113273 void *pUserData,
113274 void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
113275 void (*xStep)(sqlite3_context*,int,sqlite3_value **),
113276 void (*xFinal)(sqlite3_context*),
113277 FuncDestructor *pDestructor
113279 FuncDef *p;
113280 int nName;
113282 assert( sqlite3_mutex_held(db->mutex) );
113283 if( zFunctionName==0 ||
113284 (xFunc && (xFinal || xStep)) ||
113285 (!xFunc && (xFinal && !xStep)) ||
113286 (!xFunc && (!xFinal && xStep)) ||
113287 (nArg<-1 || nArg>SQLITE_MAX_FUNCTION_ARG) ||
113288 (255<(nName = sqlite3Strlen30( zFunctionName))) ){
113289 return SQLITE_MISUSE_BKPT;
113292 #ifndef SQLITE_OMIT_UTF16
113293 /* If SQLITE_UTF16 is specified as the encoding type, transform this
113294 ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
113295 ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
113297 ** If SQLITE_ANY is specified, add three versions of the function
113298 ** to the hash table.
113300 if( enc==SQLITE_UTF16 ){
113301 enc = SQLITE_UTF16NATIVE;
113302 }else if( enc==SQLITE_ANY ){
113303 int rc;
113304 rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
113305 pUserData, xFunc, xStep, xFinal, pDestructor);
113306 if( rc==SQLITE_OK ){
113307 rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
113308 pUserData, xFunc, xStep, xFinal, pDestructor);
113310 if( rc!=SQLITE_OK ){
113311 return rc;
113313 enc = SQLITE_UTF16BE;
113315 #else
113316 enc = SQLITE_UTF8;
113317 #endif
113319 /* Check if an existing function is being overridden or deleted. If so,
113320 ** and there are active VMs, then return SQLITE_BUSY. If a function
113321 ** is being overridden/deleted but there are no active VMs, allow the
113322 ** operation to continue but invalidate all precompiled statements.
113324 p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0);
113325 if( p && p->iPrefEnc==enc && p->nArg==nArg ){
113326 if( db->activeVdbeCnt ){
113327 sqlite3Error(db, SQLITE_BUSY,
113328 "unable to delete/modify user-function due to active statements");
113329 assert( !db->mallocFailed );
113330 return SQLITE_BUSY;
113331 }else{
113332 sqlite3ExpirePreparedStatements(db);
113336 p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
113337 assert(p || db->mallocFailed);
113338 if( !p ){
113339 return SQLITE_NOMEM;
113342 /* If an older version of the function with a configured destructor is
113343 ** being replaced invoke the destructor function here. */
113344 functionDestroy(db, p);
113346 if( pDestructor ){
113347 pDestructor->nRef++;
113349 p->pDestructor = pDestructor;
113350 p->flags = 0;
113351 p->xFunc = xFunc;
113352 p->xStep = xStep;
113353 p->xFinalize = xFinal;
113354 p->pUserData = pUserData;
113355 p->nArg = (u16)nArg;
113356 return SQLITE_OK;
113360 ** Create new user functions.
113362 SQLITE_API int sqlite3_create_function(
113363 sqlite3 *db,
113364 const char *zFunc,
113365 int nArg,
113366 int enc,
113367 void *p,
113368 void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
113369 void (*xStep)(sqlite3_context*,int,sqlite3_value **),
113370 void (*xFinal)(sqlite3_context*)
113372 return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep,
113373 xFinal, 0);
113376 SQLITE_API int sqlite3_create_function_v2(
113377 sqlite3 *db,
113378 const char *zFunc,
113379 int nArg,
113380 int enc,
113381 void *p,
113382 void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
113383 void (*xStep)(sqlite3_context*,int,sqlite3_value **),
113384 void (*xFinal)(sqlite3_context*),
113385 void (*xDestroy)(void *)
113387 int rc = SQLITE_ERROR;
113388 FuncDestructor *pArg = 0;
113389 sqlite3_mutex_enter(db->mutex);
113390 if( xDestroy ){
113391 pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
113392 if( !pArg ){
113393 xDestroy(p);
113394 goto out;
113396 pArg->xDestroy = xDestroy;
113397 pArg->pUserData = p;
113399 rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg);
113400 if( pArg && pArg->nRef==0 ){
113401 assert( rc!=SQLITE_OK );
113402 xDestroy(p);
113403 sqlite3DbFree(db, pArg);
113407 rc = sqlite3ApiExit(db, rc);
113408 sqlite3_mutex_leave(db->mutex);
113409 return rc;
113412 #ifndef SQLITE_OMIT_UTF16
113413 SQLITE_API int sqlite3_create_function16(
113414 sqlite3 *db,
113415 const void *zFunctionName,
113416 int nArg,
113417 int eTextRep,
113418 void *p,
113419 void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
113420 void (*xStep)(sqlite3_context*,int,sqlite3_value**),
113421 void (*xFinal)(sqlite3_context*)
113423 int rc;
113424 char *zFunc8;
113425 sqlite3_mutex_enter(db->mutex);
113426 assert( !db->mallocFailed );
113427 zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
113428 rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
113429 sqlite3DbFree(db, zFunc8);
113430 rc = sqlite3ApiExit(db, rc);
113431 sqlite3_mutex_leave(db->mutex);
113432 return rc;
113434 #endif
113438 ** Declare that a function has been overloaded by a virtual table.
113440 ** If the function already exists as a regular global function, then
113441 ** this routine is a no-op. If the function does not exist, then create
113442 ** a new one that always throws a run-time error.
113444 ** When virtual tables intend to provide an overloaded function, they
113445 ** should call this routine to make sure the global function exists.
113446 ** A global function must exist in order for name resolution to work
113447 ** properly.
113449 SQLITE_API int sqlite3_overload_function(
113450 sqlite3 *db,
113451 const char *zName,
113452 int nArg
113454 int nName = sqlite3Strlen30(zName);
113455 int rc = SQLITE_OK;
113456 sqlite3_mutex_enter(db->mutex);
113457 if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
113458 rc = sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
113459 0, sqlite3InvalidFunction, 0, 0, 0);
113461 rc = sqlite3ApiExit(db, rc);
113462 sqlite3_mutex_leave(db->mutex);
113463 return rc;
113466 #ifndef SQLITE_OMIT_TRACE
113468 ** Register a trace function. The pArg from the previously registered trace
113469 ** is returned.
113471 ** A NULL trace function means that no tracing is executes. A non-NULL
113472 ** trace is a pointer to a function that is invoked at the start of each
113473 ** SQL statement.
113475 SQLITE_API void *sqlite3_trace(sqlite3 *db, void (*xTrace)(void*,const char*), void *pArg){
113476 void *pOld;
113477 sqlite3_mutex_enter(db->mutex);
113478 pOld = db->pTraceArg;
113479 db->xTrace = xTrace;
113480 db->pTraceArg = pArg;
113481 sqlite3_mutex_leave(db->mutex);
113482 return pOld;
113485 ** Register a profile function. The pArg from the previously registered
113486 ** profile function is returned.
113488 ** A NULL profile function means that no profiling is executes. A non-NULL
113489 ** profile is a pointer to a function that is invoked at the conclusion of
113490 ** each SQL statement that is run.
113492 SQLITE_API void *sqlite3_profile(
113493 sqlite3 *db,
113494 void (*xProfile)(void*,const char*,sqlite_uint64),
113495 void *pArg
113497 void *pOld;
113498 sqlite3_mutex_enter(db->mutex);
113499 pOld = db->pProfileArg;
113500 db->xProfile = xProfile;
113501 db->pProfileArg = pArg;
113502 sqlite3_mutex_leave(db->mutex);
113503 return pOld;
113505 #endif /* SQLITE_OMIT_TRACE */
113507 /*** EXPERIMENTAL ***
113509 ** Register a function to be invoked when a transaction comments.
113510 ** If the invoked function returns non-zero, then the commit becomes a
113511 ** rollback.
113513 SQLITE_API void *sqlite3_commit_hook(
113514 sqlite3 *db, /* Attach the hook to this database */
113515 int (*xCallback)(void*), /* Function to invoke on each commit */
113516 void *pArg /* Argument to the function */
113518 void *pOld;
113519 sqlite3_mutex_enter(db->mutex);
113520 pOld = db->pCommitArg;
113521 db->xCommitCallback = xCallback;
113522 db->pCommitArg = pArg;
113523 sqlite3_mutex_leave(db->mutex);
113524 return pOld;
113528 ** Register a callback to be invoked each time a row is updated,
113529 ** inserted or deleted using this database connection.
113531 SQLITE_API void *sqlite3_update_hook(
113532 sqlite3 *db, /* Attach the hook to this database */
113533 void (*xCallback)(void*,int,char const *,char const *,sqlite_int64),
113534 void *pArg /* Argument to the function */
113536 void *pRet;
113537 sqlite3_mutex_enter(db->mutex);
113538 pRet = db->pUpdateArg;
113539 db->xUpdateCallback = xCallback;
113540 db->pUpdateArg = pArg;
113541 sqlite3_mutex_leave(db->mutex);
113542 return pRet;
113546 ** Register a callback to be invoked each time a transaction is rolled
113547 ** back by this database connection.
113549 SQLITE_API void *sqlite3_rollback_hook(
113550 sqlite3 *db, /* Attach the hook to this database */
113551 void (*xCallback)(void*), /* Callback function */
113552 void *pArg /* Argument to the function */
113554 void *pRet;
113555 sqlite3_mutex_enter(db->mutex);
113556 pRet = db->pRollbackArg;
113557 db->xRollbackCallback = xCallback;
113558 db->pRollbackArg = pArg;
113559 sqlite3_mutex_leave(db->mutex);
113560 return pRet;
113563 #ifndef SQLITE_OMIT_WAL
113565 ** The sqlite3_wal_hook() callback registered by sqlite3_wal_autocheckpoint().
113566 ** Invoke sqlite3_wal_checkpoint if the number of frames in the log file
113567 ** is greater than sqlite3.pWalArg cast to an integer (the value configured by
113568 ** wal_autocheckpoint()).
113570 SQLITE_PRIVATE int sqlite3WalDefaultHook(
113571 void *pClientData, /* Argument */
113572 sqlite3 *db, /* Connection */
113573 const char *zDb, /* Database */
113574 int nFrame /* Size of WAL */
113576 if( nFrame>=SQLITE_PTR_TO_INT(pClientData) ){
113577 sqlite3BeginBenignMalloc();
113578 sqlite3_wal_checkpoint(db, zDb);
113579 sqlite3EndBenignMalloc();
113581 return SQLITE_OK;
113583 #endif /* SQLITE_OMIT_WAL */
113586 ** Configure an sqlite3_wal_hook() callback to automatically checkpoint
113587 ** a database after committing a transaction if there are nFrame or
113588 ** more frames in the log file. Passing zero or a negative value as the
113589 ** nFrame parameter disables automatic checkpoints entirely.
113591 ** The callback registered by this function replaces any existing callback
113592 ** registered using sqlite3_wal_hook(). Likewise, registering a callback
113593 ** using sqlite3_wal_hook() disables the automatic checkpoint mechanism
113594 ** configured by this function.
113596 SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
113597 #ifdef SQLITE_OMIT_WAL
113598 UNUSED_PARAMETER(db);
113599 UNUSED_PARAMETER(nFrame);
113600 #else
113601 if( nFrame>0 ){
113602 sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
113603 }else{
113604 sqlite3_wal_hook(db, 0, 0);
113606 #endif
113607 return SQLITE_OK;
113611 ** Register a callback to be invoked each time a transaction is written
113612 ** into the write-ahead-log by this database connection.
113614 SQLITE_API void *sqlite3_wal_hook(
113615 sqlite3 *db, /* Attach the hook to this db handle */
113616 int(*xCallback)(void *, sqlite3*, const char*, int),
113617 void *pArg /* First argument passed to xCallback() */
113619 #ifndef SQLITE_OMIT_WAL
113620 void *pRet;
113621 sqlite3_mutex_enter(db->mutex);
113622 pRet = db->pWalArg;
113623 db->xWalCallback = xCallback;
113624 db->pWalArg = pArg;
113625 sqlite3_mutex_leave(db->mutex);
113626 return pRet;
113627 #else
113628 return 0;
113629 #endif
113633 ** Checkpoint database zDb.
113635 SQLITE_API int sqlite3_wal_checkpoint_v2(
113636 sqlite3 *db, /* Database handle */
113637 const char *zDb, /* Name of attached database (or NULL) */
113638 int eMode, /* SQLITE_CHECKPOINT_* value */
113639 int *pnLog, /* OUT: Size of WAL log in frames */
113640 int *pnCkpt /* OUT: Total number of frames checkpointed */
113642 #ifdef SQLITE_OMIT_WAL
113643 return SQLITE_OK;
113644 #else
113645 int rc; /* Return code */
113646 int iDb = SQLITE_MAX_ATTACHED; /* sqlite3.aDb[] index of db to checkpoint */
113648 /* Initialize the output variables to -1 in case an error occurs. */
113649 if( pnLog ) *pnLog = -1;
113650 if( pnCkpt ) *pnCkpt = -1;
113652 assert( SQLITE_CHECKPOINT_FULL>SQLITE_CHECKPOINT_PASSIVE );
113653 assert( SQLITE_CHECKPOINT_FULL<SQLITE_CHECKPOINT_RESTART );
113654 assert( SQLITE_CHECKPOINT_PASSIVE+2==SQLITE_CHECKPOINT_RESTART );
113655 if( eMode<SQLITE_CHECKPOINT_PASSIVE || eMode>SQLITE_CHECKPOINT_RESTART ){
113656 return SQLITE_MISUSE;
113659 sqlite3_mutex_enter(db->mutex);
113660 if( zDb && zDb[0] ){
113661 iDb = sqlite3FindDbName(db, zDb);
113663 if( iDb<0 ){
113664 rc = SQLITE_ERROR;
113665 sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb);
113666 }else{
113667 rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt);
113668 sqlite3Error(db, rc, 0);
113670 rc = sqlite3ApiExit(db, rc);
113671 sqlite3_mutex_leave(db->mutex);
113672 return rc;
113673 #endif
113678 ** Checkpoint database zDb. If zDb is NULL, or if the buffer zDb points
113679 ** to contains a zero-length string, all attached databases are
113680 ** checkpointed.
113682 SQLITE_API int sqlite3_wal_checkpoint(sqlite3 *db, const char *zDb){
113683 return sqlite3_wal_checkpoint_v2(db, zDb, SQLITE_CHECKPOINT_PASSIVE, 0, 0);
113686 #ifndef SQLITE_OMIT_WAL
113688 ** Run a checkpoint on database iDb. This is a no-op if database iDb is
113689 ** not currently open in WAL mode.
113691 ** If a transaction is open on the database being checkpointed, this
113692 ** function returns SQLITE_LOCKED and a checkpoint is not attempted. If
113693 ** an error occurs while running the checkpoint, an SQLite error code is
113694 ** returned (i.e. SQLITE_IOERR). Otherwise, SQLITE_OK.
113696 ** The mutex on database handle db should be held by the caller. The mutex
113697 ** associated with the specific b-tree being checkpointed is taken by
113698 ** this function while the checkpoint is running.
113700 ** If iDb is passed SQLITE_MAX_ATTACHED, then all attached databases are
113701 ** checkpointed. If an error is encountered it is returned immediately -
113702 ** no attempt is made to checkpoint any remaining databases.
113704 ** Parameter eMode is one of SQLITE_CHECKPOINT_PASSIVE, FULL or RESTART.
113706 SQLITE_PRIVATE int sqlite3Checkpoint(sqlite3 *db, int iDb, int eMode, int *pnLog, int *pnCkpt){
113707 int rc = SQLITE_OK; /* Return code */
113708 int i; /* Used to iterate through attached dbs */
113709 int bBusy = 0; /* True if SQLITE_BUSY has been encountered */
113711 assert( sqlite3_mutex_held(db->mutex) );
113712 assert( !pnLog || *pnLog==-1 );
113713 assert( !pnCkpt || *pnCkpt==-1 );
113715 for(i=0; i<db->nDb && rc==SQLITE_OK; i++){
113716 if( i==iDb || iDb==SQLITE_MAX_ATTACHED ){
113717 rc = sqlite3BtreeCheckpoint(db->aDb[i].pBt, eMode, pnLog, pnCkpt);
113718 pnLog = 0;
113719 pnCkpt = 0;
113720 if( rc==SQLITE_BUSY ){
113721 bBusy = 1;
113722 rc = SQLITE_OK;
113727 return (rc==SQLITE_OK && bBusy) ? SQLITE_BUSY : rc;
113729 #endif /* SQLITE_OMIT_WAL */
113732 ** This function returns true if main-memory should be used instead of
113733 ** a temporary file for transient pager files and statement journals.
113734 ** The value returned depends on the value of db->temp_store (runtime
113735 ** parameter) and the compile time value of SQLITE_TEMP_STORE. The
113736 ** following table describes the relationship between these two values
113737 ** and this functions return value.
113739 ** SQLITE_TEMP_STORE db->temp_store Location of temporary database
113740 ** ----------------- -------------- ------------------------------
113741 ** 0 any file (return 0)
113742 ** 1 1 file (return 0)
113743 ** 1 2 memory (return 1)
113744 ** 1 0 file (return 0)
113745 ** 2 1 file (return 0)
113746 ** 2 2 memory (return 1)
113747 ** 2 0 memory (return 1)
113748 ** 3 any memory (return 1)
113750 SQLITE_PRIVATE int sqlite3TempInMemory(const sqlite3 *db){
113751 #if SQLITE_TEMP_STORE==1
113752 return ( db->temp_store==2 );
113753 #endif
113754 #if SQLITE_TEMP_STORE==2
113755 return ( db->temp_store!=1 );
113756 #endif
113757 #if SQLITE_TEMP_STORE==3
113758 return 1;
113759 #endif
113760 #if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3
113761 return 0;
113762 #endif
113766 ** Return UTF-8 encoded English language explanation of the most recent
113767 ** error.
113769 SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){
113770 const char *z;
113771 if( !db ){
113772 return sqlite3ErrStr(SQLITE_NOMEM);
113774 if( !sqlite3SafetyCheckSickOrOk(db) ){
113775 return sqlite3ErrStr(SQLITE_MISUSE_BKPT);
113777 sqlite3_mutex_enter(db->mutex);
113778 if( db->mallocFailed ){
113779 z = sqlite3ErrStr(SQLITE_NOMEM);
113780 }else{
113781 z = (char*)sqlite3_value_text(db->pErr);
113782 assert( !db->mallocFailed );
113783 if( z==0 ){
113784 z = sqlite3ErrStr(db->errCode);
113787 sqlite3_mutex_leave(db->mutex);
113788 return z;
113791 #ifndef SQLITE_OMIT_UTF16
113793 ** Return UTF-16 encoded English language explanation of the most recent
113794 ** error.
113796 SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){
113797 static const u16 outOfMem[] = {
113798 'o', 'u', 't', ' ', 'o', 'f', ' ', 'm', 'e', 'm', 'o', 'r', 'y', 0
113800 static const u16 misuse[] = {
113801 'l', 'i', 'b', 'r', 'a', 'r', 'y', ' ',
113802 'r', 'o', 'u', 't', 'i', 'n', 'e', ' ',
113803 'c', 'a', 'l', 'l', 'e', 'd', ' ',
113804 'o', 'u', 't', ' ',
113805 'o', 'f', ' ',
113806 's', 'e', 'q', 'u', 'e', 'n', 'c', 'e', 0
113809 const void *z;
113810 if( !db ){
113811 return (void *)outOfMem;
113813 if( !sqlite3SafetyCheckSickOrOk(db) ){
113814 return (void *)misuse;
113816 sqlite3_mutex_enter(db->mutex);
113817 if( db->mallocFailed ){
113818 z = (void *)outOfMem;
113819 }else{
113820 z = sqlite3_value_text16(db->pErr);
113821 if( z==0 ){
113822 sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),
113823 SQLITE_UTF8, SQLITE_STATIC);
113824 z = sqlite3_value_text16(db->pErr);
113826 /* A malloc() may have failed within the call to sqlite3_value_text16()
113827 ** above. If this is the case, then the db->mallocFailed flag needs to
113828 ** be cleared before returning. Do this directly, instead of via
113829 ** sqlite3ApiExit(), to avoid setting the database handle error message.
113831 db->mallocFailed = 0;
113833 sqlite3_mutex_leave(db->mutex);
113834 return z;
113836 #endif /* SQLITE_OMIT_UTF16 */
113839 ** Return the most recent error code generated by an SQLite routine. If NULL is
113840 ** passed to this function, we assume a malloc() failed during sqlite3_open().
113842 SQLITE_API int sqlite3_errcode(sqlite3 *db){
113843 if( db && !sqlite3SafetyCheckSickOrOk(db) ){
113844 return SQLITE_MISUSE_BKPT;
113846 if( !db || db->mallocFailed ){
113847 return SQLITE_NOMEM;
113849 return db->errCode & db->errMask;
113851 SQLITE_API int sqlite3_extended_errcode(sqlite3 *db){
113852 if( db && !sqlite3SafetyCheckSickOrOk(db) ){
113853 return SQLITE_MISUSE_BKPT;
113855 if( !db || db->mallocFailed ){
113856 return SQLITE_NOMEM;
113858 return db->errCode;
113862 ** Create a new collating function for database "db". The name is zName
113863 ** and the encoding is enc.
113865 static int createCollation(
113866 sqlite3* db,
113867 const char *zName,
113868 u8 enc,
113869 void* pCtx,
113870 int(*xCompare)(void*,int,const void*,int,const void*),
113871 void(*xDel)(void*)
113873 CollSeq *pColl;
113874 int enc2;
113875 int nName = sqlite3Strlen30(zName);
113877 assert( sqlite3_mutex_held(db->mutex) );
113879 /* If SQLITE_UTF16 is specified as the encoding type, transform this
113880 ** to one of SQLITE_UTF16LE or SQLITE_UTF16BE using the
113881 ** SQLITE_UTF16NATIVE macro. SQLITE_UTF16 is not used internally.
113883 enc2 = enc;
113884 testcase( enc2==SQLITE_UTF16 );
113885 testcase( enc2==SQLITE_UTF16_ALIGNED );
113886 if( enc2==SQLITE_UTF16 || enc2==SQLITE_UTF16_ALIGNED ){
113887 enc2 = SQLITE_UTF16NATIVE;
113889 if( enc2<SQLITE_UTF8 || enc2>SQLITE_UTF16BE ){
113890 return SQLITE_MISUSE_BKPT;
113893 /* Check if this call is removing or replacing an existing collation
113894 ** sequence. If so, and there are active VMs, return busy. If there
113895 ** are no active VMs, invalidate any pre-compiled statements.
113897 pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0);
113898 if( pColl && pColl->xCmp ){
113899 if( db->activeVdbeCnt ){
113900 sqlite3Error(db, SQLITE_BUSY,
113901 "unable to delete/modify collation sequence due to active statements");
113902 return SQLITE_BUSY;
113904 sqlite3ExpirePreparedStatements(db);
113906 /* If collation sequence pColl was created directly by a call to
113907 ** sqlite3_create_collation, and not generated by synthCollSeq(),
113908 ** then any copies made by synthCollSeq() need to be invalidated.
113909 ** Also, collation destructor - CollSeq.xDel() - function may need
113910 ** to be called.
113912 if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
113913 CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
113914 int j;
113915 for(j=0; j<3; j++){
113916 CollSeq *p = &aColl[j];
113917 if( p->enc==pColl->enc ){
113918 if( p->xDel ){
113919 p->xDel(p->pUser);
113921 p->xCmp = 0;
113927 pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 1);
113928 if( pColl==0 ) return SQLITE_NOMEM;
113929 pColl->xCmp = xCompare;
113930 pColl->pUser = pCtx;
113931 pColl->xDel = xDel;
113932 pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
113933 sqlite3Error(db, SQLITE_OK, 0);
113934 return SQLITE_OK;
113939 ** This array defines hard upper bounds on limit values. The
113940 ** initializer must be kept in sync with the SQLITE_LIMIT_*
113941 ** #defines in sqlite3.h.
113943 static const int aHardLimit[] = {
113944 SQLITE_MAX_LENGTH,
113945 SQLITE_MAX_SQL_LENGTH,
113946 SQLITE_MAX_COLUMN,
113947 SQLITE_MAX_EXPR_DEPTH,
113948 SQLITE_MAX_COMPOUND_SELECT,
113949 SQLITE_MAX_VDBE_OP,
113950 SQLITE_MAX_FUNCTION_ARG,
113951 SQLITE_MAX_ATTACHED,
113952 SQLITE_MAX_LIKE_PATTERN_LENGTH,
113953 SQLITE_MAX_VARIABLE_NUMBER,
113954 SQLITE_MAX_TRIGGER_DEPTH,
113958 ** Make sure the hard limits are set to reasonable values
113960 #if SQLITE_MAX_LENGTH<100
113961 # error SQLITE_MAX_LENGTH must be at least 100
113962 #endif
113963 #if SQLITE_MAX_SQL_LENGTH<100
113964 # error SQLITE_MAX_SQL_LENGTH must be at least 100
113965 #endif
113966 #if SQLITE_MAX_SQL_LENGTH>SQLITE_MAX_LENGTH
113967 # error SQLITE_MAX_SQL_LENGTH must not be greater than SQLITE_MAX_LENGTH
113968 #endif
113969 #if SQLITE_MAX_COMPOUND_SELECT<2
113970 # error SQLITE_MAX_COMPOUND_SELECT must be at least 2
113971 #endif
113972 #if SQLITE_MAX_VDBE_OP<40
113973 # error SQLITE_MAX_VDBE_OP must be at least 40
113974 #endif
113975 #if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
113976 # error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
113977 #endif
113978 #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62
113979 # error SQLITE_MAX_ATTACHED must be between 0 and 62
113980 #endif
113981 #if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
113982 # error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
113983 #endif
113984 #if SQLITE_MAX_COLUMN>32767
113985 # error SQLITE_MAX_COLUMN must not exceed 32767
113986 #endif
113987 #if SQLITE_MAX_TRIGGER_DEPTH<1
113988 # error SQLITE_MAX_TRIGGER_DEPTH must be at least 1
113989 #endif
113993 ** Change the value of a limit. Report the old value.
113994 ** If an invalid limit index is supplied, report -1.
113995 ** Make no changes but still report the old value if the
113996 ** new limit is negative.
113998 ** A new lower limit does not shrink existing constructs.
113999 ** It merely prevents new constructs that exceed the limit
114000 ** from forming.
114002 SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
114003 int oldLimit;
114006 /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
114007 ** there is a hard upper bound set at compile-time by a C preprocessor
114008 ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
114009 ** "_MAX_".)
114011 assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH );
114012 assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH );
114013 assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN );
114014 assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH );
114015 assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT);
114016 assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP );
114017 assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG );
114018 assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED );
114019 assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]==
114020 SQLITE_MAX_LIKE_PATTERN_LENGTH );
114021 assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
114022 assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
114023 assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) );
114026 if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
114027 return -1;
114029 oldLimit = db->aLimit[limitId];
114030 if( newLimit>=0 ){ /* IMP: R-52476-28732 */
114031 if( newLimit>aHardLimit[limitId] ){
114032 newLimit = aHardLimit[limitId]; /* IMP: R-51463-25634 */
114034 db->aLimit[limitId] = newLimit;
114036 return oldLimit; /* IMP: R-53341-35419 */
114040 ** This function is used to parse both URIs and non-URI filenames passed by the
114041 ** user to API functions sqlite3_open() or sqlite3_open_v2(), and for database
114042 ** URIs specified as part of ATTACH statements.
114044 ** The first argument to this function is the name of the VFS to use (or
114045 ** a NULL to signify the default VFS) if the URI does not contain a "vfs=xxx"
114046 ** query parameter. The second argument contains the URI (or non-URI filename)
114047 ** itself. When this function is called the *pFlags variable should contain
114048 ** the default flags to open the database handle with. The value stored in
114049 ** *pFlags may be updated before returning if the URI filename contains
114050 ** "cache=xxx" or "mode=xxx" query parameters.
114052 ** If successful, SQLITE_OK is returned. In this case *ppVfs is set to point to
114053 ** the VFS that should be used to open the database file. *pzFile is set to
114054 ** point to a buffer containing the name of the file to open. It is the
114055 ** responsibility of the caller to eventually call sqlite3_free() to release
114056 ** this buffer.
114058 ** If an error occurs, then an SQLite error code is returned and *pzErrMsg
114059 ** may be set to point to a buffer containing an English language error
114060 ** message. It is the responsibility of the caller to eventually release
114061 ** this buffer by calling sqlite3_free().
114063 SQLITE_PRIVATE int sqlite3ParseUri(
114064 const char *zDefaultVfs, /* VFS to use if no "vfs=xxx" query option */
114065 const char *zUri, /* Nul-terminated URI to parse */
114066 unsigned int *pFlags, /* IN/OUT: SQLITE_OPEN_XXX flags */
114067 sqlite3_vfs **ppVfs, /* OUT: VFS to use */
114068 char **pzFile, /* OUT: Filename component of URI */
114069 char **pzErrMsg /* OUT: Error message (if rc!=SQLITE_OK) */
114071 int rc = SQLITE_OK;
114072 unsigned int flags = *pFlags;
114073 const char *zVfs = zDefaultVfs;
114074 char *zFile;
114075 char c;
114076 int nUri = sqlite3Strlen30(zUri);
114078 assert( *pzErrMsg==0 );
114080 if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri)
114081 && nUri>=5 && memcmp(zUri, "file:", 5)==0
114083 char *zOpt;
114084 int eState; /* Parser state when parsing URI */
114085 int iIn; /* Input character index */
114086 int iOut = 0; /* Output character index */
114087 int nByte = nUri+2; /* Bytes of space to allocate */
114089 /* Make sure the SQLITE_OPEN_URI flag is set to indicate to the VFS xOpen
114090 ** method that there may be extra parameters following the file-name. */
114091 flags |= SQLITE_OPEN_URI;
114093 for(iIn=0; iIn<nUri; iIn++) nByte += (zUri[iIn]=='&');
114094 zFile = sqlite3_malloc(nByte);
114095 if( !zFile ) return SQLITE_NOMEM;
114097 /* Discard the scheme and authority segments of the URI. */
114098 if( zUri[5]=='/' && zUri[6]=='/' ){
114099 iIn = 7;
114100 while( zUri[iIn] && zUri[iIn]!='/' ) iIn++;
114102 if( iIn!=7 && (iIn!=16 || memcmp("localhost", &zUri[7], 9)) ){
114103 *pzErrMsg = sqlite3_mprintf("invalid uri authority: %.*s",
114104 iIn-7, &zUri[7]);
114105 rc = SQLITE_ERROR;
114106 goto parse_uri_out;
114108 }else{
114109 iIn = 5;
114112 /* Copy the filename and any query parameters into the zFile buffer.
114113 ** Decode %HH escape codes along the way.
114115 ** Within this loop, variable eState may be set to 0, 1 or 2, depending
114116 ** on the parsing context. As follows:
114118 ** 0: Parsing file-name.
114119 ** 1: Parsing name section of a name=value query parameter.
114120 ** 2: Parsing value section of a name=value query parameter.
114122 eState = 0;
114123 while( (c = zUri[iIn])!=0 && c!='#' ){
114124 iIn++;
114125 if( c=='%'
114126 && sqlite3Isxdigit(zUri[iIn])
114127 && sqlite3Isxdigit(zUri[iIn+1])
114129 int octet = (sqlite3HexToInt(zUri[iIn++]) << 4);
114130 octet += sqlite3HexToInt(zUri[iIn++]);
114132 assert( octet>=0 && octet<256 );
114133 if( octet==0 ){
114134 /* This branch is taken when "%00" appears within the URI. In this
114135 ** case we ignore all text in the remainder of the path, name or
114136 ** value currently being parsed. So ignore the current character
114137 ** and skip to the next "?", "=" or "&", as appropriate. */
114138 while( (c = zUri[iIn])!=0 && c!='#'
114139 && (eState!=0 || c!='?')
114140 && (eState!=1 || (c!='=' && c!='&'))
114141 && (eState!=2 || c!='&')
114143 iIn++;
114145 continue;
114147 c = octet;
114148 }else if( eState==1 && (c=='&' || c=='=') ){
114149 if( zFile[iOut-1]==0 ){
114150 /* An empty option name. Ignore this option altogether. */
114151 while( zUri[iIn] && zUri[iIn]!='#' && zUri[iIn-1]!='&' ) iIn++;
114152 continue;
114154 if( c=='&' ){
114155 zFile[iOut++] = '\0';
114156 }else{
114157 eState = 2;
114159 c = 0;
114160 }else if( (eState==0 && c=='?') || (eState==2 && c=='&') ){
114161 c = 0;
114162 eState = 1;
114164 zFile[iOut++] = c;
114166 if( eState==1 ) zFile[iOut++] = '\0';
114167 zFile[iOut++] = '\0';
114168 zFile[iOut++] = '\0';
114170 /* Check if there were any options specified that should be interpreted
114171 ** here. Options that are interpreted here include "vfs" and those that
114172 ** correspond to flags that may be passed to the sqlite3_open_v2()
114173 ** method. */
114174 zOpt = &zFile[sqlite3Strlen30(zFile)+1];
114175 while( zOpt[0] ){
114176 int nOpt = sqlite3Strlen30(zOpt);
114177 char *zVal = &zOpt[nOpt+1];
114178 int nVal = sqlite3Strlen30(zVal);
114180 if( nOpt==3 && memcmp("vfs", zOpt, 3)==0 ){
114181 zVfs = zVal;
114182 }else{
114183 struct OpenMode {
114184 const char *z;
114185 int mode;
114186 } *aMode = 0;
114187 char *zModeType = 0;
114188 int mask = 0;
114189 int limit = 0;
114191 if( nOpt==5 && memcmp("cache", zOpt, 5)==0 ){
114192 static struct OpenMode aCacheMode[] = {
114193 { "shared", SQLITE_OPEN_SHAREDCACHE },
114194 { "private", SQLITE_OPEN_PRIVATECACHE },
114195 { 0, 0 }
114198 mask = SQLITE_OPEN_SHAREDCACHE|SQLITE_OPEN_PRIVATECACHE;
114199 aMode = aCacheMode;
114200 limit = mask;
114201 zModeType = "cache";
114203 if( nOpt==4 && memcmp("mode", zOpt, 4)==0 ){
114204 static struct OpenMode aOpenMode[] = {
114205 { "ro", SQLITE_OPEN_READONLY },
114206 { "rw", SQLITE_OPEN_READWRITE },
114207 { "rwc", SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE },
114208 { 0, 0 }
114211 mask = SQLITE_OPEN_READONLY|SQLITE_OPEN_READWRITE|SQLITE_OPEN_CREATE;
114212 aMode = aOpenMode;
114213 limit = mask & flags;
114214 zModeType = "access";
114217 if( aMode ){
114218 int i;
114219 int mode = 0;
114220 for(i=0; aMode[i].z; i++){
114221 const char *z = aMode[i].z;
114222 if( nVal==sqlite3Strlen30(z) && 0==memcmp(zVal, z, nVal) ){
114223 mode = aMode[i].mode;
114224 break;
114227 if( mode==0 ){
114228 *pzErrMsg = sqlite3_mprintf("no such %s mode: %s", zModeType, zVal);
114229 rc = SQLITE_ERROR;
114230 goto parse_uri_out;
114232 if( mode>limit ){
114233 *pzErrMsg = sqlite3_mprintf("%s mode not allowed: %s",
114234 zModeType, zVal);
114235 rc = SQLITE_PERM;
114236 goto parse_uri_out;
114238 flags = (flags & ~mask) | mode;
114242 zOpt = &zVal[nVal+1];
114245 }else{
114246 zFile = sqlite3_malloc(nUri+2);
114247 if( !zFile ) return SQLITE_NOMEM;
114248 memcpy(zFile, zUri, nUri);
114249 zFile[nUri] = '\0';
114250 zFile[nUri+1] = '\0';
114253 *ppVfs = sqlite3_vfs_find(zVfs);
114254 if( *ppVfs==0 ){
114255 *pzErrMsg = sqlite3_mprintf("no such vfs: %s", zVfs);
114256 rc = SQLITE_ERROR;
114258 parse_uri_out:
114259 if( rc!=SQLITE_OK ){
114260 sqlite3_free(zFile);
114261 zFile = 0;
114263 *pFlags = flags;
114264 *pzFile = zFile;
114265 return rc;
114270 ** This routine does the work of opening a database on behalf of
114271 ** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
114272 ** is UTF-8 encoded.
114274 static int openDatabase(
114275 const char *zFilename, /* Database filename UTF-8 encoded */
114276 sqlite3 **ppDb, /* OUT: Returned database handle */
114277 unsigned int flags, /* Operational flags */
114278 const char *zVfs /* Name of the VFS to use */
114280 sqlite3 *db; /* Store allocated handle here */
114281 int rc; /* Return code */
114282 int isThreadsafe; /* True for threadsafe connections */
114283 char *zOpen = 0; /* Filename argument to pass to BtreeOpen() */
114284 char *zErrMsg = 0; /* Error message from sqlite3ParseUri() */
114286 *ppDb = 0;
114287 #ifndef SQLITE_OMIT_AUTOINIT
114288 rc = sqlite3_initialize();
114289 if( rc ) return rc;
114290 #endif
114292 /* Only allow sensible combinations of bits in the flags argument.
114293 ** Throw an error if any non-sense combination is used. If we
114294 ** do not block illegal combinations here, it could trigger
114295 ** assert() statements in deeper layers. Sensible combinations
114296 ** are:
114298 ** 1: SQLITE_OPEN_READONLY
114299 ** 2: SQLITE_OPEN_READWRITE
114300 ** 6: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
114302 assert( SQLITE_OPEN_READONLY == 0x01 );
114303 assert( SQLITE_OPEN_READWRITE == 0x02 );
114304 assert( SQLITE_OPEN_CREATE == 0x04 );
114305 testcase( (1<<(flags&7))==0x02 ); /* READONLY */
114306 testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
114307 testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
114308 if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE_BKPT;
114310 if( sqlite3GlobalConfig.bCoreMutex==0 ){
114311 isThreadsafe = 0;
114312 }else if( flags & SQLITE_OPEN_NOMUTEX ){
114313 isThreadsafe = 0;
114314 }else if( flags & SQLITE_OPEN_FULLMUTEX ){
114315 isThreadsafe = 1;
114316 }else{
114317 isThreadsafe = sqlite3GlobalConfig.bFullMutex;
114319 if( flags & SQLITE_OPEN_PRIVATECACHE ){
114320 flags &= ~SQLITE_OPEN_SHAREDCACHE;
114321 }else if( sqlite3GlobalConfig.sharedCacheEnabled ){
114322 flags |= SQLITE_OPEN_SHAREDCACHE;
114325 /* Remove harmful bits from the flags parameter
114327 ** The SQLITE_OPEN_NOMUTEX and SQLITE_OPEN_FULLMUTEX flags were
114328 ** dealt with in the previous code block. Besides these, the only
114329 ** valid input flags for sqlite3_open_v2() are SQLITE_OPEN_READONLY,
114330 ** SQLITE_OPEN_READWRITE, SQLITE_OPEN_CREATE, SQLITE_OPEN_SHAREDCACHE,
114331 ** SQLITE_OPEN_PRIVATECACHE, and some reserved bits. Silently mask
114332 ** off all other flags.
114334 flags &= ~( SQLITE_OPEN_DELETEONCLOSE |
114335 SQLITE_OPEN_EXCLUSIVE |
114336 SQLITE_OPEN_MAIN_DB |
114337 SQLITE_OPEN_TEMP_DB |
114338 SQLITE_OPEN_TRANSIENT_DB |
114339 SQLITE_OPEN_MAIN_JOURNAL |
114340 SQLITE_OPEN_TEMP_JOURNAL |
114341 SQLITE_OPEN_SUBJOURNAL |
114342 SQLITE_OPEN_MASTER_JOURNAL |
114343 SQLITE_OPEN_NOMUTEX |
114344 SQLITE_OPEN_FULLMUTEX |
114345 SQLITE_OPEN_WAL
114348 /* Allocate the sqlite data structure */
114349 db = sqlite3MallocZero( sizeof(sqlite3) );
114350 if( db==0 ) goto opendb_out;
114351 if( isThreadsafe ){
114352 db->mutex = sqlite3MutexAlloc(SQLITE_MUTEX_RECURSIVE);
114353 if( db->mutex==0 ){
114354 sqlite3_free(db);
114355 db = 0;
114356 goto opendb_out;
114359 sqlite3_mutex_enter(db->mutex);
114360 db->errMask = 0xff;
114361 db->nDb = 2;
114362 db->magic = SQLITE_MAGIC_BUSY;
114363 db->aDb = db->aDbStatic;
114365 assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
114366 memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
114367 db->autoCommit = 1;
114368 db->nextAutovac = -1;
114369 db->nextPagesize = 0;
114370 db->flags |= SQLITE_ShortColNames | SQLITE_AutoIndex | SQLITE_EnableTrigger
114371 #if SQLITE_DEFAULT_FILE_FORMAT<4
114372 | SQLITE_LegacyFileFmt
114373 #endif
114374 #ifdef SQLITE_ENABLE_LOAD_EXTENSION
114375 | SQLITE_LoadExtension
114376 #endif
114377 #if SQLITE_DEFAULT_RECURSIVE_TRIGGERS
114378 | SQLITE_RecTriggers
114379 #endif
114380 #if defined(SQLITE_DEFAULT_FOREIGN_KEYS) && SQLITE_DEFAULT_FOREIGN_KEYS
114381 | SQLITE_ForeignKeys
114382 #endif
114384 sqlite3HashInit(&db->aCollSeq);
114385 #ifndef SQLITE_OMIT_VIRTUALTABLE
114386 sqlite3HashInit(&db->aModule);
114387 #endif
114389 /* Add the default collation sequence BINARY. BINARY works for both UTF-8
114390 ** and UTF-16, so add a version for each to avoid any unnecessary
114391 ** conversions. The only error that can occur here is a malloc() failure.
114393 createCollation(db, "BINARY", SQLITE_UTF8, 0, binCollFunc, 0);
114394 createCollation(db, "BINARY", SQLITE_UTF16BE, 0, binCollFunc, 0);
114395 createCollation(db, "BINARY", SQLITE_UTF16LE, 0, binCollFunc, 0);
114396 createCollation(db, "RTRIM", SQLITE_UTF8, (void*)1, binCollFunc, 0);
114397 if( db->mallocFailed ){
114398 goto opendb_out;
114400 db->pDfltColl = sqlite3FindCollSeq(db, SQLITE_UTF8, "BINARY", 0);
114401 assert( db->pDfltColl!=0 );
114403 /* Also add a UTF-8 case-insensitive collation sequence. */
114404 createCollation(db, "NOCASE", SQLITE_UTF8, 0, nocaseCollatingFunc, 0);
114406 /* Parse the filename/URI argument. */
114407 db->openFlags = flags;
114408 rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
114409 if( rc!=SQLITE_OK ){
114410 if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
114411 sqlite3Error(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
114412 sqlite3_free(zErrMsg);
114413 goto opendb_out;
114416 /* Open the backend database driver */
114417 rc = sqlite3BtreeOpen(db->pVfs, zOpen, db, &db->aDb[0].pBt, 0,
114418 flags | SQLITE_OPEN_MAIN_DB);
114419 if( rc!=SQLITE_OK ){
114420 if( rc==SQLITE_IOERR_NOMEM ){
114421 rc = SQLITE_NOMEM;
114423 sqlite3Error(db, rc, 0);
114424 goto opendb_out;
114426 db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
114427 db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
114430 /* The default safety_level for the main database is 'full'; for the temp
114431 ** database it is 'NONE'. This matches the pager layer defaults.
114433 db->aDb[0].zName = "main";
114434 db->aDb[0].safety_level = 3;
114435 db->aDb[1].zName = "temp";
114436 db->aDb[1].safety_level = 1;
114438 db->magic = SQLITE_MAGIC_OPEN;
114439 if( db->mallocFailed ){
114440 goto opendb_out;
114443 /* Register all built-in functions, but do not attempt to read the
114444 ** database schema yet. This is delayed until the first time the database
114445 ** is accessed.
114447 sqlite3Error(db, SQLITE_OK, 0);
114448 sqlite3RegisterBuiltinFunctions(db);
114450 /* Load automatic extensions - extensions that have been registered
114451 ** using the sqlite3_automatic_extension() API.
114453 rc = sqlite3_errcode(db);
114454 if( rc==SQLITE_OK ){
114455 sqlite3AutoLoadExtensions(db);
114456 rc = sqlite3_errcode(db);
114457 if( rc!=SQLITE_OK ){
114458 goto opendb_out;
114462 #ifdef SQLITE_ENABLE_FTS1
114463 if( !db->mallocFailed ){
114464 extern int sqlite3Fts1Init(sqlite3*);
114465 rc = sqlite3Fts1Init(db);
114467 #endif
114469 #ifdef SQLITE_ENABLE_FTS2
114470 if( !db->mallocFailed && rc==SQLITE_OK ){
114471 extern int sqlite3Fts2Init(sqlite3*);
114472 rc = sqlite3Fts2Init(db);
114474 #endif
114476 #ifdef SQLITE_ENABLE_FTS3
114477 if( !db->mallocFailed && rc==SQLITE_OK ){
114478 rc = sqlite3Fts3Init(db);
114480 #endif
114482 #ifdef SQLITE_ENABLE_ICU
114483 if( !db->mallocFailed && rc==SQLITE_OK ){
114484 rc = sqlite3IcuInit(db);
114486 #endif
114488 #ifdef SQLITE_ENABLE_RTREE
114489 if( !db->mallocFailed && rc==SQLITE_OK){
114490 rc = sqlite3RtreeInit(db);
114492 #endif
114494 sqlite3Error(db, rc, 0);
114496 /* -DSQLITE_DEFAULT_LOCKING_MODE=1 makes EXCLUSIVE the default locking
114497 ** mode. -DSQLITE_DEFAULT_LOCKING_MODE=0 make NORMAL the default locking
114498 ** mode. Doing nothing at all also makes NORMAL the default.
114500 #ifdef SQLITE_DEFAULT_LOCKING_MODE
114501 db->dfltLockMode = SQLITE_DEFAULT_LOCKING_MODE;
114502 sqlite3PagerLockingMode(sqlite3BtreePager(db->aDb[0].pBt),
114503 SQLITE_DEFAULT_LOCKING_MODE);
114504 #endif
114506 /* Enable the lookaside-malloc subsystem */
114507 setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
114508 sqlite3GlobalConfig.nLookaside);
114510 sqlite3_wal_autocheckpoint(db, SQLITE_DEFAULT_WAL_AUTOCHECKPOINT);
114512 opendb_out:
114513 sqlite3_free(zOpen);
114514 if( db ){
114515 assert( db->mutex!=0 || isThreadsafe==0 || sqlite3GlobalConfig.bFullMutex==0 );
114516 sqlite3_mutex_leave(db->mutex);
114518 rc = sqlite3_errcode(db);
114519 assert( db!=0 || rc==SQLITE_NOMEM );
114520 if( rc==SQLITE_NOMEM ){
114521 sqlite3_close(db);
114522 db = 0;
114523 }else if( rc!=SQLITE_OK ){
114524 db->magic = SQLITE_MAGIC_SICK;
114526 *ppDb = db;
114527 return sqlite3ApiExit(0, rc);
114531 ** Open a new database handle.
114533 SQLITE_API int sqlite3_open(
114534 const char *zFilename,
114535 sqlite3 **ppDb
114537 return openDatabase(zFilename, ppDb,
114538 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
114540 SQLITE_API int sqlite3_open_v2(
114541 const char *filename, /* Database filename (UTF-8) */
114542 sqlite3 **ppDb, /* OUT: SQLite db handle */
114543 int flags, /* Flags */
114544 const char *zVfs /* Name of VFS module to use */
114546 return openDatabase(filename, ppDb, (unsigned int)flags, zVfs);
114549 #ifndef SQLITE_OMIT_UTF16
114551 ** Open a new database handle.
114553 SQLITE_API int sqlite3_open16(
114554 const void *zFilename,
114555 sqlite3 **ppDb
114557 char const *zFilename8; /* zFilename encoded in UTF-8 instead of UTF-16 */
114558 sqlite3_value *pVal;
114559 int rc;
114561 assert( zFilename );
114562 assert( ppDb );
114563 *ppDb = 0;
114564 #ifndef SQLITE_OMIT_AUTOINIT
114565 rc = sqlite3_initialize();
114566 if( rc ) return rc;
114567 #endif
114568 pVal = sqlite3ValueNew(0);
114569 sqlite3ValueSetStr(pVal, -1, zFilename, SQLITE_UTF16NATIVE, SQLITE_STATIC);
114570 zFilename8 = sqlite3ValueText(pVal, SQLITE_UTF8);
114571 if( zFilename8 ){
114572 rc = openDatabase(zFilename8, ppDb,
114573 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, 0);
114574 assert( *ppDb || rc==SQLITE_NOMEM );
114575 if( rc==SQLITE_OK && !DbHasProperty(*ppDb, 0, DB_SchemaLoaded) ){
114576 ENC(*ppDb) = SQLITE_UTF16NATIVE;
114578 }else{
114579 rc = SQLITE_NOMEM;
114581 sqlite3ValueFree(pVal);
114583 return sqlite3ApiExit(0, rc);
114585 #endif /* SQLITE_OMIT_UTF16 */
114588 ** Register a new collation sequence with the database handle db.
114590 SQLITE_API int sqlite3_create_collation(
114591 sqlite3* db,
114592 const char *zName,
114593 int enc,
114594 void* pCtx,
114595 int(*xCompare)(void*,int,const void*,int,const void*)
114597 int rc;
114598 sqlite3_mutex_enter(db->mutex);
114599 assert( !db->mallocFailed );
114600 rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, 0);
114601 rc = sqlite3ApiExit(db, rc);
114602 sqlite3_mutex_leave(db->mutex);
114603 return rc;
114607 ** Register a new collation sequence with the database handle db.
114609 SQLITE_API int sqlite3_create_collation_v2(
114610 sqlite3* db,
114611 const char *zName,
114612 int enc,
114613 void* pCtx,
114614 int(*xCompare)(void*,int,const void*,int,const void*),
114615 void(*xDel)(void*)
114617 int rc;
114618 sqlite3_mutex_enter(db->mutex);
114619 assert( !db->mallocFailed );
114620 rc = createCollation(db, zName, (u8)enc, pCtx, xCompare, xDel);
114621 rc = sqlite3ApiExit(db, rc);
114622 sqlite3_mutex_leave(db->mutex);
114623 return rc;
114626 #ifndef SQLITE_OMIT_UTF16
114628 ** Register a new collation sequence with the database handle db.
114630 SQLITE_API int sqlite3_create_collation16(
114631 sqlite3* db,
114632 const void *zName,
114633 int enc,
114634 void* pCtx,
114635 int(*xCompare)(void*,int,const void*,int,const void*)
114637 int rc = SQLITE_OK;
114638 char *zName8;
114639 sqlite3_mutex_enter(db->mutex);
114640 assert( !db->mallocFailed );
114641 zName8 = sqlite3Utf16to8(db, zName, -1, SQLITE_UTF16NATIVE);
114642 if( zName8 ){
114643 rc = createCollation(db, zName8, (u8)enc, pCtx, xCompare, 0);
114644 sqlite3DbFree(db, zName8);
114646 rc = sqlite3ApiExit(db, rc);
114647 sqlite3_mutex_leave(db->mutex);
114648 return rc;
114650 #endif /* SQLITE_OMIT_UTF16 */
114653 ** Register a collation sequence factory callback with the database handle
114654 ** db. Replace any previously installed collation sequence factory.
114656 SQLITE_API int sqlite3_collation_needed(
114657 sqlite3 *db,
114658 void *pCollNeededArg,
114659 void(*xCollNeeded)(void*,sqlite3*,int eTextRep,const char*)
114661 sqlite3_mutex_enter(db->mutex);
114662 db->xCollNeeded = xCollNeeded;
114663 db->xCollNeeded16 = 0;
114664 db->pCollNeededArg = pCollNeededArg;
114665 sqlite3_mutex_leave(db->mutex);
114666 return SQLITE_OK;
114669 #ifndef SQLITE_OMIT_UTF16
114671 ** Register a collation sequence factory callback with the database handle
114672 ** db. Replace any previously installed collation sequence factory.
114674 SQLITE_API int sqlite3_collation_needed16(
114675 sqlite3 *db,
114676 void *pCollNeededArg,
114677 void(*xCollNeeded16)(void*,sqlite3*,int eTextRep,const void*)
114679 sqlite3_mutex_enter(db->mutex);
114680 db->xCollNeeded = 0;
114681 db->xCollNeeded16 = xCollNeeded16;
114682 db->pCollNeededArg = pCollNeededArg;
114683 sqlite3_mutex_leave(db->mutex);
114684 return SQLITE_OK;
114686 #endif /* SQLITE_OMIT_UTF16 */
114688 #ifndef SQLITE_OMIT_DEPRECATED
114690 ** This function is now an anachronism. It used to be used to recover from a
114691 ** malloc() failure, but SQLite now does this automatically.
114693 SQLITE_API int sqlite3_global_recover(void){
114694 return SQLITE_OK;
114696 #endif
114699 ** Test to see whether or not the database connection is in autocommit
114700 ** mode. Return TRUE if it is and FALSE if not. Autocommit mode is on
114701 ** by default. Autocommit is disabled by a BEGIN statement and reenabled
114702 ** by the next COMMIT or ROLLBACK.
114704 ******* THIS IS AN EXPERIMENTAL API AND IS SUBJECT TO CHANGE ******
114706 SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
114707 return db->autoCommit;
114711 ** The following routines are subtitutes for constants SQLITE_CORRUPT,
114712 ** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error
114713 ** constants. They server two purposes:
114715 ** 1. Serve as a convenient place to set a breakpoint in a debugger
114716 ** to detect when version error conditions occurs.
114718 ** 2. Invoke sqlite3_log() to provide the source code location where
114719 ** a low-level error is first detected.
114721 SQLITE_PRIVATE int sqlite3CorruptError(int lineno){
114722 testcase( sqlite3GlobalConfig.xLog!=0 );
114723 sqlite3_log(SQLITE_CORRUPT,
114724 "database corruption at line %d of [%.10s]",
114725 lineno, 20+sqlite3_sourceid());
114726 return SQLITE_CORRUPT;
114728 SQLITE_PRIVATE int sqlite3MisuseError(int lineno){
114729 testcase( sqlite3GlobalConfig.xLog!=0 );
114730 sqlite3_log(SQLITE_MISUSE,
114731 "misuse at line %d of [%.10s]",
114732 lineno, 20+sqlite3_sourceid());
114733 return SQLITE_MISUSE;
114735 SQLITE_PRIVATE int sqlite3CantopenError(int lineno){
114736 testcase( sqlite3GlobalConfig.xLog!=0 );
114737 sqlite3_log(SQLITE_CANTOPEN,
114738 "cannot open file at line %d of [%.10s]",
114739 lineno, 20+sqlite3_sourceid());
114740 return SQLITE_CANTOPEN;
114744 #ifndef SQLITE_OMIT_DEPRECATED
114746 ** This is a convenience routine that makes sure that all thread-specific
114747 ** data for this thread has been deallocated.
114749 ** SQLite no longer uses thread-specific data so this routine is now a
114750 ** no-op. It is retained for historical compatibility.
114752 SQLITE_API void sqlite3_thread_cleanup(void){
114754 #endif
114757 ** Return meta information about a specific column of a database table.
114758 ** See comment in sqlite3.h (sqlite.h.in) for details.
114760 #ifdef SQLITE_ENABLE_COLUMN_METADATA
114761 SQLITE_API int sqlite3_table_column_metadata(
114762 sqlite3 *db, /* Connection handle */
114763 const char *zDbName, /* Database name or NULL */
114764 const char *zTableName, /* Table name */
114765 const char *zColumnName, /* Column name */
114766 char const **pzDataType, /* OUTPUT: Declared data type */
114767 char const **pzCollSeq, /* OUTPUT: Collation sequence name */
114768 int *pNotNull, /* OUTPUT: True if NOT NULL constraint exists */
114769 int *pPrimaryKey, /* OUTPUT: True if column part of PK */
114770 int *pAutoinc /* OUTPUT: True if column is auto-increment */
114772 int rc;
114773 char *zErrMsg = 0;
114774 Table *pTab = 0;
114775 Column *pCol = 0;
114776 int iCol;
114778 char const *zDataType = 0;
114779 char const *zCollSeq = 0;
114780 int notnull = 0;
114781 int primarykey = 0;
114782 int autoinc = 0;
114784 /* Ensure the database schema has been loaded */
114785 sqlite3_mutex_enter(db->mutex);
114786 sqlite3BtreeEnterAll(db);
114787 rc = sqlite3Init(db, &zErrMsg);
114788 if( SQLITE_OK!=rc ){
114789 goto error_out;
114792 /* Locate the table in question */
114793 pTab = sqlite3FindTable(db, zTableName, zDbName);
114794 if( !pTab || pTab->pSelect ){
114795 pTab = 0;
114796 goto error_out;
114799 /* Find the column for which info is requested */
114800 if( sqlite3IsRowid(zColumnName) ){
114801 iCol = pTab->iPKey;
114802 if( iCol>=0 ){
114803 pCol = &pTab->aCol[iCol];
114805 }else{
114806 for(iCol=0; iCol<pTab->nCol; iCol++){
114807 pCol = &pTab->aCol[iCol];
114808 if( 0==sqlite3StrICmp(pCol->zName, zColumnName) ){
114809 break;
114812 if( iCol==pTab->nCol ){
114813 pTab = 0;
114814 goto error_out;
114818 /* The following block stores the meta information that will be returned
114819 ** to the caller in local variables zDataType, zCollSeq, notnull, primarykey
114820 ** and autoinc. At this point there are two possibilities:
114822 ** 1. The specified column name was rowid", "oid" or "_rowid_"
114823 ** and there is no explicitly declared IPK column.
114825 ** 2. The table is not a view and the column name identified an
114826 ** explicitly declared column. Copy meta information from *pCol.
114828 if( pCol ){
114829 zDataType = pCol->zType;
114830 zCollSeq = pCol->zColl;
114831 notnull = pCol->notNull!=0;
114832 primarykey = pCol->isPrimKey!=0;
114833 autoinc = pTab->iPKey==iCol && (pTab->tabFlags & TF_Autoincrement)!=0;
114834 }else{
114835 zDataType = "INTEGER";
114836 primarykey = 1;
114838 if( !zCollSeq ){
114839 zCollSeq = "BINARY";
114842 error_out:
114843 sqlite3BtreeLeaveAll(db);
114845 /* Whether the function call succeeded or failed, set the output parameters
114846 ** to whatever their local counterparts contain. If an error did occur,
114847 ** this has the effect of zeroing all output parameters.
114849 if( pzDataType ) *pzDataType = zDataType;
114850 if( pzCollSeq ) *pzCollSeq = zCollSeq;
114851 if( pNotNull ) *pNotNull = notnull;
114852 if( pPrimaryKey ) *pPrimaryKey = primarykey;
114853 if( pAutoinc ) *pAutoinc = autoinc;
114855 if( SQLITE_OK==rc && !pTab ){
114856 sqlite3DbFree(db, zErrMsg);
114857 zErrMsg = sqlite3MPrintf(db, "no such table column: %s.%s", zTableName,
114858 zColumnName);
114859 rc = SQLITE_ERROR;
114861 sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
114862 sqlite3DbFree(db, zErrMsg);
114863 rc = sqlite3ApiExit(db, rc);
114864 sqlite3_mutex_leave(db->mutex);
114865 return rc;
114867 #endif
114870 ** Sleep for a little while. Return the amount of time slept.
114872 SQLITE_API int sqlite3_sleep(int ms){
114873 sqlite3_vfs *pVfs;
114874 int rc;
114875 pVfs = sqlite3_vfs_find(0);
114876 if( pVfs==0 ) return 0;
114878 /* This function works in milliseconds, but the underlying OsSleep()
114879 ** API uses microseconds. Hence the 1000's.
114881 rc = (sqlite3OsSleep(pVfs, 1000*ms)/1000);
114882 return rc;
114886 ** Enable or disable the extended result codes.
114888 SQLITE_API int sqlite3_extended_result_codes(sqlite3 *db, int onoff){
114889 sqlite3_mutex_enter(db->mutex);
114890 db->errMask = onoff ? 0xffffffff : 0xff;
114891 sqlite3_mutex_leave(db->mutex);
114892 return SQLITE_OK;
114896 ** Invoke the xFileControl method on a particular database.
114898 SQLITE_API int sqlite3_file_control(sqlite3 *db, const char *zDbName, int op, void *pArg){
114899 int rc = SQLITE_ERROR;
114900 int iDb;
114901 sqlite3_mutex_enter(db->mutex);
114902 if( zDbName==0 ){
114903 iDb = 0;
114904 }else{
114905 for(iDb=0; iDb<db->nDb; iDb++){
114906 if( strcmp(db->aDb[iDb].zName, zDbName)==0 ) break;
114909 if( iDb<db->nDb ){
114910 Btree *pBtree = db->aDb[iDb].pBt;
114911 if( pBtree ){
114912 Pager *pPager;
114913 sqlite3_file *fd;
114914 sqlite3BtreeEnter(pBtree);
114915 pPager = sqlite3BtreePager(pBtree);
114916 assert( pPager!=0 );
114917 fd = sqlite3PagerFile(pPager);
114918 assert( fd!=0 );
114919 if( op==SQLITE_FCNTL_FILE_POINTER ){
114920 *(sqlite3_file**)pArg = fd;
114921 rc = SQLITE_OK;
114922 }else if( fd->pMethods ){
114923 rc = sqlite3OsFileControl(fd, op, pArg);
114924 }else{
114925 rc = SQLITE_NOTFOUND;
114927 sqlite3BtreeLeave(pBtree);
114930 sqlite3_mutex_leave(db->mutex);
114931 return rc;
114935 ** Interface to the testing logic.
114937 SQLITE_API int sqlite3_test_control(int op, ...){
114938 int rc = 0;
114939 #ifndef SQLITE_OMIT_BUILTIN_TEST
114940 va_list ap;
114941 va_start(ap, op);
114942 switch( op ){
114945 ** Save the current state of the PRNG.
114947 case SQLITE_TESTCTRL_PRNG_SAVE: {
114948 sqlite3PrngSaveState();
114949 break;
114953 ** Restore the state of the PRNG to the last state saved using
114954 ** PRNG_SAVE. If PRNG_SAVE has never before been called, then
114955 ** this verb acts like PRNG_RESET.
114957 case SQLITE_TESTCTRL_PRNG_RESTORE: {
114958 sqlite3PrngRestoreState();
114959 break;
114963 ** Reset the PRNG back to its uninitialized state. The next call
114964 ** to sqlite3_randomness() will reseed the PRNG using a single call
114965 ** to the xRandomness method of the default VFS.
114967 case SQLITE_TESTCTRL_PRNG_RESET: {
114968 sqlite3PrngResetState();
114969 break;
114973 ** sqlite3_test_control(BITVEC_TEST, size, program)
114975 ** Run a test against a Bitvec object of size. The program argument
114976 ** is an array of integers that defines the test. Return -1 on a
114977 ** memory allocation error, 0 on success, or non-zero for an error.
114978 ** See the sqlite3BitvecBuiltinTest() for additional information.
114980 case SQLITE_TESTCTRL_BITVEC_TEST: {
114981 int sz = va_arg(ap, int);
114982 int *aProg = va_arg(ap, int*);
114983 rc = sqlite3BitvecBuiltinTest(sz, aProg);
114984 break;
114988 ** sqlite3_test_control(BENIGN_MALLOC_HOOKS, xBegin, xEnd)
114990 ** Register hooks to call to indicate which malloc() failures
114991 ** are benign.
114993 case SQLITE_TESTCTRL_BENIGN_MALLOC_HOOKS: {
114994 typedef void (*void_function)(void);
114995 void_function xBenignBegin;
114996 void_function xBenignEnd;
114997 xBenignBegin = va_arg(ap, void_function);
114998 xBenignEnd = va_arg(ap, void_function);
114999 sqlite3BenignMallocHooks(xBenignBegin, xBenignEnd);
115000 break;
115004 ** sqlite3_test_control(SQLITE_TESTCTRL_PENDING_BYTE, unsigned int X)
115006 ** Set the PENDING byte to the value in the argument, if X>0.
115007 ** Make no changes if X==0. Return the value of the pending byte
115008 ** as it existing before this routine was called.
115010 ** IMPORTANT: Changing the PENDING byte from 0x40000000 results in
115011 ** an incompatible database file format. Changing the PENDING byte
115012 ** while any database connection is open results in undefined and
115013 ** dileterious behavior.
115015 case SQLITE_TESTCTRL_PENDING_BYTE: {
115016 rc = PENDING_BYTE;
115017 #ifndef SQLITE_OMIT_WSD
115019 unsigned int newVal = va_arg(ap, unsigned int);
115020 if( newVal ) sqlite3PendingByte = newVal;
115022 #endif
115023 break;
115027 ** sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, int X)
115029 ** This action provides a run-time test to see whether or not
115030 ** assert() was enabled at compile-time. If X is true and assert()
115031 ** is enabled, then the return value is true. If X is true and
115032 ** assert() is disabled, then the return value is zero. If X is
115033 ** false and assert() is enabled, then the assertion fires and the
115034 ** process aborts. If X is false and assert() is disabled, then the
115035 ** return value is zero.
115037 case SQLITE_TESTCTRL_ASSERT: {
115038 volatile int x = 0;
115039 assert( (x = va_arg(ap,int))!=0 );
115040 rc = x;
115041 break;
115046 ** sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, int X)
115048 ** This action provides a run-time test to see how the ALWAYS and
115049 ** NEVER macros were defined at compile-time.
115051 ** The return value is ALWAYS(X).
115053 ** The recommended test is X==2. If the return value is 2, that means
115054 ** ALWAYS() and NEVER() are both no-op pass-through macros, which is the
115055 ** default setting. If the return value is 1, then ALWAYS() is either
115056 ** hard-coded to true or else it asserts if its argument is false.
115057 ** The first behavior (hard-coded to true) is the case if
115058 ** SQLITE_TESTCTRL_ASSERT shows that assert() is disabled and the second
115059 ** behavior (assert if the argument to ALWAYS() is false) is the case if
115060 ** SQLITE_TESTCTRL_ASSERT shows that assert() is enabled.
115062 ** The run-time test procedure might look something like this:
115064 ** if( sqlite3_test_control(SQLITE_TESTCTRL_ALWAYS, 2)==2 ){
115065 ** // ALWAYS() and NEVER() are no-op pass-through macros
115066 ** }else if( sqlite3_test_control(SQLITE_TESTCTRL_ASSERT, 1) ){
115067 ** // ALWAYS(x) asserts that x is true. NEVER(x) asserts x is false.
115068 ** }else{
115069 ** // ALWAYS(x) is a constant 1. NEVER(x) is a constant 0.
115072 case SQLITE_TESTCTRL_ALWAYS: {
115073 int x = va_arg(ap,int);
115074 rc = ALWAYS(x);
115075 break;
115078 /* sqlite3_test_control(SQLITE_TESTCTRL_RESERVE, sqlite3 *db, int N)
115080 ** Set the nReserve size to N for the main database on the database
115081 ** connection db.
115083 case SQLITE_TESTCTRL_RESERVE: {
115084 sqlite3 *db = va_arg(ap, sqlite3*);
115085 int x = va_arg(ap,int);
115086 sqlite3_mutex_enter(db->mutex);
115087 sqlite3BtreeSetPageSize(db->aDb[0].pBt, 0, x, 0);
115088 sqlite3_mutex_leave(db->mutex);
115089 break;
115092 /* sqlite3_test_control(SQLITE_TESTCTRL_OPTIMIZATIONS, sqlite3 *db, int N)
115094 ** Enable or disable various optimizations for testing purposes. The
115095 ** argument N is a bitmask of optimizations to be disabled. For normal
115096 ** operation N should be 0. The idea is that a test program (like the
115097 ** SQL Logic Test or SLT test module) can run the same SQL multiple times
115098 ** with various optimizations disabled to verify that the same answer
115099 ** is obtained in every case.
115101 case SQLITE_TESTCTRL_OPTIMIZATIONS: {
115102 sqlite3 *db = va_arg(ap, sqlite3*);
115103 int x = va_arg(ap,int);
115104 db->flags = (x & SQLITE_OptMask) | (db->flags & ~SQLITE_OptMask);
115105 break;
115108 #ifdef SQLITE_N_KEYWORD
115109 /* sqlite3_test_control(SQLITE_TESTCTRL_ISKEYWORD, const char *zWord)
115111 ** If zWord is a keyword recognized by the parser, then return the
115112 ** number of keywords. Or if zWord is not a keyword, return 0.
115114 ** This test feature is only available in the amalgamation since
115115 ** the SQLITE_N_KEYWORD macro is not defined in this file if SQLite
115116 ** is built using separate source files.
115118 case SQLITE_TESTCTRL_ISKEYWORD: {
115119 const char *zWord = va_arg(ap, const char*);
115120 int n = sqlite3Strlen30(zWord);
115121 rc = (sqlite3KeywordCode((u8*)zWord, n)!=TK_ID) ? SQLITE_N_KEYWORD : 0;
115122 break;
115124 #endif
115126 /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
115128 ** Pass pFree into sqlite3ScratchFree().
115129 ** If sz>0 then allocate a scratch buffer into pNew.
115131 case SQLITE_TESTCTRL_SCRATCHMALLOC: {
115132 void *pFree, **ppNew;
115133 int sz;
115134 sz = va_arg(ap, int);
115135 ppNew = va_arg(ap, void**);
115136 pFree = va_arg(ap, void*);
115137 if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
115138 sqlite3ScratchFree(pFree);
115139 break;
115142 /* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
115144 ** If parameter onoff is non-zero, configure the wrappers so that all
115145 ** subsequent calls to localtime() and variants fail. If onoff is zero,
115146 ** undo this setting.
115148 case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
115149 sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int);
115150 break;
115153 #if defined(SQLITE_ENABLE_TREE_EXPLAIN)
115154 /* sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT,
115155 ** sqlite3_stmt*,const char**);
115157 ** If compiled with SQLITE_ENABLE_TREE_EXPLAIN, each sqlite3_stmt holds
115158 ** a string that describes the optimized parse tree. This test-control
115159 ** returns a pointer to that string.
115161 case SQLITE_TESTCTRL_EXPLAIN_STMT: {
115162 sqlite3_stmt *pStmt = va_arg(ap, sqlite3_stmt*);
115163 const char **pzRet = va_arg(ap, const char**);
115164 *pzRet = sqlite3VdbeExplanation((Vdbe*)pStmt);
115165 break;
115167 #endif
115170 va_end(ap);
115171 #endif /* SQLITE_OMIT_BUILTIN_TEST */
115172 return rc;
115176 ** This is a utility routine, useful to VFS implementations, that checks
115177 ** to see if a database file was a URI that contained a specific query
115178 ** parameter, and if so obtains the value of the query parameter.
115180 ** The zFilename argument is the filename pointer passed into the xOpen()
115181 ** method of a VFS implementation. The zParam argument is the name of the
115182 ** query parameter we seek. This routine returns the value of the zParam
115183 ** parameter if it exists. If the parameter does not exist, this routine
115184 ** returns a NULL pointer.
115186 SQLITE_API const char *sqlite3_uri_parameter(const char *zFilename, const char *zParam){
115187 if( zFilename==0 ) return 0;
115188 zFilename += sqlite3Strlen30(zFilename) + 1;
115189 while( zFilename[0] ){
115190 int x = strcmp(zFilename, zParam);
115191 zFilename += sqlite3Strlen30(zFilename) + 1;
115192 if( x==0 ) return zFilename;
115193 zFilename += sqlite3Strlen30(zFilename) + 1;
115195 return 0;
115199 ** Return a boolean value for a query parameter.
115201 SQLITE_API int sqlite3_uri_boolean(const char *zFilename, const char *zParam, int bDflt){
115202 const char *z = sqlite3_uri_parameter(zFilename, zParam);
115203 return z ? sqlite3GetBoolean(z) : (bDflt!=0);
115207 ** Return a 64-bit integer value for a query parameter.
115209 SQLITE_API sqlite3_int64 sqlite3_uri_int64(
115210 const char *zFilename, /* Filename as passed to xOpen */
115211 const char *zParam, /* URI parameter sought */
115212 sqlite3_int64 bDflt /* return if parameter is missing */
115214 const char *z = sqlite3_uri_parameter(zFilename, zParam);
115215 sqlite3_int64 v;
115216 if( z && sqlite3Atoi64(z, &v, sqlite3Strlen30(z), SQLITE_UTF8)==SQLITE_OK ){
115217 bDflt = v;
115219 return bDflt;
115223 ** Return the filename of the database associated with a database
115224 ** connection.
115226 SQLITE_API const char *sqlite3_db_filename(sqlite3 *db, const char *zDbName){
115227 int i;
115228 for(i=0; i<db->nDb; i++){
115229 if( db->aDb[i].pBt && sqlite3StrICmp(zDbName, db->aDb[i].zName)==0 ){
115230 return sqlite3BtreeGetFilename(db->aDb[i].pBt);
115233 return 0;
115236 /************** End of main.c ************************************************/
115237 /************** Begin file notify.c ******************************************/
115239 ** 2009 March 3
115241 ** The author disclaims copyright to this source code. In place of
115242 ** a legal notice, here is a blessing:
115244 ** May you do good and not evil.
115245 ** May you find forgiveness for yourself and forgive others.
115246 ** May you share freely, never taking more than you give.
115248 *************************************************************************
115250 ** This file contains the implementation of the sqlite3_unlock_notify()
115251 ** API method and its associated functionality.
115254 /* Omit this entire file if SQLITE_ENABLE_UNLOCK_NOTIFY is not defined. */
115255 #ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
115258 ** Public interfaces:
115260 ** sqlite3ConnectionBlocked()
115261 ** sqlite3ConnectionUnlocked()
115262 ** sqlite3ConnectionClosed()
115263 ** sqlite3_unlock_notify()
115266 #define assertMutexHeld() \
115267 assert( sqlite3_mutex_held(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER)) )
115270 ** Head of a linked list of all sqlite3 objects created by this process
115271 ** for which either sqlite3.pBlockingConnection or sqlite3.pUnlockConnection
115272 ** is not NULL. This variable may only accessed while the STATIC_MASTER
115273 ** mutex is held.
115275 static sqlite3 *SQLITE_WSD sqlite3BlockedList = 0;
115277 #ifndef NDEBUG
115279 ** This function is a complex assert() that verifies the following
115280 ** properties of the blocked connections list:
115282 ** 1) Each entry in the list has a non-NULL value for either
115283 ** pUnlockConnection or pBlockingConnection, or both.
115285 ** 2) All entries in the list that share a common value for
115286 ** xUnlockNotify are grouped together.
115288 ** 3) If the argument db is not NULL, then none of the entries in the
115289 ** blocked connections list have pUnlockConnection or pBlockingConnection
115290 ** set to db. This is used when closing connection db.
115292 static void checkListProperties(sqlite3 *db){
115293 sqlite3 *p;
115294 for(p=sqlite3BlockedList; p; p=p->pNextBlocked){
115295 int seen = 0;
115296 sqlite3 *p2;
115298 /* Verify property (1) */
115299 assert( p->pUnlockConnection || p->pBlockingConnection );
115301 /* Verify property (2) */
115302 for(p2=sqlite3BlockedList; p2!=p; p2=p2->pNextBlocked){
115303 if( p2->xUnlockNotify==p->xUnlockNotify ) seen = 1;
115304 assert( p2->xUnlockNotify==p->xUnlockNotify || !seen );
115305 assert( db==0 || p->pUnlockConnection!=db );
115306 assert( db==0 || p->pBlockingConnection!=db );
115310 #else
115311 # define checkListProperties(x)
115312 #endif
115315 ** Remove connection db from the blocked connections list. If connection
115316 ** db is not currently a part of the list, this function is a no-op.
115318 static void removeFromBlockedList(sqlite3 *db){
115319 sqlite3 **pp;
115320 assertMutexHeld();
115321 for(pp=&sqlite3BlockedList; *pp; pp = &(*pp)->pNextBlocked){
115322 if( *pp==db ){
115323 *pp = (*pp)->pNextBlocked;
115324 break;
115330 ** Add connection db to the blocked connections list. It is assumed
115331 ** that it is not already a part of the list.
115333 static void addToBlockedList(sqlite3 *db){
115334 sqlite3 **pp;
115335 assertMutexHeld();
115337 pp=&sqlite3BlockedList;
115338 *pp && (*pp)->xUnlockNotify!=db->xUnlockNotify;
115339 pp=&(*pp)->pNextBlocked
115341 db->pNextBlocked = *pp;
115342 *pp = db;
115346 ** Obtain the STATIC_MASTER mutex.
115348 static void enterMutex(void){
115349 sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
115350 checkListProperties(0);
115354 ** Release the STATIC_MASTER mutex.
115356 static void leaveMutex(void){
115357 assertMutexHeld();
115358 checkListProperties(0);
115359 sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
115363 ** Register an unlock-notify callback.
115365 ** This is called after connection "db" has attempted some operation
115366 ** but has received an SQLITE_LOCKED error because another connection
115367 ** (call it pOther) in the same process was busy using the same shared
115368 ** cache. pOther is found by looking at db->pBlockingConnection.
115370 ** If there is no blocking connection, the callback is invoked immediately,
115371 ** before this routine returns.
115373 ** If pOther is already blocked on db, then report SQLITE_LOCKED, to indicate
115374 ** a deadlock.
115376 ** Otherwise, make arrangements to invoke xNotify when pOther drops
115377 ** its locks.
115379 ** Each call to this routine overrides any prior callbacks registered
115380 ** on the same "db". If xNotify==0 then any prior callbacks are immediately
115381 ** cancelled.
115383 SQLITE_API int sqlite3_unlock_notify(
115384 sqlite3 *db,
115385 void (*xNotify)(void **, int),
115386 void *pArg
115388 int rc = SQLITE_OK;
115390 sqlite3_mutex_enter(db->mutex);
115391 enterMutex();
115393 if( xNotify==0 ){
115394 removeFromBlockedList(db);
115395 db->pBlockingConnection = 0;
115396 db->pUnlockConnection = 0;
115397 db->xUnlockNotify = 0;
115398 db->pUnlockArg = 0;
115399 }else if( 0==db->pBlockingConnection ){
115400 /* The blocking transaction has been concluded. Or there never was a
115401 ** blocking transaction. In either case, invoke the notify callback
115402 ** immediately.
115404 xNotify(&pArg, 1);
115405 }else{
115406 sqlite3 *p;
115408 for(p=db->pBlockingConnection; p && p!=db; p=p->pUnlockConnection){}
115409 if( p ){
115410 rc = SQLITE_LOCKED; /* Deadlock detected. */
115411 }else{
115412 db->pUnlockConnection = db->pBlockingConnection;
115413 db->xUnlockNotify = xNotify;
115414 db->pUnlockArg = pArg;
115415 removeFromBlockedList(db);
115416 addToBlockedList(db);
115420 leaveMutex();
115421 assert( !db->mallocFailed );
115422 sqlite3Error(db, rc, (rc?"database is deadlocked":0));
115423 sqlite3_mutex_leave(db->mutex);
115424 return rc;
115428 ** This function is called while stepping or preparing a statement
115429 ** associated with connection db. The operation will return SQLITE_LOCKED
115430 ** to the user because it requires a lock that will not be available
115431 ** until connection pBlocker concludes its current transaction.
115433 SQLITE_PRIVATE void sqlite3ConnectionBlocked(sqlite3 *db, sqlite3 *pBlocker){
115434 enterMutex();
115435 if( db->pBlockingConnection==0 && db->pUnlockConnection==0 ){
115436 addToBlockedList(db);
115438 db->pBlockingConnection = pBlocker;
115439 leaveMutex();
115443 ** This function is called when
115444 ** the transaction opened by database db has just finished. Locks held
115445 ** by database connection db have been released.
115447 ** This function loops through each entry in the blocked connections
115448 ** list and does the following:
115450 ** 1) If the sqlite3.pBlockingConnection member of a list entry is
115451 ** set to db, then set pBlockingConnection=0.
115453 ** 2) If the sqlite3.pUnlockConnection member of a list entry is
115454 ** set to db, then invoke the configured unlock-notify callback and
115455 ** set pUnlockConnection=0.
115457 ** 3) If the two steps above mean that pBlockingConnection==0 and
115458 ** pUnlockConnection==0, remove the entry from the blocked connections
115459 ** list.
115461 SQLITE_PRIVATE void sqlite3ConnectionUnlocked(sqlite3 *db){
115462 void (*xUnlockNotify)(void **, int) = 0; /* Unlock-notify cb to invoke */
115463 int nArg = 0; /* Number of entries in aArg[] */
115464 sqlite3 **pp; /* Iterator variable */
115465 void **aArg; /* Arguments to the unlock callback */
115466 void **aDyn = 0; /* Dynamically allocated space for aArg[] */
115467 void *aStatic[16]; /* Starter space for aArg[]. No malloc required */
115469 aArg = aStatic;
115470 enterMutex(); /* Enter STATIC_MASTER mutex */
115472 /* This loop runs once for each entry in the blocked-connections list. */
115473 for(pp=&sqlite3BlockedList; *pp; /* no-op */ ){
115474 sqlite3 *p = *pp;
115476 /* Step 1. */
115477 if( p->pBlockingConnection==db ){
115478 p->pBlockingConnection = 0;
115481 /* Step 2. */
115482 if( p->pUnlockConnection==db ){
115483 assert( p->xUnlockNotify );
115484 if( p->xUnlockNotify!=xUnlockNotify && nArg!=0 ){
115485 xUnlockNotify(aArg, nArg);
115486 nArg = 0;
115489 sqlite3BeginBenignMalloc();
115490 assert( aArg==aDyn || (aDyn==0 && aArg==aStatic) );
115491 assert( nArg<=(int)ArraySize(aStatic) || aArg==aDyn );
115492 if( (!aDyn && nArg==(int)ArraySize(aStatic))
115493 || (aDyn && nArg==(int)(sqlite3MallocSize(aDyn)/sizeof(void*)))
115495 /* The aArg[] array needs to grow. */
115496 void **pNew = (void **)sqlite3Malloc(nArg*sizeof(void *)*2);
115497 if( pNew ){
115498 memcpy(pNew, aArg, nArg*sizeof(void *));
115499 sqlite3_free(aDyn);
115500 aDyn = aArg = pNew;
115501 }else{
115502 /* This occurs when the array of context pointers that need to
115503 ** be passed to the unlock-notify callback is larger than the
115504 ** aStatic[] array allocated on the stack and the attempt to
115505 ** allocate a larger array from the heap has failed.
115507 ** This is a difficult situation to handle. Returning an error
115508 ** code to the caller is insufficient, as even if an error code
115509 ** is returned the transaction on connection db will still be
115510 ** closed and the unlock-notify callbacks on blocked connections
115511 ** will go unissued. This might cause the application to wait
115512 ** indefinitely for an unlock-notify callback that will never
115513 ** arrive.
115515 ** Instead, invoke the unlock-notify callback with the context
115516 ** array already accumulated. We can then clear the array and
115517 ** begin accumulating any further context pointers without
115518 ** requiring any dynamic allocation. This is sub-optimal because
115519 ** it means that instead of one callback with a large array of
115520 ** context pointers the application will receive two or more
115521 ** callbacks with smaller arrays of context pointers, which will
115522 ** reduce the applications ability to prioritize multiple
115523 ** connections. But it is the best that can be done under the
115524 ** circumstances.
115526 xUnlockNotify(aArg, nArg);
115527 nArg = 0;
115530 sqlite3EndBenignMalloc();
115532 aArg[nArg++] = p->pUnlockArg;
115533 xUnlockNotify = p->xUnlockNotify;
115534 p->pUnlockConnection = 0;
115535 p->xUnlockNotify = 0;
115536 p->pUnlockArg = 0;
115539 /* Step 3. */
115540 if( p->pBlockingConnection==0 && p->pUnlockConnection==0 ){
115541 /* Remove connection p from the blocked connections list. */
115542 *pp = p->pNextBlocked;
115543 p->pNextBlocked = 0;
115544 }else{
115545 pp = &p->pNextBlocked;
115549 if( nArg!=0 ){
115550 xUnlockNotify(aArg, nArg);
115552 sqlite3_free(aDyn);
115553 leaveMutex(); /* Leave STATIC_MASTER mutex */
115557 ** This is called when the database connection passed as an argument is
115558 ** being closed. The connection is removed from the blocked list.
115560 SQLITE_PRIVATE void sqlite3ConnectionClosed(sqlite3 *db){
115561 sqlite3ConnectionUnlocked(db);
115562 enterMutex();
115563 removeFromBlockedList(db);
115564 checkListProperties(db);
115565 leaveMutex();
115567 #endif
115569 /************** End of notify.c **********************************************/
115570 /************** Begin file fts3.c ********************************************/
115572 ** 2006 Oct 10
115574 ** The author disclaims copyright to this source code. In place of
115575 ** a legal notice, here is a blessing:
115577 ** May you do good and not evil.
115578 ** May you find forgiveness for yourself and forgive others.
115579 ** May you share freely, never taking more than you give.
115581 ******************************************************************************
115583 ** This is an SQLite module implementing full-text search.
115587 ** The code in this file is only compiled if:
115589 ** * The FTS3 module is being built as an extension
115590 ** (in which case SQLITE_CORE is not defined), or
115592 ** * The FTS3 module is being built into the core of
115593 ** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
115596 /* The full-text index is stored in a series of b+tree (-like)
115597 ** structures called segments which map terms to doclists. The
115598 ** structures are like b+trees in layout, but are constructed from the
115599 ** bottom up in optimal fashion and are not updatable. Since trees
115600 ** are built from the bottom up, things will be described from the
115601 ** bottom up.
115604 **** Varints ****
115605 ** The basic unit of encoding is a variable-length integer called a
115606 ** varint. We encode variable-length integers in little-endian order
115607 ** using seven bits * per byte as follows:
115609 ** KEY:
115610 ** A = 0xxxxxxx 7 bits of data and one flag bit
115611 ** B = 1xxxxxxx 7 bits of data and one flag bit
115613 ** 7 bits - A
115614 ** 14 bits - BA
115615 ** 21 bits - BBA
115616 ** and so on.
115618 ** This is similar in concept to how sqlite encodes "varints" but
115619 ** the encoding is not the same. SQLite varints are big-endian
115620 ** are are limited to 9 bytes in length whereas FTS3 varints are
115621 ** little-endian and can be up to 10 bytes in length (in theory).
115623 ** Example encodings:
115625 ** 1: 0x01
115626 ** 127: 0x7f
115627 ** 128: 0x81 0x00
115630 **** Document lists ****
115631 ** A doclist (document list) holds a docid-sorted list of hits for a
115632 ** given term. Doclists hold docids and associated token positions.
115633 ** A docid is the unique integer identifier for a single document.
115634 ** A position is the index of a word within the document. The first
115635 ** word of the document has a position of 0.
115637 ** FTS3 used to optionally store character offsets using a compile-time
115638 ** option. But that functionality is no longer supported.
115640 ** A doclist is stored like this:
115642 ** array {
115643 ** varint docid;
115644 ** array { (position list for column 0)
115645 ** varint position; (2 more than the delta from previous position)
115647 ** array {
115648 ** varint POS_COLUMN; (marks start of position list for new column)
115649 ** varint column; (index of new column)
115650 ** array {
115651 ** varint position; (2 more than the delta from previous position)
115654 ** varint POS_END; (marks end of positions for this document.
115657 ** Here, array { X } means zero or more occurrences of X, adjacent in
115658 ** memory. A "position" is an index of a token in the token stream
115659 ** generated by the tokenizer. Note that POS_END and POS_COLUMN occur
115660 ** in the same logical place as the position element, and act as sentinals
115661 ** ending a position list array. POS_END is 0. POS_COLUMN is 1.
115662 ** The positions numbers are not stored literally but rather as two more
115663 ** than the difference from the prior position, or the just the position plus
115664 ** 2 for the first position. Example:
115666 ** label: A B C D E F G H I J K
115667 ** value: 123 5 9 1 1 14 35 0 234 72 0
115669 ** The 123 value is the first docid. For column zero in this document
115670 ** there are two matches at positions 3 and 10 (5-2 and 9-2+3). The 1
115671 ** at D signals the start of a new column; the 1 at E indicates that the
115672 ** new column is column number 1. There are two positions at 12 and 45
115673 ** (14-2 and 35-2+12). The 0 at H indicate the end-of-document. The
115674 ** 234 at I is the next docid. It has one position 72 (72-2) and then
115675 ** terminates with the 0 at K.
115677 ** A "position-list" is the list of positions for multiple columns for
115678 ** a single docid. A "column-list" is the set of positions for a single
115679 ** column. Hence, a position-list consists of one or more column-lists,
115680 ** a document record consists of a docid followed by a position-list and
115681 ** a doclist consists of one or more document records.
115683 ** A bare doclist omits the position information, becoming an
115684 ** array of varint-encoded docids.
115686 **** Segment leaf nodes ****
115687 ** Segment leaf nodes store terms and doclists, ordered by term. Leaf
115688 ** nodes are written using LeafWriter, and read using LeafReader (to
115689 ** iterate through a single leaf node's data) and LeavesReader (to
115690 ** iterate through a segment's entire leaf layer). Leaf nodes have
115691 ** the format:
115693 ** varint iHeight; (height from leaf level, always 0)
115694 ** varint nTerm; (length of first term)
115695 ** char pTerm[nTerm]; (content of first term)
115696 ** varint nDoclist; (length of term's associated doclist)
115697 ** char pDoclist[nDoclist]; (content of doclist)
115698 ** array {
115699 ** (further terms are delta-encoded)
115700 ** varint nPrefix; (length of prefix shared with previous term)
115701 ** varint nSuffix; (length of unshared suffix)
115702 ** char pTermSuffix[nSuffix];(unshared suffix of next term)
115703 ** varint nDoclist; (length of term's associated doclist)
115704 ** char pDoclist[nDoclist]; (content of doclist)
115707 ** Here, array { X } means zero or more occurrences of X, adjacent in
115708 ** memory.
115710 ** Leaf nodes are broken into blocks which are stored contiguously in
115711 ** the %_segments table in sorted order. This means that when the end
115712 ** of a node is reached, the next term is in the node with the next
115713 ** greater node id.
115715 ** New data is spilled to a new leaf node when the current node
115716 ** exceeds LEAF_MAX bytes (default 2048). New data which itself is
115717 ** larger than STANDALONE_MIN (default 1024) is placed in a standalone
115718 ** node (a leaf node with a single term and doclist). The goal of
115719 ** these settings is to pack together groups of small doclists while
115720 ** making it efficient to directly access large doclists. The
115721 ** assumption is that large doclists represent terms which are more
115722 ** likely to be query targets.
115724 ** TODO(shess) It may be useful for blocking decisions to be more
115725 ** dynamic. For instance, it may make more sense to have a 2.5k leaf
115726 ** node rather than splitting into 2k and .5k nodes. My intuition is
115727 ** that this might extend through 2x or 4x the pagesize.
115730 **** Segment interior nodes ****
115731 ** Segment interior nodes store blockids for subtree nodes and terms
115732 ** to describe what data is stored by the each subtree. Interior
115733 ** nodes are written using InteriorWriter, and read using
115734 ** InteriorReader. InteriorWriters are created as needed when
115735 ** SegmentWriter creates new leaf nodes, or when an interior node
115736 ** itself grows too big and must be split. The format of interior
115737 ** nodes:
115739 ** varint iHeight; (height from leaf level, always >0)
115740 ** varint iBlockid; (block id of node's leftmost subtree)
115741 ** optional {
115742 ** varint nTerm; (length of first term)
115743 ** char pTerm[nTerm]; (content of first term)
115744 ** array {
115745 ** (further terms are delta-encoded)
115746 ** varint nPrefix; (length of shared prefix with previous term)
115747 ** varint nSuffix; (length of unshared suffix)
115748 ** char pTermSuffix[nSuffix]; (unshared suffix of next term)
115752 ** Here, optional { X } means an optional element, while array { X }
115753 ** means zero or more occurrences of X, adjacent in memory.
115755 ** An interior node encodes n terms separating n+1 subtrees. The
115756 ** subtree blocks are contiguous, so only the first subtree's blockid
115757 ** is encoded. The subtree at iBlockid will contain all terms less
115758 ** than the first term encoded (or all terms if no term is encoded).
115759 ** Otherwise, for terms greater than or equal to pTerm[i] but less
115760 ** than pTerm[i+1], the subtree for that term will be rooted at
115761 ** iBlockid+i. Interior nodes only store enough term data to
115762 ** distinguish adjacent children (if the rightmost term of the left
115763 ** child is "something", and the leftmost term of the right child is
115764 ** "wicked", only "w" is stored).
115766 ** New data is spilled to a new interior node at the same height when
115767 ** the current node exceeds INTERIOR_MAX bytes (default 2048).
115768 ** INTERIOR_MIN_TERMS (default 7) keeps large terms from monopolizing
115769 ** interior nodes and making the tree too skinny. The interior nodes
115770 ** at a given height are naturally tracked by interior nodes at
115771 ** height+1, and so on.
115774 **** Segment directory ****
115775 ** The segment directory in table %_segdir stores meta-information for
115776 ** merging and deleting segments, and also the root node of the
115777 ** segment's tree.
115779 ** The root node is the top node of the segment's tree after encoding
115780 ** the entire segment, restricted to ROOT_MAX bytes (default 1024).
115781 ** This could be either a leaf node or an interior node. If the top
115782 ** node requires more than ROOT_MAX bytes, it is flushed to %_segments
115783 ** and a new root interior node is generated (which should always fit
115784 ** within ROOT_MAX because it only needs space for 2 varints, the
115785 ** height and the blockid of the previous root).
115787 ** The meta-information in the segment directory is:
115788 ** level - segment level (see below)
115789 ** idx - index within level
115790 ** - (level,idx uniquely identify a segment)
115791 ** start_block - first leaf node
115792 ** leaves_end_block - last leaf node
115793 ** end_block - last block (including interior nodes)
115794 ** root - contents of root node
115796 ** If the root node is a leaf node, then start_block,
115797 ** leaves_end_block, and end_block are all 0.
115800 **** Segment merging ****
115801 ** To amortize update costs, segments are grouped into levels and
115802 ** merged in batches. Each increase in level represents exponentially
115803 ** more documents.
115805 ** New documents (actually, document updates) are tokenized and
115806 ** written individually (using LeafWriter) to a level 0 segment, with
115807 ** incrementing idx. When idx reaches MERGE_COUNT (default 16), all
115808 ** level 0 segments are merged into a single level 1 segment. Level 1
115809 ** is populated like level 0, and eventually MERGE_COUNT level 1
115810 ** segments are merged to a single level 2 segment (representing
115811 ** MERGE_COUNT^2 updates), and so on.
115813 ** A segment merge traverses all segments at a given level in
115814 ** parallel, performing a straightforward sorted merge. Since segment
115815 ** leaf nodes are written in to the %_segments table in order, this
115816 ** merge traverses the underlying sqlite disk structures efficiently.
115817 ** After the merge, all segment blocks from the merged level are
115818 ** deleted.
115820 ** MERGE_COUNT controls how often we merge segments. 16 seems to be
115821 ** somewhat of a sweet spot for insertion performance. 32 and 64 show
115822 ** very similar performance numbers to 16 on insertion, though they're
115823 ** a tiny bit slower (perhaps due to more overhead in merge-time
115824 ** sorting). 8 is about 20% slower than 16, 4 about 50% slower than
115825 ** 16, 2 about 66% slower than 16.
115827 ** At query time, high MERGE_COUNT increases the number of segments
115828 ** which need to be scanned and merged. For instance, with 100k docs
115829 ** inserted:
115831 ** MERGE_COUNT segments
115832 ** 16 25
115833 ** 8 12
115834 ** 4 10
115835 ** 2 6
115837 ** This appears to have only a moderate impact on queries for very
115838 ** frequent terms (which are somewhat dominated by segment merge
115839 ** costs), and infrequent and non-existent terms still seem to be fast
115840 ** even with many segments.
115842 ** TODO(shess) That said, it would be nice to have a better query-side
115843 ** argument for MERGE_COUNT of 16. Also, it is possible/likely that
115844 ** optimizations to things like doclist merging will swing the sweet
115845 ** spot around.
115849 **** Handling of deletions and updates ****
115850 ** Since we're using a segmented structure, with no docid-oriented
115851 ** index into the term index, we clearly cannot simply update the term
115852 ** index when a document is deleted or updated. For deletions, we
115853 ** write an empty doclist (varint(docid) varint(POS_END)), for updates
115854 ** we simply write the new doclist. Segment merges overwrite older
115855 ** data for a particular docid with newer data, so deletes or updates
115856 ** will eventually overtake the earlier data and knock it out. The
115857 ** query logic likewise merges doclists so that newer data knocks out
115858 ** older data.
115860 ** TODO(shess) Provide a VACUUM type operation to clear out all
115861 ** deletions and duplications. This would basically be a forced merge
115862 ** into a single segment.
115865 /************** Include fts3Int.h in the middle of fts3.c ********************/
115866 /************** Begin file fts3Int.h *****************************************/
115868 ** 2009 Nov 12
115870 ** The author disclaims copyright to this source code. In place of
115871 ** a legal notice, here is a blessing:
115873 ** May you do good and not evil.
115874 ** May you find forgiveness for yourself and forgive others.
115875 ** May you share freely, never taking more than you give.
115877 ******************************************************************************
115880 #ifndef _FTSINT_H
115881 #define _FTSINT_H
115883 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
115884 # define NDEBUG 1
115885 #endif
115888 ** FTS4 is really an extension for FTS3. It is enabled using the
115889 ** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all
115890 ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
115892 #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
115893 # define SQLITE_ENABLE_FTS3
115894 #endif
115896 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
115898 /* If not building as part of the core, include sqlite3ext.h. */
115899 #ifndef SQLITE_CORE
115900 SQLITE_API extern const sqlite3_api_routines *sqlite3_api;
115901 #endif
115903 /************** Include fts3_tokenizer.h in the middle of fts3Int.h **********/
115904 /************** Begin file fts3_tokenizer.h **********************************/
115906 ** 2006 July 10
115908 ** The author disclaims copyright to this source code.
115910 *************************************************************************
115911 ** Defines the interface to tokenizers used by fulltext-search. There
115912 ** are three basic components:
115914 ** sqlite3_tokenizer_module is a singleton defining the tokenizer
115915 ** interface functions. This is essentially the class structure for
115916 ** tokenizers.
115918 ** sqlite3_tokenizer is used to define a particular tokenizer, perhaps
115919 ** including customization information defined at creation time.
115921 ** sqlite3_tokenizer_cursor is generated by a tokenizer to generate
115922 ** tokens from a particular input.
115924 #ifndef _FTS3_TOKENIZER_H_
115925 #define _FTS3_TOKENIZER_H_
115927 /* TODO(shess) Only used for SQLITE_OK and SQLITE_DONE at this time.
115928 ** If tokenizers are to be allowed to call sqlite3_*() functions, then
115929 ** we will need a way to register the API consistently.
115933 ** Structures used by the tokenizer interface. When a new tokenizer
115934 ** implementation is registered, the caller provides a pointer to
115935 ** an sqlite3_tokenizer_module containing pointers to the callback
115936 ** functions that make up an implementation.
115938 ** When an fts3 table is created, it passes any arguments passed to
115939 ** the tokenizer clause of the CREATE VIRTUAL TABLE statement to the
115940 ** sqlite3_tokenizer_module.xCreate() function of the requested tokenizer
115941 ** implementation. The xCreate() function in turn returns an
115942 ** sqlite3_tokenizer structure representing the specific tokenizer to
115943 ** be used for the fts3 table (customized by the tokenizer clause arguments).
115945 ** To tokenize an input buffer, the sqlite3_tokenizer_module.xOpen()
115946 ** method is called. It returns an sqlite3_tokenizer_cursor object
115947 ** that may be used to tokenize a specific input buffer based on
115948 ** the tokenization rules supplied by a specific sqlite3_tokenizer
115949 ** object.
115951 typedef struct sqlite3_tokenizer_module sqlite3_tokenizer_module;
115952 typedef struct sqlite3_tokenizer sqlite3_tokenizer;
115953 typedef struct sqlite3_tokenizer_cursor sqlite3_tokenizer_cursor;
115955 struct sqlite3_tokenizer_module {
115958 ** Structure version. Should always be set to 0.
115960 int iVersion;
115963 ** Create a new tokenizer. The values in the argv[] array are the
115964 ** arguments passed to the "tokenizer" clause of the CREATE VIRTUAL
115965 ** TABLE statement that created the fts3 table. For example, if
115966 ** the following SQL is executed:
115968 ** CREATE .. USING fts3( ... , tokenizer <tokenizer-name> arg1 arg2)
115970 ** then argc is set to 2, and the argv[] array contains pointers
115971 ** to the strings "arg1" and "arg2".
115973 ** This method should return either SQLITE_OK (0), or an SQLite error
115974 ** code. If SQLITE_OK is returned, then *ppTokenizer should be set
115975 ** to point at the newly created tokenizer structure. The generic
115976 ** sqlite3_tokenizer.pModule variable should not be initialised by
115977 ** this callback. The caller will do so.
115979 int (*xCreate)(
115980 int argc, /* Size of argv array */
115981 const char *const*argv, /* Tokenizer argument strings */
115982 sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */
115986 ** Destroy an existing tokenizer. The fts3 module calls this method
115987 ** exactly once for each successful call to xCreate().
115989 int (*xDestroy)(sqlite3_tokenizer *pTokenizer);
115992 ** Create a tokenizer cursor to tokenize an input buffer. The caller
115993 ** is responsible for ensuring that the input buffer remains valid
115994 ** until the cursor is closed (using the xClose() method).
115996 int (*xOpen)(
115997 sqlite3_tokenizer *pTokenizer, /* Tokenizer object */
115998 const char *pInput, int nBytes, /* Input buffer */
115999 sqlite3_tokenizer_cursor **ppCursor /* OUT: Created tokenizer cursor */
116003 ** Destroy an existing tokenizer cursor. The fts3 module calls this
116004 ** method exactly once for each successful call to xOpen().
116006 int (*xClose)(sqlite3_tokenizer_cursor *pCursor);
116009 ** Retrieve the next token from the tokenizer cursor pCursor. This
116010 ** method should either return SQLITE_OK and set the values of the
116011 ** "OUT" variables identified below, or SQLITE_DONE to indicate that
116012 ** the end of the buffer has been reached, or an SQLite error code.
116014 ** *ppToken should be set to point at a buffer containing the
116015 ** normalized version of the token (i.e. after any case-folding and/or
116016 ** stemming has been performed). *pnBytes should be set to the length
116017 ** of this buffer in bytes. The input text that generated the token is
116018 ** identified by the byte offsets returned in *piStartOffset and
116019 ** *piEndOffset. *piStartOffset should be set to the index of the first
116020 ** byte of the token in the input buffer. *piEndOffset should be set
116021 ** to the index of the first byte just past the end of the token in
116022 ** the input buffer.
116024 ** The buffer *ppToken is set to point at is managed by the tokenizer
116025 ** implementation. It is only required to be valid until the next call
116026 ** to xNext() or xClose().
116028 /* TODO(shess) current implementation requires pInput to be
116029 ** nul-terminated. This should either be fixed, or pInput/nBytes
116030 ** should be converted to zInput.
116032 int (*xNext)(
116033 sqlite3_tokenizer_cursor *pCursor, /* Tokenizer cursor */
116034 const char **ppToken, int *pnBytes, /* OUT: Normalized text for token */
116035 int *piStartOffset, /* OUT: Byte offset of token in input buffer */
116036 int *piEndOffset, /* OUT: Byte offset of end of token in input buffer */
116037 int *piPosition /* OUT: Number of tokens returned before this one */
116041 struct sqlite3_tokenizer {
116042 const sqlite3_tokenizer_module *pModule; /* The module for this tokenizer */
116043 /* Tokenizer implementations will typically add additional fields */
116046 struct sqlite3_tokenizer_cursor {
116047 sqlite3_tokenizer *pTokenizer; /* Tokenizer for this cursor. */
116048 /* Tokenizer implementations will typically add additional fields */
116051 int fts3_global_term_cnt(int iTerm, int iCol);
116052 int fts3_term_cnt(int iTerm, int iCol);
116055 #endif /* _FTS3_TOKENIZER_H_ */
116057 /************** End of fts3_tokenizer.h **************************************/
116058 /************** Continuing where we left off in fts3Int.h ********************/
116059 /************** Include fts3_hash.h in the middle of fts3Int.h ***************/
116060 /************** Begin file fts3_hash.h ***************************************/
116062 ** 2001 September 22
116064 ** The author disclaims copyright to this source code. In place of
116065 ** a legal notice, here is a blessing:
116067 ** May you do good and not evil.
116068 ** May you find forgiveness for yourself and forgive others.
116069 ** May you share freely, never taking more than you give.
116071 *************************************************************************
116072 ** This is the header file for the generic hash-table implemenation
116073 ** used in SQLite. We've modified it slightly to serve as a standalone
116074 ** hash table implementation for the full-text indexing module.
116077 #ifndef _FTS3_HASH_H_
116078 #define _FTS3_HASH_H_
116080 /* Forward declarations of structures. */
116081 typedef struct Fts3Hash Fts3Hash;
116082 typedef struct Fts3HashElem Fts3HashElem;
116084 /* A complete hash table is an instance of the following structure.
116085 ** The internals of this structure are intended to be opaque -- client
116086 ** code should not attempt to access or modify the fields of this structure
116087 ** directly. Change this structure only by using the routines below.
116088 ** However, many of the "procedures" and "functions" for modifying and
116089 ** accessing this structure are really macros, so we can't really make
116090 ** this structure opaque.
116092 struct Fts3Hash {
116093 char keyClass; /* HASH_INT, _POINTER, _STRING, _BINARY */
116094 char copyKey; /* True if copy of key made on insert */
116095 int count; /* Number of entries in this table */
116096 Fts3HashElem *first; /* The first element of the array */
116097 int htsize; /* Number of buckets in the hash table */
116098 struct _fts3ht { /* the hash table */
116099 int count; /* Number of entries with this hash */
116100 Fts3HashElem *chain; /* Pointer to first entry with this hash */
116101 } *ht;
116104 /* Each element in the hash table is an instance of the following
116105 ** structure. All elements are stored on a single doubly-linked list.
116107 ** Again, this structure is intended to be opaque, but it can't really
116108 ** be opaque because it is used by macros.
116110 struct Fts3HashElem {
116111 Fts3HashElem *next, *prev; /* Next and previous elements in the table */
116112 void *data; /* Data associated with this element */
116113 void *pKey; int nKey; /* Key associated with this element */
116117 ** There are 2 different modes of operation for a hash table:
116119 ** FTS3_HASH_STRING pKey points to a string that is nKey bytes long
116120 ** (including the null-terminator, if any). Case
116121 ** is respected in comparisons.
116123 ** FTS3_HASH_BINARY pKey points to binary data nKey bytes long.
116124 ** memcmp() is used to compare keys.
116126 ** A copy of the key is made if the copyKey parameter to fts3HashInit is 1.
116128 #define FTS3_HASH_STRING 1
116129 #define FTS3_HASH_BINARY 2
116132 ** Access routines. To delete, insert a NULL pointer.
116134 SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey);
116135 SQLITE_PRIVATE void *sqlite3Fts3HashInsert(Fts3Hash*, const void *pKey, int nKey, void *pData);
116136 SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash*, const void *pKey, int nKey);
116137 SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash*);
116138 SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(const Fts3Hash *, const void *, int);
116141 ** Shorthand for the functions above
116143 #define fts3HashInit sqlite3Fts3HashInit
116144 #define fts3HashInsert sqlite3Fts3HashInsert
116145 #define fts3HashFind sqlite3Fts3HashFind
116146 #define fts3HashClear sqlite3Fts3HashClear
116147 #define fts3HashFindElem sqlite3Fts3HashFindElem
116150 ** Macros for looping over all elements of a hash table. The idiom is
116151 ** like this:
116153 ** Fts3Hash h;
116154 ** Fts3HashElem *p;
116155 ** ...
116156 ** for(p=fts3HashFirst(&h); p; p=fts3HashNext(p)){
116157 ** SomeStructure *pData = fts3HashData(p);
116158 ** // do something with pData
116161 #define fts3HashFirst(H) ((H)->first)
116162 #define fts3HashNext(E) ((E)->next)
116163 #define fts3HashData(E) ((E)->data)
116164 #define fts3HashKey(E) ((E)->pKey)
116165 #define fts3HashKeysize(E) ((E)->nKey)
116168 ** Number of entries in a hash table
116170 #define fts3HashCount(H) ((H)->count)
116172 #endif /* _FTS3_HASH_H_ */
116174 /************** End of fts3_hash.h *******************************************/
116175 /************** Continuing where we left off in fts3Int.h ********************/
116178 ** This constant controls how often segments are merged. Once there are
116179 ** FTS3_MERGE_COUNT segments of level N, they are merged into a single
116180 ** segment of level N+1.
116182 #define FTS3_MERGE_COUNT 16
116185 ** This is the maximum amount of data (in bytes) to store in the
116186 ** Fts3Table.pendingTerms hash table. Normally, the hash table is
116187 ** populated as documents are inserted/updated/deleted in a transaction
116188 ** and used to create a new segment when the transaction is committed.
116189 ** However if this limit is reached midway through a transaction, a new
116190 ** segment is created and the hash table cleared immediately.
116192 #define FTS3_MAX_PENDING_DATA (1*1024*1024)
116195 ** Macro to return the number of elements in an array. SQLite has a
116196 ** similar macro called ArraySize(). Use a different name to avoid
116197 ** a collision when building an amalgamation with built-in FTS3.
116199 #define SizeofArray(X) ((int)(sizeof(X)/sizeof(X[0])))
116202 #ifndef MIN
116203 # define MIN(x,y) ((x)<(y)?(x):(y))
116204 #endif
116207 ** Maximum length of a varint encoded integer. The varint format is different
116208 ** from that used by SQLite, so the maximum length is 10, not 9.
116210 #define FTS3_VARINT_MAX 10
116213 ** FTS4 virtual tables may maintain multiple indexes - one index of all terms
116214 ** in the document set and zero or more prefix indexes. All indexes are stored
116215 ** as one or more b+-trees in the %_segments and %_segdir tables.
116217 ** It is possible to determine which index a b+-tree belongs to based on the
116218 ** value stored in the "%_segdir.level" column. Given this value L, the index
116219 ** that the b+-tree belongs to is (L<<10). In other words, all b+-trees with
116220 ** level values between 0 and 1023 (inclusive) belong to index 0, all levels
116221 ** between 1024 and 2047 to index 1, and so on.
116223 ** It is considered impossible for an index to use more than 1024 levels. In
116224 ** theory though this may happen, but only after at least
116225 ** (FTS3_MERGE_COUNT^1024) separate flushes of the pending-terms tables.
116227 #define FTS3_SEGDIR_MAXLEVEL 1024
116228 #define FTS3_SEGDIR_MAXLEVEL_STR "1024"
116231 ** The testcase() macro is only used by the amalgamation. If undefined,
116232 ** make it a no-op.
116234 #ifndef testcase
116235 # define testcase(X)
116236 #endif
116239 ** Terminator values for position-lists and column-lists.
116241 #define POS_COLUMN (1) /* Column-list terminator */
116242 #define POS_END (0) /* Position-list terminator */
116245 ** This section provides definitions to allow the
116246 ** FTS3 extension to be compiled outside of the
116247 ** amalgamation.
116249 #ifndef SQLITE_AMALGAMATION
116251 ** Macros indicating that conditional expressions are always true or
116252 ** false.
116254 #ifdef SQLITE_COVERAGE_TEST
116255 # define ALWAYS(x) (1)
116256 # define NEVER(X) (0)
116257 #else
116258 # define ALWAYS(x) (x)
116259 # define NEVER(X) (x)
116260 #endif
116263 ** Internal types used by SQLite.
116265 typedef unsigned char u8; /* 1-byte (or larger) unsigned integer */
116266 typedef short int i16; /* 2-byte (or larger) signed integer */
116267 typedef unsigned int u32; /* 4-byte unsigned integer */
116268 typedef sqlite3_uint64 u64; /* 8-byte unsigned integer */
116271 ** Macro used to suppress compiler warnings for unused parameters.
116273 #define UNUSED_PARAMETER(x) (void)(x)
116276 ** Activate assert() only if SQLITE_TEST is enabled.
116278 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
116279 # define NDEBUG 1
116280 #endif
116283 ** The TESTONLY macro is used to enclose variable declarations or
116284 ** other bits of code that are needed to support the arguments
116285 ** within testcase() and assert() macros.
116287 #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
116288 # define TESTONLY(X) X
116289 #else
116290 # define TESTONLY(X)
116291 #endif
116293 #endif /* SQLITE_AMALGAMATION */
116295 #ifdef SQLITE_DEBUG
116296 SQLITE_PRIVATE int sqlite3Fts3Corrupt(void);
116297 # define FTS_CORRUPT_VTAB sqlite3Fts3Corrupt()
116298 #else
116299 # define FTS_CORRUPT_VTAB SQLITE_CORRUPT_VTAB
116300 #endif
116302 typedef struct Fts3Table Fts3Table;
116303 typedef struct Fts3Cursor Fts3Cursor;
116304 typedef struct Fts3Expr Fts3Expr;
116305 typedef struct Fts3Phrase Fts3Phrase;
116306 typedef struct Fts3PhraseToken Fts3PhraseToken;
116308 typedef struct Fts3Doclist Fts3Doclist;
116309 typedef struct Fts3SegFilter Fts3SegFilter;
116310 typedef struct Fts3DeferredToken Fts3DeferredToken;
116311 typedef struct Fts3SegReader Fts3SegReader;
116312 typedef struct Fts3MultiSegReader Fts3MultiSegReader;
116315 ** A connection to a fulltext index is an instance of the following
116316 ** structure. The xCreate and xConnect methods create an instance
116317 ** of this structure and xDestroy and xDisconnect free that instance.
116318 ** All other methods receive a pointer to the structure as one of their
116319 ** arguments.
116321 struct Fts3Table {
116322 sqlite3_vtab base; /* Base class used by SQLite core */
116323 sqlite3 *db; /* The database connection */
116324 const char *zDb; /* logical database name */
116325 const char *zName; /* virtual table name */
116326 int nColumn; /* number of named columns in virtual table */
116327 char **azColumn; /* column names. malloced */
116328 sqlite3_tokenizer *pTokenizer; /* tokenizer for inserts and queries */
116329 char *zContentTbl; /* content=xxx option, or NULL */
116331 /* Precompiled statements used by the implementation. Each of these
116332 ** statements is run and reset within a single virtual table API call.
116334 sqlite3_stmt *aStmt[27];
116336 char *zReadExprlist;
116337 char *zWriteExprlist;
116339 int nNodeSize; /* Soft limit for node size */
116340 u8 bHasStat; /* True if %_stat table exists */
116341 u8 bHasDocsize; /* True if %_docsize table exists */
116342 u8 bDescIdx; /* True if doclists are in reverse order */
116343 int nPgsz; /* Page size for host database */
116344 char *zSegmentsTbl; /* Name of %_segments table */
116345 sqlite3_blob *pSegments; /* Blob handle open on %_segments table */
116347 /* TODO: Fix the first paragraph of this comment.
116349 ** The following hash table is used to buffer pending index updates during
116350 ** transactions. Variable nPendingData estimates the memory size of the
116351 ** pending data, including hash table overhead, but not malloc overhead.
116352 ** When nPendingData exceeds nMaxPendingData, the buffer is flushed
116353 ** automatically. Variable iPrevDocid is the docid of the most recently
116354 ** inserted record.
116356 ** A single FTS4 table may have multiple full-text indexes. For each index
116357 ** there is an entry in the aIndex[] array. Index 0 is an index of all the
116358 ** terms that appear in the document set. Each subsequent index in aIndex[]
116359 ** is an index of prefixes of a specific length.
116361 int nIndex; /* Size of aIndex[] */
116362 struct Fts3Index {
116363 int nPrefix; /* Prefix length (0 for main terms index) */
116364 Fts3Hash hPending; /* Pending terms table for this index */
116365 } *aIndex;
116366 int nMaxPendingData; /* Max pending data before flush to disk */
116367 int nPendingData; /* Current bytes of pending data */
116368 sqlite_int64 iPrevDocid; /* Docid of most recently inserted document */
116370 #if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
116371 /* State variables used for validating that the transaction control
116372 ** methods of the virtual table are called at appropriate times. These
116373 ** values do not contribution to the FTS computation; they are used for
116374 ** verifying the SQLite core.
116376 int inTransaction; /* True after xBegin but before xCommit/xRollback */
116377 int mxSavepoint; /* Largest valid xSavepoint integer */
116378 #endif
116382 ** When the core wants to read from the virtual table, it creates a
116383 ** virtual table cursor (an instance of the following structure) using
116384 ** the xOpen method. Cursors are destroyed using the xClose method.
116386 struct Fts3Cursor {
116387 sqlite3_vtab_cursor base; /* Base class used by SQLite core */
116388 i16 eSearch; /* Search strategy (see below) */
116389 u8 isEof; /* True if at End Of Results */
116390 u8 isRequireSeek; /* True if must seek pStmt to %_content row */
116391 sqlite3_stmt *pStmt; /* Prepared statement in use by the cursor */
116392 Fts3Expr *pExpr; /* Parsed MATCH query string */
116393 int nPhrase; /* Number of matchable phrases in query */
116394 Fts3DeferredToken *pDeferred; /* Deferred search tokens, if any */
116395 sqlite3_int64 iPrevId; /* Previous id read from aDoclist */
116396 char *pNextId; /* Pointer into the body of aDoclist */
116397 char *aDoclist; /* List of docids for full-text queries */
116398 int nDoclist; /* Size of buffer at aDoclist */
116399 u8 bDesc; /* True to sort in descending order */
116400 int eEvalmode; /* An FTS3_EVAL_XX constant */
116401 int nRowAvg; /* Average size of database rows, in pages */
116402 sqlite3_int64 nDoc; /* Documents in table */
116404 int isMatchinfoNeeded; /* True when aMatchinfo[] needs filling in */
116405 u32 *aMatchinfo; /* Information about most recent match */
116406 int nMatchinfo; /* Number of elements in aMatchinfo[] */
116407 char *zMatchinfo; /* Matchinfo specification */
116410 #define FTS3_EVAL_FILTER 0
116411 #define FTS3_EVAL_NEXT 1
116412 #define FTS3_EVAL_MATCHINFO 2
116415 ** The Fts3Cursor.eSearch member is always set to one of the following.
116416 ** Actualy, Fts3Cursor.eSearch can be greater than or equal to
116417 ** FTS3_FULLTEXT_SEARCH. If so, then Fts3Cursor.eSearch - 2 is the index
116418 ** of the column to be searched. For example, in
116420 ** CREATE VIRTUAL TABLE ex1 USING fts3(a,b,c,d);
116421 ** SELECT docid FROM ex1 WHERE b MATCH 'one two three';
116423 ** Because the LHS of the MATCH operator is 2nd column "b",
116424 ** Fts3Cursor.eSearch will be set to FTS3_FULLTEXT_SEARCH+1. (+0 for a,
116425 ** +1 for b, +2 for c, +3 for d.) If the LHS of MATCH were "ex1"
116426 ** indicating that all columns should be searched,
116427 ** then eSearch would be set to FTS3_FULLTEXT_SEARCH+4.
116429 #define FTS3_FULLSCAN_SEARCH 0 /* Linear scan of %_content table */
116430 #define FTS3_DOCID_SEARCH 1 /* Lookup by rowid on %_content table */
116431 #define FTS3_FULLTEXT_SEARCH 2 /* Full-text index search */
116434 struct Fts3Doclist {
116435 char *aAll; /* Array containing doclist (or NULL) */
116436 int nAll; /* Size of a[] in bytes */
116437 char *pNextDocid; /* Pointer to next docid */
116439 sqlite3_int64 iDocid; /* Current docid (if pList!=0) */
116440 int bFreeList; /* True if pList should be sqlite3_free()d */
116441 char *pList; /* Pointer to position list following iDocid */
116442 int nList; /* Length of position list */
116446 ** A "phrase" is a sequence of one or more tokens that must match in
116447 ** sequence. A single token is the base case and the most common case.
116448 ** For a sequence of tokens contained in double-quotes (i.e. "one two three")
116449 ** nToken will be the number of tokens in the string.
116451 struct Fts3PhraseToken {
116452 char *z; /* Text of the token */
116453 int n; /* Number of bytes in buffer z */
116454 int isPrefix; /* True if token ends with a "*" character */
116455 int bFirst; /* True if token must appear at position 0 */
116457 /* Variables above this point are populated when the expression is
116458 ** parsed (by code in fts3_expr.c). Below this point the variables are
116459 ** used when evaluating the expression. */
116460 Fts3DeferredToken *pDeferred; /* Deferred token object for this token */
116461 Fts3MultiSegReader *pSegcsr; /* Segment-reader for this token */
116464 struct Fts3Phrase {
116465 /* Cache of doclist for this phrase. */
116466 Fts3Doclist doclist;
116467 int bIncr; /* True if doclist is loaded incrementally */
116468 int iDoclistToken;
116470 /* Variables below this point are populated by fts3_expr.c when parsing
116471 ** a MATCH expression. Everything above is part of the evaluation phase.
116473 int nToken; /* Number of tokens in the phrase */
116474 int iColumn; /* Index of column this phrase must match */
116475 Fts3PhraseToken aToken[1]; /* One entry for each token in the phrase */
116479 ** A tree of these objects forms the RHS of a MATCH operator.
116481 ** If Fts3Expr.eType is FTSQUERY_PHRASE and isLoaded is true, then aDoclist
116482 ** points to a malloced buffer, size nDoclist bytes, containing the results
116483 ** of this phrase query in FTS3 doclist format. As usual, the initial
116484 ** "Length" field found in doclists stored on disk is omitted from this
116485 ** buffer.
116487 ** Variable aMI is used only for FTSQUERY_NEAR nodes to store the global
116488 ** matchinfo data. If it is not NULL, it points to an array of size nCol*3,
116489 ** where nCol is the number of columns in the queried FTS table. The array
116490 ** is populated as follows:
116492 ** aMI[iCol*3 + 0] = Undefined
116493 ** aMI[iCol*3 + 1] = Number of occurrences
116494 ** aMI[iCol*3 + 2] = Number of rows containing at least one instance
116496 ** The aMI array is allocated using sqlite3_malloc(). It should be freed
116497 ** when the expression node is.
116499 struct Fts3Expr {
116500 int eType; /* One of the FTSQUERY_XXX values defined below */
116501 int nNear; /* Valid if eType==FTSQUERY_NEAR */
116502 Fts3Expr *pParent; /* pParent->pLeft==this or pParent->pRight==this */
116503 Fts3Expr *pLeft; /* Left operand */
116504 Fts3Expr *pRight; /* Right operand */
116505 Fts3Phrase *pPhrase; /* Valid if eType==FTSQUERY_PHRASE */
116507 /* The following are used by the fts3_eval.c module. */
116508 sqlite3_int64 iDocid; /* Current docid */
116509 u8 bEof; /* True this expression is at EOF already */
116510 u8 bStart; /* True if iDocid is valid */
116511 u8 bDeferred; /* True if this expression is entirely deferred */
116513 u32 *aMI;
116517 ** Candidate values for Fts3Query.eType. Note that the order of the first
116518 ** four values is in order of precedence when parsing expressions. For
116519 ** example, the following:
116521 ** "a OR b AND c NOT d NEAR e"
116523 ** is equivalent to:
116525 ** "a OR (b AND (c NOT (d NEAR e)))"
116527 #define FTSQUERY_NEAR 1
116528 #define FTSQUERY_NOT 2
116529 #define FTSQUERY_AND 3
116530 #define FTSQUERY_OR 4
116531 #define FTSQUERY_PHRASE 5
116534 /* fts3_write.c */
116535 SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(sqlite3_vtab*,int,sqlite3_value**,sqlite3_int64*);
116536 SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *);
116537 SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *);
116538 SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *);
116539 SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(int, sqlite3_int64,
116540 sqlite3_int64, sqlite3_int64, const char *, int, Fts3SegReader**);
116541 SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
116542 Fts3Table*,int,const char*,int,int,Fts3SegReader**);
116543 SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *);
116544 SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, int, int, sqlite3_stmt **);
116545 SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *);
116546 SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char **, int*, int*);
116548 SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(Fts3Table *, sqlite3_stmt **);
116549 SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(Fts3Table *, sqlite3_int64, sqlite3_stmt **);
116551 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *);
116552 SQLITE_PRIVATE int sqlite3Fts3DeferToken(Fts3Cursor *, Fts3PhraseToken *, int);
116553 SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *);
116554 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *);
116555 SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *);
116557 /* Special values interpreted by sqlite3SegReaderCursor() */
116558 #define FTS3_SEGCURSOR_PENDING -1
116559 #define FTS3_SEGCURSOR_ALL -2
116561 SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(Fts3Table*, Fts3MultiSegReader*, Fts3SegFilter*);
116562 SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(Fts3Table *, Fts3MultiSegReader *);
116563 SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(Fts3MultiSegReader *);
116565 SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
116566 Fts3Table *, int, int, const char *, int, int, int, Fts3MultiSegReader *);
116568 /* Flags allowed as part of the 4th argument to SegmentReaderIterate() */
116569 #define FTS3_SEGMENT_REQUIRE_POS 0x00000001
116570 #define FTS3_SEGMENT_IGNORE_EMPTY 0x00000002
116571 #define FTS3_SEGMENT_COLUMN_FILTER 0x00000004
116572 #define FTS3_SEGMENT_PREFIX 0x00000008
116573 #define FTS3_SEGMENT_SCAN 0x00000010
116574 #define FTS3_SEGMENT_FIRST 0x00000020
116576 /* Type passed as 4th argument to SegmentReaderIterate() */
116577 struct Fts3SegFilter {
116578 const char *zTerm;
116579 int nTerm;
116580 int iCol;
116581 int flags;
116584 struct Fts3MultiSegReader {
116585 /* Used internally by sqlite3Fts3SegReaderXXX() calls */
116586 Fts3SegReader **apSegment; /* Array of Fts3SegReader objects */
116587 int nSegment; /* Size of apSegment array */
116588 int nAdvance; /* How many seg-readers to advance */
116589 Fts3SegFilter *pFilter; /* Pointer to filter object */
116590 char *aBuffer; /* Buffer to merge doclists in */
116591 int nBuffer; /* Allocated size of aBuffer[] in bytes */
116593 int iColFilter; /* If >=0, filter for this column */
116594 int bRestart;
116596 /* Used by fts3.c only. */
116597 int nCost; /* Cost of running iterator */
116598 int bLookup; /* True if a lookup of a single entry. */
116600 /* Output values. Valid only after Fts3SegReaderStep() returns SQLITE_ROW. */
116601 char *zTerm; /* Pointer to term buffer */
116602 int nTerm; /* Size of zTerm in bytes */
116603 char *aDoclist; /* Pointer to doclist buffer */
116604 int nDoclist; /* Size of aDoclist[] in bytes */
116607 /* fts3.c */
116608 SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *, sqlite3_int64);
116609 SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *, sqlite_int64 *);
116610 SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *, int *);
116611 SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64);
116612 SQLITE_PRIVATE void sqlite3Fts3Dequote(char *);
116613 SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(int,char*,int,char**,sqlite3_int64*,int*,u8*);
116614 SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(Fts3Cursor *, Fts3Expr *, u32 *);
116615 SQLITE_PRIVATE int sqlite3Fts3FirstFilter(sqlite3_int64, char *, int, char *);
116617 /* fts3_tokenizer.c */
116618 SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *, int *);
116619 SQLITE_PRIVATE int sqlite3Fts3InitHashTable(sqlite3 *, Fts3Hash *, const char *);
116620 SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(Fts3Hash *pHash, const char *,
116621 sqlite3_tokenizer **, char **
116623 SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char);
116625 /* fts3_snippet.c */
116626 SQLITE_PRIVATE void sqlite3Fts3Offsets(sqlite3_context*, Fts3Cursor*);
116627 SQLITE_PRIVATE void sqlite3Fts3Snippet(sqlite3_context *, Fts3Cursor *, const char *,
116628 const char *, const char *, int, int
116630 SQLITE_PRIVATE void sqlite3Fts3Matchinfo(sqlite3_context *, Fts3Cursor *, const char *);
116632 /* fts3_expr.c */
116633 SQLITE_PRIVATE int sqlite3Fts3ExprParse(sqlite3_tokenizer *,
116634 char **, int, int, int, const char *, int, Fts3Expr **
116636 SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *);
116637 #ifdef SQLITE_TEST
116638 SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3 *db);
116639 SQLITE_PRIVATE int sqlite3Fts3InitTerm(sqlite3 *db);
116640 #endif
116642 /* fts3_aux.c */
116643 SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db);
116645 SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *);
116647 SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
116648 Fts3Table*, Fts3MultiSegReader*, int, const char*, int);
116649 SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
116650 Fts3Table *, Fts3MultiSegReader *, sqlite3_int64 *, char **, int *);
116651 SQLITE_PRIVATE char *sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol);
116652 SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *);
116653 SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
116655 SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(Fts3DeferredToken *, char **, int *);
116657 #endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */
116658 #endif /* _FTSINT_H */
116660 /************** End of fts3Int.h *********************************************/
116661 /************** Continuing where we left off in fts3.c ***********************/
116662 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
116664 #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE)
116665 # define SQLITE_CORE 1
116666 #endif
116668 /* #include <assert.h> */
116669 /* #include <stdlib.h> */
116670 /* #include <stddef.h> */
116671 /* #include <stdio.h> */
116672 /* #include <string.h> */
116673 /* #include <stdarg.h> */
116675 #ifndef SQLITE_CORE
116676 SQLITE_EXTENSION_INIT1
116677 #endif
116679 static int fts3EvalNext(Fts3Cursor *pCsr);
116680 static int fts3EvalStart(Fts3Cursor *pCsr);
116681 static int fts3TermSegReaderCursor(
116682 Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **);
116685 ** Write a 64-bit variable-length integer to memory starting at p[0].
116686 ** The length of data written will be between 1 and FTS3_VARINT_MAX bytes.
116687 ** The number of bytes written is returned.
116689 SQLITE_PRIVATE int sqlite3Fts3PutVarint(char *p, sqlite_int64 v){
116690 unsigned char *q = (unsigned char *) p;
116691 sqlite_uint64 vu = v;
116693 *q++ = (unsigned char) ((vu & 0x7f) | 0x80);
116694 vu >>= 7;
116695 }while( vu!=0 );
116696 q[-1] &= 0x7f; /* turn off high bit in final byte */
116697 assert( q - (unsigned char *)p <= FTS3_VARINT_MAX );
116698 return (int) (q - (unsigned char *)p);
116702 ** Read a 64-bit variable-length integer from memory starting at p[0].
116703 ** Return the number of bytes read, or 0 on error.
116704 ** The value is stored in *v.
116706 SQLITE_PRIVATE int sqlite3Fts3GetVarint(const char *p, sqlite_int64 *v){
116707 const unsigned char *q = (const unsigned char *) p;
116708 sqlite_uint64 x = 0, y = 1;
116709 while( (*q&0x80)==0x80 && q-(unsigned char *)p<FTS3_VARINT_MAX ){
116710 x += y * (*q++ & 0x7f);
116711 y <<= 7;
116713 x += y * (*q++);
116714 *v = (sqlite_int64) x;
116715 return (int) (q - (unsigned char *)p);
116719 ** Similar to sqlite3Fts3GetVarint(), except that the output is truncated to a
116720 ** 32-bit integer before it is returned.
116722 SQLITE_PRIVATE int sqlite3Fts3GetVarint32(const char *p, int *pi){
116723 sqlite_int64 i;
116724 int ret = sqlite3Fts3GetVarint(p, &i);
116725 *pi = (int) i;
116726 return ret;
116730 ** Return the number of bytes required to encode v as a varint
116732 SQLITE_PRIVATE int sqlite3Fts3VarintLen(sqlite3_uint64 v){
116733 int i = 0;
116736 v >>= 7;
116737 }while( v!=0 );
116738 return i;
116742 ** Convert an SQL-style quoted string into a normal string by removing
116743 ** the quote characters. The conversion is done in-place. If the
116744 ** input does not begin with a quote character, then this routine
116745 ** is a no-op.
116747 ** Examples:
116749 ** "abc" becomes abc
116750 ** 'xyz' becomes xyz
116751 ** [pqr] becomes pqr
116752 ** `mno` becomes mno
116755 SQLITE_PRIVATE void sqlite3Fts3Dequote(char *z){
116756 char quote; /* Quote character (if any ) */
116758 quote = z[0];
116759 if( quote=='[' || quote=='\'' || quote=='"' || quote=='`' ){
116760 int iIn = 1; /* Index of next byte to read from input */
116761 int iOut = 0; /* Index of next byte to write to output */
116763 /* If the first byte was a '[', then the close-quote character is a ']' */
116764 if( quote=='[' ) quote = ']';
116766 while( ALWAYS(z[iIn]) ){
116767 if( z[iIn]==quote ){
116768 if( z[iIn+1]!=quote ) break;
116769 z[iOut++] = quote;
116770 iIn += 2;
116771 }else{
116772 z[iOut++] = z[iIn++];
116775 z[iOut] = '\0';
116780 ** Read a single varint from the doclist at *pp and advance *pp to point
116781 ** to the first byte past the end of the varint. Add the value of the varint
116782 ** to *pVal.
116784 static void fts3GetDeltaVarint(char **pp, sqlite3_int64 *pVal){
116785 sqlite3_int64 iVal;
116786 *pp += sqlite3Fts3GetVarint(*pp, &iVal);
116787 *pVal += iVal;
116791 ** When this function is called, *pp points to the first byte following a
116792 ** varint that is part of a doclist (or position-list, or any other list
116793 ** of varints). This function moves *pp to point to the start of that varint,
116794 ** and sets *pVal by the varint value.
116796 ** Argument pStart points to the first byte of the doclist that the
116797 ** varint is part of.
116799 static void fts3GetReverseVarint(
116800 char **pp,
116801 char *pStart,
116802 sqlite3_int64 *pVal
116804 sqlite3_int64 iVal;
116805 char *p;
116807 /* Pointer p now points at the first byte past the varint we are
116808 ** interested in. So, unless the doclist is corrupt, the 0x80 bit is
116809 ** clear on character p[-1]. */
116810 for(p = (*pp)-2; p>=pStart && *p&0x80; p--);
116812 *pp = p;
116814 sqlite3Fts3GetVarint(p, &iVal);
116815 *pVal = iVal;
116819 ** The xDisconnect() virtual table method.
116821 static int fts3DisconnectMethod(sqlite3_vtab *pVtab){
116822 Fts3Table *p = (Fts3Table *)pVtab;
116823 int i;
116825 assert( p->nPendingData==0 );
116826 assert( p->pSegments==0 );
116828 /* Free any prepared statements held */
116829 for(i=0; i<SizeofArray(p->aStmt); i++){
116830 sqlite3_finalize(p->aStmt[i]);
116832 sqlite3_free(p->zSegmentsTbl);
116833 sqlite3_free(p->zReadExprlist);
116834 sqlite3_free(p->zWriteExprlist);
116835 sqlite3_free(p->zContentTbl);
116837 /* Invoke the tokenizer destructor to free the tokenizer. */
116838 p->pTokenizer->pModule->xDestroy(p->pTokenizer);
116840 sqlite3_free(p);
116841 return SQLITE_OK;
116845 ** Construct one or more SQL statements from the format string given
116846 ** and then evaluate those statements. The success code is written
116847 ** into *pRc.
116849 ** If *pRc is initially non-zero then this routine is a no-op.
116851 static void fts3DbExec(
116852 int *pRc, /* Success code */
116853 sqlite3 *db, /* Database in which to run SQL */
116854 const char *zFormat, /* Format string for SQL */
116855 ... /* Arguments to the format string */
116857 va_list ap;
116858 char *zSql;
116859 if( *pRc ) return;
116860 va_start(ap, zFormat);
116861 zSql = sqlite3_vmprintf(zFormat, ap);
116862 va_end(ap);
116863 if( zSql==0 ){
116864 *pRc = SQLITE_NOMEM;
116865 }else{
116866 *pRc = sqlite3_exec(db, zSql, 0, 0, 0);
116867 sqlite3_free(zSql);
116872 ** The xDestroy() virtual table method.
116874 static int fts3DestroyMethod(sqlite3_vtab *pVtab){
116875 Fts3Table *p = (Fts3Table *)pVtab;
116876 int rc = SQLITE_OK; /* Return code */
116877 const char *zDb = p->zDb; /* Name of database (e.g. "main", "temp") */
116878 sqlite3 *db = p->db; /* Database handle */
116880 /* Drop the shadow tables */
116881 if( p->zContentTbl==0 ){
116882 fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_content'", zDb, p->zName);
116884 fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segments'", zDb,p->zName);
116885 fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_segdir'", zDb, p->zName);
116886 fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_docsize'", zDb, p->zName);
116887 fts3DbExec(&rc, db, "DROP TABLE IF EXISTS %Q.'%q_stat'", zDb, p->zName);
116889 /* If everything has worked, invoke fts3DisconnectMethod() to free the
116890 ** memory associated with the Fts3Table structure and return SQLITE_OK.
116891 ** Otherwise, return an SQLite error code.
116893 return (rc==SQLITE_OK ? fts3DisconnectMethod(pVtab) : rc);
116898 ** Invoke sqlite3_declare_vtab() to declare the schema for the FTS3 table
116899 ** passed as the first argument. This is done as part of the xConnect()
116900 ** and xCreate() methods.
116902 ** If *pRc is non-zero when this function is called, it is a no-op.
116903 ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
116904 ** before returning.
116906 static void fts3DeclareVtab(int *pRc, Fts3Table *p){
116907 if( *pRc==SQLITE_OK ){
116908 int i; /* Iterator variable */
116909 int rc; /* Return code */
116910 char *zSql; /* SQL statement passed to declare_vtab() */
116911 char *zCols; /* List of user defined columns */
116913 sqlite3_vtab_config(p->db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
116915 /* Create a list of user columns for the virtual table */
116916 zCols = sqlite3_mprintf("%Q, ", p->azColumn[0]);
116917 for(i=1; zCols && i<p->nColumn; i++){
116918 zCols = sqlite3_mprintf("%z%Q, ", zCols, p->azColumn[i]);
116921 /* Create the whole "CREATE TABLE" statement to pass to SQLite */
116922 zSql = sqlite3_mprintf(
116923 "CREATE TABLE x(%s %Q HIDDEN, docid HIDDEN)", zCols, p->zName
116925 if( !zCols || !zSql ){
116926 rc = SQLITE_NOMEM;
116927 }else{
116928 rc = sqlite3_declare_vtab(p->db, zSql);
116931 sqlite3_free(zSql);
116932 sqlite3_free(zCols);
116933 *pRc = rc;
116938 ** Create the backing store tables (%_content, %_segments and %_segdir)
116939 ** required by the FTS3 table passed as the only argument. This is done
116940 ** as part of the vtab xCreate() method.
116942 ** If the p->bHasDocsize boolean is true (indicating that this is an
116943 ** FTS4 table, not an FTS3 table) then also create the %_docsize and
116944 ** %_stat tables required by FTS4.
116946 static int fts3CreateTables(Fts3Table *p){
116947 int rc = SQLITE_OK; /* Return code */
116948 int i; /* Iterator variable */
116949 sqlite3 *db = p->db; /* The database connection */
116951 if( p->zContentTbl==0 ){
116952 char *zContentCols; /* Columns of %_content table */
116954 /* Create a list of user columns for the content table */
116955 zContentCols = sqlite3_mprintf("docid INTEGER PRIMARY KEY");
116956 for(i=0; zContentCols && i<p->nColumn; i++){
116957 char *z = p->azColumn[i];
116958 zContentCols = sqlite3_mprintf("%z, 'c%d%q'", zContentCols, i, z);
116960 if( zContentCols==0 ) rc = SQLITE_NOMEM;
116962 /* Create the content table */
116963 fts3DbExec(&rc, db,
116964 "CREATE TABLE %Q.'%q_content'(%s)",
116965 p->zDb, p->zName, zContentCols
116967 sqlite3_free(zContentCols);
116970 /* Create other tables */
116971 fts3DbExec(&rc, db,
116972 "CREATE TABLE %Q.'%q_segments'(blockid INTEGER PRIMARY KEY, block BLOB);",
116973 p->zDb, p->zName
116975 fts3DbExec(&rc, db,
116976 "CREATE TABLE %Q.'%q_segdir'("
116977 "level INTEGER,"
116978 "idx INTEGER,"
116979 "start_block INTEGER,"
116980 "leaves_end_block INTEGER,"
116981 "end_block INTEGER,"
116982 "root BLOB,"
116983 "PRIMARY KEY(level, idx)"
116984 ");",
116985 p->zDb, p->zName
116987 if( p->bHasDocsize ){
116988 fts3DbExec(&rc, db,
116989 "CREATE TABLE %Q.'%q_docsize'(docid INTEGER PRIMARY KEY, size BLOB);",
116990 p->zDb, p->zName
116993 if( p->bHasStat ){
116994 fts3DbExec(&rc, db,
116995 "CREATE TABLE %Q.'%q_stat'(id INTEGER PRIMARY KEY, value BLOB);",
116996 p->zDb, p->zName
116999 return rc;
117003 ** Store the current database page-size in bytes in p->nPgsz.
117005 ** If *pRc is non-zero when this function is called, it is a no-op.
117006 ** Otherwise, if an error occurs, an SQLite error code is stored in *pRc
117007 ** before returning.
117009 static void fts3DatabasePageSize(int *pRc, Fts3Table *p){
117010 if( *pRc==SQLITE_OK ){
117011 int rc; /* Return code */
117012 char *zSql; /* SQL text "PRAGMA %Q.page_size" */
117013 sqlite3_stmt *pStmt; /* Compiled "PRAGMA %Q.page_size" statement */
117015 zSql = sqlite3_mprintf("PRAGMA %Q.page_size", p->zDb);
117016 if( !zSql ){
117017 rc = SQLITE_NOMEM;
117018 }else{
117019 rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
117020 if( rc==SQLITE_OK ){
117021 sqlite3_step(pStmt);
117022 p->nPgsz = sqlite3_column_int(pStmt, 0);
117023 rc = sqlite3_finalize(pStmt);
117024 }else if( rc==SQLITE_AUTH ){
117025 p->nPgsz = 1024;
117026 rc = SQLITE_OK;
117029 assert( p->nPgsz>0 || rc!=SQLITE_OK );
117030 sqlite3_free(zSql);
117031 *pRc = rc;
117036 ** "Special" FTS4 arguments are column specifications of the following form:
117038 ** <key> = <value>
117040 ** There may not be whitespace surrounding the "=" character. The <value>
117041 ** term may be quoted, but the <key> may not.
117043 static int fts3IsSpecialColumn(
117044 const char *z,
117045 int *pnKey,
117046 char **pzValue
117048 char *zValue;
117049 const char *zCsr = z;
117051 while( *zCsr!='=' ){
117052 if( *zCsr=='\0' ) return 0;
117053 zCsr++;
117056 *pnKey = (int)(zCsr-z);
117057 zValue = sqlite3_mprintf("%s", &zCsr[1]);
117058 if( zValue ){
117059 sqlite3Fts3Dequote(zValue);
117061 *pzValue = zValue;
117062 return 1;
117066 ** Append the output of a printf() style formatting to an existing string.
117068 static void fts3Appendf(
117069 int *pRc, /* IN/OUT: Error code */
117070 char **pz, /* IN/OUT: Pointer to string buffer */
117071 const char *zFormat, /* Printf format string to append */
117072 ... /* Arguments for printf format string */
117074 if( *pRc==SQLITE_OK ){
117075 va_list ap;
117076 char *z;
117077 va_start(ap, zFormat);
117078 z = sqlite3_vmprintf(zFormat, ap);
117079 va_end(ap);
117080 if( z && *pz ){
117081 char *z2 = sqlite3_mprintf("%s%s", *pz, z);
117082 sqlite3_free(z);
117083 z = z2;
117085 if( z==0 ) *pRc = SQLITE_NOMEM;
117086 sqlite3_free(*pz);
117087 *pz = z;
117092 ** Return a copy of input string zInput enclosed in double-quotes (") and
117093 ** with all double quote characters escaped. For example:
117095 ** fts3QuoteId("un \"zip\"") -> "un \"\"zip\"\""
117097 ** The pointer returned points to memory obtained from sqlite3_malloc(). It
117098 ** is the callers responsibility to call sqlite3_free() to release this
117099 ** memory.
117101 static char *fts3QuoteId(char const *zInput){
117102 int nRet;
117103 char *zRet;
117104 nRet = 2 + strlen(zInput)*2 + 1;
117105 zRet = sqlite3_malloc(nRet);
117106 if( zRet ){
117107 int i;
117108 char *z = zRet;
117109 *(z++) = '"';
117110 for(i=0; zInput[i]; i++){
117111 if( zInput[i]=='"' ) *(z++) = '"';
117112 *(z++) = zInput[i];
117114 *(z++) = '"';
117115 *(z++) = '\0';
117117 return zRet;
117121 ** Return a list of comma separated SQL expressions and a FROM clause that
117122 ** could be used in a SELECT statement such as the following:
117124 ** SELECT <list of expressions> FROM %_content AS x ...
117126 ** to return the docid, followed by each column of text data in order
117127 ** from left to write. If parameter zFunc is not NULL, then instead of
117128 ** being returned directly each column of text data is passed to an SQL
117129 ** function named zFunc first. For example, if zFunc is "unzip" and the
117130 ** table has the three user-defined columns "a", "b", and "c", the following
117131 ** string is returned:
117133 ** "docid, unzip(x.'a'), unzip(x.'b'), unzip(x.'c') FROM %_content AS x"
117135 ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
117136 ** is the responsibility of the caller to eventually free it.
117138 ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
117139 ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
117140 ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
117141 ** no error occurs, *pRc is left unmodified.
117143 static char *fts3ReadExprList(Fts3Table *p, const char *zFunc, int *pRc){
117144 char *zRet = 0;
117145 char *zFree = 0;
117146 char *zFunction;
117147 int i;
117149 if( p->zContentTbl==0 ){
117150 if( !zFunc ){
117151 zFunction = "";
117152 }else{
117153 zFree = zFunction = fts3QuoteId(zFunc);
117155 fts3Appendf(pRc, &zRet, "docid");
117156 for(i=0; i<p->nColumn; i++){
117157 fts3Appendf(pRc, &zRet, ",%s(x.'c%d%q')", zFunction, i, p->azColumn[i]);
117159 sqlite3_free(zFree);
117160 }else{
117161 fts3Appendf(pRc, &zRet, "rowid");
117162 for(i=0; i<p->nColumn; i++){
117163 fts3Appendf(pRc, &zRet, ", x.'%q'", p->azColumn[i]);
117166 fts3Appendf(pRc, &zRet, "FROM '%q'.'%q%s' AS x",
117167 p->zDb,
117168 (p->zContentTbl ? p->zContentTbl : p->zName),
117169 (p->zContentTbl ? "" : "_content")
117171 return zRet;
117175 ** Return a list of N comma separated question marks, where N is the number
117176 ** of columns in the %_content table (one for the docid plus one for each
117177 ** user-defined text column).
117179 ** If argument zFunc is not NULL, then all but the first question mark
117180 ** is preceded by zFunc and an open bracket, and followed by a closed
117181 ** bracket. For example, if zFunc is "zip" and the FTS3 table has three
117182 ** user-defined text columns, the following string is returned:
117184 ** "?, zip(?), zip(?), zip(?)"
117186 ** The pointer returned points to a buffer allocated by sqlite3_malloc(). It
117187 ** is the responsibility of the caller to eventually free it.
117189 ** If *pRc is not SQLITE_OK when this function is called, it is a no-op (and
117190 ** a NULL pointer is returned). Otherwise, if an OOM error is encountered
117191 ** by this function, NULL is returned and *pRc is set to SQLITE_NOMEM. If
117192 ** no error occurs, *pRc is left unmodified.
117194 static char *fts3WriteExprList(Fts3Table *p, const char *zFunc, int *pRc){
117195 char *zRet = 0;
117196 char *zFree = 0;
117197 char *zFunction;
117198 int i;
117200 if( !zFunc ){
117201 zFunction = "";
117202 }else{
117203 zFree = zFunction = fts3QuoteId(zFunc);
117205 fts3Appendf(pRc, &zRet, "?");
117206 for(i=0; i<p->nColumn; i++){
117207 fts3Appendf(pRc, &zRet, ",%s(?)", zFunction);
117209 sqlite3_free(zFree);
117210 return zRet;
117214 ** This function interprets the string at (*pp) as a non-negative integer
117215 ** value. It reads the integer and sets *pnOut to the value read, then
117216 ** sets *pp to point to the byte immediately following the last byte of
117217 ** the integer value.
117219 ** Only decimal digits ('0'..'9') may be part of an integer value.
117221 ** If *pp does not being with a decimal digit SQLITE_ERROR is returned and
117222 ** the output value undefined. Otherwise SQLITE_OK is returned.
117224 ** This function is used when parsing the "prefix=" FTS4 parameter.
117226 static int fts3GobbleInt(const char **pp, int *pnOut){
117227 const char *p; /* Iterator pointer */
117228 int nInt = 0; /* Output value */
117230 for(p=*pp; p[0]>='0' && p[0]<='9'; p++){
117231 nInt = nInt * 10 + (p[0] - '0');
117233 if( p==*pp ) return SQLITE_ERROR;
117234 *pnOut = nInt;
117235 *pp = p;
117236 return SQLITE_OK;
117240 ** This function is called to allocate an array of Fts3Index structures
117241 ** representing the indexes maintained by the current FTS table. FTS tables
117242 ** always maintain the main "terms" index, but may also maintain one or
117243 ** more "prefix" indexes, depending on the value of the "prefix=" parameter
117244 ** (if any) specified as part of the CREATE VIRTUAL TABLE statement.
117246 ** Argument zParam is passed the value of the "prefix=" option if one was
117247 ** specified, or NULL otherwise.
117249 ** If no error occurs, SQLITE_OK is returned and *apIndex set to point to
117250 ** the allocated array. *pnIndex is set to the number of elements in the
117251 ** array. If an error does occur, an SQLite error code is returned.
117253 ** Regardless of whether or not an error is returned, it is the responsibility
117254 ** of the caller to call sqlite3_free() on the output array to free it.
117256 static int fts3PrefixParameter(
117257 const char *zParam, /* ABC in prefix=ABC parameter to parse */
117258 int *pnIndex, /* OUT: size of *apIndex[] array */
117259 struct Fts3Index **apIndex /* OUT: Array of indexes for this table */
117261 struct Fts3Index *aIndex; /* Allocated array */
117262 int nIndex = 1; /* Number of entries in array */
117264 if( zParam && zParam[0] ){
117265 const char *p;
117266 nIndex++;
117267 for(p=zParam; *p; p++){
117268 if( *p==',' ) nIndex++;
117272 aIndex = sqlite3_malloc(sizeof(struct Fts3Index) * nIndex);
117273 *apIndex = aIndex;
117274 *pnIndex = nIndex;
117275 if( !aIndex ){
117276 return SQLITE_NOMEM;
117279 memset(aIndex, 0, sizeof(struct Fts3Index) * nIndex);
117280 if( zParam ){
117281 const char *p = zParam;
117282 int i;
117283 for(i=1; i<nIndex; i++){
117284 int nPrefix;
117285 if( fts3GobbleInt(&p, &nPrefix) ) return SQLITE_ERROR;
117286 aIndex[i].nPrefix = nPrefix;
117291 return SQLITE_OK;
117295 ** This function is called when initializing an FTS4 table that uses the
117296 ** content=xxx option. It determines the number of and names of the columns
117297 ** of the new FTS4 table.
117299 ** The third argument passed to this function is the value passed to the
117300 ** config=xxx option (i.e. "xxx"). This function queries the database for
117301 ** a table of that name. If found, the output variables are populated
117302 ** as follows:
117304 ** *pnCol: Set to the number of columns table xxx has,
117306 ** *pnStr: Set to the total amount of space required to store a copy
117307 ** of each columns name, including the nul-terminator.
117309 ** *pazCol: Set to point to an array of *pnCol strings. Each string is
117310 ** the name of the corresponding column in table xxx. The array
117311 ** and its contents are allocated using a single allocation. It
117312 ** is the responsibility of the caller to free this allocation
117313 ** by eventually passing the *pazCol value to sqlite3_free().
117315 ** If the table cannot be found, an error code is returned and the output
117316 ** variables are undefined. Or, if an OOM is encountered, SQLITE_NOMEM is
117317 ** returned (and the output variables are undefined).
117319 static int fts3ContentColumns(
117320 sqlite3 *db, /* Database handle */
117321 const char *zDb, /* Name of db (i.e. "main", "temp" etc.) */
117322 const char *zTbl, /* Name of content table */
117323 const char ***pazCol, /* OUT: Malloc'd array of column names */
117324 int *pnCol, /* OUT: Size of array *pazCol */
117325 int *pnStr /* OUT: Bytes of string content */
117327 int rc = SQLITE_OK; /* Return code */
117328 char *zSql; /* "SELECT *" statement on zTbl */
117329 sqlite3_stmt *pStmt = 0; /* Compiled version of zSql */
117331 zSql = sqlite3_mprintf("SELECT * FROM %Q.%Q", zDb, zTbl);
117332 if( !zSql ){
117333 rc = SQLITE_NOMEM;
117334 }else{
117335 rc = sqlite3_prepare(db, zSql, -1, &pStmt, 0);
117337 sqlite3_free(zSql);
117339 if( rc==SQLITE_OK ){
117340 const char **azCol; /* Output array */
117341 int nStr = 0; /* Size of all column names (incl. 0x00) */
117342 int nCol; /* Number of table columns */
117343 int i; /* Used to iterate through columns */
117345 /* Loop through the returned columns. Set nStr to the number of bytes of
117346 ** space required to store a copy of each column name, including the
117347 ** nul-terminator byte. */
117348 nCol = sqlite3_column_count(pStmt);
117349 for(i=0; i<nCol; i++){
117350 const char *zCol = sqlite3_column_name(pStmt, i);
117351 nStr += strlen(zCol) + 1;
117354 /* Allocate and populate the array to return. */
117355 azCol = (const char **)sqlite3_malloc(sizeof(char *) * nCol + nStr);
117356 if( azCol==0 ){
117357 rc = SQLITE_NOMEM;
117358 }else{
117359 char *p = (char *)&azCol[nCol];
117360 for(i=0; i<nCol; i++){
117361 const char *zCol = sqlite3_column_name(pStmt, i);
117362 int n = strlen(zCol)+1;
117363 memcpy(p, zCol, n);
117364 azCol[i] = p;
117365 p += n;
117368 sqlite3_finalize(pStmt);
117370 /* Set the output variables. */
117371 *pnCol = nCol;
117372 *pnStr = nStr;
117373 *pazCol = azCol;
117376 return rc;
117380 ** This function is the implementation of both the xConnect and xCreate
117381 ** methods of the FTS3 virtual table.
117383 ** The argv[] array contains the following:
117385 ** argv[0] -> module name ("fts3" or "fts4")
117386 ** argv[1] -> database name
117387 ** argv[2] -> table name
117388 ** argv[...] -> "column name" and other module argument fields.
117390 static int fts3InitVtab(
117391 int isCreate, /* True for xCreate, false for xConnect */
117392 sqlite3 *db, /* The SQLite database connection */
117393 void *pAux, /* Hash table containing tokenizers */
117394 int argc, /* Number of elements in argv array */
117395 const char * const *argv, /* xCreate/xConnect argument array */
117396 sqlite3_vtab **ppVTab, /* Write the resulting vtab structure here */
117397 char **pzErr /* Write any error message here */
117399 Fts3Hash *pHash = (Fts3Hash *)pAux;
117400 Fts3Table *p = 0; /* Pointer to allocated vtab */
117401 int rc = SQLITE_OK; /* Return code */
117402 int i; /* Iterator variable */
117403 int nByte; /* Size of allocation used for *p */
117404 int iCol; /* Column index */
117405 int nString = 0; /* Bytes required to hold all column names */
117406 int nCol = 0; /* Number of columns in the FTS table */
117407 char *zCsr; /* Space for holding column names */
117408 int nDb; /* Bytes required to hold database name */
117409 int nName; /* Bytes required to hold table name */
117410 int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */
117411 const char **aCol; /* Array of column names */
117412 sqlite3_tokenizer *pTokenizer = 0; /* Tokenizer for this table */
117414 int nIndex; /* Size of aIndex[] array */
117415 struct Fts3Index *aIndex = 0; /* Array of indexes for this table */
117417 /* The results of parsing supported FTS4 key=value options: */
117418 int bNoDocsize = 0; /* True to omit %_docsize table */
117419 int bDescIdx = 0; /* True to store descending indexes */
117420 char *zPrefix = 0; /* Prefix parameter value (or NULL) */
117421 char *zCompress = 0; /* compress=? parameter (or NULL) */
117422 char *zUncompress = 0; /* uncompress=? parameter (or NULL) */
117423 char *zContent = 0; /* content=? parameter (or NULL) */
117425 assert( strlen(argv[0])==4 );
117426 assert( (sqlite3_strnicmp(argv[0], "fts4", 4)==0 && isFts4)
117427 || (sqlite3_strnicmp(argv[0], "fts3", 4)==0 && !isFts4)
117430 nDb = (int)strlen(argv[1]) + 1;
117431 nName = (int)strlen(argv[2]) + 1;
117433 aCol = (const char **)sqlite3_malloc(sizeof(const char *) * (argc-2) );
117434 if( !aCol ) return SQLITE_NOMEM;
117435 memset((void *)aCol, 0, sizeof(const char *) * (argc-2));
117437 /* Loop through all of the arguments passed by the user to the FTS3/4
117438 ** module (i.e. all the column names and special arguments). This loop
117439 ** does the following:
117441 ** + Figures out the number of columns the FTSX table will have, and
117442 ** the number of bytes of space that must be allocated to store copies
117443 ** of the column names.
117445 ** + If there is a tokenizer specification included in the arguments,
117446 ** initializes the tokenizer pTokenizer.
117448 for(i=3; rc==SQLITE_OK && i<argc; i++){
117449 char const *z = argv[i];
117450 int nKey;
117451 char *zVal;
117453 /* Check if this is a tokenizer specification */
117454 if( !pTokenizer
117455 && strlen(z)>8
117456 && 0==sqlite3_strnicmp(z, "tokenize", 8)
117457 && 0==sqlite3Fts3IsIdChar(z[8])
117459 rc = sqlite3Fts3InitTokenizer(pHash, &z[9], &pTokenizer, pzErr);
117462 /* Check if it is an FTS4 special argument. */
117463 else if( isFts4 && fts3IsSpecialColumn(z, &nKey, &zVal) ){
117464 struct Fts4Option {
117465 const char *zOpt;
117466 int nOpt;
117467 } aFts4Opt[] = {
117468 { "matchinfo", 9 }, /* 0 -> MATCHINFO */
117469 { "prefix", 6 }, /* 1 -> PREFIX */
117470 { "compress", 8 }, /* 2 -> COMPRESS */
117471 { "uncompress", 10 }, /* 3 -> UNCOMPRESS */
117472 { "order", 5 }, /* 4 -> ORDER */
117473 { "content", 7 } /* 5 -> CONTENT */
117476 int iOpt;
117477 if( !zVal ){
117478 rc = SQLITE_NOMEM;
117479 }else{
117480 for(iOpt=0; iOpt<SizeofArray(aFts4Opt); iOpt++){
117481 struct Fts4Option *pOp = &aFts4Opt[iOpt];
117482 if( nKey==pOp->nOpt && !sqlite3_strnicmp(z, pOp->zOpt, pOp->nOpt) ){
117483 break;
117486 if( iOpt==SizeofArray(aFts4Opt) ){
117487 *pzErr = sqlite3_mprintf("unrecognized parameter: %s", z);
117488 rc = SQLITE_ERROR;
117489 }else{
117490 switch( iOpt ){
117491 case 0: /* MATCHINFO */
117492 if( strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "fts3", 4) ){
117493 *pzErr = sqlite3_mprintf("unrecognized matchinfo: %s", zVal);
117494 rc = SQLITE_ERROR;
117496 bNoDocsize = 1;
117497 break;
117499 case 1: /* PREFIX */
117500 sqlite3_free(zPrefix);
117501 zPrefix = zVal;
117502 zVal = 0;
117503 break;
117505 case 2: /* COMPRESS */
117506 sqlite3_free(zCompress);
117507 zCompress = zVal;
117508 zVal = 0;
117509 break;
117511 case 3: /* UNCOMPRESS */
117512 sqlite3_free(zUncompress);
117513 zUncompress = zVal;
117514 zVal = 0;
117515 break;
117517 case 4: /* ORDER */
117518 if( (strlen(zVal)!=3 || sqlite3_strnicmp(zVal, "asc", 3))
117519 && (strlen(zVal)!=4 || sqlite3_strnicmp(zVal, "desc", 4))
117521 *pzErr = sqlite3_mprintf("unrecognized order: %s", zVal);
117522 rc = SQLITE_ERROR;
117524 bDescIdx = (zVal[0]=='d' || zVal[0]=='D');
117525 break;
117527 default: /* CONTENT */
117528 assert( iOpt==5 );
117529 sqlite3_free(zUncompress);
117530 zContent = zVal;
117531 zVal = 0;
117532 break;
117535 sqlite3_free(zVal);
117539 /* Otherwise, the argument is a column name. */
117540 else {
117541 nString += (int)(strlen(z) + 1);
117542 aCol[nCol++] = z;
117546 /* If a content=xxx option was specified, the following:
117548 ** 1. Ignore any compress= and uncompress= options.
117550 ** 2. If no column names were specified as part of the CREATE VIRTUAL
117551 ** TABLE statement, use all columns from the content table.
117553 if( rc==SQLITE_OK && zContent ){
117554 sqlite3_free(zCompress);
117555 sqlite3_free(zUncompress);
117556 zCompress = 0;
117557 zUncompress = 0;
117558 if( nCol==0 ){
117559 sqlite3_free((void*)aCol);
117560 aCol = 0;
117561 rc = fts3ContentColumns(db, argv[1], zContent, &aCol, &nCol, &nString);
117563 assert( rc!=SQLITE_OK || nCol>0 );
117565 if( rc!=SQLITE_OK ) goto fts3_init_out;
117567 if( nCol==0 ){
117568 assert( nString==0 );
117569 aCol[0] = "content";
117570 nString = 8;
117571 nCol = 1;
117574 if( pTokenizer==0 ){
117575 rc = sqlite3Fts3InitTokenizer(pHash, "simple", &pTokenizer, pzErr);
117576 if( rc!=SQLITE_OK ) goto fts3_init_out;
117578 assert( pTokenizer );
117580 rc = fts3PrefixParameter(zPrefix, &nIndex, &aIndex);
117581 if( rc==SQLITE_ERROR ){
117582 assert( zPrefix );
117583 *pzErr = sqlite3_mprintf("error parsing prefix parameter: %s", zPrefix);
117585 if( rc!=SQLITE_OK ) goto fts3_init_out;
117587 /* Allocate and populate the Fts3Table structure. */
117588 nByte = sizeof(Fts3Table) + /* Fts3Table */
117589 nCol * sizeof(char *) + /* azColumn */
117590 nIndex * sizeof(struct Fts3Index) + /* aIndex */
117591 nName + /* zName */
117592 nDb + /* zDb */
117593 nString; /* Space for azColumn strings */
117594 p = (Fts3Table*)sqlite3_malloc(nByte);
117595 if( p==0 ){
117596 rc = SQLITE_NOMEM;
117597 goto fts3_init_out;
117599 memset(p, 0, nByte);
117600 p->db = db;
117601 p->nColumn = nCol;
117602 p->nPendingData = 0;
117603 p->azColumn = (char **)&p[1];
117604 p->pTokenizer = pTokenizer;
117605 p->nMaxPendingData = FTS3_MAX_PENDING_DATA;
117606 p->bHasDocsize = (isFts4 && bNoDocsize==0);
117607 p->bHasStat = isFts4;
117608 p->bDescIdx = bDescIdx;
117609 p->zContentTbl = zContent;
117610 zContent = 0;
117611 TESTONLY( p->inTransaction = -1 );
117612 TESTONLY( p->mxSavepoint = -1 );
117614 p->aIndex = (struct Fts3Index *)&p->azColumn[nCol];
117615 memcpy(p->aIndex, aIndex, sizeof(struct Fts3Index) * nIndex);
117616 p->nIndex = nIndex;
117617 for(i=0; i<nIndex; i++){
117618 fts3HashInit(&p->aIndex[i].hPending, FTS3_HASH_STRING, 1);
117621 /* Fill in the zName and zDb fields of the vtab structure. */
117622 zCsr = (char *)&p->aIndex[nIndex];
117623 p->zName = zCsr;
117624 memcpy(zCsr, argv[2], nName);
117625 zCsr += nName;
117626 p->zDb = zCsr;
117627 memcpy(zCsr, argv[1], nDb);
117628 zCsr += nDb;
117630 /* Fill in the azColumn array */
117631 for(iCol=0; iCol<nCol; iCol++){
117632 char *z;
117633 int n = 0;
117634 z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n);
117635 memcpy(zCsr, z, n);
117636 zCsr[n] = '\0';
117637 sqlite3Fts3Dequote(zCsr);
117638 p->azColumn[iCol] = zCsr;
117639 zCsr += n+1;
117640 assert( zCsr <= &((char *)p)[nByte] );
117643 if( (zCompress==0)!=(zUncompress==0) ){
117644 char const *zMiss = (zCompress==0 ? "compress" : "uncompress");
117645 rc = SQLITE_ERROR;
117646 *pzErr = sqlite3_mprintf("missing %s parameter in fts4 constructor", zMiss);
117648 p->zReadExprlist = fts3ReadExprList(p, zUncompress, &rc);
117649 p->zWriteExprlist = fts3WriteExprList(p, zCompress, &rc);
117650 if( rc!=SQLITE_OK ) goto fts3_init_out;
117652 /* If this is an xCreate call, create the underlying tables in the
117653 ** database. TODO: For xConnect(), it could verify that said tables exist.
117655 if( isCreate ){
117656 rc = fts3CreateTables(p);
117659 /* Figure out the page-size for the database. This is required in order to
117660 ** estimate the cost of loading large doclists from the database. */
117661 fts3DatabasePageSize(&rc, p);
117662 p->nNodeSize = p->nPgsz-35;
117664 /* Declare the table schema to SQLite. */
117665 fts3DeclareVtab(&rc, p);
117667 fts3_init_out:
117668 sqlite3_free(zPrefix);
117669 sqlite3_free(aIndex);
117670 sqlite3_free(zCompress);
117671 sqlite3_free(zUncompress);
117672 sqlite3_free(zContent);
117673 sqlite3_free((void *)aCol);
117674 if( rc!=SQLITE_OK ){
117675 if( p ){
117676 fts3DisconnectMethod((sqlite3_vtab *)p);
117677 }else if( pTokenizer ){
117678 pTokenizer->pModule->xDestroy(pTokenizer);
117680 }else{
117681 assert( p->pSegments==0 );
117682 *ppVTab = &p->base;
117684 return rc;
117688 ** The xConnect() and xCreate() methods for the virtual table. All the
117689 ** work is done in function fts3InitVtab().
117691 static int fts3ConnectMethod(
117692 sqlite3 *db, /* Database connection */
117693 void *pAux, /* Pointer to tokenizer hash table */
117694 int argc, /* Number of elements in argv array */
117695 const char * const *argv, /* xCreate/xConnect argument array */
117696 sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */
117697 char **pzErr /* OUT: sqlite3_malloc'd error message */
117699 return fts3InitVtab(0, db, pAux, argc, argv, ppVtab, pzErr);
117701 static int fts3CreateMethod(
117702 sqlite3 *db, /* Database connection */
117703 void *pAux, /* Pointer to tokenizer hash table */
117704 int argc, /* Number of elements in argv array */
117705 const char * const *argv, /* xCreate/xConnect argument array */
117706 sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */
117707 char **pzErr /* OUT: sqlite3_malloc'd error message */
117709 return fts3InitVtab(1, db, pAux, argc, argv, ppVtab, pzErr);
117713 ** Implementation of the xBestIndex method for FTS3 tables. There
117714 ** are three possible strategies, in order of preference:
117716 ** 1. Direct lookup by rowid or docid.
117717 ** 2. Full-text search using a MATCH operator on a non-docid column.
117718 ** 3. Linear scan of %_content table.
117720 static int fts3BestIndexMethod(sqlite3_vtab *pVTab, sqlite3_index_info *pInfo){
117721 Fts3Table *p = (Fts3Table *)pVTab;
117722 int i; /* Iterator variable */
117723 int iCons = -1; /* Index of constraint to use */
117725 /* By default use a full table scan. This is an expensive option,
117726 ** so search through the constraints to see if a more efficient
117727 ** strategy is possible.
117729 pInfo->idxNum = FTS3_FULLSCAN_SEARCH;
117730 pInfo->estimatedCost = 500000;
117731 for(i=0; i<pInfo->nConstraint; i++){
117732 struct sqlite3_index_constraint *pCons = &pInfo->aConstraint[i];
117733 if( pCons->usable==0 ) continue;
117735 /* A direct lookup on the rowid or docid column. Assign a cost of 1.0. */
117736 if( pCons->op==SQLITE_INDEX_CONSTRAINT_EQ
117737 && (pCons->iColumn<0 || pCons->iColumn==p->nColumn+1 )
117739 pInfo->idxNum = FTS3_DOCID_SEARCH;
117740 pInfo->estimatedCost = 1.0;
117741 iCons = i;
117744 /* A MATCH constraint. Use a full-text search.
117746 ** If there is more than one MATCH constraint available, use the first
117747 ** one encountered. If there is both a MATCH constraint and a direct
117748 ** rowid/docid lookup, prefer the MATCH strategy. This is done even
117749 ** though the rowid/docid lookup is faster than a MATCH query, selecting
117750 ** it would lead to an "unable to use function MATCH in the requested
117751 ** context" error.
117753 if( pCons->op==SQLITE_INDEX_CONSTRAINT_MATCH
117754 && pCons->iColumn>=0 && pCons->iColumn<=p->nColumn
117756 pInfo->idxNum = FTS3_FULLTEXT_SEARCH + pCons->iColumn;
117757 pInfo->estimatedCost = 2.0;
117758 iCons = i;
117759 break;
117763 if( iCons>=0 ){
117764 pInfo->aConstraintUsage[iCons].argvIndex = 1;
117765 pInfo->aConstraintUsage[iCons].omit = 1;
117768 /* Regardless of the strategy selected, FTS can deliver rows in rowid (or
117769 ** docid) order. Both ascending and descending are possible.
117771 if( pInfo->nOrderBy==1 ){
117772 struct sqlite3_index_orderby *pOrder = &pInfo->aOrderBy[0];
117773 if( pOrder->iColumn<0 || pOrder->iColumn==p->nColumn+1 ){
117774 if( pOrder->desc ){
117775 pInfo->idxStr = "DESC";
117776 }else{
117777 pInfo->idxStr = "ASC";
117779 pInfo->orderByConsumed = 1;
117783 assert( p->pSegments==0 );
117784 return SQLITE_OK;
117788 ** Implementation of xOpen method.
117790 static int fts3OpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
117791 sqlite3_vtab_cursor *pCsr; /* Allocated cursor */
117793 UNUSED_PARAMETER(pVTab);
117795 /* Allocate a buffer large enough for an Fts3Cursor structure. If the
117796 ** allocation succeeds, zero it and return SQLITE_OK. Otherwise,
117797 ** if the allocation fails, return SQLITE_NOMEM.
117799 *ppCsr = pCsr = (sqlite3_vtab_cursor *)sqlite3_malloc(sizeof(Fts3Cursor));
117800 if( !pCsr ){
117801 return SQLITE_NOMEM;
117803 memset(pCsr, 0, sizeof(Fts3Cursor));
117804 return SQLITE_OK;
117808 ** Close the cursor. For additional information see the documentation
117809 ** on the xClose method of the virtual table interface.
117811 static int fts3CloseMethod(sqlite3_vtab_cursor *pCursor){
117812 Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
117813 assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
117814 sqlite3_finalize(pCsr->pStmt);
117815 sqlite3Fts3ExprFree(pCsr->pExpr);
117816 sqlite3Fts3FreeDeferredTokens(pCsr);
117817 sqlite3_free(pCsr->aDoclist);
117818 sqlite3_free(pCsr->aMatchinfo);
117819 assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
117820 sqlite3_free(pCsr);
117821 return SQLITE_OK;
117825 ** If pCsr->pStmt has not been prepared (i.e. if pCsr->pStmt==0), then
117826 ** compose and prepare an SQL statement of the form:
117828 ** "SELECT <columns> FROM %_content WHERE rowid = ?"
117830 ** (or the equivalent for a content=xxx table) and set pCsr->pStmt to
117831 ** it. If an error occurs, return an SQLite error code.
117833 ** Otherwise, set *ppStmt to point to pCsr->pStmt and return SQLITE_OK.
117835 static int fts3CursorSeekStmt(Fts3Cursor *pCsr, sqlite3_stmt **ppStmt){
117836 int rc = SQLITE_OK;
117837 if( pCsr->pStmt==0 ){
117838 Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
117839 char *zSql;
117840 zSql = sqlite3_mprintf("SELECT %s WHERE rowid = ?", p->zReadExprlist);
117841 if( !zSql ) return SQLITE_NOMEM;
117842 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
117843 sqlite3_free(zSql);
117845 *ppStmt = pCsr->pStmt;
117846 return rc;
117850 ** Position the pCsr->pStmt statement so that it is on the row
117851 ** of the %_content table that contains the last match. Return
117852 ** SQLITE_OK on success.
117854 static int fts3CursorSeek(sqlite3_context *pContext, Fts3Cursor *pCsr){
117855 int rc = SQLITE_OK;
117856 if( pCsr->isRequireSeek ){
117857 sqlite3_stmt *pStmt = 0;
117859 rc = fts3CursorSeekStmt(pCsr, &pStmt);
117860 if( rc==SQLITE_OK ){
117861 sqlite3_bind_int64(pCsr->pStmt, 1, pCsr->iPrevId);
117862 pCsr->isRequireSeek = 0;
117863 if( SQLITE_ROW==sqlite3_step(pCsr->pStmt) ){
117864 return SQLITE_OK;
117865 }else{
117866 rc = sqlite3_reset(pCsr->pStmt);
117867 if( rc==SQLITE_OK && ((Fts3Table *)pCsr->base.pVtab)->zContentTbl==0 ){
117868 /* If no row was found and no error has occured, then the %_content
117869 ** table is missing a row that is present in the full-text index.
117870 ** The data structures are corrupt. */
117871 rc = FTS_CORRUPT_VTAB;
117872 pCsr->isEof = 1;
117878 if( rc!=SQLITE_OK && pContext ){
117879 sqlite3_result_error_code(pContext, rc);
117881 return rc;
117885 ** This function is used to process a single interior node when searching
117886 ** a b-tree for a term or term prefix. The node data is passed to this
117887 ** function via the zNode/nNode parameters. The term to search for is
117888 ** passed in zTerm/nTerm.
117890 ** If piFirst is not NULL, then this function sets *piFirst to the blockid
117891 ** of the child node that heads the sub-tree that may contain the term.
117893 ** If piLast is not NULL, then *piLast is set to the right-most child node
117894 ** that heads a sub-tree that may contain a term for which zTerm/nTerm is
117895 ** a prefix.
117897 ** If an OOM error occurs, SQLITE_NOMEM is returned. Otherwise, SQLITE_OK.
117899 static int fts3ScanInteriorNode(
117900 const char *zTerm, /* Term to select leaves for */
117901 int nTerm, /* Size of term zTerm in bytes */
117902 const char *zNode, /* Buffer containing segment interior node */
117903 int nNode, /* Size of buffer at zNode */
117904 sqlite3_int64 *piFirst, /* OUT: Selected child node */
117905 sqlite3_int64 *piLast /* OUT: Selected child node */
117907 int rc = SQLITE_OK; /* Return code */
117908 const char *zCsr = zNode; /* Cursor to iterate through node */
117909 const char *zEnd = &zCsr[nNode];/* End of interior node buffer */
117910 char *zBuffer = 0; /* Buffer to load terms into */
117911 int nAlloc = 0; /* Size of allocated buffer */
117912 int isFirstTerm = 1; /* True when processing first term on page */
117913 sqlite3_int64 iChild; /* Block id of child node to descend to */
117915 /* Skip over the 'height' varint that occurs at the start of every
117916 ** interior node. Then load the blockid of the left-child of the b-tree
117917 ** node into variable iChild.
117919 ** Even if the data structure on disk is corrupted, this (reading two
117920 ** varints from the buffer) does not risk an overread. If zNode is a
117921 ** root node, then the buffer comes from a SELECT statement. SQLite does
117922 ** not make this guarantee explicitly, but in practice there are always
117923 ** either more than 20 bytes of allocated space following the nNode bytes of
117924 ** contents, or two zero bytes. Or, if the node is read from the %_segments
117925 ** table, then there are always 20 bytes of zeroed padding following the
117926 ** nNode bytes of content (see sqlite3Fts3ReadBlock() for details).
117928 zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
117929 zCsr += sqlite3Fts3GetVarint(zCsr, &iChild);
117930 if( zCsr>zEnd ){
117931 return FTS_CORRUPT_VTAB;
117934 while( zCsr<zEnd && (piFirst || piLast) ){
117935 int cmp; /* memcmp() result */
117936 int nSuffix; /* Size of term suffix */
117937 int nPrefix = 0; /* Size of term prefix */
117938 int nBuffer; /* Total term size */
117940 /* Load the next term on the node into zBuffer. Use realloc() to expand
117941 ** the size of zBuffer if required. */
117942 if( !isFirstTerm ){
117943 zCsr += sqlite3Fts3GetVarint32(zCsr, &nPrefix);
117945 isFirstTerm = 0;
117946 zCsr += sqlite3Fts3GetVarint32(zCsr, &nSuffix);
117948 if( nPrefix<0 || nSuffix<0 || &zCsr[nSuffix]>zEnd ){
117949 rc = FTS_CORRUPT_VTAB;
117950 goto finish_scan;
117952 if( nPrefix+nSuffix>nAlloc ){
117953 char *zNew;
117954 nAlloc = (nPrefix+nSuffix) * 2;
117955 zNew = (char *)sqlite3_realloc(zBuffer, nAlloc);
117956 if( !zNew ){
117957 rc = SQLITE_NOMEM;
117958 goto finish_scan;
117960 zBuffer = zNew;
117962 assert( zBuffer );
117963 memcpy(&zBuffer[nPrefix], zCsr, nSuffix);
117964 nBuffer = nPrefix + nSuffix;
117965 zCsr += nSuffix;
117967 /* Compare the term we are searching for with the term just loaded from
117968 ** the interior node. If the specified term is greater than or equal
117969 ** to the term from the interior node, then all terms on the sub-tree
117970 ** headed by node iChild are smaller than zTerm. No need to search
117971 ** iChild.
117973 ** If the interior node term is larger than the specified term, then
117974 ** the tree headed by iChild may contain the specified term.
117976 cmp = memcmp(zTerm, zBuffer, (nBuffer>nTerm ? nTerm : nBuffer));
117977 if( piFirst && (cmp<0 || (cmp==0 && nBuffer>nTerm)) ){
117978 *piFirst = iChild;
117979 piFirst = 0;
117982 if( piLast && cmp<0 ){
117983 *piLast = iChild;
117984 piLast = 0;
117987 iChild++;
117990 if( piFirst ) *piFirst = iChild;
117991 if( piLast ) *piLast = iChild;
117993 finish_scan:
117994 sqlite3_free(zBuffer);
117995 return rc;
118000 ** The buffer pointed to by argument zNode (size nNode bytes) contains an
118001 ** interior node of a b-tree segment. The zTerm buffer (size nTerm bytes)
118002 ** contains a term. This function searches the sub-tree headed by the zNode
118003 ** node for the range of leaf nodes that may contain the specified term
118004 ** or terms for which the specified term is a prefix.
118006 ** If piLeaf is not NULL, then *piLeaf is set to the blockid of the
118007 ** left-most leaf node in the tree that may contain the specified term.
118008 ** If piLeaf2 is not NULL, then *piLeaf2 is set to the blockid of the
118009 ** right-most leaf node that may contain a term for which the specified
118010 ** term is a prefix.
118012 ** It is possible that the range of returned leaf nodes does not contain
118013 ** the specified term or any terms for which it is a prefix. However, if the
118014 ** segment does contain any such terms, they are stored within the identified
118015 ** range. Because this function only inspects interior segment nodes (and
118016 ** never loads leaf nodes into memory), it is not possible to be sure.
118018 ** If an error occurs, an error code other than SQLITE_OK is returned.
118020 static int fts3SelectLeaf(
118021 Fts3Table *p, /* Virtual table handle */
118022 const char *zTerm, /* Term to select leaves for */
118023 int nTerm, /* Size of term zTerm in bytes */
118024 const char *zNode, /* Buffer containing segment interior node */
118025 int nNode, /* Size of buffer at zNode */
118026 sqlite3_int64 *piLeaf, /* Selected leaf node */
118027 sqlite3_int64 *piLeaf2 /* Selected leaf node */
118029 int rc; /* Return code */
118030 int iHeight; /* Height of this node in tree */
118032 assert( piLeaf || piLeaf2 );
118034 sqlite3Fts3GetVarint32(zNode, &iHeight);
118035 rc = fts3ScanInteriorNode(zTerm, nTerm, zNode, nNode, piLeaf, piLeaf2);
118036 assert( !piLeaf2 || !piLeaf || rc!=SQLITE_OK || (*piLeaf<=*piLeaf2) );
118038 if( rc==SQLITE_OK && iHeight>1 ){
118039 char *zBlob = 0; /* Blob read from %_segments table */
118040 int nBlob; /* Size of zBlob in bytes */
118042 if( piLeaf && piLeaf2 && (*piLeaf!=*piLeaf2) ){
118043 rc = sqlite3Fts3ReadBlock(p, *piLeaf, &zBlob, &nBlob, 0);
118044 if( rc==SQLITE_OK ){
118045 rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, 0);
118047 sqlite3_free(zBlob);
118048 piLeaf = 0;
118049 zBlob = 0;
118052 if( rc==SQLITE_OK ){
118053 rc = sqlite3Fts3ReadBlock(p, piLeaf?*piLeaf:*piLeaf2, &zBlob, &nBlob, 0);
118055 if( rc==SQLITE_OK ){
118056 rc = fts3SelectLeaf(p, zTerm, nTerm, zBlob, nBlob, piLeaf, piLeaf2);
118058 sqlite3_free(zBlob);
118061 return rc;
118065 ** This function is used to create delta-encoded serialized lists of FTS3
118066 ** varints. Each call to this function appends a single varint to a list.
118068 static void fts3PutDeltaVarint(
118069 char **pp, /* IN/OUT: Output pointer */
118070 sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */
118071 sqlite3_int64 iVal /* Write this value to the list */
118073 assert( iVal-*piPrev > 0 || (*piPrev==0 && iVal==0) );
118074 *pp += sqlite3Fts3PutVarint(*pp, iVal-*piPrev);
118075 *piPrev = iVal;
118079 ** When this function is called, *ppPoslist is assumed to point to the
118080 ** start of a position-list. After it returns, *ppPoslist points to the
118081 ** first byte after the position-list.
118083 ** A position list is list of positions (delta encoded) and columns for
118084 ** a single document record of a doclist. So, in other words, this
118085 ** routine advances *ppPoslist so that it points to the next docid in
118086 ** the doclist, or to the first byte past the end of the doclist.
118088 ** If pp is not NULL, then the contents of the position list are copied
118089 ** to *pp. *pp is set to point to the first byte past the last byte copied
118090 ** before this function returns.
118092 static void fts3PoslistCopy(char **pp, char **ppPoslist){
118093 char *pEnd = *ppPoslist;
118094 char c = 0;
118096 /* The end of a position list is marked by a zero encoded as an FTS3
118097 ** varint. A single POS_END (0) byte. Except, if the 0 byte is preceded by
118098 ** a byte with the 0x80 bit set, then it is not a varint 0, but the tail
118099 ** of some other, multi-byte, value.
118101 ** The following while-loop moves pEnd to point to the first byte that is not
118102 ** immediately preceded by a byte with the 0x80 bit set. Then increments
118103 ** pEnd once more so that it points to the byte immediately following the
118104 ** last byte in the position-list.
118106 while( *pEnd | c ){
118107 c = *pEnd++ & 0x80;
118108 testcase( c!=0 && (*pEnd)==0 );
118110 pEnd++; /* Advance past the POS_END terminator byte */
118112 if( pp ){
118113 int n = (int)(pEnd - *ppPoslist);
118114 char *p = *pp;
118115 memcpy(p, *ppPoslist, n);
118116 p += n;
118117 *pp = p;
118119 *ppPoslist = pEnd;
118123 ** When this function is called, *ppPoslist is assumed to point to the
118124 ** start of a column-list. After it returns, *ppPoslist points to the
118125 ** to the terminator (POS_COLUMN or POS_END) byte of the column-list.
118127 ** A column-list is list of delta-encoded positions for a single column
118128 ** within a single document within a doclist.
118130 ** The column-list is terminated either by a POS_COLUMN varint (1) or
118131 ** a POS_END varint (0). This routine leaves *ppPoslist pointing to
118132 ** the POS_COLUMN or POS_END that terminates the column-list.
118134 ** If pp is not NULL, then the contents of the column-list are copied
118135 ** to *pp. *pp is set to point to the first byte past the last byte copied
118136 ** before this function returns. The POS_COLUMN or POS_END terminator
118137 ** is not copied into *pp.
118139 static void fts3ColumnlistCopy(char **pp, char **ppPoslist){
118140 char *pEnd = *ppPoslist;
118141 char c = 0;
118143 /* A column-list is terminated by either a 0x01 or 0x00 byte that is
118144 ** not part of a multi-byte varint.
118146 while( 0xFE & (*pEnd | c) ){
118147 c = *pEnd++ & 0x80;
118148 testcase( c!=0 && ((*pEnd)&0xfe)==0 );
118150 if( pp ){
118151 int n = (int)(pEnd - *ppPoslist);
118152 char *p = *pp;
118153 memcpy(p, *ppPoslist, n);
118154 p += n;
118155 *pp = p;
118157 *ppPoslist = pEnd;
118161 ** Value used to signify the end of an position-list. This is safe because
118162 ** it is not possible to have a document with 2^31 terms.
118164 #define POSITION_LIST_END 0x7fffffff
118167 ** This function is used to help parse position-lists. When this function is
118168 ** called, *pp may point to the start of the next varint in the position-list
118169 ** being parsed, or it may point to 1 byte past the end of the position-list
118170 ** (in which case **pp will be a terminator bytes POS_END (0) or
118171 ** (1)).
118173 ** If *pp points past the end of the current position-list, set *pi to
118174 ** POSITION_LIST_END and return. Otherwise, read the next varint from *pp,
118175 ** increment the current value of *pi by the value read, and set *pp to
118176 ** point to the next value before returning.
118178 ** Before calling this routine *pi must be initialized to the value of
118179 ** the previous position, or zero if we are reading the first position
118180 ** in the position-list. Because positions are delta-encoded, the value
118181 ** of the previous position is needed in order to compute the value of
118182 ** the next position.
118184 static void fts3ReadNextPos(
118185 char **pp, /* IN/OUT: Pointer into position-list buffer */
118186 sqlite3_int64 *pi /* IN/OUT: Value read from position-list */
118188 if( (**pp)&0xFE ){
118189 fts3GetDeltaVarint(pp, pi);
118190 *pi -= 2;
118191 }else{
118192 *pi = POSITION_LIST_END;
118197 ** If parameter iCol is not 0, write an POS_COLUMN (1) byte followed by
118198 ** the value of iCol encoded as a varint to *pp. This will start a new
118199 ** column list.
118201 ** Set *pp to point to the byte just after the last byte written before
118202 ** returning (do not modify it if iCol==0). Return the total number of bytes
118203 ** written (0 if iCol==0).
118205 static int fts3PutColNumber(char **pp, int iCol){
118206 int n = 0; /* Number of bytes written */
118207 if( iCol ){
118208 char *p = *pp; /* Output pointer */
118209 n = 1 + sqlite3Fts3PutVarint(&p[1], iCol);
118210 *p = 0x01;
118211 *pp = &p[n];
118213 return n;
118217 ** Compute the union of two position lists. The output written
118218 ** into *pp contains all positions of both *pp1 and *pp2 in sorted
118219 ** order and with any duplicates removed. All pointers are
118220 ** updated appropriately. The caller is responsible for insuring
118221 ** that there is enough space in *pp to hold the complete output.
118223 static void fts3PoslistMerge(
118224 char **pp, /* Output buffer */
118225 char **pp1, /* Left input list */
118226 char **pp2 /* Right input list */
118228 char *p = *pp;
118229 char *p1 = *pp1;
118230 char *p2 = *pp2;
118232 while( *p1 || *p2 ){
118233 int iCol1; /* The current column index in pp1 */
118234 int iCol2; /* The current column index in pp2 */
118236 if( *p1==POS_COLUMN ) sqlite3Fts3GetVarint32(&p1[1], &iCol1);
118237 else if( *p1==POS_END ) iCol1 = POSITION_LIST_END;
118238 else iCol1 = 0;
118240 if( *p2==POS_COLUMN ) sqlite3Fts3GetVarint32(&p2[1], &iCol2);
118241 else if( *p2==POS_END ) iCol2 = POSITION_LIST_END;
118242 else iCol2 = 0;
118244 if( iCol1==iCol2 ){
118245 sqlite3_int64 i1 = 0; /* Last position from pp1 */
118246 sqlite3_int64 i2 = 0; /* Last position from pp2 */
118247 sqlite3_int64 iPrev = 0;
118248 int n = fts3PutColNumber(&p, iCol1);
118249 p1 += n;
118250 p2 += n;
118252 /* At this point, both p1 and p2 point to the start of column-lists
118253 ** for the same column (the column with index iCol1 and iCol2).
118254 ** A column-list is a list of non-negative delta-encoded varints, each
118255 ** incremented by 2 before being stored. Each list is terminated by a
118256 ** POS_END (0) or POS_COLUMN (1). The following block merges the two lists
118257 ** and writes the results to buffer p. p is left pointing to the byte
118258 ** after the list written. No terminator (POS_END or POS_COLUMN) is
118259 ** written to the output.
118261 fts3GetDeltaVarint(&p1, &i1);
118262 fts3GetDeltaVarint(&p2, &i2);
118264 fts3PutDeltaVarint(&p, &iPrev, (i1<i2) ? i1 : i2);
118265 iPrev -= 2;
118266 if( i1==i2 ){
118267 fts3ReadNextPos(&p1, &i1);
118268 fts3ReadNextPos(&p2, &i2);
118269 }else if( i1<i2 ){
118270 fts3ReadNextPos(&p1, &i1);
118271 }else{
118272 fts3ReadNextPos(&p2, &i2);
118274 }while( i1!=POSITION_LIST_END || i2!=POSITION_LIST_END );
118275 }else if( iCol1<iCol2 ){
118276 p1 += fts3PutColNumber(&p, iCol1);
118277 fts3ColumnlistCopy(&p, &p1);
118278 }else{
118279 p2 += fts3PutColNumber(&p, iCol2);
118280 fts3ColumnlistCopy(&p, &p2);
118284 *p++ = POS_END;
118285 *pp = p;
118286 *pp1 = p1 + 1;
118287 *pp2 = p2 + 1;
118291 ** This function is used to merge two position lists into one. When it is
118292 ** called, *pp1 and *pp2 must both point to position lists. A position-list is
118293 ** the part of a doclist that follows each document id. For example, if a row
118294 ** contains:
118296 ** 'a b c'|'x y z'|'a b b a'
118298 ** Then the position list for this row for token 'b' would consist of:
118300 ** 0x02 0x01 0x02 0x03 0x03 0x00
118302 ** When this function returns, both *pp1 and *pp2 are left pointing to the
118303 ** byte following the 0x00 terminator of their respective position lists.
118305 ** If isSaveLeft is 0, an entry is added to the output position list for
118306 ** each position in *pp2 for which there exists one or more positions in
118307 ** *pp1 so that (pos(*pp2)>pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e.
118308 ** when the *pp1 token appears before the *pp2 token, but not more than nToken
118309 ** slots before it.
118311 ** e.g. nToken==1 searches for adjacent positions.
118313 static int fts3PoslistPhraseMerge(
118314 char **pp, /* IN/OUT: Preallocated output buffer */
118315 int nToken, /* Maximum difference in token positions */
118316 int isSaveLeft, /* Save the left position */
118317 int isExact, /* If *pp1 is exactly nTokens before *pp2 */
118318 char **pp1, /* IN/OUT: Left input list */
118319 char **pp2 /* IN/OUT: Right input list */
118321 char *p = *pp;
118322 char *p1 = *pp1;
118323 char *p2 = *pp2;
118324 int iCol1 = 0;
118325 int iCol2 = 0;
118327 /* Never set both isSaveLeft and isExact for the same invocation. */
118328 assert( isSaveLeft==0 || isExact==0 );
118330 assert( p!=0 && *p1!=0 && *p2!=0 );
118331 if( *p1==POS_COLUMN ){
118332 p1++;
118333 p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
118335 if( *p2==POS_COLUMN ){
118336 p2++;
118337 p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
118340 while( 1 ){
118341 if( iCol1==iCol2 ){
118342 char *pSave = p;
118343 sqlite3_int64 iPrev = 0;
118344 sqlite3_int64 iPos1 = 0;
118345 sqlite3_int64 iPos2 = 0;
118347 if( iCol1 ){
118348 *p++ = POS_COLUMN;
118349 p += sqlite3Fts3PutVarint(p, iCol1);
118352 assert( *p1!=POS_END && *p1!=POS_COLUMN );
118353 assert( *p2!=POS_END && *p2!=POS_COLUMN );
118354 fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
118355 fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
118357 while( 1 ){
118358 if( iPos2==iPos1+nToken
118359 || (isExact==0 && iPos2>iPos1 && iPos2<=iPos1+nToken)
118361 sqlite3_int64 iSave;
118362 iSave = isSaveLeft ? iPos1 : iPos2;
118363 fts3PutDeltaVarint(&p, &iPrev, iSave+2); iPrev -= 2;
118364 pSave = 0;
118365 assert( p );
118367 if( (!isSaveLeft && iPos2<=(iPos1+nToken)) || iPos2<=iPos1 ){
118368 if( (*p2&0xFE)==0 ) break;
118369 fts3GetDeltaVarint(&p2, &iPos2); iPos2 -= 2;
118370 }else{
118371 if( (*p1&0xFE)==0 ) break;
118372 fts3GetDeltaVarint(&p1, &iPos1); iPos1 -= 2;
118376 if( pSave ){
118377 assert( pp && p );
118378 p = pSave;
118381 fts3ColumnlistCopy(0, &p1);
118382 fts3ColumnlistCopy(0, &p2);
118383 assert( (*p1&0xFE)==0 && (*p2&0xFE)==0 );
118384 if( 0==*p1 || 0==*p2 ) break;
118386 p1++;
118387 p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
118388 p2++;
118389 p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
118392 /* Advance pointer p1 or p2 (whichever corresponds to the smaller of
118393 ** iCol1 and iCol2) so that it points to either the 0x00 that marks the
118394 ** end of the position list, or the 0x01 that precedes the next
118395 ** column-number in the position list.
118397 else if( iCol1<iCol2 ){
118398 fts3ColumnlistCopy(0, &p1);
118399 if( 0==*p1 ) break;
118400 p1++;
118401 p1 += sqlite3Fts3GetVarint32(p1, &iCol1);
118402 }else{
118403 fts3ColumnlistCopy(0, &p2);
118404 if( 0==*p2 ) break;
118405 p2++;
118406 p2 += sqlite3Fts3GetVarint32(p2, &iCol2);
118410 fts3PoslistCopy(0, &p2);
118411 fts3PoslistCopy(0, &p1);
118412 *pp1 = p1;
118413 *pp2 = p2;
118414 if( *pp==p ){
118415 return 0;
118417 *p++ = 0x00;
118418 *pp = p;
118419 return 1;
118423 ** Merge two position-lists as required by the NEAR operator. The argument
118424 ** position lists correspond to the left and right phrases of an expression
118425 ** like:
118427 ** "phrase 1" NEAR "phrase number 2"
118429 ** Position list *pp1 corresponds to the left-hand side of the NEAR
118430 ** expression and *pp2 to the right. As usual, the indexes in the position
118431 ** lists are the offsets of the last token in each phrase (tokens "1" and "2"
118432 ** in the example above).
118434 ** The output position list - written to *pp - is a copy of *pp2 with those
118435 ** entries that are not sufficiently NEAR entries in *pp1 removed.
118437 static int fts3PoslistNearMerge(
118438 char **pp, /* Output buffer */
118439 char *aTmp, /* Temporary buffer space */
118440 int nRight, /* Maximum difference in token positions */
118441 int nLeft, /* Maximum difference in token positions */
118442 char **pp1, /* IN/OUT: Left input list */
118443 char **pp2 /* IN/OUT: Right input list */
118445 char *p1 = *pp1;
118446 char *p2 = *pp2;
118448 char *pTmp1 = aTmp;
118449 char *pTmp2;
118450 char *aTmp2;
118451 int res = 1;
118453 fts3PoslistPhraseMerge(&pTmp1, nRight, 0, 0, pp1, pp2);
118454 aTmp2 = pTmp2 = pTmp1;
118455 *pp1 = p1;
118456 *pp2 = p2;
118457 fts3PoslistPhraseMerge(&pTmp2, nLeft, 1, 0, pp2, pp1);
118458 if( pTmp1!=aTmp && pTmp2!=aTmp2 ){
118459 fts3PoslistMerge(pp, &aTmp, &aTmp2);
118460 }else if( pTmp1!=aTmp ){
118461 fts3PoslistCopy(pp, &aTmp);
118462 }else if( pTmp2!=aTmp2 ){
118463 fts3PoslistCopy(pp, &aTmp2);
118464 }else{
118465 res = 0;
118468 return res;
118472 ** An instance of this function is used to merge together the (potentially
118473 ** large number of) doclists for each term that matches a prefix query.
118474 ** See function fts3TermSelectMerge() for details.
118476 typedef struct TermSelect TermSelect;
118477 struct TermSelect {
118478 char *aaOutput[16]; /* Malloc'd output buffers */
118479 int anOutput[16]; /* Size each output buffer in bytes */
118483 ** This function is used to read a single varint from a buffer. Parameter
118484 ** pEnd points 1 byte past the end of the buffer. When this function is
118485 ** called, if *pp points to pEnd or greater, then the end of the buffer
118486 ** has been reached. In this case *pp is set to 0 and the function returns.
118488 ** If *pp does not point to or past pEnd, then a single varint is read
118489 ** from *pp. *pp is then set to point 1 byte past the end of the read varint.
118491 ** If bDescIdx is false, the value read is added to *pVal before returning.
118492 ** If it is true, the value read is subtracted from *pVal before this
118493 ** function returns.
118495 static void fts3GetDeltaVarint3(
118496 char **pp, /* IN/OUT: Point to read varint from */
118497 char *pEnd, /* End of buffer */
118498 int bDescIdx, /* True if docids are descending */
118499 sqlite3_int64 *pVal /* IN/OUT: Integer value */
118501 if( *pp>=pEnd ){
118502 *pp = 0;
118503 }else{
118504 sqlite3_int64 iVal;
118505 *pp += sqlite3Fts3GetVarint(*pp, &iVal);
118506 if( bDescIdx ){
118507 *pVal -= iVal;
118508 }else{
118509 *pVal += iVal;
118515 ** This function is used to write a single varint to a buffer. The varint
118516 ** is written to *pp. Before returning, *pp is set to point 1 byte past the
118517 ** end of the value written.
118519 ** If *pbFirst is zero when this function is called, the value written to
118520 ** the buffer is that of parameter iVal.
118522 ** If *pbFirst is non-zero when this function is called, then the value
118523 ** written is either (iVal-*piPrev) (if bDescIdx is zero) or (*piPrev-iVal)
118524 ** (if bDescIdx is non-zero).
118526 ** Before returning, this function always sets *pbFirst to 1 and *piPrev
118527 ** to the value of parameter iVal.
118529 static void fts3PutDeltaVarint3(
118530 char **pp, /* IN/OUT: Output pointer */
118531 int bDescIdx, /* True for descending docids */
118532 sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */
118533 int *pbFirst, /* IN/OUT: True after first int written */
118534 sqlite3_int64 iVal /* Write this value to the list */
118536 sqlite3_int64 iWrite;
118537 if( bDescIdx==0 || *pbFirst==0 ){
118538 iWrite = iVal - *piPrev;
118539 }else{
118540 iWrite = *piPrev - iVal;
118542 assert( *pbFirst || *piPrev==0 );
118543 assert( *pbFirst==0 || iWrite>0 );
118544 *pp += sqlite3Fts3PutVarint(*pp, iWrite);
118545 *piPrev = iVal;
118546 *pbFirst = 1;
118551 ** This macro is used by various functions that merge doclists. The two
118552 ** arguments are 64-bit docid values. If the value of the stack variable
118553 ** bDescDoclist is 0 when this macro is invoked, then it returns (i1-i2).
118554 ** Otherwise, (i2-i1).
118556 ** Using this makes it easier to write code that can merge doclists that are
118557 ** sorted in either ascending or descending order.
118559 #define DOCID_CMP(i1, i2) ((bDescDoclist?-1:1) * (i1-i2))
118562 ** This function does an "OR" merge of two doclists (output contains all
118563 ** positions contained in either argument doclist). If the docids in the
118564 ** input doclists are sorted in ascending order, parameter bDescDoclist
118565 ** should be false. If they are sorted in ascending order, it should be
118566 ** passed a non-zero value.
118568 ** If no error occurs, *paOut is set to point at an sqlite3_malloc'd buffer
118569 ** containing the output doclist and SQLITE_OK is returned. In this case
118570 ** *pnOut is set to the number of bytes in the output doclist.
118572 ** If an error occurs, an SQLite error code is returned. The output values
118573 ** are undefined in this case.
118575 static int fts3DoclistOrMerge(
118576 int bDescDoclist, /* True if arguments are desc */
118577 char *a1, int n1, /* First doclist */
118578 char *a2, int n2, /* Second doclist */
118579 char **paOut, int *pnOut /* OUT: Malloc'd doclist */
118581 sqlite3_int64 i1 = 0;
118582 sqlite3_int64 i2 = 0;
118583 sqlite3_int64 iPrev = 0;
118584 char *pEnd1 = &a1[n1];
118585 char *pEnd2 = &a2[n2];
118586 char *p1 = a1;
118587 char *p2 = a2;
118588 char *p;
118589 char *aOut;
118590 int bFirstOut = 0;
118592 *paOut = 0;
118593 *pnOut = 0;
118595 /* Allocate space for the output. Both the input and output doclists
118596 ** are delta encoded. If they are in ascending order (bDescDoclist==0),
118597 ** then the first docid in each list is simply encoded as a varint. For
118598 ** each subsequent docid, the varint stored is the difference between the
118599 ** current and previous docid (a positive number - since the list is in
118600 ** ascending order).
118602 ** The first docid written to the output is therefore encoded using the
118603 ** same number of bytes as it is in whichever of the input lists it is
118604 ** read from. And each subsequent docid read from the same input list
118605 ** consumes either the same or less bytes as it did in the input (since
118606 ** the difference between it and the previous value in the output must
118607 ** be a positive value less than or equal to the delta value read from
118608 ** the input list). The same argument applies to all but the first docid
118609 ** read from the 'other' list. And to the contents of all position lists
118610 ** that will be copied and merged from the input to the output.
118612 ** However, if the first docid copied to the output is a negative number,
118613 ** then the encoding of the first docid from the 'other' input list may
118614 ** be larger in the output than it was in the input (since the delta value
118615 ** may be a larger positive integer than the actual docid).
118617 ** The space required to store the output is therefore the sum of the
118618 ** sizes of the two inputs, plus enough space for exactly one of the input
118619 ** docids to grow.
118621 ** A symetric argument may be made if the doclists are in descending
118622 ** order.
118624 aOut = sqlite3_malloc(n1+n2+FTS3_VARINT_MAX-1);
118625 if( !aOut ) return SQLITE_NOMEM;
118627 p = aOut;
118628 fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
118629 fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
118630 while( p1 || p2 ){
118631 sqlite3_int64 iDiff = DOCID_CMP(i1, i2);
118633 if( p2 && p1 && iDiff==0 ){
118634 fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
118635 fts3PoslistMerge(&p, &p1, &p2);
118636 fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118637 fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118638 }else if( !p2 || (p1 && iDiff<0) ){
118639 fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
118640 fts3PoslistCopy(&p, &p1);
118641 fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118642 }else{
118643 fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i2);
118644 fts3PoslistCopy(&p, &p2);
118645 fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118649 *paOut = aOut;
118650 *pnOut = (p-aOut);
118651 assert( *pnOut<=n1+n2+FTS3_VARINT_MAX-1 );
118652 return SQLITE_OK;
118656 ** This function does a "phrase" merge of two doclists. In a phrase merge,
118657 ** the output contains a copy of each position from the right-hand input
118658 ** doclist for which there is a position in the left-hand input doclist
118659 ** exactly nDist tokens before it.
118661 ** If the docids in the input doclists are sorted in ascending order,
118662 ** parameter bDescDoclist should be false. If they are sorted in ascending
118663 ** order, it should be passed a non-zero value.
118665 ** The right-hand input doclist is overwritten by this function.
118667 static void fts3DoclistPhraseMerge(
118668 int bDescDoclist, /* True if arguments are desc */
118669 int nDist, /* Distance from left to right (1=adjacent) */
118670 char *aLeft, int nLeft, /* Left doclist */
118671 char *aRight, int *pnRight /* IN/OUT: Right/output doclist */
118673 sqlite3_int64 i1 = 0;
118674 sqlite3_int64 i2 = 0;
118675 sqlite3_int64 iPrev = 0;
118676 char *pEnd1 = &aLeft[nLeft];
118677 char *pEnd2 = &aRight[*pnRight];
118678 char *p1 = aLeft;
118679 char *p2 = aRight;
118680 char *p;
118681 int bFirstOut = 0;
118682 char *aOut = aRight;
118684 assert( nDist>0 );
118686 p = aOut;
118687 fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
118688 fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
118690 while( p1 && p2 ){
118691 sqlite3_int64 iDiff = DOCID_CMP(i1, i2);
118692 if( iDiff==0 ){
118693 char *pSave = p;
118694 sqlite3_int64 iPrevSave = iPrev;
118695 int bFirstOutSave = bFirstOut;
118697 fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
118698 if( 0==fts3PoslistPhraseMerge(&p, nDist, 0, 1, &p1, &p2) ){
118699 p = pSave;
118700 iPrev = iPrevSave;
118701 bFirstOut = bFirstOutSave;
118703 fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118704 fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118705 }else if( iDiff<0 ){
118706 fts3PoslistCopy(0, &p1);
118707 fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
118708 }else{
118709 fts3PoslistCopy(0, &p2);
118710 fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
118714 *pnRight = p - aOut;
118718 ** Argument pList points to a position list nList bytes in size. This
118719 ** function checks to see if the position list contains any entries for
118720 ** a token in position 0 (of any column). If so, it writes argument iDelta
118721 ** to the output buffer pOut, followed by a position list consisting only
118722 ** of the entries from pList at position 0, and terminated by an 0x00 byte.
118723 ** The value returned is the number of bytes written to pOut (if any).
118725 SQLITE_PRIVATE int sqlite3Fts3FirstFilter(
118726 sqlite3_int64 iDelta, /* Varint that may be written to pOut */
118727 char *pList, /* Position list (no 0x00 term) */
118728 int nList, /* Size of pList in bytes */
118729 char *pOut /* Write output here */
118731 int nOut = 0;
118732 int bWritten = 0; /* True once iDelta has been written */
118733 char *p = pList;
118734 char *pEnd = &pList[nList];
118736 if( *p!=0x01 ){
118737 if( *p==0x02 ){
118738 nOut += sqlite3Fts3PutVarint(&pOut[nOut], iDelta);
118739 pOut[nOut++] = 0x02;
118740 bWritten = 1;
118742 fts3ColumnlistCopy(0, &p);
118745 while( p<pEnd && *p==0x01 ){
118746 sqlite3_int64 iCol;
118748 p += sqlite3Fts3GetVarint(p, &iCol);
118749 if( *p==0x02 ){
118750 if( bWritten==0 ){
118751 nOut += sqlite3Fts3PutVarint(&pOut[nOut], iDelta);
118752 bWritten = 1;
118754 pOut[nOut++] = 0x01;
118755 nOut += sqlite3Fts3PutVarint(&pOut[nOut], iCol);
118756 pOut[nOut++] = 0x02;
118758 fts3ColumnlistCopy(0, &p);
118760 if( bWritten ){
118761 pOut[nOut++] = 0x00;
118764 return nOut;
118769 ** Merge all doclists in the TermSelect.aaOutput[] array into a single
118770 ** doclist stored in TermSelect.aaOutput[0]. If successful, delete all
118771 ** other doclists (except the aaOutput[0] one) and return SQLITE_OK.
118773 ** If an OOM error occurs, return SQLITE_NOMEM. In this case it is
118774 ** the responsibility of the caller to free any doclists left in the
118775 ** TermSelect.aaOutput[] array.
118777 static int fts3TermSelectFinishMerge(Fts3Table *p, TermSelect *pTS){
118778 char *aOut = 0;
118779 int nOut = 0;
118780 int i;
118782 /* Loop through the doclists in the aaOutput[] array. Merge them all
118783 ** into a single doclist.
118785 for(i=0; i<SizeofArray(pTS->aaOutput); i++){
118786 if( pTS->aaOutput[i] ){
118787 if( !aOut ){
118788 aOut = pTS->aaOutput[i];
118789 nOut = pTS->anOutput[i];
118790 pTS->aaOutput[i] = 0;
118791 }else{
118792 int nNew;
118793 char *aNew;
118795 int rc = fts3DoclistOrMerge(p->bDescIdx,
118796 pTS->aaOutput[i], pTS->anOutput[i], aOut, nOut, &aNew, &nNew
118798 if( rc!=SQLITE_OK ){
118799 sqlite3_free(aOut);
118800 return rc;
118803 sqlite3_free(pTS->aaOutput[i]);
118804 sqlite3_free(aOut);
118805 pTS->aaOutput[i] = 0;
118806 aOut = aNew;
118807 nOut = nNew;
118812 pTS->aaOutput[0] = aOut;
118813 pTS->anOutput[0] = nOut;
118814 return SQLITE_OK;
118818 ** Merge the doclist aDoclist/nDoclist into the TermSelect object passed
118819 ** as the first argument. The merge is an "OR" merge (see function
118820 ** fts3DoclistOrMerge() for details).
118822 ** This function is called with the doclist for each term that matches
118823 ** a queried prefix. It merges all these doclists into one, the doclist
118824 ** for the specified prefix. Since there can be a very large number of
118825 ** doclists to merge, the merging is done pair-wise using the TermSelect
118826 ** object.
118828 ** This function returns SQLITE_OK if the merge is successful, or an
118829 ** SQLite error code (SQLITE_NOMEM) if an error occurs.
118831 static int fts3TermSelectMerge(
118832 Fts3Table *p, /* FTS table handle */
118833 TermSelect *pTS, /* TermSelect object to merge into */
118834 char *aDoclist, /* Pointer to doclist */
118835 int nDoclist /* Size of aDoclist in bytes */
118837 if( pTS->aaOutput[0]==0 ){
118838 /* If this is the first term selected, copy the doclist to the output
118839 ** buffer using memcpy(). */
118840 pTS->aaOutput[0] = sqlite3_malloc(nDoclist);
118841 pTS->anOutput[0] = nDoclist;
118842 if( pTS->aaOutput[0] ){
118843 memcpy(pTS->aaOutput[0], aDoclist, nDoclist);
118844 }else{
118845 return SQLITE_NOMEM;
118847 }else{
118848 char *aMerge = aDoclist;
118849 int nMerge = nDoclist;
118850 int iOut;
118852 for(iOut=0; iOut<SizeofArray(pTS->aaOutput); iOut++){
118853 if( pTS->aaOutput[iOut]==0 ){
118854 assert( iOut>0 );
118855 pTS->aaOutput[iOut] = aMerge;
118856 pTS->anOutput[iOut] = nMerge;
118857 break;
118858 }else{
118859 char *aNew;
118860 int nNew;
118862 int rc = fts3DoclistOrMerge(p->bDescIdx, aMerge, nMerge,
118863 pTS->aaOutput[iOut], pTS->anOutput[iOut], &aNew, &nNew
118865 if( rc!=SQLITE_OK ){
118866 if( aMerge!=aDoclist ) sqlite3_free(aMerge);
118867 return rc;
118870 if( aMerge!=aDoclist ) sqlite3_free(aMerge);
118871 sqlite3_free(pTS->aaOutput[iOut]);
118872 pTS->aaOutput[iOut] = 0;
118874 aMerge = aNew;
118875 nMerge = nNew;
118876 if( (iOut+1)==SizeofArray(pTS->aaOutput) ){
118877 pTS->aaOutput[iOut] = aMerge;
118878 pTS->anOutput[iOut] = nMerge;
118883 return SQLITE_OK;
118887 ** Append SegReader object pNew to the end of the pCsr->apSegment[] array.
118889 static int fts3SegReaderCursorAppend(
118890 Fts3MultiSegReader *pCsr,
118891 Fts3SegReader *pNew
118893 if( (pCsr->nSegment%16)==0 ){
118894 Fts3SegReader **apNew;
118895 int nByte = (pCsr->nSegment + 16)*sizeof(Fts3SegReader*);
118896 apNew = (Fts3SegReader **)sqlite3_realloc(pCsr->apSegment, nByte);
118897 if( !apNew ){
118898 sqlite3Fts3SegReaderFree(pNew);
118899 return SQLITE_NOMEM;
118901 pCsr->apSegment = apNew;
118903 pCsr->apSegment[pCsr->nSegment++] = pNew;
118904 return SQLITE_OK;
118908 ** Add seg-reader objects to the Fts3MultiSegReader object passed as the
118909 ** 8th argument.
118911 ** This function returns SQLITE_OK if successful, or an SQLite error code
118912 ** otherwise.
118914 static int fts3SegReaderCursor(
118915 Fts3Table *p, /* FTS3 table handle */
118916 int iIndex, /* Index to search (from 0 to p->nIndex-1) */
118917 int iLevel, /* Level of segments to scan */
118918 const char *zTerm, /* Term to query for */
118919 int nTerm, /* Size of zTerm in bytes */
118920 int isPrefix, /* True for a prefix search */
118921 int isScan, /* True to scan from zTerm to EOF */
118922 Fts3MultiSegReader *pCsr /* Cursor object to populate */
118924 int rc = SQLITE_OK; /* Error code */
118925 sqlite3_stmt *pStmt = 0; /* Statement to iterate through segments */
118926 int rc2; /* Result of sqlite3_reset() */
118928 /* If iLevel is less than 0 and this is not a scan, include a seg-reader
118929 ** for the pending-terms. If this is a scan, then this call must be being
118930 ** made by an fts4aux module, not an FTS table. In this case calling
118931 ** Fts3SegReaderPending might segfault, as the data structures used by
118932 ** fts4aux are not completely populated. So it's easiest to filter these
118933 ** calls out here. */
118934 if( iLevel<0 && p->aIndex ){
118935 Fts3SegReader *pSeg = 0;
118936 rc = sqlite3Fts3SegReaderPending(p, iIndex, zTerm, nTerm, isPrefix, &pSeg);
118937 if( rc==SQLITE_OK && pSeg ){
118938 rc = fts3SegReaderCursorAppend(pCsr, pSeg);
118942 if( iLevel!=FTS3_SEGCURSOR_PENDING ){
118943 if( rc==SQLITE_OK ){
118944 rc = sqlite3Fts3AllSegdirs(p, iIndex, iLevel, &pStmt);
118947 while( rc==SQLITE_OK && SQLITE_ROW==(rc = sqlite3_step(pStmt)) ){
118948 Fts3SegReader *pSeg = 0;
118950 /* Read the values returned by the SELECT into local variables. */
118951 sqlite3_int64 iStartBlock = sqlite3_column_int64(pStmt, 1);
118952 sqlite3_int64 iLeavesEndBlock = sqlite3_column_int64(pStmt, 2);
118953 sqlite3_int64 iEndBlock = sqlite3_column_int64(pStmt, 3);
118954 int nRoot = sqlite3_column_bytes(pStmt, 4);
118955 char const *zRoot = sqlite3_column_blob(pStmt, 4);
118957 /* If zTerm is not NULL, and this segment is not stored entirely on its
118958 ** root node, the range of leaves scanned can be reduced. Do this. */
118959 if( iStartBlock && zTerm ){
118960 sqlite3_int64 *pi = (isPrefix ? &iLeavesEndBlock : 0);
118961 rc = fts3SelectLeaf(p, zTerm, nTerm, zRoot, nRoot, &iStartBlock, pi);
118962 if( rc!=SQLITE_OK ) goto finished;
118963 if( isPrefix==0 && isScan==0 ) iLeavesEndBlock = iStartBlock;
118966 rc = sqlite3Fts3SegReaderNew(pCsr->nSegment+1,
118967 iStartBlock, iLeavesEndBlock, iEndBlock, zRoot, nRoot, &pSeg
118969 if( rc!=SQLITE_OK ) goto finished;
118970 rc = fts3SegReaderCursorAppend(pCsr, pSeg);
118974 finished:
118975 rc2 = sqlite3_reset(pStmt);
118976 if( rc==SQLITE_DONE ) rc = rc2;
118978 return rc;
118982 ** Set up a cursor object for iterating through a full-text index or a
118983 ** single level therein.
118985 SQLITE_PRIVATE int sqlite3Fts3SegReaderCursor(
118986 Fts3Table *p, /* FTS3 table handle */
118987 int iIndex, /* Index to search (from 0 to p->nIndex-1) */
118988 int iLevel, /* Level of segments to scan */
118989 const char *zTerm, /* Term to query for */
118990 int nTerm, /* Size of zTerm in bytes */
118991 int isPrefix, /* True for a prefix search */
118992 int isScan, /* True to scan from zTerm to EOF */
118993 Fts3MultiSegReader *pCsr /* Cursor object to populate */
118995 assert( iIndex>=0 && iIndex<p->nIndex );
118996 assert( iLevel==FTS3_SEGCURSOR_ALL
118997 || iLevel==FTS3_SEGCURSOR_PENDING
118998 || iLevel>=0
119000 assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
119001 assert( FTS3_SEGCURSOR_ALL<0 && FTS3_SEGCURSOR_PENDING<0 );
119002 assert( isPrefix==0 || isScan==0 );
119004 /* "isScan" is only set to true by the ft4aux module, an ordinary
119005 ** full-text tables. */
119006 assert( isScan==0 || p->aIndex==0 );
119008 memset(pCsr, 0, sizeof(Fts3MultiSegReader));
119010 return fts3SegReaderCursor(
119011 p, iIndex, iLevel, zTerm, nTerm, isPrefix, isScan, pCsr
119016 ** In addition to its current configuration, have the Fts3MultiSegReader
119017 ** passed as the 4th argument also scan the doclist for term zTerm/nTerm.
119019 ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
119021 static int fts3SegReaderCursorAddZero(
119022 Fts3Table *p, /* FTS virtual table handle */
119023 const char *zTerm, /* Term to scan doclist of */
119024 int nTerm, /* Number of bytes in zTerm */
119025 Fts3MultiSegReader *pCsr /* Fts3MultiSegReader to modify */
119027 return fts3SegReaderCursor(p, 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0,pCsr);
119031 ** Open an Fts3MultiSegReader to scan the doclist for term zTerm/nTerm. Or,
119032 ** if isPrefix is true, to scan the doclist for all terms for which
119033 ** zTerm/nTerm is a prefix. If successful, return SQLITE_OK and write
119034 ** a pointer to the new Fts3MultiSegReader to *ppSegcsr. Otherwise, return
119035 ** an SQLite error code.
119037 ** It is the responsibility of the caller to free this object by eventually
119038 ** passing it to fts3SegReaderCursorFree()
119040 ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
119041 ** Output parameter *ppSegcsr is set to 0 if an error occurs.
119043 static int fts3TermSegReaderCursor(
119044 Fts3Cursor *pCsr, /* Virtual table cursor handle */
119045 const char *zTerm, /* Term to query for */
119046 int nTerm, /* Size of zTerm in bytes */
119047 int isPrefix, /* True for a prefix search */
119048 Fts3MultiSegReader **ppSegcsr /* OUT: Allocated seg-reader cursor */
119050 Fts3MultiSegReader *pSegcsr; /* Object to allocate and return */
119051 int rc = SQLITE_NOMEM; /* Return code */
119053 pSegcsr = sqlite3_malloc(sizeof(Fts3MultiSegReader));
119054 if( pSegcsr ){
119055 int i;
119056 int bFound = 0; /* True once an index has been found */
119057 Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
119059 if( isPrefix ){
119060 for(i=1; bFound==0 && i<p->nIndex; i++){
119061 if( p->aIndex[i].nPrefix==nTerm ){
119062 bFound = 1;
119063 rc = sqlite3Fts3SegReaderCursor(
119064 p, i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0, pSegcsr);
119065 pSegcsr->bLookup = 1;
119069 for(i=1; bFound==0 && i<p->nIndex; i++){
119070 if( p->aIndex[i].nPrefix==nTerm+1 ){
119071 bFound = 1;
119072 rc = sqlite3Fts3SegReaderCursor(
119073 p, i, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 1, 0, pSegcsr
119075 if( rc==SQLITE_OK ){
119076 rc = fts3SegReaderCursorAddZero(p, zTerm, nTerm, pSegcsr);
119082 if( bFound==0 ){
119083 rc = sqlite3Fts3SegReaderCursor(
119084 p, 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, isPrefix, 0, pSegcsr
119086 pSegcsr->bLookup = !isPrefix;
119090 *ppSegcsr = pSegcsr;
119091 return rc;
119095 ** Free an Fts3MultiSegReader allocated by fts3TermSegReaderCursor().
119097 static void fts3SegReaderCursorFree(Fts3MultiSegReader *pSegcsr){
119098 sqlite3Fts3SegReaderFinish(pSegcsr);
119099 sqlite3_free(pSegcsr);
119103 ** This function retreives the doclist for the specified term (or term
119104 ** prefix) from the database.
119106 static int fts3TermSelect(
119107 Fts3Table *p, /* Virtual table handle */
119108 Fts3PhraseToken *pTok, /* Token to query for */
119109 int iColumn, /* Column to query (or -ve for all columns) */
119110 int *pnOut, /* OUT: Size of buffer at *ppOut */
119111 char **ppOut /* OUT: Malloced result buffer */
119113 int rc; /* Return code */
119114 Fts3MultiSegReader *pSegcsr; /* Seg-reader cursor for this term */
119115 TermSelect tsc; /* Object for pair-wise doclist merging */
119116 Fts3SegFilter filter; /* Segment term filter configuration */
119118 pSegcsr = pTok->pSegcsr;
119119 memset(&tsc, 0, sizeof(TermSelect));
119121 filter.flags = FTS3_SEGMENT_IGNORE_EMPTY | FTS3_SEGMENT_REQUIRE_POS
119122 | (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0)
119123 | (pTok->bFirst ? FTS3_SEGMENT_FIRST : 0)
119124 | (iColumn<p->nColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0);
119125 filter.iCol = iColumn;
119126 filter.zTerm = pTok->z;
119127 filter.nTerm = pTok->n;
119129 rc = sqlite3Fts3SegReaderStart(p, pSegcsr, &filter);
119130 while( SQLITE_OK==rc
119131 && SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pSegcsr))
119133 rc = fts3TermSelectMerge(p, &tsc, pSegcsr->aDoclist, pSegcsr->nDoclist);
119136 if( rc==SQLITE_OK ){
119137 rc = fts3TermSelectFinishMerge(p, &tsc);
119139 if( rc==SQLITE_OK ){
119140 *ppOut = tsc.aaOutput[0];
119141 *pnOut = tsc.anOutput[0];
119142 }else{
119143 int i;
119144 for(i=0; i<SizeofArray(tsc.aaOutput); i++){
119145 sqlite3_free(tsc.aaOutput[i]);
119149 fts3SegReaderCursorFree(pSegcsr);
119150 pTok->pSegcsr = 0;
119151 return rc;
119155 ** This function counts the total number of docids in the doclist stored
119156 ** in buffer aList[], size nList bytes.
119158 ** If the isPoslist argument is true, then it is assumed that the doclist
119159 ** contains a position-list following each docid. Otherwise, it is assumed
119160 ** that the doclist is simply a list of docids stored as delta encoded
119161 ** varints.
119163 static int fts3DoclistCountDocids(char *aList, int nList){
119164 int nDoc = 0; /* Return value */
119165 if( aList ){
119166 char *aEnd = &aList[nList]; /* Pointer to one byte after EOF */
119167 char *p = aList; /* Cursor */
119168 while( p<aEnd ){
119169 nDoc++;
119170 while( (*p++)&0x80 ); /* Skip docid varint */
119171 fts3PoslistCopy(0, &p); /* Skip over position list */
119175 return nDoc;
119179 ** Advance the cursor to the next row in the %_content table that
119180 ** matches the search criteria. For a MATCH search, this will be
119181 ** the next row that matches. For a full-table scan, this will be
119182 ** simply the next row in the %_content table. For a docid lookup,
119183 ** this routine simply sets the EOF flag.
119185 ** Return SQLITE_OK if nothing goes wrong. SQLITE_OK is returned
119186 ** even if we reach end-of-file. The fts3EofMethod() will be called
119187 ** subsequently to determine whether or not an EOF was hit.
119189 static int fts3NextMethod(sqlite3_vtab_cursor *pCursor){
119190 int rc;
119191 Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
119192 if( pCsr->eSearch==FTS3_DOCID_SEARCH || pCsr->eSearch==FTS3_FULLSCAN_SEARCH ){
119193 if( SQLITE_ROW!=sqlite3_step(pCsr->pStmt) ){
119194 pCsr->isEof = 1;
119195 rc = sqlite3_reset(pCsr->pStmt);
119196 }else{
119197 pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0);
119198 rc = SQLITE_OK;
119200 }else{
119201 rc = fts3EvalNext((Fts3Cursor *)pCursor);
119203 assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
119204 return rc;
119208 ** This is the xFilter interface for the virtual table. See
119209 ** the virtual table xFilter method documentation for additional
119210 ** information.
119212 ** If idxNum==FTS3_FULLSCAN_SEARCH then do a full table scan against
119213 ** the %_content table.
119215 ** If idxNum==FTS3_DOCID_SEARCH then do a docid lookup for a single entry
119216 ** in the %_content table.
119218 ** If idxNum>=FTS3_FULLTEXT_SEARCH then use the full text index. The
119219 ** column on the left-hand side of the MATCH operator is column
119220 ** number idxNum-FTS3_FULLTEXT_SEARCH, 0 indexed. argv[0] is the right-hand
119221 ** side of the MATCH operator.
119223 static int fts3FilterMethod(
119224 sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */
119225 int idxNum, /* Strategy index */
119226 const char *idxStr, /* Unused */
119227 int nVal, /* Number of elements in apVal */
119228 sqlite3_value **apVal /* Arguments for the indexing scheme */
119230 int rc;
119231 char *zSql; /* SQL statement used to access %_content */
119232 Fts3Table *p = (Fts3Table *)pCursor->pVtab;
119233 Fts3Cursor *pCsr = (Fts3Cursor *)pCursor;
119235 UNUSED_PARAMETER(idxStr);
119236 UNUSED_PARAMETER(nVal);
119238 assert( idxNum>=0 && idxNum<=(FTS3_FULLTEXT_SEARCH+p->nColumn) );
119239 assert( nVal==0 || nVal==1 );
119240 assert( (nVal==0)==(idxNum==FTS3_FULLSCAN_SEARCH) );
119241 assert( p->pSegments==0 );
119243 /* In case the cursor has been used before, clear it now. */
119244 sqlite3_finalize(pCsr->pStmt);
119245 sqlite3_free(pCsr->aDoclist);
119246 sqlite3Fts3ExprFree(pCsr->pExpr);
119247 memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
119249 if( idxStr ){
119250 pCsr->bDesc = (idxStr[0]=='D');
119251 }else{
119252 pCsr->bDesc = p->bDescIdx;
119254 pCsr->eSearch = (i16)idxNum;
119256 if( idxNum!=FTS3_DOCID_SEARCH && idxNum!=FTS3_FULLSCAN_SEARCH ){
119257 int iCol = idxNum-FTS3_FULLTEXT_SEARCH;
119258 const char *zQuery = (const char *)sqlite3_value_text(apVal[0]);
119260 if( zQuery==0 && sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
119261 return SQLITE_NOMEM;
119264 rc = sqlite3Fts3ExprParse(p->pTokenizer, p->azColumn, p->bHasStat,
119265 p->nColumn, iCol, zQuery, -1, &pCsr->pExpr
119267 if( rc!=SQLITE_OK ){
119268 if( rc==SQLITE_ERROR ){
119269 static const char *zErr = "malformed MATCH expression: [%s]";
119270 p->base.zErrMsg = sqlite3_mprintf(zErr, zQuery);
119272 return rc;
119275 rc = sqlite3Fts3ReadLock(p);
119276 if( rc!=SQLITE_OK ) return rc;
119278 rc = fts3EvalStart(pCsr);
119280 sqlite3Fts3SegmentsClose(p);
119281 if( rc!=SQLITE_OK ) return rc;
119282 pCsr->pNextId = pCsr->aDoclist;
119283 pCsr->iPrevId = 0;
119286 /* Compile a SELECT statement for this cursor. For a full-table-scan, the
119287 ** statement loops through all rows of the %_content table. For a
119288 ** full-text query or docid lookup, the statement retrieves a single
119289 ** row by docid.
119291 if( idxNum==FTS3_FULLSCAN_SEARCH ){
119292 zSql = sqlite3_mprintf(
119293 "SELECT %s ORDER BY rowid %s",
119294 p->zReadExprlist, (pCsr->bDesc ? "DESC" : "ASC")
119296 if( zSql ){
119297 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pCsr->pStmt, 0);
119298 sqlite3_free(zSql);
119299 }else{
119300 rc = SQLITE_NOMEM;
119302 }else if( idxNum==FTS3_DOCID_SEARCH ){
119303 rc = fts3CursorSeekStmt(pCsr, &pCsr->pStmt);
119304 if( rc==SQLITE_OK ){
119305 rc = sqlite3_bind_value(pCsr->pStmt, 1, apVal[0]);
119308 if( rc!=SQLITE_OK ) return rc;
119310 return fts3NextMethod(pCursor);
119314 ** This is the xEof method of the virtual table. SQLite calls this
119315 ** routine to find out if it has reached the end of a result set.
119317 static int fts3EofMethod(sqlite3_vtab_cursor *pCursor){
119318 return ((Fts3Cursor *)pCursor)->isEof;
119322 ** This is the xRowid method. The SQLite core calls this routine to
119323 ** retrieve the rowid for the current row of the result set. fts3
119324 ** exposes %_content.docid as the rowid for the virtual table. The
119325 ** rowid should be written to *pRowid.
119327 static int fts3RowidMethod(sqlite3_vtab_cursor *pCursor, sqlite_int64 *pRowid){
119328 Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
119329 *pRowid = pCsr->iPrevId;
119330 return SQLITE_OK;
119334 ** This is the xColumn method, called by SQLite to request a value from
119335 ** the row that the supplied cursor currently points to.
119337 static int fts3ColumnMethod(
119338 sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */
119339 sqlite3_context *pContext, /* Context for sqlite3_result_xxx() calls */
119340 int iCol /* Index of column to read value from */
119342 int rc = SQLITE_OK; /* Return Code */
119343 Fts3Cursor *pCsr = (Fts3Cursor *) pCursor;
119344 Fts3Table *p = (Fts3Table *)pCursor->pVtab;
119346 /* The column value supplied by SQLite must be in range. */
119347 assert( iCol>=0 && iCol<=p->nColumn+1 );
119349 if( iCol==p->nColumn+1 ){
119350 /* This call is a request for the "docid" column. Since "docid" is an
119351 ** alias for "rowid", use the xRowid() method to obtain the value.
119353 sqlite3_result_int64(pContext, pCsr->iPrevId);
119354 }else if( iCol==p->nColumn ){
119355 /* The extra column whose name is the same as the table.
119356 ** Return a blob which is a pointer to the cursor.
119358 sqlite3_result_blob(pContext, &pCsr, sizeof(pCsr), SQLITE_TRANSIENT);
119359 }else{
119360 rc = fts3CursorSeek(0, pCsr);
119361 if( rc==SQLITE_OK && sqlite3_data_count(pCsr->pStmt)>(iCol+1) ){
119362 sqlite3_result_value(pContext, sqlite3_column_value(pCsr->pStmt, iCol+1));
119366 assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
119367 return rc;
119371 ** This function is the implementation of the xUpdate callback used by
119372 ** FTS3 virtual tables. It is invoked by SQLite each time a row is to be
119373 ** inserted, updated or deleted.
119375 static int fts3UpdateMethod(
119376 sqlite3_vtab *pVtab, /* Virtual table handle */
119377 int nArg, /* Size of argument array */
119378 sqlite3_value **apVal, /* Array of arguments */
119379 sqlite_int64 *pRowid /* OUT: The affected (or effected) rowid */
119381 return sqlite3Fts3UpdateMethod(pVtab, nArg, apVal, pRowid);
119385 ** Implementation of xSync() method. Flush the contents of the pending-terms
119386 ** hash-table to the database.
119388 static int fts3SyncMethod(sqlite3_vtab *pVtab){
119389 int rc = sqlite3Fts3PendingTermsFlush((Fts3Table *)pVtab);
119390 sqlite3Fts3SegmentsClose((Fts3Table *)pVtab);
119391 return rc;
119395 ** Implementation of xBegin() method. This is a no-op.
119397 static int fts3BeginMethod(sqlite3_vtab *pVtab){
119398 TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
119399 UNUSED_PARAMETER(pVtab);
119400 assert( p->pSegments==0 );
119401 assert( p->nPendingData==0 );
119402 assert( p->inTransaction!=1 );
119403 TESTONLY( p->inTransaction = 1 );
119404 TESTONLY( p->mxSavepoint = -1; );
119405 return SQLITE_OK;
119409 ** Implementation of xCommit() method. This is a no-op. The contents of
119410 ** the pending-terms hash-table have already been flushed into the database
119411 ** by fts3SyncMethod().
119413 static int fts3CommitMethod(sqlite3_vtab *pVtab){
119414 TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
119415 UNUSED_PARAMETER(pVtab);
119416 assert( p->nPendingData==0 );
119417 assert( p->inTransaction!=0 );
119418 assert( p->pSegments==0 );
119419 TESTONLY( p->inTransaction = 0 );
119420 TESTONLY( p->mxSavepoint = -1; );
119421 return SQLITE_OK;
119425 ** Implementation of xRollback(). Discard the contents of the pending-terms
119426 ** hash-table. Any changes made to the database are reverted by SQLite.
119428 static int fts3RollbackMethod(sqlite3_vtab *pVtab){
119429 Fts3Table *p = (Fts3Table*)pVtab;
119430 sqlite3Fts3PendingTermsClear(p);
119431 assert( p->inTransaction!=0 );
119432 TESTONLY( p->inTransaction = 0 );
119433 TESTONLY( p->mxSavepoint = -1; );
119434 return SQLITE_OK;
119438 ** When called, *ppPoslist must point to the byte immediately following the
119439 ** end of a position-list. i.e. ( (*ppPoslist)[-1]==POS_END ). This function
119440 ** moves *ppPoslist so that it instead points to the first byte of the
119441 ** same position list.
119443 static void fts3ReversePoslist(char *pStart, char **ppPoslist){
119444 char *p = &(*ppPoslist)[-2];
119445 char c = 0;
119447 while( p>pStart && (c=*p--)==0 );
119448 while( p>pStart && (*p & 0x80) | c ){
119449 c = *p--;
119451 if( p>pStart ){ p = &p[2]; }
119452 while( *p++&0x80 );
119453 *ppPoslist = p;
119457 ** Helper function used by the implementation of the overloaded snippet(),
119458 ** offsets() and optimize() SQL functions.
119460 ** If the value passed as the third argument is a blob of size
119461 ** sizeof(Fts3Cursor*), then the blob contents are copied to the
119462 ** output variable *ppCsr and SQLITE_OK is returned. Otherwise, an error
119463 ** message is written to context pContext and SQLITE_ERROR returned. The
119464 ** string passed via zFunc is used as part of the error message.
119466 static int fts3FunctionArg(
119467 sqlite3_context *pContext, /* SQL function call context */
119468 const char *zFunc, /* Function name */
119469 sqlite3_value *pVal, /* argv[0] passed to function */
119470 Fts3Cursor **ppCsr /* OUT: Store cursor handle here */
119472 Fts3Cursor *pRet;
119473 if( sqlite3_value_type(pVal)!=SQLITE_BLOB
119474 || sqlite3_value_bytes(pVal)!=sizeof(Fts3Cursor *)
119476 char *zErr = sqlite3_mprintf("illegal first argument to %s", zFunc);
119477 sqlite3_result_error(pContext, zErr, -1);
119478 sqlite3_free(zErr);
119479 return SQLITE_ERROR;
119481 memcpy(&pRet, sqlite3_value_blob(pVal), sizeof(Fts3Cursor *));
119482 *ppCsr = pRet;
119483 return SQLITE_OK;
119487 ** Implementation of the snippet() function for FTS3
119489 static void fts3SnippetFunc(
119490 sqlite3_context *pContext, /* SQLite function call context */
119491 int nVal, /* Size of apVal[] array */
119492 sqlite3_value **apVal /* Array of arguments */
119494 Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */
119495 const char *zStart = "<b>";
119496 const char *zEnd = "</b>";
119497 const char *zEllipsis = "<b>...</b>";
119498 int iCol = -1;
119499 int nToken = 15; /* Default number of tokens in snippet */
119501 /* There must be at least one argument passed to this function (otherwise
119502 ** the non-overloaded version would have been called instead of this one).
119504 assert( nVal>=1 );
119506 if( nVal>6 ){
119507 sqlite3_result_error(pContext,
119508 "wrong number of arguments to function snippet()", -1);
119509 return;
119511 if( fts3FunctionArg(pContext, "snippet", apVal[0], &pCsr) ) return;
119513 switch( nVal ){
119514 case 6: nToken = sqlite3_value_int(apVal[5]);
119515 case 5: iCol = sqlite3_value_int(apVal[4]);
119516 case 4: zEllipsis = (const char*)sqlite3_value_text(apVal[3]);
119517 case 3: zEnd = (const char*)sqlite3_value_text(apVal[2]);
119518 case 2: zStart = (const char*)sqlite3_value_text(apVal[1]);
119520 if( !zEllipsis || !zEnd || !zStart ){
119521 sqlite3_result_error_nomem(pContext);
119522 }else if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
119523 sqlite3Fts3Snippet(pContext, pCsr, zStart, zEnd, zEllipsis, iCol, nToken);
119528 ** Implementation of the offsets() function for FTS3
119530 static void fts3OffsetsFunc(
119531 sqlite3_context *pContext, /* SQLite function call context */
119532 int nVal, /* Size of argument array */
119533 sqlite3_value **apVal /* Array of arguments */
119535 Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */
119537 UNUSED_PARAMETER(nVal);
119539 assert( nVal==1 );
119540 if( fts3FunctionArg(pContext, "offsets", apVal[0], &pCsr) ) return;
119541 assert( pCsr );
119542 if( SQLITE_OK==fts3CursorSeek(pContext, pCsr) ){
119543 sqlite3Fts3Offsets(pContext, pCsr);
119548 ** Implementation of the special optimize() function for FTS3. This
119549 ** function merges all segments in the database to a single segment.
119550 ** Example usage is:
119552 ** SELECT optimize(t) FROM t LIMIT 1;
119554 ** where 't' is the name of an FTS3 table.
119556 static void fts3OptimizeFunc(
119557 sqlite3_context *pContext, /* SQLite function call context */
119558 int nVal, /* Size of argument array */
119559 sqlite3_value **apVal /* Array of arguments */
119561 int rc; /* Return code */
119562 Fts3Table *p; /* Virtual table handle */
119563 Fts3Cursor *pCursor; /* Cursor handle passed through apVal[0] */
119565 UNUSED_PARAMETER(nVal);
119567 assert( nVal==1 );
119568 if( fts3FunctionArg(pContext, "optimize", apVal[0], &pCursor) ) return;
119569 p = (Fts3Table *)pCursor->base.pVtab;
119570 assert( p );
119572 rc = sqlite3Fts3Optimize(p);
119574 switch( rc ){
119575 case SQLITE_OK:
119576 sqlite3_result_text(pContext, "Index optimized", -1, SQLITE_STATIC);
119577 break;
119578 case SQLITE_DONE:
119579 sqlite3_result_text(pContext, "Index already optimal", -1, SQLITE_STATIC);
119580 break;
119581 default:
119582 sqlite3_result_error_code(pContext, rc);
119583 break;
119588 ** Implementation of the matchinfo() function for FTS3
119590 static void fts3MatchinfoFunc(
119591 sqlite3_context *pContext, /* SQLite function call context */
119592 int nVal, /* Size of argument array */
119593 sqlite3_value **apVal /* Array of arguments */
119595 Fts3Cursor *pCsr; /* Cursor handle passed through apVal[0] */
119596 assert( nVal==1 || nVal==2 );
119597 if( SQLITE_OK==fts3FunctionArg(pContext, "matchinfo", apVal[0], &pCsr) ){
119598 const char *zArg = 0;
119599 if( nVal>1 ){
119600 zArg = (const char *)sqlite3_value_text(apVal[1]);
119602 sqlite3Fts3Matchinfo(pContext, pCsr, zArg);
119607 ** This routine implements the xFindFunction method for the FTS3
119608 ** virtual table.
119610 static int fts3FindFunctionMethod(
119611 sqlite3_vtab *pVtab, /* Virtual table handle */
119612 int nArg, /* Number of SQL function arguments */
119613 const char *zName, /* Name of SQL function */
119614 void (**pxFunc)(sqlite3_context*,int,sqlite3_value**), /* OUT: Result */
119615 void **ppArg /* Unused */
119617 struct Overloaded {
119618 const char *zName;
119619 void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
119620 } aOverload[] = {
119621 { "snippet", fts3SnippetFunc },
119622 { "offsets", fts3OffsetsFunc },
119623 { "optimize", fts3OptimizeFunc },
119624 { "matchinfo", fts3MatchinfoFunc },
119626 int i; /* Iterator variable */
119628 UNUSED_PARAMETER(pVtab);
119629 UNUSED_PARAMETER(nArg);
119630 UNUSED_PARAMETER(ppArg);
119632 for(i=0; i<SizeofArray(aOverload); i++){
119633 if( strcmp(zName, aOverload[i].zName)==0 ){
119634 *pxFunc = aOverload[i].xFunc;
119635 return 1;
119639 /* No function of the specified name was found. Return 0. */
119640 return 0;
119644 ** Implementation of FTS3 xRename method. Rename an fts3 table.
119646 static int fts3RenameMethod(
119647 sqlite3_vtab *pVtab, /* Virtual table handle */
119648 const char *zName /* New name of table */
119650 Fts3Table *p = (Fts3Table *)pVtab;
119651 sqlite3 *db = p->db; /* Database connection */
119652 int rc; /* Return Code */
119654 /* As it happens, the pending terms table is always empty here. This is
119655 ** because an "ALTER TABLE RENAME TABLE" statement inside a transaction
119656 ** always opens a savepoint transaction. And the xSavepoint() method
119657 ** flushes the pending terms table. But leave the (no-op) call to
119658 ** PendingTermsFlush() in in case that changes.
119660 assert( p->nPendingData==0 );
119661 rc = sqlite3Fts3PendingTermsFlush(p);
119663 if( p->zContentTbl==0 ){
119664 fts3DbExec(&rc, db,
119665 "ALTER TABLE %Q.'%q_content' RENAME TO '%q_content';",
119666 p->zDb, p->zName, zName
119670 if( p->bHasDocsize ){
119671 fts3DbExec(&rc, db,
119672 "ALTER TABLE %Q.'%q_docsize' RENAME TO '%q_docsize';",
119673 p->zDb, p->zName, zName
119676 if( p->bHasStat ){
119677 fts3DbExec(&rc, db,
119678 "ALTER TABLE %Q.'%q_stat' RENAME TO '%q_stat';",
119679 p->zDb, p->zName, zName
119682 fts3DbExec(&rc, db,
119683 "ALTER TABLE %Q.'%q_segments' RENAME TO '%q_segments';",
119684 p->zDb, p->zName, zName
119686 fts3DbExec(&rc, db,
119687 "ALTER TABLE %Q.'%q_segdir' RENAME TO '%q_segdir';",
119688 p->zDb, p->zName, zName
119690 return rc;
119694 ** The xSavepoint() method.
119696 ** Flush the contents of the pending-terms table to disk.
119698 static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
119699 UNUSED_PARAMETER(iSavepoint);
119700 assert( ((Fts3Table *)pVtab)->inTransaction );
119701 assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint );
119702 TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint );
119703 return fts3SyncMethod(pVtab);
119707 ** The xRelease() method.
119709 ** This is a no-op.
119711 static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
119712 TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
119713 UNUSED_PARAMETER(iSavepoint);
119714 UNUSED_PARAMETER(pVtab);
119715 assert( p->inTransaction );
119716 assert( p->mxSavepoint >= iSavepoint );
119717 TESTONLY( p->mxSavepoint = iSavepoint-1 );
119718 return SQLITE_OK;
119722 ** The xRollbackTo() method.
119724 ** Discard the contents of the pending terms table.
119726 static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){
119727 Fts3Table *p = (Fts3Table*)pVtab;
119728 UNUSED_PARAMETER(iSavepoint);
119729 assert( p->inTransaction );
119730 assert( p->mxSavepoint >= iSavepoint );
119731 TESTONLY( p->mxSavepoint = iSavepoint );
119732 sqlite3Fts3PendingTermsClear(p);
119733 return SQLITE_OK;
119736 static const sqlite3_module fts3Module = {
119737 /* iVersion */ 2,
119738 /* xCreate */ fts3CreateMethod,
119739 /* xConnect */ fts3ConnectMethod,
119740 /* xBestIndex */ fts3BestIndexMethod,
119741 /* xDisconnect */ fts3DisconnectMethod,
119742 /* xDestroy */ fts3DestroyMethod,
119743 /* xOpen */ fts3OpenMethod,
119744 /* xClose */ fts3CloseMethod,
119745 /* xFilter */ fts3FilterMethod,
119746 /* xNext */ fts3NextMethod,
119747 /* xEof */ fts3EofMethod,
119748 /* xColumn */ fts3ColumnMethod,
119749 /* xRowid */ fts3RowidMethod,
119750 /* xUpdate */ fts3UpdateMethod,
119751 /* xBegin */ fts3BeginMethod,
119752 /* xSync */ fts3SyncMethod,
119753 /* xCommit */ fts3CommitMethod,
119754 /* xRollback */ fts3RollbackMethod,
119755 /* xFindFunction */ fts3FindFunctionMethod,
119756 /* xRename */ fts3RenameMethod,
119757 /* xSavepoint */ fts3SavepointMethod,
119758 /* xRelease */ fts3ReleaseMethod,
119759 /* xRollbackTo */ fts3RollbackToMethod,
119763 ** This function is registered as the module destructor (called when an
119764 ** FTS3 enabled database connection is closed). It frees the memory
119765 ** allocated for the tokenizer hash table.
119767 static void hashDestroy(void *p){
119768 Fts3Hash *pHash = (Fts3Hash *)p;
119769 sqlite3Fts3HashClear(pHash);
119770 sqlite3_free(pHash);
119774 ** The fts3 built-in tokenizers - "simple", "porter" and "icu"- are
119775 ** implemented in files fts3_tokenizer1.c, fts3_porter.c and fts3_icu.c
119776 ** respectively. The following three forward declarations are for functions
119777 ** declared in these files used to retrieve the respective implementations.
119779 ** Calling sqlite3Fts3SimpleTokenizerModule() sets the value pointed
119780 ** to by the argument to point to the "simple" tokenizer implementation.
119781 ** And so on.
119783 SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
119784 SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);
119785 #ifdef SQLITE_ENABLE_ICU
119786 SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule);
119787 #endif
119790 ** Initialise the fts3 extension. If this extension is built as part
119791 ** of the sqlite library, then this function is called directly by
119792 ** SQLite. If fts3 is built as a dynamically loadable extension, this
119793 ** function is called by the sqlite3_extension_init() entry point.
119795 SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){
119796 int rc = SQLITE_OK;
119797 Fts3Hash *pHash = 0;
119798 const sqlite3_tokenizer_module *pSimple = 0;
119799 const sqlite3_tokenizer_module *pPorter = 0;
119801 #ifdef SQLITE_ENABLE_ICU
119802 const sqlite3_tokenizer_module *pIcu = 0;
119803 sqlite3Fts3IcuTokenizerModule(&pIcu);
119804 #endif
119806 #ifdef SQLITE_TEST
119807 rc = sqlite3Fts3InitTerm(db);
119808 if( rc!=SQLITE_OK ) return rc;
119809 #endif
119811 rc = sqlite3Fts3InitAux(db);
119812 if( rc!=SQLITE_OK ) return rc;
119814 sqlite3Fts3SimpleTokenizerModule(&pSimple);
119815 sqlite3Fts3PorterTokenizerModule(&pPorter);
119817 /* Allocate and initialise the hash-table used to store tokenizers. */
119818 pHash = sqlite3_malloc(sizeof(Fts3Hash));
119819 if( !pHash ){
119820 rc = SQLITE_NOMEM;
119821 }else{
119822 sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
119825 /* Load the built-in tokenizers into the hash table */
119826 if( rc==SQLITE_OK ){
119827 if( sqlite3Fts3HashInsert(pHash, "simple", 7, (void *)pSimple)
119828 || sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter)
119829 #ifdef SQLITE_ENABLE_ICU
119830 || (pIcu && sqlite3Fts3HashInsert(pHash, "icu", 4, (void *)pIcu))
119831 #endif
119833 rc = SQLITE_NOMEM;
119837 #ifdef SQLITE_TEST
119838 if( rc==SQLITE_OK ){
119839 rc = sqlite3Fts3ExprInitTestInterface(db);
119841 #endif
119843 /* Create the virtual table wrapper around the hash-table and overload
119844 ** the two scalar functions. If this is successful, register the
119845 ** module with sqlite.
119847 if( SQLITE_OK==rc
119848 && SQLITE_OK==(rc = sqlite3Fts3InitHashTable(db, pHash, "fts3_tokenizer"))
119849 && SQLITE_OK==(rc = sqlite3_overload_function(db, "snippet", -1))
119850 && SQLITE_OK==(rc = sqlite3_overload_function(db, "offsets", 1))
119851 && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 1))
119852 && SQLITE_OK==(rc = sqlite3_overload_function(db, "matchinfo", 2))
119853 && SQLITE_OK==(rc = sqlite3_overload_function(db, "optimize", 1))
119855 rc = sqlite3_create_module_v2(
119856 db, "fts3", &fts3Module, (void *)pHash, hashDestroy
119858 if( rc==SQLITE_OK ){
119859 rc = sqlite3_create_module_v2(
119860 db, "fts4", &fts3Module, (void *)pHash, 0
119863 return rc;
119866 /* An error has occurred. Delete the hash table and return the error code. */
119867 assert( rc!=SQLITE_OK );
119868 if( pHash ){
119869 sqlite3Fts3HashClear(pHash);
119870 sqlite3_free(pHash);
119872 return rc;
119876 ** Allocate an Fts3MultiSegReader for each token in the expression headed
119877 ** by pExpr.
119879 ** An Fts3SegReader object is a cursor that can seek or scan a range of
119880 ** entries within a single segment b-tree. An Fts3MultiSegReader uses multiple
119881 ** Fts3SegReader objects internally to provide an interface to seek or scan
119882 ** within the union of all segments of a b-tree. Hence the name.
119884 ** If the allocated Fts3MultiSegReader just seeks to a single entry in a
119885 ** segment b-tree (if the term is not a prefix or it is a prefix for which
119886 ** there exists prefix b-tree of the right length) then it may be traversed
119887 ** and merged incrementally. Otherwise, it has to be merged into an in-memory
119888 ** doclist and then traversed.
119890 static void fts3EvalAllocateReaders(
119891 Fts3Cursor *pCsr, /* FTS cursor handle */
119892 Fts3Expr *pExpr, /* Allocate readers for this expression */
119893 int *pnToken, /* OUT: Total number of tokens in phrase. */
119894 int *pnOr, /* OUT: Total number of OR nodes in expr. */
119895 int *pRc /* IN/OUT: Error code */
119897 if( pExpr && SQLITE_OK==*pRc ){
119898 if( pExpr->eType==FTSQUERY_PHRASE ){
119899 int i;
119900 int nToken = pExpr->pPhrase->nToken;
119901 *pnToken += nToken;
119902 for(i=0; i<nToken; i++){
119903 Fts3PhraseToken *pToken = &pExpr->pPhrase->aToken[i];
119904 int rc = fts3TermSegReaderCursor(pCsr,
119905 pToken->z, pToken->n, pToken->isPrefix, &pToken->pSegcsr
119907 if( rc!=SQLITE_OK ){
119908 *pRc = rc;
119909 return;
119912 assert( pExpr->pPhrase->iDoclistToken==0 );
119913 pExpr->pPhrase->iDoclistToken = -1;
119914 }else{
119915 *pnOr += (pExpr->eType==FTSQUERY_OR);
119916 fts3EvalAllocateReaders(pCsr, pExpr->pLeft, pnToken, pnOr, pRc);
119917 fts3EvalAllocateReaders(pCsr, pExpr->pRight, pnToken, pnOr, pRc);
119923 ** Arguments pList/nList contain the doclist for token iToken of phrase p.
119924 ** It is merged into the main doclist stored in p->doclist.aAll/nAll.
119926 ** This function assumes that pList points to a buffer allocated using
119927 ** sqlite3_malloc(). This function takes responsibility for eventually
119928 ** freeing the buffer.
119930 static void fts3EvalPhraseMergeToken(
119931 Fts3Table *pTab, /* FTS Table pointer */
119932 Fts3Phrase *p, /* Phrase to merge pList/nList into */
119933 int iToken, /* Token pList/nList corresponds to */
119934 char *pList, /* Pointer to doclist */
119935 int nList /* Number of bytes in pList */
119937 assert( iToken!=p->iDoclistToken );
119939 if( pList==0 ){
119940 sqlite3_free(p->doclist.aAll);
119941 p->doclist.aAll = 0;
119942 p->doclist.nAll = 0;
119945 else if( p->iDoclistToken<0 ){
119946 p->doclist.aAll = pList;
119947 p->doclist.nAll = nList;
119950 else if( p->doclist.aAll==0 ){
119951 sqlite3_free(pList);
119954 else {
119955 char *pLeft;
119956 char *pRight;
119957 int nLeft;
119958 int nRight;
119959 int nDiff;
119961 if( p->iDoclistToken<iToken ){
119962 pLeft = p->doclist.aAll;
119963 nLeft = p->doclist.nAll;
119964 pRight = pList;
119965 nRight = nList;
119966 nDiff = iToken - p->iDoclistToken;
119967 }else{
119968 pRight = p->doclist.aAll;
119969 nRight = p->doclist.nAll;
119970 pLeft = pList;
119971 nLeft = nList;
119972 nDiff = p->iDoclistToken - iToken;
119975 fts3DoclistPhraseMerge(pTab->bDescIdx, nDiff, pLeft, nLeft, pRight,&nRight);
119976 sqlite3_free(pLeft);
119977 p->doclist.aAll = pRight;
119978 p->doclist.nAll = nRight;
119981 if( iToken>p->iDoclistToken ) p->iDoclistToken = iToken;
119985 ** Load the doclist for phrase p into p->doclist.aAll/nAll. The loaded doclist
119986 ** does not take deferred tokens into account.
119988 ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
119990 static int fts3EvalPhraseLoad(
119991 Fts3Cursor *pCsr, /* FTS Cursor handle */
119992 Fts3Phrase *p /* Phrase object */
119994 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
119995 int iToken;
119996 int rc = SQLITE_OK;
119998 for(iToken=0; rc==SQLITE_OK && iToken<p->nToken; iToken++){
119999 Fts3PhraseToken *pToken = &p->aToken[iToken];
120000 assert( pToken->pDeferred==0 || pToken->pSegcsr==0 );
120002 if( pToken->pSegcsr ){
120003 int nThis = 0;
120004 char *pThis = 0;
120005 rc = fts3TermSelect(pTab, pToken, p->iColumn, &nThis, &pThis);
120006 if( rc==SQLITE_OK ){
120007 fts3EvalPhraseMergeToken(pTab, p, iToken, pThis, nThis);
120010 assert( pToken->pSegcsr==0 );
120013 return rc;
120017 ** This function is called on each phrase after the position lists for
120018 ** any deferred tokens have been loaded into memory. It updates the phrases
120019 ** current position list to include only those positions that are really
120020 ** instances of the phrase (after considering deferred tokens). If this
120021 ** means that the phrase does not appear in the current row, doclist.pList
120022 ** and doclist.nList are both zeroed.
120024 ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
120026 static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
120027 int iToken; /* Used to iterate through phrase tokens */
120028 char *aPoslist = 0; /* Position list for deferred tokens */
120029 int nPoslist = 0; /* Number of bytes in aPoslist */
120030 int iPrev = -1; /* Token number of previous deferred token */
120032 assert( pPhrase->doclist.bFreeList==0 );
120034 for(iToken=0; iToken<pPhrase->nToken; iToken++){
120035 Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
120036 Fts3DeferredToken *pDeferred = pToken->pDeferred;
120038 if( pDeferred ){
120039 char *pList;
120040 int nList;
120041 int rc = sqlite3Fts3DeferredTokenList(pDeferred, &pList, &nList);
120042 if( rc!=SQLITE_OK ) return rc;
120044 if( pList==0 ){
120045 sqlite3_free(aPoslist);
120046 pPhrase->doclist.pList = 0;
120047 pPhrase->doclist.nList = 0;
120048 return SQLITE_OK;
120050 }else if( aPoslist==0 ){
120051 aPoslist = pList;
120052 nPoslist = nList;
120054 }else{
120055 char *aOut = pList;
120056 char *p1 = aPoslist;
120057 char *p2 = aOut;
120059 assert( iPrev>=0 );
120060 fts3PoslistPhraseMerge(&aOut, iToken-iPrev, 0, 1, &p1, &p2);
120061 sqlite3_free(aPoslist);
120062 aPoslist = pList;
120063 nPoslist = aOut - aPoslist;
120064 if( nPoslist==0 ){
120065 sqlite3_free(aPoslist);
120066 pPhrase->doclist.pList = 0;
120067 pPhrase->doclist.nList = 0;
120068 return SQLITE_OK;
120071 iPrev = iToken;
120075 if( iPrev>=0 ){
120076 int nMaxUndeferred = pPhrase->iDoclistToken;
120077 if( nMaxUndeferred<0 ){
120078 pPhrase->doclist.pList = aPoslist;
120079 pPhrase->doclist.nList = nPoslist;
120080 pPhrase->doclist.iDocid = pCsr->iPrevId;
120081 pPhrase->doclist.bFreeList = 1;
120082 }else{
120083 int nDistance;
120084 char *p1;
120085 char *p2;
120086 char *aOut;
120088 if( nMaxUndeferred>iPrev ){
120089 p1 = aPoslist;
120090 p2 = pPhrase->doclist.pList;
120091 nDistance = nMaxUndeferred - iPrev;
120092 }else{
120093 p1 = pPhrase->doclist.pList;
120094 p2 = aPoslist;
120095 nDistance = iPrev - nMaxUndeferred;
120098 aOut = (char *)sqlite3_malloc(nPoslist+8);
120099 if( !aOut ){
120100 sqlite3_free(aPoslist);
120101 return SQLITE_NOMEM;
120104 pPhrase->doclist.pList = aOut;
120105 if( fts3PoslistPhraseMerge(&aOut, nDistance, 0, 1, &p1, &p2) ){
120106 pPhrase->doclist.bFreeList = 1;
120107 pPhrase->doclist.nList = (aOut - pPhrase->doclist.pList);
120108 }else{
120109 sqlite3_free(aOut);
120110 pPhrase->doclist.pList = 0;
120111 pPhrase->doclist.nList = 0;
120113 sqlite3_free(aPoslist);
120117 return SQLITE_OK;
120121 ** This function is called for each Fts3Phrase in a full-text query
120122 ** expression to initialize the mechanism for returning rows. Once this
120123 ** function has been called successfully on an Fts3Phrase, it may be
120124 ** used with fts3EvalPhraseNext() to iterate through the matching docids.
120126 ** If parameter bOptOk is true, then the phrase may (or may not) use the
120127 ** incremental loading strategy. Otherwise, the entire doclist is loaded into
120128 ** memory within this call.
120130 ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
120132 static int fts3EvalPhraseStart(Fts3Cursor *pCsr, int bOptOk, Fts3Phrase *p){
120133 int rc; /* Error code */
120134 Fts3PhraseToken *pFirst = &p->aToken[0];
120135 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120137 if( pCsr->bDesc==pTab->bDescIdx
120138 && bOptOk==1
120139 && p->nToken==1
120140 && pFirst->pSegcsr
120141 && pFirst->pSegcsr->bLookup
120142 && pFirst->bFirst==0
120144 /* Use the incremental approach. */
120145 int iCol = (p->iColumn >= pTab->nColumn ? -1 : p->iColumn);
120146 rc = sqlite3Fts3MsrIncrStart(
120147 pTab, pFirst->pSegcsr, iCol, pFirst->z, pFirst->n);
120148 p->bIncr = 1;
120150 }else{
120151 /* Load the full doclist for the phrase into memory. */
120152 rc = fts3EvalPhraseLoad(pCsr, p);
120153 p->bIncr = 0;
120156 assert( rc!=SQLITE_OK || p->nToken<1 || p->aToken[0].pSegcsr==0 || p->bIncr );
120157 return rc;
120161 ** This function is used to iterate backwards (from the end to start)
120162 ** through doclists. It is used by this module to iterate through phrase
120163 ** doclists in reverse and by the fts3_write.c module to iterate through
120164 ** pending-terms lists when writing to databases with "order=desc".
120166 ** The doclist may be sorted in ascending (parameter bDescIdx==0) or
120167 ** descending (parameter bDescIdx==1) order of docid. Regardless, this
120168 ** function iterates from the end of the doclist to the beginning.
120170 SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(
120171 int bDescIdx, /* True if the doclist is desc */
120172 char *aDoclist, /* Pointer to entire doclist */
120173 int nDoclist, /* Length of aDoclist in bytes */
120174 char **ppIter, /* IN/OUT: Iterator pointer */
120175 sqlite3_int64 *piDocid, /* IN/OUT: Docid pointer */
120176 int *pnList, /* IN/OUT: List length pointer */
120177 u8 *pbEof /* OUT: End-of-file flag */
120179 char *p = *ppIter;
120181 assert( nDoclist>0 );
120182 assert( *pbEof==0 );
120183 assert( p || *piDocid==0 );
120184 assert( !p || (p>aDoclist && p<&aDoclist[nDoclist]) );
120186 if( p==0 ){
120187 sqlite3_int64 iDocid = 0;
120188 char *pNext = 0;
120189 char *pDocid = aDoclist;
120190 char *pEnd = &aDoclist[nDoclist];
120191 int iMul = 1;
120193 while( pDocid<pEnd ){
120194 sqlite3_int64 iDelta;
120195 pDocid += sqlite3Fts3GetVarint(pDocid, &iDelta);
120196 iDocid += (iMul * iDelta);
120197 pNext = pDocid;
120198 fts3PoslistCopy(0, &pDocid);
120199 while( pDocid<pEnd && *pDocid==0 ) pDocid++;
120200 iMul = (bDescIdx ? -1 : 1);
120203 *pnList = pEnd - pNext;
120204 *ppIter = pNext;
120205 *piDocid = iDocid;
120206 }else{
120207 int iMul = (bDescIdx ? -1 : 1);
120208 sqlite3_int64 iDelta;
120209 fts3GetReverseVarint(&p, aDoclist, &iDelta);
120210 *piDocid -= (iMul * iDelta);
120212 if( p==aDoclist ){
120213 *pbEof = 1;
120214 }else{
120215 char *pSave = p;
120216 fts3ReversePoslist(aDoclist, &p);
120217 *pnList = (pSave - p);
120219 *ppIter = p;
120224 ** Attempt to move the phrase iterator to point to the next matching docid.
120225 ** If an error occurs, return an SQLite error code. Otherwise, return
120226 ** SQLITE_OK.
120228 ** If there is no "next" entry and no error occurs, then *pbEof is set to
120229 ** 1 before returning. Otherwise, if no error occurs and the iterator is
120230 ** successfully advanced, *pbEof is set to 0.
120232 static int fts3EvalPhraseNext(
120233 Fts3Cursor *pCsr, /* FTS Cursor handle */
120234 Fts3Phrase *p, /* Phrase object to advance to next docid */
120235 u8 *pbEof /* OUT: Set to 1 if EOF */
120237 int rc = SQLITE_OK;
120238 Fts3Doclist *pDL = &p->doclist;
120239 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120241 if( p->bIncr ){
120242 assert( p->nToken==1 );
120243 assert( pDL->pNextDocid==0 );
120244 rc = sqlite3Fts3MsrIncrNext(pTab, p->aToken[0].pSegcsr,
120245 &pDL->iDocid, &pDL->pList, &pDL->nList
120247 if( rc==SQLITE_OK && !pDL->pList ){
120248 *pbEof = 1;
120250 }else if( pCsr->bDesc!=pTab->bDescIdx && pDL->nAll ){
120251 sqlite3Fts3DoclistPrev(pTab->bDescIdx, pDL->aAll, pDL->nAll,
120252 &pDL->pNextDocid, &pDL->iDocid, &pDL->nList, pbEof
120254 pDL->pList = pDL->pNextDocid;
120255 }else{
120256 char *pIter; /* Used to iterate through aAll */
120257 char *pEnd = &pDL->aAll[pDL->nAll]; /* 1 byte past end of aAll */
120258 if( pDL->pNextDocid ){
120259 pIter = pDL->pNextDocid;
120260 }else{
120261 pIter = pDL->aAll;
120264 if( pIter>=pEnd ){
120265 /* We have already reached the end of this doclist. EOF. */
120266 *pbEof = 1;
120267 }else{
120268 sqlite3_int64 iDelta;
120269 pIter += sqlite3Fts3GetVarint(pIter, &iDelta);
120270 if( pTab->bDescIdx==0 || pDL->pNextDocid==0 ){
120271 pDL->iDocid += iDelta;
120272 }else{
120273 pDL->iDocid -= iDelta;
120275 pDL->pList = pIter;
120276 fts3PoslistCopy(0, &pIter);
120277 pDL->nList = (pIter - pDL->pList);
120279 /* pIter now points just past the 0x00 that terminates the position-
120280 ** list for document pDL->iDocid. However, if this position-list was
120281 ** edited in place by fts3EvalNearTrim(), then pIter may not actually
120282 ** point to the start of the next docid value. The following line deals
120283 ** with this case by advancing pIter past the zero-padding added by
120284 ** fts3EvalNearTrim(). */
120285 while( pIter<pEnd && *pIter==0 ) pIter++;
120287 pDL->pNextDocid = pIter;
120288 assert( pIter>=&pDL->aAll[pDL->nAll] || *pIter );
120289 *pbEof = 0;
120293 return rc;
120298 ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
120299 ** Otherwise, fts3EvalPhraseStart() is called on all phrases within the
120300 ** expression. Also the Fts3Expr.bDeferred variable is set to true for any
120301 ** expressions for which all descendent tokens are deferred.
120303 ** If parameter bOptOk is zero, then it is guaranteed that the
120304 ** Fts3Phrase.doclist.aAll/nAll variables contain the entire doclist for
120305 ** each phrase in the expression (subject to deferred token processing).
120306 ** Or, if bOptOk is non-zero, then one or more tokens within the expression
120307 ** may be loaded incrementally, meaning doclist.aAll/nAll is not available.
120309 ** If an error occurs within this function, *pRc is set to an SQLite error
120310 ** code before returning.
120312 static void fts3EvalStartReaders(
120313 Fts3Cursor *pCsr, /* FTS Cursor handle */
120314 Fts3Expr *pExpr, /* Expression to initialize phrases in */
120315 int bOptOk, /* True to enable incremental loading */
120316 int *pRc /* IN/OUT: Error code */
120318 if( pExpr && SQLITE_OK==*pRc ){
120319 if( pExpr->eType==FTSQUERY_PHRASE ){
120320 int i;
120321 int nToken = pExpr->pPhrase->nToken;
120322 for(i=0; i<nToken; i++){
120323 if( pExpr->pPhrase->aToken[i].pDeferred==0 ) break;
120325 pExpr->bDeferred = (i==nToken);
120326 *pRc = fts3EvalPhraseStart(pCsr, bOptOk, pExpr->pPhrase);
120327 }else{
120328 fts3EvalStartReaders(pCsr, pExpr->pLeft, bOptOk, pRc);
120329 fts3EvalStartReaders(pCsr, pExpr->pRight, bOptOk, pRc);
120330 pExpr->bDeferred = (pExpr->pLeft->bDeferred && pExpr->pRight->bDeferred);
120336 ** An array of the following structures is assembled as part of the process
120337 ** of selecting tokens to defer before the query starts executing (as part
120338 ** of the xFilter() method). There is one element in the array for each
120339 ** token in the FTS expression.
120341 ** Tokens are divided into AND/NEAR clusters. All tokens in a cluster belong
120342 ** to phrases that are connected only by AND and NEAR operators (not OR or
120343 ** NOT). When determining tokens to defer, each AND/NEAR cluster is considered
120344 ** separately. The root of a tokens AND/NEAR cluster is stored in
120345 ** Fts3TokenAndCost.pRoot.
120347 typedef struct Fts3TokenAndCost Fts3TokenAndCost;
120348 struct Fts3TokenAndCost {
120349 Fts3Phrase *pPhrase; /* The phrase the token belongs to */
120350 int iToken; /* Position of token in phrase */
120351 Fts3PhraseToken *pToken; /* The token itself */
120352 Fts3Expr *pRoot; /* Root of NEAR/AND cluster */
120353 int nOvfl; /* Number of overflow pages to load doclist */
120354 int iCol; /* The column the token must match */
120358 ** This function is used to populate an allocated Fts3TokenAndCost array.
120360 ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
120361 ** Otherwise, if an error occurs during execution, *pRc is set to an
120362 ** SQLite error code.
120364 static void fts3EvalTokenCosts(
120365 Fts3Cursor *pCsr, /* FTS Cursor handle */
120366 Fts3Expr *pRoot, /* Root of current AND/NEAR cluster */
120367 Fts3Expr *pExpr, /* Expression to consider */
120368 Fts3TokenAndCost **ppTC, /* Write new entries to *(*ppTC)++ */
120369 Fts3Expr ***ppOr, /* Write new OR root to *(*ppOr)++ */
120370 int *pRc /* IN/OUT: Error code */
120372 if( *pRc==SQLITE_OK ){
120373 if( pExpr->eType==FTSQUERY_PHRASE ){
120374 Fts3Phrase *pPhrase = pExpr->pPhrase;
120375 int i;
120376 for(i=0; *pRc==SQLITE_OK && i<pPhrase->nToken; i++){
120377 Fts3TokenAndCost *pTC = (*ppTC)++;
120378 pTC->pPhrase = pPhrase;
120379 pTC->iToken = i;
120380 pTC->pRoot = pRoot;
120381 pTC->pToken = &pPhrase->aToken[i];
120382 pTC->iCol = pPhrase->iColumn;
120383 *pRc = sqlite3Fts3MsrOvfl(pCsr, pTC->pToken->pSegcsr, &pTC->nOvfl);
120385 }else if( pExpr->eType!=FTSQUERY_NOT ){
120386 assert( pExpr->eType==FTSQUERY_OR
120387 || pExpr->eType==FTSQUERY_AND
120388 || pExpr->eType==FTSQUERY_NEAR
120390 assert( pExpr->pLeft && pExpr->pRight );
120391 if( pExpr->eType==FTSQUERY_OR ){
120392 pRoot = pExpr->pLeft;
120393 **ppOr = pRoot;
120394 (*ppOr)++;
120396 fts3EvalTokenCosts(pCsr, pRoot, pExpr->pLeft, ppTC, ppOr, pRc);
120397 if( pExpr->eType==FTSQUERY_OR ){
120398 pRoot = pExpr->pRight;
120399 **ppOr = pRoot;
120400 (*ppOr)++;
120402 fts3EvalTokenCosts(pCsr, pRoot, pExpr->pRight, ppTC, ppOr, pRc);
120408 ** Determine the average document (row) size in pages. If successful,
120409 ** write this value to *pnPage and return SQLITE_OK. Otherwise, return
120410 ** an SQLite error code.
120412 ** The average document size in pages is calculated by first calculating
120413 ** determining the average size in bytes, B. If B is less than the amount
120414 ** of data that will fit on a single leaf page of an intkey table in
120415 ** this database, then the average docsize is 1. Otherwise, it is 1 plus
120416 ** the number of overflow pages consumed by a record B bytes in size.
120418 static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
120419 if( pCsr->nRowAvg==0 ){
120420 /* The average document size, which is required to calculate the cost
120421 ** of each doclist, has not yet been determined. Read the required
120422 ** data from the %_stat table to calculate it.
120424 ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3
120425 ** varints, where nCol is the number of columns in the FTS3 table.
120426 ** The first varint is the number of documents currently stored in
120427 ** the table. The following nCol varints contain the total amount of
120428 ** data stored in all rows of each column of the table, from left
120429 ** to right.
120431 int rc;
120432 Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
120433 sqlite3_stmt *pStmt;
120434 sqlite3_int64 nDoc = 0;
120435 sqlite3_int64 nByte = 0;
120436 const char *pEnd;
120437 const char *a;
120439 rc = sqlite3Fts3SelectDoctotal(p, &pStmt);
120440 if( rc!=SQLITE_OK ) return rc;
120441 a = sqlite3_column_blob(pStmt, 0);
120442 assert( a );
120444 pEnd = &a[sqlite3_column_bytes(pStmt, 0)];
120445 a += sqlite3Fts3GetVarint(a, &nDoc);
120446 while( a<pEnd ){
120447 a += sqlite3Fts3GetVarint(a, &nByte);
120449 if( nDoc==0 || nByte==0 ){
120450 sqlite3_reset(pStmt);
120451 return FTS_CORRUPT_VTAB;
120454 pCsr->nDoc = nDoc;
120455 pCsr->nRowAvg = (int)(((nByte / nDoc) + p->nPgsz) / p->nPgsz);
120456 assert( pCsr->nRowAvg>0 );
120457 rc = sqlite3_reset(pStmt);
120458 if( rc!=SQLITE_OK ) return rc;
120461 *pnPage = pCsr->nRowAvg;
120462 return SQLITE_OK;
120466 ** This function is called to select the tokens (if any) that will be
120467 ** deferred. The array aTC[] has already been populated when this is
120468 ** called.
120470 ** This function is called once for each AND/NEAR cluster in the
120471 ** expression. Each invocation determines which tokens to defer within
120472 ** the cluster with root node pRoot. See comments above the definition
120473 ** of struct Fts3TokenAndCost for more details.
120475 ** If no error occurs, SQLITE_OK is returned and sqlite3Fts3DeferToken()
120476 ** called on each token to defer. Otherwise, an SQLite error code is
120477 ** returned.
120479 static int fts3EvalSelectDeferred(
120480 Fts3Cursor *pCsr, /* FTS Cursor handle */
120481 Fts3Expr *pRoot, /* Consider tokens with this root node */
120482 Fts3TokenAndCost *aTC, /* Array of expression tokens and costs */
120483 int nTC /* Number of entries in aTC[] */
120485 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120486 int nDocSize = 0; /* Number of pages per doc loaded */
120487 int rc = SQLITE_OK; /* Return code */
120488 int ii; /* Iterator variable for various purposes */
120489 int nOvfl = 0; /* Total overflow pages used by doclists */
120490 int nToken = 0; /* Total number of tokens in cluster */
120492 int nMinEst = 0; /* The minimum count for any phrase so far. */
120493 int nLoad4 = 1; /* (Phrases that will be loaded)^4. */
120495 /* Tokens are never deferred for FTS tables created using the content=xxx
120496 ** option. The reason being that it is not guaranteed that the content
120497 ** table actually contains the same data as the index. To prevent this from
120498 ** causing any problems, the deferred token optimization is completely
120499 ** disabled for content=xxx tables. */
120500 if( pTab->zContentTbl ){
120501 return SQLITE_OK;
120504 /* Count the tokens in this AND/NEAR cluster. If none of the doclists
120505 ** associated with the tokens spill onto overflow pages, or if there is
120506 ** only 1 token, exit early. No tokens to defer in this case. */
120507 for(ii=0; ii<nTC; ii++){
120508 if( aTC[ii].pRoot==pRoot ){
120509 nOvfl += aTC[ii].nOvfl;
120510 nToken++;
120513 if( nOvfl==0 || nToken<2 ) return SQLITE_OK;
120515 /* Obtain the average docsize (in pages). */
120516 rc = fts3EvalAverageDocsize(pCsr, &nDocSize);
120517 assert( rc!=SQLITE_OK || nDocSize>0 );
120520 /* Iterate through all tokens in this AND/NEAR cluster, in ascending order
120521 ** of the number of overflow pages that will be loaded by the pager layer
120522 ** to retrieve the entire doclist for the token from the full-text index.
120523 ** Load the doclists for tokens that are either:
120525 ** a. The cheapest token in the entire query (i.e. the one visited by the
120526 ** first iteration of this loop), or
120528 ** b. Part of a multi-token phrase.
120530 ** After each token doclist is loaded, merge it with the others from the
120531 ** same phrase and count the number of documents that the merged doclist
120532 ** contains. Set variable "nMinEst" to the smallest number of documents in
120533 ** any phrase doclist for which 1 or more token doclists have been loaded.
120534 ** Let nOther be the number of other phrases for which it is certain that
120535 ** one or more tokens will not be deferred.
120537 ** Then, for each token, defer it if loading the doclist would result in
120538 ** loading N or more overflow pages into memory, where N is computed as:
120540 ** (nMinEst + 4^nOther - 1) / (4^nOther)
120542 for(ii=0; ii<nToken && rc==SQLITE_OK; ii++){
120543 int iTC; /* Used to iterate through aTC[] array. */
120544 Fts3TokenAndCost *pTC = 0; /* Set to cheapest remaining token. */
120546 /* Set pTC to point to the cheapest remaining token. */
120547 for(iTC=0; iTC<nTC; iTC++){
120548 if( aTC[iTC].pToken && aTC[iTC].pRoot==pRoot
120549 && (!pTC || aTC[iTC].nOvfl<pTC->nOvfl)
120551 pTC = &aTC[iTC];
120554 assert( pTC );
120556 if( ii && pTC->nOvfl>=((nMinEst+(nLoad4/4)-1)/(nLoad4/4))*nDocSize ){
120557 /* The number of overflow pages to load for this (and therefore all
120558 ** subsequent) tokens is greater than the estimated number of pages
120559 ** that will be loaded if all subsequent tokens are deferred.
120561 Fts3PhraseToken *pToken = pTC->pToken;
120562 rc = sqlite3Fts3DeferToken(pCsr, pToken, pTC->iCol);
120563 fts3SegReaderCursorFree(pToken->pSegcsr);
120564 pToken->pSegcsr = 0;
120565 }else{
120566 /* Set nLoad4 to the value of (4^nOther) for the next iteration of the
120567 ** for-loop. Except, limit the value to 2^24 to prevent it from
120568 ** overflowing the 32-bit integer it is stored in. */
120569 if( ii<12 ) nLoad4 = nLoad4*4;
120571 if( ii==0 || pTC->pPhrase->nToken>1 ){
120572 /* Either this is the cheapest token in the entire query, or it is
120573 ** part of a multi-token phrase. Either way, the entire doclist will
120574 ** (eventually) be loaded into memory. It may as well be now. */
120575 Fts3PhraseToken *pToken = pTC->pToken;
120576 int nList = 0;
120577 char *pList = 0;
120578 rc = fts3TermSelect(pTab, pToken, pTC->iCol, &nList, &pList);
120579 assert( rc==SQLITE_OK || pList==0 );
120580 if( rc==SQLITE_OK ){
120581 int nCount;
120582 fts3EvalPhraseMergeToken(pTab, pTC->pPhrase, pTC->iToken,pList,nList);
120583 nCount = fts3DoclistCountDocids(
120584 pTC->pPhrase->doclist.aAll, pTC->pPhrase->doclist.nAll
120586 if( ii==0 || nCount<nMinEst ) nMinEst = nCount;
120590 pTC->pToken = 0;
120593 return rc;
120597 ** This function is called from within the xFilter method. It initializes
120598 ** the full-text query currently stored in pCsr->pExpr. To iterate through
120599 ** the results of a query, the caller does:
120601 ** fts3EvalStart(pCsr);
120602 ** while( 1 ){
120603 ** fts3EvalNext(pCsr);
120604 ** if( pCsr->bEof ) break;
120605 ** ... return row pCsr->iPrevId to the caller ...
120608 static int fts3EvalStart(Fts3Cursor *pCsr){
120609 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
120610 int rc = SQLITE_OK;
120611 int nToken = 0;
120612 int nOr = 0;
120614 /* Allocate a MultiSegReader for each token in the expression. */
120615 fts3EvalAllocateReaders(pCsr, pCsr->pExpr, &nToken, &nOr, &rc);
120617 /* Determine which, if any, tokens in the expression should be deferred. */
120618 if( rc==SQLITE_OK && nToken>1 && pTab->bHasStat ){
120619 Fts3TokenAndCost *aTC;
120620 Fts3Expr **apOr;
120621 aTC = (Fts3TokenAndCost *)sqlite3_malloc(
120622 sizeof(Fts3TokenAndCost) * nToken
120623 + sizeof(Fts3Expr *) * nOr * 2
120625 apOr = (Fts3Expr **)&aTC[nToken];
120627 if( !aTC ){
120628 rc = SQLITE_NOMEM;
120629 }else{
120630 int ii;
120631 Fts3TokenAndCost *pTC = aTC;
120632 Fts3Expr **ppOr = apOr;
120634 fts3EvalTokenCosts(pCsr, 0, pCsr->pExpr, &pTC, &ppOr, &rc);
120635 nToken = pTC-aTC;
120636 nOr = ppOr-apOr;
120638 if( rc==SQLITE_OK ){
120639 rc = fts3EvalSelectDeferred(pCsr, 0, aTC, nToken);
120640 for(ii=0; rc==SQLITE_OK && ii<nOr; ii++){
120641 rc = fts3EvalSelectDeferred(pCsr, apOr[ii], aTC, nToken);
120645 sqlite3_free(aTC);
120649 fts3EvalStartReaders(pCsr, pCsr->pExpr, 1, &rc);
120650 return rc;
120654 ** Invalidate the current position list for phrase pPhrase.
120656 static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhrase){
120657 if( pPhrase->doclist.bFreeList ){
120658 sqlite3_free(pPhrase->doclist.pList);
120660 pPhrase->doclist.pList = 0;
120661 pPhrase->doclist.nList = 0;
120662 pPhrase->doclist.bFreeList = 0;
120666 ** This function is called to edit the position list associated with
120667 ** the phrase object passed as the fifth argument according to a NEAR
120668 ** condition. For example:
120670 ** abc NEAR/5 "def ghi"
120672 ** Parameter nNear is passed the NEAR distance of the expression (5 in
120673 ** the example above). When this function is called, *paPoslist points to
120674 ** the position list, and *pnToken is the number of phrase tokens in, the
120675 ** phrase on the other side of the NEAR operator to pPhrase. For example,
120676 ** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to
120677 ** the position list associated with phrase "abc".
120679 ** All positions in the pPhrase position list that are not sufficiently
120680 ** close to a position in the *paPoslist position list are removed. If this
120681 ** leaves 0 positions, zero is returned. Otherwise, non-zero.
120683 ** Before returning, *paPoslist is set to point to the position lsit
120684 ** associated with pPhrase. And *pnToken is set to the number of tokens in
120685 ** pPhrase.
120687 static int fts3EvalNearTrim(
120688 int nNear, /* NEAR distance. As in "NEAR/nNear". */
120689 char *aTmp, /* Temporary space to use */
120690 char **paPoslist, /* IN/OUT: Position list */
120691 int *pnToken, /* IN/OUT: Tokens in phrase of *paPoslist */
120692 Fts3Phrase *pPhrase /* The phrase object to trim the doclist of */
120694 int nParam1 = nNear + pPhrase->nToken;
120695 int nParam2 = nNear + *pnToken;
120696 int nNew;
120697 char *p2;
120698 char *pOut;
120699 int res;
120701 assert( pPhrase->doclist.pList );
120703 p2 = pOut = pPhrase->doclist.pList;
120704 res = fts3PoslistNearMerge(
120705 &pOut, aTmp, nParam1, nParam2, paPoslist, &p2
120707 if( res ){
120708 nNew = (pOut - pPhrase->doclist.pList) - 1;
120709 assert( pPhrase->doclist.pList[nNew]=='\0' );
120710 assert( nNew<=pPhrase->doclist.nList && nNew>0 );
120711 memset(&pPhrase->doclist.pList[nNew], 0, pPhrase->doclist.nList - nNew);
120712 pPhrase->doclist.nList = nNew;
120713 *paPoslist = pPhrase->doclist.pList;
120714 *pnToken = pPhrase->nToken;
120717 return res;
120721 ** This function is a no-op if *pRc is other than SQLITE_OK when it is called.
120722 ** Otherwise, it advances the expression passed as the second argument to
120723 ** point to the next matching row in the database. Expressions iterate through
120724 ** matching rows in docid order. Ascending order if Fts3Cursor.bDesc is zero,
120725 ** or descending if it is non-zero.
120727 ** If an error occurs, *pRc is set to an SQLite error code. Otherwise, if
120728 ** successful, the following variables in pExpr are set:
120730 ** Fts3Expr.bEof (non-zero if EOF - there is no next row)
120731 ** Fts3Expr.iDocid (valid if bEof==0. The docid of the next row)
120733 ** If the expression is of type FTSQUERY_PHRASE, and the expression is not
120734 ** at EOF, then the following variables are populated with the position list
120735 ** for the phrase for the visited row:
120737 ** FTs3Expr.pPhrase->doclist.nList (length of pList in bytes)
120738 ** FTs3Expr.pPhrase->doclist.pList (pointer to position list)
120740 ** It says above that this function advances the expression to the next
120741 ** matching row. This is usually true, but there are the following exceptions:
120743 ** 1. Deferred tokens are not taken into account. If a phrase consists
120744 ** entirely of deferred tokens, it is assumed to match every row in
120745 ** the db. In this case the position-list is not populated at all.
120747 ** Or, if a phrase contains one or more deferred tokens and one or
120748 ** more non-deferred tokens, then the expression is advanced to the
120749 ** next possible match, considering only non-deferred tokens. In other
120750 ** words, if the phrase is "A B C", and "B" is deferred, the expression
120751 ** is advanced to the next row that contains an instance of "A * C",
120752 ** where "*" may match any single token. The position list in this case
120753 ** is populated as for "A * C" before returning.
120755 ** 2. NEAR is treated as AND. If the expression is "x NEAR y", it is
120756 ** advanced to point to the next row that matches "x AND y".
120758 ** See fts3EvalTestDeferredAndNear() for details on testing if a row is
120759 ** really a match, taking into account deferred tokens and NEAR operators.
120761 static void fts3EvalNextRow(
120762 Fts3Cursor *pCsr, /* FTS Cursor handle */
120763 Fts3Expr *pExpr, /* Expr. to advance to next matching row */
120764 int *pRc /* IN/OUT: Error code */
120766 if( *pRc==SQLITE_OK ){
120767 int bDescDoclist = pCsr->bDesc; /* Used by DOCID_CMP() macro */
120768 assert( pExpr->bEof==0 );
120769 pExpr->bStart = 1;
120771 switch( pExpr->eType ){
120772 case FTSQUERY_NEAR:
120773 case FTSQUERY_AND: {
120774 Fts3Expr *pLeft = pExpr->pLeft;
120775 Fts3Expr *pRight = pExpr->pRight;
120776 assert( !pLeft->bDeferred || !pRight->bDeferred );
120778 if( pLeft->bDeferred ){
120779 /* LHS is entirely deferred. So we assume it matches every row.
120780 ** Advance the RHS iterator to find the next row visited. */
120781 fts3EvalNextRow(pCsr, pRight, pRc);
120782 pExpr->iDocid = pRight->iDocid;
120783 pExpr->bEof = pRight->bEof;
120784 }else if( pRight->bDeferred ){
120785 /* RHS is entirely deferred. So we assume it matches every row.
120786 ** Advance the LHS iterator to find the next row visited. */
120787 fts3EvalNextRow(pCsr, pLeft, pRc);
120788 pExpr->iDocid = pLeft->iDocid;
120789 pExpr->bEof = pLeft->bEof;
120790 }else{
120791 /* Neither the RHS or LHS are deferred. */
120792 fts3EvalNextRow(pCsr, pLeft, pRc);
120793 fts3EvalNextRow(pCsr, pRight, pRc);
120794 while( !pLeft->bEof && !pRight->bEof && *pRc==SQLITE_OK ){
120795 sqlite3_int64 iDiff = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
120796 if( iDiff==0 ) break;
120797 if( iDiff<0 ){
120798 fts3EvalNextRow(pCsr, pLeft, pRc);
120799 }else{
120800 fts3EvalNextRow(pCsr, pRight, pRc);
120803 pExpr->iDocid = pLeft->iDocid;
120804 pExpr->bEof = (pLeft->bEof || pRight->bEof);
120806 break;
120809 case FTSQUERY_OR: {
120810 Fts3Expr *pLeft = pExpr->pLeft;
120811 Fts3Expr *pRight = pExpr->pRight;
120812 sqlite3_int64 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
120814 assert( pLeft->bStart || pLeft->iDocid==pRight->iDocid );
120815 assert( pRight->bStart || pLeft->iDocid==pRight->iDocid );
120817 if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
120818 fts3EvalNextRow(pCsr, pLeft, pRc);
120819 }else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){
120820 fts3EvalNextRow(pCsr, pRight, pRc);
120821 }else{
120822 fts3EvalNextRow(pCsr, pLeft, pRc);
120823 fts3EvalNextRow(pCsr, pRight, pRc);
120826 pExpr->bEof = (pLeft->bEof && pRight->bEof);
120827 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
120828 if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
120829 pExpr->iDocid = pLeft->iDocid;
120830 }else{
120831 pExpr->iDocid = pRight->iDocid;
120834 break;
120837 case FTSQUERY_NOT: {
120838 Fts3Expr *pLeft = pExpr->pLeft;
120839 Fts3Expr *pRight = pExpr->pRight;
120841 if( pRight->bStart==0 ){
120842 fts3EvalNextRow(pCsr, pRight, pRc);
120843 assert( *pRc!=SQLITE_OK || pRight->bStart );
120846 fts3EvalNextRow(pCsr, pLeft, pRc);
120847 if( pLeft->bEof==0 ){
120848 while( !*pRc
120849 && !pRight->bEof
120850 && DOCID_CMP(pLeft->iDocid, pRight->iDocid)>0
120852 fts3EvalNextRow(pCsr, pRight, pRc);
120855 pExpr->iDocid = pLeft->iDocid;
120856 pExpr->bEof = pLeft->bEof;
120857 break;
120860 default: {
120861 Fts3Phrase *pPhrase = pExpr->pPhrase;
120862 fts3EvalInvalidatePoslist(pPhrase);
120863 *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof);
120864 pExpr->iDocid = pPhrase->doclist.iDocid;
120865 break;
120872 ** If *pRc is not SQLITE_OK, or if pExpr is not the root node of a NEAR
120873 ** cluster, then this function returns 1 immediately.
120875 ** Otherwise, it checks if the current row really does match the NEAR
120876 ** expression, using the data currently stored in the position lists
120877 ** (Fts3Expr->pPhrase.doclist.pList/nList) for each phrase in the expression.
120879 ** If the current row is a match, the position list associated with each
120880 ** phrase in the NEAR expression is edited in place to contain only those
120881 ** phrase instances sufficiently close to their peers to satisfy all NEAR
120882 ** constraints. In this case it returns 1. If the NEAR expression does not
120883 ** match the current row, 0 is returned. The position lists may or may not
120884 ** be edited if 0 is returned.
120886 static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){
120887 int res = 1;
120889 /* The following block runs if pExpr is the root of a NEAR query.
120890 ** For example, the query:
120892 ** "w" NEAR "x" NEAR "y" NEAR "z"
120894 ** which is represented in tree form as:
120897 ** +--NEAR--+ <-- root of NEAR query
120898 ** | |
120899 ** +--NEAR--+ "z"
120900 ** | |
120901 ** +--NEAR--+ "y"
120902 ** | |
120903 ** "w" "x"
120905 ** The right-hand child of a NEAR node is always a phrase. The
120906 ** left-hand child may be either a phrase or a NEAR node. There are
120907 ** no exceptions to this - it's the way the parser in fts3_expr.c works.
120909 if( *pRc==SQLITE_OK
120910 && pExpr->eType==FTSQUERY_NEAR
120911 && pExpr->bEof==0
120912 && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
120914 Fts3Expr *p;
120915 int nTmp = 0; /* Bytes of temp space */
120916 char *aTmp; /* Temp space for PoslistNearMerge() */
120918 /* Allocate temporary working space. */
120919 for(p=pExpr; p->pLeft; p=p->pLeft){
120920 nTmp += p->pRight->pPhrase->doclist.nList;
120922 nTmp += p->pPhrase->doclist.nList;
120923 aTmp = sqlite3_malloc(nTmp*2);
120924 if( !aTmp ){
120925 *pRc = SQLITE_NOMEM;
120926 res = 0;
120927 }else{
120928 char *aPoslist = p->pPhrase->doclist.pList;
120929 int nToken = p->pPhrase->nToken;
120931 for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){
120932 Fts3Phrase *pPhrase = p->pRight->pPhrase;
120933 int nNear = p->nNear;
120934 res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
120937 aPoslist = pExpr->pRight->pPhrase->doclist.pList;
120938 nToken = pExpr->pRight->pPhrase->nToken;
120939 for(p=pExpr->pLeft; p && res; p=p->pLeft){
120940 int nNear;
120941 Fts3Phrase *pPhrase;
120942 assert( p->pParent && p->pParent->pLeft==p );
120943 nNear = p->pParent->nNear;
120944 pPhrase = (
120945 p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase
120947 res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
120951 sqlite3_free(aTmp);
120954 return res;
120958 ** This function is a helper function for fts3EvalTestDeferredAndNear().
120959 ** Assuming no error occurs or has occurred, It returns non-zero if the
120960 ** expression passed as the second argument matches the row that pCsr
120961 ** currently points to, or zero if it does not.
120963 ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
120964 ** If an error occurs during execution of this function, *pRc is set to
120965 ** the appropriate SQLite error code. In this case the returned value is
120966 ** undefined.
120968 static int fts3EvalTestExpr(
120969 Fts3Cursor *pCsr, /* FTS cursor handle */
120970 Fts3Expr *pExpr, /* Expr to test. May or may not be root. */
120971 int *pRc /* IN/OUT: Error code */
120973 int bHit = 1; /* Return value */
120974 if( *pRc==SQLITE_OK ){
120975 switch( pExpr->eType ){
120976 case FTSQUERY_NEAR:
120977 case FTSQUERY_AND:
120978 bHit = (
120979 fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc)
120980 && fts3EvalTestExpr(pCsr, pExpr->pRight, pRc)
120981 && fts3EvalNearTest(pExpr, pRc)
120984 /* If the NEAR expression does not match any rows, zero the doclist for
120985 ** all phrases involved in the NEAR. This is because the snippet(),
120986 ** offsets() and matchinfo() functions are not supposed to recognize
120987 ** any instances of phrases that are part of unmatched NEAR queries.
120988 ** For example if this expression:
120990 ** ... MATCH 'a OR (b NEAR c)'
120992 ** is matched against a row containing:
120994 ** 'a b d e'
120996 ** then any snippet() should ony highlight the "a" term, not the "b"
120997 ** (as "b" is part of a non-matching NEAR clause).
120999 if( bHit==0
121000 && pExpr->eType==FTSQUERY_NEAR
121001 && (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
121003 Fts3Expr *p;
121004 for(p=pExpr; p->pPhrase==0; p=p->pLeft){
121005 if( p->pRight->iDocid==pCsr->iPrevId ){
121006 fts3EvalInvalidatePoslist(p->pRight->pPhrase);
121009 if( p->iDocid==pCsr->iPrevId ){
121010 fts3EvalInvalidatePoslist(p->pPhrase);
121014 break;
121016 case FTSQUERY_OR: {
121017 int bHit1 = fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc);
121018 int bHit2 = fts3EvalTestExpr(pCsr, pExpr->pRight, pRc);
121019 bHit = bHit1 || bHit2;
121020 break;
121023 case FTSQUERY_NOT:
121024 bHit = (
121025 fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc)
121026 && !fts3EvalTestExpr(pCsr, pExpr->pRight, pRc)
121028 break;
121030 default: {
121031 if( pCsr->pDeferred
121032 && (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred)
121034 Fts3Phrase *pPhrase = pExpr->pPhrase;
121035 assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 );
121036 if( pExpr->bDeferred ){
121037 fts3EvalInvalidatePoslist(pPhrase);
121039 *pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
121040 bHit = (pPhrase->doclist.pList!=0);
121041 pExpr->iDocid = pCsr->iPrevId;
121042 }else{
121043 bHit = (pExpr->bEof==0 && pExpr->iDocid==pCsr->iPrevId);
121045 break;
121049 return bHit;
121053 ** This function is called as the second part of each xNext operation when
121054 ** iterating through the results of a full-text query. At this point the
121055 ** cursor points to a row that matches the query expression, with the
121056 ** following caveats:
121058 ** * Up until this point, "NEAR" operators in the expression have been
121059 ** treated as "AND".
121061 ** * Deferred tokens have not yet been considered.
121063 ** If *pRc is not SQLITE_OK when this function is called, it immediately
121064 ** returns 0. Otherwise, it tests whether or not after considering NEAR
121065 ** operators and deferred tokens the current row is still a match for the
121066 ** expression. It returns 1 if both of the following are true:
121068 ** 1. *pRc is SQLITE_OK when this function returns, and
121070 ** 2. After scanning the current FTS table row for the deferred tokens,
121071 ** it is determined that the row does *not* match the query.
121073 ** Or, if no error occurs and it seems the current row does match the FTS
121074 ** query, return 0.
121076 static int fts3EvalTestDeferredAndNear(Fts3Cursor *pCsr, int *pRc){
121077 int rc = *pRc;
121078 int bMiss = 0;
121079 if( rc==SQLITE_OK ){
121081 /* If there are one or more deferred tokens, load the current row into
121082 ** memory and scan it to determine the position list for each deferred
121083 ** token. Then, see if this row is really a match, considering deferred
121084 ** tokens and NEAR operators (neither of which were taken into account
121085 ** earlier, by fts3EvalNextRow()).
121087 if( pCsr->pDeferred ){
121088 rc = fts3CursorSeek(0, pCsr);
121089 if( rc==SQLITE_OK ){
121090 rc = sqlite3Fts3CacheDeferredDoclists(pCsr);
121093 bMiss = (0==fts3EvalTestExpr(pCsr, pCsr->pExpr, &rc));
121095 /* Free the position-lists accumulated for each deferred token above. */
121096 sqlite3Fts3FreeDeferredDoclists(pCsr);
121097 *pRc = rc;
121099 return (rc==SQLITE_OK && bMiss);
121103 ** Advance to the next document that matches the FTS expression in
121104 ** Fts3Cursor.pExpr.
121106 static int fts3EvalNext(Fts3Cursor *pCsr){
121107 int rc = SQLITE_OK; /* Return Code */
121108 Fts3Expr *pExpr = pCsr->pExpr;
121109 assert( pCsr->isEof==0 );
121110 if( pExpr==0 ){
121111 pCsr->isEof = 1;
121112 }else{
121114 if( pCsr->isRequireSeek==0 ){
121115 sqlite3_reset(pCsr->pStmt);
121117 assert( sqlite3_data_count(pCsr->pStmt)==0 );
121118 fts3EvalNextRow(pCsr, pExpr, &rc);
121119 pCsr->isEof = pExpr->bEof;
121120 pCsr->isRequireSeek = 1;
121121 pCsr->isMatchinfoNeeded = 1;
121122 pCsr->iPrevId = pExpr->iDocid;
121123 }while( pCsr->isEof==0 && fts3EvalTestDeferredAndNear(pCsr, &rc) );
121125 return rc;
121129 ** Restart interation for expression pExpr so that the next call to
121130 ** fts3EvalNext() visits the first row. Do not allow incremental
121131 ** loading or merging of phrase doclists for this iteration.
121133 ** If *pRc is other than SQLITE_OK when this function is called, it is
121134 ** a no-op. If an error occurs within this function, *pRc is set to an
121135 ** SQLite error code before returning.
121137 static void fts3EvalRestart(
121138 Fts3Cursor *pCsr,
121139 Fts3Expr *pExpr,
121140 int *pRc
121142 if( pExpr && *pRc==SQLITE_OK ){
121143 Fts3Phrase *pPhrase = pExpr->pPhrase;
121145 if( pPhrase ){
121146 fts3EvalInvalidatePoslist(pPhrase);
121147 if( pPhrase->bIncr ){
121148 assert( pPhrase->nToken==1 );
121149 assert( pPhrase->aToken[0].pSegcsr );
121150 sqlite3Fts3MsrIncrRestart(pPhrase->aToken[0].pSegcsr);
121151 *pRc = fts3EvalPhraseStart(pCsr, 0, pPhrase);
121154 pPhrase->doclist.pNextDocid = 0;
121155 pPhrase->doclist.iDocid = 0;
121158 pExpr->iDocid = 0;
121159 pExpr->bEof = 0;
121160 pExpr->bStart = 0;
121162 fts3EvalRestart(pCsr, pExpr->pLeft, pRc);
121163 fts3EvalRestart(pCsr, pExpr->pRight, pRc);
121168 ** After allocating the Fts3Expr.aMI[] array for each phrase in the
121169 ** expression rooted at pExpr, the cursor iterates through all rows matched
121170 ** by pExpr, calling this function for each row. This function increments
121171 ** the values in Fts3Expr.aMI[] according to the position-list currently
121172 ** found in Fts3Expr.pPhrase->doclist.pList for each of the phrase
121173 ** expression nodes.
121175 static void fts3EvalUpdateCounts(Fts3Expr *pExpr){
121176 if( pExpr ){
121177 Fts3Phrase *pPhrase = pExpr->pPhrase;
121178 if( pPhrase && pPhrase->doclist.pList ){
121179 int iCol = 0;
121180 char *p = pPhrase->doclist.pList;
121182 assert( *p );
121183 while( 1 ){
121184 u8 c = 0;
121185 int iCnt = 0;
121186 while( 0xFE & (*p | c) ){
121187 if( (c&0x80)==0 ) iCnt++;
121188 c = *p++ & 0x80;
121191 /* aMI[iCol*3 + 1] = Number of occurrences
121192 ** aMI[iCol*3 + 2] = Number of rows containing at least one instance
121194 pExpr->aMI[iCol*3 + 1] += iCnt;
121195 pExpr->aMI[iCol*3 + 2] += (iCnt>0);
121196 if( *p==0x00 ) break;
121198 p += sqlite3Fts3GetVarint32(p, &iCol);
121202 fts3EvalUpdateCounts(pExpr->pLeft);
121203 fts3EvalUpdateCounts(pExpr->pRight);
121208 ** Expression pExpr must be of type FTSQUERY_PHRASE.
121210 ** If it is not already allocated and populated, this function allocates and
121211 ** populates the Fts3Expr.aMI[] array for expression pExpr. If pExpr is part
121212 ** of a NEAR expression, then it also allocates and populates the same array
121213 ** for all other phrases that are part of the NEAR expression.
121215 ** SQLITE_OK is returned if the aMI[] array is successfully allocated and
121216 ** populated. Otherwise, if an error occurs, an SQLite error code is returned.
121218 static int fts3EvalGatherStats(
121219 Fts3Cursor *pCsr, /* Cursor object */
121220 Fts3Expr *pExpr /* FTSQUERY_PHRASE expression */
121222 int rc = SQLITE_OK; /* Return code */
121224 assert( pExpr->eType==FTSQUERY_PHRASE );
121225 if( pExpr->aMI==0 ){
121226 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
121227 Fts3Expr *pRoot; /* Root of NEAR expression */
121228 Fts3Expr *p; /* Iterator used for several purposes */
121230 sqlite3_int64 iPrevId = pCsr->iPrevId;
121231 sqlite3_int64 iDocid;
121232 u8 bEof;
121234 /* Find the root of the NEAR expression */
121235 pRoot = pExpr;
121236 while( pRoot->pParent && pRoot->pParent->eType==FTSQUERY_NEAR ){
121237 pRoot = pRoot->pParent;
121239 iDocid = pRoot->iDocid;
121240 bEof = pRoot->bEof;
121241 assert( pRoot->bStart );
121243 /* Allocate space for the aMSI[] array of each FTSQUERY_PHRASE node */
121244 for(p=pRoot; p; p=p->pLeft){
121245 Fts3Expr *pE = (p->eType==FTSQUERY_PHRASE?p:p->pRight);
121246 assert( pE->aMI==0 );
121247 pE->aMI = (u32 *)sqlite3_malloc(pTab->nColumn * 3 * sizeof(u32));
121248 if( !pE->aMI ) return SQLITE_NOMEM;
121249 memset(pE->aMI, 0, pTab->nColumn * 3 * sizeof(u32));
121252 fts3EvalRestart(pCsr, pRoot, &rc);
121254 while( pCsr->isEof==0 && rc==SQLITE_OK ){
121257 /* Ensure the %_content statement is reset. */
121258 if( pCsr->isRequireSeek==0 ) sqlite3_reset(pCsr->pStmt);
121259 assert( sqlite3_data_count(pCsr->pStmt)==0 );
121261 /* Advance to the next document */
121262 fts3EvalNextRow(pCsr, pRoot, &rc);
121263 pCsr->isEof = pRoot->bEof;
121264 pCsr->isRequireSeek = 1;
121265 pCsr->isMatchinfoNeeded = 1;
121266 pCsr->iPrevId = pRoot->iDocid;
121267 }while( pCsr->isEof==0
121268 && pRoot->eType==FTSQUERY_NEAR
121269 && fts3EvalTestDeferredAndNear(pCsr, &rc)
121272 if( rc==SQLITE_OK && pCsr->isEof==0 ){
121273 fts3EvalUpdateCounts(pRoot);
121277 pCsr->isEof = 0;
121278 pCsr->iPrevId = iPrevId;
121280 if( bEof ){
121281 pRoot->bEof = bEof;
121282 }else{
121283 /* Caution: pRoot may iterate through docids in ascending or descending
121284 ** order. For this reason, even though it seems more defensive, the
121285 ** do loop can not be written:
121287 ** do {...} while( pRoot->iDocid<iDocid && rc==SQLITE_OK );
121289 fts3EvalRestart(pCsr, pRoot, &rc);
121291 fts3EvalNextRow(pCsr, pRoot, &rc);
121292 assert( pRoot->bEof==0 );
121293 }while( pRoot->iDocid!=iDocid && rc==SQLITE_OK );
121294 fts3EvalTestDeferredAndNear(pCsr, &rc);
121297 return rc;
121301 ** This function is used by the matchinfo() module to query a phrase
121302 ** expression node for the following information:
121304 ** 1. The total number of occurrences of the phrase in each column of
121305 ** the FTS table (considering all rows), and
121307 ** 2. For each column, the number of rows in the table for which the
121308 ** column contains at least one instance of the phrase.
121310 ** If no error occurs, SQLITE_OK is returned and the values for each column
121311 ** written into the array aiOut as follows:
121313 ** aiOut[iCol*3 + 1] = Number of occurrences
121314 ** aiOut[iCol*3 + 2] = Number of rows containing at least one instance
121316 ** Caveats:
121318 ** * If a phrase consists entirely of deferred tokens, then all output
121319 ** values are set to the number of documents in the table. In other
121320 ** words we assume that very common tokens occur exactly once in each
121321 ** column of each row of the table.
121323 ** * If a phrase contains some deferred tokens (and some non-deferred
121324 ** tokens), count the potential occurrence identified by considering
121325 ** the non-deferred tokens instead of actual phrase occurrences.
121327 ** * If the phrase is part of a NEAR expression, then only phrase instances
121328 ** that meet the NEAR constraint are included in the counts.
121330 SQLITE_PRIVATE int sqlite3Fts3EvalPhraseStats(
121331 Fts3Cursor *pCsr, /* FTS cursor handle */
121332 Fts3Expr *pExpr, /* Phrase expression */
121333 u32 *aiOut /* Array to write results into (see above) */
121335 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
121336 int rc = SQLITE_OK;
121337 int iCol;
121339 if( pExpr->bDeferred && pExpr->pParent->eType!=FTSQUERY_NEAR ){
121340 assert( pCsr->nDoc>0 );
121341 for(iCol=0; iCol<pTab->nColumn; iCol++){
121342 aiOut[iCol*3 + 1] = (u32)pCsr->nDoc;
121343 aiOut[iCol*3 + 2] = (u32)pCsr->nDoc;
121345 }else{
121346 rc = fts3EvalGatherStats(pCsr, pExpr);
121347 if( rc==SQLITE_OK ){
121348 assert( pExpr->aMI );
121349 for(iCol=0; iCol<pTab->nColumn; iCol++){
121350 aiOut[iCol*3 + 1] = pExpr->aMI[iCol*3 + 1];
121351 aiOut[iCol*3 + 2] = pExpr->aMI[iCol*3 + 2];
121356 return rc;
121360 ** The expression pExpr passed as the second argument to this function
121361 ** must be of type FTSQUERY_PHRASE.
121363 ** The returned value is either NULL or a pointer to a buffer containing
121364 ** a position-list indicating the occurrences of the phrase in column iCol
121365 ** of the current row.
121367 ** More specifically, the returned buffer contains 1 varint for each
121368 ** occurence of the phrase in the column, stored using the normal (delta+2)
121369 ** compression and is terminated by either an 0x01 or 0x00 byte. For example,
121370 ** if the requested column contains "a b X c d X X" and the position-list
121371 ** for 'X' is requested, the buffer returned may contain:
121373 ** 0x04 0x05 0x03 0x01 or 0x04 0x05 0x03 0x00
121375 ** This function works regardless of whether or not the phrase is deferred,
121376 ** incremental, or neither.
121378 SQLITE_PRIVATE char *sqlite3Fts3EvalPhrasePoslist(
121379 Fts3Cursor *pCsr, /* FTS3 cursor object */
121380 Fts3Expr *pExpr, /* Phrase to return doclist for */
121381 int iCol /* Column to return position list for */
121383 Fts3Phrase *pPhrase = pExpr->pPhrase;
121384 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
121385 char *pIter = pPhrase->doclist.pList;
121386 int iThis;
121388 assert( iCol>=0 && iCol<pTab->nColumn );
121389 if( !pIter
121390 || pExpr->bEof
121391 || pExpr->iDocid!=pCsr->iPrevId
121392 || (pPhrase->iColumn<pTab->nColumn && pPhrase->iColumn!=iCol)
121394 return 0;
121397 assert( pPhrase->doclist.nList>0 );
121398 if( *pIter==0x01 ){
121399 pIter++;
121400 pIter += sqlite3Fts3GetVarint32(pIter, &iThis);
121401 }else{
121402 iThis = 0;
121404 while( iThis<iCol ){
121405 fts3ColumnlistCopy(0, &pIter);
121406 if( *pIter==0x00 ) return 0;
121407 pIter++;
121408 pIter += sqlite3Fts3GetVarint32(pIter, &iThis);
121411 return ((iCol==iThis)?pIter:0);
121415 ** Free all components of the Fts3Phrase structure that were allocated by
121416 ** the eval module. Specifically, this means to free:
121418 ** * the contents of pPhrase->doclist, and
121419 ** * any Fts3MultiSegReader objects held by phrase tokens.
121421 SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){
121422 if( pPhrase ){
121423 int i;
121424 sqlite3_free(pPhrase->doclist.aAll);
121425 fts3EvalInvalidatePoslist(pPhrase);
121426 memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist));
121427 for(i=0; i<pPhrase->nToken; i++){
121428 fts3SegReaderCursorFree(pPhrase->aToken[i].pSegcsr);
121429 pPhrase->aToken[i].pSegcsr = 0;
121435 ** Return SQLITE_CORRUPT_VTAB.
121437 #ifdef SQLITE_DEBUG
121438 SQLITE_PRIVATE int sqlite3Fts3Corrupt(){
121439 return SQLITE_CORRUPT_VTAB;
121441 #endif
121443 #if !SQLITE_CORE
121445 ** Initialize API pointer table, if required.
121447 SQLITE_API int sqlite3_extension_init(
121448 sqlite3 *db,
121449 char **pzErrMsg,
121450 const sqlite3_api_routines *pApi
121452 SQLITE_EXTENSION_INIT2(pApi)
121453 return sqlite3Fts3Init(db);
121455 #endif
121457 #endif
121459 /************** End of fts3.c ************************************************/
121460 /************** Begin file fts3_aux.c ****************************************/
121462 ** 2011 Jan 27
121464 ** The author disclaims copyright to this source code. In place of
121465 ** a legal notice, here is a blessing:
121467 ** May you do good and not evil.
121468 ** May you find forgiveness for yourself and forgive others.
121469 ** May you share freely, never taking more than you give.
121471 ******************************************************************************
121474 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
121476 /* #include <string.h> */
121477 /* #include <assert.h> */
121479 typedef struct Fts3auxTable Fts3auxTable;
121480 typedef struct Fts3auxCursor Fts3auxCursor;
121482 struct Fts3auxTable {
121483 sqlite3_vtab base; /* Base class used by SQLite core */
121484 Fts3Table *pFts3Tab;
121487 struct Fts3auxCursor {
121488 sqlite3_vtab_cursor base; /* Base class used by SQLite core */
121489 Fts3MultiSegReader csr; /* Must be right after "base" */
121490 Fts3SegFilter filter;
121491 char *zStop;
121492 int nStop; /* Byte-length of string zStop */
121493 int isEof; /* True if cursor is at EOF */
121494 sqlite3_int64 iRowid; /* Current rowid */
121496 int iCol; /* Current value of 'col' column */
121497 int nStat; /* Size of aStat[] array */
121498 struct Fts3auxColstats {
121499 sqlite3_int64 nDoc; /* 'documents' values for current csr row */
121500 sqlite3_int64 nOcc; /* 'occurrences' values for current csr row */
121501 } *aStat;
121505 ** Schema of the terms table.
121507 #define FTS3_TERMS_SCHEMA "CREATE TABLE x(term, col, documents, occurrences)"
121510 ** This function does all the work for both the xConnect and xCreate methods.
121511 ** These tables have no persistent representation of their own, so xConnect
121512 ** and xCreate are identical operations.
121514 static int fts3auxConnectMethod(
121515 sqlite3 *db, /* Database connection */
121516 void *pUnused, /* Unused */
121517 int argc, /* Number of elements in argv array */
121518 const char * const *argv, /* xCreate/xConnect argument array */
121519 sqlite3_vtab **ppVtab, /* OUT: New sqlite3_vtab object */
121520 char **pzErr /* OUT: sqlite3_malloc'd error message */
121522 char const *zDb; /* Name of database (e.g. "main") */
121523 char const *zFts3; /* Name of fts3 table */
121524 int nDb; /* Result of strlen(zDb) */
121525 int nFts3; /* Result of strlen(zFts3) */
121526 int nByte; /* Bytes of space to allocate here */
121527 int rc; /* value returned by declare_vtab() */
121528 Fts3auxTable *p; /* Virtual table object to return */
121530 UNUSED_PARAMETER(pUnused);
121532 /* The user should specify a single argument - the name of an fts3 table. */
121533 if( argc!=4 ){
121534 *pzErr = sqlite3_mprintf(
121535 "wrong number of arguments to fts4aux constructor"
121537 return SQLITE_ERROR;
121540 zDb = argv[1];
121541 nDb = strlen(zDb);
121542 zFts3 = argv[3];
121543 nFts3 = strlen(zFts3);
121545 rc = sqlite3_declare_vtab(db, FTS3_TERMS_SCHEMA);
121546 if( rc!=SQLITE_OK ) return rc;
121548 nByte = sizeof(Fts3auxTable) + sizeof(Fts3Table) + nDb + nFts3 + 2;
121549 p = (Fts3auxTable *)sqlite3_malloc(nByte);
121550 if( !p ) return SQLITE_NOMEM;
121551 memset(p, 0, nByte);
121553 p->pFts3Tab = (Fts3Table *)&p[1];
121554 p->pFts3Tab->zDb = (char *)&p->pFts3Tab[1];
121555 p->pFts3Tab->zName = &p->pFts3Tab->zDb[nDb+1];
121556 p->pFts3Tab->db = db;
121557 p->pFts3Tab->nIndex = 1;
121559 memcpy((char *)p->pFts3Tab->zDb, zDb, nDb);
121560 memcpy((char *)p->pFts3Tab->zName, zFts3, nFts3);
121561 sqlite3Fts3Dequote((char *)p->pFts3Tab->zName);
121563 *ppVtab = (sqlite3_vtab *)p;
121564 return SQLITE_OK;
121568 ** This function does the work for both the xDisconnect and xDestroy methods.
121569 ** These tables have no persistent representation of their own, so xDisconnect
121570 ** and xDestroy are identical operations.
121572 static int fts3auxDisconnectMethod(sqlite3_vtab *pVtab){
121573 Fts3auxTable *p = (Fts3auxTable *)pVtab;
121574 Fts3Table *pFts3 = p->pFts3Tab;
121575 int i;
121577 /* Free any prepared statements held */
121578 for(i=0; i<SizeofArray(pFts3->aStmt); i++){
121579 sqlite3_finalize(pFts3->aStmt[i]);
121581 sqlite3_free(pFts3->zSegmentsTbl);
121582 sqlite3_free(p);
121583 return SQLITE_OK;
121586 #define FTS4AUX_EQ_CONSTRAINT 1
121587 #define FTS4AUX_GE_CONSTRAINT 2
121588 #define FTS4AUX_LE_CONSTRAINT 4
121591 ** xBestIndex - Analyze a WHERE and ORDER BY clause.
121593 static int fts3auxBestIndexMethod(
121594 sqlite3_vtab *pVTab,
121595 sqlite3_index_info *pInfo
121597 int i;
121598 int iEq = -1;
121599 int iGe = -1;
121600 int iLe = -1;
121602 UNUSED_PARAMETER(pVTab);
121604 /* This vtab delivers always results in "ORDER BY term ASC" order. */
121605 if( pInfo->nOrderBy==1
121606 && pInfo->aOrderBy[0].iColumn==0
121607 && pInfo->aOrderBy[0].desc==0
121609 pInfo->orderByConsumed = 1;
121612 /* Search for equality and range constraints on the "term" column. */
121613 for(i=0; i<pInfo->nConstraint; i++){
121614 if( pInfo->aConstraint[i].usable && pInfo->aConstraint[i].iColumn==0 ){
121615 int op = pInfo->aConstraint[i].op;
121616 if( op==SQLITE_INDEX_CONSTRAINT_EQ ) iEq = i;
121617 if( op==SQLITE_INDEX_CONSTRAINT_LT ) iLe = i;
121618 if( op==SQLITE_INDEX_CONSTRAINT_LE ) iLe = i;
121619 if( op==SQLITE_INDEX_CONSTRAINT_GT ) iGe = i;
121620 if( op==SQLITE_INDEX_CONSTRAINT_GE ) iGe = i;
121624 if( iEq>=0 ){
121625 pInfo->idxNum = FTS4AUX_EQ_CONSTRAINT;
121626 pInfo->aConstraintUsage[iEq].argvIndex = 1;
121627 pInfo->estimatedCost = 5;
121628 }else{
121629 pInfo->idxNum = 0;
121630 pInfo->estimatedCost = 20000;
121631 if( iGe>=0 ){
121632 pInfo->idxNum += FTS4AUX_GE_CONSTRAINT;
121633 pInfo->aConstraintUsage[iGe].argvIndex = 1;
121634 pInfo->estimatedCost /= 2;
121636 if( iLe>=0 ){
121637 pInfo->idxNum += FTS4AUX_LE_CONSTRAINT;
121638 pInfo->aConstraintUsage[iLe].argvIndex = 1 + (iGe>=0);
121639 pInfo->estimatedCost /= 2;
121643 return SQLITE_OK;
121647 ** xOpen - Open a cursor.
121649 static int fts3auxOpenMethod(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCsr){
121650 Fts3auxCursor *pCsr; /* Pointer to cursor object to return */
121652 UNUSED_PARAMETER(pVTab);
121654 pCsr = (Fts3auxCursor *)sqlite3_malloc(sizeof(Fts3auxCursor));
121655 if( !pCsr ) return SQLITE_NOMEM;
121656 memset(pCsr, 0, sizeof(Fts3auxCursor));
121658 *ppCsr = (sqlite3_vtab_cursor *)pCsr;
121659 return SQLITE_OK;
121663 ** xClose - Close a cursor.
121665 static int fts3auxCloseMethod(sqlite3_vtab_cursor *pCursor){
121666 Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
121667 Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121669 sqlite3Fts3SegmentsClose(pFts3);
121670 sqlite3Fts3SegReaderFinish(&pCsr->csr);
121671 sqlite3_free((void *)pCsr->filter.zTerm);
121672 sqlite3_free(pCsr->zStop);
121673 sqlite3_free(pCsr->aStat);
121674 sqlite3_free(pCsr);
121675 return SQLITE_OK;
121678 static int fts3auxGrowStatArray(Fts3auxCursor *pCsr, int nSize){
121679 if( nSize>pCsr->nStat ){
121680 struct Fts3auxColstats *aNew;
121681 aNew = (struct Fts3auxColstats *)sqlite3_realloc(pCsr->aStat,
121682 sizeof(struct Fts3auxColstats) * nSize
121684 if( aNew==0 ) return SQLITE_NOMEM;
121685 memset(&aNew[pCsr->nStat], 0,
121686 sizeof(struct Fts3auxColstats) * (nSize - pCsr->nStat)
121688 pCsr->aStat = aNew;
121689 pCsr->nStat = nSize;
121691 return SQLITE_OK;
121695 ** xNext - Advance the cursor to the next row, if any.
121697 static int fts3auxNextMethod(sqlite3_vtab_cursor *pCursor){
121698 Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121699 Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
121700 int rc;
121702 /* Increment our pretend rowid value. */
121703 pCsr->iRowid++;
121705 for(pCsr->iCol++; pCsr->iCol<pCsr->nStat; pCsr->iCol++){
121706 if( pCsr->aStat[pCsr->iCol].nDoc>0 ) return SQLITE_OK;
121709 rc = sqlite3Fts3SegReaderStep(pFts3, &pCsr->csr);
121710 if( rc==SQLITE_ROW ){
121711 int i = 0;
121712 int nDoclist = pCsr->csr.nDoclist;
121713 char *aDoclist = pCsr->csr.aDoclist;
121714 int iCol;
121716 int eState = 0;
121718 if( pCsr->zStop ){
121719 int n = (pCsr->nStop<pCsr->csr.nTerm) ? pCsr->nStop : pCsr->csr.nTerm;
121720 int mc = memcmp(pCsr->zStop, pCsr->csr.zTerm, n);
121721 if( mc<0 || (mc==0 && pCsr->csr.nTerm>pCsr->nStop) ){
121722 pCsr->isEof = 1;
121723 return SQLITE_OK;
121727 if( fts3auxGrowStatArray(pCsr, 2) ) return SQLITE_NOMEM;
121728 memset(pCsr->aStat, 0, sizeof(struct Fts3auxColstats) * pCsr->nStat);
121729 iCol = 0;
121731 while( i<nDoclist ){
121732 sqlite3_int64 v = 0;
121734 i += sqlite3Fts3GetVarint(&aDoclist[i], &v);
121735 switch( eState ){
121736 /* State 0. In this state the integer just read was a docid. */
121737 case 0:
121738 pCsr->aStat[0].nDoc++;
121739 eState = 1;
121740 iCol = 0;
121741 break;
121743 /* State 1. In this state we are expecting either a 1, indicating
121744 ** that the following integer will be a column number, or the
121745 ** start of a position list for column 0.
121747 ** The only difference between state 1 and state 2 is that if the
121748 ** integer encountered in state 1 is not 0 or 1, then we need to
121749 ** increment the column 0 "nDoc" count for this term.
121751 case 1:
121752 assert( iCol==0 );
121753 if( v>1 ){
121754 pCsr->aStat[1].nDoc++;
121756 eState = 2;
121757 /* fall through */
121759 case 2:
121760 if( v==0 ){ /* 0x00. Next integer will be a docid. */
121761 eState = 0;
121762 }else if( v==1 ){ /* 0x01. Next integer will be a column number. */
121763 eState = 3;
121764 }else{ /* 2 or greater. A position. */
121765 pCsr->aStat[iCol+1].nOcc++;
121766 pCsr->aStat[0].nOcc++;
121768 break;
121770 /* State 3. The integer just read is a column number. */
121771 default: assert( eState==3 );
121772 iCol = (int)v;
121773 if( fts3auxGrowStatArray(pCsr, iCol+2) ) return SQLITE_NOMEM;
121774 pCsr->aStat[iCol+1].nDoc++;
121775 eState = 2;
121776 break;
121780 pCsr->iCol = 0;
121781 rc = SQLITE_OK;
121782 }else{
121783 pCsr->isEof = 1;
121785 return rc;
121789 ** xFilter - Initialize a cursor to point at the start of its data.
121791 static int fts3auxFilterMethod(
121792 sqlite3_vtab_cursor *pCursor, /* The cursor used for this query */
121793 int idxNum, /* Strategy index */
121794 const char *idxStr, /* Unused */
121795 int nVal, /* Number of elements in apVal */
121796 sqlite3_value **apVal /* Arguments for the indexing scheme */
121798 Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121799 Fts3Table *pFts3 = ((Fts3auxTable *)pCursor->pVtab)->pFts3Tab;
121800 int rc;
121801 int isScan;
121803 UNUSED_PARAMETER(nVal);
121804 UNUSED_PARAMETER(idxStr);
121806 assert( idxStr==0 );
121807 assert( idxNum==FTS4AUX_EQ_CONSTRAINT || idxNum==0
121808 || idxNum==FTS4AUX_LE_CONSTRAINT || idxNum==FTS4AUX_GE_CONSTRAINT
121809 || idxNum==(FTS4AUX_LE_CONSTRAINT|FTS4AUX_GE_CONSTRAINT)
121811 isScan = (idxNum!=FTS4AUX_EQ_CONSTRAINT);
121813 /* In case this cursor is being reused, close and zero it. */
121814 testcase(pCsr->filter.zTerm);
121815 sqlite3Fts3SegReaderFinish(&pCsr->csr);
121816 sqlite3_free((void *)pCsr->filter.zTerm);
121817 sqlite3_free(pCsr->aStat);
121818 memset(&pCsr->csr, 0, ((u8*)&pCsr[1]) - (u8*)&pCsr->csr);
121820 pCsr->filter.flags = FTS3_SEGMENT_REQUIRE_POS|FTS3_SEGMENT_IGNORE_EMPTY;
121821 if( isScan ) pCsr->filter.flags |= FTS3_SEGMENT_SCAN;
121823 if( idxNum&(FTS4AUX_EQ_CONSTRAINT|FTS4AUX_GE_CONSTRAINT) ){
121824 const unsigned char *zStr = sqlite3_value_text(apVal[0]);
121825 if( zStr ){
121826 pCsr->filter.zTerm = sqlite3_mprintf("%s", zStr);
121827 pCsr->filter.nTerm = sqlite3_value_bytes(apVal[0]);
121828 if( pCsr->filter.zTerm==0 ) return SQLITE_NOMEM;
121831 if( idxNum&FTS4AUX_LE_CONSTRAINT ){
121832 int iIdx = (idxNum&FTS4AUX_GE_CONSTRAINT) ? 1 : 0;
121833 pCsr->zStop = sqlite3_mprintf("%s", sqlite3_value_text(apVal[iIdx]));
121834 pCsr->nStop = sqlite3_value_bytes(apVal[iIdx]);
121835 if( pCsr->zStop==0 ) return SQLITE_NOMEM;
121838 rc = sqlite3Fts3SegReaderCursor(pFts3, 0, FTS3_SEGCURSOR_ALL,
121839 pCsr->filter.zTerm, pCsr->filter.nTerm, 0, isScan, &pCsr->csr
121841 if( rc==SQLITE_OK ){
121842 rc = sqlite3Fts3SegReaderStart(pFts3, &pCsr->csr, &pCsr->filter);
121845 if( rc==SQLITE_OK ) rc = fts3auxNextMethod(pCursor);
121846 return rc;
121850 ** xEof - Return true if the cursor is at EOF, or false otherwise.
121852 static int fts3auxEofMethod(sqlite3_vtab_cursor *pCursor){
121853 Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121854 return pCsr->isEof;
121858 ** xColumn - Return a column value.
121860 static int fts3auxColumnMethod(
121861 sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */
121862 sqlite3_context *pContext, /* Context for sqlite3_result_xxx() calls */
121863 int iCol /* Index of column to read value from */
121865 Fts3auxCursor *p = (Fts3auxCursor *)pCursor;
121867 assert( p->isEof==0 );
121868 if( iCol==0 ){ /* Column "term" */
121869 sqlite3_result_text(pContext, p->csr.zTerm, p->csr.nTerm, SQLITE_TRANSIENT);
121870 }else if( iCol==1 ){ /* Column "col" */
121871 if( p->iCol ){
121872 sqlite3_result_int(pContext, p->iCol-1);
121873 }else{
121874 sqlite3_result_text(pContext, "*", -1, SQLITE_STATIC);
121876 }else if( iCol==2 ){ /* Column "documents" */
121877 sqlite3_result_int64(pContext, p->aStat[p->iCol].nDoc);
121878 }else{ /* Column "occurrences" */
121879 sqlite3_result_int64(pContext, p->aStat[p->iCol].nOcc);
121882 return SQLITE_OK;
121886 ** xRowid - Return the current rowid for the cursor.
121888 static int fts3auxRowidMethod(
121889 sqlite3_vtab_cursor *pCursor, /* Cursor to retrieve value from */
121890 sqlite_int64 *pRowid /* OUT: Rowid value */
121892 Fts3auxCursor *pCsr = (Fts3auxCursor *)pCursor;
121893 *pRowid = pCsr->iRowid;
121894 return SQLITE_OK;
121898 ** Register the fts3aux module with database connection db. Return SQLITE_OK
121899 ** if successful or an error code if sqlite3_create_module() fails.
121901 SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db){
121902 static const sqlite3_module fts3aux_module = {
121903 0, /* iVersion */
121904 fts3auxConnectMethod, /* xCreate */
121905 fts3auxConnectMethod, /* xConnect */
121906 fts3auxBestIndexMethod, /* xBestIndex */
121907 fts3auxDisconnectMethod, /* xDisconnect */
121908 fts3auxDisconnectMethod, /* xDestroy */
121909 fts3auxOpenMethod, /* xOpen */
121910 fts3auxCloseMethod, /* xClose */
121911 fts3auxFilterMethod, /* xFilter */
121912 fts3auxNextMethod, /* xNext */
121913 fts3auxEofMethod, /* xEof */
121914 fts3auxColumnMethod, /* xColumn */
121915 fts3auxRowidMethod, /* xRowid */
121916 0, /* xUpdate */
121917 0, /* xBegin */
121918 0, /* xSync */
121919 0, /* xCommit */
121920 0, /* xRollback */
121921 0, /* xFindFunction */
121922 0, /* xRename */
121923 0, /* xSavepoint */
121924 0, /* xRelease */
121925 0 /* xRollbackTo */
121927 int rc; /* Return code */
121929 rc = sqlite3_create_module(db, "fts4aux", &fts3aux_module, 0);
121930 return rc;
121933 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
121935 /************** End of fts3_aux.c ********************************************/
121936 /************** Begin file fts3_expr.c ***************************************/
121938 ** 2008 Nov 28
121940 ** The author disclaims copyright to this source code. In place of
121941 ** a legal notice, here is a blessing:
121943 ** May you do good and not evil.
121944 ** May you find forgiveness for yourself and forgive others.
121945 ** May you share freely, never taking more than you give.
121947 ******************************************************************************
121949 ** This module contains code that implements a parser for fts3 query strings
121950 ** (the right-hand argument to the MATCH operator). Because the supported
121951 ** syntax is relatively simple, the whole tokenizer/parser system is
121952 ** hand-coded.
121954 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
121957 ** By default, this module parses the legacy syntax that has been
121958 ** traditionally used by fts3. Or, if SQLITE_ENABLE_FTS3_PARENTHESIS
121959 ** is defined, then it uses the new syntax. The differences between
121960 ** the new and the old syntaxes are:
121962 ** a) The new syntax supports parenthesis. The old does not.
121964 ** b) The new syntax supports the AND and NOT operators. The old does not.
121966 ** c) The old syntax supports the "-" token qualifier. This is not
121967 ** supported by the new syntax (it is replaced by the NOT operator).
121969 ** d) When using the old syntax, the OR operator has a greater precedence
121970 ** than an implicit AND. When using the new, both implicity and explicit
121971 ** AND operators have a higher precedence than OR.
121973 ** If compiled with SQLITE_TEST defined, then this module exports the
121974 ** symbol "int sqlite3_fts3_enable_parentheses". Setting this variable
121975 ** to zero causes the module to use the old syntax. If it is set to
121976 ** non-zero the new syntax is activated. This is so both syntaxes can
121977 ** be tested using a single build of testfixture.
121979 ** The following describes the syntax supported by the fts3 MATCH
121980 ** operator in a similar format to that used by the lemon parser
121981 ** generator. This module does not use actually lemon, it uses a
121982 ** custom parser.
121984 ** query ::= andexpr (OR andexpr)*.
121986 ** andexpr ::= notexpr (AND? notexpr)*.
121988 ** notexpr ::= nearexpr (NOT nearexpr|-TOKEN)*.
121989 ** notexpr ::= LP query RP.
121991 ** nearexpr ::= phrase (NEAR distance_opt nearexpr)*.
121993 ** distance_opt ::= .
121994 ** distance_opt ::= / INTEGER.
121996 ** phrase ::= TOKEN.
121997 ** phrase ::= COLUMN:TOKEN.
121998 ** phrase ::= "TOKEN TOKEN TOKEN...".
122001 #ifdef SQLITE_TEST
122002 SQLITE_API int sqlite3_fts3_enable_parentheses = 0;
122003 #else
122004 # ifdef SQLITE_ENABLE_FTS3_PARENTHESIS
122005 # define sqlite3_fts3_enable_parentheses 1
122006 # else
122007 # define sqlite3_fts3_enable_parentheses 0
122008 # endif
122009 #endif
122012 ** Default span for NEAR operators.
122014 #define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10
122016 /* #include <string.h> */
122017 /* #include <assert.h> */
122020 ** isNot:
122021 ** This variable is used by function getNextNode(). When getNextNode() is
122022 ** called, it sets ParseContext.isNot to true if the 'next node' is a
122023 ** FTSQUERY_PHRASE with a unary "-" attached to it. i.e. "mysql" in the
122024 ** FTS3 query "sqlite -mysql". Otherwise, ParseContext.isNot is set to
122025 ** zero.
122027 typedef struct ParseContext ParseContext;
122028 struct ParseContext {
122029 sqlite3_tokenizer *pTokenizer; /* Tokenizer module */
122030 const char **azCol; /* Array of column names for fts3 table */
122031 int bFts4; /* True to allow FTS4-only syntax */
122032 int nCol; /* Number of entries in azCol[] */
122033 int iDefaultCol; /* Default column to query */
122034 int isNot; /* True if getNextNode() sees a unary - */
122035 sqlite3_context *pCtx; /* Write error message here */
122036 int nNest; /* Number of nested brackets */
122040 ** This function is equivalent to the standard isspace() function.
122042 ** The standard isspace() can be awkward to use safely, because although it
122043 ** is defined to accept an argument of type int, its behaviour when passed
122044 ** an integer that falls outside of the range of the unsigned char type
122045 ** is undefined (and sometimes, "undefined" means segfault). This wrapper
122046 ** is defined to accept an argument of type char, and always returns 0 for
122047 ** any values that fall outside of the range of the unsigned char type (i.e.
122048 ** negative values).
122050 static int fts3isspace(char c){
122051 return c==' ' || c=='\t' || c=='\n' || c=='\r' || c=='\v' || c=='\f';
122055 ** Allocate nByte bytes of memory using sqlite3_malloc(). If successful,
122056 ** zero the memory before returning a pointer to it. If unsuccessful,
122057 ** return NULL.
122059 static void *fts3MallocZero(int nByte){
122060 void *pRet = sqlite3_malloc(nByte);
122061 if( pRet ) memset(pRet, 0, nByte);
122062 return pRet;
122067 ** Extract the next token from buffer z (length n) using the tokenizer
122068 ** and other information (column names etc.) in pParse. Create an Fts3Expr
122069 ** structure of type FTSQUERY_PHRASE containing a phrase consisting of this
122070 ** single token and set *ppExpr to point to it. If the end of the buffer is
122071 ** reached before a token is found, set *ppExpr to zero. It is the
122072 ** responsibility of the caller to eventually deallocate the allocated
122073 ** Fts3Expr structure (if any) by passing it to sqlite3_free().
122075 ** Return SQLITE_OK if successful, or SQLITE_NOMEM if a memory allocation
122076 ** fails.
122078 static int getNextToken(
122079 ParseContext *pParse, /* fts3 query parse context */
122080 int iCol, /* Value for Fts3Phrase.iColumn */
122081 const char *z, int n, /* Input string */
122082 Fts3Expr **ppExpr, /* OUT: expression */
122083 int *pnConsumed /* OUT: Number of bytes consumed */
122085 sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
122086 sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
122087 int rc;
122088 sqlite3_tokenizer_cursor *pCursor;
122089 Fts3Expr *pRet = 0;
122090 int nConsumed = 0;
122092 rc = pModule->xOpen(pTokenizer, z, n, &pCursor);
122093 if( rc==SQLITE_OK ){
122094 const char *zToken;
122095 int nToken, iStart, iEnd, iPosition;
122096 int nByte; /* total space to allocate */
122098 pCursor->pTokenizer = pTokenizer;
122099 rc = pModule->xNext(pCursor, &zToken, &nToken, &iStart, &iEnd, &iPosition);
122101 if( rc==SQLITE_OK ){
122102 nByte = sizeof(Fts3Expr) + sizeof(Fts3Phrase) + nToken;
122103 pRet = (Fts3Expr *)fts3MallocZero(nByte);
122104 if( !pRet ){
122105 rc = SQLITE_NOMEM;
122106 }else{
122107 pRet->eType = FTSQUERY_PHRASE;
122108 pRet->pPhrase = (Fts3Phrase *)&pRet[1];
122109 pRet->pPhrase->nToken = 1;
122110 pRet->pPhrase->iColumn = iCol;
122111 pRet->pPhrase->aToken[0].n = nToken;
122112 pRet->pPhrase->aToken[0].z = (char *)&pRet->pPhrase[1];
122113 memcpy(pRet->pPhrase->aToken[0].z, zToken, nToken);
122115 if( iEnd<n && z[iEnd]=='*' ){
122116 pRet->pPhrase->aToken[0].isPrefix = 1;
122117 iEnd++;
122120 while( 1 ){
122121 if( !sqlite3_fts3_enable_parentheses
122122 && iStart>0 && z[iStart-1]=='-'
122124 pParse->isNot = 1;
122125 iStart--;
122126 }else if( pParse->bFts4 && iStart>0 && z[iStart-1]=='^' ){
122127 pRet->pPhrase->aToken[0].bFirst = 1;
122128 iStart--;
122129 }else{
122130 break;
122135 nConsumed = iEnd;
122138 pModule->xClose(pCursor);
122141 *pnConsumed = nConsumed;
122142 *ppExpr = pRet;
122143 return rc;
122148 ** Enlarge a memory allocation. If an out-of-memory allocation occurs,
122149 ** then free the old allocation.
122151 static void *fts3ReallocOrFree(void *pOrig, int nNew){
122152 void *pRet = sqlite3_realloc(pOrig, nNew);
122153 if( !pRet ){
122154 sqlite3_free(pOrig);
122156 return pRet;
122160 ** Buffer zInput, length nInput, contains the contents of a quoted string
122161 ** that appeared as part of an fts3 query expression. Neither quote character
122162 ** is included in the buffer. This function attempts to tokenize the entire
122163 ** input buffer and create an Fts3Expr structure of type FTSQUERY_PHRASE
122164 ** containing the results.
122166 ** If successful, SQLITE_OK is returned and *ppExpr set to point at the
122167 ** allocated Fts3Expr structure. Otherwise, either SQLITE_NOMEM (out of memory
122168 ** error) or SQLITE_ERROR (tokenization error) is returned and *ppExpr set
122169 ** to 0.
122171 static int getNextString(
122172 ParseContext *pParse, /* fts3 query parse context */
122173 const char *zInput, int nInput, /* Input string */
122174 Fts3Expr **ppExpr /* OUT: expression */
122176 sqlite3_tokenizer *pTokenizer = pParse->pTokenizer;
122177 sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
122178 int rc;
122179 Fts3Expr *p = 0;
122180 sqlite3_tokenizer_cursor *pCursor = 0;
122181 char *zTemp = 0;
122182 int nTemp = 0;
122184 const int nSpace = sizeof(Fts3Expr) + sizeof(Fts3Phrase);
122185 int nToken = 0;
122187 /* The final Fts3Expr data structure, including the Fts3Phrase,
122188 ** Fts3PhraseToken structures token buffers are all stored as a single
122189 ** allocation so that the expression can be freed with a single call to
122190 ** sqlite3_free(). Setting this up requires a two pass approach.
122192 ** The first pass, in the block below, uses a tokenizer cursor to iterate
122193 ** through the tokens in the expression. This pass uses fts3ReallocOrFree()
122194 ** to assemble data in two dynamic buffers:
122196 ** Buffer p: Points to the Fts3Expr structure, followed by the Fts3Phrase
122197 ** structure, followed by the array of Fts3PhraseToken
122198 ** structures. This pass only populates the Fts3PhraseToken array.
122200 ** Buffer zTemp: Contains copies of all tokens.
122202 ** The second pass, in the block that begins "if( rc==SQLITE_DONE )" below,
122203 ** appends buffer zTemp to buffer p, and fills in the Fts3Expr and Fts3Phrase
122204 ** structures.
122206 rc = pModule->xOpen(pTokenizer, zInput, nInput, &pCursor);
122207 if( rc==SQLITE_OK ){
122208 int ii;
122209 pCursor->pTokenizer = pTokenizer;
122210 for(ii=0; rc==SQLITE_OK; ii++){
122211 const char *zByte;
122212 int nByte, iBegin, iEnd, iPos;
122213 rc = pModule->xNext(pCursor, &zByte, &nByte, &iBegin, &iEnd, &iPos);
122214 if( rc==SQLITE_OK ){
122215 Fts3PhraseToken *pToken;
122217 p = fts3ReallocOrFree(p, nSpace + ii*sizeof(Fts3PhraseToken));
122218 if( !p ) goto no_mem;
122220 zTemp = fts3ReallocOrFree(zTemp, nTemp + nByte);
122221 if( !zTemp ) goto no_mem;
122223 assert( nToken==ii );
122224 pToken = &((Fts3Phrase *)(&p[1]))->aToken[ii];
122225 memset(pToken, 0, sizeof(Fts3PhraseToken));
122227 memcpy(&zTemp[nTemp], zByte, nByte);
122228 nTemp += nByte;
122230 pToken->n = nByte;
122231 pToken->isPrefix = (iEnd<nInput && zInput[iEnd]=='*');
122232 pToken->bFirst = (iBegin>0 && zInput[iBegin-1]=='^');
122233 nToken = ii+1;
122237 pModule->xClose(pCursor);
122238 pCursor = 0;
122241 if( rc==SQLITE_DONE ){
122242 int jj;
122243 char *zBuf = 0;
122245 p = fts3ReallocOrFree(p, nSpace + nToken*sizeof(Fts3PhraseToken) + nTemp);
122246 if( !p ) goto no_mem;
122247 memset(p, 0, (char *)&(((Fts3Phrase *)&p[1])->aToken[0])-(char *)p);
122248 p->eType = FTSQUERY_PHRASE;
122249 p->pPhrase = (Fts3Phrase *)&p[1];
122250 p->pPhrase->iColumn = pParse->iDefaultCol;
122251 p->pPhrase->nToken = nToken;
122253 zBuf = (char *)&p->pPhrase->aToken[nToken];
122254 if( zTemp ){
122255 memcpy(zBuf, zTemp, nTemp);
122256 sqlite3_free(zTemp);
122257 }else{
122258 assert( nTemp==0 );
122261 for(jj=0; jj<p->pPhrase->nToken; jj++){
122262 p->pPhrase->aToken[jj].z = zBuf;
122263 zBuf += p->pPhrase->aToken[jj].n;
122265 rc = SQLITE_OK;
122268 *ppExpr = p;
122269 return rc;
122270 no_mem:
122272 if( pCursor ){
122273 pModule->xClose(pCursor);
122275 sqlite3_free(zTemp);
122276 sqlite3_free(p);
122277 *ppExpr = 0;
122278 return SQLITE_NOMEM;
122282 ** Function getNextNode(), which is called by fts3ExprParse(), may itself
122283 ** call fts3ExprParse(). So this forward declaration is required.
122285 static int fts3ExprParse(ParseContext *, const char *, int, Fts3Expr **, int *);
122288 ** The output variable *ppExpr is populated with an allocated Fts3Expr
122289 ** structure, or set to 0 if the end of the input buffer is reached.
122291 ** Returns an SQLite error code. SQLITE_OK if everything works, SQLITE_NOMEM
122292 ** if a malloc failure occurs, or SQLITE_ERROR if a parse error is encountered.
122293 ** If SQLITE_ERROR is returned, pContext is populated with an error message.
122295 static int getNextNode(
122296 ParseContext *pParse, /* fts3 query parse context */
122297 const char *z, int n, /* Input string */
122298 Fts3Expr **ppExpr, /* OUT: expression */
122299 int *pnConsumed /* OUT: Number of bytes consumed */
122301 static const struct Fts3Keyword {
122302 char *z; /* Keyword text */
122303 unsigned char n; /* Length of the keyword */
122304 unsigned char parenOnly; /* Only valid in paren mode */
122305 unsigned char eType; /* Keyword code */
122306 } aKeyword[] = {
122307 { "OR" , 2, 0, FTSQUERY_OR },
122308 { "AND", 3, 1, FTSQUERY_AND },
122309 { "NOT", 3, 1, FTSQUERY_NOT },
122310 { "NEAR", 4, 0, FTSQUERY_NEAR }
122312 int ii;
122313 int iCol;
122314 int iColLen;
122315 int rc;
122316 Fts3Expr *pRet = 0;
122318 const char *zInput = z;
122319 int nInput = n;
122321 pParse->isNot = 0;
122323 /* Skip over any whitespace before checking for a keyword, an open or
122324 ** close bracket, or a quoted string.
122326 while( nInput>0 && fts3isspace(*zInput) ){
122327 nInput--;
122328 zInput++;
122330 if( nInput==0 ){
122331 return SQLITE_DONE;
122334 /* See if we are dealing with a keyword. */
122335 for(ii=0; ii<(int)(sizeof(aKeyword)/sizeof(struct Fts3Keyword)); ii++){
122336 const struct Fts3Keyword *pKey = &aKeyword[ii];
122338 if( (pKey->parenOnly & ~sqlite3_fts3_enable_parentheses)!=0 ){
122339 continue;
122342 if( nInput>=pKey->n && 0==memcmp(zInput, pKey->z, pKey->n) ){
122343 int nNear = SQLITE_FTS3_DEFAULT_NEAR_PARAM;
122344 int nKey = pKey->n;
122345 char cNext;
122347 /* If this is a "NEAR" keyword, check for an explicit nearness. */
122348 if( pKey->eType==FTSQUERY_NEAR ){
122349 assert( nKey==4 );
122350 if( zInput[4]=='/' && zInput[5]>='0' && zInput[5]<='9' ){
122351 nNear = 0;
122352 for(nKey=5; zInput[nKey]>='0' && zInput[nKey]<='9'; nKey++){
122353 nNear = nNear * 10 + (zInput[nKey] - '0');
122358 /* At this point this is probably a keyword. But for that to be true,
122359 ** the next byte must contain either whitespace, an open or close
122360 ** parenthesis, a quote character, or EOF.
122362 cNext = zInput[nKey];
122363 if( fts3isspace(cNext)
122364 || cNext=='"' || cNext=='(' || cNext==')' || cNext==0
122366 pRet = (Fts3Expr *)fts3MallocZero(sizeof(Fts3Expr));
122367 if( !pRet ){
122368 return SQLITE_NOMEM;
122370 pRet->eType = pKey->eType;
122371 pRet->nNear = nNear;
122372 *ppExpr = pRet;
122373 *pnConsumed = (int)((zInput - z) + nKey);
122374 return SQLITE_OK;
122377 /* Turns out that wasn't a keyword after all. This happens if the
122378 ** user has supplied a token such as "ORacle". Continue.
122383 /* Check for an open bracket. */
122384 if( sqlite3_fts3_enable_parentheses ){
122385 if( *zInput=='(' ){
122386 int nConsumed;
122387 pParse->nNest++;
122388 rc = fts3ExprParse(pParse, &zInput[1], nInput-1, ppExpr, &nConsumed);
122389 if( rc==SQLITE_OK && !*ppExpr ){
122390 rc = SQLITE_DONE;
122392 *pnConsumed = (int)((zInput - z) + 1 + nConsumed);
122393 return rc;
122396 /* Check for a close bracket. */
122397 if( *zInput==')' ){
122398 pParse->nNest--;
122399 *pnConsumed = (int)((zInput - z) + 1);
122400 return SQLITE_DONE;
122404 /* See if we are dealing with a quoted phrase. If this is the case, then
122405 ** search for the closing quote and pass the whole string to getNextString()
122406 ** for processing. This is easy to do, as fts3 has no syntax for escaping
122407 ** a quote character embedded in a string.
122409 if( *zInput=='"' ){
122410 for(ii=1; ii<nInput && zInput[ii]!='"'; ii++);
122411 *pnConsumed = (int)((zInput - z) + ii + 1);
122412 if( ii==nInput ){
122413 return SQLITE_ERROR;
122415 return getNextString(pParse, &zInput[1], ii-1, ppExpr);
122419 /* If control flows to this point, this must be a regular token, or
122420 ** the end of the input. Read a regular token using the sqlite3_tokenizer
122421 ** interface. Before doing so, figure out if there is an explicit
122422 ** column specifier for the token.
122424 ** TODO: Strangely, it is not possible to associate a column specifier
122425 ** with a quoted phrase, only with a single token. Not sure if this was
122426 ** an implementation artifact or an intentional decision when fts3 was
122427 ** first implemented. Whichever it was, this module duplicates the
122428 ** limitation.
122430 iCol = pParse->iDefaultCol;
122431 iColLen = 0;
122432 for(ii=0; ii<pParse->nCol; ii++){
122433 const char *zStr = pParse->azCol[ii];
122434 int nStr = (int)strlen(zStr);
122435 if( nInput>nStr && zInput[nStr]==':'
122436 && sqlite3_strnicmp(zStr, zInput, nStr)==0
122438 iCol = ii;
122439 iColLen = (int)((zInput - z) + nStr + 1);
122440 break;
122443 rc = getNextToken(pParse, iCol, &z[iColLen], n-iColLen, ppExpr, pnConsumed);
122444 *pnConsumed += iColLen;
122445 return rc;
122449 ** The argument is an Fts3Expr structure for a binary operator (any type
122450 ** except an FTSQUERY_PHRASE). Return an integer value representing the
122451 ** precedence of the operator. Lower values have a higher precedence (i.e.
122452 ** group more tightly). For example, in the C language, the == operator
122453 ** groups more tightly than ||, and would therefore have a higher precedence.
122455 ** When using the new fts3 query syntax (when SQLITE_ENABLE_FTS3_PARENTHESIS
122456 ** is defined), the order of the operators in precedence from highest to
122457 ** lowest is:
122459 ** NEAR
122460 ** NOT
122461 ** AND (including implicit ANDs)
122462 ** OR
122464 ** Note that when using the old query syntax, the OR operator has a higher
122465 ** precedence than the AND operator.
122467 static int opPrecedence(Fts3Expr *p){
122468 assert( p->eType!=FTSQUERY_PHRASE );
122469 if( sqlite3_fts3_enable_parentheses ){
122470 return p->eType;
122471 }else if( p->eType==FTSQUERY_NEAR ){
122472 return 1;
122473 }else if( p->eType==FTSQUERY_OR ){
122474 return 2;
122476 assert( p->eType==FTSQUERY_AND );
122477 return 3;
122481 ** Argument ppHead contains a pointer to the current head of a query
122482 ** expression tree being parsed. pPrev is the expression node most recently
122483 ** inserted into the tree. This function adds pNew, which is always a binary
122484 ** operator node, into the expression tree based on the relative precedence
122485 ** of pNew and the existing nodes of the tree. This may result in the head
122486 ** of the tree changing, in which case *ppHead is set to the new root node.
122488 static void insertBinaryOperator(
122489 Fts3Expr **ppHead, /* Pointer to the root node of a tree */
122490 Fts3Expr *pPrev, /* Node most recently inserted into the tree */
122491 Fts3Expr *pNew /* New binary node to insert into expression tree */
122493 Fts3Expr *pSplit = pPrev;
122494 while( pSplit->pParent && opPrecedence(pSplit->pParent)<=opPrecedence(pNew) ){
122495 pSplit = pSplit->pParent;
122498 if( pSplit->pParent ){
122499 assert( pSplit->pParent->pRight==pSplit );
122500 pSplit->pParent->pRight = pNew;
122501 pNew->pParent = pSplit->pParent;
122502 }else{
122503 *ppHead = pNew;
122505 pNew->pLeft = pSplit;
122506 pSplit->pParent = pNew;
122510 ** Parse the fts3 query expression found in buffer z, length n. This function
122511 ** returns either when the end of the buffer is reached or an unmatched
122512 ** closing bracket - ')' - is encountered.
122514 ** If successful, SQLITE_OK is returned, *ppExpr is set to point to the
122515 ** parsed form of the expression and *pnConsumed is set to the number of
122516 ** bytes read from buffer z. Otherwise, *ppExpr is set to 0 and SQLITE_NOMEM
122517 ** (out of memory error) or SQLITE_ERROR (parse error) is returned.
122519 static int fts3ExprParse(
122520 ParseContext *pParse, /* fts3 query parse context */
122521 const char *z, int n, /* Text of MATCH query */
122522 Fts3Expr **ppExpr, /* OUT: Parsed query structure */
122523 int *pnConsumed /* OUT: Number of bytes consumed */
122525 Fts3Expr *pRet = 0;
122526 Fts3Expr *pPrev = 0;
122527 Fts3Expr *pNotBranch = 0; /* Only used in legacy parse mode */
122528 int nIn = n;
122529 const char *zIn = z;
122530 int rc = SQLITE_OK;
122531 int isRequirePhrase = 1;
122533 while( rc==SQLITE_OK ){
122534 Fts3Expr *p = 0;
122535 int nByte = 0;
122536 rc = getNextNode(pParse, zIn, nIn, &p, &nByte);
122537 if( rc==SQLITE_OK ){
122538 int isPhrase;
122540 if( !sqlite3_fts3_enable_parentheses
122541 && p->eType==FTSQUERY_PHRASE && pParse->isNot
122543 /* Create an implicit NOT operator. */
122544 Fts3Expr *pNot = fts3MallocZero(sizeof(Fts3Expr));
122545 if( !pNot ){
122546 sqlite3Fts3ExprFree(p);
122547 rc = SQLITE_NOMEM;
122548 goto exprparse_out;
122550 pNot->eType = FTSQUERY_NOT;
122551 pNot->pRight = p;
122552 if( pNotBranch ){
122553 pNot->pLeft = pNotBranch;
122555 pNotBranch = pNot;
122556 p = pPrev;
122557 }else{
122558 int eType = p->eType;
122559 isPhrase = (eType==FTSQUERY_PHRASE || p->pLeft);
122561 /* The isRequirePhrase variable is set to true if a phrase or
122562 ** an expression contained in parenthesis is required. If a
122563 ** binary operator (AND, OR, NOT or NEAR) is encounted when
122564 ** isRequirePhrase is set, this is a syntax error.
122566 if( !isPhrase && isRequirePhrase ){
122567 sqlite3Fts3ExprFree(p);
122568 rc = SQLITE_ERROR;
122569 goto exprparse_out;
122572 if( isPhrase && !isRequirePhrase ){
122573 /* Insert an implicit AND operator. */
122574 Fts3Expr *pAnd;
122575 assert( pRet && pPrev );
122576 pAnd = fts3MallocZero(sizeof(Fts3Expr));
122577 if( !pAnd ){
122578 sqlite3Fts3ExprFree(p);
122579 rc = SQLITE_NOMEM;
122580 goto exprparse_out;
122582 pAnd->eType = FTSQUERY_AND;
122583 insertBinaryOperator(&pRet, pPrev, pAnd);
122584 pPrev = pAnd;
122587 /* This test catches attempts to make either operand of a NEAR
122588 ** operator something other than a phrase. For example, either of
122589 ** the following:
122591 ** (bracketed expression) NEAR phrase
122592 ** phrase NEAR (bracketed expression)
122594 ** Return an error in either case.
122596 if( pPrev && (
122597 (eType==FTSQUERY_NEAR && !isPhrase && pPrev->eType!=FTSQUERY_PHRASE)
122598 || (eType!=FTSQUERY_PHRASE && isPhrase && pPrev->eType==FTSQUERY_NEAR)
122600 sqlite3Fts3ExprFree(p);
122601 rc = SQLITE_ERROR;
122602 goto exprparse_out;
122605 if( isPhrase ){
122606 if( pRet ){
122607 assert( pPrev && pPrev->pLeft && pPrev->pRight==0 );
122608 pPrev->pRight = p;
122609 p->pParent = pPrev;
122610 }else{
122611 pRet = p;
122613 }else{
122614 insertBinaryOperator(&pRet, pPrev, p);
122616 isRequirePhrase = !isPhrase;
122618 assert( nByte>0 );
122620 assert( rc!=SQLITE_OK || (nByte>0 && nByte<=nIn) );
122621 nIn -= nByte;
122622 zIn += nByte;
122623 pPrev = p;
122626 if( rc==SQLITE_DONE && pRet && isRequirePhrase ){
122627 rc = SQLITE_ERROR;
122630 if( rc==SQLITE_DONE ){
122631 rc = SQLITE_OK;
122632 if( !sqlite3_fts3_enable_parentheses && pNotBranch ){
122633 if( !pRet ){
122634 rc = SQLITE_ERROR;
122635 }else{
122636 Fts3Expr *pIter = pNotBranch;
122637 while( pIter->pLeft ){
122638 pIter = pIter->pLeft;
122640 pIter->pLeft = pRet;
122641 pRet = pNotBranch;
122645 *pnConsumed = n - nIn;
122647 exprparse_out:
122648 if( rc!=SQLITE_OK ){
122649 sqlite3Fts3ExprFree(pRet);
122650 sqlite3Fts3ExprFree(pNotBranch);
122651 pRet = 0;
122653 *ppExpr = pRet;
122654 return rc;
122658 ** Parameters z and n contain a pointer to and length of a buffer containing
122659 ** an fts3 query expression, respectively. This function attempts to parse the
122660 ** query expression and create a tree of Fts3Expr structures representing the
122661 ** parsed expression. If successful, *ppExpr is set to point to the head
122662 ** of the parsed expression tree and SQLITE_OK is returned. If an error
122663 ** occurs, either SQLITE_NOMEM (out-of-memory error) or SQLITE_ERROR (parse
122664 ** error) is returned and *ppExpr is set to 0.
122666 ** If parameter n is a negative number, then z is assumed to point to a
122667 ** nul-terminated string and the length is determined using strlen().
122669 ** The first parameter, pTokenizer, is passed the fts3 tokenizer module to
122670 ** use to normalize query tokens while parsing the expression. The azCol[]
122671 ** array, which is assumed to contain nCol entries, should contain the names
122672 ** of each column in the target fts3 table, in order from left to right.
122673 ** Column names must be nul-terminated strings.
122675 ** The iDefaultCol parameter should be passed the index of the table column
122676 ** that appears on the left-hand-side of the MATCH operator (the default
122677 ** column to match against for tokens for which a column name is not explicitly
122678 ** specified as part of the query string), or -1 if tokens may by default
122679 ** match any table column.
122681 SQLITE_PRIVATE int sqlite3Fts3ExprParse(
122682 sqlite3_tokenizer *pTokenizer, /* Tokenizer module */
122683 char **azCol, /* Array of column names for fts3 table */
122684 int bFts4, /* True to allow FTS4-only syntax */
122685 int nCol, /* Number of entries in azCol[] */
122686 int iDefaultCol, /* Default column to query */
122687 const char *z, int n, /* Text of MATCH query */
122688 Fts3Expr **ppExpr /* OUT: Parsed query structure */
122690 int nParsed;
122691 int rc;
122692 ParseContext sParse;
122693 sParse.pTokenizer = pTokenizer;
122694 sParse.azCol = (const char **)azCol;
122695 sParse.nCol = nCol;
122696 sParse.iDefaultCol = iDefaultCol;
122697 sParse.nNest = 0;
122698 sParse.bFts4 = bFts4;
122699 if( z==0 ){
122700 *ppExpr = 0;
122701 return SQLITE_OK;
122703 if( n<0 ){
122704 n = (int)strlen(z);
122706 rc = fts3ExprParse(&sParse, z, n, ppExpr, &nParsed);
122708 /* Check for mismatched parenthesis */
122709 if( rc==SQLITE_OK && sParse.nNest ){
122710 rc = SQLITE_ERROR;
122711 sqlite3Fts3ExprFree(*ppExpr);
122712 *ppExpr = 0;
122715 return rc;
122719 ** Free a parsed fts3 query expression allocated by sqlite3Fts3ExprParse().
122721 SQLITE_PRIVATE void sqlite3Fts3ExprFree(Fts3Expr *p){
122722 if( p ){
122723 assert( p->eType==FTSQUERY_PHRASE || p->pPhrase==0 );
122724 sqlite3Fts3ExprFree(p->pLeft);
122725 sqlite3Fts3ExprFree(p->pRight);
122726 sqlite3Fts3EvalPhraseCleanup(p->pPhrase);
122727 sqlite3_free(p->aMI);
122728 sqlite3_free(p);
122732 /****************************************************************************
122733 *****************************************************************************
122734 ** Everything after this point is just test code.
122737 #ifdef SQLITE_TEST
122739 /* #include <stdio.h> */
122742 ** Function to query the hash-table of tokenizers (see README.tokenizers).
122744 static int queryTestTokenizer(
122745 sqlite3 *db,
122746 const char *zName,
122747 const sqlite3_tokenizer_module **pp
122749 int rc;
122750 sqlite3_stmt *pStmt;
122751 const char zSql[] = "SELECT fts3_tokenizer(?)";
122753 *pp = 0;
122754 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
122755 if( rc!=SQLITE_OK ){
122756 return rc;
122759 sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
122760 if( SQLITE_ROW==sqlite3_step(pStmt) ){
122761 if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
122762 memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
122766 return sqlite3_finalize(pStmt);
122770 ** Return a pointer to a buffer containing a text representation of the
122771 ** expression passed as the first argument. The buffer is obtained from
122772 ** sqlite3_malloc(). It is the responsibility of the caller to use
122773 ** sqlite3_free() to release the memory. If an OOM condition is encountered,
122774 ** NULL is returned.
122776 ** If the second argument is not NULL, then its contents are prepended to
122777 ** the returned expression text and then freed using sqlite3_free().
122779 static char *exprToString(Fts3Expr *pExpr, char *zBuf){
122780 switch( pExpr->eType ){
122781 case FTSQUERY_PHRASE: {
122782 Fts3Phrase *pPhrase = pExpr->pPhrase;
122783 int i;
122784 zBuf = sqlite3_mprintf(
122785 "%zPHRASE %d 0", zBuf, pPhrase->iColumn);
122786 for(i=0; zBuf && i<pPhrase->nToken; i++){
122787 zBuf = sqlite3_mprintf("%z %.*s%s", zBuf,
122788 pPhrase->aToken[i].n, pPhrase->aToken[i].z,
122789 (pPhrase->aToken[i].isPrefix?"+":"")
122792 return zBuf;
122795 case FTSQUERY_NEAR:
122796 zBuf = sqlite3_mprintf("%zNEAR/%d ", zBuf, pExpr->nNear);
122797 break;
122798 case FTSQUERY_NOT:
122799 zBuf = sqlite3_mprintf("%zNOT ", zBuf);
122800 break;
122801 case FTSQUERY_AND:
122802 zBuf = sqlite3_mprintf("%zAND ", zBuf);
122803 break;
122804 case FTSQUERY_OR:
122805 zBuf = sqlite3_mprintf("%zOR ", zBuf);
122806 break;
122809 if( zBuf ) zBuf = sqlite3_mprintf("%z{", zBuf);
122810 if( zBuf ) zBuf = exprToString(pExpr->pLeft, zBuf);
122811 if( zBuf ) zBuf = sqlite3_mprintf("%z} {", zBuf);
122813 if( zBuf ) zBuf = exprToString(pExpr->pRight, zBuf);
122814 if( zBuf ) zBuf = sqlite3_mprintf("%z}", zBuf);
122816 return zBuf;
122820 ** This is the implementation of a scalar SQL function used to test the
122821 ** expression parser. It should be called as follows:
122823 ** fts3_exprtest(<tokenizer>, <expr>, <column 1>, ...);
122825 ** The first argument, <tokenizer>, is the name of the fts3 tokenizer used
122826 ** to parse the query expression (see README.tokenizers). The second argument
122827 ** is the query expression to parse. Each subsequent argument is the name
122828 ** of a column of the fts3 table that the query expression may refer to.
122829 ** For example:
122831 ** SELECT fts3_exprtest('simple', 'Bill col2:Bloggs', 'col1', 'col2');
122833 static void fts3ExprTest(
122834 sqlite3_context *context,
122835 int argc,
122836 sqlite3_value **argv
122838 sqlite3_tokenizer_module const *pModule = 0;
122839 sqlite3_tokenizer *pTokenizer = 0;
122840 int rc;
122841 char **azCol = 0;
122842 const char *zExpr;
122843 int nExpr;
122844 int nCol;
122845 int ii;
122846 Fts3Expr *pExpr;
122847 char *zBuf = 0;
122848 sqlite3 *db = sqlite3_context_db_handle(context);
122850 if( argc<3 ){
122851 sqlite3_result_error(context,
122852 "Usage: fts3_exprtest(tokenizer, expr, col1, ...", -1
122854 return;
122857 rc = queryTestTokenizer(db,
122858 (const char *)sqlite3_value_text(argv[0]), &pModule);
122859 if( rc==SQLITE_NOMEM ){
122860 sqlite3_result_error_nomem(context);
122861 goto exprtest_out;
122862 }else if( !pModule ){
122863 sqlite3_result_error(context, "No such tokenizer module", -1);
122864 goto exprtest_out;
122867 rc = pModule->xCreate(0, 0, &pTokenizer);
122868 assert( rc==SQLITE_NOMEM || rc==SQLITE_OK );
122869 if( rc==SQLITE_NOMEM ){
122870 sqlite3_result_error_nomem(context);
122871 goto exprtest_out;
122873 pTokenizer->pModule = pModule;
122875 zExpr = (const char *)sqlite3_value_text(argv[1]);
122876 nExpr = sqlite3_value_bytes(argv[1]);
122877 nCol = argc-2;
122878 azCol = (char **)sqlite3_malloc(nCol*sizeof(char *));
122879 if( !azCol ){
122880 sqlite3_result_error_nomem(context);
122881 goto exprtest_out;
122883 for(ii=0; ii<nCol; ii++){
122884 azCol[ii] = (char *)sqlite3_value_text(argv[ii+2]);
122887 rc = sqlite3Fts3ExprParse(
122888 pTokenizer, azCol, 0, nCol, nCol, zExpr, nExpr, &pExpr
122890 if( rc!=SQLITE_OK && rc!=SQLITE_NOMEM ){
122891 sqlite3_result_error(context, "Error parsing expression", -1);
122892 }else if( rc==SQLITE_NOMEM || !(zBuf = exprToString(pExpr, 0)) ){
122893 sqlite3_result_error_nomem(context);
122894 }else{
122895 sqlite3_result_text(context, zBuf, -1, SQLITE_TRANSIENT);
122896 sqlite3_free(zBuf);
122899 sqlite3Fts3ExprFree(pExpr);
122901 exprtest_out:
122902 if( pModule && pTokenizer ){
122903 rc = pModule->xDestroy(pTokenizer);
122905 sqlite3_free(azCol);
122909 ** Register the query expression parser test function fts3_exprtest()
122910 ** with database connection db.
122912 SQLITE_PRIVATE int sqlite3Fts3ExprInitTestInterface(sqlite3* db){
122913 return sqlite3_create_function(
122914 db, "fts3_exprtest", -1, SQLITE_UTF8, 0, fts3ExprTest, 0, 0
122918 #endif
122919 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
122921 /************** End of fts3_expr.c *******************************************/
122922 /************** Begin file fts3_hash.c ***************************************/
122924 ** 2001 September 22
122926 ** The author disclaims copyright to this source code. In place of
122927 ** a legal notice, here is a blessing:
122929 ** May you do good and not evil.
122930 ** May you find forgiveness for yourself and forgive others.
122931 ** May you share freely, never taking more than you give.
122933 *************************************************************************
122934 ** This is the implementation of generic hash-tables used in SQLite.
122935 ** We've modified it slightly to serve as a standalone hash table
122936 ** implementation for the full-text indexing module.
122940 ** The code in this file is only compiled if:
122942 ** * The FTS3 module is being built as an extension
122943 ** (in which case SQLITE_CORE is not defined), or
122945 ** * The FTS3 module is being built into the core of
122946 ** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
122948 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
122950 /* #include <assert.h> */
122951 /* #include <stdlib.h> */
122952 /* #include <string.h> */
122956 ** Malloc and Free functions
122958 static void *fts3HashMalloc(int n){
122959 void *p = sqlite3_malloc(n);
122960 if( p ){
122961 memset(p, 0, n);
122963 return p;
122965 static void fts3HashFree(void *p){
122966 sqlite3_free(p);
122969 /* Turn bulk memory into a hash table object by initializing the
122970 ** fields of the Hash structure.
122972 ** "pNew" is a pointer to the hash table that is to be initialized.
122973 ** keyClass is one of the constants
122974 ** FTS3_HASH_BINARY or FTS3_HASH_STRING. The value of keyClass
122975 ** determines what kind of key the hash table will use. "copyKey" is
122976 ** true if the hash table should make its own private copy of keys and
122977 ** false if it should just use the supplied pointer.
122979 SQLITE_PRIVATE void sqlite3Fts3HashInit(Fts3Hash *pNew, char keyClass, char copyKey){
122980 assert( pNew!=0 );
122981 assert( keyClass>=FTS3_HASH_STRING && keyClass<=FTS3_HASH_BINARY );
122982 pNew->keyClass = keyClass;
122983 pNew->copyKey = copyKey;
122984 pNew->first = 0;
122985 pNew->count = 0;
122986 pNew->htsize = 0;
122987 pNew->ht = 0;
122990 /* Remove all entries from a hash table. Reclaim all memory.
122991 ** Call this routine to delete a hash table or to reset a hash table
122992 ** to the empty state.
122994 SQLITE_PRIVATE void sqlite3Fts3HashClear(Fts3Hash *pH){
122995 Fts3HashElem *elem; /* For looping over all elements of the table */
122997 assert( pH!=0 );
122998 elem = pH->first;
122999 pH->first = 0;
123000 fts3HashFree(pH->ht);
123001 pH->ht = 0;
123002 pH->htsize = 0;
123003 while( elem ){
123004 Fts3HashElem *next_elem = elem->next;
123005 if( pH->copyKey && elem->pKey ){
123006 fts3HashFree(elem->pKey);
123008 fts3HashFree(elem);
123009 elem = next_elem;
123011 pH->count = 0;
123015 ** Hash and comparison functions when the mode is FTS3_HASH_STRING
123017 static int fts3StrHash(const void *pKey, int nKey){
123018 const char *z = (const char *)pKey;
123019 int h = 0;
123020 if( nKey<=0 ) nKey = (int) strlen(z);
123021 while( nKey > 0 ){
123022 h = (h<<3) ^ h ^ *z++;
123023 nKey--;
123025 return h & 0x7fffffff;
123027 static int fts3StrCompare(const void *pKey1, int n1, const void *pKey2, int n2){
123028 if( n1!=n2 ) return 1;
123029 return strncmp((const char*)pKey1,(const char*)pKey2,n1);
123033 ** Hash and comparison functions when the mode is FTS3_HASH_BINARY
123035 static int fts3BinHash(const void *pKey, int nKey){
123036 int h = 0;
123037 const char *z = (const char *)pKey;
123038 while( nKey-- > 0 ){
123039 h = (h<<3) ^ h ^ *(z++);
123041 return h & 0x7fffffff;
123043 static int fts3BinCompare(const void *pKey1, int n1, const void *pKey2, int n2){
123044 if( n1!=n2 ) return 1;
123045 return memcmp(pKey1,pKey2,n1);
123049 ** Return a pointer to the appropriate hash function given the key class.
123051 ** The C syntax in this function definition may be unfamilar to some
123052 ** programmers, so we provide the following additional explanation:
123054 ** The name of the function is "ftsHashFunction". The function takes a
123055 ** single parameter "keyClass". The return value of ftsHashFunction()
123056 ** is a pointer to another function. Specifically, the return value
123057 ** of ftsHashFunction() is a pointer to a function that takes two parameters
123058 ** with types "const void*" and "int" and returns an "int".
123060 static int (*ftsHashFunction(int keyClass))(const void*,int){
123061 if( keyClass==FTS3_HASH_STRING ){
123062 return &fts3StrHash;
123063 }else{
123064 assert( keyClass==FTS3_HASH_BINARY );
123065 return &fts3BinHash;
123070 ** Return a pointer to the appropriate hash function given the key class.
123072 ** For help in interpreted the obscure C code in the function definition,
123073 ** see the header comment on the previous function.
123075 static int (*ftsCompareFunction(int keyClass))(const void*,int,const void*,int){
123076 if( keyClass==FTS3_HASH_STRING ){
123077 return &fts3StrCompare;
123078 }else{
123079 assert( keyClass==FTS3_HASH_BINARY );
123080 return &fts3BinCompare;
123084 /* Link an element into the hash table
123086 static void fts3HashInsertElement(
123087 Fts3Hash *pH, /* The complete hash table */
123088 struct _fts3ht *pEntry, /* The entry into which pNew is inserted */
123089 Fts3HashElem *pNew /* The element to be inserted */
123091 Fts3HashElem *pHead; /* First element already in pEntry */
123092 pHead = pEntry->chain;
123093 if( pHead ){
123094 pNew->next = pHead;
123095 pNew->prev = pHead->prev;
123096 if( pHead->prev ){ pHead->prev->next = pNew; }
123097 else { pH->first = pNew; }
123098 pHead->prev = pNew;
123099 }else{
123100 pNew->next = pH->first;
123101 if( pH->first ){ pH->first->prev = pNew; }
123102 pNew->prev = 0;
123103 pH->first = pNew;
123105 pEntry->count++;
123106 pEntry->chain = pNew;
123110 /* Resize the hash table so that it cantains "new_size" buckets.
123111 ** "new_size" must be a power of 2. The hash table might fail
123112 ** to resize if sqliteMalloc() fails.
123114 ** Return non-zero if a memory allocation error occurs.
123116 static int fts3Rehash(Fts3Hash *pH, int new_size){
123117 struct _fts3ht *new_ht; /* The new hash table */
123118 Fts3HashElem *elem, *next_elem; /* For looping over existing elements */
123119 int (*xHash)(const void*,int); /* The hash function */
123121 assert( (new_size & (new_size-1))==0 );
123122 new_ht = (struct _fts3ht *)fts3HashMalloc( new_size*sizeof(struct _fts3ht) );
123123 if( new_ht==0 ) return 1;
123124 fts3HashFree(pH->ht);
123125 pH->ht = new_ht;
123126 pH->htsize = new_size;
123127 xHash = ftsHashFunction(pH->keyClass);
123128 for(elem=pH->first, pH->first=0; elem; elem = next_elem){
123129 int h = (*xHash)(elem->pKey, elem->nKey) & (new_size-1);
123130 next_elem = elem->next;
123131 fts3HashInsertElement(pH, &new_ht[h], elem);
123133 return 0;
123136 /* This function (for internal use only) locates an element in an
123137 ** hash table that matches the given key. The hash for this key has
123138 ** already been computed and is passed as the 4th parameter.
123140 static Fts3HashElem *fts3FindElementByHash(
123141 const Fts3Hash *pH, /* The pH to be searched */
123142 const void *pKey, /* The key we are searching for */
123143 int nKey,
123144 int h /* The hash for this key. */
123146 Fts3HashElem *elem; /* Used to loop thru the element list */
123147 int count; /* Number of elements left to test */
123148 int (*xCompare)(const void*,int,const void*,int); /* comparison function */
123150 if( pH->ht ){
123151 struct _fts3ht *pEntry = &pH->ht[h];
123152 elem = pEntry->chain;
123153 count = pEntry->count;
123154 xCompare = ftsCompareFunction(pH->keyClass);
123155 while( count-- && elem ){
123156 if( (*xCompare)(elem->pKey,elem->nKey,pKey,nKey)==0 ){
123157 return elem;
123159 elem = elem->next;
123162 return 0;
123165 /* Remove a single entry from the hash table given a pointer to that
123166 ** element and a hash on the element's key.
123168 static void fts3RemoveElementByHash(
123169 Fts3Hash *pH, /* The pH containing "elem" */
123170 Fts3HashElem* elem, /* The element to be removed from the pH */
123171 int h /* Hash value for the element */
123173 struct _fts3ht *pEntry;
123174 if( elem->prev ){
123175 elem->prev->next = elem->next;
123176 }else{
123177 pH->first = elem->next;
123179 if( elem->next ){
123180 elem->next->prev = elem->prev;
123182 pEntry = &pH->ht[h];
123183 if( pEntry->chain==elem ){
123184 pEntry->chain = elem->next;
123186 pEntry->count--;
123187 if( pEntry->count<=0 ){
123188 pEntry->chain = 0;
123190 if( pH->copyKey && elem->pKey ){
123191 fts3HashFree(elem->pKey);
123193 fts3HashFree( elem );
123194 pH->count--;
123195 if( pH->count<=0 ){
123196 assert( pH->first==0 );
123197 assert( pH->count==0 );
123198 fts3HashClear(pH);
123202 SQLITE_PRIVATE Fts3HashElem *sqlite3Fts3HashFindElem(
123203 const Fts3Hash *pH,
123204 const void *pKey,
123205 int nKey
123207 int h; /* A hash on key */
123208 int (*xHash)(const void*,int); /* The hash function */
123210 if( pH==0 || pH->ht==0 ) return 0;
123211 xHash = ftsHashFunction(pH->keyClass);
123212 assert( xHash!=0 );
123213 h = (*xHash)(pKey,nKey);
123214 assert( (pH->htsize & (pH->htsize-1))==0 );
123215 return fts3FindElementByHash(pH,pKey,nKey, h & (pH->htsize-1));
123219 ** Attempt to locate an element of the hash table pH with a key
123220 ** that matches pKey,nKey. Return the data for this element if it is
123221 ** found, or NULL if there is no match.
123223 SQLITE_PRIVATE void *sqlite3Fts3HashFind(const Fts3Hash *pH, const void *pKey, int nKey){
123224 Fts3HashElem *pElem; /* The element that matches key (if any) */
123226 pElem = sqlite3Fts3HashFindElem(pH, pKey, nKey);
123227 return pElem ? pElem->data : 0;
123230 /* Insert an element into the hash table pH. The key is pKey,nKey
123231 ** and the data is "data".
123233 ** If no element exists with a matching key, then a new
123234 ** element is created. A copy of the key is made if the copyKey
123235 ** flag is set. NULL is returned.
123237 ** If another element already exists with the same key, then the
123238 ** new data replaces the old data and the old data is returned.
123239 ** The key is not copied in this instance. If a malloc fails, then
123240 ** the new data is returned and the hash table is unchanged.
123242 ** If the "data" parameter to this function is NULL, then the
123243 ** element corresponding to "key" is removed from the hash table.
123245 SQLITE_PRIVATE void *sqlite3Fts3HashInsert(
123246 Fts3Hash *pH, /* The hash table to insert into */
123247 const void *pKey, /* The key */
123248 int nKey, /* Number of bytes in the key */
123249 void *data /* The data */
123251 int hraw; /* Raw hash value of the key */
123252 int h; /* the hash of the key modulo hash table size */
123253 Fts3HashElem *elem; /* Used to loop thru the element list */
123254 Fts3HashElem *new_elem; /* New element added to the pH */
123255 int (*xHash)(const void*,int); /* The hash function */
123257 assert( pH!=0 );
123258 xHash = ftsHashFunction(pH->keyClass);
123259 assert( xHash!=0 );
123260 hraw = (*xHash)(pKey, nKey);
123261 assert( (pH->htsize & (pH->htsize-1))==0 );
123262 h = hraw & (pH->htsize-1);
123263 elem = fts3FindElementByHash(pH,pKey,nKey,h);
123264 if( elem ){
123265 void *old_data = elem->data;
123266 if( data==0 ){
123267 fts3RemoveElementByHash(pH,elem,h);
123268 }else{
123269 elem->data = data;
123271 return old_data;
123273 if( data==0 ) return 0;
123274 if( (pH->htsize==0 && fts3Rehash(pH,8))
123275 || (pH->count>=pH->htsize && fts3Rehash(pH, pH->htsize*2))
123277 pH->count = 0;
123278 return data;
123280 assert( pH->htsize>0 );
123281 new_elem = (Fts3HashElem*)fts3HashMalloc( sizeof(Fts3HashElem) );
123282 if( new_elem==0 ) return data;
123283 if( pH->copyKey && pKey!=0 ){
123284 new_elem->pKey = fts3HashMalloc( nKey );
123285 if( new_elem->pKey==0 ){
123286 fts3HashFree(new_elem);
123287 return data;
123289 memcpy((void*)new_elem->pKey, pKey, nKey);
123290 }else{
123291 new_elem->pKey = (void*)pKey;
123293 new_elem->nKey = nKey;
123294 pH->count++;
123295 assert( pH->htsize>0 );
123296 assert( (pH->htsize & (pH->htsize-1))==0 );
123297 h = hraw & (pH->htsize-1);
123298 fts3HashInsertElement(pH, &pH->ht[h], new_elem);
123299 new_elem->data = data;
123300 return 0;
123303 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
123305 /************** End of fts3_hash.c *******************************************/
123306 /************** Begin file fts3_porter.c *************************************/
123308 ** 2006 September 30
123310 ** The author disclaims copyright to this source code. In place of
123311 ** a legal notice, here is a blessing:
123313 ** May you do good and not evil.
123314 ** May you find forgiveness for yourself and forgive others.
123315 ** May you share freely, never taking more than you give.
123317 *************************************************************************
123318 ** Implementation of the full-text-search tokenizer that implements
123319 ** a Porter stemmer.
123323 ** The code in this file is only compiled if:
123325 ** * The FTS3 module is being built as an extension
123326 ** (in which case SQLITE_CORE is not defined), or
123328 ** * The FTS3 module is being built into the core of
123329 ** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
123331 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
123333 /* #include <assert.h> */
123334 /* #include <stdlib.h> */
123335 /* #include <stdio.h> */
123336 /* #include <string.h> */
123340 ** Class derived from sqlite3_tokenizer
123342 typedef struct porter_tokenizer {
123343 sqlite3_tokenizer base; /* Base class */
123344 } porter_tokenizer;
123347 ** Class derived from sqlite3_tokenizer_cursor
123349 typedef struct porter_tokenizer_cursor {
123350 sqlite3_tokenizer_cursor base;
123351 const char *zInput; /* input we are tokenizing */
123352 int nInput; /* size of the input */
123353 int iOffset; /* current position in zInput */
123354 int iToken; /* index of next token to be returned */
123355 char *zToken; /* storage for current token */
123356 int nAllocated; /* space allocated to zToken buffer */
123357 } porter_tokenizer_cursor;
123361 ** Create a new tokenizer instance.
123363 static int porterCreate(
123364 int argc, const char * const *argv,
123365 sqlite3_tokenizer **ppTokenizer
123367 porter_tokenizer *t;
123369 UNUSED_PARAMETER(argc);
123370 UNUSED_PARAMETER(argv);
123372 t = (porter_tokenizer *) sqlite3_malloc(sizeof(*t));
123373 if( t==NULL ) return SQLITE_NOMEM;
123374 memset(t, 0, sizeof(*t));
123375 *ppTokenizer = &t->base;
123376 return SQLITE_OK;
123380 ** Destroy a tokenizer
123382 static int porterDestroy(sqlite3_tokenizer *pTokenizer){
123383 sqlite3_free(pTokenizer);
123384 return SQLITE_OK;
123388 ** Prepare to begin tokenizing a particular string. The input
123389 ** string to be tokenized is zInput[0..nInput-1]. A cursor
123390 ** used to incrementally tokenize this string is returned in
123391 ** *ppCursor.
123393 static int porterOpen(
123394 sqlite3_tokenizer *pTokenizer, /* The tokenizer */
123395 const char *zInput, int nInput, /* String to be tokenized */
123396 sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */
123398 porter_tokenizer_cursor *c;
123400 UNUSED_PARAMETER(pTokenizer);
123402 c = (porter_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
123403 if( c==NULL ) return SQLITE_NOMEM;
123405 c->zInput = zInput;
123406 if( zInput==0 ){
123407 c->nInput = 0;
123408 }else if( nInput<0 ){
123409 c->nInput = (int)strlen(zInput);
123410 }else{
123411 c->nInput = nInput;
123413 c->iOffset = 0; /* start tokenizing at the beginning */
123414 c->iToken = 0;
123415 c->zToken = NULL; /* no space allocated, yet. */
123416 c->nAllocated = 0;
123418 *ppCursor = &c->base;
123419 return SQLITE_OK;
123423 ** Close a tokenization cursor previously opened by a call to
123424 ** porterOpen() above.
123426 static int porterClose(sqlite3_tokenizer_cursor *pCursor){
123427 porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
123428 sqlite3_free(c->zToken);
123429 sqlite3_free(c);
123430 return SQLITE_OK;
123433 ** Vowel or consonant
123435 static const char cType[] = {
123436 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0,
123437 1, 1, 1, 2, 1
123441 ** isConsonant() and isVowel() determine if their first character in
123442 ** the string they point to is a consonant or a vowel, according
123443 ** to Porter ruls.
123445 ** A consonate is any letter other than 'a', 'e', 'i', 'o', or 'u'.
123446 ** 'Y' is a consonant unless it follows another consonant,
123447 ** in which case it is a vowel.
123449 ** In these routine, the letters are in reverse order. So the 'y' rule
123450 ** is that 'y' is a consonant unless it is followed by another
123451 ** consonent.
123453 static int isVowel(const char*);
123454 static int isConsonant(const char *z){
123455 int j;
123456 char x = *z;
123457 if( x==0 ) return 0;
123458 assert( x>='a' && x<='z' );
123459 j = cType[x-'a'];
123460 if( j<2 ) return j;
123461 return z[1]==0 || isVowel(z + 1);
123463 static int isVowel(const char *z){
123464 int j;
123465 char x = *z;
123466 if( x==0 ) return 0;
123467 assert( x>='a' && x<='z' );
123468 j = cType[x-'a'];
123469 if( j<2 ) return 1-j;
123470 return isConsonant(z + 1);
123474 ** Let any sequence of one or more vowels be represented by V and let
123475 ** C be sequence of one or more consonants. Then every word can be
123476 ** represented as:
123478 ** [C] (VC){m} [V]
123480 ** In prose: A word is an optional consonant followed by zero or
123481 ** vowel-consonant pairs followed by an optional vowel. "m" is the
123482 ** number of vowel consonant pairs. This routine computes the value
123483 ** of m for the first i bytes of a word.
123485 ** Return true if the m-value for z is 1 or more. In other words,
123486 ** return true if z contains at least one vowel that is followed
123487 ** by a consonant.
123489 ** In this routine z[] is in reverse order. So we are really looking
123490 ** for an instance of of a consonant followed by a vowel.
123492 static int m_gt_0(const char *z){
123493 while( isVowel(z) ){ z++; }
123494 if( *z==0 ) return 0;
123495 while( isConsonant(z) ){ z++; }
123496 return *z!=0;
123499 /* Like mgt0 above except we are looking for a value of m which is
123500 ** exactly 1
123502 static int m_eq_1(const char *z){
123503 while( isVowel(z) ){ z++; }
123504 if( *z==0 ) return 0;
123505 while( isConsonant(z) ){ z++; }
123506 if( *z==0 ) return 0;
123507 while( isVowel(z) ){ z++; }
123508 if( *z==0 ) return 1;
123509 while( isConsonant(z) ){ z++; }
123510 return *z==0;
123513 /* Like mgt0 above except we are looking for a value of m>1 instead
123514 ** or m>0
123516 static int m_gt_1(const char *z){
123517 while( isVowel(z) ){ z++; }
123518 if( *z==0 ) return 0;
123519 while( isConsonant(z) ){ z++; }
123520 if( *z==0 ) return 0;
123521 while( isVowel(z) ){ z++; }
123522 if( *z==0 ) return 0;
123523 while( isConsonant(z) ){ z++; }
123524 return *z!=0;
123528 ** Return TRUE if there is a vowel anywhere within z[0..n-1]
123530 static int hasVowel(const char *z){
123531 while( isConsonant(z) ){ z++; }
123532 return *z!=0;
123536 ** Return TRUE if the word ends in a double consonant.
123538 ** The text is reversed here. So we are really looking at
123539 ** the first two characters of z[].
123541 static int doubleConsonant(const char *z){
123542 return isConsonant(z) && z[0]==z[1];
123546 ** Return TRUE if the word ends with three letters which
123547 ** are consonant-vowel-consonent and where the final consonant
123548 ** is not 'w', 'x', or 'y'.
123550 ** The word is reversed here. So we are really checking the
123551 ** first three letters and the first one cannot be in [wxy].
123553 static int star_oh(const char *z){
123554 return
123555 isConsonant(z) &&
123556 z[0]!='w' && z[0]!='x' && z[0]!='y' &&
123557 isVowel(z+1) &&
123558 isConsonant(z+2);
123562 ** If the word ends with zFrom and xCond() is true for the stem
123563 ** of the word that preceeds the zFrom ending, then change the
123564 ** ending to zTo.
123566 ** The input word *pz and zFrom are both in reverse order. zTo
123567 ** is in normal order.
123569 ** Return TRUE if zFrom matches. Return FALSE if zFrom does not
123570 ** match. Not that TRUE is returned even if xCond() fails and
123571 ** no substitution occurs.
123573 static int stem(
123574 char **pz, /* The word being stemmed (Reversed) */
123575 const char *zFrom, /* If the ending matches this... (Reversed) */
123576 const char *zTo, /* ... change the ending to this (not reversed) */
123577 int (*xCond)(const char*) /* Condition that must be true */
123579 char *z = *pz;
123580 while( *zFrom && *zFrom==*z ){ z++; zFrom++; }
123581 if( *zFrom!=0 ) return 0;
123582 if( xCond && !xCond(z) ) return 1;
123583 while( *zTo ){
123584 *(--z) = *(zTo++);
123586 *pz = z;
123587 return 1;
123591 ** This is the fallback stemmer used when the porter stemmer is
123592 ** inappropriate. The input word is copied into the output with
123593 ** US-ASCII case folding. If the input word is too long (more
123594 ** than 20 bytes if it contains no digits or more than 6 bytes if
123595 ** it contains digits) then word is truncated to 20 or 6 bytes
123596 ** by taking 10 or 3 bytes from the beginning and end.
123598 static void copy_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
123599 int i, mx, j;
123600 int hasDigit = 0;
123601 for(i=0; i<nIn; i++){
123602 char c = zIn[i];
123603 if( c>='A' && c<='Z' ){
123604 zOut[i] = c - 'A' + 'a';
123605 }else{
123606 if( c>='0' && c<='9' ) hasDigit = 1;
123607 zOut[i] = c;
123610 mx = hasDigit ? 3 : 10;
123611 if( nIn>mx*2 ){
123612 for(j=mx, i=nIn-mx; i<nIn; i++, j++){
123613 zOut[j] = zOut[i];
123615 i = j;
123617 zOut[i] = 0;
123618 *pnOut = i;
123623 ** Stem the input word zIn[0..nIn-1]. Store the output in zOut.
123624 ** zOut is at least big enough to hold nIn bytes. Write the actual
123625 ** size of the output word (exclusive of the '\0' terminator) into *pnOut.
123627 ** Any upper-case characters in the US-ASCII character set ([A-Z])
123628 ** are converted to lower case. Upper-case UTF characters are
123629 ** unchanged.
123631 ** Words that are longer than about 20 bytes are stemmed by retaining
123632 ** a few bytes from the beginning and the end of the word. If the
123633 ** word contains digits, 3 bytes are taken from the beginning and
123634 ** 3 bytes from the end. For long words without digits, 10 bytes
123635 ** are taken from each end. US-ASCII case folding still applies.
123637 ** If the input word contains not digits but does characters not
123638 ** in [a-zA-Z] then no stemming is attempted and this routine just
123639 ** copies the input into the input into the output with US-ASCII
123640 ** case folding.
123642 ** Stemming never increases the length of the word. So there is
123643 ** no chance of overflowing the zOut buffer.
123645 static void porter_stemmer(const char *zIn, int nIn, char *zOut, int *pnOut){
123646 int i, j;
123647 char zReverse[28];
123648 char *z, *z2;
123649 if( nIn<3 || nIn>=(int)sizeof(zReverse)-7 ){
123650 /* The word is too big or too small for the porter stemmer.
123651 ** Fallback to the copy stemmer */
123652 copy_stemmer(zIn, nIn, zOut, pnOut);
123653 return;
123655 for(i=0, j=sizeof(zReverse)-6; i<nIn; i++, j--){
123656 char c = zIn[i];
123657 if( c>='A' && c<='Z' ){
123658 zReverse[j] = c + 'a' - 'A';
123659 }else if( c>='a' && c<='z' ){
123660 zReverse[j] = c;
123661 }else{
123662 /* The use of a character not in [a-zA-Z] means that we fallback
123663 ** to the copy stemmer */
123664 copy_stemmer(zIn, nIn, zOut, pnOut);
123665 return;
123668 memset(&zReverse[sizeof(zReverse)-5], 0, 5);
123669 z = &zReverse[j+1];
123672 /* Step 1a */
123673 if( z[0]=='s' ){
123675 !stem(&z, "sess", "ss", 0) &&
123676 !stem(&z, "sei", "i", 0) &&
123677 !stem(&z, "ss", "ss", 0)
123683 /* Step 1b */
123684 z2 = z;
123685 if( stem(&z, "dee", "ee", m_gt_0) ){
123686 /* Do nothing. The work was all in the test */
123687 }else if(
123688 (stem(&z, "gni", "", hasVowel) || stem(&z, "de", "", hasVowel))
123689 && z!=z2
123691 if( stem(&z, "ta", "ate", 0) ||
123692 stem(&z, "lb", "ble", 0) ||
123693 stem(&z, "zi", "ize", 0) ){
123694 /* Do nothing. The work was all in the test */
123695 }else if( doubleConsonant(z) && (*z!='l' && *z!='s' && *z!='z') ){
123697 }else if( m_eq_1(z) && star_oh(z) ){
123698 *(--z) = 'e';
123702 /* Step 1c */
123703 if( z[0]=='y' && hasVowel(z+1) ){
123704 z[0] = 'i';
123707 /* Step 2 */
123708 switch( z[1] ){
123709 case 'a':
123710 stem(&z, "lanoita", "ate", m_gt_0) ||
123711 stem(&z, "lanoit", "tion", m_gt_0);
123712 break;
123713 case 'c':
123714 stem(&z, "icne", "ence", m_gt_0) ||
123715 stem(&z, "icna", "ance", m_gt_0);
123716 break;
123717 case 'e':
123718 stem(&z, "rezi", "ize", m_gt_0);
123719 break;
123720 case 'g':
123721 stem(&z, "igol", "log", m_gt_0);
123722 break;
123723 case 'l':
123724 stem(&z, "ilb", "ble", m_gt_0) ||
123725 stem(&z, "illa", "al", m_gt_0) ||
123726 stem(&z, "iltne", "ent", m_gt_0) ||
123727 stem(&z, "ile", "e", m_gt_0) ||
123728 stem(&z, "ilsuo", "ous", m_gt_0);
123729 break;
123730 case 'o':
123731 stem(&z, "noitazi", "ize", m_gt_0) ||
123732 stem(&z, "noita", "ate", m_gt_0) ||
123733 stem(&z, "rota", "ate", m_gt_0);
123734 break;
123735 case 's':
123736 stem(&z, "msila", "al", m_gt_0) ||
123737 stem(&z, "ssenevi", "ive", m_gt_0) ||
123738 stem(&z, "ssenluf", "ful", m_gt_0) ||
123739 stem(&z, "ssensuo", "ous", m_gt_0);
123740 break;
123741 case 't':
123742 stem(&z, "itila", "al", m_gt_0) ||
123743 stem(&z, "itivi", "ive", m_gt_0) ||
123744 stem(&z, "itilib", "ble", m_gt_0);
123745 break;
123748 /* Step 3 */
123749 switch( z[0] ){
123750 case 'e':
123751 stem(&z, "etaci", "ic", m_gt_0) ||
123752 stem(&z, "evita", "", m_gt_0) ||
123753 stem(&z, "ezila", "al", m_gt_0);
123754 break;
123755 case 'i':
123756 stem(&z, "itici", "ic", m_gt_0);
123757 break;
123758 case 'l':
123759 stem(&z, "laci", "ic", m_gt_0) ||
123760 stem(&z, "luf", "", m_gt_0);
123761 break;
123762 case 's':
123763 stem(&z, "ssen", "", m_gt_0);
123764 break;
123767 /* Step 4 */
123768 switch( z[1] ){
123769 case 'a':
123770 if( z[0]=='l' && m_gt_1(z+2) ){
123771 z += 2;
123773 break;
123774 case 'c':
123775 if( z[0]=='e' && z[2]=='n' && (z[3]=='a' || z[3]=='e') && m_gt_1(z+4) ){
123776 z += 4;
123778 break;
123779 case 'e':
123780 if( z[0]=='r' && m_gt_1(z+2) ){
123781 z += 2;
123783 break;
123784 case 'i':
123785 if( z[0]=='c' && m_gt_1(z+2) ){
123786 z += 2;
123788 break;
123789 case 'l':
123790 if( z[0]=='e' && z[2]=='b' && (z[3]=='a' || z[3]=='i') && m_gt_1(z+4) ){
123791 z += 4;
123793 break;
123794 case 'n':
123795 if( z[0]=='t' ){
123796 if( z[2]=='a' ){
123797 if( m_gt_1(z+3) ){
123798 z += 3;
123800 }else if( z[2]=='e' ){
123801 stem(&z, "tneme", "", m_gt_1) ||
123802 stem(&z, "tnem", "", m_gt_1) ||
123803 stem(&z, "tne", "", m_gt_1);
123806 break;
123807 case 'o':
123808 if( z[0]=='u' ){
123809 if( m_gt_1(z+2) ){
123810 z += 2;
123812 }else if( z[3]=='s' || z[3]=='t' ){
123813 stem(&z, "noi", "", m_gt_1);
123815 break;
123816 case 's':
123817 if( z[0]=='m' && z[2]=='i' && m_gt_1(z+3) ){
123818 z += 3;
123820 break;
123821 case 't':
123822 stem(&z, "eta", "", m_gt_1) ||
123823 stem(&z, "iti", "", m_gt_1);
123824 break;
123825 case 'u':
123826 if( z[0]=='s' && z[2]=='o' && m_gt_1(z+3) ){
123827 z += 3;
123829 break;
123830 case 'v':
123831 case 'z':
123832 if( z[0]=='e' && z[2]=='i' && m_gt_1(z+3) ){
123833 z += 3;
123835 break;
123838 /* Step 5a */
123839 if( z[0]=='e' ){
123840 if( m_gt_1(z+1) ){
123842 }else if( m_eq_1(z+1) && !star_oh(z+1) ){
123847 /* Step 5b */
123848 if( m_gt_1(z) && z[0]=='l' && z[1]=='l' ){
123852 /* z[] is now the stemmed word in reverse order. Flip it back
123853 ** around into forward order and return.
123855 *pnOut = i = (int)strlen(z);
123856 zOut[i] = 0;
123857 while( *z ){
123858 zOut[--i] = *(z++);
123863 ** Characters that can be part of a token. We assume any character
123864 ** whose value is greater than 0x80 (any UTF character) can be
123865 ** part of a token. In other words, delimiters all must have
123866 ** values of 0x7f or lower.
123868 static const char porterIdChar[] = {
123869 /* x0 x1 x2 x3 x4 x5 x6 x7 x8 x9 xA xB xC xD xE xF */
123870 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */
123871 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */
123872 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */
123873 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */
123874 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */
123876 #define isDelim(C) (((ch=C)&0x80)==0 && (ch<0x30 || !porterIdChar[ch-0x30]))
123879 ** Extract the next token from a tokenization cursor. The cursor must
123880 ** have been opened by a prior call to porterOpen().
123882 static int porterNext(
123883 sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by porterOpen */
123884 const char **pzToken, /* OUT: *pzToken is the token text */
123885 int *pnBytes, /* OUT: Number of bytes in token */
123886 int *piStartOffset, /* OUT: Starting offset of token */
123887 int *piEndOffset, /* OUT: Ending offset of token */
123888 int *piPosition /* OUT: Position integer of token */
123890 porter_tokenizer_cursor *c = (porter_tokenizer_cursor *) pCursor;
123891 const char *z = c->zInput;
123893 while( c->iOffset<c->nInput ){
123894 int iStartOffset, ch;
123896 /* Scan past delimiter characters */
123897 while( c->iOffset<c->nInput && isDelim(z[c->iOffset]) ){
123898 c->iOffset++;
123901 /* Count non-delimiter characters. */
123902 iStartOffset = c->iOffset;
123903 while( c->iOffset<c->nInput && !isDelim(z[c->iOffset]) ){
123904 c->iOffset++;
123907 if( c->iOffset>iStartOffset ){
123908 int n = c->iOffset-iStartOffset;
123909 if( n>c->nAllocated ){
123910 char *pNew;
123911 c->nAllocated = n+20;
123912 pNew = sqlite3_realloc(c->zToken, c->nAllocated);
123913 if( !pNew ) return SQLITE_NOMEM;
123914 c->zToken = pNew;
123916 porter_stemmer(&z[iStartOffset], n, c->zToken, pnBytes);
123917 *pzToken = c->zToken;
123918 *piStartOffset = iStartOffset;
123919 *piEndOffset = c->iOffset;
123920 *piPosition = c->iToken++;
123921 return SQLITE_OK;
123924 return SQLITE_DONE;
123928 ** The set of routines that implement the porter-stemmer tokenizer
123930 static const sqlite3_tokenizer_module porterTokenizerModule = {
123932 porterCreate,
123933 porterDestroy,
123934 porterOpen,
123935 porterClose,
123936 porterNext,
123940 ** Allocate a new porter tokenizer. Return a pointer to the new
123941 ** tokenizer in *ppModule
123943 SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(
123944 sqlite3_tokenizer_module const**ppModule
123946 *ppModule = &porterTokenizerModule;
123949 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
123951 /************** End of fts3_porter.c *****************************************/
123952 /************** Begin file fts3_tokenizer.c **********************************/
123954 ** 2007 June 22
123956 ** The author disclaims copyright to this source code. In place of
123957 ** a legal notice, here is a blessing:
123959 ** May you do good and not evil.
123960 ** May you find forgiveness for yourself and forgive others.
123961 ** May you share freely, never taking more than you give.
123963 ******************************************************************************
123965 ** This is part of an SQLite module implementing full-text search.
123966 ** This particular file implements the generic tokenizer interface.
123970 ** The code in this file is only compiled if:
123972 ** * The FTS3 module is being built as an extension
123973 ** (in which case SQLITE_CORE is not defined), or
123975 ** * The FTS3 module is being built into the core of
123976 ** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
123978 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
123980 /* #include <assert.h> */
123981 /* #include <string.h> */
123984 ** Implementation of the SQL scalar function for accessing the underlying
123985 ** hash table. This function may be called as follows:
123987 ** SELECT <function-name>(<key-name>);
123988 ** SELECT <function-name>(<key-name>, <pointer>);
123990 ** where <function-name> is the name passed as the second argument
123991 ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer').
123993 ** If the <pointer> argument is specified, it must be a blob value
123994 ** containing a pointer to be stored as the hash data corresponding
123995 ** to the string <key-name>. If <pointer> is not specified, then
123996 ** the string <key-name> must already exist in the has table. Otherwise,
123997 ** an error is returned.
123999 ** Whether or not the <pointer> argument is specified, the value returned
124000 ** is a blob containing the pointer stored as the hash data corresponding
124001 ** to string <key-name> (after the hash-table is updated, if applicable).
124003 static void scalarFunc(
124004 sqlite3_context *context,
124005 int argc,
124006 sqlite3_value **argv
124008 Fts3Hash *pHash;
124009 void *pPtr = 0;
124010 const unsigned char *zName;
124011 int nName;
124013 assert( argc==1 || argc==2 );
124015 pHash = (Fts3Hash *)sqlite3_user_data(context);
124017 zName = sqlite3_value_text(argv[0]);
124018 nName = sqlite3_value_bytes(argv[0])+1;
124020 if( argc==2 ){
124021 void *pOld;
124022 int n = sqlite3_value_bytes(argv[1]);
124023 if( n!=sizeof(pPtr) ){
124024 sqlite3_result_error(context, "argument type mismatch", -1);
124025 return;
124027 pPtr = *(void **)sqlite3_value_blob(argv[1]);
124028 pOld = sqlite3Fts3HashInsert(pHash, (void *)zName, nName, pPtr);
124029 if( pOld==pPtr ){
124030 sqlite3_result_error(context, "out of memory", -1);
124031 return;
124033 }else{
124034 pPtr = sqlite3Fts3HashFind(pHash, zName, nName);
124035 if( !pPtr ){
124036 char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
124037 sqlite3_result_error(context, zErr, -1);
124038 sqlite3_free(zErr);
124039 return;
124043 sqlite3_result_blob(context, (void *)&pPtr, sizeof(pPtr), SQLITE_TRANSIENT);
124046 SQLITE_PRIVATE int sqlite3Fts3IsIdChar(char c){
124047 static const char isFtsIdChar[] = {
124048 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 0x */
124049 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 1x */
124050 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, /* 2x */
124051 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, /* 3x */
124052 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 4x */
124053 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, /* 5x */
124054 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, /* 6x */
124055 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, /* 7x */
124057 return (c&0x80 || isFtsIdChar[(int)(c)]);
124060 SQLITE_PRIVATE const char *sqlite3Fts3NextToken(const char *zStr, int *pn){
124061 const char *z1;
124062 const char *z2 = 0;
124064 /* Find the start of the next token. */
124065 z1 = zStr;
124066 while( z2==0 ){
124067 char c = *z1;
124068 switch( c ){
124069 case '\0': return 0; /* No more tokens here */
124070 case '\'':
124071 case '"':
124072 case '`': {
124073 z2 = z1;
124074 while( *++z2 && (*z2!=c || *++z2==c) );
124075 break;
124077 case '[':
124078 z2 = &z1[1];
124079 while( *z2 && z2[0]!=']' ) z2++;
124080 if( *z2 ) z2++;
124081 break;
124083 default:
124084 if( sqlite3Fts3IsIdChar(*z1) ){
124085 z2 = &z1[1];
124086 while( sqlite3Fts3IsIdChar(*z2) ) z2++;
124087 }else{
124088 z1++;
124093 *pn = (int)(z2-z1);
124094 return z1;
124097 SQLITE_PRIVATE int sqlite3Fts3InitTokenizer(
124098 Fts3Hash *pHash, /* Tokenizer hash table */
124099 const char *zArg, /* Tokenizer name */
124100 sqlite3_tokenizer **ppTok, /* OUT: Tokenizer (if applicable) */
124101 char **pzErr /* OUT: Set to malloced error message */
124103 int rc;
124104 char *z = (char *)zArg;
124105 int n = 0;
124106 char *zCopy;
124107 char *zEnd; /* Pointer to nul-term of zCopy */
124108 sqlite3_tokenizer_module *m;
124110 zCopy = sqlite3_mprintf("%s", zArg);
124111 if( !zCopy ) return SQLITE_NOMEM;
124112 zEnd = &zCopy[strlen(zCopy)];
124114 z = (char *)sqlite3Fts3NextToken(zCopy, &n);
124115 z[n] = '\0';
124116 sqlite3Fts3Dequote(z);
124118 m = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash,z,(int)strlen(z)+1);
124119 if( !m ){
124120 *pzErr = sqlite3_mprintf("unknown tokenizer: %s", z);
124121 rc = SQLITE_ERROR;
124122 }else{
124123 char const **aArg = 0;
124124 int iArg = 0;
124125 z = &z[n+1];
124126 while( z<zEnd && (NULL!=(z = (char *)sqlite3Fts3NextToken(z, &n))) ){
124127 int nNew = sizeof(char *)*(iArg+1);
124128 char const **aNew = (const char **)sqlite3_realloc((void *)aArg, nNew);
124129 if( !aNew ){
124130 sqlite3_free(zCopy);
124131 sqlite3_free((void *)aArg);
124132 return SQLITE_NOMEM;
124134 aArg = aNew;
124135 aArg[iArg++] = z;
124136 z[n] = '\0';
124137 sqlite3Fts3Dequote(z);
124138 z = &z[n+1];
124140 rc = m->xCreate(iArg, aArg, ppTok);
124141 assert( rc!=SQLITE_OK || *ppTok );
124142 if( rc!=SQLITE_OK ){
124143 *pzErr = sqlite3_mprintf("unknown tokenizer");
124144 }else{
124145 (*ppTok)->pModule = m;
124147 sqlite3_free((void *)aArg);
124150 sqlite3_free(zCopy);
124151 return rc;
124155 #ifdef SQLITE_TEST
124157 /* #include <tcl.h> */
124158 /* #include <string.h> */
124161 ** Implementation of a special SQL scalar function for testing tokenizers
124162 ** designed to be used in concert with the Tcl testing framework. This
124163 ** function must be called with two arguments:
124165 ** SELECT <function-name>(<key-name>, <input-string>);
124166 ** SELECT <function-name>(<key-name>, <pointer>);
124168 ** where <function-name> is the name passed as the second argument
124169 ** to the sqlite3Fts3InitHashTable() function (e.g. 'fts3_tokenizer')
124170 ** concatenated with the string '_test' (e.g. 'fts3_tokenizer_test').
124172 ** The return value is a string that may be interpreted as a Tcl
124173 ** list. For each token in the <input-string>, three elements are
124174 ** added to the returned list. The first is the token position, the
124175 ** second is the token text (folded, stemmed, etc.) and the third is the
124176 ** substring of <input-string> associated with the token. For example,
124177 ** using the built-in "simple" tokenizer:
124179 ** SELECT fts_tokenizer_test('simple', 'I don't see how');
124181 ** will return the string:
124183 ** "{0 i I 1 dont don't 2 see see 3 how how}"
124186 static void testFunc(
124187 sqlite3_context *context,
124188 int argc,
124189 sqlite3_value **argv
124191 Fts3Hash *pHash;
124192 sqlite3_tokenizer_module *p;
124193 sqlite3_tokenizer *pTokenizer = 0;
124194 sqlite3_tokenizer_cursor *pCsr = 0;
124196 const char *zErr = 0;
124198 const char *zName;
124199 int nName;
124200 const char *zInput;
124201 int nInput;
124203 const char *zArg = 0;
124205 const char *zToken;
124206 int nToken;
124207 int iStart;
124208 int iEnd;
124209 int iPos;
124211 Tcl_Obj *pRet;
124213 assert( argc==2 || argc==3 );
124215 nName = sqlite3_value_bytes(argv[0]);
124216 zName = (const char *)sqlite3_value_text(argv[0]);
124217 nInput = sqlite3_value_bytes(argv[argc-1]);
124218 zInput = (const char *)sqlite3_value_text(argv[argc-1]);
124220 if( argc==3 ){
124221 zArg = (const char *)sqlite3_value_text(argv[1]);
124224 pHash = (Fts3Hash *)sqlite3_user_data(context);
124225 p = (sqlite3_tokenizer_module *)sqlite3Fts3HashFind(pHash, zName, nName+1);
124227 if( !p ){
124228 char *zErr = sqlite3_mprintf("unknown tokenizer: %s", zName);
124229 sqlite3_result_error(context, zErr, -1);
124230 sqlite3_free(zErr);
124231 return;
124234 pRet = Tcl_NewObj();
124235 Tcl_IncrRefCount(pRet);
124237 if( SQLITE_OK!=p->xCreate(zArg ? 1 : 0, &zArg, &pTokenizer) ){
124238 zErr = "error in xCreate()";
124239 goto finish;
124241 pTokenizer->pModule = p;
124242 if( SQLITE_OK!=p->xOpen(pTokenizer, zInput, nInput, &pCsr) ){
124243 zErr = "error in xOpen()";
124244 goto finish;
124246 pCsr->pTokenizer = pTokenizer;
124248 while( SQLITE_OK==p->xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos) ){
124249 Tcl_ListObjAppendElement(0, pRet, Tcl_NewIntObj(iPos));
124250 Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
124251 zToken = &zInput[iStart];
124252 nToken = iEnd-iStart;
124253 Tcl_ListObjAppendElement(0, pRet, Tcl_NewStringObj(zToken, nToken));
124256 if( SQLITE_OK!=p->xClose(pCsr) ){
124257 zErr = "error in xClose()";
124258 goto finish;
124260 if( SQLITE_OK!=p->xDestroy(pTokenizer) ){
124261 zErr = "error in xDestroy()";
124262 goto finish;
124265 finish:
124266 if( zErr ){
124267 sqlite3_result_error(context, zErr, -1);
124268 }else{
124269 sqlite3_result_text(context, Tcl_GetString(pRet), -1, SQLITE_TRANSIENT);
124271 Tcl_DecrRefCount(pRet);
124274 static
124275 int registerTokenizer(
124276 sqlite3 *db,
124277 char *zName,
124278 const sqlite3_tokenizer_module *p
124280 int rc;
124281 sqlite3_stmt *pStmt;
124282 const char zSql[] = "SELECT fts3_tokenizer(?, ?)";
124284 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
124285 if( rc!=SQLITE_OK ){
124286 return rc;
124289 sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
124290 sqlite3_bind_blob(pStmt, 2, &p, sizeof(p), SQLITE_STATIC);
124291 sqlite3_step(pStmt);
124293 return sqlite3_finalize(pStmt);
124296 static
124297 int queryTokenizer(
124298 sqlite3 *db,
124299 char *zName,
124300 const sqlite3_tokenizer_module **pp
124302 int rc;
124303 sqlite3_stmt *pStmt;
124304 const char zSql[] = "SELECT fts3_tokenizer(?)";
124306 *pp = 0;
124307 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
124308 if( rc!=SQLITE_OK ){
124309 return rc;
124312 sqlite3_bind_text(pStmt, 1, zName, -1, SQLITE_STATIC);
124313 if( SQLITE_ROW==sqlite3_step(pStmt) ){
124314 if( sqlite3_column_type(pStmt, 0)==SQLITE_BLOB ){
124315 memcpy((void *)pp, sqlite3_column_blob(pStmt, 0), sizeof(*pp));
124319 return sqlite3_finalize(pStmt);
124322 SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
124325 ** Implementation of the scalar function fts3_tokenizer_internal_test().
124326 ** This function is used for testing only, it is not included in the
124327 ** build unless SQLITE_TEST is defined.
124329 ** The purpose of this is to test that the fts3_tokenizer() function
124330 ** can be used as designed by the C-code in the queryTokenizer and
124331 ** registerTokenizer() functions above. These two functions are repeated
124332 ** in the README.tokenizer file as an example, so it is important to
124333 ** test them.
124335 ** To run the tests, evaluate the fts3_tokenizer_internal_test() scalar
124336 ** function with no arguments. An assert() will fail if a problem is
124337 ** detected. i.e.:
124339 ** SELECT fts3_tokenizer_internal_test();
124342 static void intTestFunc(
124343 sqlite3_context *context,
124344 int argc,
124345 sqlite3_value **argv
124347 int rc;
124348 const sqlite3_tokenizer_module *p1;
124349 const sqlite3_tokenizer_module *p2;
124350 sqlite3 *db = (sqlite3 *)sqlite3_user_data(context);
124352 UNUSED_PARAMETER(argc);
124353 UNUSED_PARAMETER(argv);
124355 /* Test the query function */
124356 sqlite3Fts3SimpleTokenizerModule(&p1);
124357 rc = queryTokenizer(db, "simple", &p2);
124358 assert( rc==SQLITE_OK );
124359 assert( p1==p2 );
124360 rc = queryTokenizer(db, "nosuchtokenizer", &p2);
124361 assert( rc==SQLITE_ERROR );
124362 assert( p2==0 );
124363 assert( 0==strcmp(sqlite3_errmsg(db), "unknown tokenizer: nosuchtokenizer") );
124365 /* Test the storage function */
124366 rc = registerTokenizer(db, "nosuchtokenizer", p1);
124367 assert( rc==SQLITE_OK );
124368 rc = queryTokenizer(db, "nosuchtokenizer", &p2);
124369 assert( rc==SQLITE_OK );
124370 assert( p2==p1 );
124372 sqlite3_result_text(context, "ok", -1, SQLITE_STATIC);
124375 #endif
124378 ** Set up SQL objects in database db used to access the contents of
124379 ** the hash table pointed to by argument pHash. The hash table must
124380 ** been initialised to use string keys, and to take a private copy
124381 ** of the key when a value is inserted. i.e. by a call similar to:
124383 ** sqlite3Fts3HashInit(pHash, FTS3_HASH_STRING, 1);
124385 ** This function adds a scalar function (see header comment above
124386 ** scalarFunc() in this file for details) and, if ENABLE_TABLE is
124387 ** defined at compilation time, a temporary virtual table (see header
124388 ** comment above struct HashTableVtab) to the database schema. Both
124389 ** provide read/write access to the contents of *pHash.
124391 ** The third argument to this function, zName, is used as the name
124392 ** of both the scalar and, if created, the virtual table.
124394 SQLITE_PRIVATE int sqlite3Fts3InitHashTable(
124395 sqlite3 *db,
124396 Fts3Hash *pHash,
124397 const char *zName
124399 int rc = SQLITE_OK;
124400 void *p = (void *)pHash;
124401 const int any = SQLITE_ANY;
124403 #ifdef SQLITE_TEST
124404 char *zTest = 0;
124405 char *zTest2 = 0;
124406 void *pdb = (void *)db;
124407 zTest = sqlite3_mprintf("%s_test", zName);
124408 zTest2 = sqlite3_mprintf("%s_internal_test", zName);
124409 if( !zTest || !zTest2 ){
124410 rc = SQLITE_NOMEM;
124412 #endif
124414 if( SQLITE_OK==rc ){
124415 rc = sqlite3_create_function(db, zName, 1, any, p, scalarFunc, 0, 0);
124417 if( SQLITE_OK==rc ){
124418 rc = sqlite3_create_function(db, zName, 2, any, p, scalarFunc, 0, 0);
124420 #ifdef SQLITE_TEST
124421 if( SQLITE_OK==rc ){
124422 rc = sqlite3_create_function(db, zTest, 2, any, p, testFunc, 0, 0);
124424 if( SQLITE_OK==rc ){
124425 rc = sqlite3_create_function(db, zTest, 3, any, p, testFunc, 0, 0);
124427 if( SQLITE_OK==rc ){
124428 rc = sqlite3_create_function(db, zTest2, 0, any, pdb, intTestFunc, 0, 0);
124430 #endif
124432 #ifdef SQLITE_TEST
124433 sqlite3_free(zTest);
124434 sqlite3_free(zTest2);
124435 #endif
124437 return rc;
124440 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
124442 /************** End of fts3_tokenizer.c **************************************/
124443 /************** Begin file fts3_tokenizer1.c *********************************/
124445 ** 2006 Oct 10
124447 ** The author disclaims copyright to this source code. In place of
124448 ** a legal notice, here is a blessing:
124450 ** May you do good and not evil.
124451 ** May you find forgiveness for yourself and forgive others.
124452 ** May you share freely, never taking more than you give.
124454 ******************************************************************************
124456 ** Implementation of the "simple" full-text-search tokenizer.
124460 ** The code in this file is only compiled if:
124462 ** * The FTS3 module is being built as an extension
124463 ** (in which case SQLITE_CORE is not defined), or
124465 ** * The FTS3 module is being built into the core of
124466 ** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
124468 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
124470 /* #include <assert.h> */
124471 /* #include <stdlib.h> */
124472 /* #include <stdio.h> */
124473 /* #include <string.h> */
124476 typedef struct simple_tokenizer {
124477 sqlite3_tokenizer base;
124478 char delim[128]; /* flag ASCII delimiters */
124479 } simple_tokenizer;
124481 typedef struct simple_tokenizer_cursor {
124482 sqlite3_tokenizer_cursor base;
124483 const char *pInput; /* input we are tokenizing */
124484 int nBytes; /* size of the input */
124485 int iOffset; /* current position in pInput */
124486 int iToken; /* index of next token to be returned */
124487 char *pToken; /* storage for current token */
124488 int nTokenAllocated; /* space allocated to zToken buffer */
124489 } simple_tokenizer_cursor;
124492 static int simpleDelim(simple_tokenizer *t, unsigned char c){
124493 return c<0x80 && t->delim[c];
124495 static int fts3_isalnum(int x){
124496 return (x>='0' && x<='9') || (x>='A' && x<='Z') || (x>='a' && x<='z');
124500 ** Create a new tokenizer instance.
124502 static int simpleCreate(
124503 int argc, const char * const *argv,
124504 sqlite3_tokenizer **ppTokenizer
124506 simple_tokenizer *t;
124508 t = (simple_tokenizer *) sqlite3_malloc(sizeof(*t));
124509 if( t==NULL ) return SQLITE_NOMEM;
124510 memset(t, 0, sizeof(*t));
124512 /* TODO(shess) Delimiters need to remain the same from run to run,
124513 ** else we need to reindex. One solution would be a meta-table to
124514 ** track such information in the database, then we'd only want this
124515 ** information on the initial create.
124517 if( argc>1 ){
124518 int i, n = (int)strlen(argv[1]);
124519 for(i=0; i<n; i++){
124520 unsigned char ch = argv[1][i];
124521 /* We explicitly don't support UTF-8 delimiters for now. */
124522 if( ch>=0x80 ){
124523 sqlite3_free(t);
124524 return SQLITE_ERROR;
124526 t->delim[ch] = 1;
124528 } else {
124529 /* Mark non-alphanumeric ASCII characters as delimiters */
124530 int i;
124531 for(i=1; i<0x80; i++){
124532 t->delim[i] = !fts3_isalnum(i) ? -1 : 0;
124536 *ppTokenizer = &t->base;
124537 return SQLITE_OK;
124541 ** Destroy a tokenizer
124543 static int simpleDestroy(sqlite3_tokenizer *pTokenizer){
124544 sqlite3_free(pTokenizer);
124545 return SQLITE_OK;
124549 ** Prepare to begin tokenizing a particular string. The input
124550 ** string to be tokenized is pInput[0..nBytes-1]. A cursor
124551 ** used to incrementally tokenize this string is returned in
124552 ** *ppCursor.
124554 static int simpleOpen(
124555 sqlite3_tokenizer *pTokenizer, /* The tokenizer */
124556 const char *pInput, int nBytes, /* String to be tokenized */
124557 sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */
124559 simple_tokenizer_cursor *c;
124561 UNUSED_PARAMETER(pTokenizer);
124563 c = (simple_tokenizer_cursor *) sqlite3_malloc(sizeof(*c));
124564 if( c==NULL ) return SQLITE_NOMEM;
124566 c->pInput = pInput;
124567 if( pInput==0 ){
124568 c->nBytes = 0;
124569 }else if( nBytes<0 ){
124570 c->nBytes = (int)strlen(pInput);
124571 }else{
124572 c->nBytes = nBytes;
124574 c->iOffset = 0; /* start tokenizing at the beginning */
124575 c->iToken = 0;
124576 c->pToken = NULL; /* no space allocated, yet. */
124577 c->nTokenAllocated = 0;
124579 *ppCursor = &c->base;
124580 return SQLITE_OK;
124584 ** Close a tokenization cursor previously opened by a call to
124585 ** simpleOpen() above.
124587 static int simpleClose(sqlite3_tokenizer_cursor *pCursor){
124588 simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
124589 sqlite3_free(c->pToken);
124590 sqlite3_free(c);
124591 return SQLITE_OK;
124595 ** Extract the next token from a tokenization cursor. The cursor must
124596 ** have been opened by a prior call to simpleOpen().
124598 static int simpleNext(
124599 sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by simpleOpen */
124600 const char **ppToken, /* OUT: *ppToken is the token text */
124601 int *pnBytes, /* OUT: Number of bytes in token */
124602 int *piStartOffset, /* OUT: Starting offset of token */
124603 int *piEndOffset, /* OUT: Ending offset of token */
124604 int *piPosition /* OUT: Position integer of token */
124606 simple_tokenizer_cursor *c = (simple_tokenizer_cursor *) pCursor;
124607 simple_tokenizer *t = (simple_tokenizer *) pCursor->pTokenizer;
124608 unsigned char *p = (unsigned char *)c->pInput;
124610 while( c->iOffset<c->nBytes ){
124611 int iStartOffset;
124613 /* Scan past delimiter characters */
124614 while( c->iOffset<c->nBytes && simpleDelim(t, p[c->iOffset]) ){
124615 c->iOffset++;
124618 /* Count non-delimiter characters. */
124619 iStartOffset = c->iOffset;
124620 while( c->iOffset<c->nBytes && !simpleDelim(t, p[c->iOffset]) ){
124621 c->iOffset++;
124624 if( c->iOffset>iStartOffset ){
124625 int i, n = c->iOffset-iStartOffset;
124626 if( n>c->nTokenAllocated ){
124627 char *pNew;
124628 c->nTokenAllocated = n+20;
124629 pNew = sqlite3_realloc(c->pToken, c->nTokenAllocated);
124630 if( !pNew ) return SQLITE_NOMEM;
124631 c->pToken = pNew;
124633 for(i=0; i<n; i++){
124634 /* TODO(shess) This needs expansion to handle UTF-8
124635 ** case-insensitivity.
124637 unsigned char ch = p[iStartOffset+i];
124638 c->pToken[i] = (char)((ch>='A' && ch<='Z') ? ch-'A'+'a' : ch);
124640 *ppToken = c->pToken;
124641 *pnBytes = n;
124642 *piStartOffset = iStartOffset;
124643 *piEndOffset = c->iOffset;
124644 *piPosition = c->iToken++;
124646 return SQLITE_OK;
124649 return SQLITE_DONE;
124653 ** The set of routines that implement the simple tokenizer
124655 static const sqlite3_tokenizer_module simpleTokenizerModule = {
124657 simpleCreate,
124658 simpleDestroy,
124659 simpleOpen,
124660 simpleClose,
124661 simpleNext,
124665 ** Allocate a new simple tokenizer. Return a pointer to the new
124666 ** tokenizer in *ppModule
124668 SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(
124669 sqlite3_tokenizer_module const**ppModule
124671 *ppModule = &simpleTokenizerModule;
124674 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
124676 /************** End of fts3_tokenizer1.c *************************************/
124677 /************** Begin file fts3_write.c **************************************/
124679 ** 2009 Oct 23
124681 ** The author disclaims copyright to this source code. In place of
124682 ** a legal notice, here is a blessing:
124684 ** May you do good and not evil.
124685 ** May you find forgiveness for yourself and forgive others.
124686 ** May you share freely, never taking more than you give.
124688 ******************************************************************************
124690 ** This file is part of the SQLite FTS3 extension module. Specifically,
124691 ** this file contains code to insert, update and delete rows from FTS3
124692 ** tables. It also contains code to merge FTS3 b-tree segments. Some
124693 ** of the sub-routines used to merge segments are also used by the query
124694 ** code in fts3.c.
124697 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
124699 /* #include <string.h> */
124700 /* #include <assert.h> */
124701 /* #include <stdlib.h> */
124704 ** When full-text index nodes are loaded from disk, the buffer that they
124705 ** are loaded into has the following number of bytes of padding at the end
124706 ** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer
124707 ** of 920 bytes is allocated for it.
124709 ** This means that if we have a pointer into a buffer containing node data,
124710 ** it is always safe to read up to two varints from it without risking an
124711 ** overread, even if the node data is corrupted.
124713 #define FTS3_NODE_PADDING (FTS3_VARINT_MAX*2)
124716 ** Under certain circumstances, b-tree nodes (doclists) can be loaded into
124717 ** memory incrementally instead of all at once. This can be a big performance
124718 ** win (reduced IO and CPU) if SQLite stops calling the virtual table xNext()
124719 ** method before retrieving all query results (as may happen, for example,
124720 ** if a query has a LIMIT clause).
124722 ** Incremental loading is used for b-tree nodes FTS3_NODE_CHUNK_THRESHOLD
124723 ** bytes and larger. Nodes are loaded in chunks of FTS3_NODE_CHUNKSIZE bytes.
124724 ** The code is written so that the hard lower-limit for each of these values
124725 ** is 1. Clearly such small values would be inefficient, but can be useful
124726 ** for testing purposes.
124728 ** If this module is built with SQLITE_TEST defined, these constants may
124729 ** be overridden at runtime for testing purposes. File fts3_test.c contains
124730 ** a Tcl interface to read and write the values.
124732 #ifdef SQLITE_TEST
124733 int test_fts3_node_chunksize = (4*1024);
124734 int test_fts3_node_chunk_threshold = (4*1024)*4;
124735 # define FTS3_NODE_CHUNKSIZE test_fts3_node_chunksize
124736 # define FTS3_NODE_CHUNK_THRESHOLD test_fts3_node_chunk_threshold
124737 #else
124738 # define FTS3_NODE_CHUNKSIZE (4*1024)
124739 # define FTS3_NODE_CHUNK_THRESHOLD (FTS3_NODE_CHUNKSIZE*4)
124740 #endif
124742 typedef struct PendingList PendingList;
124743 typedef struct SegmentNode SegmentNode;
124744 typedef struct SegmentWriter SegmentWriter;
124747 ** An instance of the following data structure is used to build doclists
124748 ** incrementally. See function fts3PendingListAppend() for details.
124750 struct PendingList {
124751 int nData;
124752 char *aData;
124753 int nSpace;
124754 sqlite3_int64 iLastDocid;
124755 sqlite3_int64 iLastCol;
124756 sqlite3_int64 iLastPos;
124761 ** Each cursor has a (possibly empty) linked list of the following objects.
124763 struct Fts3DeferredToken {
124764 Fts3PhraseToken *pToken; /* Pointer to corresponding expr token */
124765 int iCol; /* Column token must occur in */
124766 Fts3DeferredToken *pNext; /* Next in list of deferred tokens */
124767 PendingList *pList; /* Doclist is assembled here */
124771 ** An instance of this structure is used to iterate through the terms on
124772 ** a contiguous set of segment b-tree leaf nodes. Although the details of
124773 ** this structure are only manipulated by code in this file, opaque handles
124774 ** of type Fts3SegReader* are also used by code in fts3.c to iterate through
124775 ** terms when querying the full-text index. See functions:
124777 ** sqlite3Fts3SegReaderNew()
124778 ** sqlite3Fts3SegReaderFree()
124779 ** sqlite3Fts3SegReaderIterate()
124781 ** Methods used to manipulate Fts3SegReader structures:
124783 ** fts3SegReaderNext()
124784 ** fts3SegReaderFirstDocid()
124785 ** fts3SegReaderNextDocid()
124787 struct Fts3SegReader {
124788 int iIdx; /* Index within level, or 0x7FFFFFFF for PT */
124790 sqlite3_int64 iStartBlock; /* Rowid of first leaf block to traverse */
124791 sqlite3_int64 iLeafEndBlock; /* Rowid of final leaf block to traverse */
124792 sqlite3_int64 iEndBlock; /* Rowid of final block in segment (or 0) */
124793 sqlite3_int64 iCurrentBlock; /* Current leaf block (or 0) */
124795 char *aNode; /* Pointer to node data (or NULL) */
124796 int nNode; /* Size of buffer at aNode (or 0) */
124797 int nPopulate; /* If >0, bytes of buffer aNode[] loaded */
124798 sqlite3_blob *pBlob; /* If not NULL, blob handle to read node */
124800 Fts3HashElem **ppNextElem;
124802 /* Variables set by fts3SegReaderNext(). These may be read directly
124803 ** by the caller. They are valid from the time SegmentReaderNew() returns
124804 ** until SegmentReaderNext() returns something other than SQLITE_OK
124805 ** (i.e. SQLITE_DONE).
124807 int nTerm; /* Number of bytes in current term */
124808 char *zTerm; /* Pointer to current term */
124809 int nTermAlloc; /* Allocated size of zTerm buffer */
124810 char *aDoclist; /* Pointer to doclist of current entry */
124811 int nDoclist; /* Size of doclist in current entry */
124813 /* The following variables are used by fts3SegReaderNextDocid() to iterate
124814 ** through the current doclist (aDoclist/nDoclist).
124816 char *pOffsetList;
124817 int nOffsetList; /* For descending pending seg-readers only */
124818 sqlite3_int64 iDocid;
124821 #define fts3SegReaderIsPending(p) ((p)->ppNextElem!=0)
124822 #define fts3SegReaderIsRootOnly(p) ((p)->aNode==(char *)&(p)[1])
124825 ** An instance of this structure is used to create a segment b-tree in the
124826 ** database. The internal details of this type are only accessed by the
124827 ** following functions:
124829 ** fts3SegWriterAdd()
124830 ** fts3SegWriterFlush()
124831 ** fts3SegWriterFree()
124833 struct SegmentWriter {
124834 SegmentNode *pTree; /* Pointer to interior tree structure */
124835 sqlite3_int64 iFirst; /* First slot in %_segments written */
124836 sqlite3_int64 iFree; /* Next free slot in %_segments */
124837 char *zTerm; /* Pointer to previous term buffer */
124838 int nTerm; /* Number of bytes in zTerm */
124839 int nMalloc; /* Size of malloc'd buffer at zMalloc */
124840 char *zMalloc; /* Malloc'd space (possibly) used for zTerm */
124841 int nSize; /* Size of allocation at aData */
124842 int nData; /* Bytes of data in aData */
124843 char *aData; /* Pointer to block from malloc() */
124847 ** Type SegmentNode is used by the following three functions to create
124848 ** the interior part of the segment b+-tree structures (everything except
124849 ** the leaf nodes). These functions and type are only ever used by code
124850 ** within the fts3SegWriterXXX() family of functions described above.
124852 ** fts3NodeAddTerm()
124853 ** fts3NodeWrite()
124854 ** fts3NodeFree()
124856 ** When a b+tree is written to the database (either as a result of a merge
124857 ** or the pending-terms table being flushed), leaves are written into the
124858 ** database file as soon as they are completely populated. The interior of
124859 ** the tree is assembled in memory and written out only once all leaves have
124860 ** been populated and stored. This is Ok, as the b+-tree fanout is usually
124861 ** very large, meaning that the interior of the tree consumes relatively
124862 ** little memory.
124864 struct SegmentNode {
124865 SegmentNode *pParent; /* Parent node (or NULL for root node) */
124866 SegmentNode *pRight; /* Pointer to right-sibling */
124867 SegmentNode *pLeftmost; /* Pointer to left-most node of this depth */
124868 int nEntry; /* Number of terms written to node so far */
124869 char *zTerm; /* Pointer to previous term buffer */
124870 int nTerm; /* Number of bytes in zTerm */
124871 int nMalloc; /* Size of malloc'd buffer at zMalloc */
124872 char *zMalloc; /* Malloc'd space (possibly) used for zTerm */
124873 int nData; /* Bytes of valid data so far */
124874 char *aData; /* Node data */
124878 ** Valid values for the second argument to fts3SqlStmt().
124880 #define SQL_DELETE_CONTENT 0
124881 #define SQL_IS_EMPTY 1
124882 #define SQL_DELETE_ALL_CONTENT 2
124883 #define SQL_DELETE_ALL_SEGMENTS 3
124884 #define SQL_DELETE_ALL_SEGDIR 4
124885 #define SQL_DELETE_ALL_DOCSIZE 5
124886 #define SQL_DELETE_ALL_STAT 6
124887 #define SQL_SELECT_CONTENT_BY_ROWID 7
124888 #define SQL_NEXT_SEGMENT_INDEX 8
124889 #define SQL_INSERT_SEGMENTS 9
124890 #define SQL_NEXT_SEGMENTS_ID 10
124891 #define SQL_INSERT_SEGDIR 11
124892 #define SQL_SELECT_LEVEL 12
124893 #define SQL_SELECT_LEVEL_RANGE 13
124894 #define SQL_SELECT_LEVEL_COUNT 14
124895 #define SQL_SELECT_SEGDIR_MAX_LEVEL 15
124896 #define SQL_DELETE_SEGDIR_LEVEL 16
124897 #define SQL_DELETE_SEGMENTS_RANGE 17
124898 #define SQL_CONTENT_INSERT 18
124899 #define SQL_DELETE_DOCSIZE 19
124900 #define SQL_REPLACE_DOCSIZE 20
124901 #define SQL_SELECT_DOCSIZE 21
124902 #define SQL_SELECT_DOCTOTAL 22
124903 #define SQL_REPLACE_DOCTOTAL 23
124905 #define SQL_SELECT_ALL_PREFIX_LEVEL 24
124906 #define SQL_DELETE_ALL_TERMS_SEGDIR 25
124908 #define SQL_DELETE_SEGDIR_RANGE 26
124911 ** This function is used to obtain an SQLite prepared statement handle
124912 ** for the statement identified by the second argument. If successful,
124913 ** *pp is set to the requested statement handle and SQLITE_OK returned.
124914 ** Otherwise, an SQLite error code is returned and *pp is set to 0.
124916 ** If argument apVal is not NULL, then it must point to an array with
124917 ** at least as many entries as the requested statement has bound
124918 ** parameters. The values are bound to the statements parameters before
124919 ** returning.
124921 static int fts3SqlStmt(
124922 Fts3Table *p, /* Virtual table handle */
124923 int eStmt, /* One of the SQL_XXX constants above */
124924 sqlite3_stmt **pp, /* OUT: Statement handle */
124925 sqlite3_value **apVal /* Values to bind to statement */
124927 const char *azSql[] = {
124928 /* 0 */ "DELETE FROM %Q.'%q_content' WHERE rowid = ?",
124929 /* 1 */ "SELECT NOT EXISTS(SELECT docid FROM %Q.'%q_content' WHERE rowid!=?)",
124930 /* 2 */ "DELETE FROM %Q.'%q_content'",
124931 /* 3 */ "DELETE FROM %Q.'%q_segments'",
124932 /* 4 */ "DELETE FROM %Q.'%q_segdir'",
124933 /* 5 */ "DELETE FROM %Q.'%q_docsize'",
124934 /* 6 */ "DELETE FROM %Q.'%q_stat'",
124935 /* 7 */ "SELECT %s WHERE rowid=?",
124936 /* 8 */ "SELECT (SELECT max(idx) FROM %Q.'%q_segdir' WHERE level = ?) + 1",
124937 /* 9 */ "INSERT INTO %Q.'%q_segments'(blockid, block) VALUES(?, ?)",
124938 /* 10 */ "SELECT coalesce((SELECT max(blockid) FROM %Q.'%q_segments') + 1, 1)",
124939 /* 11 */ "INSERT INTO %Q.'%q_segdir' VALUES(?,?,?,?,?,?)",
124941 /* Return segments in order from oldest to newest.*/
124942 /* 12 */ "SELECT idx, start_block, leaves_end_block, end_block, root "
124943 "FROM %Q.'%q_segdir' WHERE level = ? ORDER BY idx ASC",
124944 /* 13 */ "SELECT idx, start_block, leaves_end_block, end_block, root "
124945 "FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?"
124946 "ORDER BY level DESC, idx ASC",
124948 /* 14 */ "SELECT count(*) FROM %Q.'%q_segdir' WHERE level = ?",
124949 /* 15 */ "SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?",
124951 /* 16 */ "DELETE FROM %Q.'%q_segdir' WHERE level = ?",
124952 /* 17 */ "DELETE FROM %Q.'%q_segments' WHERE blockid BETWEEN ? AND ?",
124953 /* 18 */ "INSERT INTO %Q.'%q_content' VALUES(%s)",
124954 /* 19 */ "DELETE FROM %Q.'%q_docsize' WHERE docid = ?",
124955 /* 20 */ "REPLACE INTO %Q.'%q_docsize' VALUES(?,?)",
124956 /* 21 */ "SELECT size FROM %Q.'%q_docsize' WHERE docid=?",
124957 /* 22 */ "SELECT value FROM %Q.'%q_stat' WHERE id=0",
124958 /* 23 */ "REPLACE INTO %Q.'%q_stat' VALUES(0,?)",
124959 /* 24 */ "",
124960 /* 25 */ "",
124962 /* 26 */ "DELETE FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?",
124965 int rc = SQLITE_OK;
124966 sqlite3_stmt *pStmt;
124968 assert( SizeofArray(azSql)==SizeofArray(p->aStmt) );
124969 assert( eStmt<SizeofArray(azSql) && eStmt>=0 );
124971 pStmt = p->aStmt[eStmt];
124972 if( !pStmt ){
124973 char *zSql;
124974 if( eStmt==SQL_CONTENT_INSERT ){
124975 zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName, p->zWriteExprlist);
124976 }else if( eStmt==SQL_SELECT_CONTENT_BY_ROWID ){
124977 zSql = sqlite3_mprintf(azSql[eStmt], p->zReadExprlist);
124978 }else{
124979 zSql = sqlite3_mprintf(azSql[eStmt], p->zDb, p->zName);
124981 if( !zSql ){
124982 rc = SQLITE_NOMEM;
124983 }else{
124984 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, NULL);
124985 sqlite3_free(zSql);
124986 assert( rc==SQLITE_OK || pStmt==0 );
124987 p->aStmt[eStmt] = pStmt;
124990 if( apVal ){
124991 int i;
124992 int nParam = sqlite3_bind_parameter_count(pStmt);
124993 for(i=0; rc==SQLITE_OK && i<nParam; i++){
124994 rc = sqlite3_bind_value(pStmt, i+1, apVal[i]);
124997 *pp = pStmt;
124998 return rc;
125001 static int fts3SelectDocsize(
125002 Fts3Table *pTab, /* FTS3 table handle */
125003 int eStmt, /* Either SQL_SELECT_DOCSIZE or DOCTOTAL */
125004 sqlite3_int64 iDocid, /* Docid to bind for SQL_SELECT_DOCSIZE */
125005 sqlite3_stmt **ppStmt /* OUT: Statement handle */
125007 sqlite3_stmt *pStmt = 0; /* Statement requested from fts3SqlStmt() */
125008 int rc; /* Return code */
125010 assert( eStmt==SQL_SELECT_DOCSIZE || eStmt==SQL_SELECT_DOCTOTAL );
125012 rc = fts3SqlStmt(pTab, eStmt, &pStmt, 0);
125013 if( rc==SQLITE_OK ){
125014 if( eStmt==SQL_SELECT_DOCSIZE ){
125015 sqlite3_bind_int64(pStmt, 1, iDocid);
125017 rc = sqlite3_step(pStmt);
125018 if( rc!=SQLITE_ROW || sqlite3_column_type(pStmt, 0)!=SQLITE_BLOB ){
125019 rc = sqlite3_reset(pStmt);
125020 if( rc==SQLITE_OK ) rc = FTS_CORRUPT_VTAB;
125021 pStmt = 0;
125022 }else{
125023 rc = SQLITE_OK;
125027 *ppStmt = pStmt;
125028 return rc;
125031 SQLITE_PRIVATE int sqlite3Fts3SelectDoctotal(
125032 Fts3Table *pTab, /* Fts3 table handle */
125033 sqlite3_stmt **ppStmt /* OUT: Statement handle */
125035 return fts3SelectDocsize(pTab, SQL_SELECT_DOCTOTAL, 0, ppStmt);
125038 SQLITE_PRIVATE int sqlite3Fts3SelectDocsize(
125039 Fts3Table *pTab, /* Fts3 table handle */
125040 sqlite3_int64 iDocid, /* Docid to read size data for */
125041 sqlite3_stmt **ppStmt /* OUT: Statement handle */
125043 return fts3SelectDocsize(pTab, SQL_SELECT_DOCSIZE, iDocid, ppStmt);
125047 ** Similar to fts3SqlStmt(). Except, after binding the parameters in
125048 ** array apVal[] to the SQL statement identified by eStmt, the statement
125049 ** is executed.
125051 ** Returns SQLITE_OK if the statement is successfully executed, or an
125052 ** SQLite error code otherwise.
125054 static void fts3SqlExec(
125055 int *pRC, /* Result code */
125056 Fts3Table *p, /* The FTS3 table */
125057 int eStmt, /* Index of statement to evaluate */
125058 sqlite3_value **apVal /* Parameters to bind */
125060 sqlite3_stmt *pStmt;
125061 int rc;
125062 if( *pRC ) return;
125063 rc = fts3SqlStmt(p, eStmt, &pStmt, apVal);
125064 if( rc==SQLITE_OK ){
125065 sqlite3_step(pStmt);
125066 rc = sqlite3_reset(pStmt);
125068 *pRC = rc;
125073 ** This function ensures that the caller has obtained a shared-cache
125074 ** table-lock on the %_content table. This is required before reading
125075 ** data from the fts3 table. If this lock is not acquired first, then
125076 ** the caller may end up holding read-locks on the %_segments and %_segdir
125077 ** tables, but no read-lock on the %_content table. If this happens
125078 ** a second connection will be able to write to the fts3 table, but
125079 ** attempting to commit those writes might return SQLITE_LOCKED or
125080 ** SQLITE_LOCKED_SHAREDCACHE (because the commit attempts to obtain
125081 ** write-locks on the %_segments and %_segdir ** tables).
125083 ** We try to avoid this because if FTS3 returns any error when committing
125084 ** a transaction, the whole transaction will be rolled back. And this is
125085 ** not what users expect when they get SQLITE_LOCKED_SHAREDCACHE. It can
125086 ** still happen if the user reads data directly from the %_segments or
125087 ** %_segdir tables instead of going through FTS3 though.
125089 ** This reasoning does not apply to a content=xxx table.
125091 SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *p){
125092 int rc; /* Return code */
125093 sqlite3_stmt *pStmt; /* Statement used to obtain lock */
125095 if( p->zContentTbl==0 ){
125096 rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pStmt, 0);
125097 if( rc==SQLITE_OK ){
125098 sqlite3_bind_null(pStmt, 1);
125099 sqlite3_step(pStmt);
125100 rc = sqlite3_reset(pStmt);
125102 }else{
125103 rc = SQLITE_OK;
125106 return rc;
125110 ** Set *ppStmt to a statement handle that may be used to iterate through
125111 ** all rows in the %_segdir table, from oldest to newest. If successful,
125112 ** return SQLITE_OK. If an error occurs while preparing the statement,
125113 ** return an SQLite error code.
125115 ** There is only ever one instance of this SQL statement compiled for
125116 ** each FTS3 table.
125118 ** The statement returns the following columns from the %_segdir table:
125120 ** 0: idx
125121 ** 1: start_block
125122 ** 2: leaves_end_block
125123 ** 3: end_block
125124 ** 4: root
125126 SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(
125127 Fts3Table *p, /* FTS3 table */
125128 int iIndex, /* Index for p->aIndex[] */
125129 int iLevel, /* Level to select */
125130 sqlite3_stmt **ppStmt /* OUT: Compiled statement */
125132 int rc;
125133 sqlite3_stmt *pStmt = 0;
125135 assert( iLevel==FTS3_SEGCURSOR_ALL || iLevel>=0 );
125136 assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
125137 assert( iIndex>=0 && iIndex<p->nIndex );
125139 if( iLevel<0 ){
125140 /* "SELECT * FROM %_segdir WHERE level BETWEEN ? AND ? ORDER BY ..." */
125141 rc = fts3SqlStmt(p, SQL_SELECT_LEVEL_RANGE, &pStmt, 0);
125142 if( rc==SQLITE_OK ){
125143 sqlite3_bind_int(pStmt, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
125144 sqlite3_bind_int(pStmt, 2, (iIndex+1)*FTS3_SEGDIR_MAXLEVEL-1);
125146 }else{
125147 /* "SELECT * FROM %_segdir WHERE level = ? ORDER BY ..." */
125148 rc = fts3SqlStmt(p, SQL_SELECT_LEVEL, &pStmt, 0);
125149 if( rc==SQLITE_OK ){
125150 sqlite3_bind_int(pStmt, 1, iLevel+iIndex*FTS3_SEGDIR_MAXLEVEL);
125153 *ppStmt = pStmt;
125154 return rc;
125159 ** Append a single varint to a PendingList buffer. SQLITE_OK is returned
125160 ** if successful, or an SQLite error code otherwise.
125162 ** This function also serves to allocate the PendingList structure itself.
125163 ** For example, to create a new PendingList structure containing two
125164 ** varints:
125166 ** PendingList *p = 0;
125167 ** fts3PendingListAppendVarint(&p, 1);
125168 ** fts3PendingListAppendVarint(&p, 2);
125170 static int fts3PendingListAppendVarint(
125171 PendingList **pp, /* IN/OUT: Pointer to PendingList struct */
125172 sqlite3_int64 i /* Value to append to data */
125174 PendingList *p = *pp;
125176 /* Allocate or grow the PendingList as required. */
125177 if( !p ){
125178 p = sqlite3_malloc(sizeof(*p) + 100);
125179 if( !p ){
125180 return SQLITE_NOMEM;
125182 p->nSpace = 100;
125183 p->aData = (char *)&p[1];
125184 p->nData = 0;
125186 else if( p->nData+FTS3_VARINT_MAX+1>p->nSpace ){
125187 int nNew = p->nSpace * 2;
125188 p = sqlite3_realloc(p, sizeof(*p) + nNew);
125189 if( !p ){
125190 sqlite3_free(*pp);
125191 *pp = 0;
125192 return SQLITE_NOMEM;
125194 p->nSpace = nNew;
125195 p->aData = (char *)&p[1];
125198 /* Append the new serialized varint to the end of the list. */
125199 p->nData += sqlite3Fts3PutVarint(&p->aData[p->nData], i);
125200 p->aData[p->nData] = '\0';
125201 *pp = p;
125202 return SQLITE_OK;
125206 ** Add a docid/column/position entry to a PendingList structure. Non-zero
125207 ** is returned if the structure is sqlite3_realloced as part of adding
125208 ** the entry. Otherwise, zero.
125210 ** If an OOM error occurs, *pRc is set to SQLITE_NOMEM before returning.
125211 ** Zero is always returned in this case. Otherwise, if no OOM error occurs,
125212 ** it is set to SQLITE_OK.
125214 static int fts3PendingListAppend(
125215 PendingList **pp, /* IN/OUT: PendingList structure */
125216 sqlite3_int64 iDocid, /* Docid for entry to add */
125217 sqlite3_int64 iCol, /* Column for entry to add */
125218 sqlite3_int64 iPos, /* Position of term for entry to add */
125219 int *pRc /* OUT: Return code */
125221 PendingList *p = *pp;
125222 int rc = SQLITE_OK;
125224 assert( !p || p->iLastDocid<=iDocid );
125226 if( !p || p->iLastDocid!=iDocid ){
125227 sqlite3_int64 iDelta = iDocid - (p ? p->iLastDocid : 0);
125228 if( p ){
125229 assert( p->nData<p->nSpace );
125230 assert( p->aData[p->nData]==0 );
125231 p->nData++;
125233 if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iDelta)) ){
125234 goto pendinglistappend_out;
125236 p->iLastCol = -1;
125237 p->iLastPos = 0;
125238 p->iLastDocid = iDocid;
125240 if( iCol>0 && p->iLastCol!=iCol ){
125241 if( SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, 1))
125242 || SQLITE_OK!=(rc = fts3PendingListAppendVarint(&p, iCol))
125244 goto pendinglistappend_out;
125246 p->iLastCol = iCol;
125247 p->iLastPos = 0;
125249 if( iCol>=0 ){
125250 assert( iPos>p->iLastPos || (iPos==0 && p->iLastPos==0) );
125251 rc = fts3PendingListAppendVarint(&p, 2+iPos-p->iLastPos);
125252 if( rc==SQLITE_OK ){
125253 p->iLastPos = iPos;
125257 pendinglistappend_out:
125258 *pRc = rc;
125259 if( p!=*pp ){
125260 *pp = p;
125261 return 1;
125263 return 0;
125267 ** Free a PendingList object allocated by fts3PendingListAppend().
125269 static void fts3PendingListDelete(PendingList *pList){
125270 sqlite3_free(pList);
125274 ** Add an entry to one of the pending-terms hash tables.
125276 static int fts3PendingTermsAddOne(
125277 Fts3Table *p,
125278 int iCol,
125279 int iPos,
125280 Fts3Hash *pHash, /* Pending terms hash table to add entry to */
125281 const char *zToken,
125282 int nToken
125284 PendingList *pList;
125285 int rc = SQLITE_OK;
125287 pList = (PendingList *)fts3HashFind(pHash, zToken, nToken);
125288 if( pList ){
125289 p->nPendingData -= (pList->nData + nToken + sizeof(Fts3HashElem));
125291 if( fts3PendingListAppend(&pList, p->iPrevDocid, iCol, iPos, &rc) ){
125292 if( pList==fts3HashInsert(pHash, zToken, nToken, pList) ){
125293 /* Malloc failed while inserting the new entry. This can only
125294 ** happen if there was no previous entry for this token.
125296 assert( 0==fts3HashFind(pHash, zToken, nToken) );
125297 sqlite3_free(pList);
125298 rc = SQLITE_NOMEM;
125301 if( rc==SQLITE_OK ){
125302 p->nPendingData += (pList->nData + nToken + sizeof(Fts3HashElem));
125304 return rc;
125308 ** Tokenize the nul-terminated string zText and add all tokens to the
125309 ** pending-terms hash-table. The docid used is that currently stored in
125310 ** p->iPrevDocid, and the column is specified by argument iCol.
125312 ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
125314 static int fts3PendingTermsAdd(
125315 Fts3Table *p, /* Table into which text will be inserted */
125316 const char *zText, /* Text of document to be inserted */
125317 int iCol, /* Column into which text is being inserted */
125318 u32 *pnWord /* OUT: Number of tokens inserted */
125320 int rc;
125321 int iStart;
125322 int iEnd;
125323 int iPos;
125324 int nWord = 0;
125326 char const *zToken;
125327 int nToken;
125329 sqlite3_tokenizer *pTokenizer = p->pTokenizer;
125330 sqlite3_tokenizer_module const *pModule = pTokenizer->pModule;
125331 sqlite3_tokenizer_cursor *pCsr;
125332 int (*xNext)(sqlite3_tokenizer_cursor *pCursor,
125333 const char**,int*,int*,int*,int*);
125335 assert( pTokenizer && pModule );
125337 /* If the user has inserted a NULL value, this function may be called with
125338 ** zText==0. In this case, add zero token entries to the hash table and
125339 ** return early. */
125340 if( zText==0 ){
125341 *pnWord = 0;
125342 return SQLITE_OK;
125345 rc = pModule->xOpen(pTokenizer, zText, -1, &pCsr);
125346 if( rc!=SQLITE_OK ){
125347 return rc;
125349 pCsr->pTokenizer = pTokenizer;
125351 xNext = pModule->xNext;
125352 while( SQLITE_OK==rc
125353 && SQLITE_OK==(rc = xNext(pCsr, &zToken, &nToken, &iStart, &iEnd, &iPos))
125355 int i;
125356 if( iPos>=nWord ) nWord = iPos+1;
125358 /* Positions cannot be negative; we use -1 as a terminator internally.
125359 ** Tokens must have a non-zero length.
125361 if( iPos<0 || !zToken || nToken<=0 ){
125362 rc = SQLITE_ERROR;
125363 break;
125366 /* Add the term to the terms index */
125367 rc = fts3PendingTermsAddOne(
125368 p, iCol, iPos, &p->aIndex[0].hPending, zToken, nToken
125371 /* Add the term to each of the prefix indexes that it is not too
125372 ** short for. */
125373 for(i=1; rc==SQLITE_OK && i<p->nIndex; i++){
125374 struct Fts3Index *pIndex = &p->aIndex[i];
125375 if( nToken<pIndex->nPrefix ) continue;
125376 rc = fts3PendingTermsAddOne(
125377 p, iCol, iPos, &pIndex->hPending, zToken, pIndex->nPrefix
125382 pModule->xClose(pCsr);
125383 *pnWord = nWord;
125384 return (rc==SQLITE_DONE ? SQLITE_OK : rc);
125388 ** Calling this function indicates that subsequent calls to
125389 ** fts3PendingTermsAdd() are to add term/position-list pairs for the
125390 ** contents of the document with docid iDocid.
125392 static int fts3PendingTermsDocid(Fts3Table *p, sqlite_int64 iDocid){
125393 /* TODO(shess) Explore whether partially flushing the buffer on
125394 ** forced-flush would provide better performance. I suspect that if
125395 ** we ordered the doclists by size and flushed the largest until the
125396 ** buffer was half empty, that would let the less frequent terms
125397 ** generate longer doclists.
125399 if( iDocid<=p->iPrevDocid || p->nPendingData>p->nMaxPendingData ){
125400 int rc = sqlite3Fts3PendingTermsFlush(p);
125401 if( rc!=SQLITE_OK ) return rc;
125403 p->iPrevDocid = iDocid;
125404 return SQLITE_OK;
125408 ** Discard the contents of the pending-terms hash tables.
125410 SQLITE_PRIVATE void sqlite3Fts3PendingTermsClear(Fts3Table *p){
125411 int i;
125412 for(i=0; i<p->nIndex; i++){
125413 Fts3HashElem *pElem;
125414 Fts3Hash *pHash = &p->aIndex[i].hPending;
125415 for(pElem=fts3HashFirst(pHash); pElem; pElem=fts3HashNext(pElem)){
125416 PendingList *pList = (PendingList *)fts3HashData(pElem);
125417 fts3PendingListDelete(pList);
125419 fts3HashClear(pHash);
125421 p->nPendingData = 0;
125425 ** This function is called by the xUpdate() method as part of an INSERT
125426 ** operation. It adds entries for each term in the new record to the
125427 ** pendingTerms hash table.
125429 ** Argument apVal is the same as the similarly named argument passed to
125430 ** fts3InsertData(). Parameter iDocid is the docid of the new row.
125432 static int fts3InsertTerms(Fts3Table *p, sqlite3_value **apVal, u32 *aSz){
125433 int i; /* Iterator variable */
125434 for(i=2; i<p->nColumn+2; i++){
125435 const char *zText = (const char *)sqlite3_value_text(apVal[i]);
125436 int rc = fts3PendingTermsAdd(p, zText, i-2, &aSz[i-2]);
125437 if( rc!=SQLITE_OK ){
125438 return rc;
125440 aSz[p->nColumn] += sqlite3_value_bytes(apVal[i]);
125442 return SQLITE_OK;
125446 ** This function is called by the xUpdate() method for an INSERT operation.
125447 ** The apVal parameter is passed a copy of the apVal argument passed by
125448 ** SQLite to the xUpdate() method. i.e:
125450 ** apVal[0] Not used for INSERT.
125451 ** apVal[1] rowid
125452 ** apVal[2] Left-most user-defined column
125453 ** ...
125454 ** apVal[p->nColumn+1] Right-most user-defined column
125455 ** apVal[p->nColumn+2] Hidden column with same name as table
125456 ** apVal[p->nColumn+3] Hidden "docid" column (alias for rowid)
125458 static int fts3InsertData(
125459 Fts3Table *p, /* Full-text table */
125460 sqlite3_value **apVal, /* Array of values to insert */
125461 sqlite3_int64 *piDocid /* OUT: Docid for row just inserted */
125463 int rc; /* Return code */
125464 sqlite3_stmt *pContentInsert; /* INSERT INTO %_content VALUES(...) */
125466 if( p->zContentTbl ){
125467 sqlite3_value *pRowid = apVal[p->nColumn+3];
125468 if( sqlite3_value_type(pRowid)==SQLITE_NULL ){
125469 pRowid = apVal[1];
125471 if( sqlite3_value_type(pRowid)!=SQLITE_INTEGER ){
125472 return SQLITE_CONSTRAINT;
125474 *piDocid = sqlite3_value_int64(pRowid);
125475 return SQLITE_OK;
125478 /* Locate the statement handle used to insert data into the %_content
125479 ** table. The SQL for this statement is:
125481 ** INSERT INTO %_content VALUES(?, ?, ?, ...)
125483 ** The statement features N '?' variables, where N is the number of user
125484 ** defined columns in the FTS3 table, plus one for the docid field.
125486 rc = fts3SqlStmt(p, SQL_CONTENT_INSERT, &pContentInsert, &apVal[1]);
125487 if( rc!=SQLITE_OK ){
125488 return rc;
125491 /* There is a quirk here. The users INSERT statement may have specified
125492 ** a value for the "rowid" field, for the "docid" field, or for both.
125493 ** Which is a problem, since "rowid" and "docid" are aliases for the
125494 ** same value. For example:
125496 ** INSERT INTO fts3tbl(rowid, docid) VALUES(1, 2);
125498 ** In FTS3, this is an error. It is an error to specify non-NULL values
125499 ** for both docid and some other rowid alias.
125501 if( SQLITE_NULL!=sqlite3_value_type(apVal[3+p->nColumn]) ){
125502 if( SQLITE_NULL==sqlite3_value_type(apVal[0])
125503 && SQLITE_NULL!=sqlite3_value_type(apVal[1])
125505 /* A rowid/docid conflict. */
125506 return SQLITE_ERROR;
125508 rc = sqlite3_bind_value(pContentInsert, 1, apVal[3+p->nColumn]);
125509 if( rc!=SQLITE_OK ) return rc;
125512 /* Execute the statement to insert the record. Set *piDocid to the
125513 ** new docid value.
125515 sqlite3_step(pContentInsert);
125516 rc = sqlite3_reset(pContentInsert);
125518 *piDocid = sqlite3_last_insert_rowid(p->db);
125519 return rc;
125525 ** Remove all data from the FTS3 table. Clear the hash table containing
125526 ** pending terms.
125528 static int fts3DeleteAll(Fts3Table *p, int bContent){
125529 int rc = SQLITE_OK; /* Return code */
125531 /* Discard the contents of the pending-terms hash table. */
125532 sqlite3Fts3PendingTermsClear(p);
125534 /* Delete everything from the shadow tables. Except, leave %_content as
125535 ** is if bContent is false. */
125536 assert( p->zContentTbl==0 || bContent==0 );
125537 if( bContent ) fts3SqlExec(&rc, p, SQL_DELETE_ALL_CONTENT, 0);
125538 fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGMENTS, 0);
125539 fts3SqlExec(&rc, p, SQL_DELETE_ALL_SEGDIR, 0);
125540 if( p->bHasDocsize ){
125541 fts3SqlExec(&rc, p, SQL_DELETE_ALL_DOCSIZE, 0);
125543 if( p->bHasStat ){
125544 fts3SqlExec(&rc, p, SQL_DELETE_ALL_STAT, 0);
125546 return rc;
125550 ** The first element in the apVal[] array is assumed to contain the docid
125551 ** (an integer) of a row about to be deleted. Remove all terms from the
125552 ** full-text index.
125554 static void fts3DeleteTerms(
125555 int *pRC, /* Result code */
125556 Fts3Table *p, /* The FTS table to delete from */
125557 sqlite3_value *pRowid, /* The docid to be deleted */
125558 u32 *aSz /* Sizes of deleted document written here */
125560 int rc;
125561 sqlite3_stmt *pSelect;
125563 if( *pRC ) return;
125564 rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pSelect, &pRowid);
125565 if( rc==SQLITE_OK ){
125566 if( SQLITE_ROW==sqlite3_step(pSelect) ){
125567 int i;
125568 for(i=1; i<=p->nColumn; i++){
125569 const char *zText = (const char *)sqlite3_column_text(pSelect, i);
125570 rc = fts3PendingTermsAdd(p, zText, -1, &aSz[i-1]);
125571 if( rc!=SQLITE_OK ){
125572 sqlite3_reset(pSelect);
125573 *pRC = rc;
125574 return;
125576 aSz[p->nColumn] += sqlite3_column_bytes(pSelect, i);
125579 rc = sqlite3_reset(pSelect);
125580 }else{
125581 sqlite3_reset(pSelect);
125583 *pRC = rc;
125587 ** Forward declaration to account for the circular dependency between
125588 ** functions fts3SegmentMerge() and fts3AllocateSegdirIdx().
125590 static int fts3SegmentMerge(Fts3Table *, int, int);
125593 ** This function allocates a new level iLevel index in the segdir table.
125594 ** Usually, indexes are allocated within a level sequentially starting
125595 ** with 0, so the allocated index is one greater than the value returned
125596 ** by:
125598 ** SELECT max(idx) FROM %_segdir WHERE level = :iLevel
125600 ** However, if there are already FTS3_MERGE_COUNT indexes at the requested
125601 ** level, they are merged into a single level (iLevel+1) segment and the
125602 ** allocated index is 0.
125604 ** If successful, *piIdx is set to the allocated index slot and SQLITE_OK
125605 ** returned. Otherwise, an SQLite error code is returned.
125607 static int fts3AllocateSegdirIdx(
125608 Fts3Table *p,
125609 int iIndex, /* Index for p->aIndex */
125610 int iLevel,
125611 int *piIdx
125613 int rc; /* Return Code */
125614 sqlite3_stmt *pNextIdx; /* Query for next idx at level iLevel */
125615 int iNext = 0; /* Result of query pNextIdx */
125617 /* Set variable iNext to the next available segdir index at level iLevel. */
125618 rc = fts3SqlStmt(p, SQL_NEXT_SEGMENT_INDEX, &pNextIdx, 0);
125619 if( rc==SQLITE_OK ){
125620 sqlite3_bind_int(pNextIdx, 1, iIndex*FTS3_SEGDIR_MAXLEVEL + iLevel);
125621 if( SQLITE_ROW==sqlite3_step(pNextIdx) ){
125622 iNext = sqlite3_column_int(pNextIdx, 0);
125624 rc = sqlite3_reset(pNextIdx);
125627 if( rc==SQLITE_OK ){
125628 /* If iNext is FTS3_MERGE_COUNT, indicating that level iLevel is already
125629 ** full, merge all segments in level iLevel into a single iLevel+1
125630 ** segment and allocate (newly freed) index 0 at level iLevel. Otherwise,
125631 ** if iNext is less than FTS3_MERGE_COUNT, allocate index iNext.
125633 if( iNext>=FTS3_MERGE_COUNT ){
125634 rc = fts3SegmentMerge(p, iIndex, iLevel);
125635 *piIdx = 0;
125636 }else{
125637 *piIdx = iNext;
125641 return rc;
125645 ** The %_segments table is declared as follows:
125647 ** CREATE TABLE %_segments(blockid INTEGER PRIMARY KEY, block BLOB)
125649 ** This function reads data from a single row of the %_segments table. The
125650 ** specific row is identified by the iBlockid parameter. If paBlob is not
125651 ** NULL, then a buffer is allocated using sqlite3_malloc() and populated
125652 ** with the contents of the blob stored in the "block" column of the
125653 ** identified table row is. Whether or not paBlob is NULL, *pnBlob is set
125654 ** to the size of the blob in bytes before returning.
125656 ** If an error occurs, or the table does not contain the specified row,
125657 ** an SQLite error code is returned. Otherwise, SQLITE_OK is returned. If
125658 ** paBlob is non-NULL, then it is the responsibility of the caller to
125659 ** eventually free the returned buffer.
125661 ** This function may leave an open sqlite3_blob* handle in the
125662 ** Fts3Table.pSegments variable. This handle is reused by subsequent calls
125663 ** to this function. The handle may be closed by calling the
125664 ** sqlite3Fts3SegmentsClose() function. Reusing a blob handle is a handy
125665 ** performance improvement, but the blob handle should always be closed
125666 ** before control is returned to the user (to prevent a lock being held
125667 ** on the database file for longer than necessary). Thus, any virtual table
125668 ** method (xFilter etc.) that may directly or indirectly call this function
125669 ** must call sqlite3Fts3SegmentsClose() before returning.
125671 SQLITE_PRIVATE int sqlite3Fts3ReadBlock(
125672 Fts3Table *p, /* FTS3 table handle */
125673 sqlite3_int64 iBlockid, /* Access the row with blockid=$iBlockid */
125674 char **paBlob, /* OUT: Blob data in malloc'd buffer */
125675 int *pnBlob, /* OUT: Size of blob data */
125676 int *pnLoad /* OUT: Bytes actually loaded */
125678 int rc; /* Return code */
125680 /* pnBlob must be non-NULL. paBlob may be NULL or non-NULL. */
125681 assert( pnBlob);
125683 if( p->pSegments ){
125684 rc = sqlite3_blob_reopen(p->pSegments, iBlockid);
125685 }else{
125686 if( 0==p->zSegmentsTbl ){
125687 p->zSegmentsTbl = sqlite3_mprintf("%s_segments", p->zName);
125688 if( 0==p->zSegmentsTbl ) return SQLITE_NOMEM;
125690 rc = sqlite3_blob_open(
125691 p->db, p->zDb, p->zSegmentsTbl, "block", iBlockid, 0, &p->pSegments
125695 if( rc==SQLITE_OK ){
125696 int nByte = sqlite3_blob_bytes(p->pSegments);
125697 *pnBlob = nByte;
125698 if( paBlob ){
125699 char *aByte = sqlite3_malloc(nByte + FTS3_NODE_PADDING);
125700 if( !aByte ){
125701 rc = SQLITE_NOMEM;
125702 }else{
125703 if( pnLoad && nByte>(FTS3_NODE_CHUNK_THRESHOLD) ){
125704 nByte = FTS3_NODE_CHUNKSIZE;
125705 *pnLoad = nByte;
125707 rc = sqlite3_blob_read(p->pSegments, aByte, nByte, 0);
125708 memset(&aByte[nByte], 0, FTS3_NODE_PADDING);
125709 if( rc!=SQLITE_OK ){
125710 sqlite3_free(aByte);
125711 aByte = 0;
125714 *paBlob = aByte;
125718 return rc;
125722 ** Close the blob handle at p->pSegments, if it is open. See comments above
125723 ** the sqlite3Fts3ReadBlock() function for details.
125725 SQLITE_PRIVATE void sqlite3Fts3SegmentsClose(Fts3Table *p){
125726 sqlite3_blob_close(p->pSegments);
125727 p->pSegments = 0;
125730 static int fts3SegReaderIncrRead(Fts3SegReader *pReader){
125731 int nRead; /* Number of bytes to read */
125732 int rc; /* Return code */
125734 nRead = MIN(pReader->nNode - pReader->nPopulate, FTS3_NODE_CHUNKSIZE);
125735 rc = sqlite3_blob_read(
125736 pReader->pBlob,
125737 &pReader->aNode[pReader->nPopulate],
125738 nRead,
125739 pReader->nPopulate
125742 if( rc==SQLITE_OK ){
125743 pReader->nPopulate += nRead;
125744 memset(&pReader->aNode[pReader->nPopulate], 0, FTS3_NODE_PADDING);
125745 if( pReader->nPopulate==pReader->nNode ){
125746 sqlite3_blob_close(pReader->pBlob);
125747 pReader->pBlob = 0;
125748 pReader->nPopulate = 0;
125751 return rc;
125754 static int fts3SegReaderRequire(Fts3SegReader *pReader, char *pFrom, int nByte){
125755 int rc = SQLITE_OK;
125756 assert( !pReader->pBlob
125757 || (pFrom>=pReader->aNode && pFrom<&pReader->aNode[pReader->nNode])
125759 while( pReader->pBlob && rc==SQLITE_OK
125760 && (pFrom - pReader->aNode + nByte)>pReader->nPopulate
125762 rc = fts3SegReaderIncrRead(pReader);
125764 return rc;
125768 ** Move the iterator passed as the first argument to the next term in the
125769 ** segment. If successful, SQLITE_OK is returned. If there is no next term,
125770 ** SQLITE_DONE. Otherwise, an SQLite error code.
125772 static int fts3SegReaderNext(
125773 Fts3Table *p,
125774 Fts3SegReader *pReader,
125775 int bIncr
125777 int rc; /* Return code of various sub-routines */
125778 char *pNext; /* Cursor variable */
125779 int nPrefix; /* Number of bytes in term prefix */
125780 int nSuffix; /* Number of bytes in term suffix */
125782 if( !pReader->aDoclist ){
125783 pNext = pReader->aNode;
125784 }else{
125785 pNext = &pReader->aDoclist[pReader->nDoclist];
125788 if( !pNext || pNext>=&pReader->aNode[pReader->nNode] ){
125790 if( fts3SegReaderIsPending(pReader) ){
125791 Fts3HashElem *pElem = *(pReader->ppNextElem);
125792 if( pElem==0 ){
125793 pReader->aNode = 0;
125794 }else{
125795 PendingList *pList = (PendingList *)fts3HashData(pElem);
125796 pReader->zTerm = (char *)fts3HashKey(pElem);
125797 pReader->nTerm = fts3HashKeysize(pElem);
125798 pReader->nNode = pReader->nDoclist = pList->nData + 1;
125799 pReader->aNode = pReader->aDoclist = pList->aData;
125800 pReader->ppNextElem++;
125801 assert( pReader->aNode );
125803 return SQLITE_OK;
125806 if( !fts3SegReaderIsRootOnly(pReader) ){
125807 sqlite3_free(pReader->aNode);
125808 sqlite3_blob_close(pReader->pBlob);
125809 pReader->pBlob = 0;
125811 pReader->aNode = 0;
125813 /* If iCurrentBlock>=iLeafEndBlock, this is an EOF condition. All leaf
125814 ** blocks have already been traversed. */
125815 assert( pReader->iCurrentBlock<=pReader->iLeafEndBlock );
125816 if( pReader->iCurrentBlock>=pReader->iLeafEndBlock ){
125817 return SQLITE_OK;
125820 rc = sqlite3Fts3ReadBlock(
125821 p, ++pReader->iCurrentBlock, &pReader->aNode, &pReader->nNode,
125822 (bIncr ? &pReader->nPopulate : 0)
125824 if( rc!=SQLITE_OK ) return rc;
125825 assert( pReader->pBlob==0 );
125826 if( bIncr && pReader->nPopulate<pReader->nNode ){
125827 pReader->pBlob = p->pSegments;
125828 p->pSegments = 0;
125830 pNext = pReader->aNode;
125833 assert( !fts3SegReaderIsPending(pReader) );
125835 rc = fts3SegReaderRequire(pReader, pNext, FTS3_VARINT_MAX*2);
125836 if( rc!=SQLITE_OK ) return rc;
125838 /* Because of the FTS3_NODE_PADDING bytes of padding, the following is
125839 ** safe (no risk of overread) even if the node data is corrupted. */
125840 pNext += sqlite3Fts3GetVarint32(pNext, &nPrefix);
125841 pNext += sqlite3Fts3GetVarint32(pNext, &nSuffix);
125842 if( nPrefix<0 || nSuffix<=0
125843 || &pNext[nSuffix]>&pReader->aNode[pReader->nNode]
125845 return FTS_CORRUPT_VTAB;
125848 if( nPrefix+nSuffix>pReader->nTermAlloc ){
125849 int nNew = (nPrefix+nSuffix)*2;
125850 char *zNew = sqlite3_realloc(pReader->zTerm, nNew);
125851 if( !zNew ){
125852 return SQLITE_NOMEM;
125854 pReader->zTerm = zNew;
125855 pReader->nTermAlloc = nNew;
125858 rc = fts3SegReaderRequire(pReader, pNext, nSuffix+FTS3_VARINT_MAX);
125859 if( rc!=SQLITE_OK ) return rc;
125861 memcpy(&pReader->zTerm[nPrefix], pNext, nSuffix);
125862 pReader->nTerm = nPrefix+nSuffix;
125863 pNext += nSuffix;
125864 pNext += sqlite3Fts3GetVarint32(pNext, &pReader->nDoclist);
125865 pReader->aDoclist = pNext;
125866 pReader->pOffsetList = 0;
125868 /* Check that the doclist does not appear to extend past the end of the
125869 ** b-tree node. And that the final byte of the doclist is 0x00. If either
125870 ** of these statements is untrue, then the data structure is corrupt.
125872 if( &pReader->aDoclist[pReader->nDoclist]>&pReader->aNode[pReader->nNode]
125873 || (pReader->nPopulate==0 && pReader->aDoclist[pReader->nDoclist-1])
125875 return FTS_CORRUPT_VTAB;
125877 return SQLITE_OK;
125881 ** Set the SegReader to point to the first docid in the doclist associated
125882 ** with the current term.
125884 static int fts3SegReaderFirstDocid(Fts3Table *pTab, Fts3SegReader *pReader){
125885 int rc = SQLITE_OK;
125886 assert( pReader->aDoclist );
125887 assert( !pReader->pOffsetList );
125888 if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){
125889 u8 bEof = 0;
125890 pReader->iDocid = 0;
125891 pReader->nOffsetList = 0;
125892 sqlite3Fts3DoclistPrev(0,
125893 pReader->aDoclist, pReader->nDoclist, &pReader->pOffsetList,
125894 &pReader->iDocid, &pReader->nOffsetList, &bEof
125896 }else{
125897 rc = fts3SegReaderRequire(pReader, pReader->aDoclist, FTS3_VARINT_MAX);
125898 if( rc==SQLITE_OK ){
125899 int n = sqlite3Fts3GetVarint(pReader->aDoclist, &pReader->iDocid);
125900 pReader->pOffsetList = &pReader->aDoclist[n];
125903 return rc;
125907 ** Advance the SegReader to point to the next docid in the doclist
125908 ** associated with the current term.
125910 ** If arguments ppOffsetList and pnOffsetList are not NULL, then
125911 ** *ppOffsetList is set to point to the first column-offset list
125912 ** in the doclist entry (i.e. immediately past the docid varint).
125913 ** *pnOffsetList is set to the length of the set of column-offset
125914 ** lists, not including the nul-terminator byte. For example:
125916 static int fts3SegReaderNextDocid(
125917 Fts3Table *pTab,
125918 Fts3SegReader *pReader, /* Reader to advance to next docid */
125919 char **ppOffsetList, /* OUT: Pointer to current position-list */
125920 int *pnOffsetList /* OUT: Length of *ppOffsetList in bytes */
125922 int rc = SQLITE_OK;
125923 char *p = pReader->pOffsetList;
125924 char c = 0;
125926 assert( p );
125928 if( pTab->bDescIdx && fts3SegReaderIsPending(pReader) ){
125929 /* A pending-terms seg-reader for an FTS4 table that uses order=desc.
125930 ** Pending-terms doclists are always built up in ascending order, so
125931 ** we have to iterate through them backwards here. */
125932 u8 bEof = 0;
125933 if( ppOffsetList ){
125934 *ppOffsetList = pReader->pOffsetList;
125935 *pnOffsetList = pReader->nOffsetList - 1;
125937 sqlite3Fts3DoclistPrev(0,
125938 pReader->aDoclist, pReader->nDoclist, &p, &pReader->iDocid,
125939 &pReader->nOffsetList, &bEof
125941 if( bEof ){
125942 pReader->pOffsetList = 0;
125943 }else{
125944 pReader->pOffsetList = p;
125946 }else{
125947 char *pEnd = &pReader->aDoclist[pReader->nDoclist];
125949 /* Pointer p currently points at the first byte of an offset list. The
125950 ** following block advances it to point one byte past the end of
125951 ** the same offset list. */
125952 while( 1 ){
125954 /* The following line of code (and the "p++" below the while() loop) is
125955 ** normally all that is required to move pointer p to the desired
125956 ** position. The exception is if this node is being loaded from disk
125957 ** incrementally and pointer "p" now points to the first byte passed
125958 ** the populated part of pReader->aNode[].
125960 while( *p | c ) c = *p++ & 0x80;
125961 assert( *p==0 );
125963 if( pReader->pBlob==0 || p<&pReader->aNode[pReader->nPopulate] ) break;
125964 rc = fts3SegReaderIncrRead(pReader);
125965 if( rc!=SQLITE_OK ) return rc;
125969 /* If required, populate the output variables with a pointer to and the
125970 ** size of the previous offset-list.
125972 if( ppOffsetList ){
125973 *ppOffsetList = pReader->pOffsetList;
125974 *pnOffsetList = (int)(p - pReader->pOffsetList - 1);
125977 while( p<pEnd && *p==0 ) p++;
125979 /* If there are no more entries in the doclist, set pOffsetList to
125980 ** NULL. Otherwise, set Fts3SegReader.iDocid to the next docid and
125981 ** Fts3SegReader.pOffsetList to point to the next offset list before
125982 ** returning.
125984 if( p>=pEnd ){
125985 pReader->pOffsetList = 0;
125986 }else{
125987 rc = fts3SegReaderRequire(pReader, p, FTS3_VARINT_MAX);
125988 if( rc==SQLITE_OK ){
125989 sqlite3_int64 iDelta;
125990 pReader->pOffsetList = p + sqlite3Fts3GetVarint(p, &iDelta);
125991 if( pTab->bDescIdx ){
125992 pReader->iDocid -= iDelta;
125993 }else{
125994 pReader->iDocid += iDelta;
126000 return SQLITE_OK;
126004 SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(
126005 Fts3Cursor *pCsr,
126006 Fts3MultiSegReader *pMsr,
126007 int *pnOvfl
126009 Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
126010 int nOvfl = 0;
126011 int ii;
126012 int rc = SQLITE_OK;
126013 int pgsz = p->nPgsz;
126015 assert( p->bHasStat );
126016 assert( pgsz>0 );
126018 for(ii=0; rc==SQLITE_OK && ii<pMsr->nSegment; ii++){
126019 Fts3SegReader *pReader = pMsr->apSegment[ii];
126020 if( !fts3SegReaderIsPending(pReader)
126021 && !fts3SegReaderIsRootOnly(pReader)
126023 sqlite3_int64 jj;
126024 for(jj=pReader->iStartBlock; jj<=pReader->iLeafEndBlock; jj++){
126025 int nBlob;
126026 rc = sqlite3Fts3ReadBlock(p, jj, 0, &nBlob, 0);
126027 if( rc!=SQLITE_OK ) break;
126028 if( (nBlob+35)>pgsz ){
126029 nOvfl += (nBlob + 34)/pgsz;
126034 *pnOvfl = nOvfl;
126035 return rc;
126039 ** Free all allocations associated with the iterator passed as the
126040 ** second argument.
126042 SQLITE_PRIVATE void sqlite3Fts3SegReaderFree(Fts3SegReader *pReader){
126043 if( pReader && !fts3SegReaderIsPending(pReader) ){
126044 sqlite3_free(pReader->zTerm);
126045 if( !fts3SegReaderIsRootOnly(pReader) ){
126046 sqlite3_free(pReader->aNode);
126047 sqlite3_blob_close(pReader->pBlob);
126050 sqlite3_free(pReader);
126054 ** Allocate a new SegReader object.
126056 SQLITE_PRIVATE int sqlite3Fts3SegReaderNew(
126057 int iAge, /* Segment "age". */
126058 sqlite3_int64 iStartLeaf, /* First leaf to traverse */
126059 sqlite3_int64 iEndLeaf, /* Final leaf to traverse */
126060 sqlite3_int64 iEndBlock, /* Final block of segment */
126061 const char *zRoot, /* Buffer containing root node */
126062 int nRoot, /* Size of buffer containing root node */
126063 Fts3SegReader **ppReader /* OUT: Allocated Fts3SegReader */
126065 Fts3SegReader *pReader; /* Newly allocated SegReader object */
126066 int nExtra = 0; /* Bytes to allocate segment root node */
126068 assert( iStartLeaf<=iEndLeaf );
126069 if( iStartLeaf==0 ){
126070 nExtra = nRoot + FTS3_NODE_PADDING;
126073 pReader = (Fts3SegReader *)sqlite3_malloc(sizeof(Fts3SegReader) + nExtra);
126074 if( !pReader ){
126075 return SQLITE_NOMEM;
126077 memset(pReader, 0, sizeof(Fts3SegReader));
126078 pReader->iIdx = iAge;
126079 pReader->iStartBlock = iStartLeaf;
126080 pReader->iLeafEndBlock = iEndLeaf;
126081 pReader->iEndBlock = iEndBlock;
126083 if( nExtra ){
126084 /* The entire segment is stored in the root node. */
126085 pReader->aNode = (char *)&pReader[1];
126086 pReader->nNode = nRoot;
126087 memcpy(pReader->aNode, zRoot, nRoot);
126088 memset(&pReader->aNode[nRoot], 0, FTS3_NODE_PADDING);
126089 }else{
126090 pReader->iCurrentBlock = iStartLeaf-1;
126092 *ppReader = pReader;
126093 return SQLITE_OK;
126097 ** This is a comparison function used as a qsort() callback when sorting
126098 ** an array of pending terms by term. This occurs as part of flushing
126099 ** the contents of the pending-terms hash table to the database.
126101 static int fts3CompareElemByTerm(const void *lhs, const void *rhs){
126102 char *z1 = fts3HashKey(*(Fts3HashElem **)lhs);
126103 char *z2 = fts3HashKey(*(Fts3HashElem **)rhs);
126104 int n1 = fts3HashKeysize(*(Fts3HashElem **)lhs);
126105 int n2 = fts3HashKeysize(*(Fts3HashElem **)rhs);
126107 int n = (n1<n2 ? n1 : n2);
126108 int c = memcmp(z1, z2, n);
126109 if( c==0 ){
126110 c = n1 - n2;
126112 return c;
126116 ** This function is used to allocate an Fts3SegReader that iterates through
126117 ** a subset of the terms stored in the Fts3Table.pendingTerms array.
126119 ** If the isPrefixIter parameter is zero, then the returned SegReader iterates
126120 ** through each term in the pending-terms table. Or, if isPrefixIter is
126121 ** non-zero, it iterates through each term and its prefixes. For example, if
126122 ** the pending terms hash table contains the terms "sqlite", "mysql" and
126123 ** "firebird", then the iterator visits the following 'terms' (in the order
126124 ** shown):
126126 ** f fi fir fire fireb firebi firebir firebird
126127 ** m my mys mysq mysql
126128 ** s sq sql sqli sqlit sqlite
126130 ** Whereas if isPrefixIter is zero, the terms visited are:
126132 ** firebird mysql sqlite
126134 SQLITE_PRIVATE int sqlite3Fts3SegReaderPending(
126135 Fts3Table *p, /* Virtual table handle */
126136 int iIndex, /* Index for p->aIndex */
126137 const char *zTerm, /* Term to search for */
126138 int nTerm, /* Size of buffer zTerm */
126139 int bPrefix, /* True for a prefix iterator */
126140 Fts3SegReader **ppReader /* OUT: SegReader for pending-terms */
126142 Fts3SegReader *pReader = 0; /* Fts3SegReader object to return */
126143 Fts3HashElem *pE; /* Iterator variable */
126144 Fts3HashElem **aElem = 0; /* Array of term hash entries to scan */
126145 int nElem = 0; /* Size of array at aElem */
126146 int rc = SQLITE_OK; /* Return Code */
126147 Fts3Hash *pHash;
126149 pHash = &p->aIndex[iIndex].hPending;
126150 if( bPrefix ){
126151 int nAlloc = 0; /* Size of allocated array at aElem */
126153 for(pE=fts3HashFirst(pHash); pE; pE=fts3HashNext(pE)){
126154 char *zKey = (char *)fts3HashKey(pE);
126155 int nKey = fts3HashKeysize(pE);
126156 if( nTerm==0 || (nKey>=nTerm && 0==memcmp(zKey, zTerm, nTerm)) ){
126157 if( nElem==nAlloc ){
126158 Fts3HashElem **aElem2;
126159 nAlloc += 16;
126160 aElem2 = (Fts3HashElem **)sqlite3_realloc(
126161 aElem, nAlloc*sizeof(Fts3HashElem *)
126163 if( !aElem2 ){
126164 rc = SQLITE_NOMEM;
126165 nElem = 0;
126166 break;
126168 aElem = aElem2;
126171 aElem[nElem++] = pE;
126175 /* If more than one term matches the prefix, sort the Fts3HashElem
126176 ** objects in term order using qsort(). This uses the same comparison
126177 ** callback as is used when flushing terms to disk.
126179 if( nElem>1 ){
126180 qsort(aElem, nElem, sizeof(Fts3HashElem *), fts3CompareElemByTerm);
126183 }else{
126184 /* The query is a simple term lookup that matches at most one term in
126185 ** the index. All that is required is a straight hash-lookup.
126187 ** Because the stack address of pE may be accessed via the aElem pointer
126188 ** below, the "Fts3HashElem *pE" must be declared so that it is valid
126189 ** within this entire function, not just this "else{...}" block.
126191 pE = fts3HashFindElem(pHash, zTerm, nTerm);
126192 if( pE ){
126193 aElem = &pE;
126194 nElem = 1;
126198 if( nElem>0 ){
126199 int nByte = sizeof(Fts3SegReader) + (nElem+1)*sizeof(Fts3HashElem *);
126200 pReader = (Fts3SegReader *)sqlite3_malloc(nByte);
126201 if( !pReader ){
126202 rc = SQLITE_NOMEM;
126203 }else{
126204 memset(pReader, 0, nByte);
126205 pReader->iIdx = 0x7FFFFFFF;
126206 pReader->ppNextElem = (Fts3HashElem **)&pReader[1];
126207 memcpy(pReader->ppNextElem, aElem, nElem*sizeof(Fts3HashElem *));
126211 if( bPrefix ){
126212 sqlite3_free(aElem);
126214 *ppReader = pReader;
126215 return rc;
126219 ** Compare the entries pointed to by two Fts3SegReader structures.
126220 ** Comparison is as follows:
126222 ** 1) EOF is greater than not EOF.
126224 ** 2) The current terms (if any) are compared using memcmp(). If one
126225 ** term is a prefix of another, the longer term is considered the
126226 ** larger.
126228 ** 3) By segment age. An older segment is considered larger.
126230 static int fts3SegReaderCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
126231 int rc;
126232 if( pLhs->aNode && pRhs->aNode ){
126233 int rc2 = pLhs->nTerm - pRhs->nTerm;
126234 if( rc2<0 ){
126235 rc = memcmp(pLhs->zTerm, pRhs->zTerm, pLhs->nTerm);
126236 }else{
126237 rc = memcmp(pLhs->zTerm, pRhs->zTerm, pRhs->nTerm);
126239 if( rc==0 ){
126240 rc = rc2;
126242 }else{
126243 rc = (pLhs->aNode==0) - (pRhs->aNode==0);
126245 if( rc==0 ){
126246 rc = pRhs->iIdx - pLhs->iIdx;
126248 assert( rc!=0 );
126249 return rc;
126253 ** A different comparison function for SegReader structures. In this
126254 ** version, it is assumed that each SegReader points to an entry in
126255 ** a doclist for identical terms. Comparison is made as follows:
126257 ** 1) EOF (end of doclist in this case) is greater than not EOF.
126259 ** 2) By current docid.
126261 ** 3) By segment age. An older segment is considered larger.
126263 static int fts3SegReaderDoclistCmp(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
126264 int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0);
126265 if( rc==0 ){
126266 if( pLhs->iDocid==pRhs->iDocid ){
126267 rc = pRhs->iIdx - pLhs->iIdx;
126268 }else{
126269 rc = (pLhs->iDocid > pRhs->iDocid) ? 1 : -1;
126272 assert( pLhs->aNode && pRhs->aNode );
126273 return rc;
126275 static int fts3SegReaderDoclistCmpRev(Fts3SegReader *pLhs, Fts3SegReader *pRhs){
126276 int rc = (pLhs->pOffsetList==0)-(pRhs->pOffsetList==0);
126277 if( rc==0 ){
126278 if( pLhs->iDocid==pRhs->iDocid ){
126279 rc = pRhs->iIdx - pLhs->iIdx;
126280 }else{
126281 rc = (pLhs->iDocid < pRhs->iDocid) ? 1 : -1;
126284 assert( pLhs->aNode && pRhs->aNode );
126285 return rc;
126289 ** Compare the term that the Fts3SegReader object passed as the first argument
126290 ** points to with the term specified by arguments zTerm and nTerm.
126292 ** If the pSeg iterator is already at EOF, return 0. Otherwise, return
126293 ** -ve if the pSeg term is less than zTerm/nTerm, 0 if the two terms are
126294 ** equal, or +ve if the pSeg term is greater than zTerm/nTerm.
126296 static int fts3SegReaderTermCmp(
126297 Fts3SegReader *pSeg, /* Segment reader object */
126298 const char *zTerm, /* Term to compare to */
126299 int nTerm /* Size of term zTerm in bytes */
126301 int res = 0;
126302 if( pSeg->aNode ){
126303 if( pSeg->nTerm>nTerm ){
126304 res = memcmp(pSeg->zTerm, zTerm, nTerm);
126305 }else{
126306 res = memcmp(pSeg->zTerm, zTerm, pSeg->nTerm);
126308 if( res==0 ){
126309 res = pSeg->nTerm-nTerm;
126312 return res;
126316 ** Argument apSegment is an array of nSegment elements. It is known that
126317 ** the final (nSegment-nSuspect) members are already in sorted order
126318 ** (according to the comparison function provided). This function shuffles
126319 ** the array around until all entries are in sorted order.
126321 static void fts3SegReaderSort(
126322 Fts3SegReader **apSegment, /* Array to sort entries of */
126323 int nSegment, /* Size of apSegment array */
126324 int nSuspect, /* Unsorted entry count */
126325 int (*xCmp)(Fts3SegReader *, Fts3SegReader *) /* Comparison function */
126327 int i; /* Iterator variable */
126329 assert( nSuspect<=nSegment );
126331 if( nSuspect==nSegment ) nSuspect--;
126332 for(i=nSuspect-1; i>=0; i--){
126333 int j;
126334 for(j=i; j<(nSegment-1); j++){
126335 Fts3SegReader *pTmp;
126336 if( xCmp(apSegment[j], apSegment[j+1])<0 ) break;
126337 pTmp = apSegment[j+1];
126338 apSegment[j+1] = apSegment[j];
126339 apSegment[j] = pTmp;
126343 #ifndef NDEBUG
126344 /* Check that the list really is sorted now. */
126345 for(i=0; i<(nSuspect-1); i++){
126346 assert( xCmp(apSegment[i], apSegment[i+1])<0 );
126348 #endif
126352 ** Insert a record into the %_segments table.
126354 static int fts3WriteSegment(
126355 Fts3Table *p, /* Virtual table handle */
126356 sqlite3_int64 iBlock, /* Block id for new block */
126357 char *z, /* Pointer to buffer containing block data */
126358 int n /* Size of buffer z in bytes */
126360 sqlite3_stmt *pStmt;
126361 int rc = fts3SqlStmt(p, SQL_INSERT_SEGMENTS, &pStmt, 0);
126362 if( rc==SQLITE_OK ){
126363 sqlite3_bind_int64(pStmt, 1, iBlock);
126364 sqlite3_bind_blob(pStmt, 2, z, n, SQLITE_STATIC);
126365 sqlite3_step(pStmt);
126366 rc = sqlite3_reset(pStmt);
126368 return rc;
126372 ** Insert a record into the %_segdir table.
126374 static int fts3WriteSegdir(
126375 Fts3Table *p, /* Virtual table handle */
126376 int iLevel, /* Value for "level" field */
126377 int iIdx, /* Value for "idx" field */
126378 sqlite3_int64 iStartBlock, /* Value for "start_block" field */
126379 sqlite3_int64 iLeafEndBlock, /* Value for "leaves_end_block" field */
126380 sqlite3_int64 iEndBlock, /* Value for "end_block" field */
126381 char *zRoot, /* Blob value for "root" field */
126382 int nRoot /* Number of bytes in buffer zRoot */
126384 sqlite3_stmt *pStmt;
126385 int rc = fts3SqlStmt(p, SQL_INSERT_SEGDIR, &pStmt, 0);
126386 if( rc==SQLITE_OK ){
126387 sqlite3_bind_int(pStmt, 1, iLevel);
126388 sqlite3_bind_int(pStmt, 2, iIdx);
126389 sqlite3_bind_int64(pStmt, 3, iStartBlock);
126390 sqlite3_bind_int64(pStmt, 4, iLeafEndBlock);
126391 sqlite3_bind_int64(pStmt, 5, iEndBlock);
126392 sqlite3_bind_blob(pStmt, 6, zRoot, nRoot, SQLITE_STATIC);
126393 sqlite3_step(pStmt);
126394 rc = sqlite3_reset(pStmt);
126396 return rc;
126400 ** Return the size of the common prefix (if any) shared by zPrev and
126401 ** zNext, in bytes. For example,
126403 ** fts3PrefixCompress("abc", 3, "abcdef", 6) // returns 3
126404 ** fts3PrefixCompress("abX", 3, "abcdef", 6) // returns 2
126405 ** fts3PrefixCompress("abX", 3, "Xbcdef", 6) // returns 0
126407 static int fts3PrefixCompress(
126408 const char *zPrev, /* Buffer containing previous term */
126409 int nPrev, /* Size of buffer zPrev in bytes */
126410 const char *zNext, /* Buffer containing next term */
126411 int nNext /* Size of buffer zNext in bytes */
126413 int n;
126414 UNUSED_PARAMETER(nNext);
126415 for(n=0; n<nPrev && zPrev[n]==zNext[n]; n++);
126416 return n;
126420 ** Add term zTerm to the SegmentNode. It is guaranteed that zTerm is larger
126421 ** (according to memcmp) than the previous term.
126423 static int fts3NodeAddTerm(
126424 Fts3Table *p, /* Virtual table handle */
126425 SegmentNode **ppTree, /* IN/OUT: SegmentNode handle */
126426 int isCopyTerm, /* True if zTerm/nTerm is transient */
126427 const char *zTerm, /* Pointer to buffer containing term */
126428 int nTerm /* Size of term in bytes */
126430 SegmentNode *pTree = *ppTree;
126431 int rc;
126432 SegmentNode *pNew;
126434 /* First try to append the term to the current node. Return early if
126435 ** this is possible.
126437 if( pTree ){
126438 int nData = pTree->nData; /* Current size of node in bytes */
126439 int nReq = nData; /* Required space after adding zTerm */
126440 int nPrefix; /* Number of bytes of prefix compression */
126441 int nSuffix; /* Suffix length */
126443 nPrefix = fts3PrefixCompress(pTree->zTerm, pTree->nTerm, zTerm, nTerm);
126444 nSuffix = nTerm-nPrefix;
126446 nReq += sqlite3Fts3VarintLen(nPrefix)+sqlite3Fts3VarintLen(nSuffix)+nSuffix;
126447 if( nReq<=p->nNodeSize || !pTree->zTerm ){
126449 if( nReq>p->nNodeSize ){
126450 /* An unusual case: this is the first term to be added to the node
126451 ** and the static node buffer (p->nNodeSize bytes) is not large
126452 ** enough. Use a separately malloced buffer instead This wastes
126453 ** p->nNodeSize bytes, but since this scenario only comes about when
126454 ** the database contain two terms that share a prefix of almost 2KB,
126455 ** this is not expected to be a serious problem.
126457 assert( pTree->aData==(char *)&pTree[1] );
126458 pTree->aData = (char *)sqlite3_malloc(nReq);
126459 if( !pTree->aData ){
126460 return SQLITE_NOMEM;
126464 if( pTree->zTerm ){
126465 /* There is no prefix-length field for first term in a node */
126466 nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nPrefix);
126469 nData += sqlite3Fts3PutVarint(&pTree->aData[nData], nSuffix);
126470 memcpy(&pTree->aData[nData], &zTerm[nPrefix], nSuffix);
126471 pTree->nData = nData + nSuffix;
126472 pTree->nEntry++;
126474 if( isCopyTerm ){
126475 if( pTree->nMalloc<nTerm ){
126476 char *zNew = sqlite3_realloc(pTree->zMalloc, nTerm*2);
126477 if( !zNew ){
126478 return SQLITE_NOMEM;
126480 pTree->nMalloc = nTerm*2;
126481 pTree->zMalloc = zNew;
126483 pTree->zTerm = pTree->zMalloc;
126484 memcpy(pTree->zTerm, zTerm, nTerm);
126485 pTree->nTerm = nTerm;
126486 }else{
126487 pTree->zTerm = (char *)zTerm;
126488 pTree->nTerm = nTerm;
126490 return SQLITE_OK;
126494 /* If control flows to here, it was not possible to append zTerm to the
126495 ** current node. Create a new node (a right-sibling of the current node).
126496 ** If this is the first node in the tree, the term is added to it.
126498 ** Otherwise, the term is not added to the new node, it is left empty for
126499 ** now. Instead, the term is inserted into the parent of pTree. If pTree
126500 ** has no parent, one is created here.
126502 pNew = (SegmentNode *)sqlite3_malloc(sizeof(SegmentNode) + p->nNodeSize);
126503 if( !pNew ){
126504 return SQLITE_NOMEM;
126506 memset(pNew, 0, sizeof(SegmentNode));
126507 pNew->nData = 1 + FTS3_VARINT_MAX;
126508 pNew->aData = (char *)&pNew[1];
126510 if( pTree ){
126511 SegmentNode *pParent = pTree->pParent;
126512 rc = fts3NodeAddTerm(p, &pParent, isCopyTerm, zTerm, nTerm);
126513 if( pTree->pParent==0 ){
126514 pTree->pParent = pParent;
126516 pTree->pRight = pNew;
126517 pNew->pLeftmost = pTree->pLeftmost;
126518 pNew->pParent = pParent;
126519 pNew->zMalloc = pTree->zMalloc;
126520 pNew->nMalloc = pTree->nMalloc;
126521 pTree->zMalloc = 0;
126522 }else{
126523 pNew->pLeftmost = pNew;
126524 rc = fts3NodeAddTerm(p, &pNew, isCopyTerm, zTerm, nTerm);
126527 *ppTree = pNew;
126528 return rc;
126532 ** Helper function for fts3NodeWrite().
126534 static int fts3TreeFinishNode(
126535 SegmentNode *pTree,
126536 int iHeight,
126537 sqlite3_int64 iLeftChild
126539 int nStart;
126540 assert( iHeight>=1 && iHeight<128 );
126541 nStart = FTS3_VARINT_MAX - sqlite3Fts3VarintLen(iLeftChild);
126542 pTree->aData[nStart] = (char)iHeight;
126543 sqlite3Fts3PutVarint(&pTree->aData[nStart+1], iLeftChild);
126544 return nStart;
126548 ** Write the buffer for the segment node pTree and all of its peers to the
126549 ** database. Then call this function recursively to write the parent of
126550 ** pTree and its peers to the database.
126552 ** Except, if pTree is a root node, do not write it to the database. Instead,
126553 ** set output variables *paRoot and *pnRoot to contain the root node.
126555 ** If successful, SQLITE_OK is returned and output variable *piLast is
126556 ** set to the largest blockid written to the database (or zero if no
126557 ** blocks were written to the db). Otherwise, an SQLite error code is
126558 ** returned.
126560 static int fts3NodeWrite(
126561 Fts3Table *p, /* Virtual table handle */
126562 SegmentNode *pTree, /* SegmentNode handle */
126563 int iHeight, /* Height of this node in tree */
126564 sqlite3_int64 iLeaf, /* Block id of first leaf node */
126565 sqlite3_int64 iFree, /* Block id of next free slot in %_segments */
126566 sqlite3_int64 *piLast, /* OUT: Block id of last entry written */
126567 char **paRoot, /* OUT: Data for root node */
126568 int *pnRoot /* OUT: Size of root node in bytes */
126570 int rc = SQLITE_OK;
126572 if( !pTree->pParent ){
126573 /* Root node of the tree. */
126574 int nStart = fts3TreeFinishNode(pTree, iHeight, iLeaf);
126575 *piLast = iFree-1;
126576 *pnRoot = pTree->nData - nStart;
126577 *paRoot = &pTree->aData[nStart];
126578 }else{
126579 SegmentNode *pIter;
126580 sqlite3_int64 iNextFree = iFree;
126581 sqlite3_int64 iNextLeaf = iLeaf;
126582 for(pIter=pTree->pLeftmost; pIter && rc==SQLITE_OK; pIter=pIter->pRight){
126583 int nStart = fts3TreeFinishNode(pIter, iHeight, iNextLeaf);
126584 int nWrite = pIter->nData - nStart;
126586 rc = fts3WriteSegment(p, iNextFree, &pIter->aData[nStart], nWrite);
126587 iNextFree++;
126588 iNextLeaf += (pIter->nEntry+1);
126590 if( rc==SQLITE_OK ){
126591 assert( iNextLeaf==iFree );
126592 rc = fts3NodeWrite(
126593 p, pTree->pParent, iHeight+1, iFree, iNextFree, piLast, paRoot, pnRoot
126598 return rc;
126602 ** Free all memory allocations associated with the tree pTree.
126604 static void fts3NodeFree(SegmentNode *pTree){
126605 if( pTree ){
126606 SegmentNode *p = pTree->pLeftmost;
126607 fts3NodeFree(p->pParent);
126608 while( p ){
126609 SegmentNode *pRight = p->pRight;
126610 if( p->aData!=(char *)&p[1] ){
126611 sqlite3_free(p->aData);
126613 assert( pRight==0 || p->zMalloc==0 );
126614 sqlite3_free(p->zMalloc);
126615 sqlite3_free(p);
126616 p = pRight;
126622 ** Add a term to the segment being constructed by the SegmentWriter object
126623 ** *ppWriter. When adding the first term to a segment, *ppWriter should
126624 ** be passed NULL. This function will allocate a new SegmentWriter object
126625 ** and return it via the input/output variable *ppWriter in this case.
126627 ** If successful, SQLITE_OK is returned. Otherwise, an SQLite error code.
126629 static int fts3SegWriterAdd(
126630 Fts3Table *p, /* Virtual table handle */
126631 SegmentWriter **ppWriter, /* IN/OUT: SegmentWriter handle */
126632 int isCopyTerm, /* True if buffer zTerm must be copied */
126633 const char *zTerm, /* Pointer to buffer containing term */
126634 int nTerm, /* Size of term in bytes */
126635 const char *aDoclist, /* Pointer to buffer containing doclist */
126636 int nDoclist /* Size of doclist in bytes */
126638 int nPrefix; /* Size of term prefix in bytes */
126639 int nSuffix; /* Size of term suffix in bytes */
126640 int nReq; /* Number of bytes required on leaf page */
126641 int nData;
126642 SegmentWriter *pWriter = *ppWriter;
126644 if( !pWriter ){
126645 int rc;
126646 sqlite3_stmt *pStmt;
126648 /* Allocate the SegmentWriter structure */
126649 pWriter = (SegmentWriter *)sqlite3_malloc(sizeof(SegmentWriter));
126650 if( !pWriter ) return SQLITE_NOMEM;
126651 memset(pWriter, 0, sizeof(SegmentWriter));
126652 *ppWriter = pWriter;
126654 /* Allocate a buffer in which to accumulate data */
126655 pWriter->aData = (char *)sqlite3_malloc(p->nNodeSize);
126656 if( !pWriter->aData ) return SQLITE_NOMEM;
126657 pWriter->nSize = p->nNodeSize;
126659 /* Find the next free blockid in the %_segments table */
126660 rc = fts3SqlStmt(p, SQL_NEXT_SEGMENTS_ID, &pStmt, 0);
126661 if( rc!=SQLITE_OK ) return rc;
126662 if( SQLITE_ROW==sqlite3_step(pStmt) ){
126663 pWriter->iFree = sqlite3_column_int64(pStmt, 0);
126664 pWriter->iFirst = pWriter->iFree;
126666 rc = sqlite3_reset(pStmt);
126667 if( rc!=SQLITE_OK ) return rc;
126669 nData = pWriter->nData;
126671 nPrefix = fts3PrefixCompress(pWriter->zTerm, pWriter->nTerm, zTerm, nTerm);
126672 nSuffix = nTerm-nPrefix;
126674 /* Figure out how many bytes are required by this new entry */
126675 nReq = sqlite3Fts3VarintLen(nPrefix) + /* varint containing prefix size */
126676 sqlite3Fts3VarintLen(nSuffix) + /* varint containing suffix size */
126677 nSuffix + /* Term suffix */
126678 sqlite3Fts3VarintLen(nDoclist) + /* Size of doclist */
126679 nDoclist; /* Doclist data */
126681 if( nData>0 && nData+nReq>p->nNodeSize ){
126682 int rc;
126684 /* The current leaf node is full. Write it out to the database. */
126685 rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, nData);
126686 if( rc!=SQLITE_OK ) return rc;
126688 /* Add the current term to the interior node tree. The term added to
126689 ** the interior tree must:
126691 ** a) be greater than the largest term on the leaf node just written
126692 ** to the database (still available in pWriter->zTerm), and
126694 ** b) be less than or equal to the term about to be added to the new
126695 ** leaf node (zTerm/nTerm).
126697 ** In other words, it must be the prefix of zTerm 1 byte longer than
126698 ** the common prefix (if any) of zTerm and pWriter->zTerm.
126700 assert( nPrefix<nTerm );
126701 rc = fts3NodeAddTerm(p, &pWriter->pTree, isCopyTerm, zTerm, nPrefix+1);
126702 if( rc!=SQLITE_OK ) return rc;
126704 nData = 0;
126705 pWriter->nTerm = 0;
126707 nPrefix = 0;
126708 nSuffix = nTerm;
126709 nReq = 1 + /* varint containing prefix size */
126710 sqlite3Fts3VarintLen(nTerm) + /* varint containing suffix size */
126711 nTerm + /* Term suffix */
126712 sqlite3Fts3VarintLen(nDoclist) + /* Size of doclist */
126713 nDoclist; /* Doclist data */
126716 /* If the buffer currently allocated is too small for this entry, realloc
126717 ** the buffer to make it large enough.
126719 if( nReq>pWriter->nSize ){
126720 char *aNew = sqlite3_realloc(pWriter->aData, nReq);
126721 if( !aNew ) return SQLITE_NOMEM;
126722 pWriter->aData = aNew;
126723 pWriter->nSize = nReq;
126725 assert( nData+nReq<=pWriter->nSize );
126727 /* Append the prefix-compressed term and doclist to the buffer. */
126728 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nPrefix);
126729 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nSuffix);
126730 memcpy(&pWriter->aData[nData], &zTerm[nPrefix], nSuffix);
126731 nData += nSuffix;
126732 nData += sqlite3Fts3PutVarint(&pWriter->aData[nData], nDoclist);
126733 memcpy(&pWriter->aData[nData], aDoclist, nDoclist);
126734 pWriter->nData = nData + nDoclist;
126736 /* Save the current term so that it can be used to prefix-compress the next.
126737 ** If the isCopyTerm parameter is true, then the buffer pointed to by
126738 ** zTerm is transient, so take a copy of the term data. Otherwise, just
126739 ** store a copy of the pointer.
126741 if( isCopyTerm ){
126742 if( nTerm>pWriter->nMalloc ){
126743 char *zNew = sqlite3_realloc(pWriter->zMalloc, nTerm*2);
126744 if( !zNew ){
126745 return SQLITE_NOMEM;
126747 pWriter->nMalloc = nTerm*2;
126748 pWriter->zMalloc = zNew;
126749 pWriter->zTerm = zNew;
126751 assert( pWriter->zTerm==pWriter->zMalloc );
126752 memcpy(pWriter->zTerm, zTerm, nTerm);
126753 }else{
126754 pWriter->zTerm = (char *)zTerm;
126756 pWriter->nTerm = nTerm;
126758 return SQLITE_OK;
126762 ** Flush all data associated with the SegmentWriter object pWriter to the
126763 ** database. This function must be called after all terms have been added
126764 ** to the segment using fts3SegWriterAdd(). If successful, SQLITE_OK is
126765 ** returned. Otherwise, an SQLite error code.
126767 static int fts3SegWriterFlush(
126768 Fts3Table *p, /* Virtual table handle */
126769 SegmentWriter *pWriter, /* SegmentWriter to flush to the db */
126770 int iLevel, /* Value for 'level' column of %_segdir */
126771 int iIdx /* Value for 'idx' column of %_segdir */
126773 int rc; /* Return code */
126774 if( pWriter->pTree ){
126775 sqlite3_int64 iLast = 0; /* Largest block id written to database */
126776 sqlite3_int64 iLastLeaf; /* Largest leaf block id written to db */
126777 char *zRoot = NULL; /* Pointer to buffer containing root node */
126778 int nRoot = 0; /* Size of buffer zRoot */
126780 iLastLeaf = pWriter->iFree;
126781 rc = fts3WriteSegment(p, pWriter->iFree++, pWriter->aData, pWriter->nData);
126782 if( rc==SQLITE_OK ){
126783 rc = fts3NodeWrite(p, pWriter->pTree, 1,
126784 pWriter->iFirst, pWriter->iFree, &iLast, &zRoot, &nRoot);
126786 if( rc==SQLITE_OK ){
126787 rc = fts3WriteSegdir(
126788 p, iLevel, iIdx, pWriter->iFirst, iLastLeaf, iLast, zRoot, nRoot);
126790 }else{
126791 /* The entire tree fits on the root node. Write it to the segdir table. */
126792 rc = fts3WriteSegdir(
126793 p, iLevel, iIdx, 0, 0, 0, pWriter->aData, pWriter->nData);
126795 return rc;
126799 ** Release all memory held by the SegmentWriter object passed as the
126800 ** first argument.
126802 static void fts3SegWriterFree(SegmentWriter *pWriter){
126803 if( pWriter ){
126804 sqlite3_free(pWriter->aData);
126805 sqlite3_free(pWriter->zMalloc);
126806 fts3NodeFree(pWriter->pTree);
126807 sqlite3_free(pWriter);
126812 ** The first value in the apVal[] array is assumed to contain an integer.
126813 ** This function tests if there exist any documents with docid values that
126814 ** are different from that integer. i.e. if deleting the document with docid
126815 ** pRowid would mean the FTS3 table were empty.
126817 ** If successful, *pisEmpty is set to true if the table is empty except for
126818 ** document pRowid, or false otherwise, and SQLITE_OK is returned. If an
126819 ** error occurs, an SQLite error code is returned.
126821 static int fts3IsEmpty(Fts3Table *p, sqlite3_value *pRowid, int *pisEmpty){
126822 sqlite3_stmt *pStmt;
126823 int rc;
126824 if( p->zContentTbl ){
126825 /* If using the content=xxx option, assume the table is never empty */
126826 *pisEmpty = 0;
126827 rc = SQLITE_OK;
126828 }else{
126829 rc = fts3SqlStmt(p, SQL_IS_EMPTY, &pStmt, &pRowid);
126830 if( rc==SQLITE_OK ){
126831 if( SQLITE_ROW==sqlite3_step(pStmt) ){
126832 *pisEmpty = sqlite3_column_int(pStmt, 0);
126834 rc = sqlite3_reset(pStmt);
126837 return rc;
126841 ** Set *pnMax to the largest segment level in the database for the index
126842 ** iIndex.
126844 ** Segment levels are stored in the 'level' column of the %_segdir table.
126846 ** Return SQLITE_OK if successful, or an SQLite error code if not.
126848 static int fts3SegmentMaxLevel(Fts3Table *p, int iIndex, int *pnMax){
126849 sqlite3_stmt *pStmt;
126850 int rc;
126851 assert( iIndex>=0 && iIndex<p->nIndex );
126853 /* Set pStmt to the compiled version of:
126855 ** SELECT max(level) FROM %Q.'%q_segdir' WHERE level BETWEEN ? AND ?
126857 ** (1024 is actually the value of macro FTS3_SEGDIR_PREFIXLEVEL_STR).
126859 rc = fts3SqlStmt(p, SQL_SELECT_SEGDIR_MAX_LEVEL, &pStmt, 0);
126860 if( rc!=SQLITE_OK ) return rc;
126861 sqlite3_bind_int(pStmt, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
126862 sqlite3_bind_int(pStmt, 2, (iIndex+1)*FTS3_SEGDIR_MAXLEVEL - 1);
126863 if( SQLITE_ROW==sqlite3_step(pStmt) ){
126864 *pnMax = sqlite3_column_int(pStmt, 0);
126866 return sqlite3_reset(pStmt);
126870 ** This function is used after merging multiple segments into a single large
126871 ** segment to delete the old, now redundant, segment b-trees. Specifically,
126872 ** it:
126874 ** 1) Deletes all %_segments entries for the segments associated with
126875 ** each of the SegReader objects in the array passed as the third
126876 ** argument, and
126878 ** 2) deletes all %_segdir entries with level iLevel, or all %_segdir
126879 ** entries regardless of level if (iLevel<0).
126881 ** SQLITE_OK is returned if successful, otherwise an SQLite error code.
126883 static int fts3DeleteSegdir(
126884 Fts3Table *p, /* Virtual table handle */
126885 int iIndex, /* Index for p->aIndex */
126886 int iLevel, /* Level of %_segdir entries to delete */
126887 Fts3SegReader **apSegment, /* Array of SegReader objects */
126888 int nReader /* Size of array apSegment */
126890 int rc; /* Return Code */
126891 int i; /* Iterator variable */
126892 sqlite3_stmt *pDelete; /* SQL statement to delete rows */
126894 rc = fts3SqlStmt(p, SQL_DELETE_SEGMENTS_RANGE, &pDelete, 0);
126895 for(i=0; rc==SQLITE_OK && i<nReader; i++){
126896 Fts3SegReader *pSegment = apSegment[i];
126897 if( pSegment->iStartBlock ){
126898 sqlite3_bind_int64(pDelete, 1, pSegment->iStartBlock);
126899 sqlite3_bind_int64(pDelete, 2, pSegment->iEndBlock);
126900 sqlite3_step(pDelete);
126901 rc = sqlite3_reset(pDelete);
126904 if( rc!=SQLITE_OK ){
126905 return rc;
126908 assert( iLevel>=0 || iLevel==FTS3_SEGCURSOR_ALL );
126909 if( iLevel==FTS3_SEGCURSOR_ALL ){
126910 rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_RANGE, &pDelete, 0);
126911 if( rc==SQLITE_OK ){
126912 sqlite3_bind_int(pDelete, 1, iIndex*FTS3_SEGDIR_MAXLEVEL);
126913 sqlite3_bind_int(pDelete, 2, (iIndex+1) * FTS3_SEGDIR_MAXLEVEL - 1);
126915 }else{
126916 rc = fts3SqlStmt(p, SQL_DELETE_SEGDIR_LEVEL, &pDelete, 0);
126917 if( rc==SQLITE_OK ){
126918 sqlite3_bind_int(pDelete, 1, iIndex*FTS3_SEGDIR_MAXLEVEL + iLevel);
126922 if( rc==SQLITE_OK ){
126923 sqlite3_step(pDelete);
126924 rc = sqlite3_reset(pDelete);
126927 return rc;
126931 ** When this function is called, buffer *ppList (size *pnList bytes) contains
126932 ** a position list that may (or may not) feature multiple columns. This
126933 ** function adjusts the pointer *ppList and the length *pnList so that they
126934 ** identify the subset of the position list that corresponds to column iCol.
126936 ** If there are no entries in the input position list for column iCol, then
126937 ** *pnList is set to zero before returning.
126939 static void fts3ColumnFilter(
126940 int iCol, /* Column to filter on */
126941 char **ppList, /* IN/OUT: Pointer to position list */
126942 int *pnList /* IN/OUT: Size of buffer *ppList in bytes */
126944 char *pList = *ppList;
126945 int nList = *pnList;
126946 char *pEnd = &pList[nList];
126947 int iCurrent = 0;
126948 char *p = pList;
126950 assert( iCol>=0 );
126951 while( 1 ){
126952 char c = 0;
126953 while( p<pEnd && (c | *p)&0xFE ) c = *p++ & 0x80;
126955 if( iCol==iCurrent ){
126956 nList = (int)(p - pList);
126957 break;
126960 nList -= (int)(p - pList);
126961 pList = p;
126962 if( nList==0 ){
126963 break;
126965 p = &pList[1];
126966 p += sqlite3Fts3GetVarint32(p, &iCurrent);
126969 *ppList = pList;
126970 *pnList = nList;
126974 ** Cache data in the Fts3MultiSegReader.aBuffer[] buffer (overwriting any
126975 ** existing data). Grow the buffer if required.
126977 ** If successful, return SQLITE_OK. Otherwise, if an OOM error is encountered
126978 ** trying to resize the buffer, return SQLITE_NOMEM.
126980 static int fts3MsrBufferData(
126981 Fts3MultiSegReader *pMsr, /* Multi-segment-reader handle */
126982 char *pList,
126983 int nList
126985 if( nList>pMsr->nBuffer ){
126986 char *pNew;
126987 pMsr->nBuffer = nList*2;
126988 pNew = (char *)sqlite3_realloc(pMsr->aBuffer, pMsr->nBuffer);
126989 if( !pNew ) return SQLITE_NOMEM;
126990 pMsr->aBuffer = pNew;
126993 memcpy(pMsr->aBuffer, pList, nList);
126994 return SQLITE_OK;
126997 SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
126998 Fts3Table *p, /* Virtual table handle */
126999 Fts3MultiSegReader *pMsr, /* Multi-segment-reader handle */
127000 sqlite3_int64 *piDocid, /* OUT: Docid value */
127001 char **paPoslist, /* OUT: Pointer to position list */
127002 int *pnPoslist /* OUT: Size of position list in bytes */
127004 int nMerge = pMsr->nAdvance;
127005 Fts3SegReader **apSegment = pMsr->apSegment;
127006 int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
127007 p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
127010 if( nMerge==0 ){
127011 *paPoslist = 0;
127012 return SQLITE_OK;
127015 while( 1 ){
127016 Fts3SegReader *pSeg;
127017 pSeg = pMsr->apSegment[0];
127019 if( pSeg->pOffsetList==0 ){
127020 *paPoslist = 0;
127021 break;
127022 }else{
127023 int rc;
127024 char *pList;
127025 int nList;
127026 int j;
127027 sqlite3_int64 iDocid = apSegment[0]->iDocid;
127029 rc = fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList);
127030 j = 1;
127031 while( rc==SQLITE_OK
127032 && j<nMerge
127033 && apSegment[j]->pOffsetList
127034 && apSegment[j]->iDocid==iDocid
127036 rc = fts3SegReaderNextDocid(p, apSegment[j], 0, 0);
127039 if( rc!=SQLITE_OK ) return rc;
127040 fts3SegReaderSort(pMsr->apSegment, nMerge, j, xCmp);
127042 if( pMsr->iColFilter>=0 ){
127043 fts3ColumnFilter(pMsr->iColFilter, &pList, &nList);
127046 if( nList>0 ){
127047 if( fts3SegReaderIsPending(apSegment[0]) ){
127048 rc = fts3MsrBufferData(pMsr, pList, nList+1);
127049 if( rc!=SQLITE_OK ) return rc;
127050 *paPoslist = pMsr->aBuffer;
127051 assert( (pMsr->aBuffer[nList] & 0xFE)==0x00 );
127052 }else{
127053 *paPoslist = pList;
127055 *piDocid = iDocid;
127056 *pnPoslist = nList;
127057 break;
127062 return SQLITE_OK;
127065 static int fts3SegReaderStart(
127066 Fts3Table *p, /* Virtual table handle */
127067 Fts3MultiSegReader *pCsr, /* Cursor object */
127068 const char *zTerm, /* Term searched for (or NULL) */
127069 int nTerm /* Length of zTerm in bytes */
127071 int i;
127072 int nSeg = pCsr->nSegment;
127074 /* If the Fts3SegFilter defines a specific term (or term prefix) to search
127075 ** for, then advance each segment iterator until it points to a term of
127076 ** equal or greater value than the specified term. This prevents many
127077 ** unnecessary merge/sort operations for the case where single segment
127078 ** b-tree leaf nodes contain more than one term.
127080 for(i=0; pCsr->bRestart==0 && i<pCsr->nSegment; i++){
127081 Fts3SegReader *pSeg = pCsr->apSegment[i];
127083 int rc = fts3SegReaderNext(p, pSeg, 0);
127084 if( rc!=SQLITE_OK ) return rc;
127085 }while( zTerm && fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
127087 fts3SegReaderSort(pCsr->apSegment, nSeg, nSeg, fts3SegReaderCmp);
127089 return SQLITE_OK;
127092 SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(
127093 Fts3Table *p, /* Virtual table handle */
127094 Fts3MultiSegReader *pCsr, /* Cursor object */
127095 Fts3SegFilter *pFilter /* Restrictions on range of iteration */
127097 pCsr->pFilter = pFilter;
127098 return fts3SegReaderStart(p, pCsr, pFilter->zTerm, pFilter->nTerm);
127101 SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
127102 Fts3Table *p, /* Virtual table handle */
127103 Fts3MultiSegReader *pCsr, /* Cursor object */
127104 int iCol, /* Column to match on. */
127105 const char *zTerm, /* Term to iterate through a doclist for */
127106 int nTerm /* Number of bytes in zTerm */
127108 int i;
127109 int rc;
127110 int nSegment = pCsr->nSegment;
127111 int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
127112 p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
127115 assert( pCsr->pFilter==0 );
127116 assert( zTerm && nTerm>0 );
127118 /* Advance each segment iterator until it points to the term zTerm/nTerm. */
127119 rc = fts3SegReaderStart(p, pCsr, zTerm, nTerm);
127120 if( rc!=SQLITE_OK ) return rc;
127122 /* Determine how many of the segments actually point to zTerm/nTerm. */
127123 for(i=0; i<nSegment; i++){
127124 Fts3SegReader *pSeg = pCsr->apSegment[i];
127125 if( !pSeg->aNode || fts3SegReaderTermCmp(pSeg, zTerm, nTerm) ){
127126 break;
127129 pCsr->nAdvance = i;
127131 /* Advance each of the segments to point to the first docid. */
127132 for(i=0; i<pCsr->nAdvance; i++){
127133 rc = fts3SegReaderFirstDocid(p, pCsr->apSegment[i]);
127134 if( rc!=SQLITE_OK ) return rc;
127136 fts3SegReaderSort(pCsr->apSegment, i, i, xCmp);
127138 assert( iCol<0 || iCol<p->nColumn );
127139 pCsr->iColFilter = iCol;
127141 return SQLITE_OK;
127145 ** This function is called on a MultiSegReader that has been started using
127146 ** sqlite3Fts3MsrIncrStart(). One or more calls to MsrIncrNext() may also
127147 ** have been made. Calling this function puts the MultiSegReader in such
127148 ** a state that if the next two calls are:
127150 ** sqlite3Fts3SegReaderStart()
127151 ** sqlite3Fts3SegReaderStep()
127153 ** then the entire doclist for the term is available in
127154 ** MultiSegReader.aDoclist/nDoclist.
127156 SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr){
127157 int i; /* Used to iterate through segment-readers */
127159 assert( pCsr->zTerm==0 );
127160 assert( pCsr->nTerm==0 );
127161 assert( pCsr->aDoclist==0 );
127162 assert( pCsr->nDoclist==0 );
127164 pCsr->nAdvance = 0;
127165 pCsr->bRestart = 1;
127166 for(i=0; i<pCsr->nSegment; i++){
127167 pCsr->apSegment[i]->pOffsetList = 0;
127168 pCsr->apSegment[i]->nOffsetList = 0;
127169 pCsr->apSegment[i]->iDocid = 0;
127172 return SQLITE_OK;
127176 SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(
127177 Fts3Table *p, /* Virtual table handle */
127178 Fts3MultiSegReader *pCsr /* Cursor object */
127180 int rc = SQLITE_OK;
127182 int isIgnoreEmpty = (pCsr->pFilter->flags & FTS3_SEGMENT_IGNORE_EMPTY);
127183 int isRequirePos = (pCsr->pFilter->flags & FTS3_SEGMENT_REQUIRE_POS);
127184 int isColFilter = (pCsr->pFilter->flags & FTS3_SEGMENT_COLUMN_FILTER);
127185 int isPrefix = (pCsr->pFilter->flags & FTS3_SEGMENT_PREFIX);
127186 int isScan = (pCsr->pFilter->flags & FTS3_SEGMENT_SCAN);
127187 int isFirst = (pCsr->pFilter->flags & FTS3_SEGMENT_FIRST);
127189 Fts3SegReader **apSegment = pCsr->apSegment;
127190 int nSegment = pCsr->nSegment;
127191 Fts3SegFilter *pFilter = pCsr->pFilter;
127192 int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
127193 p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
127196 if( pCsr->nSegment==0 ) return SQLITE_OK;
127199 int nMerge;
127200 int i;
127202 /* Advance the first pCsr->nAdvance entries in the apSegment[] array
127203 ** forward. Then sort the list in order of current term again.
127205 for(i=0; i<pCsr->nAdvance; i++){
127206 rc = fts3SegReaderNext(p, apSegment[i], 0);
127207 if( rc!=SQLITE_OK ) return rc;
127209 fts3SegReaderSort(apSegment, nSegment, pCsr->nAdvance, fts3SegReaderCmp);
127210 pCsr->nAdvance = 0;
127212 /* If all the seg-readers are at EOF, we're finished. return SQLITE_OK. */
127213 assert( rc==SQLITE_OK );
127214 if( apSegment[0]->aNode==0 ) break;
127216 pCsr->nTerm = apSegment[0]->nTerm;
127217 pCsr->zTerm = apSegment[0]->zTerm;
127219 /* If this is a prefix-search, and if the term that apSegment[0] points
127220 ** to does not share a suffix with pFilter->zTerm/nTerm, then all
127221 ** required callbacks have been made. In this case exit early.
127223 ** Similarly, if this is a search for an exact match, and the first term
127224 ** of segment apSegment[0] is not a match, exit early.
127226 if( pFilter->zTerm && !isScan ){
127227 if( pCsr->nTerm<pFilter->nTerm
127228 || (!isPrefix && pCsr->nTerm>pFilter->nTerm)
127229 || memcmp(pCsr->zTerm, pFilter->zTerm, pFilter->nTerm)
127231 break;
127235 nMerge = 1;
127236 while( nMerge<nSegment
127237 && apSegment[nMerge]->aNode
127238 && apSegment[nMerge]->nTerm==pCsr->nTerm
127239 && 0==memcmp(pCsr->zTerm, apSegment[nMerge]->zTerm, pCsr->nTerm)
127241 nMerge++;
127244 assert( isIgnoreEmpty || (isRequirePos && !isColFilter) );
127245 if( nMerge==1
127246 && !isIgnoreEmpty
127247 && !isFirst
127248 && (p->bDescIdx==0 || fts3SegReaderIsPending(apSegment[0])==0)
127250 pCsr->nDoclist = apSegment[0]->nDoclist;
127251 if( fts3SegReaderIsPending(apSegment[0]) ){
127252 rc = fts3MsrBufferData(pCsr, apSegment[0]->aDoclist, pCsr->nDoclist);
127253 pCsr->aDoclist = pCsr->aBuffer;
127254 }else{
127255 pCsr->aDoclist = apSegment[0]->aDoclist;
127257 if( rc==SQLITE_OK ) rc = SQLITE_ROW;
127258 }else{
127259 int nDoclist = 0; /* Size of doclist */
127260 sqlite3_int64 iPrev = 0; /* Previous docid stored in doclist */
127262 /* The current term of the first nMerge entries in the array
127263 ** of Fts3SegReader objects is the same. The doclists must be merged
127264 ** and a single term returned with the merged doclist.
127266 for(i=0; i<nMerge; i++){
127267 fts3SegReaderFirstDocid(p, apSegment[i]);
127269 fts3SegReaderSort(apSegment, nMerge, nMerge, xCmp);
127270 while( apSegment[0]->pOffsetList ){
127271 int j; /* Number of segments that share a docid */
127272 char *pList;
127273 int nList;
127274 int nByte;
127275 sqlite3_int64 iDocid = apSegment[0]->iDocid;
127276 fts3SegReaderNextDocid(p, apSegment[0], &pList, &nList);
127277 j = 1;
127278 while( j<nMerge
127279 && apSegment[j]->pOffsetList
127280 && apSegment[j]->iDocid==iDocid
127282 fts3SegReaderNextDocid(p, apSegment[j], 0, 0);
127286 if( isColFilter ){
127287 fts3ColumnFilter(pFilter->iCol, &pList, &nList);
127290 if( !isIgnoreEmpty || nList>0 ){
127292 /* Calculate the 'docid' delta value to write into the merged
127293 ** doclist. */
127294 sqlite3_int64 iDelta;
127295 if( p->bDescIdx && nDoclist>0 ){
127296 iDelta = iPrev - iDocid;
127297 }else{
127298 iDelta = iDocid - iPrev;
127300 assert( iDelta>0 || (nDoclist==0 && iDelta==iDocid) );
127301 assert( nDoclist>0 || iDelta==iDocid );
127303 nByte = sqlite3Fts3VarintLen(iDelta) + (isRequirePos?nList+1:0);
127304 if( nDoclist+nByte>pCsr->nBuffer ){
127305 char *aNew;
127306 pCsr->nBuffer = (nDoclist+nByte)*2;
127307 aNew = sqlite3_realloc(pCsr->aBuffer, pCsr->nBuffer);
127308 if( !aNew ){
127309 return SQLITE_NOMEM;
127311 pCsr->aBuffer = aNew;
127314 if( isFirst ){
127315 char *a = &pCsr->aBuffer[nDoclist];
127316 int nWrite;
127318 nWrite = sqlite3Fts3FirstFilter(iDelta, pList, nList, a);
127319 if( nWrite ){
127320 iPrev = iDocid;
127321 nDoclist += nWrite;
127323 }else{
127324 nDoclist += sqlite3Fts3PutVarint(&pCsr->aBuffer[nDoclist], iDelta);
127325 iPrev = iDocid;
127326 if( isRequirePos ){
127327 memcpy(&pCsr->aBuffer[nDoclist], pList, nList);
127328 nDoclist += nList;
127329 pCsr->aBuffer[nDoclist++] = '\0';
127334 fts3SegReaderSort(apSegment, nMerge, j, xCmp);
127336 if( nDoclist>0 ){
127337 pCsr->aDoclist = pCsr->aBuffer;
127338 pCsr->nDoclist = nDoclist;
127339 rc = SQLITE_ROW;
127342 pCsr->nAdvance = nMerge;
127343 }while( rc==SQLITE_OK );
127345 return rc;
127349 SQLITE_PRIVATE void sqlite3Fts3SegReaderFinish(
127350 Fts3MultiSegReader *pCsr /* Cursor object */
127352 if( pCsr ){
127353 int i;
127354 for(i=0; i<pCsr->nSegment; i++){
127355 sqlite3Fts3SegReaderFree(pCsr->apSegment[i]);
127357 sqlite3_free(pCsr->apSegment);
127358 sqlite3_free(pCsr->aBuffer);
127360 pCsr->nSegment = 0;
127361 pCsr->apSegment = 0;
127362 pCsr->aBuffer = 0;
127367 ** Merge all level iLevel segments in the database into a single
127368 ** iLevel+1 segment. Or, if iLevel<0, merge all segments into a
127369 ** single segment with a level equal to the numerically largest level
127370 ** currently present in the database.
127372 ** If this function is called with iLevel<0, but there is only one
127373 ** segment in the database, SQLITE_DONE is returned immediately.
127374 ** Otherwise, if successful, SQLITE_OK is returned. If an error occurs,
127375 ** an SQLite error code is returned.
127377 static int fts3SegmentMerge(Fts3Table *p, int iIndex, int iLevel){
127378 int rc; /* Return code */
127379 int iIdx = 0; /* Index of new segment */
127380 int iNewLevel = 0; /* Level/index to create new segment at */
127381 SegmentWriter *pWriter = 0; /* Used to write the new, merged, segment */
127382 Fts3SegFilter filter; /* Segment term filter condition */
127383 Fts3MultiSegReader csr; /* Cursor to iterate through level(s) */
127384 int bIgnoreEmpty = 0; /* True to ignore empty segments */
127386 assert( iLevel==FTS3_SEGCURSOR_ALL
127387 || iLevel==FTS3_SEGCURSOR_PENDING
127388 || iLevel>=0
127390 assert( iLevel<FTS3_SEGDIR_MAXLEVEL );
127391 assert( iIndex>=0 && iIndex<p->nIndex );
127393 rc = sqlite3Fts3SegReaderCursor(p, iIndex, iLevel, 0, 0, 1, 0, &csr);
127394 if( rc!=SQLITE_OK || csr.nSegment==0 ) goto finished;
127396 if( iLevel==FTS3_SEGCURSOR_ALL ){
127397 /* This call is to merge all segments in the database to a single
127398 ** segment. The level of the new segment is equal to the the numerically
127399 ** greatest segment level currently present in the database for this
127400 ** index. The idx of the new segment is always 0. */
127401 if( csr.nSegment==1 ){
127402 rc = SQLITE_DONE;
127403 goto finished;
127405 rc = fts3SegmentMaxLevel(p, iIndex, &iNewLevel);
127406 bIgnoreEmpty = 1;
127408 }else if( iLevel==FTS3_SEGCURSOR_PENDING ){
127409 iNewLevel = iIndex * FTS3_SEGDIR_MAXLEVEL;
127410 rc = fts3AllocateSegdirIdx(p, iIndex, 0, &iIdx);
127411 }else{
127412 /* This call is to merge all segments at level iLevel. find the next
127413 ** available segment index at level iLevel+1. The call to
127414 ** fts3AllocateSegdirIdx() will merge the segments at level iLevel+1 to
127415 ** a single iLevel+2 segment if necessary. */
127416 rc = fts3AllocateSegdirIdx(p, iIndex, iLevel+1, &iIdx);
127417 iNewLevel = iIndex * FTS3_SEGDIR_MAXLEVEL + iLevel+1;
127419 if( rc!=SQLITE_OK ) goto finished;
127420 assert( csr.nSegment>0 );
127421 assert( iNewLevel>=(iIndex*FTS3_SEGDIR_MAXLEVEL) );
127422 assert( iNewLevel<((iIndex+1)*FTS3_SEGDIR_MAXLEVEL) );
127424 memset(&filter, 0, sizeof(Fts3SegFilter));
127425 filter.flags = FTS3_SEGMENT_REQUIRE_POS;
127426 filter.flags |= (bIgnoreEmpty ? FTS3_SEGMENT_IGNORE_EMPTY : 0);
127428 rc = sqlite3Fts3SegReaderStart(p, &csr, &filter);
127429 while( SQLITE_OK==rc ){
127430 rc = sqlite3Fts3SegReaderStep(p, &csr);
127431 if( rc!=SQLITE_ROW ) break;
127432 rc = fts3SegWriterAdd(p, &pWriter, 1,
127433 csr.zTerm, csr.nTerm, csr.aDoclist, csr.nDoclist);
127435 if( rc!=SQLITE_OK ) goto finished;
127436 assert( pWriter );
127438 if( iLevel!=FTS3_SEGCURSOR_PENDING ){
127439 rc = fts3DeleteSegdir(p, iIndex, iLevel, csr.apSegment, csr.nSegment);
127440 if( rc!=SQLITE_OK ) goto finished;
127442 rc = fts3SegWriterFlush(p, pWriter, iNewLevel, iIdx);
127444 finished:
127445 fts3SegWriterFree(pWriter);
127446 sqlite3Fts3SegReaderFinish(&csr);
127447 return rc;
127452 ** Flush the contents of pendingTerms to level 0 segments.
127454 SQLITE_PRIVATE int sqlite3Fts3PendingTermsFlush(Fts3Table *p){
127455 int rc = SQLITE_OK;
127456 int i;
127457 for(i=0; rc==SQLITE_OK && i<p->nIndex; i++){
127458 rc = fts3SegmentMerge(p, i, FTS3_SEGCURSOR_PENDING);
127459 if( rc==SQLITE_DONE ) rc = SQLITE_OK;
127461 sqlite3Fts3PendingTermsClear(p);
127462 return rc;
127466 ** Encode N integers as varints into a blob.
127468 static void fts3EncodeIntArray(
127469 int N, /* The number of integers to encode */
127470 u32 *a, /* The integer values */
127471 char *zBuf, /* Write the BLOB here */
127472 int *pNBuf /* Write number of bytes if zBuf[] used here */
127474 int i, j;
127475 for(i=j=0; i<N; i++){
127476 j += sqlite3Fts3PutVarint(&zBuf[j], (sqlite3_int64)a[i]);
127478 *pNBuf = j;
127482 ** Decode a blob of varints into N integers
127484 static void fts3DecodeIntArray(
127485 int N, /* The number of integers to decode */
127486 u32 *a, /* Write the integer values */
127487 const char *zBuf, /* The BLOB containing the varints */
127488 int nBuf /* size of the BLOB */
127490 int i, j;
127491 UNUSED_PARAMETER(nBuf);
127492 for(i=j=0; i<N; i++){
127493 sqlite3_int64 x;
127494 j += sqlite3Fts3GetVarint(&zBuf[j], &x);
127495 assert(j<=nBuf);
127496 a[i] = (u32)(x & 0xffffffff);
127501 ** Insert the sizes (in tokens) for each column of the document
127502 ** with docid equal to p->iPrevDocid. The sizes are encoded as
127503 ** a blob of varints.
127505 static void fts3InsertDocsize(
127506 int *pRC, /* Result code */
127507 Fts3Table *p, /* Table into which to insert */
127508 u32 *aSz /* Sizes of each column, in tokens */
127510 char *pBlob; /* The BLOB encoding of the document size */
127511 int nBlob; /* Number of bytes in the BLOB */
127512 sqlite3_stmt *pStmt; /* Statement used to insert the encoding */
127513 int rc; /* Result code from subfunctions */
127515 if( *pRC ) return;
127516 pBlob = sqlite3_malloc( 10*p->nColumn );
127517 if( pBlob==0 ){
127518 *pRC = SQLITE_NOMEM;
127519 return;
127521 fts3EncodeIntArray(p->nColumn, aSz, pBlob, &nBlob);
127522 rc = fts3SqlStmt(p, SQL_REPLACE_DOCSIZE, &pStmt, 0);
127523 if( rc ){
127524 sqlite3_free(pBlob);
127525 *pRC = rc;
127526 return;
127528 sqlite3_bind_int64(pStmt, 1, p->iPrevDocid);
127529 sqlite3_bind_blob(pStmt, 2, pBlob, nBlob, sqlite3_free);
127530 sqlite3_step(pStmt);
127531 *pRC = sqlite3_reset(pStmt);
127535 ** Record 0 of the %_stat table contains a blob consisting of N varints,
127536 ** where N is the number of user defined columns in the fts3 table plus
127537 ** two. If nCol is the number of user defined columns, then values of the
127538 ** varints are set as follows:
127540 ** Varint 0: Total number of rows in the table.
127542 ** Varint 1..nCol: For each column, the total number of tokens stored in
127543 ** the column for all rows of the table.
127545 ** Varint 1+nCol: The total size, in bytes, of all text values in all
127546 ** columns of all rows of the table.
127549 static void fts3UpdateDocTotals(
127550 int *pRC, /* The result code */
127551 Fts3Table *p, /* Table being updated */
127552 u32 *aSzIns, /* Size increases */
127553 u32 *aSzDel, /* Size decreases */
127554 int nChng /* Change in the number of documents */
127556 char *pBlob; /* Storage for BLOB written into %_stat */
127557 int nBlob; /* Size of BLOB written into %_stat */
127558 u32 *a; /* Array of integers that becomes the BLOB */
127559 sqlite3_stmt *pStmt; /* Statement for reading and writing */
127560 int i; /* Loop counter */
127561 int rc; /* Result code from subfunctions */
127563 const int nStat = p->nColumn+2;
127565 if( *pRC ) return;
127566 a = sqlite3_malloc( (sizeof(u32)+10)*nStat );
127567 if( a==0 ){
127568 *pRC = SQLITE_NOMEM;
127569 return;
127571 pBlob = (char*)&a[nStat];
127572 rc = fts3SqlStmt(p, SQL_SELECT_DOCTOTAL, &pStmt, 0);
127573 if( rc ){
127574 sqlite3_free(a);
127575 *pRC = rc;
127576 return;
127578 if( sqlite3_step(pStmt)==SQLITE_ROW ){
127579 fts3DecodeIntArray(nStat, a,
127580 sqlite3_column_blob(pStmt, 0),
127581 sqlite3_column_bytes(pStmt, 0));
127582 }else{
127583 memset(a, 0, sizeof(u32)*(nStat) );
127585 sqlite3_reset(pStmt);
127586 if( nChng<0 && a[0]<(u32)(-nChng) ){
127587 a[0] = 0;
127588 }else{
127589 a[0] += nChng;
127591 for(i=0; i<p->nColumn+1; i++){
127592 u32 x = a[i+1];
127593 if( x+aSzIns[i] < aSzDel[i] ){
127594 x = 0;
127595 }else{
127596 x = x + aSzIns[i] - aSzDel[i];
127598 a[i+1] = x;
127600 fts3EncodeIntArray(nStat, a, pBlob, &nBlob);
127601 rc = fts3SqlStmt(p, SQL_REPLACE_DOCTOTAL, &pStmt, 0);
127602 if( rc ){
127603 sqlite3_free(a);
127604 *pRC = rc;
127605 return;
127607 sqlite3_bind_blob(pStmt, 1, pBlob, nBlob, SQLITE_STATIC);
127608 sqlite3_step(pStmt);
127609 *pRC = sqlite3_reset(pStmt);
127610 sqlite3_free(a);
127613 static int fts3DoOptimize(Fts3Table *p, int bReturnDone){
127614 int i;
127615 int bSeenDone = 0;
127616 int rc = SQLITE_OK;
127617 for(i=0; rc==SQLITE_OK && i<p->nIndex; i++){
127618 rc = fts3SegmentMerge(p, i, FTS3_SEGCURSOR_ALL);
127619 if( rc==SQLITE_DONE ){
127620 bSeenDone = 1;
127621 rc = SQLITE_OK;
127624 sqlite3Fts3SegmentsClose(p);
127625 sqlite3Fts3PendingTermsClear(p);
127627 return (rc==SQLITE_OK && bReturnDone && bSeenDone) ? SQLITE_DONE : rc;
127631 ** This function is called when the user executes the following statement:
127633 ** INSERT INTO <tbl>(<tbl>) VALUES('rebuild');
127635 ** The entire FTS index is discarded and rebuilt. If the table is one
127636 ** created using the content=xxx option, then the new index is based on
127637 ** the current contents of the xxx table. Otherwise, it is rebuilt based
127638 ** on the contents of the %_content table.
127640 static int fts3DoRebuild(Fts3Table *p){
127641 int rc; /* Return Code */
127643 rc = fts3DeleteAll(p, 0);
127644 if( rc==SQLITE_OK ){
127645 u32 *aSz = 0;
127646 u32 *aSzIns = 0;
127647 u32 *aSzDel = 0;
127648 sqlite3_stmt *pStmt = 0;
127649 int nEntry = 0;
127651 /* Compose and prepare an SQL statement to loop through the content table */
127652 char *zSql = sqlite3_mprintf("SELECT %s" , p->zReadExprlist);
127653 if( !zSql ){
127654 rc = SQLITE_NOMEM;
127655 }else{
127656 rc = sqlite3_prepare_v2(p->db, zSql, -1, &pStmt, 0);
127657 sqlite3_free(zSql);
127660 if( rc==SQLITE_OK ){
127661 int nByte = sizeof(u32) * (p->nColumn+1)*3;
127662 aSz = (u32 *)sqlite3_malloc(nByte);
127663 if( aSz==0 ){
127664 rc = SQLITE_NOMEM;
127665 }else{
127666 memset(aSz, 0, nByte);
127667 aSzIns = &aSz[p->nColumn+1];
127668 aSzDel = &aSzIns[p->nColumn+1];
127672 while( rc==SQLITE_OK && SQLITE_ROW==sqlite3_step(pStmt) ){
127673 int iCol;
127674 rc = fts3PendingTermsDocid(p, sqlite3_column_int64(pStmt, 0));
127675 aSz[p->nColumn] = 0;
127676 for(iCol=0; rc==SQLITE_OK && iCol<p->nColumn; iCol++){
127677 const char *z = (const char *) sqlite3_column_text(pStmt, iCol+1);
127678 rc = fts3PendingTermsAdd(p, z, iCol, &aSz[iCol]);
127679 aSz[p->nColumn] += sqlite3_column_bytes(pStmt, iCol+1);
127681 if( p->bHasDocsize ){
127682 fts3InsertDocsize(&rc, p, aSz);
127684 if( rc!=SQLITE_OK ){
127685 sqlite3_finalize(pStmt);
127686 pStmt = 0;
127687 }else{
127688 nEntry++;
127689 for(iCol=0; iCol<=p->nColumn; iCol++){
127690 aSzIns[iCol] += aSz[iCol];
127694 if( p->bHasStat ){
127695 fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nEntry);
127697 sqlite3_free(aSz);
127699 if( pStmt ){
127700 int rc2 = sqlite3_finalize(pStmt);
127701 if( rc==SQLITE_OK ){
127702 rc = rc2;
127707 return rc;
127711 ** Handle a 'special' INSERT of the form:
127713 ** "INSERT INTO tbl(tbl) VALUES(<expr>)"
127715 ** Argument pVal contains the result of <expr>. Currently the only
127716 ** meaningful value to insert is the text 'optimize'.
127718 static int fts3SpecialInsert(Fts3Table *p, sqlite3_value *pVal){
127719 int rc; /* Return Code */
127720 const char *zVal = (const char *)sqlite3_value_text(pVal);
127721 int nVal = sqlite3_value_bytes(pVal);
127723 if( !zVal ){
127724 return SQLITE_NOMEM;
127725 }else if( nVal==8 && 0==sqlite3_strnicmp(zVal, "optimize", 8) ){
127726 rc = fts3DoOptimize(p, 0);
127727 }else if( nVal==7 && 0==sqlite3_strnicmp(zVal, "rebuild", 7) ){
127728 rc = fts3DoRebuild(p);
127729 #ifdef SQLITE_TEST
127730 }else if( nVal>9 && 0==sqlite3_strnicmp(zVal, "nodesize=", 9) ){
127731 p->nNodeSize = atoi(&zVal[9]);
127732 rc = SQLITE_OK;
127733 }else if( nVal>11 && 0==sqlite3_strnicmp(zVal, "maxpending=", 9) ){
127734 p->nMaxPendingData = atoi(&zVal[11]);
127735 rc = SQLITE_OK;
127736 #endif
127737 }else{
127738 rc = SQLITE_ERROR;
127741 return rc;
127745 ** Delete all cached deferred doclists. Deferred doclists are cached
127746 ** (allocated) by the sqlite3Fts3CacheDeferredDoclists() function.
127748 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredDoclists(Fts3Cursor *pCsr){
127749 Fts3DeferredToken *pDef;
127750 for(pDef=pCsr->pDeferred; pDef; pDef=pDef->pNext){
127751 fts3PendingListDelete(pDef->pList);
127752 pDef->pList = 0;
127757 ** Free all entries in the pCsr->pDeffered list. Entries are added to
127758 ** this list using sqlite3Fts3DeferToken().
127760 SQLITE_PRIVATE void sqlite3Fts3FreeDeferredTokens(Fts3Cursor *pCsr){
127761 Fts3DeferredToken *pDef;
127762 Fts3DeferredToken *pNext;
127763 for(pDef=pCsr->pDeferred; pDef; pDef=pNext){
127764 pNext = pDef->pNext;
127765 fts3PendingListDelete(pDef->pList);
127766 sqlite3_free(pDef);
127768 pCsr->pDeferred = 0;
127772 ** Generate deferred-doclists for all tokens in the pCsr->pDeferred list
127773 ** based on the row that pCsr currently points to.
127775 ** A deferred-doclist is like any other doclist with position information
127776 ** included, except that it only contains entries for a single row of the
127777 ** table, not for all rows.
127779 SQLITE_PRIVATE int sqlite3Fts3CacheDeferredDoclists(Fts3Cursor *pCsr){
127780 int rc = SQLITE_OK; /* Return code */
127781 if( pCsr->pDeferred ){
127782 int i; /* Used to iterate through table columns */
127783 sqlite3_int64 iDocid; /* Docid of the row pCsr points to */
127784 Fts3DeferredToken *pDef; /* Used to iterate through deferred tokens */
127786 Fts3Table *p = (Fts3Table *)pCsr->base.pVtab;
127787 sqlite3_tokenizer *pT = p->pTokenizer;
127788 sqlite3_tokenizer_module const *pModule = pT->pModule;
127790 assert( pCsr->isRequireSeek==0 );
127791 iDocid = sqlite3_column_int64(pCsr->pStmt, 0);
127793 for(i=0; i<p->nColumn && rc==SQLITE_OK; i++){
127794 const char *zText = (const char *)sqlite3_column_text(pCsr->pStmt, i+1);
127795 sqlite3_tokenizer_cursor *pTC = 0;
127797 rc = pModule->xOpen(pT, zText, -1, &pTC);
127798 while( rc==SQLITE_OK ){
127799 char const *zToken; /* Buffer containing token */
127800 int nToken; /* Number of bytes in token */
127801 int iDum1, iDum2; /* Dummy variables */
127802 int iPos; /* Position of token in zText */
127804 pTC->pTokenizer = pT;
127805 rc = pModule->xNext(pTC, &zToken, &nToken, &iDum1, &iDum2, &iPos);
127806 for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
127807 Fts3PhraseToken *pPT = pDef->pToken;
127808 if( (pDef->iCol>=p->nColumn || pDef->iCol==i)
127809 && (pPT->bFirst==0 || iPos==0)
127810 && (pPT->n==nToken || (pPT->isPrefix && pPT->n<nToken))
127811 && (0==memcmp(zToken, pPT->z, pPT->n))
127813 fts3PendingListAppend(&pDef->pList, iDocid, i, iPos, &rc);
127817 if( pTC ) pModule->xClose(pTC);
127818 if( rc==SQLITE_DONE ) rc = SQLITE_OK;
127821 for(pDef=pCsr->pDeferred; pDef && rc==SQLITE_OK; pDef=pDef->pNext){
127822 if( pDef->pList ){
127823 rc = fts3PendingListAppendVarint(&pDef->pList, 0);
127828 return rc;
127831 SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(
127832 Fts3DeferredToken *p,
127833 char **ppData,
127834 int *pnData
127836 char *pRet;
127837 int nSkip;
127838 sqlite3_int64 dummy;
127840 *ppData = 0;
127841 *pnData = 0;
127843 if( p->pList==0 ){
127844 return SQLITE_OK;
127847 pRet = (char *)sqlite3_malloc(p->pList->nData);
127848 if( !pRet ) return SQLITE_NOMEM;
127850 nSkip = sqlite3Fts3GetVarint(p->pList->aData, &dummy);
127851 *pnData = p->pList->nData - nSkip;
127852 *ppData = pRet;
127854 memcpy(pRet, &p->pList->aData[nSkip], *pnData);
127855 return SQLITE_OK;
127859 ** Add an entry for token pToken to the pCsr->pDeferred list.
127861 SQLITE_PRIVATE int sqlite3Fts3DeferToken(
127862 Fts3Cursor *pCsr, /* Fts3 table cursor */
127863 Fts3PhraseToken *pToken, /* Token to defer */
127864 int iCol /* Column that token must appear in (or -1) */
127866 Fts3DeferredToken *pDeferred;
127867 pDeferred = sqlite3_malloc(sizeof(*pDeferred));
127868 if( !pDeferred ){
127869 return SQLITE_NOMEM;
127871 memset(pDeferred, 0, sizeof(*pDeferred));
127872 pDeferred->pToken = pToken;
127873 pDeferred->pNext = pCsr->pDeferred;
127874 pDeferred->iCol = iCol;
127875 pCsr->pDeferred = pDeferred;
127877 assert( pToken->pDeferred==0 );
127878 pToken->pDeferred = pDeferred;
127880 return SQLITE_OK;
127884 ** SQLite value pRowid contains the rowid of a row that may or may not be
127885 ** present in the FTS3 table. If it is, delete it and adjust the contents
127886 ** of subsiduary data structures accordingly.
127888 static int fts3DeleteByRowid(
127889 Fts3Table *p,
127890 sqlite3_value *pRowid,
127891 int *pnDoc,
127892 u32 *aSzDel
127894 int isEmpty = 0;
127895 int rc = fts3IsEmpty(p, pRowid, &isEmpty);
127896 if( rc==SQLITE_OK ){
127897 if( isEmpty ){
127898 /* Deleting this row means the whole table is empty. In this case
127899 ** delete the contents of all three tables and throw away any
127900 ** data in the pendingTerms hash table. */
127901 rc = fts3DeleteAll(p, 1);
127902 *pnDoc = *pnDoc - 1;
127903 }else{
127904 sqlite3_int64 iRemove = sqlite3_value_int64(pRowid);
127905 rc = fts3PendingTermsDocid(p, iRemove);
127906 fts3DeleteTerms(&rc, p, pRowid, aSzDel);
127907 if( p->zContentTbl==0 ){
127908 fts3SqlExec(&rc, p, SQL_DELETE_CONTENT, &pRowid);
127909 if( sqlite3_changes(p->db) ) *pnDoc = *pnDoc - 1;
127910 }else{
127911 *pnDoc = *pnDoc - 1;
127913 if( p->bHasDocsize ){
127914 fts3SqlExec(&rc, p, SQL_DELETE_DOCSIZE, &pRowid);
127919 return rc;
127923 ** This function does the work for the xUpdate method of FTS3 virtual
127924 ** tables.
127926 SQLITE_PRIVATE int sqlite3Fts3UpdateMethod(
127927 sqlite3_vtab *pVtab, /* FTS3 vtab object */
127928 int nArg, /* Size of argument array */
127929 sqlite3_value **apVal, /* Array of arguments */
127930 sqlite_int64 *pRowid /* OUT: The affected (or effected) rowid */
127932 Fts3Table *p = (Fts3Table *)pVtab;
127933 int rc = SQLITE_OK; /* Return Code */
127934 int isRemove = 0; /* True for an UPDATE or DELETE */
127935 u32 *aSzIns = 0; /* Sizes of inserted documents */
127936 u32 *aSzDel; /* Sizes of deleted documents */
127937 int nChng = 0; /* Net change in number of documents */
127938 int bInsertDone = 0;
127940 assert( p->pSegments==0 );
127942 /* Check for a "special" INSERT operation. One of the form:
127944 ** INSERT INTO xyz(xyz) VALUES('command');
127946 if( nArg>1
127947 && sqlite3_value_type(apVal[0])==SQLITE_NULL
127948 && sqlite3_value_type(apVal[p->nColumn+2])!=SQLITE_NULL
127950 rc = fts3SpecialInsert(p, apVal[p->nColumn+2]);
127951 goto update_out;
127954 /* Allocate space to hold the change in document sizes */
127955 aSzIns = sqlite3_malloc( sizeof(aSzIns[0])*(p->nColumn+1)*2 );
127956 if( aSzIns==0 ){
127957 rc = SQLITE_NOMEM;
127958 goto update_out;
127960 aSzDel = &aSzIns[p->nColumn+1];
127961 memset(aSzIns, 0, sizeof(aSzIns[0])*(p->nColumn+1)*2);
127963 /* If this is an INSERT operation, or an UPDATE that modifies the rowid
127964 ** value, then this operation requires constraint handling.
127966 ** If the on-conflict mode is REPLACE, this means that the existing row
127967 ** should be deleted from the database before inserting the new row. Or,
127968 ** if the on-conflict mode is other than REPLACE, then this method must
127969 ** detect the conflict and return SQLITE_CONSTRAINT before beginning to
127970 ** modify the database file.
127972 if( nArg>1 && p->zContentTbl==0 ){
127973 /* Find the value object that holds the new rowid value. */
127974 sqlite3_value *pNewRowid = apVal[3+p->nColumn];
127975 if( sqlite3_value_type(pNewRowid)==SQLITE_NULL ){
127976 pNewRowid = apVal[1];
127979 if( sqlite3_value_type(pNewRowid)!=SQLITE_NULL && (
127980 sqlite3_value_type(apVal[0])==SQLITE_NULL
127981 || sqlite3_value_int64(apVal[0])!=sqlite3_value_int64(pNewRowid)
127983 /* The new rowid is not NULL (in this case the rowid will be
127984 ** automatically assigned and there is no chance of a conflict), and
127985 ** the statement is either an INSERT or an UPDATE that modifies the
127986 ** rowid column. So if the conflict mode is REPLACE, then delete any
127987 ** existing row with rowid=pNewRowid.
127989 ** Or, if the conflict mode is not REPLACE, insert the new record into
127990 ** the %_content table. If we hit the duplicate rowid constraint (or any
127991 ** other error) while doing so, return immediately.
127993 ** This branch may also run if pNewRowid contains a value that cannot
127994 ** be losslessly converted to an integer. In this case, the eventual
127995 ** call to fts3InsertData() (either just below or further on in this
127996 ** function) will return SQLITE_MISMATCH. If fts3DeleteByRowid is
127997 ** invoked, it will delete zero rows (since no row will have
127998 ** docid=$pNewRowid if $pNewRowid is not an integer value).
128000 if( sqlite3_vtab_on_conflict(p->db)==SQLITE_REPLACE ){
128001 rc = fts3DeleteByRowid(p, pNewRowid, &nChng, aSzDel);
128002 }else{
128003 rc = fts3InsertData(p, apVal, pRowid);
128004 bInsertDone = 1;
128008 if( rc!=SQLITE_OK ){
128009 goto update_out;
128012 /* If this is a DELETE or UPDATE operation, remove the old record. */
128013 if( sqlite3_value_type(apVal[0])!=SQLITE_NULL ){
128014 assert( sqlite3_value_type(apVal[0])==SQLITE_INTEGER );
128015 rc = fts3DeleteByRowid(p, apVal[0], &nChng, aSzDel);
128016 isRemove = 1;
128019 /* If this is an INSERT or UPDATE operation, insert the new record. */
128020 if( nArg>1 && rc==SQLITE_OK ){
128021 if( bInsertDone==0 ){
128022 rc = fts3InsertData(p, apVal, pRowid);
128023 if( rc==SQLITE_CONSTRAINT && p->zContentTbl==0 ){
128024 rc = FTS_CORRUPT_VTAB;
128027 if( rc==SQLITE_OK && (!isRemove || *pRowid!=p->iPrevDocid ) ){
128028 rc = fts3PendingTermsDocid(p, *pRowid);
128030 if( rc==SQLITE_OK ){
128031 assert( p->iPrevDocid==*pRowid );
128032 rc = fts3InsertTerms(p, apVal, aSzIns);
128034 if( p->bHasDocsize ){
128035 fts3InsertDocsize(&rc, p, aSzIns);
128037 nChng++;
128040 if( p->bHasStat ){
128041 fts3UpdateDocTotals(&rc, p, aSzIns, aSzDel, nChng);
128044 update_out:
128045 sqlite3_free(aSzIns);
128046 sqlite3Fts3SegmentsClose(p);
128047 return rc;
128051 ** Flush any data in the pending-terms hash table to disk. If successful,
128052 ** merge all segments in the database (including the new segment, if
128053 ** there was any data to flush) into a single segment.
128055 SQLITE_PRIVATE int sqlite3Fts3Optimize(Fts3Table *p){
128056 int rc;
128057 rc = sqlite3_exec(p->db, "SAVEPOINT fts3", 0, 0, 0);
128058 if( rc==SQLITE_OK ){
128059 rc = fts3DoOptimize(p, 1);
128060 if( rc==SQLITE_OK || rc==SQLITE_DONE ){
128061 int rc2 = sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
128062 if( rc2!=SQLITE_OK ) rc = rc2;
128063 }else{
128064 sqlite3_exec(p->db, "ROLLBACK TO fts3", 0, 0, 0);
128065 sqlite3_exec(p->db, "RELEASE fts3", 0, 0, 0);
128068 sqlite3Fts3SegmentsClose(p);
128069 return rc;
128072 #endif
128074 /************** End of fts3_write.c ******************************************/
128075 /************** Begin file fts3_snippet.c ************************************/
128077 ** 2009 Oct 23
128079 ** The author disclaims copyright to this source code. In place of
128080 ** a legal notice, here is a blessing:
128082 ** May you do good and not evil.
128083 ** May you find forgiveness for yourself and forgive others.
128084 ** May you share freely, never taking more than you give.
128086 ******************************************************************************
128089 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
128091 /* #include <string.h> */
128092 /* #include <assert.h> */
128095 ** Characters that may appear in the second argument to matchinfo().
128097 #define FTS3_MATCHINFO_NPHRASE 'p' /* 1 value */
128098 #define FTS3_MATCHINFO_NCOL 'c' /* 1 value */
128099 #define FTS3_MATCHINFO_NDOC 'n' /* 1 value */
128100 #define FTS3_MATCHINFO_AVGLENGTH 'a' /* nCol values */
128101 #define FTS3_MATCHINFO_LENGTH 'l' /* nCol values */
128102 #define FTS3_MATCHINFO_LCS 's' /* nCol values */
128103 #define FTS3_MATCHINFO_HITS 'x' /* 3*nCol*nPhrase values */
128106 ** The default value for the second argument to matchinfo().
128108 #define FTS3_MATCHINFO_DEFAULT "pcx"
128112 ** Used as an fts3ExprIterate() context when loading phrase doclists to
128113 ** Fts3Expr.aDoclist[]/nDoclist.
128115 typedef struct LoadDoclistCtx LoadDoclistCtx;
128116 struct LoadDoclistCtx {
128117 Fts3Cursor *pCsr; /* FTS3 Cursor */
128118 int nPhrase; /* Number of phrases seen so far */
128119 int nToken; /* Number of tokens seen so far */
128123 ** The following types are used as part of the implementation of the
128124 ** fts3BestSnippet() routine.
128126 typedef struct SnippetIter SnippetIter;
128127 typedef struct SnippetPhrase SnippetPhrase;
128128 typedef struct SnippetFragment SnippetFragment;
128130 struct SnippetIter {
128131 Fts3Cursor *pCsr; /* Cursor snippet is being generated from */
128132 int iCol; /* Extract snippet from this column */
128133 int nSnippet; /* Requested snippet length (in tokens) */
128134 int nPhrase; /* Number of phrases in query */
128135 SnippetPhrase *aPhrase; /* Array of size nPhrase */
128136 int iCurrent; /* First token of current snippet */
128139 struct SnippetPhrase {
128140 int nToken; /* Number of tokens in phrase */
128141 char *pList; /* Pointer to start of phrase position list */
128142 int iHead; /* Next value in position list */
128143 char *pHead; /* Position list data following iHead */
128144 int iTail; /* Next value in trailing position list */
128145 char *pTail; /* Position list data following iTail */
128148 struct SnippetFragment {
128149 int iCol; /* Column snippet is extracted from */
128150 int iPos; /* Index of first token in snippet */
128151 u64 covered; /* Mask of query phrases covered */
128152 u64 hlmask; /* Mask of snippet terms to highlight */
128156 ** This type is used as an fts3ExprIterate() context object while
128157 ** accumulating the data returned by the matchinfo() function.
128159 typedef struct MatchInfo MatchInfo;
128160 struct MatchInfo {
128161 Fts3Cursor *pCursor; /* FTS3 Cursor */
128162 int nCol; /* Number of columns in table */
128163 int nPhrase; /* Number of matchable phrases in query */
128164 sqlite3_int64 nDoc; /* Number of docs in database */
128165 u32 *aMatchinfo; /* Pre-allocated buffer */
128171 ** The snippet() and offsets() functions both return text values. An instance
128172 ** of the following structure is used to accumulate those values while the
128173 ** functions are running. See fts3StringAppend() for details.
128175 typedef struct StrBuffer StrBuffer;
128176 struct StrBuffer {
128177 char *z; /* Pointer to buffer containing string */
128178 int n; /* Length of z in bytes (excl. nul-term) */
128179 int nAlloc; /* Allocated size of buffer z in bytes */
128184 ** This function is used to help iterate through a position-list. A position
128185 ** list is a list of unique integers, sorted from smallest to largest. Each
128186 ** element of the list is represented by an FTS3 varint that takes the value
128187 ** of the difference between the current element and the previous one plus
128188 ** two. For example, to store the position-list:
128190 ** 4 9 113
128192 ** the three varints:
128194 ** 6 7 106
128196 ** are encoded.
128198 ** When this function is called, *pp points to the start of an element of
128199 ** the list. *piPos contains the value of the previous entry in the list.
128200 ** After it returns, *piPos contains the value of the next element of the
128201 ** list and *pp is advanced to the following varint.
128203 static void fts3GetDeltaPosition(char **pp, int *piPos){
128204 int iVal;
128205 *pp += sqlite3Fts3GetVarint32(*pp, &iVal);
128206 *piPos += (iVal-2);
128210 ** Helper function for fts3ExprIterate() (see below).
128212 static int fts3ExprIterate2(
128213 Fts3Expr *pExpr, /* Expression to iterate phrases of */
128214 int *piPhrase, /* Pointer to phrase counter */
128215 int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */
128216 void *pCtx /* Second argument to pass to callback */
128218 int rc; /* Return code */
128219 int eType = pExpr->eType; /* Type of expression node pExpr */
128221 if( eType!=FTSQUERY_PHRASE ){
128222 assert( pExpr->pLeft && pExpr->pRight );
128223 rc = fts3ExprIterate2(pExpr->pLeft, piPhrase, x, pCtx);
128224 if( rc==SQLITE_OK && eType!=FTSQUERY_NOT ){
128225 rc = fts3ExprIterate2(pExpr->pRight, piPhrase, x, pCtx);
128227 }else{
128228 rc = x(pExpr, *piPhrase, pCtx);
128229 (*piPhrase)++;
128231 return rc;
128235 ** Iterate through all phrase nodes in an FTS3 query, except those that
128236 ** are part of a sub-tree that is the right-hand-side of a NOT operator.
128237 ** For each phrase node found, the supplied callback function is invoked.
128239 ** If the callback function returns anything other than SQLITE_OK,
128240 ** the iteration is abandoned and the error code returned immediately.
128241 ** Otherwise, SQLITE_OK is returned after a callback has been made for
128242 ** all eligible phrase nodes.
128244 static int fts3ExprIterate(
128245 Fts3Expr *pExpr, /* Expression to iterate phrases of */
128246 int (*x)(Fts3Expr*,int,void*), /* Callback function to invoke for phrases */
128247 void *pCtx /* Second argument to pass to callback */
128249 int iPhrase = 0; /* Variable used as the phrase counter */
128250 return fts3ExprIterate2(pExpr, &iPhrase, x, pCtx);
128254 ** This is an fts3ExprIterate() callback used while loading the doclists
128255 ** for each phrase into Fts3Expr.aDoclist[]/nDoclist. See also
128256 ** fts3ExprLoadDoclists().
128258 static int fts3ExprLoadDoclistsCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
128259 int rc = SQLITE_OK;
128260 Fts3Phrase *pPhrase = pExpr->pPhrase;
128261 LoadDoclistCtx *p = (LoadDoclistCtx *)ctx;
128263 UNUSED_PARAMETER(iPhrase);
128265 p->nPhrase++;
128266 p->nToken += pPhrase->nToken;
128268 return rc;
128272 ** Load the doclists for each phrase in the query associated with FTS3 cursor
128273 ** pCsr.
128275 ** If pnPhrase is not NULL, then *pnPhrase is set to the number of matchable
128276 ** phrases in the expression (all phrases except those directly or
128277 ** indirectly descended from the right-hand-side of a NOT operator). If
128278 ** pnToken is not NULL, then it is set to the number of tokens in all
128279 ** matchable phrases of the expression.
128281 static int fts3ExprLoadDoclists(
128282 Fts3Cursor *pCsr, /* Fts3 cursor for current query */
128283 int *pnPhrase, /* OUT: Number of phrases in query */
128284 int *pnToken /* OUT: Number of tokens in query */
128286 int rc; /* Return Code */
128287 LoadDoclistCtx sCtx = {0,0,0}; /* Context for fts3ExprIterate() */
128288 sCtx.pCsr = pCsr;
128289 rc = fts3ExprIterate(pCsr->pExpr, fts3ExprLoadDoclistsCb, (void *)&sCtx);
128290 if( pnPhrase ) *pnPhrase = sCtx.nPhrase;
128291 if( pnToken ) *pnToken = sCtx.nToken;
128292 return rc;
128295 static int fts3ExprPhraseCountCb(Fts3Expr *pExpr, int iPhrase, void *ctx){
128296 (*(int *)ctx)++;
128297 UNUSED_PARAMETER(pExpr);
128298 UNUSED_PARAMETER(iPhrase);
128299 return SQLITE_OK;
128301 static int fts3ExprPhraseCount(Fts3Expr *pExpr){
128302 int nPhrase = 0;
128303 (void)fts3ExprIterate(pExpr, fts3ExprPhraseCountCb, (void *)&nPhrase);
128304 return nPhrase;
128308 ** Advance the position list iterator specified by the first two
128309 ** arguments so that it points to the first element with a value greater
128310 ** than or equal to parameter iNext.
128312 static void fts3SnippetAdvance(char **ppIter, int *piIter, int iNext){
128313 char *pIter = *ppIter;
128314 if( pIter ){
128315 int iIter = *piIter;
128317 while( iIter<iNext ){
128318 if( 0==(*pIter & 0xFE) ){
128319 iIter = -1;
128320 pIter = 0;
128321 break;
128323 fts3GetDeltaPosition(&pIter, &iIter);
128326 *piIter = iIter;
128327 *ppIter = pIter;
128332 ** Advance the snippet iterator to the next candidate snippet.
128334 static int fts3SnippetNextCandidate(SnippetIter *pIter){
128335 int i; /* Loop counter */
128337 if( pIter->iCurrent<0 ){
128338 /* The SnippetIter object has just been initialized. The first snippet
128339 ** candidate always starts at offset 0 (even if this candidate has a
128340 ** score of 0.0).
128342 pIter->iCurrent = 0;
128344 /* Advance the 'head' iterator of each phrase to the first offset that
128345 ** is greater than or equal to (iNext+nSnippet).
128347 for(i=0; i<pIter->nPhrase; i++){
128348 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128349 fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, pIter->nSnippet);
128351 }else{
128352 int iStart;
128353 int iEnd = 0x7FFFFFFF;
128355 for(i=0; i<pIter->nPhrase; i++){
128356 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128357 if( pPhrase->pHead && pPhrase->iHead<iEnd ){
128358 iEnd = pPhrase->iHead;
128361 if( iEnd==0x7FFFFFFF ){
128362 return 1;
128365 pIter->iCurrent = iStart = iEnd - pIter->nSnippet + 1;
128366 for(i=0; i<pIter->nPhrase; i++){
128367 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128368 fts3SnippetAdvance(&pPhrase->pHead, &pPhrase->iHead, iEnd+1);
128369 fts3SnippetAdvance(&pPhrase->pTail, &pPhrase->iTail, iStart);
128373 return 0;
128377 ** Retrieve information about the current candidate snippet of snippet
128378 ** iterator pIter.
128380 static void fts3SnippetDetails(
128381 SnippetIter *pIter, /* Snippet iterator */
128382 u64 mCovered, /* Bitmask of phrases already covered */
128383 int *piToken, /* OUT: First token of proposed snippet */
128384 int *piScore, /* OUT: "Score" for this snippet */
128385 u64 *pmCover, /* OUT: Bitmask of phrases covered */
128386 u64 *pmHighlight /* OUT: Bitmask of terms to highlight */
128388 int iStart = pIter->iCurrent; /* First token of snippet */
128389 int iScore = 0; /* Score of this snippet */
128390 int i; /* Loop counter */
128391 u64 mCover = 0; /* Mask of phrases covered by this snippet */
128392 u64 mHighlight = 0; /* Mask of tokens to highlight in snippet */
128394 for(i=0; i<pIter->nPhrase; i++){
128395 SnippetPhrase *pPhrase = &pIter->aPhrase[i];
128396 if( pPhrase->pTail ){
128397 char *pCsr = pPhrase->pTail;
128398 int iCsr = pPhrase->iTail;
128400 while( iCsr<(iStart+pIter->nSnippet) ){
128401 int j;
128402 u64 mPhrase = (u64)1 << i;
128403 u64 mPos = (u64)1 << (iCsr - iStart);
128404 assert( iCsr>=iStart );
128405 if( (mCover|mCovered)&mPhrase ){
128406 iScore++;
128407 }else{
128408 iScore += 1000;
128410 mCover |= mPhrase;
128412 for(j=0; j<pPhrase->nToken; j++){
128413 mHighlight |= (mPos>>j);
128416 if( 0==(*pCsr & 0x0FE) ) break;
128417 fts3GetDeltaPosition(&pCsr, &iCsr);
128422 /* Set the output variables before returning. */
128423 *piToken = iStart;
128424 *piScore = iScore;
128425 *pmCover = mCover;
128426 *pmHighlight = mHighlight;
128430 ** This function is an fts3ExprIterate() callback used by fts3BestSnippet().
128431 ** Each invocation populates an element of the SnippetIter.aPhrase[] array.
128433 static int fts3SnippetFindPositions(Fts3Expr *pExpr, int iPhrase, void *ctx){
128434 SnippetIter *p = (SnippetIter *)ctx;
128435 SnippetPhrase *pPhrase = &p->aPhrase[iPhrase];
128436 char *pCsr;
128438 pPhrase->nToken = pExpr->pPhrase->nToken;
128440 pCsr = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol);
128441 if( pCsr ){
128442 int iFirst = 0;
128443 pPhrase->pList = pCsr;
128444 fts3GetDeltaPosition(&pCsr, &iFirst);
128445 assert( iFirst>=0 );
128446 pPhrase->pHead = pCsr;
128447 pPhrase->pTail = pCsr;
128448 pPhrase->iHead = iFirst;
128449 pPhrase->iTail = iFirst;
128450 }else{
128451 assert( pPhrase->pList==0 && pPhrase->pHead==0 && pPhrase->pTail==0 );
128454 return SQLITE_OK;
128458 ** Select the fragment of text consisting of nFragment contiguous tokens
128459 ** from column iCol that represent the "best" snippet. The best snippet
128460 ** is the snippet with the highest score, where scores are calculated
128461 ** by adding:
128463 ** (a) +1 point for each occurence of a matchable phrase in the snippet.
128465 ** (b) +1000 points for the first occurence of each matchable phrase in
128466 ** the snippet for which the corresponding mCovered bit is not set.
128468 ** The selected snippet parameters are stored in structure *pFragment before
128469 ** returning. The score of the selected snippet is stored in *piScore
128470 ** before returning.
128472 static int fts3BestSnippet(
128473 int nSnippet, /* Desired snippet length */
128474 Fts3Cursor *pCsr, /* Cursor to create snippet for */
128475 int iCol, /* Index of column to create snippet from */
128476 u64 mCovered, /* Mask of phrases already covered */
128477 u64 *pmSeen, /* IN/OUT: Mask of phrases seen */
128478 SnippetFragment *pFragment, /* OUT: Best snippet found */
128479 int *piScore /* OUT: Score of snippet pFragment */
128481 int rc; /* Return Code */
128482 int nList; /* Number of phrases in expression */
128483 SnippetIter sIter; /* Iterates through snippet candidates */
128484 int nByte; /* Number of bytes of space to allocate */
128485 int iBestScore = -1; /* Best snippet score found so far */
128486 int i; /* Loop counter */
128488 memset(&sIter, 0, sizeof(sIter));
128490 /* Iterate through the phrases in the expression to count them. The same
128491 ** callback makes sure the doclists are loaded for each phrase.
128493 rc = fts3ExprLoadDoclists(pCsr, &nList, 0);
128494 if( rc!=SQLITE_OK ){
128495 return rc;
128498 /* Now that it is known how many phrases there are, allocate and zero
128499 ** the required space using malloc().
128501 nByte = sizeof(SnippetPhrase) * nList;
128502 sIter.aPhrase = (SnippetPhrase *)sqlite3_malloc(nByte);
128503 if( !sIter.aPhrase ){
128504 return SQLITE_NOMEM;
128506 memset(sIter.aPhrase, 0, nByte);
128508 /* Initialize the contents of the SnippetIter object. Then iterate through
128509 ** the set of phrases in the expression to populate the aPhrase[] array.
128511 sIter.pCsr = pCsr;
128512 sIter.iCol = iCol;
128513 sIter.nSnippet = nSnippet;
128514 sIter.nPhrase = nList;
128515 sIter.iCurrent = -1;
128516 (void)fts3ExprIterate(pCsr->pExpr, fts3SnippetFindPositions, (void *)&sIter);
128518 /* Set the *pmSeen output variable. */
128519 for(i=0; i<nList; i++){
128520 if( sIter.aPhrase[i].pHead ){
128521 *pmSeen |= (u64)1 << i;
128525 /* Loop through all candidate snippets. Store the best snippet in
128526 ** *pFragment. Store its associated 'score' in iBestScore.
128528 pFragment->iCol = iCol;
128529 while( !fts3SnippetNextCandidate(&sIter) ){
128530 int iPos;
128531 int iScore;
128532 u64 mCover;
128533 u64 mHighlight;
128534 fts3SnippetDetails(&sIter, mCovered, &iPos, &iScore, &mCover, &mHighlight);
128535 assert( iScore>=0 );
128536 if( iScore>iBestScore ){
128537 pFragment->iPos = iPos;
128538 pFragment->hlmask = mHighlight;
128539 pFragment->covered = mCover;
128540 iBestScore = iScore;
128544 sqlite3_free(sIter.aPhrase);
128545 *piScore = iBestScore;
128546 return SQLITE_OK;
128551 ** Append a string to the string-buffer passed as the first argument.
128553 ** If nAppend is negative, then the length of the string zAppend is
128554 ** determined using strlen().
128556 static int fts3StringAppend(
128557 StrBuffer *pStr, /* Buffer to append to */
128558 const char *zAppend, /* Pointer to data to append to buffer */
128559 int nAppend /* Size of zAppend in bytes (or -1) */
128561 if( nAppend<0 ){
128562 nAppend = (int)strlen(zAppend);
128565 /* If there is insufficient space allocated at StrBuffer.z, use realloc()
128566 ** to grow the buffer until so that it is big enough to accomadate the
128567 ** appended data.
128569 if( pStr->n+nAppend+1>=pStr->nAlloc ){
128570 int nAlloc = pStr->nAlloc+nAppend+100;
128571 char *zNew = sqlite3_realloc(pStr->z, nAlloc);
128572 if( !zNew ){
128573 return SQLITE_NOMEM;
128575 pStr->z = zNew;
128576 pStr->nAlloc = nAlloc;
128579 /* Append the data to the string buffer. */
128580 memcpy(&pStr->z[pStr->n], zAppend, nAppend);
128581 pStr->n += nAppend;
128582 pStr->z[pStr->n] = '\0';
128584 return SQLITE_OK;
128588 ** The fts3BestSnippet() function often selects snippets that end with a
128589 ** query term. That is, the final term of the snippet is always a term
128590 ** that requires highlighting. For example, if 'X' is a highlighted term
128591 ** and '.' is a non-highlighted term, BestSnippet() may select:
128593 ** ........X.....X
128595 ** This function "shifts" the beginning of the snippet forward in the
128596 ** document so that there are approximately the same number of
128597 ** non-highlighted terms to the right of the final highlighted term as there
128598 ** are to the left of the first highlighted term. For example, to this:
128600 ** ....X.....X....
128602 ** This is done as part of extracting the snippet text, not when selecting
128603 ** the snippet. Snippet selection is done based on doclists only, so there
128604 ** is no way for fts3BestSnippet() to know whether or not the document
128605 ** actually contains terms that follow the final highlighted term.
128607 static int fts3SnippetShift(
128608 Fts3Table *pTab, /* FTS3 table snippet comes from */
128609 int nSnippet, /* Number of tokens desired for snippet */
128610 const char *zDoc, /* Document text to extract snippet from */
128611 int nDoc, /* Size of buffer zDoc in bytes */
128612 int *piPos, /* IN/OUT: First token of snippet */
128613 u64 *pHlmask /* IN/OUT: Mask of tokens to highlight */
128615 u64 hlmask = *pHlmask; /* Local copy of initial highlight-mask */
128617 if( hlmask ){
128618 int nLeft; /* Tokens to the left of first highlight */
128619 int nRight; /* Tokens to the right of last highlight */
128620 int nDesired; /* Ideal number of tokens to shift forward */
128622 for(nLeft=0; !(hlmask & ((u64)1 << nLeft)); nLeft++);
128623 for(nRight=0; !(hlmask & ((u64)1 << (nSnippet-1-nRight))); nRight++);
128624 nDesired = (nLeft-nRight)/2;
128626 /* Ideally, the start of the snippet should be pushed forward in the
128627 ** document nDesired tokens. This block checks if there are actually
128628 ** nDesired tokens to the right of the snippet. If so, *piPos and
128629 ** *pHlMask are updated to shift the snippet nDesired tokens to the
128630 ** right. Otherwise, the snippet is shifted by the number of tokens
128631 ** available.
128633 if( nDesired>0 ){
128634 int nShift; /* Number of tokens to shift snippet by */
128635 int iCurrent = 0; /* Token counter */
128636 int rc; /* Return Code */
128637 sqlite3_tokenizer_module *pMod;
128638 sqlite3_tokenizer_cursor *pC;
128639 pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
128641 /* Open a cursor on zDoc/nDoc. Check if there are (nSnippet+nDesired)
128642 ** or more tokens in zDoc/nDoc.
128644 rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
128645 if( rc!=SQLITE_OK ){
128646 return rc;
128648 pC->pTokenizer = pTab->pTokenizer;
128649 while( rc==SQLITE_OK && iCurrent<(nSnippet+nDesired) ){
128650 const char *ZDUMMY; int DUMMY1, DUMMY2, DUMMY3;
128651 rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &DUMMY2, &DUMMY3, &iCurrent);
128653 pMod->xClose(pC);
128654 if( rc!=SQLITE_OK && rc!=SQLITE_DONE ){ return rc; }
128656 nShift = (rc==SQLITE_DONE)+iCurrent-nSnippet;
128657 assert( nShift<=nDesired );
128658 if( nShift>0 ){
128659 *piPos += nShift;
128660 *pHlmask = hlmask >> nShift;
128664 return SQLITE_OK;
128668 ** Extract the snippet text for fragment pFragment from cursor pCsr and
128669 ** append it to string buffer pOut.
128671 static int fts3SnippetText(
128672 Fts3Cursor *pCsr, /* FTS3 Cursor */
128673 SnippetFragment *pFragment, /* Snippet to extract */
128674 int iFragment, /* Fragment number */
128675 int isLast, /* True for final fragment in snippet */
128676 int nSnippet, /* Number of tokens in extracted snippet */
128677 const char *zOpen, /* String inserted before highlighted term */
128678 const char *zClose, /* String inserted after highlighted term */
128679 const char *zEllipsis, /* String inserted between snippets */
128680 StrBuffer *pOut /* Write output here */
128682 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
128683 int rc; /* Return code */
128684 const char *zDoc; /* Document text to extract snippet from */
128685 int nDoc; /* Size of zDoc in bytes */
128686 int iCurrent = 0; /* Current token number of document */
128687 int iEnd = 0; /* Byte offset of end of current token */
128688 int isShiftDone = 0; /* True after snippet is shifted */
128689 int iPos = pFragment->iPos; /* First token of snippet */
128690 u64 hlmask = pFragment->hlmask; /* Highlight-mask for snippet */
128691 int iCol = pFragment->iCol+1; /* Query column to extract text from */
128692 sqlite3_tokenizer_module *pMod; /* Tokenizer module methods object */
128693 sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor open on zDoc/nDoc */
128694 const char *ZDUMMY; /* Dummy argument used with tokenizer */
128695 int DUMMY1; /* Dummy argument used with tokenizer */
128697 zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol);
128698 if( zDoc==0 ){
128699 if( sqlite3_column_type(pCsr->pStmt, iCol)!=SQLITE_NULL ){
128700 return SQLITE_NOMEM;
128702 return SQLITE_OK;
128704 nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol);
128706 /* Open a token cursor on the document. */
128707 pMod = (sqlite3_tokenizer_module *)pTab->pTokenizer->pModule;
128708 rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
128709 if( rc!=SQLITE_OK ){
128710 return rc;
128712 pC->pTokenizer = pTab->pTokenizer;
128714 while( rc==SQLITE_OK ){
128715 int iBegin; /* Offset in zDoc of start of token */
128716 int iFin; /* Offset in zDoc of end of token */
128717 int isHighlight; /* True for highlighted terms */
128719 rc = pMod->xNext(pC, &ZDUMMY, &DUMMY1, &iBegin, &iFin, &iCurrent);
128720 if( rc!=SQLITE_OK ){
128721 if( rc==SQLITE_DONE ){
128722 /* Special case - the last token of the snippet is also the last token
128723 ** of the column. Append any punctuation that occurred between the end
128724 ** of the previous token and the end of the document to the output.
128725 ** Then break out of the loop. */
128726 rc = fts3StringAppend(pOut, &zDoc[iEnd], -1);
128728 break;
128730 if( iCurrent<iPos ){ continue; }
128732 if( !isShiftDone ){
128733 int n = nDoc - iBegin;
128734 rc = fts3SnippetShift(pTab, nSnippet, &zDoc[iBegin], n, &iPos, &hlmask);
128735 isShiftDone = 1;
128737 /* Now that the shift has been done, check if the initial "..." are
128738 ** required. They are required if (a) this is not the first fragment,
128739 ** or (b) this fragment does not begin at position 0 of its column.
128741 if( rc==SQLITE_OK && (iPos>0 || iFragment>0) ){
128742 rc = fts3StringAppend(pOut, zEllipsis, -1);
128744 if( rc!=SQLITE_OK || iCurrent<iPos ) continue;
128747 if( iCurrent>=(iPos+nSnippet) ){
128748 if( isLast ){
128749 rc = fts3StringAppend(pOut, zEllipsis, -1);
128751 break;
128754 /* Set isHighlight to true if this term should be highlighted. */
128755 isHighlight = (hlmask & ((u64)1 << (iCurrent-iPos)))!=0;
128757 if( iCurrent>iPos ) rc = fts3StringAppend(pOut, &zDoc[iEnd], iBegin-iEnd);
128758 if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zOpen, -1);
128759 if( rc==SQLITE_OK ) rc = fts3StringAppend(pOut, &zDoc[iBegin], iFin-iBegin);
128760 if( rc==SQLITE_OK && isHighlight ) rc = fts3StringAppend(pOut, zClose, -1);
128762 iEnd = iFin;
128765 pMod->xClose(pC);
128766 return rc;
128771 ** This function is used to count the entries in a column-list (a
128772 ** delta-encoded list of term offsets within a single column of a single
128773 ** row). When this function is called, *ppCollist should point to the
128774 ** beginning of the first varint in the column-list (the varint that
128775 ** contains the position of the first matching term in the column data).
128776 ** Before returning, *ppCollist is set to point to the first byte after
128777 ** the last varint in the column-list (either the 0x00 signifying the end
128778 ** of the position-list, or the 0x01 that precedes the column number of
128779 ** the next column in the position-list).
128781 ** The number of elements in the column-list is returned.
128783 static int fts3ColumnlistCount(char **ppCollist){
128784 char *pEnd = *ppCollist;
128785 char c = 0;
128786 int nEntry = 0;
128788 /* A column-list is terminated by either a 0x01 or 0x00. */
128789 while( 0xFE & (*pEnd | c) ){
128790 c = *pEnd++ & 0x80;
128791 if( !c ) nEntry++;
128794 *ppCollist = pEnd;
128795 return nEntry;
128799 ** fts3ExprIterate() callback used to collect the "global" matchinfo stats
128800 ** for a single query.
128802 ** fts3ExprIterate() callback to load the 'global' elements of a
128803 ** FTS3_MATCHINFO_HITS matchinfo array. The global stats are those elements
128804 ** of the matchinfo array that are constant for all rows returned by the
128805 ** current query.
128807 ** Argument pCtx is actually a pointer to a struct of type MatchInfo. This
128808 ** function populates Matchinfo.aMatchinfo[] as follows:
128810 ** for(iCol=0; iCol<nCol; iCol++){
128811 ** aMatchinfo[3*iPhrase*nCol + 3*iCol + 1] = X;
128812 ** aMatchinfo[3*iPhrase*nCol + 3*iCol + 2] = Y;
128815 ** where X is the number of matches for phrase iPhrase is column iCol of all
128816 ** rows of the table. Y is the number of rows for which column iCol contains
128817 ** at least one instance of phrase iPhrase.
128819 ** If the phrase pExpr consists entirely of deferred tokens, then all X and
128820 ** Y values are set to nDoc, where nDoc is the number of documents in the
128821 ** file system. This is done because the full-text index doclist is required
128822 ** to calculate these values properly, and the full-text index doclist is
128823 ** not available for deferred tokens.
128825 static int fts3ExprGlobalHitsCb(
128826 Fts3Expr *pExpr, /* Phrase expression node */
128827 int iPhrase, /* Phrase number (numbered from zero) */
128828 void *pCtx /* Pointer to MatchInfo structure */
128830 MatchInfo *p = (MatchInfo *)pCtx;
128831 return sqlite3Fts3EvalPhraseStats(
128832 p->pCursor, pExpr, &p->aMatchinfo[3*iPhrase*p->nCol]
128837 ** fts3ExprIterate() callback used to collect the "local" part of the
128838 ** FTS3_MATCHINFO_HITS array. The local stats are those elements of the
128839 ** array that are different for each row returned by the query.
128841 static int fts3ExprLocalHitsCb(
128842 Fts3Expr *pExpr, /* Phrase expression node */
128843 int iPhrase, /* Phrase number */
128844 void *pCtx /* Pointer to MatchInfo structure */
128846 MatchInfo *p = (MatchInfo *)pCtx;
128847 int iStart = iPhrase * p->nCol * 3;
128848 int i;
128850 for(i=0; i<p->nCol; i++){
128851 char *pCsr;
128852 pCsr = sqlite3Fts3EvalPhrasePoslist(p->pCursor, pExpr, i);
128853 if( pCsr ){
128854 p->aMatchinfo[iStart+i*3] = fts3ColumnlistCount(&pCsr);
128855 }else{
128856 p->aMatchinfo[iStart+i*3] = 0;
128860 return SQLITE_OK;
128863 static int fts3MatchinfoCheck(
128864 Fts3Table *pTab,
128865 char cArg,
128866 char **pzErr
128868 if( (cArg==FTS3_MATCHINFO_NPHRASE)
128869 || (cArg==FTS3_MATCHINFO_NCOL)
128870 || (cArg==FTS3_MATCHINFO_NDOC && pTab->bHasStat)
128871 || (cArg==FTS3_MATCHINFO_AVGLENGTH && pTab->bHasStat)
128872 || (cArg==FTS3_MATCHINFO_LENGTH && pTab->bHasDocsize)
128873 || (cArg==FTS3_MATCHINFO_LCS)
128874 || (cArg==FTS3_MATCHINFO_HITS)
128876 return SQLITE_OK;
128878 *pzErr = sqlite3_mprintf("unrecognized matchinfo request: %c", cArg);
128879 return SQLITE_ERROR;
128882 static int fts3MatchinfoSize(MatchInfo *pInfo, char cArg){
128883 int nVal; /* Number of integers output by cArg */
128885 switch( cArg ){
128886 case FTS3_MATCHINFO_NDOC:
128887 case FTS3_MATCHINFO_NPHRASE:
128888 case FTS3_MATCHINFO_NCOL:
128889 nVal = 1;
128890 break;
128892 case FTS3_MATCHINFO_AVGLENGTH:
128893 case FTS3_MATCHINFO_LENGTH:
128894 case FTS3_MATCHINFO_LCS:
128895 nVal = pInfo->nCol;
128896 break;
128898 default:
128899 assert( cArg==FTS3_MATCHINFO_HITS );
128900 nVal = pInfo->nCol * pInfo->nPhrase * 3;
128901 break;
128904 return nVal;
128907 static int fts3MatchinfoSelectDoctotal(
128908 Fts3Table *pTab,
128909 sqlite3_stmt **ppStmt,
128910 sqlite3_int64 *pnDoc,
128911 const char **paLen
128913 sqlite3_stmt *pStmt;
128914 const char *a;
128915 sqlite3_int64 nDoc;
128917 if( !*ppStmt ){
128918 int rc = sqlite3Fts3SelectDoctotal(pTab, ppStmt);
128919 if( rc!=SQLITE_OK ) return rc;
128921 pStmt = *ppStmt;
128922 assert( sqlite3_data_count(pStmt)==1 );
128924 a = sqlite3_column_blob(pStmt, 0);
128925 a += sqlite3Fts3GetVarint(a, &nDoc);
128926 if( nDoc==0 ) return FTS_CORRUPT_VTAB;
128927 *pnDoc = (u32)nDoc;
128929 if( paLen ) *paLen = a;
128930 return SQLITE_OK;
128934 ** An instance of the following structure is used to store state while
128935 ** iterating through a multi-column position-list corresponding to the
128936 ** hits for a single phrase on a single row in order to calculate the
128937 ** values for a matchinfo() FTS3_MATCHINFO_LCS request.
128939 typedef struct LcsIterator LcsIterator;
128940 struct LcsIterator {
128941 Fts3Expr *pExpr; /* Pointer to phrase expression */
128942 int iPosOffset; /* Tokens count up to end of this phrase */
128943 char *pRead; /* Cursor used to iterate through aDoclist */
128944 int iPos; /* Current position */
128948 ** If LcsIterator.iCol is set to the following value, the iterator has
128949 ** finished iterating through all offsets for all columns.
128951 #define LCS_ITERATOR_FINISHED 0x7FFFFFFF;
128953 static int fts3MatchinfoLcsCb(
128954 Fts3Expr *pExpr, /* Phrase expression node */
128955 int iPhrase, /* Phrase number (numbered from zero) */
128956 void *pCtx /* Pointer to MatchInfo structure */
128958 LcsIterator *aIter = (LcsIterator *)pCtx;
128959 aIter[iPhrase].pExpr = pExpr;
128960 return SQLITE_OK;
128964 ** Advance the iterator passed as an argument to the next position. Return
128965 ** 1 if the iterator is at EOF or if it now points to the start of the
128966 ** position list for the next column.
128968 static int fts3LcsIteratorAdvance(LcsIterator *pIter){
128969 char *pRead = pIter->pRead;
128970 sqlite3_int64 iRead;
128971 int rc = 0;
128973 pRead += sqlite3Fts3GetVarint(pRead, &iRead);
128974 if( iRead==0 || iRead==1 ){
128975 pRead = 0;
128976 rc = 1;
128977 }else{
128978 pIter->iPos += (int)(iRead-2);
128981 pIter->pRead = pRead;
128982 return rc;
128986 ** This function implements the FTS3_MATCHINFO_LCS matchinfo() flag.
128988 ** If the call is successful, the longest-common-substring lengths for each
128989 ** column are written into the first nCol elements of the pInfo->aMatchinfo[]
128990 ** array before returning. SQLITE_OK is returned in this case.
128992 ** Otherwise, if an error occurs, an SQLite error code is returned and the
128993 ** data written to the first nCol elements of pInfo->aMatchinfo[] is
128994 ** undefined.
128996 static int fts3MatchinfoLcs(Fts3Cursor *pCsr, MatchInfo *pInfo){
128997 LcsIterator *aIter;
128998 int i;
128999 int iCol;
129000 int nToken = 0;
129002 /* Allocate and populate the array of LcsIterator objects. The array
129003 ** contains one element for each matchable phrase in the query.
129005 aIter = sqlite3_malloc(sizeof(LcsIterator) * pCsr->nPhrase);
129006 if( !aIter ) return SQLITE_NOMEM;
129007 memset(aIter, 0, sizeof(LcsIterator) * pCsr->nPhrase);
129008 (void)fts3ExprIterate(pCsr->pExpr, fts3MatchinfoLcsCb, (void*)aIter);
129010 for(i=0; i<pInfo->nPhrase; i++){
129011 LcsIterator *pIter = &aIter[i];
129012 nToken -= pIter->pExpr->pPhrase->nToken;
129013 pIter->iPosOffset = nToken;
129016 for(iCol=0; iCol<pInfo->nCol; iCol++){
129017 int nLcs = 0; /* LCS value for this column */
129018 int nLive = 0; /* Number of iterators in aIter not at EOF */
129020 for(i=0; i<pInfo->nPhrase; i++){
129021 LcsIterator *pIt = &aIter[i];
129022 pIt->pRead = sqlite3Fts3EvalPhrasePoslist(pCsr, pIt->pExpr, iCol);
129023 if( pIt->pRead ){
129024 pIt->iPos = pIt->iPosOffset;
129025 fts3LcsIteratorAdvance(&aIter[i]);
129026 nLive++;
129030 while( nLive>0 ){
129031 LcsIterator *pAdv = 0; /* The iterator to advance by one position */
129032 int nThisLcs = 0; /* LCS for the current iterator positions */
129034 for(i=0; i<pInfo->nPhrase; i++){
129035 LcsIterator *pIter = &aIter[i];
129036 if( pIter->pRead==0 ){
129037 /* This iterator is already at EOF for this column. */
129038 nThisLcs = 0;
129039 }else{
129040 if( pAdv==0 || pIter->iPos<pAdv->iPos ){
129041 pAdv = pIter;
129043 if( nThisLcs==0 || pIter->iPos==pIter[-1].iPos ){
129044 nThisLcs++;
129045 }else{
129046 nThisLcs = 1;
129048 if( nThisLcs>nLcs ) nLcs = nThisLcs;
129051 if( fts3LcsIteratorAdvance(pAdv) ) nLive--;
129054 pInfo->aMatchinfo[iCol] = nLcs;
129057 sqlite3_free(aIter);
129058 return SQLITE_OK;
129062 ** Populate the buffer pInfo->aMatchinfo[] with an array of integers to
129063 ** be returned by the matchinfo() function. Argument zArg contains the
129064 ** format string passed as the second argument to matchinfo (or the
129065 ** default value "pcx" if no second argument was specified). The format
129066 ** string has already been validated and the pInfo->aMatchinfo[] array
129067 ** is guaranteed to be large enough for the output.
129069 ** If bGlobal is true, then populate all fields of the matchinfo() output.
129070 ** If it is false, then assume that those fields that do not change between
129071 ** rows (i.e. FTS3_MATCHINFO_NPHRASE, NCOL, NDOC, AVGLENGTH and part of HITS)
129072 ** have already been populated.
129074 ** Return SQLITE_OK if successful, or an SQLite error code if an error
129075 ** occurs. If a value other than SQLITE_OK is returned, the state the
129076 ** pInfo->aMatchinfo[] buffer is left in is undefined.
129078 static int fts3MatchinfoValues(
129079 Fts3Cursor *pCsr, /* FTS3 cursor object */
129080 int bGlobal, /* True to grab the global stats */
129081 MatchInfo *pInfo, /* Matchinfo context object */
129082 const char *zArg /* Matchinfo format string */
129084 int rc = SQLITE_OK;
129085 int i;
129086 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129087 sqlite3_stmt *pSelect = 0;
129089 for(i=0; rc==SQLITE_OK && zArg[i]; i++){
129091 switch( zArg[i] ){
129092 case FTS3_MATCHINFO_NPHRASE:
129093 if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nPhrase;
129094 break;
129096 case FTS3_MATCHINFO_NCOL:
129097 if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol;
129098 break;
129100 case FTS3_MATCHINFO_NDOC:
129101 if( bGlobal ){
129102 sqlite3_int64 nDoc = 0;
129103 rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0);
129104 pInfo->aMatchinfo[0] = (u32)nDoc;
129106 break;
129108 case FTS3_MATCHINFO_AVGLENGTH:
129109 if( bGlobal ){
129110 sqlite3_int64 nDoc; /* Number of rows in table */
129111 const char *a; /* Aggregate column length array */
129113 rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, &a);
129114 if( rc==SQLITE_OK ){
129115 int iCol;
129116 for(iCol=0; iCol<pInfo->nCol; iCol++){
129117 u32 iVal;
129118 sqlite3_int64 nToken;
129119 a += sqlite3Fts3GetVarint(a, &nToken);
129120 iVal = (u32)(((u32)(nToken&0xffffffff)+nDoc/2)/nDoc);
129121 pInfo->aMatchinfo[iCol] = iVal;
129125 break;
129127 case FTS3_MATCHINFO_LENGTH: {
129128 sqlite3_stmt *pSelectDocsize = 0;
129129 rc = sqlite3Fts3SelectDocsize(pTab, pCsr->iPrevId, &pSelectDocsize);
129130 if( rc==SQLITE_OK ){
129131 int iCol;
129132 const char *a = sqlite3_column_blob(pSelectDocsize, 0);
129133 for(iCol=0; iCol<pInfo->nCol; iCol++){
129134 sqlite3_int64 nToken;
129135 a += sqlite3Fts3GetVarint(a, &nToken);
129136 pInfo->aMatchinfo[iCol] = (u32)nToken;
129139 sqlite3_reset(pSelectDocsize);
129140 break;
129143 case FTS3_MATCHINFO_LCS:
129144 rc = fts3ExprLoadDoclists(pCsr, 0, 0);
129145 if( rc==SQLITE_OK ){
129146 rc = fts3MatchinfoLcs(pCsr, pInfo);
129148 break;
129150 default: {
129151 Fts3Expr *pExpr;
129152 assert( zArg[i]==FTS3_MATCHINFO_HITS );
129153 pExpr = pCsr->pExpr;
129154 rc = fts3ExprLoadDoclists(pCsr, 0, 0);
129155 if( rc!=SQLITE_OK ) break;
129156 if( bGlobal ){
129157 if( pCsr->pDeferred ){
129158 rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &pInfo->nDoc, 0);
129159 if( rc!=SQLITE_OK ) break;
129161 rc = fts3ExprIterate(pExpr, fts3ExprGlobalHitsCb,(void*)pInfo);
129162 if( rc!=SQLITE_OK ) break;
129164 (void)fts3ExprIterate(pExpr, fts3ExprLocalHitsCb,(void*)pInfo);
129165 break;
129169 pInfo->aMatchinfo += fts3MatchinfoSize(pInfo, zArg[i]);
129172 sqlite3_reset(pSelect);
129173 return rc;
129178 ** Populate pCsr->aMatchinfo[] with data for the current row. The
129179 ** 'matchinfo' data is an array of 32-bit unsigned integers (C type u32).
129181 static int fts3GetMatchinfo(
129182 Fts3Cursor *pCsr, /* FTS3 Cursor object */
129183 const char *zArg /* Second argument to matchinfo() function */
129185 MatchInfo sInfo;
129186 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129187 int rc = SQLITE_OK;
129188 int bGlobal = 0; /* Collect 'global' stats as well as local */
129190 memset(&sInfo, 0, sizeof(MatchInfo));
129191 sInfo.pCursor = pCsr;
129192 sInfo.nCol = pTab->nColumn;
129194 /* If there is cached matchinfo() data, but the format string for the
129195 ** cache does not match the format string for this request, discard
129196 ** the cached data. */
129197 if( pCsr->zMatchinfo && strcmp(pCsr->zMatchinfo, zArg) ){
129198 assert( pCsr->aMatchinfo );
129199 sqlite3_free(pCsr->aMatchinfo);
129200 pCsr->zMatchinfo = 0;
129201 pCsr->aMatchinfo = 0;
129204 /* If Fts3Cursor.aMatchinfo[] is NULL, then this is the first time the
129205 ** matchinfo function has been called for this query. In this case
129206 ** allocate the array used to accumulate the matchinfo data and
129207 ** initialize those elements that are constant for every row.
129209 if( pCsr->aMatchinfo==0 ){
129210 int nMatchinfo = 0; /* Number of u32 elements in match-info */
129211 int nArg; /* Bytes in zArg */
129212 int i; /* Used to iterate through zArg */
129214 /* Determine the number of phrases in the query */
129215 pCsr->nPhrase = fts3ExprPhraseCount(pCsr->pExpr);
129216 sInfo.nPhrase = pCsr->nPhrase;
129218 /* Determine the number of integers in the buffer returned by this call. */
129219 for(i=0; zArg[i]; i++){
129220 nMatchinfo += fts3MatchinfoSize(&sInfo, zArg[i]);
129223 /* Allocate space for Fts3Cursor.aMatchinfo[] and Fts3Cursor.zMatchinfo. */
129224 nArg = (int)strlen(zArg);
129225 pCsr->aMatchinfo = (u32 *)sqlite3_malloc(sizeof(u32)*nMatchinfo + nArg + 1);
129226 if( !pCsr->aMatchinfo ) return SQLITE_NOMEM;
129228 pCsr->zMatchinfo = (char *)&pCsr->aMatchinfo[nMatchinfo];
129229 pCsr->nMatchinfo = nMatchinfo;
129230 memcpy(pCsr->zMatchinfo, zArg, nArg+1);
129231 memset(pCsr->aMatchinfo, 0, sizeof(u32)*nMatchinfo);
129232 pCsr->isMatchinfoNeeded = 1;
129233 bGlobal = 1;
129236 sInfo.aMatchinfo = pCsr->aMatchinfo;
129237 sInfo.nPhrase = pCsr->nPhrase;
129238 if( pCsr->isMatchinfoNeeded ){
129239 rc = fts3MatchinfoValues(pCsr, bGlobal, &sInfo, zArg);
129240 pCsr->isMatchinfoNeeded = 0;
129243 return rc;
129247 ** Implementation of snippet() function.
129249 SQLITE_PRIVATE void sqlite3Fts3Snippet(
129250 sqlite3_context *pCtx, /* SQLite function call context */
129251 Fts3Cursor *pCsr, /* Cursor object */
129252 const char *zStart, /* Snippet start text - "<b>" */
129253 const char *zEnd, /* Snippet end text - "</b>" */
129254 const char *zEllipsis, /* Snippet ellipsis text - "<b>...</b>" */
129255 int iCol, /* Extract snippet from this column */
129256 int nToken /* Approximate number of tokens in snippet */
129258 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129259 int rc = SQLITE_OK;
129260 int i;
129261 StrBuffer res = {0, 0, 0};
129263 /* The returned text includes up to four fragments of text extracted from
129264 ** the data in the current row. The first iteration of the for(...) loop
129265 ** below attempts to locate a single fragment of text nToken tokens in
129266 ** size that contains at least one instance of all phrases in the query
129267 ** expression that appear in the current row. If such a fragment of text
129268 ** cannot be found, the second iteration of the loop attempts to locate
129269 ** a pair of fragments, and so on.
129271 int nSnippet = 0; /* Number of fragments in this snippet */
129272 SnippetFragment aSnippet[4]; /* Maximum of 4 fragments per snippet */
129273 int nFToken = -1; /* Number of tokens in each fragment */
129275 if( !pCsr->pExpr ){
129276 sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
129277 return;
129280 for(nSnippet=1; 1; nSnippet++){
129282 int iSnip; /* Loop counter 0..nSnippet-1 */
129283 u64 mCovered = 0; /* Bitmask of phrases covered by snippet */
129284 u64 mSeen = 0; /* Bitmask of phrases seen by BestSnippet() */
129286 if( nToken>=0 ){
129287 nFToken = (nToken+nSnippet-1) / nSnippet;
129288 }else{
129289 nFToken = -1 * nToken;
129292 for(iSnip=0; iSnip<nSnippet; iSnip++){
129293 int iBestScore = -1; /* Best score of columns checked so far */
129294 int iRead; /* Used to iterate through columns */
129295 SnippetFragment *pFragment = &aSnippet[iSnip];
129297 memset(pFragment, 0, sizeof(*pFragment));
129299 /* Loop through all columns of the table being considered for snippets.
129300 ** If the iCol argument to this function was negative, this means all
129301 ** columns of the FTS3 table. Otherwise, only column iCol is considered.
129303 for(iRead=0; iRead<pTab->nColumn; iRead++){
129304 SnippetFragment sF = {0, 0, 0, 0};
129305 int iS;
129306 if( iCol>=0 && iRead!=iCol ) continue;
129308 /* Find the best snippet of nFToken tokens in column iRead. */
129309 rc = fts3BestSnippet(nFToken, pCsr, iRead, mCovered, &mSeen, &sF, &iS);
129310 if( rc!=SQLITE_OK ){
129311 goto snippet_out;
129313 if( iS>iBestScore ){
129314 *pFragment = sF;
129315 iBestScore = iS;
129319 mCovered |= pFragment->covered;
129322 /* If all query phrases seen by fts3BestSnippet() are present in at least
129323 ** one of the nSnippet snippet fragments, break out of the loop.
129325 assert( (mCovered&mSeen)==mCovered );
129326 if( mSeen==mCovered || nSnippet==SizeofArray(aSnippet) ) break;
129329 assert( nFToken>0 );
129331 for(i=0; i<nSnippet && rc==SQLITE_OK; i++){
129332 rc = fts3SnippetText(pCsr, &aSnippet[i],
129333 i, (i==nSnippet-1), nFToken, zStart, zEnd, zEllipsis, &res
129337 snippet_out:
129338 sqlite3Fts3SegmentsClose(pTab);
129339 if( rc!=SQLITE_OK ){
129340 sqlite3_result_error_code(pCtx, rc);
129341 sqlite3_free(res.z);
129342 }else{
129343 sqlite3_result_text(pCtx, res.z, -1, sqlite3_free);
129348 typedef struct TermOffset TermOffset;
129349 typedef struct TermOffsetCtx TermOffsetCtx;
129351 struct TermOffset {
129352 char *pList; /* Position-list */
129353 int iPos; /* Position just read from pList */
129354 int iOff; /* Offset of this term from read positions */
129357 struct TermOffsetCtx {
129358 Fts3Cursor *pCsr;
129359 int iCol; /* Column of table to populate aTerm for */
129360 int iTerm;
129361 sqlite3_int64 iDocid;
129362 TermOffset *aTerm;
129366 ** This function is an fts3ExprIterate() callback used by sqlite3Fts3Offsets().
129368 static int fts3ExprTermOffsetInit(Fts3Expr *pExpr, int iPhrase, void *ctx){
129369 TermOffsetCtx *p = (TermOffsetCtx *)ctx;
129370 int nTerm; /* Number of tokens in phrase */
129371 int iTerm; /* For looping through nTerm phrase terms */
129372 char *pList; /* Pointer to position list for phrase */
129373 int iPos = 0; /* First position in position-list */
129375 UNUSED_PARAMETER(iPhrase);
129376 pList = sqlite3Fts3EvalPhrasePoslist(p->pCsr, pExpr, p->iCol);
129377 nTerm = pExpr->pPhrase->nToken;
129378 if( pList ){
129379 fts3GetDeltaPosition(&pList, &iPos);
129380 assert( iPos>=0 );
129383 for(iTerm=0; iTerm<nTerm; iTerm++){
129384 TermOffset *pT = &p->aTerm[p->iTerm++];
129385 pT->iOff = nTerm-iTerm-1;
129386 pT->pList = pList;
129387 pT->iPos = iPos;
129390 return SQLITE_OK;
129394 ** Implementation of offsets() function.
129396 SQLITE_PRIVATE void sqlite3Fts3Offsets(
129397 sqlite3_context *pCtx, /* SQLite function call context */
129398 Fts3Cursor *pCsr /* Cursor object */
129400 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129401 sqlite3_tokenizer_module const *pMod = pTab->pTokenizer->pModule;
129402 const char *ZDUMMY; /* Dummy argument used with xNext() */
129403 int NDUMMY; /* Dummy argument used with xNext() */
129404 int rc; /* Return Code */
129405 int nToken; /* Number of tokens in query */
129406 int iCol; /* Column currently being processed */
129407 StrBuffer res = {0, 0, 0}; /* Result string */
129408 TermOffsetCtx sCtx; /* Context for fts3ExprTermOffsetInit() */
129410 if( !pCsr->pExpr ){
129411 sqlite3_result_text(pCtx, "", 0, SQLITE_STATIC);
129412 return;
129415 memset(&sCtx, 0, sizeof(sCtx));
129416 assert( pCsr->isRequireSeek==0 );
129418 /* Count the number of terms in the query */
129419 rc = fts3ExprLoadDoclists(pCsr, 0, &nToken);
129420 if( rc!=SQLITE_OK ) goto offsets_out;
129422 /* Allocate the array of TermOffset iterators. */
129423 sCtx.aTerm = (TermOffset *)sqlite3_malloc(sizeof(TermOffset)*nToken);
129424 if( 0==sCtx.aTerm ){
129425 rc = SQLITE_NOMEM;
129426 goto offsets_out;
129428 sCtx.iDocid = pCsr->iPrevId;
129429 sCtx.pCsr = pCsr;
129431 /* Loop through the table columns, appending offset information to
129432 ** string-buffer res for each column.
129434 for(iCol=0; iCol<pTab->nColumn; iCol++){
129435 sqlite3_tokenizer_cursor *pC; /* Tokenizer cursor */
129436 int iStart;
129437 int iEnd;
129438 int iCurrent;
129439 const char *zDoc;
129440 int nDoc;
129442 /* Initialize the contents of sCtx.aTerm[] for column iCol. There is
129443 ** no way that this operation can fail, so the return code from
129444 ** fts3ExprIterate() can be discarded.
129446 sCtx.iCol = iCol;
129447 sCtx.iTerm = 0;
129448 (void)fts3ExprIterate(pCsr->pExpr, fts3ExprTermOffsetInit, (void *)&sCtx);
129450 /* Retreive the text stored in column iCol. If an SQL NULL is stored
129451 ** in column iCol, jump immediately to the next iteration of the loop.
129452 ** If an OOM occurs while retrieving the data (this can happen if SQLite
129453 ** needs to transform the data from utf-16 to utf-8), return SQLITE_NOMEM
129454 ** to the caller.
129456 zDoc = (const char *)sqlite3_column_text(pCsr->pStmt, iCol+1);
129457 nDoc = sqlite3_column_bytes(pCsr->pStmt, iCol+1);
129458 if( zDoc==0 ){
129459 if( sqlite3_column_type(pCsr->pStmt, iCol+1)==SQLITE_NULL ){
129460 continue;
129462 rc = SQLITE_NOMEM;
129463 goto offsets_out;
129466 /* Initialize a tokenizer iterator to iterate through column iCol. */
129467 rc = pMod->xOpen(pTab->pTokenizer, zDoc, nDoc, &pC);
129468 if( rc!=SQLITE_OK ) goto offsets_out;
129469 pC->pTokenizer = pTab->pTokenizer;
129471 rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
129472 while( rc==SQLITE_OK ){
129473 int i; /* Used to loop through terms */
129474 int iMinPos = 0x7FFFFFFF; /* Position of next token */
129475 TermOffset *pTerm = 0; /* TermOffset associated with next token */
129477 for(i=0; i<nToken; i++){
129478 TermOffset *pT = &sCtx.aTerm[i];
129479 if( pT->pList && (pT->iPos-pT->iOff)<iMinPos ){
129480 iMinPos = pT->iPos-pT->iOff;
129481 pTerm = pT;
129485 if( !pTerm ){
129486 /* All offsets for this column have been gathered. */
129487 rc = SQLITE_DONE;
129488 }else{
129489 assert( iCurrent<=iMinPos );
129490 if( 0==(0xFE&*pTerm->pList) ){
129491 pTerm->pList = 0;
129492 }else{
129493 fts3GetDeltaPosition(&pTerm->pList, &pTerm->iPos);
129495 while( rc==SQLITE_OK && iCurrent<iMinPos ){
129496 rc = pMod->xNext(pC, &ZDUMMY, &NDUMMY, &iStart, &iEnd, &iCurrent);
129498 if( rc==SQLITE_OK ){
129499 char aBuffer[64];
129500 sqlite3_snprintf(sizeof(aBuffer), aBuffer,
129501 "%d %d %d %d ", iCol, pTerm-sCtx.aTerm, iStart, iEnd-iStart
129503 rc = fts3StringAppend(&res, aBuffer, -1);
129504 }else if( rc==SQLITE_DONE && pTab->zContentTbl==0 ){
129505 rc = FTS_CORRUPT_VTAB;
129509 if( rc==SQLITE_DONE ){
129510 rc = SQLITE_OK;
129513 pMod->xClose(pC);
129514 if( rc!=SQLITE_OK ) goto offsets_out;
129517 offsets_out:
129518 sqlite3_free(sCtx.aTerm);
129519 assert( rc!=SQLITE_DONE );
129520 sqlite3Fts3SegmentsClose(pTab);
129521 if( rc!=SQLITE_OK ){
129522 sqlite3_result_error_code(pCtx, rc);
129523 sqlite3_free(res.z);
129524 }else{
129525 sqlite3_result_text(pCtx, res.z, res.n-1, sqlite3_free);
129527 return;
129531 ** Implementation of matchinfo() function.
129533 SQLITE_PRIVATE void sqlite3Fts3Matchinfo(
129534 sqlite3_context *pContext, /* Function call context */
129535 Fts3Cursor *pCsr, /* FTS3 table cursor */
129536 const char *zArg /* Second arg to matchinfo() function */
129538 Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
129539 int rc;
129540 int i;
129541 const char *zFormat;
129543 if( zArg ){
129544 for(i=0; zArg[i]; i++){
129545 char *zErr = 0;
129546 if( fts3MatchinfoCheck(pTab, zArg[i], &zErr) ){
129547 sqlite3_result_error(pContext, zErr, -1);
129548 sqlite3_free(zErr);
129549 return;
129552 zFormat = zArg;
129553 }else{
129554 zFormat = FTS3_MATCHINFO_DEFAULT;
129557 if( !pCsr->pExpr ){
129558 sqlite3_result_blob(pContext, "", 0, SQLITE_STATIC);
129559 return;
129562 /* Retrieve matchinfo() data. */
129563 rc = fts3GetMatchinfo(pCsr, zFormat);
129564 sqlite3Fts3SegmentsClose(pTab);
129566 if( rc!=SQLITE_OK ){
129567 sqlite3_result_error_code(pContext, rc);
129568 }else{
129569 int n = pCsr->nMatchinfo * sizeof(u32);
129570 sqlite3_result_blob(pContext, pCsr->aMatchinfo, n, SQLITE_TRANSIENT);
129574 #endif
129576 /************** End of fts3_snippet.c ****************************************/
129577 /************** Begin file rtree.c *******************************************/
129579 ** 2001 September 15
129581 ** The author disclaims copyright to this source code. In place of
129582 ** a legal notice, here is a blessing:
129584 ** May you do good and not evil.
129585 ** May you find forgiveness for yourself and forgive others.
129586 ** May you share freely, never taking more than you give.
129588 *************************************************************************
129589 ** This file contains code for implementations of the r-tree and r*-tree
129590 ** algorithms packaged as an SQLite virtual table module.
129594 ** Database Format of R-Tree Tables
129595 ** --------------------------------
129597 ** The data structure for a single virtual r-tree table is stored in three
129598 ** native SQLite tables declared as follows. In each case, the '%' character
129599 ** in the table name is replaced with the user-supplied name of the r-tree
129600 ** table.
129602 ** CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB)
129603 ** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER)
129604 ** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER)
129606 ** The data for each node of the r-tree structure is stored in the %_node
129607 ** table. For each node that is not the root node of the r-tree, there is
129608 ** an entry in the %_parent table associating the node with its parent.
129609 ** And for each row of data in the table, there is an entry in the %_rowid
129610 ** table that maps from the entries rowid to the id of the node that it
129611 ** is stored on.
129613 ** The root node of an r-tree always exists, even if the r-tree table is
129614 ** empty. The nodeno of the root node is always 1. All other nodes in the
129615 ** table must be the same size as the root node. The content of each node
129616 ** is formatted as follows:
129618 ** 1. If the node is the root node (node 1), then the first 2 bytes
129619 ** of the node contain the tree depth as a big-endian integer.
129620 ** For non-root nodes, the first 2 bytes are left unused.
129622 ** 2. The next 2 bytes contain the number of entries currently
129623 ** stored in the node.
129625 ** 3. The remainder of the node contains the node entries. Each entry
129626 ** consists of a single 8-byte integer followed by an even number
129627 ** of 4-byte coordinates. For leaf nodes the integer is the rowid
129628 ** of a record. For internal nodes it is the node number of a
129629 ** child page.
129632 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE)
129635 ** This file contains an implementation of a couple of different variants
129636 ** of the r-tree algorithm. See the README file for further details. The
129637 ** same data-structure is used for all, but the algorithms for insert and
129638 ** delete operations vary. The variants used are selected at compile time
129639 ** by defining the following symbols:
129642 /* Either, both or none of the following may be set to activate
129643 ** r*tree variant algorithms.
129645 #define VARIANT_RSTARTREE_CHOOSESUBTREE 0
129646 #define VARIANT_RSTARTREE_REINSERT 1
129649 ** Exactly one of the following must be set to 1.
129651 #define VARIANT_GUTTMAN_QUADRATIC_SPLIT 0
129652 #define VARIANT_GUTTMAN_LINEAR_SPLIT 0
129653 #define VARIANT_RSTARTREE_SPLIT 1
129655 #define VARIANT_GUTTMAN_SPLIT \
129656 (VARIANT_GUTTMAN_LINEAR_SPLIT||VARIANT_GUTTMAN_QUADRATIC_SPLIT)
129658 #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
129659 #define PickNext QuadraticPickNext
129660 #define PickSeeds QuadraticPickSeeds
129661 #define AssignCells splitNodeGuttman
129662 #endif
129663 #if VARIANT_GUTTMAN_LINEAR_SPLIT
129664 #define PickNext LinearPickNext
129665 #define PickSeeds LinearPickSeeds
129666 #define AssignCells splitNodeGuttman
129667 #endif
129668 #if VARIANT_RSTARTREE_SPLIT
129669 #define AssignCells splitNodeStartree
129670 #endif
129672 #if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
129673 # define NDEBUG 1
129674 #endif
129676 #ifndef SQLITE_CORE
129677 SQLITE_EXTENSION_INIT1
129678 #else
129679 #endif
129681 /* #include <string.h> */
129682 /* #include <assert.h> */
129684 #ifndef SQLITE_AMALGAMATION
129685 #include "sqlite3rtree.h"
129686 typedef sqlite3_int64 i64;
129687 typedef unsigned char u8;
129688 typedef unsigned int u32;
129689 #endif
129691 /* The following macro is used to suppress compiler warnings.
129693 #ifndef UNUSED_PARAMETER
129694 # define UNUSED_PARAMETER(x) (void)(x)
129695 #endif
129697 typedef struct Rtree Rtree;
129698 typedef struct RtreeCursor RtreeCursor;
129699 typedef struct RtreeNode RtreeNode;
129700 typedef struct RtreeCell RtreeCell;
129701 typedef struct RtreeConstraint RtreeConstraint;
129702 typedef struct RtreeMatchArg RtreeMatchArg;
129703 typedef struct RtreeGeomCallback RtreeGeomCallback;
129704 typedef union RtreeCoord RtreeCoord;
129706 /* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */
129707 #define RTREE_MAX_DIMENSIONS 5
129709 /* Size of hash table Rtree.aHash. This hash table is not expected to
129710 ** ever contain very many entries, so a fixed number of buckets is
129711 ** used.
129713 #define HASHSIZE 128
129716 ** An rtree virtual-table object.
129718 struct Rtree {
129719 sqlite3_vtab base;
129720 sqlite3 *db; /* Host database connection */
129721 int iNodeSize; /* Size in bytes of each node in the node table */
129722 int nDim; /* Number of dimensions */
129723 int nBytesPerCell; /* Bytes consumed per cell */
129724 int iDepth; /* Current depth of the r-tree structure */
129725 char *zDb; /* Name of database containing r-tree table */
129726 char *zName; /* Name of r-tree table */
129727 RtreeNode *aHash[HASHSIZE]; /* Hash table of in-memory nodes. */
129728 int nBusy; /* Current number of users of this structure */
129730 /* List of nodes removed during a CondenseTree operation. List is
129731 ** linked together via the pointer normally used for hash chains -
129732 ** RtreeNode.pNext. RtreeNode.iNode stores the depth of the sub-tree
129733 ** headed by the node (leaf nodes have RtreeNode.iNode==0).
129735 RtreeNode *pDeleted;
129736 int iReinsertHeight; /* Height of sub-trees Reinsert() has run on */
129738 /* Statements to read/write/delete a record from xxx_node */
129739 sqlite3_stmt *pReadNode;
129740 sqlite3_stmt *pWriteNode;
129741 sqlite3_stmt *pDeleteNode;
129743 /* Statements to read/write/delete a record from xxx_rowid */
129744 sqlite3_stmt *pReadRowid;
129745 sqlite3_stmt *pWriteRowid;
129746 sqlite3_stmt *pDeleteRowid;
129748 /* Statements to read/write/delete a record from xxx_parent */
129749 sqlite3_stmt *pReadParent;
129750 sqlite3_stmt *pWriteParent;
129751 sqlite3_stmt *pDeleteParent;
129753 int eCoordType;
129756 /* Possible values for eCoordType: */
129757 #define RTREE_COORD_REAL32 0
129758 #define RTREE_COORD_INT32 1
129761 ** The minimum number of cells allowed for a node is a third of the
129762 ** maximum. In Gutman's notation:
129764 ** m = M/3
129766 ** If an R*-tree "Reinsert" operation is required, the same number of
129767 ** cells are removed from the overfull node and reinserted into the tree.
129769 #define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3)
129770 #define RTREE_REINSERT(p) RTREE_MINCELLS(p)
129771 #define RTREE_MAXCELLS 51
129774 ** The smallest possible node-size is (512-64)==448 bytes. And the largest
129775 ** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates).
129776 ** Therefore all non-root nodes must contain at least 3 entries. Since
129777 ** 2^40 is greater than 2^64, an r-tree structure always has a depth of
129778 ** 40 or less.
129780 #define RTREE_MAX_DEPTH 40
129783 ** An rtree cursor object.
129785 struct RtreeCursor {
129786 sqlite3_vtab_cursor base;
129787 RtreeNode *pNode; /* Node cursor is currently pointing at */
129788 int iCell; /* Index of current cell in pNode */
129789 int iStrategy; /* Copy of idxNum search parameter */
129790 int nConstraint; /* Number of entries in aConstraint */
129791 RtreeConstraint *aConstraint; /* Search constraints. */
129794 union RtreeCoord {
129795 float f;
129796 int i;
129800 ** The argument is an RtreeCoord. Return the value stored within the RtreeCoord
129801 ** formatted as a double. This macro assumes that local variable pRtree points
129802 ** to the Rtree structure associated with the RtreeCoord.
129804 #define DCOORD(coord) ( \
129805 (pRtree->eCoordType==RTREE_COORD_REAL32) ? \
129806 ((double)coord.f) : \
129807 ((double)coord.i) \
129811 ** A search constraint.
129813 struct RtreeConstraint {
129814 int iCoord; /* Index of constrained coordinate */
129815 int op; /* Constraining operation */
129816 double rValue; /* Constraint value. */
129817 int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
129818 sqlite3_rtree_geometry *pGeom; /* Constraint callback argument for a MATCH */
129821 /* Possible values for RtreeConstraint.op */
129822 #define RTREE_EQ 0x41
129823 #define RTREE_LE 0x42
129824 #define RTREE_LT 0x43
129825 #define RTREE_GE 0x44
129826 #define RTREE_GT 0x45
129827 #define RTREE_MATCH 0x46
129830 ** An rtree structure node.
129832 struct RtreeNode {
129833 RtreeNode *pParent; /* Parent node */
129834 i64 iNode;
129835 int nRef;
129836 int isDirty;
129837 u8 *zData;
129838 RtreeNode *pNext; /* Next node in this hash chain */
129840 #define NCELL(pNode) readInt16(&(pNode)->zData[2])
129843 ** Structure to store a deserialized rtree record.
129845 struct RtreeCell {
129846 i64 iRowid;
129847 RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2];
129852 ** Value for the first field of every RtreeMatchArg object. The MATCH
129853 ** operator tests that the first field of a blob operand matches this
129854 ** value to avoid operating on invalid blobs (which could cause a segfault).
129856 #define RTREE_GEOMETRY_MAGIC 0x891245AB
129859 ** An instance of this structure must be supplied as a blob argument to
129860 ** the right-hand-side of an SQL MATCH operator used to constrain an
129861 ** r-tree query.
129863 struct RtreeMatchArg {
129864 u32 magic; /* Always RTREE_GEOMETRY_MAGIC */
129865 int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
129866 void *pContext;
129867 int nParam;
129868 double aParam[1];
129872 ** When a geometry callback is created (see sqlite3_rtree_geometry_callback),
129873 ** a single instance of the following structure is allocated. It is used
129874 ** as the context for the user-function created by by s_r_g_c(). The object
129875 ** is eventually deleted by the destructor mechanism provided by
129876 ** sqlite3_create_function_v2() (which is called by s_r_g_c() to create
129877 ** the geometry callback function).
129879 struct RtreeGeomCallback {
129880 int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
129881 void *pContext;
129884 #ifndef MAX
129885 # define MAX(x,y) ((x) < (y) ? (y) : (x))
129886 #endif
129887 #ifndef MIN
129888 # define MIN(x,y) ((x) > (y) ? (y) : (x))
129889 #endif
129892 ** Functions to deserialize a 16 bit integer, 32 bit real number and
129893 ** 64 bit integer. The deserialized value is returned.
129895 static int readInt16(u8 *p){
129896 return (p[0]<<8) + p[1];
129898 static void readCoord(u8 *p, RtreeCoord *pCoord){
129899 u32 i = (
129900 (((u32)p[0]) << 24) +
129901 (((u32)p[1]) << 16) +
129902 (((u32)p[2]) << 8) +
129903 (((u32)p[3]) << 0)
129905 *(u32 *)pCoord = i;
129907 static i64 readInt64(u8 *p){
129908 return (
129909 (((i64)p[0]) << 56) +
129910 (((i64)p[1]) << 48) +
129911 (((i64)p[2]) << 40) +
129912 (((i64)p[3]) << 32) +
129913 (((i64)p[4]) << 24) +
129914 (((i64)p[5]) << 16) +
129915 (((i64)p[6]) << 8) +
129916 (((i64)p[7]) << 0)
129921 ** Functions to serialize a 16 bit integer, 32 bit real number and
129922 ** 64 bit integer. The value returned is the number of bytes written
129923 ** to the argument buffer (always 2, 4 and 8 respectively).
129925 static int writeInt16(u8 *p, int i){
129926 p[0] = (i>> 8)&0xFF;
129927 p[1] = (i>> 0)&0xFF;
129928 return 2;
129930 static int writeCoord(u8 *p, RtreeCoord *pCoord){
129931 u32 i;
129932 assert( sizeof(RtreeCoord)==4 );
129933 assert( sizeof(u32)==4 );
129934 i = *(u32 *)pCoord;
129935 p[0] = (i>>24)&0xFF;
129936 p[1] = (i>>16)&0xFF;
129937 p[2] = (i>> 8)&0xFF;
129938 p[3] = (i>> 0)&0xFF;
129939 return 4;
129941 static int writeInt64(u8 *p, i64 i){
129942 p[0] = (i>>56)&0xFF;
129943 p[1] = (i>>48)&0xFF;
129944 p[2] = (i>>40)&0xFF;
129945 p[3] = (i>>32)&0xFF;
129946 p[4] = (i>>24)&0xFF;
129947 p[5] = (i>>16)&0xFF;
129948 p[6] = (i>> 8)&0xFF;
129949 p[7] = (i>> 0)&0xFF;
129950 return 8;
129954 ** Increment the reference count of node p.
129956 static void nodeReference(RtreeNode *p){
129957 if( p ){
129958 p->nRef++;
129963 ** Clear the content of node p (set all bytes to 0x00).
129965 static void nodeZero(Rtree *pRtree, RtreeNode *p){
129966 memset(&p->zData[2], 0, pRtree->iNodeSize-2);
129967 p->isDirty = 1;
129971 ** Given a node number iNode, return the corresponding key to use
129972 ** in the Rtree.aHash table.
129974 static int nodeHash(i64 iNode){
129975 return (
129976 (iNode>>56) ^ (iNode>>48) ^ (iNode>>40) ^ (iNode>>32) ^
129977 (iNode>>24) ^ (iNode>>16) ^ (iNode>> 8) ^ (iNode>> 0)
129978 ) % HASHSIZE;
129982 ** Search the node hash table for node iNode. If found, return a pointer
129983 ** to it. Otherwise, return 0.
129985 static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){
129986 RtreeNode *p;
129987 for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext);
129988 return p;
129992 ** Add node pNode to the node hash table.
129994 static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){
129995 int iHash;
129996 assert( pNode->pNext==0 );
129997 iHash = nodeHash(pNode->iNode);
129998 pNode->pNext = pRtree->aHash[iHash];
129999 pRtree->aHash[iHash] = pNode;
130003 ** Remove node pNode from the node hash table.
130005 static void nodeHashDelete(Rtree *pRtree, RtreeNode *pNode){
130006 RtreeNode **pp;
130007 if( pNode->iNode!=0 ){
130008 pp = &pRtree->aHash[nodeHash(pNode->iNode)];
130009 for( ; (*pp)!=pNode; pp = &(*pp)->pNext){ assert(*pp); }
130010 *pp = pNode->pNext;
130011 pNode->pNext = 0;
130016 ** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0),
130017 ** indicating that node has not yet been assigned a node number. It is
130018 ** assigned a node number when nodeWrite() is called to write the
130019 ** node contents out to the database.
130021 static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){
130022 RtreeNode *pNode;
130023 pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize);
130024 if( pNode ){
130025 memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize);
130026 pNode->zData = (u8 *)&pNode[1];
130027 pNode->nRef = 1;
130028 pNode->pParent = pParent;
130029 pNode->isDirty = 1;
130030 nodeReference(pParent);
130032 return pNode;
130036 ** Obtain a reference to an r-tree node.
130038 static int
130039 nodeAcquire(
130040 Rtree *pRtree, /* R-tree structure */
130041 i64 iNode, /* Node number to load */
130042 RtreeNode *pParent, /* Either the parent node or NULL */
130043 RtreeNode **ppNode /* OUT: Acquired node */
130045 int rc;
130046 int rc2 = SQLITE_OK;
130047 RtreeNode *pNode;
130049 /* Check if the requested node is already in the hash table. If so,
130050 ** increase its reference count and return it.
130052 if( (pNode = nodeHashLookup(pRtree, iNode)) ){
130053 assert( !pParent || !pNode->pParent || pNode->pParent==pParent );
130054 if( pParent && !pNode->pParent ){
130055 nodeReference(pParent);
130056 pNode->pParent = pParent;
130058 pNode->nRef++;
130059 *ppNode = pNode;
130060 return SQLITE_OK;
130063 sqlite3_bind_int64(pRtree->pReadNode, 1, iNode);
130064 rc = sqlite3_step(pRtree->pReadNode);
130065 if( rc==SQLITE_ROW ){
130066 const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0);
130067 if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){
130068 pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize);
130069 if( !pNode ){
130070 rc2 = SQLITE_NOMEM;
130071 }else{
130072 pNode->pParent = pParent;
130073 pNode->zData = (u8 *)&pNode[1];
130074 pNode->nRef = 1;
130075 pNode->iNode = iNode;
130076 pNode->isDirty = 0;
130077 pNode->pNext = 0;
130078 memcpy(pNode->zData, zBlob, pRtree->iNodeSize);
130079 nodeReference(pParent);
130083 rc = sqlite3_reset(pRtree->pReadNode);
130084 if( rc==SQLITE_OK ) rc = rc2;
130086 /* If the root node was just loaded, set pRtree->iDepth to the height
130087 ** of the r-tree structure. A height of zero means all data is stored on
130088 ** the root node. A height of one means the children of the root node
130089 ** are the leaves, and so on. If the depth as specified on the root node
130090 ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt.
130092 if( pNode && iNode==1 ){
130093 pRtree->iDepth = readInt16(pNode->zData);
130094 if( pRtree->iDepth>RTREE_MAX_DEPTH ){
130095 rc = SQLITE_CORRUPT_VTAB;
130099 /* If no error has occurred so far, check if the "number of entries"
130100 ** field on the node is too large. If so, set the return code to
130101 ** SQLITE_CORRUPT_VTAB.
130103 if( pNode && rc==SQLITE_OK ){
130104 if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){
130105 rc = SQLITE_CORRUPT_VTAB;
130109 if( rc==SQLITE_OK ){
130110 if( pNode!=0 ){
130111 nodeHashInsert(pRtree, pNode);
130112 }else{
130113 rc = SQLITE_CORRUPT_VTAB;
130115 *ppNode = pNode;
130116 }else{
130117 sqlite3_free(pNode);
130118 *ppNode = 0;
130121 return rc;
130125 ** Overwrite cell iCell of node pNode with the contents of pCell.
130127 static void nodeOverwriteCell(
130128 Rtree *pRtree,
130129 RtreeNode *pNode,
130130 RtreeCell *pCell,
130131 int iCell
130133 int ii;
130134 u8 *p = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
130135 p += writeInt64(p, pCell->iRowid);
130136 for(ii=0; ii<(pRtree->nDim*2); ii++){
130137 p += writeCoord(p, &pCell->aCoord[ii]);
130139 pNode->isDirty = 1;
130143 ** Remove cell the cell with index iCell from node pNode.
130145 static void nodeDeleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell){
130146 u8 *pDst = &pNode->zData[4 + pRtree->nBytesPerCell*iCell];
130147 u8 *pSrc = &pDst[pRtree->nBytesPerCell];
130148 int nByte = (NCELL(pNode) - iCell - 1) * pRtree->nBytesPerCell;
130149 memmove(pDst, pSrc, nByte);
130150 writeInt16(&pNode->zData[2], NCELL(pNode)-1);
130151 pNode->isDirty = 1;
130155 ** Insert the contents of cell pCell into node pNode. If the insert
130156 ** is successful, return SQLITE_OK.
130158 ** If there is not enough free space in pNode, return SQLITE_FULL.
130160 static int
130161 nodeInsertCell(
130162 Rtree *pRtree,
130163 RtreeNode *pNode,
130164 RtreeCell *pCell
130166 int nCell; /* Current number of cells in pNode */
130167 int nMaxCell; /* Maximum number of cells for pNode */
130169 nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell;
130170 nCell = NCELL(pNode);
130172 assert( nCell<=nMaxCell );
130173 if( nCell<nMaxCell ){
130174 nodeOverwriteCell(pRtree, pNode, pCell, nCell);
130175 writeInt16(&pNode->zData[2], nCell+1);
130176 pNode->isDirty = 1;
130179 return (nCell==nMaxCell);
130183 ** If the node is dirty, write it out to the database.
130185 static int
130186 nodeWrite(Rtree *pRtree, RtreeNode *pNode){
130187 int rc = SQLITE_OK;
130188 if( pNode->isDirty ){
130189 sqlite3_stmt *p = pRtree->pWriteNode;
130190 if( pNode->iNode ){
130191 sqlite3_bind_int64(p, 1, pNode->iNode);
130192 }else{
130193 sqlite3_bind_null(p, 1);
130195 sqlite3_bind_blob(p, 2, pNode->zData, pRtree->iNodeSize, SQLITE_STATIC);
130196 sqlite3_step(p);
130197 pNode->isDirty = 0;
130198 rc = sqlite3_reset(p);
130199 if( pNode->iNode==0 && rc==SQLITE_OK ){
130200 pNode->iNode = sqlite3_last_insert_rowid(pRtree->db);
130201 nodeHashInsert(pRtree, pNode);
130204 return rc;
130208 ** Release a reference to a node. If the node is dirty and the reference
130209 ** count drops to zero, the node data is written to the database.
130211 static int
130212 nodeRelease(Rtree *pRtree, RtreeNode *pNode){
130213 int rc = SQLITE_OK;
130214 if( pNode ){
130215 assert( pNode->nRef>0 );
130216 pNode->nRef--;
130217 if( pNode->nRef==0 ){
130218 if( pNode->iNode==1 ){
130219 pRtree->iDepth = -1;
130221 if( pNode->pParent ){
130222 rc = nodeRelease(pRtree, pNode->pParent);
130224 if( rc==SQLITE_OK ){
130225 rc = nodeWrite(pRtree, pNode);
130227 nodeHashDelete(pRtree, pNode);
130228 sqlite3_free(pNode);
130231 return rc;
130235 ** Return the 64-bit integer value associated with cell iCell of
130236 ** node pNode. If pNode is a leaf node, this is a rowid. If it is
130237 ** an internal node, then the 64-bit integer is a child page number.
130239 static i64 nodeGetRowid(
130240 Rtree *pRtree,
130241 RtreeNode *pNode,
130242 int iCell
130244 assert( iCell<NCELL(pNode) );
130245 return readInt64(&pNode->zData[4 + pRtree->nBytesPerCell*iCell]);
130249 ** Return coordinate iCoord from cell iCell in node pNode.
130251 static void nodeGetCoord(
130252 Rtree *pRtree,
130253 RtreeNode *pNode,
130254 int iCell,
130255 int iCoord,
130256 RtreeCoord *pCoord /* Space to write result to */
130258 readCoord(&pNode->zData[12 + pRtree->nBytesPerCell*iCell + 4*iCoord], pCoord);
130262 ** Deserialize cell iCell of node pNode. Populate the structure pointed
130263 ** to by pCell with the results.
130265 static void nodeGetCell(
130266 Rtree *pRtree,
130267 RtreeNode *pNode,
130268 int iCell,
130269 RtreeCell *pCell
130271 int ii;
130272 pCell->iRowid = nodeGetRowid(pRtree, pNode, iCell);
130273 for(ii=0; ii<pRtree->nDim*2; ii++){
130274 nodeGetCoord(pRtree, pNode, iCell, ii, &pCell->aCoord[ii]);
130279 /* Forward declaration for the function that does the work of
130280 ** the virtual table module xCreate() and xConnect() methods.
130282 static int rtreeInit(
130283 sqlite3 *, void *, int, const char *const*, sqlite3_vtab **, char **, int
130287 ** Rtree virtual table module xCreate method.
130289 static int rtreeCreate(
130290 sqlite3 *db,
130291 void *pAux,
130292 int argc, const char *const*argv,
130293 sqlite3_vtab **ppVtab,
130294 char **pzErr
130296 return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 1);
130300 ** Rtree virtual table module xConnect method.
130302 static int rtreeConnect(
130303 sqlite3 *db,
130304 void *pAux,
130305 int argc, const char *const*argv,
130306 sqlite3_vtab **ppVtab,
130307 char **pzErr
130309 return rtreeInit(db, pAux, argc, argv, ppVtab, pzErr, 0);
130313 ** Increment the r-tree reference count.
130315 static void rtreeReference(Rtree *pRtree){
130316 pRtree->nBusy++;
130320 ** Decrement the r-tree reference count. When the reference count reaches
130321 ** zero the structure is deleted.
130323 static void rtreeRelease(Rtree *pRtree){
130324 pRtree->nBusy--;
130325 if( pRtree->nBusy==0 ){
130326 sqlite3_finalize(pRtree->pReadNode);
130327 sqlite3_finalize(pRtree->pWriteNode);
130328 sqlite3_finalize(pRtree->pDeleteNode);
130329 sqlite3_finalize(pRtree->pReadRowid);
130330 sqlite3_finalize(pRtree->pWriteRowid);
130331 sqlite3_finalize(pRtree->pDeleteRowid);
130332 sqlite3_finalize(pRtree->pReadParent);
130333 sqlite3_finalize(pRtree->pWriteParent);
130334 sqlite3_finalize(pRtree->pDeleteParent);
130335 sqlite3_free(pRtree);
130340 ** Rtree virtual table module xDisconnect method.
130342 static int rtreeDisconnect(sqlite3_vtab *pVtab){
130343 rtreeRelease((Rtree *)pVtab);
130344 return SQLITE_OK;
130348 ** Rtree virtual table module xDestroy method.
130350 static int rtreeDestroy(sqlite3_vtab *pVtab){
130351 Rtree *pRtree = (Rtree *)pVtab;
130352 int rc;
130353 char *zCreate = sqlite3_mprintf(
130354 "DROP TABLE '%q'.'%q_node';"
130355 "DROP TABLE '%q'.'%q_rowid';"
130356 "DROP TABLE '%q'.'%q_parent';",
130357 pRtree->zDb, pRtree->zName,
130358 pRtree->zDb, pRtree->zName,
130359 pRtree->zDb, pRtree->zName
130361 if( !zCreate ){
130362 rc = SQLITE_NOMEM;
130363 }else{
130364 rc = sqlite3_exec(pRtree->db, zCreate, 0, 0, 0);
130365 sqlite3_free(zCreate);
130367 if( rc==SQLITE_OK ){
130368 rtreeRelease(pRtree);
130371 return rc;
130375 ** Rtree virtual table module xOpen method.
130377 static int rtreeOpen(sqlite3_vtab *pVTab, sqlite3_vtab_cursor **ppCursor){
130378 int rc = SQLITE_NOMEM;
130379 RtreeCursor *pCsr;
130381 pCsr = (RtreeCursor *)sqlite3_malloc(sizeof(RtreeCursor));
130382 if( pCsr ){
130383 memset(pCsr, 0, sizeof(RtreeCursor));
130384 pCsr->base.pVtab = pVTab;
130385 rc = SQLITE_OK;
130387 *ppCursor = (sqlite3_vtab_cursor *)pCsr;
130389 return rc;
130394 ** Free the RtreeCursor.aConstraint[] array and its contents.
130396 static void freeCursorConstraints(RtreeCursor *pCsr){
130397 if( pCsr->aConstraint ){
130398 int i; /* Used to iterate through constraint array */
130399 for(i=0; i<pCsr->nConstraint; i++){
130400 sqlite3_rtree_geometry *pGeom = pCsr->aConstraint[i].pGeom;
130401 if( pGeom ){
130402 if( pGeom->xDelUser ) pGeom->xDelUser(pGeom->pUser);
130403 sqlite3_free(pGeom);
130406 sqlite3_free(pCsr->aConstraint);
130407 pCsr->aConstraint = 0;
130412 ** Rtree virtual table module xClose method.
130414 static int rtreeClose(sqlite3_vtab_cursor *cur){
130415 Rtree *pRtree = (Rtree *)(cur->pVtab);
130416 int rc;
130417 RtreeCursor *pCsr = (RtreeCursor *)cur;
130418 freeCursorConstraints(pCsr);
130419 rc = nodeRelease(pRtree, pCsr->pNode);
130420 sqlite3_free(pCsr);
130421 return rc;
130425 ** Rtree virtual table module xEof method.
130427 ** Return non-zero if the cursor does not currently point to a valid
130428 ** record (i.e if the scan has finished), or zero otherwise.
130430 static int rtreeEof(sqlite3_vtab_cursor *cur){
130431 RtreeCursor *pCsr = (RtreeCursor *)cur;
130432 return (pCsr->pNode==0);
130436 ** The r-tree constraint passed as the second argument to this function is
130437 ** guaranteed to be a MATCH constraint.
130439 static int testRtreeGeom(
130440 Rtree *pRtree, /* R-Tree object */
130441 RtreeConstraint *pConstraint, /* MATCH constraint to test */
130442 RtreeCell *pCell, /* Cell to test */
130443 int *pbRes /* OUT: Test result */
130445 int i;
130446 double aCoord[RTREE_MAX_DIMENSIONS*2];
130447 int nCoord = pRtree->nDim*2;
130449 assert( pConstraint->op==RTREE_MATCH );
130450 assert( pConstraint->pGeom );
130452 for(i=0; i<nCoord; i++){
130453 aCoord[i] = DCOORD(pCell->aCoord[i]);
130455 return pConstraint->xGeom(pConstraint->pGeom, nCoord, aCoord, pbRes);
130459 ** Cursor pCursor currently points to a cell in a non-leaf page.
130460 ** Set *pbEof to true if the sub-tree headed by the cell is filtered
130461 ** (excluded) by the constraints in the pCursor->aConstraint[]
130462 ** array, or false otherwise.
130464 ** Return SQLITE_OK if successful or an SQLite error code if an error
130465 ** occurs within a geometry callback.
130467 static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
130468 RtreeCell cell;
130469 int ii;
130470 int bRes = 0;
130471 int rc = SQLITE_OK;
130473 nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
130474 for(ii=0; bRes==0 && ii<pCursor->nConstraint; ii++){
130475 RtreeConstraint *p = &pCursor->aConstraint[ii];
130476 double cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]);
130477 double cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]);
130479 assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE
130480 || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
130483 switch( p->op ){
130484 case RTREE_LE: case RTREE_LT:
130485 bRes = p->rValue<cell_min;
130486 break;
130488 case RTREE_GE: case RTREE_GT:
130489 bRes = p->rValue>cell_max;
130490 break;
130492 case RTREE_EQ:
130493 bRes = (p->rValue>cell_max || p->rValue<cell_min);
130494 break;
130496 default: {
130497 assert( p->op==RTREE_MATCH );
130498 rc = testRtreeGeom(pRtree, p, &cell, &bRes);
130499 bRes = !bRes;
130500 break;
130505 *pbEof = bRes;
130506 return rc;
130510 ** Test if the cell that cursor pCursor currently points to
130511 ** would be filtered (excluded) by the constraints in the
130512 ** pCursor->aConstraint[] array. If so, set *pbEof to true before
130513 ** returning. If the cell is not filtered (excluded) by the constraints,
130514 ** set pbEof to zero.
130516 ** Return SQLITE_OK if successful or an SQLite error code if an error
130517 ** occurs within a geometry callback.
130519 ** This function assumes that the cell is part of a leaf node.
130521 static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
130522 RtreeCell cell;
130523 int ii;
130524 *pbEof = 0;
130526 nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
130527 for(ii=0; ii<pCursor->nConstraint; ii++){
130528 RtreeConstraint *p = &pCursor->aConstraint[ii];
130529 double coord = DCOORD(cell.aCoord[p->iCoord]);
130530 int res;
130531 assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE
130532 || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
130534 switch( p->op ){
130535 case RTREE_LE: res = (coord<=p->rValue); break;
130536 case RTREE_LT: res = (coord<p->rValue); break;
130537 case RTREE_GE: res = (coord>=p->rValue); break;
130538 case RTREE_GT: res = (coord>p->rValue); break;
130539 case RTREE_EQ: res = (coord==p->rValue); break;
130540 default: {
130541 int rc;
130542 assert( p->op==RTREE_MATCH );
130543 rc = testRtreeGeom(pRtree, p, &cell, &res);
130544 if( rc!=SQLITE_OK ){
130545 return rc;
130547 break;
130551 if( !res ){
130552 *pbEof = 1;
130553 return SQLITE_OK;
130557 return SQLITE_OK;
130561 ** Cursor pCursor currently points at a node that heads a sub-tree of
130562 ** height iHeight (if iHeight==0, then the node is a leaf). Descend
130563 ** to point to the left-most cell of the sub-tree that matches the
130564 ** configured constraints.
130566 static int descendToCell(
130567 Rtree *pRtree,
130568 RtreeCursor *pCursor,
130569 int iHeight,
130570 int *pEof /* OUT: Set to true if cannot descend */
130572 int isEof;
130573 int rc;
130574 int ii;
130575 RtreeNode *pChild;
130576 sqlite3_int64 iRowid;
130578 RtreeNode *pSavedNode = pCursor->pNode;
130579 int iSavedCell = pCursor->iCell;
130581 assert( iHeight>=0 );
130583 if( iHeight==0 ){
130584 rc = testRtreeEntry(pRtree, pCursor, &isEof);
130585 }else{
130586 rc = testRtreeCell(pRtree, pCursor, &isEof);
130588 if( rc!=SQLITE_OK || isEof || iHeight==0 ){
130589 goto descend_to_cell_out;
130592 iRowid = nodeGetRowid(pRtree, pCursor->pNode, pCursor->iCell);
130593 rc = nodeAcquire(pRtree, iRowid, pCursor->pNode, &pChild);
130594 if( rc!=SQLITE_OK ){
130595 goto descend_to_cell_out;
130598 nodeRelease(pRtree, pCursor->pNode);
130599 pCursor->pNode = pChild;
130600 isEof = 1;
130601 for(ii=0; isEof && ii<NCELL(pChild); ii++){
130602 pCursor->iCell = ii;
130603 rc = descendToCell(pRtree, pCursor, iHeight-1, &isEof);
130604 if( rc!=SQLITE_OK ){
130605 goto descend_to_cell_out;
130609 if( isEof ){
130610 assert( pCursor->pNode==pChild );
130611 nodeReference(pSavedNode);
130612 nodeRelease(pRtree, pChild);
130613 pCursor->pNode = pSavedNode;
130614 pCursor->iCell = iSavedCell;
130617 descend_to_cell_out:
130618 *pEof = isEof;
130619 return rc;
130623 ** One of the cells in node pNode is guaranteed to have a 64-bit
130624 ** integer value equal to iRowid. Return the index of this cell.
130626 static int nodeRowidIndex(
130627 Rtree *pRtree,
130628 RtreeNode *pNode,
130629 i64 iRowid,
130630 int *piIndex
130632 int ii;
130633 int nCell = NCELL(pNode);
130634 for(ii=0; ii<nCell; ii++){
130635 if( nodeGetRowid(pRtree, pNode, ii)==iRowid ){
130636 *piIndex = ii;
130637 return SQLITE_OK;
130640 return SQLITE_CORRUPT_VTAB;
130644 ** Return the index of the cell containing a pointer to node pNode
130645 ** in its parent. If pNode is the root node, return -1.
130647 static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){
130648 RtreeNode *pParent = pNode->pParent;
130649 if( pParent ){
130650 return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex);
130652 *piIndex = -1;
130653 return SQLITE_OK;
130657 ** Rtree virtual table module xNext method.
130659 static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){
130660 Rtree *pRtree = (Rtree *)(pVtabCursor->pVtab);
130661 RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
130662 int rc = SQLITE_OK;
130664 /* RtreeCursor.pNode must not be NULL. If is is NULL, then this cursor is
130665 ** already at EOF. It is against the rules to call the xNext() method of
130666 ** a cursor that has already reached EOF.
130668 assert( pCsr->pNode );
130670 if( pCsr->iStrategy==1 ){
130671 /* This "scan" is a direct lookup by rowid. There is no next entry. */
130672 nodeRelease(pRtree, pCsr->pNode);
130673 pCsr->pNode = 0;
130674 }else{
130675 /* Move to the next entry that matches the configured constraints. */
130676 int iHeight = 0;
130677 while( pCsr->pNode ){
130678 RtreeNode *pNode = pCsr->pNode;
130679 int nCell = NCELL(pNode);
130680 for(pCsr->iCell++; pCsr->iCell<nCell; pCsr->iCell++){
130681 int isEof;
130682 rc = descendToCell(pRtree, pCsr, iHeight, &isEof);
130683 if( rc!=SQLITE_OK || !isEof ){
130684 return rc;
130687 pCsr->pNode = pNode->pParent;
130688 rc = nodeParentIndex(pRtree, pNode, &pCsr->iCell);
130689 if( rc!=SQLITE_OK ){
130690 return rc;
130692 nodeReference(pCsr->pNode);
130693 nodeRelease(pRtree, pNode);
130694 iHeight++;
130698 return rc;
130702 ** Rtree virtual table module xRowid method.
130704 static int rtreeRowid(sqlite3_vtab_cursor *pVtabCursor, sqlite_int64 *pRowid){
130705 Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
130706 RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
130708 assert(pCsr->pNode);
130709 *pRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
130711 return SQLITE_OK;
130715 ** Rtree virtual table module xColumn method.
130717 static int rtreeColumn(sqlite3_vtab_cursor *cur, sqlite3_context *ctx, int i){
130718 Rtree *pRtree = (Rtree *)cur->pVtab;
130719 RtreeCursor *pCsr = (RtreeCursor *)cur;
130721 if( i==0 ){
130722 i64 iRowid = nodeGetRowid(pRtree, pCsr->pNode, pCsr->iCell);
130723 sqlite3_result_int64(ctx, iRowid);
130724 }else{
130725 RtreeCoord c;
130726 nodeGetCoord(pRtree, pCsr->pNode, pCsr->iCell, i-1, &c);
130727 if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
130728 sqlite3_result_double(ctx, c.f);
130729 }else{
130730 assert( pRtree->eCoordType==RTREE_COORD_INT32 );
130731 sqlite3_result_int(ctx, c.i);
130735 return SQLITE_OK;
130739 ** Use nodeAcquire() to obtain the leaf node containing the record with
130740 ** rowid iRowid. If successful, set *ppLeaf to point to the node and
130741 ** return SQLITE_OK. If there is no such record in the table, set
130742 ** *ppLeaf to 0 and return SQLITE_OK. If an error occurs, set *ppLeaf
130743 ** to zero and return an SQLite error code.
130745 static int findLeafNode(Rtree *pRtree, i64 iRowid, RtreeNode **ppLeaf){
130746 int rc;
130747 *ppLeaf = 0;
130748 sqlite3_bind_int64(pRtree->pReadRowid, 1, iRowid);
130749 if( sqlite3_step(pRtree->pReadRowid)==SQLITE_ROW ){
130750 i64 iNode = sqlite3_column_int64(pRtree->pReadRowid, 0);
130751 rc = nodeAcquire(pRtree, iNode, 0, ppLeaf);
130752 sqlite3_reset(pRtree->pReadRowid);
130753 }else{
130754 rc = sqlite3_reset(pRtree->pReadRowid);
130756 return rc;
130760 ** This function is called to configure the RtreeConstraint object passed
130761 ** as the second argument for a MATCH constraint. The value passed as the
130762 ** first argument to this function is the right-hand operand to the MATCH
130763 ** operator.
130765 static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
130766 RtreeMatchArg *p;
130767 sqlite3_rtree_geometry *pGeom;
130768 int nBlob;
130770 /* Check that value is actually a blob. */
130771 if( sqlite3_value_type(pValue)!=SQLITE_BLOB ) return SQLITE_ERROR;
130773 /* Check that the blob is roughly the right size. */
130774 nBlob = sqlite3_value_bytes(pValue);
130775 if( nBlob<(int)sizeof(RtreeMatchArg)
130776 || ((nBlob-sizeof(RtreeMatchArg))%sizeof(double))!=0
130778 return SQLITE_ERROR;
130781 pGeom = (sqlite3_rtree_geometry *)sqlite3_malloc(
130782 sizeof(sqlite3_rtree_geometry) + nBlob
130784 if( !pGeom ) return SQLITE_NOMEM;
130785 memset(pGeom, 0, sizeof(sqlite3_rtree_geometry));
130786 p = (RtreeMatchArg *)&pGeom[1];
130788 memcpy(p, sqlite3_value_blob(pValue), nBlob);
130789 if( p->magic!=RTREE_GEOMETRY_MAGIC
130790 || nBlob!=(int)(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
130792 sqlite3_free(pGeom);
130793 return SQLITE_ERROR;
130796 pGeom->pContext = p->pContext;
130797 pGeom->nParam = p->nParam;
130798 pGeom->aParam = p->aParam;
130800 pCons->xGeom = p->xGeom;
130801 pCons->pGeom = pGeom;
130802 return SQLITE_OK;
130806 ** Rtree virtual table module xFilter method.
130808 static int rtreeFilter(
130809 sqlite3_vtab_cursor *pVtabCursor,
130810 int idxNum, const char *idxStr,
130811 int argc, sqlite3_value **argv
130813 Rtree *pRtree = (Rtree *)pVtabCursor->pVtab;
130814 RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
130816 RtreeNode *pRoot = 0;
130817 int ii;
130818 int rc = SQLITE_OK;
130820 rtreeReference(pRtree);
130822 freeCursorConstraints(pCsr);
130823 pCsr->iStrategy = idxNum;
130825 if( idxNum==1 ){
130826 /* Special case - lookup by rowid. */
130827 RtreeNode *pLeaf; /* Leaf on which the required cell resides */
130828 i64 iRowid = sqlite3_value_int64(argv[0]);
130829 rc = findLeafNode(pRtree, iRowid, &pLeaf);
130830 pCsr->pNode = pLeaf;
130831 if( pLeaf ){
130832 assert( rc==SQLITE_OK );
130833 rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &pCsr->iCell);
130835 }else{
130836 /* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array
130837 ** with the configured constraints.
130839 if( argc>0 ){
130840 pCsr->aConstraint = sqlite3_malloc(sizeof(RtreeConstraint)*argc);
130841 pCsr->nConstraint = argc;
130842 if( !pCsr->aConstraint ){
130843 rc = SQLITE_NOMEM;
130844 }else{
130845 memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc);
130846 assert( (idxStr==0 && argc==0)
130847 || (idxStr && (int)strlen(idxStr)==argc*2) );
130848 for(ii=0; ii<argc; ii++){
130849 RtreeConstraint *p = &pCsr->aConstraint[ii];
130850 p->op = idxStr[ii*2];
130851 p->iCoord = idxStr[ii*2+1]-'a';
130852 if( p->op==RTREE_MATCH ){
130853 /* A MATCH operator. The right-hand-side must be a blob that
130854 ** can be cast into an RtreeMatchArg object. One created using
130855 ** an sqlite3_rtree_geometry_callback() SQL user function.
130857 rc = deserializeGeometry(argv[ii], p);
130858 if( rc!=SQLITE_OK ){
130859 break;
130861 }else{
130862 p->rValue = sqlite3_value_double(argv[ii]);
130868 if( rc==SQLITE_OK ){
130869 pCsr->pNode = 0;
130870 rc = nodeAcquire(pRtree, 1, 0, &pRoot);
130872 if( rc==SQLITE_OK ){
130873 int isEof = 1;
130874 int nCell = NCELL(pRoot);
130875 pCsr->pNode = pRoot;
130876 for(pCsr->iCell=0; rc==SQLITE_OK && pCsr->iCell<nCell; pCsr->iCell++){
130877 assert( pCsr->pNode==pRoot );
130878 rc = descendToCell(pRtree, pCsr, pRtree->iDepth, &isEof);
130879 if( !isEof ){
130880 break;
130883 if( rc==SQLITE_OK && isEof ){
130884 assert( pCsr->pNode==pRoot );
130885 nodeRelease(pRtree, pRoot);
130886 pCsr->pNode = 0;
130888 assert( rc!=SQLITE_OK || !pCsr->pNode || pCsr->iCell<NCELL(pCsr->pNode) );
130892 rtreeRelease(pRtree);
130893 return rc;
130897 ** Rtree virtual table module xBestIndex method. There are three
130898 ** table scan strategies to choose from (in order from most to
130899 ** least desirable):
130901 ** idxNum idxStr Strategy
130902 ** ------------------------------------------------
130903 ** 1 Unused Direct lookup by rowid.
130904 ** 2 See below R-tree query or full-table scan.
130905 ** ------------------------------------------------
130907 ** If strategy 1 is used, then idxStr is not meaningful. If strategy
130908 ** 2 is used, idxStr is formatted to contain 2 bytes for each
130909 ** constraint used. The first two bytes of idxStr correspond to
130910 ** the constraint in sqlite3_index_info.aConstraintUsage[] with
130911 ** (argvIndex==1) etc.
130913 ** The first of each pair of bytes in idxStr identifies the constraint
130914 ** operator as follows:
130916 ** Operator Byte Value
130917 ** ----------------------
130918 ** = 0x41 ('A')
130919 ** <= 0x42 ('B')
130920 ** < 0x43 ('C')
130921 ** >= 0x44 ('D')
130922 ** > 0x45 ('E')
130923 ** MATCH 0x46 ('F')
130924 ** ----------------------
130926 ** The second of each pair of bytes identifies the coordinate column
130927 ** to which the constraint applies. The leftmost coordinate column
130928 ** is 'a', the second from the left 'b' etc.
130930 static int rtreeBestIndex(sqlite3_vtab *tab, sqlite3_index_info *pIdxInfo){
130931 int rc = SQLITE_OK;
130932 int ii;
130934 int iIdx = 0;
130935 char zIdxStr[RTREE_MAX_DIMENSIONS*8+1];
130936 memset(zIdxStr, 0, sizeof(zIdxStr));
130937 UNUSED_PARAMETER(tab);
130939 assert( pIdxInfo->idxStr==0 );
130940 for(ii=0; ii<pIdxInfo->nConstraint && iIdx<(int)(sizeof(zIdxStr)-1); ii++){
130941 struct sqlite3_index_constraint *p = &pIdxInfo->aConstraint[ii];
130943 if( p->usable && p->iColumn==0 && p->op==SQLITE_INDEX_CONSTRAINT_EQ ){
130944 /* We have an equality constraint on the rowid. Use strategy 1. */
130945 int jj;
130946 for(jj=0; jj<ii; jj++){
130947 pIdxInfo->aConstraintUsage[jj].argvIndex = 0;
130948 pIdxInfo->aConstraintUsage[jj].omit = 0;
130950 pIdxInfo->idxNum = 1;
130951 pIdxInfo->aConstraintUsage[ii].argvIndex = 1;
130952 pIdxInfo->aConstraintUsage[jj].omit = 1;
130954 /* This strategy involves a two rowid lookups on an B-Tree structures
130955 ** and then a linear search of an R-Tree node. This should be
130956 ** considered almost as quick as a direct rowid lookup (for which
130957 ** sqlite uses an internal cost of 0.0).
130959 pIdxInfo->estimatedCost = 10.0;
130960 return SQLITE_OK;
130963 if( p->usable && (p->iColumn>0 || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) ){
130964 u8 op;
130965 switch( p->op ){
130966 case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break;
130967 case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break;
130968 case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break;
130969 case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break;
130970 case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break;
130971 default:
130972 assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH );
130973 op = RTREE_MATCH;
130974 break;
130976 zIdxStr[iIdx++] = op;
130977 zIdxStr[iIdx++] = p->iColumn - 1 + 'a';
130978 pIdxInfo->aConstraintUsage[ii].argvIndex = (iIdx/2);
130979 pIdxInfo->aConstraintUsage[ii].omit = 1;
130983 pIdxInfo->idxNum = 2;
130984 pIdxInfo->needToFreeIdxStr = 1;
130985 if( iIdx>0 && 0==(pIdxInfo->idxStr = sqlite3_mprintf("%s", zIdxStr)) ){
130986 return SQLITE_NOMEM;
130988 assert( iIdx>=0 );
130989 pIdxInfo->estimatedCost = (2000000.0 / (double)(iIdx + 1));
130990 return rc;
130994 ** Return the N-dimensional volumn of the cell stored in *p.
130996 static float cellArea(Rtree *pRtree, RtreeCell *p){
130997 float area = 1.0;
130998 int ii;
130999 for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131000 area = (float)(area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])));
131002 return area;
131006 ** Return the margin length of cell p. The margin length is the sum
131007 ** of the objects size in each dimension.
131009 static float cellMargin(Rtree *pRtree, RtreeCell *p){
131010 float margin = 0.0;
131011 int ii;
131012 for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131013 margin += (float)(DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
131015 return margin;
131019 ** Store the union of cells p1 and p2 in p1.
131021 static void cellUnion(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
131022 int ii;
131023 if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
131024 for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131025 p1->aCoord[ii].f = MIN(p1->aCoord[ii].f, p2->aCoord[ii].f);
131026 p1->aCoord[ii+1].f = MAX(p1->aCoord[ii+1].f, p2->aCoord[ii+1].f);
131028 }else{
131029 for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131030 p1->aCoord[ii].i = MIN(p1->aCoord[ii].i, p2->aCoord[ii].i);
131031 p1->aCoord[ii+1].i = MAX(p1->aCoord[ii+1].i, p2->aCoord[ii+1].i);
131037 ** Return true if the area covered by p2 is a subset of the area covered
131038 ** by p1. False otherwise.
131040 static int cellContains(Rtree *pRtree, RtreeCell *p1, RtreeCell *p2){
131041 int ii;
131042 int isInt = (pRtree->eCoordType==RTREE_COORD_INT32);
131043 for(ii=0; ii<(pRtree->nDim*2); ii+=2){
131044 RtreeCoord *a1 = &p1->aCoord[ii];
131045 RtreeCoord *a2 = &p2->aCoord[ii];
131046 if( (!isInt && (a2[0].f<a1[0].f || a2[1].f>a1[1].f))
131047 || ( isInt && (a2[0].i<a1[0].i || a2[1].i>a1[1].i))
131049 return 0;
131052 return 1;
131056 ** Return the amount cell p would grow by if it were unioned with pCell.
131058 static float cellGrowth(Rtree *pRtree, RtreeCell *p, RtreeCell *pCell){
131059 float area;
131060 RtreeCell cell;
131061 memcpy(&cell, p, sizeof(RtreeCell));
131062 area = cellArea(pRtree, &cell);
131063 cellUnion(pRtree, &cell, pCell);
131064 return (cellArea(pRtree, &cell)-area);
131067 #if VARIANT_RSTARTREE_CHOOSESUBTREE || VARIANT_RSTARTREE_SPLIT
131068 static float cellOverlap(
131069 Rtree *pRtree,
131070 RtreeCell *p,
131071 RtreeCell *aCell,
131072 int nCell,
131073 int iExclude
131075 int ii;
131076 float overlap = 0.0;
131077 for(ii=0; ii<nCell; ii++){
131078 #if VARIANT_RSTARTREE_CHOOSESUBTREE
131079 if( ii!=iExclude )
131080 #else
131081 assert( iExclude==-1 );
131082 UNUSED_PARAMETER(iExclude);
131083 #endif
131085 int jj;
131086 float o = 1.0;
131087 for(jj=0; jj<(pRtree->nDim*2); jj+=2){
131088 double x1;
131089 double x2;
131091 x1 = MAX(DCOORD(p->aCoord[jj]), DCOORD(aCell[ii].aCoord[jj]));
131092 x2 = MIN(DCOORD(p->aCoord[jj+1]), DCOORD(aCell[ii].aCoord[jj+1]));
131094 if( x2<x1 ){
131095 o = 0.0;
131096 break;
131097 }else{
131098 o = o * (float)(x2-x1);
131101 overlap += o;
131104 return overlap;
131106 #endif
131108 #if VARIANT_RSTARTREE_CHOOSESUBTREE
131109 static float cellOverlapEnlargement(
131110 Rtree *pRtree,
131111 RtreeCell *p,
131112 RtreeCell *pInsert,
131113 RtreeCell *aCell,
131114 int nCell,
131115 int iExclude
131117 double before;
131118 double after;
131119 before = cellOverlap(pRtree, p, aCell, nCell, iExclude);
131120 cellUnion(pRtree, p, pInsert);
131121 after = cellOverlap(pRtree, p, aCell, nCell, iExclude);
131122 return (float)(after-before);
131124 #endif
131128 ** This function implements the ChooseLeaf algorithm from Gutman[84].
131129 ** ChooseSubTree in r*tree terminology.
131131 static int ChooseLeaf(
131132 Rtree *pRtree, /* Rtree table */
131133 RtreeCell *pCell, /* Cell to insert into rtree */
131134 int iHeight, /* Height of sub-tree rooted at pCell */
131135 RtreeNode **ppLeaf /* OUT: Selected leaf page */
131137 int rc;
131138 int ii;
131139 RtreeNode *pNode;
131140 rc = nodeAcquire(pRtree, 1, 0, &pNode);
131142 for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){
131143 int iCell;
131144 sqlite3_int64 iBest = 0;
131146 float fMinGrowth = 0.0;
131147 float fMinArea = 0.0;
131148 #if VARIANT_RSTARTREE_CHOOSESUBTREE
131149 float fMinOverlap = 0.0;
131150 float overlap;
131151 #endif
131153 int nCell = NCELL(pNode);
131154 RtreeCell cell;
131155 RtreeNode *pChild;
131157 RtreeCell *aCell = 0;
131159 #if VARIANT_RSTARTREE_CHOOSESUBTREE
131160 if( ii==(pRtree->iDepth-1) ){
131161 int jj;
131162 aCell = sqlite3_malloc(sizeof(RtreeCell)*nCell);
131163 if( !aCell ){
131164 rc = SQLITE_NOMEM;
131165 nodeRelease(pRtree, pNode);
131166 pNode = 0;
131167 continue;
131169 for(jj=0; jj<nCell; jj++){
131170 nodeGetCell(pRtree, pNode, jj, &aCell[jj]);
131173 #endif
131175 /* Select the child node which will be enlarged the least if pCell
131176 ** is inserted into it. Resolve ties by choosing the entry with
131177 ** the smallest area.
131179 for(iCell=0; iCell<nCell; iCell++){
131180 int bBest = 0;
131181 float growth;
131182 float area;
131183 nodeGetCell(pRtree, pNode, iCell, &cell);
131184 growth = cellGrowth(pRtree, &cell, pCell);
131185 area = cellArea(pRtree, &cell);
131187 #if VARIANT_RSTARTREE_CHOOSESUBTREE
131188 if( ii==(pRtree->iDepth-1) ){
131189 overlap = cellOverlapEnlargement(pRtree,&cell,pCell,aCell,nCell,iCell);
131190 }else{
131191 overlap = 0.0;
131193 if( (iCell==0)
131194 || (overlap<fMinOverlap)
131195 || (overlap==fMinOverlap && growth<fMinGrowth)
131196 || (overlap==fMinOverlap && growth==fMinGrowth && area<fMinArea)
131198 bBest = 1;
131199 fMinOverlap = overlap;
131201 #else
131202 if( iCell==0||growth<fMinGrowth||(growth==fMinGrowth && area<fMinArea) ){
131203 bBest = 1;
131205 #endif
131206 if( bBest ){
131207 fMinGrowth = growth;
131208 fMinArea = area;
131209 iBest = cell.iRowid;
131213 sqlite3_free(aCell);
131214 rc = nodeAcquire(pRtree, iBest, pNode, &pChild);
131215 nodeRelease(pRtree, pNode);
131216 pNode = pChild;
131219 *ppLeaf = pNode;
131220 return rc;
131224 ** A cell with the same content as pCell has just been inserted into
131225 ** the node pNode. This function updates the bounding box cells in
131226 ** all ancestor elements.
131228 static int AdjustTree(
131229 Rtree *pRtree, /* Rtree table */
131230 RtreeNode *pNode, /* Adjust ancestry of this node. */
131231 RtreeCell *pCell /* This cell was just inserted */
131233 RtreeNode *p = pNode;
131234 while( p->pParent ){
131235 RtreeNode *pParent = p->pParent;
131236 RtreeCell cell;
131237 int iCell;
131239 if( nodeParentIndex(pRtree, p, &iCell) ){
131240 return SQLITE_CORRUPT_VTAB;
131243 nodeGetCell(pRtree, pParent, iCell, &cell);
131244 if( !cellContains(pRtree, &cell, pCell) ){
131245 cellUnion(pRtree, &cell, pCell);
131246 nodeOverwriteCell(pRtree, pParent, &cell, iCell);
131249 p = pParent;
131251 return SQLITE_OK;
131255 ** Write mapping (iRowid->iNode) to the <rtree>_rowid table.
131257 static int rowidWrite(Rtree *pRtree, sqlite3_int64 iRowid, sqlite3_int64 iNode){
131258 sqlite3_bind_int64(pRtree->pWriteRowid, 1, iRowid);
131259 sqlite3_bind_int64(pRtree->pWriteRowid, 2, iNode);
131260 sqlite3_step(pRtree->pWriteRowid);
131261 return sqlite3_reset(pRtree->pWriteRowid);
131265 ** Write mapping (iNode->iPar) to the <rtree>_parent table.
131267 static int parentWrite(Rtree *pRtree, sqlite3_int64 iNode, sqlite3_int64 iPar){
131268 sqlite3_bind_int64(pRtree->pWriteParent, 1, iNode);
131269 sqlite3_bind_int64(pRtree->pWriteParent, 2, iPar);
131270 sqlite3_step(pRtree->pWriteParent);
131271 return sqlite3_reset(pRtree->pWriteParent);
131274 static int rtreeInsertCell(Rtree *, RtreeNode *, RtreeCell *, int);
131276 #if VARIANT_GUTTMAN_LINEAR_SPLIT
131278 ** Implementation of the linear variant of the PickNext() function from
131279 ** Guttman[84].
131281 static RtreeCell *LinearPickNext(
131282 Rtree *pRtree,
131283 RtreeCell *aCell,
131284 int nCell,
131285 RtreeCell *pLeftBox,
131286 RtreeCell *pRightBox,
131287 int *aiUsed
131289 int ii;
131290 for(ii=0; aiUsed[ii]; ii++);
131291 aiUsed[ii] = 1;
131292 return &aCell[ii];
131296 ** Implementation of the linear variant of the PickSeeds() function from
131297 ** Guttman[84].
131299 static void LinearPickSeeds(
131300 Rtree *pRtree,
131301 RtreeCell *aCell,
131302 int nCell,
131303 int *piLeftSeed,
131304 int *piRightSeed
131306 int i;
131307 int iLeftSeed = 0;
131308 int iRightSeed = 1;
131309 float maxNormalInnerWidth = 0.0;
131311 /* Pick two "seed" cells from the array of cells. The algorithm used
131312 ** here is the LinearPickSeeds algorithm from Gutman[1984]. The
131313 ** indices of the two seed cells in the array are stored in local
131314 ** variables iLeftSeek and iRightSeed.
131316 for(i=0; i<pRtree->nDim; i++){
131317 float x1 = DCOORD(aCell[0].aCoord[i*2]);
131318 float x2 = DCOORD(aCell[0].aCoord[i*2+1]);
131319 float x3 = x1;
131320 float x4 = x2;
131321 int jj;
131323 int iCellLeft = 0;
131324 int iCellRight = 0;
131326 for(jj=1; jj<nCell; jj++){
131327 float left = DCOORD(aCell[jj].aCoord[i*2]);
131328 float right = DCOORD(aCell[jj].aCoord[i*2+1]);
131330 if( left<x1 ) x1 = left;
131331 if( right>x4 ) x4 = right;
131332 if( left>x3 ){
131333 x3 = left;
131334 iCellRight = jj;
131336 if( right<x2 ){
131337 x2 = right;
131338 iCellLeft = jj;
131342 if( x4!=x1 ){
131343 float normalwidth = (x3 - x2) / (x4 - x1);
131344 if( normalwidth>maxNormalInnerWidth ){
131345 iLeftSeed = iCellLeft;
131346 iRightSeed = iCellRight;
131351 *piLeftSeed = iLeftSeed;
131352 *piRightSeed = iRightSeed;
131354 #endif /* VARIANT_GUTTMAN_LINEAR_SPLIT */
131356 #if VARIANT_GUTTMAN_QUADRATIC_SPLIT
131358 ** Implementation of the quadratic variant of the PickNext() function from
131359 ** Guttman[84].
131361 static RtreeCell *QuadraticPickNext(
131362 Rtree *pRtree,
131363 RtreeCell *aCell,
131364 int nCell,
131365 RtreeCell *pLeftBox,
131366 RtreeCell *pRightBox,
131367 int *aiUsed
131369 #define FABS(a) ((a)<0.0?-1.0*(a):(a))
131371 int iSelect = -1;
131372 float fDiff;
131373 int ii;
131374 for(ii=0; ii<nCell; ii++){
131375 if( aiUsed[ii]==0 ){
131376 float left = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
131377 float right = cellGrowth(pRtree, pLeftBox, &aCell[ii]);
131378 float diff = FABS(right-left);
131379 if( iSelect<0 || diff>fDiff ){
131380 fDiff = diff;
131381 iSelect = ii;
131385 aiUsed[iSelect] = 1;
131386 return &aCell[iSelect];
131390 ** Implementation of the quadratic variant of the PickSeeds() function from
131391 ** Guttman[84].
131393 static void QuadraticPickSeeds(
131394 Rtree *pRtree,
131395 RtreeCell *aCell,
131396 int nCell,
131397 int *piLeftSeed,
131398 int *piRightSeed
131400 int ii;
131401 int jj;
131403 int iLeftSeed = 0;
131404 int iRightSeed = 1;
131405 float fWaste = 0.0;
131407 for(ii=0; ii<nCell; ii++){
131408 for(jj=ii+1; jj<nCell; jj++){
131409 float right = cellArea(pRtree, &aCell[jj]);
131410 float growth = cellGrowth(pRtree, &aCell[ii], &aCell[jj]);
131411 float waste = growth - right;
131413 if( waste>fWaste ){
131414 iLeftSeed = ii;
131415 iRightSeed = jj;
131416 fWaste = waste;
131421 *piLeftSeed = iLeftSeed;
131422 *piRightSeed = iRightSeed;
131424 #endif /* VARIANT_GUTTMAN_QUADRATIC_SPLIT */
131427 ** Arguments aIdx, aDistance and aSpare all point to arrays of size
131428 ** nIdx. The aIdx array contains the set of integers from 0 to
131429 ** (nIdx-1) in no particular order. This function sorts the values
131430 ** in aIdx according to the indexed values in aDistance. For
131431 ** example, assuming the inputs:
131433 ** aIdx = { 0, 1, 2, 3 }
131434 ** aDistance = { 5.0, 2.0, 7.0, 6.0 }
131436 ** this function sets the aIdx array to contain:
131438 ** aIdx = { 0, 1, 2, 3 }
131440 ** The aSpare array is used as temporary working space by the
131441 ** sorting algorithm.
131443 static void SortByDistance(
131444 int *aIdx,
131445 int nIdx,
131446 float *aDistance,
131447 int *aSpare
131449 if( nIdx>1 ){
131450 int iLeft = 0;
131451 int iRight = 0;
131453 int nLeft = nIdx/2;
131454 int nRight = nIdx-nLeft;
131455 int *aLeft = aIdx;
131456 int *aRight = &aIdx[nLeft];
131458 SortByDistance(aLeft, nLeft, aDistance, aSpare);
131459 SortByDistance(aRight, nRight, aDistance, aSpare);
131461 memcpy(aSpare, aLeft, sizeof(int)*nLeft);
131462 aLeft = aSpare;
131464 while( iLeft<nLeft || iRight<nRight ){
131465 if( iLeft==nLeft ){
131466 aIdx[iLeft+iRight] = aRight[iRight];
131467 iRight++;
131468 }else if( iRight==nRight ){
131469 aIdx[iLeft+iRight] = aLeft[iLeft];
131470 iLeft++;
131471 }else{
131472 float fLeft = aDistance[aLeft[iLeft]];
131473 float fRight = aDistance[aRight[iRight]];
131474 if( fLeft<fRight ){
131475 aIdx[iLeft+iRight] = aLeft[iLeft];
131476 iLeft++;
131477 }else{
131478 aIdx[iLeft+iRight] = aRight[iRight];
131479 iRight++;
131484 #if 0
131485 /* Check that the sort worked */
131487 int jj;
131488 for(jj=1; jj<nIdx; jj++){
131489 float left = aDistance[aIdx[jj-1]];
131490 float right = aDistance[aIdx[jj]];
131491 assert( left<=right );
131494 #endif
131499 ** Arguments aIdx, aCell and aSpare all point to arrays of size
131500 ** nIdx. The aIdx array contains the set of integers from 0 to
131501 ** (nIdx-1) in no particular order. This function sorts the values
131502 ** in aIdx according to dimension iDim of the cells in aCell. The
131503 ** minimum value of dimension iDim is considered first, the
131504 ** maximum used to break ties.
131506 ** The aSpare array is used as temporary working space by the
131507 ** sorting algorithm.
131509 static void SortByDimension(
131510 Rtree *pRtree,
131511 int *aIdx,
131512 int nIdx,
131513 int iDim,
131514 RtreeCell *aCell,
131515 int *aSpare
131517 if( nIdx>1 ){
131519 int iLeft = 0;
131520 int iRight = 0;
131522 int nLeft = nIdx/2;
131523 int nRight = nIdx-nLeft;
131524 int *aLeft = aIdx;
131525 int *aRight = &aIdx[nLeft];
131527 SortByDimension(pRtree, aLeft, nLeft, iDim, aCell, aSpare);
131528 SortByDimension(pRtree, aRight, nRight, iDim, aCell, aSpare);
131530 memcpy(aSpare, aLeft, sizeof(int)*nLeft);
131531 aLeft = aSpare;
131532 while( iLeft<nLeft || iRight<nRight ){
131533 double xleft1 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2]);
131534 double xleft2 = DCOORD(aCell[aLeft[iLeft]].aCoord[iDim*2+1]);
131535 double xright1 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2]);
131536 double xright2 = DCOORD(aCell[aRight[iRight]].aCoord[iDim*2+1]);
131537 if( (iLeft!=nLeft) && ((iRight==nRight)
131538 || (xleft1<xright1)
131539 || (xleft1==xright1 && xleft2<xright2)
131541 aIdx[iLeft+iRight] = aLeft[iLeft];
131542 iLeft++;
131543 }else{
131544 aIdx[iLeft+iRight] = aRight[iRight];
131545 iRight++;
131549 #if 0
131550 /* Check that the sort worked */
131552 int jj;
131553 for(jj=1; jj<nIdx; jj++){
131554 float xleft1 = aCell[aIdx[jj-1]].aCoord[iDim*2];
131555 float xleft2 = aCell[aIdx[jj-1]].aCoord[iDim*2+1];
131556 float xright1 = aCell[aIdx[jj]].aCoord[iDim*2];
131557 float xright2 = aCell[aIdx[jj]].aCoord[iDim*2+1];
131558 assert( xleft1<=xright1 && (xleft1<xright1 || xleft2<=xright2) );
131561 #endif
131565 #if VARIANT_RSTARTREE_SPLIT
131567 ** Implementation of the R*-tree variant of SplitNode from Beckman[1990].
131569 static int splitNodeStartree(
131570 Rtree *pRtree,
131571 RtreeCell *aCell,
131572 int nCell,
131573 RtreeNode *pLeft,
131574 RtreeNode *pRight,
131575 RtreeCell *pBboxLeft,
131576 RtreeCell *pBboxRight
131578 int **aaSorted;
131579 int *aSpare;
131580 int ii;
131582 int iBestDim = 0;
131583 int iBestSplit = 0;
131584 float fBestMargin = 0.0;
131586 int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int));
131588 aaSorted = (int **)sqlite3_malloc(nByte);
131589 if( !aaSorted ){
131590 return SQLITE_NOMEM;
131593 aSpare = &((int *)&aaSorted[pRtree->nDim])[pRtree->nDim*nCell];
131594 memset(aaSorted, 0, nByte);
131595 for(ii=0; ii<pRtree->nDim; ii++){
131596 int jj;
131597 aaSorted[ii] = &((int *)&aaSorted[pRtree->nDim])[ii*nCell];
131598 for(jj=0; jj<nCell; jj++){
131599 aaSorted[ii][jj] = jj;
131601 SortByDimension(pRtree, aaSorted[ii], nCell, ii, aCell, aSpare);
131604 for(ii=0; ii<pRtree->nDim; ii++){
131605 float margin = 0.0;
131606 float fBestOverlap = 0.0;
131607 float fBestArea = 0.0;
131608 int iBestLeft = 0;
131609 int nLeft;
131612 nLeft=RTREE_MINCELLS(pRtree);
131613 nLeft<=(nCell-RTREE_MINCELLS(pRtree));
131614 nLeft++
131616 RtreeCell left;
131617 RtreeCell right;
131618 int kk;
131619 float overlap;
131620 float area;
131622 memcpy(&left, &aCell[aaSorted[ii][0]], sizeof(RtreeCell));
131623 memcpy(&right, &aCell[aaSorted[ii][nCell-1]], sizeof(RtreeCell));
131624 for(kk=1; kk<(nCell-1); kk++){
131625 if( kk<nLeft ){
131626 cellUnion(pRtree, &left, &aCell[aaSorted[ii][kk]]);
131627 }else{
131628 cellUnion(pRtree, &right, &aCell[aaSorted[ii][kk]]);
131631 margin += cellMargin(pRtree, &left);
131632 margin += cellMargin(pRtree, &right);
131633 overlap = cellOverlap(pRtree, &left, &right, 1, -1);
131634 area = cellArea(pRtree, &left) + cellArea(pRtree, &right);
131635 if( (nLeft==RTREE_MINCELLS(pRtree))
131636 || (overlap<fBestOverlap)
131637 || (overlap==fBestOverlap && area<fBestArea)
131639 iBestLeft = nLeft;
131640 fBestOverlap = overlap;
131641 fBestArea = area;
131645 if( ii==0 || margin<fBestMargin ){
131646 iBestDim = ii;
131647 fBestMargin = margin;
131648 iBestSplit = iBestLeft;
131652 memcpy(pBboxLeft, &aCell[aaSorted[iBestDim][0]], sizeof(RtreeCell));
131653 memcpy(pBboxRight, &aCell[aaSorted[iBestDim][iBestSplit]], sizeof(RtreeCell));
131654 for(ii=0; ii<nCell; ii++){
131655 RtreeNode *pTarget = (ii<iBestSplit)?pLeft:pRight;
131656 RtreeCell *pBbox = (ii<iBestSplit)?pBboxLeft:pBboxRight;
131657 RtreeCell *pCell = &aCell[aaSorted[iBestDim][ii]];
131658 nodeInsertCell(pRtree, pTarget, pCell);
131659 cellUnion(pRtree, pBbox, pCell);
131662 sqlite3_free(aaSorted);
131663 return SQLITE_OK;
131665 #endif
131667 #if VARIANT_GUTTMAN_SPLIT
131669 ** Implementation of the regular R-tree SplitNode from Guttman[1984].
131671 static int splitNodeGuttman(
131672 Rtree *pRtree,
131673 RtreeCell *aCell,
131674 int nCell,
131675 RtreeNode *pLeft,
131676 RtreeNode *pRight,
131677 RtreeCell *pBboxLeft,
131678 RtreeCell *pBboxRight
131680 int iLeftSeed = 0;
131681 int iRightSeed = 1;
131682 int *aiUsed;
131683 int i;
131685 aiUsed = sqlite3_malloc(sizeof(int)*nCell);
131686 if( !aiUsed ){
131687 return SQLITE_NOMEM;
131689 memset(aiUsed, 0, sizeof(int)*nCell);
131691 PickSeeds(pRtree, aCell, nCell, &iLeftSeed, &iRightSeed);
131693 memcpy(pBboxLeft, &aCell[iLeftSeed], sizeof(RtreeCell));
131694 memcpy(pBboxRight, &aCell[iRightSeed], sizeof(RtreeCell));
131695 nodeInsertCell(pRtree, pLeft, &aCell[iLeftSeed]);
131696 nodeInsertCell(pRtree, pRight, &aCell[iRightSeed]);
131697 aiUsed[iLeftSeed] = 1;
131698 aiUsed[iRightSeed] = 1;
131700 for(i=nCell-2; i>0; i--){
131701 RtreeCell *pNext;
131702 pNext = PickNext(pRtree, aCell, nCell, pBboxLeft, pBboxRight, aiUsed);
131703 float diff =
131704 cellGrowth(pRtree, pBboxLeft, pNext) -
131705 cellGrowth(pRtree, pBboxRight, pNext)
131707 if( (RTREE_MINCELLS(pRtree)-NCELL(pRight)==i)
131708 || (diff>0.0 && (RTREE_MINCELLS(pRtree)-NCELL(pLeft)!=i))
131710 nodeInsertCell(pRtree, pRight, pNext);
131711 cellUnion(pRtree, pBboxRight, pNext);
131712 }else{
131713 nodeInsertCell(pRtree, pLeft, pNext);
131714 cellUnion(pRtree, pBboxLeft, pNext);
131718 sqlite3_free(aiUsed);
131719 return SQLITE_OK;
131721 #endif
131723 static int updateMapping(
131724 Rtree *pRtree,
131725 i64 iRowid,
131726 RtreeNode *pNode,
131727 int iHeight
131729 int (*xSetMapping)(Rtree *, sqlite3_int64, sqlite3_int64);
131730 xSetMapping = ((iHeight==0)?rowidWrite:parentWrite);
131731 if( iHeight>0 ){
131732 RtreeNode *pChild = nodeHashLookup(pRtree, iRowid);
131733 if( pChild ){
131734 nodeRelease(pRtree, pChild->pParent);
131735 nodeReference(pNode);
131736 pChild->pParent = pNode;
131739 return xSetMapping(pRtree, iRowid, pNode->iNode);
131742 static int SplitNode(
131743 Rtree *pRtree,
131744 RtreeNode *pNode,
131745 RtreeCell *pCell,
131746 int iHeight
131748 int i;
131749 int newCellIsRight = 0;
131751 int rc = SQLITE_OK;
131752 int nCell = NCELL(pNode);
131753 RtreeCell *aCell;
131754 int *aiUsed;
131756 RtreeNode *pLeft = 0;
131757 RtreeNode *pRight = 0;
131759 RtreeCell leftbbox;
131760 RtreeCell rightbbox;
131762 /* Allocate an array and populate it with a copy of pCell and
131763 ** all cells from node pLeft. Then zero the original node.
131765 aCell = sqlite3_malloc((sizeof(RtreeCell)+sizeof(int))*(nCell+1));
131766 if( !aCell ){
131767 rc = SQLITE_NOMEM;
131768 goto splitnode_out;
131770 aiUsed = (int *)&aCell[nCell+1];
131771 memset(aiUsed, 0, sizeof(int)*(nCell+1));
131772 for(i=0; i<nCell; i++){
131773 nodeGetCell(pRtree, pNode, i, &aCell[i]);
131775 nodeZero(pRtree, pNode);
131776 memcpy(&aCell[nCell], pCell, sizeof(RtreeCell));
131777 nCell++;
131779 if( pNode->iNode==1 ){
131780 pRight = nodeNew(pRtree, pNode);
131781 pLeft = nodeNew(pRtree, pNode);
131782 pRtree->iDepth++;
131783 pNode->isDirty = 1;
131784 writeInt16(pNode->zData, pRtree->iDepth);
131785 }else{
131786 pLeft = pNode;
131787 pRight = nodeNew(pRtree, pLeft->pParent);
131788 nodeReference(pLeft);
131791 if( !pLeft || !pRight ){
131792 rc = SQLITE_NOMEM;
131793 goto splitnode_out;
131796 memset(pLeft->zData, 0, pRtree->iNodeSize);
131797 memset(pRight->zData, 0, pRtree->iNodeSize);
131799 rc = AssignCells(pRtree, aCell, nCell, pLeft, pRight, &leftbbox, &rightbbox);
131800 if( rc!=SQLITE_OK ){
131801 goto splitnode_out;
131804 /* Ensure both child nodes have node numbers assigned to them by calling
131805 ** nodeWrite(). Node pRight always needs a node number, as it was created
131806 ** by nodeNew() above. But node pLeft sometimes already has a node number.
131807 ** In this case avoid the all to nodeWrite().
131809 if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight))
131810 || (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft)))
131812 goto splitnode_out;
131815 rightbbox.iRowid = pRight->iNode;
131816 leftbbox.iRowid = pLeft->iNode;
131818 if( pNode->iNode==1 ){
131819 rc = rtreeInsertCell(pRtree, pLeft->pParent, &leftbbox, iHeight+1);
131820 if( rc!=SQLITE_OK ){
131821 goto splitnode_out;
131823 }else{
131824 RtreeNode *pParent = pLeft->pParent;
131825 int iCell;
131826 rc = nodeParentIndex(pRtree, pLeft, &iCell);
131827 if( rc==SQLITE_OK ){
131828 nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell);
131829 rc = AdjustTree(pRtree, pParent, &leftbbox);
131831 if( rc!=SQLITE_OK ){
131832 goto splitnode_out;
131835 if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){
131836 goto splitnode_out;
131839 for(i=0; i<NCELL(pRight); i++){
131840 i64 iRowid = nodeGetRowid(pRtree, pRight, i);
131841 rc = updateMapping(pRtree, iRowid, pRight, iHeight);
131842 if( iRowid==pCell->iRowid ){
131843 newCellIsRight = 1;
131845 if( rc!=SQLITE_OK ){
131846 goto splitnode_out;
131849 if( pNode->iNode==1 ){
131850 for(i=0; i<NCELL(pLeft); i++){
131851 i64 iRowid = nodeGetRowid(pRtree, pLeft, i);
131852 rc = updateMapping(pRtree, iRowid, pLeft, iHeight);
131853 if( rc!=SQLITE_OK ){
131854 goto splitnode_out;
131857 }else if( newCellIsRight==0 ){
131858 rc = updateMapping(pRtree, pCell->iRowid, pLeft, iHeight);
131861 if( rc==SQLITE_OK ){
131862 rc = nodeRelease(pRtree, pRight);
131863 pRight = 0;
131865 if( rc==SQLITE_OK ){
131866 rc = nodeRelease(pRtree, pLeft);
131867 pLeft = 0;
131870 splitnode_out:
131871 nodeRelease(pRtree, pRight);
131872 nodeRelease(pRtree, pLeft);
131873 sqlite3_free(aCell);
131874 return rc;
131878 ** If node pLeaf is not the root of the r-tree and its pParent pointer is
131879 ** still NULL, load all ancestor nodes of pLeaf into memory and populate
131880 ** the pLeaf->pParent chain all the way up to the root node.
131882 ** This operation is required when a row is deleted (or updated - an update
131883 ** is implemented as a delete followed by an insert). SQLite provides the
131884 ** rowid of the row to delete, which can be used to find the leaf on which
131885 ** the entry resides (argument pLeaf). Once the leaf is located, this
131886 ** function is called to determine its ancestry.
131888 static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){
131889 int rc = SQLITE_OK;
131890 RtreeNode *pChild = pLeaf;
131891 while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){
131892 int rc2 = SQLITE_OK; /* sqlite3_reset() return code */
131893 sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode);
131894 rc = sqlite3_step(pRtree->pReadParent);
131895 if( rc==SQLITE_ROW ){
131896 RtreeNode *pTest; /* Used to test for reference loops */
131897 i64 iNode; /* Node number of parent node */
131899 /* Before setting pChild->pParent, test that we are not creating a
131900 ** loop of references (as we would if, say, pChild==pParent). We don't
131901 ** want to do this as it leads to a memory leak when trying to delete
131902 ** the referenced counted node structures.
131904 iNode = sqlite3_column_int64(pRtree->pReadParent, 0);
131905 for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent);
131906 if( !pTest ){
131907 rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent);
131910 rc = sqlite3_reset(pRtree->pReadParent);
131911 if( rc==SQLITE_OK ) rc = rc2;
131912 if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT_VTAB;
131913 pChild = pChild->pParent;
131915 return rc;
131918 static int deleteCell(Rtree *, RtreeNode *, int, int);
131920 static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
131921 int rc;
131922 int rc2;
131923 RtreeNode *pParent = 0;
131924 int iCell;
131926 assert( pNode->nRef==1 );
131928 /* Remove the entry in the parent cell. */
131929 rc = nodeParentIndex(pRtree, pNode, &iCell);
131930 if( rc==SQLITE_OK ){
131931 pParent = pNode->pParent;
131932 pNode->pParent = 0;
131933 rc = deleteCell(pRtree, pParent, iCell, iHeight+1);
131935 rc2 = nodeRelease(pRtree, pParent);
131936 if( rc==SQLITE_OK ){
131937 rc = rc2;
131939 if( rc!=SQLITE_OK ){
131940 return rc;
131943 /* Remove the xxx_node entry. */
131944 sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode);
131945 sqlite3_step(pRtree->pDeleteNode);
131946 if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteNode)) ){
131947 return rc;
131950 /* Remove the xxx_parent entry. */
131951 sqlite3_bind_int64(pRtree->pDeleteParent, 1, pNode->iNode);
131952 sqlite3_step(pRtree->pDeleteParent);
131953 if( SQLITE_OK!=(rc = sqlite3_reset(pRtree->pDeleteParent)) ){
131954 return rc;
131957 /* Remove the node from the in-memory hash table and link it into
131958 ** the Rtree.pDeleted list. Its contents will be re-inserted later on.
131960 nodeHashDelete(pRtree, pNode);
131961 pNode->iNode = iHeight;
131962 pNode->pNext = pRtree->pDeleted;
131963 pNode->nRef++;
131964 pRtree->pDeleted = pNode;
131966 return SQLITE_OK;
131969 static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
131970 RtreeNode *pParent = pNode->pParent;
131971 int rc = SQLITE_OK;
131972 if( pParent ){
131973 int ii;
131974 int nCell = NCELL(pNode);
131975 RtreeCell box; /* Bounding box for pNode */
131976 nodeGetCell(pRtree, pNode, 0, &box);
131977 for(ii=1; ii<nCell; ii++){
131978 RtreeCell cell;
131979 nodeGetCell(pRtree, pNode, ii, &cell);
131980 cellUnion(pRtree, &box, &cell);
131982 box.iRowid = pNode->iNode;
131983 rc = nodeParentIndex(pRtree, pNode, &ii);
131984 if( rc==SQLITE_OK ){
131985 nodeOverwriteCell(pRtree, pParent, &box, ii);
131986 rc = fixBoundingBox(pRtree, pParent);
131989 return rc;
131993 ** Delete the cell at index iCell of node pNode. After removing the
131994 ** cell, adjust the r-tree data structure if required.
131996 static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){
131997 RtreeNode *pParent;
131998 int rc;
132000 if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){
132001 return rc;
132004 /* Remove the cell from the node. This call just moves bytes around
132005 ** the in-memory node image, so it cannot fail.
132007 nodeDeleteCell(pRtree, pNode, iCell);
132009 /* If the node is not the tree root and now has less than the minimum
132010 ** number of cells, remove it from the tree. Otherwise, update the
132011 ** cell in the parent node so that it tightly contains the updated
132012 ** node.
132014 pParent = pNode->pParent;
132015 assert( pParent || pNode->iNode==1 );
132016 if( pParent ){
132017 if( NCELL(pNode)<RTREE_MINCELLS(pRtree) ){
132018 rc = removeNode(pRtree, pNode, iHeight);
132019 }else{
132020 rc = fixBoundingBox(pRtree, pNode);
132024 return rc;
132027 static int Reinsert(
132028 Rtree *pRtree,
132029 RtreeNode *pNode,
132030 RtreeCell *pCell,
132031 int iHeight
132033 int *aOrder;
132034 int *aSpare;
132035 RtreeCell *aCell;
132036 float *aDistance;
132037 int nCell;
132038 float aCenterCoord[RTREE_MAX_DIMENSIONS];
132039 int iDim;
132040 int ii;
132041 int rc = SQLITE_OK;
132043 memset(aCenterCoord, 0, sizeof(float)*RTREE_MAX_DIMENSIONS);
132045 nCell = NCELL(pNode)+1;
132047 /* Allocate the buffers used by this operation. The allocation is
132048 ** relinquished before this function returns.
132050 aCell = (RtreeCell *)sqlite3_malloc(nCell * (
132051 sizeof(RtreeCell) + /* aCell array */
132052 sizeof(int) + /* aOrder array */
132053 sizeof(int) + /* aSpare array */
132054 sizeof(float) /* aDistance array */
132056 if( !aCell ){
132057 return SQLITE_NOMEM;
132059 aOrder = (int *)&aCell[nCell];
132060 aSpare = (int *)&aOrder[nCell];
132061 aDistance = (float *)&aSpare[nCell];
132063 for(ii=0; ii<nCell; ii++){
132064 if( ii==(nCell-1) ){
132065 memcpy(&aCell[ii], pCell, sizeof(RtreeCell));
132066 }else{
132067 nodeGetCell(pRtree, pNode, ii, &aCell[ii]);
132069 aOrder[ii] = ii;
132070 for(iDim=0; iDim<pRtree->nDim; iDim++){
132071 aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2]);
132072 aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2+1]);
132075 for(iDim=0; iDim<pRtree->nDim; iDim++){
132076 aCenterCoord[iDim] = (float)(aCenterCoord[iDim]/((float)nCell*2.0));
132079 for(ii=0; ii<nCell; ii++){
132080 aDistance[ii] = 0.0;
132081 for(iDim=0; iDim<pRtree->nDim; iDim++){
132082 float coord = (float)(DCOORD(aCell[ii].aCoord[iDim*2+1]) -
132083 DCOORD(aCell[ii].aCoord[iDim*2]));
132084 aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]);
132088 SortByDistance(aOrder, nCell, aDistance, aSpare);
132089 nodeZero(pRtree, pNode);
132091 for(ii=0; rc==SQLITE_OK && ii<(nCell-(RTREE_MINCELLS(pRtree)+1)); ii++){
132092 RtreeCell *p = &aCell[aOrder[ii]];
132093 nodeInsertCell(pRtree, pNode, p);
132094 if( p->iRowid==pCell->iRowid ){
132095 if( iHeight==0 ){
132096 rc = rowidWrite(pRtree, p->iRowid, pNode->iNode);
132097 }else{
132098 rc = parentWrite(pRtree, p->iRowid, pNode->iNode);
132102 if( rc==SQLITE_OK ){
132103 rc = fixBoundingBox(pRtree, pNode);
132105 for(; rc==SQLITE_OK && ii<nCell; ii++){
132106 /* Find a node to store this cell in. pNode->iNode currently contains
132107 ** the height of the sub-tree headed by the cell.
132109 RtreeNode *pInsert;
132110 RtreeCell *p = &aCell[aOrder[ii]];
132111 rc = ChooseLeaf(pRtree, p, iHeight, &pInsert);
132112 if( rc==SQLITE_OK ){
132113 int rc2;
132114 rc = rtreeInsertCell(pRtree, pInsert, p, iHeight);
132115 rc2 = nodeRelease(pRtree, pInsert);
132116 if( rc==SQLITE_OK ){
132117 rc = rc2;
132122 sqlite3_free(aCell);
132123 return rc;
132127 ** Insert cell pCell into node pNode. Node pNode is the head of a
132128 ** subtree iHeight high (leaf nodes have iHeight==0).
132130 static int rtreeInsertCell(
132131 Rtree *pRtree,
132132 RtreeNode *pNode,
132133 RtreeCell *pCell,
132134 int iHeight
132136 int rc = SQLITE_OK;
132137 if( iHeight>0 ){
132138 RtreeNode *pChild = nodeHashLookup(pRtree, pCell->iRowid);
132139 if( pChild ){
132140 nodeRelease(pRtree, pChild->pParent);
132141 nodeReference(pNode);
132142 pChild->pParent = pNode;
132145 if( nodeInsertCell(pRtree, pNode, pCell) ){
132146 #if VARIANT_RSTARTREE_REINSERT
132147 if( iHeight<=pRtree->iReinsertHeight || pNode->iNode==1){
132148 rc = SplitNode(pRtree, pNode, pCell, iHeight);
132149 }else{
132150 pRtree->iReinsertHeight = iHeight;
132151 rc = Reinsert(pRtree, pNode, pCell, iHeight);
132153 #else
132154 rc = SplitNode(pRtree, pNode, pCell, iHeight);
132155 #endif
132156 }else{
132157 rc = AdjustTree(pRtree, pNode, pCell);
132158 if( rc==SQLITE_OK ){
132159 if( iHeight==0 ){
132160 rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode);
132161 }else{
132162 rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode);
132166 return rc;
132169 static int reinsertNodeContent(Rtree *pRtree, RtreeNode *pNode){
132170 int ii;
132171 int rc = SQLITE_OK;
132172 int nCell = NCELL(pNode);
132174 for(ii=0; rc==SQLITE_OK && ii<nCell; ii++){
132175 RtreeNode *pInsert;
132176 RtreeCell cell;
132177 nodeGetCell(pRtree, pNode, ii, &cell);
132179 /* Find a node to store this cell in. pNode->iNode currently contains
132180 ** the height of the sub-tree headed by the cell.
132182 rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert);
132183 if( rc==SQLITE_OK ){
132184 int rc2;
132185 rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode);
132186 rc2 = nodeRelease(pRtree, pInsert);
132187 if( rc==SQLITE_OK ){
132188 rc = rc2;
132192 return rc;
132196 ** Select a currently unused rowid for a new r-tree record.
132198 static int newRowid(Rtree *pRtree, i64 *piRowid){
132199 int rc;
132200 sqlite3_bind_null(pRtree->pWriteRowid, 1);
132201 sqlite3_bind_null(pRtree->pWriteRowid, 2);
132202 sqlite3_step(pRtree->pWriteRowid);
132203 rc = sqlite3_reset(pRtree->pWriteRowid);
132204 *piRowid = sqlite3_last_insert_rowid(pRtree->db);
132205 return rc;
132209 ** Remove the entry with rowid=iDelete from the r-tree structure.
132211 static int rtreeDeleteRowid(Rtree *pRtree, sqlite3_int64 iDelete){
132212 int rc; /* Return code */
132213 RtreeNode *pLeaf; /* Leaf node containing record iDelete */
132214 int iCell; /* Index of iDelete cell in pLeaf */
132215 RtreeNode *pRoot; /* Root node of rtree structure */
132218 /* Obtain a reference to the root node to initialise Rtree.iDepth */
132219 rc = nodeAcquire(pRtree, 1, 0, &pRoot);
132221 /* Obtain a reference to the leaf node that contains the entry
132222 ** about to be deleted.
132224 if( rc==SQLITE_OK ){
132225 rc = findLeafNode(pRtree, iDelete, &pLeaf);
132228 /* Delete the cell in question from the leaf node. */
132229 if( rc==SQLITE_OK ){
132230 int rc2;
132231 rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell);
132232 if( rc==SQLITE_OK ){
132233 rc = deleteCell(pRtree, pLeaf, iCell, 0);
132235 rc2 = nodeRelease(pRtree, pLeaf);
132236 if( rc==SQLITE_OK ){
132237 rc = rc2;
132241 /* Delete the corresponding entry in the <rtree>_rowid table. */
132242 if( rc==SQLITE_OK ){
132243 sqlite3_bind_int64(pRtree->pDeleteRowid, 1, iDelete);
132244 sqlite3_step(pRtree->pDeleteRowid);
132245 rc = sqlite3_reset(pRtree->pDeleteRowid);
132248 /* Check if the root node now has exactly one child. If so, remove
132249 ** it, schedule the contents of the child for reinsertion and
132250 ** reduce the tree height by one.
132252 ** This is equivalent to copying the contents of the child into
132253 ** the root node (the operation that Gutman's paper says to perform
132254 ** in this scenario).
132256 if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){
132257 int rc2;
132258 RtreeNode *pChild;
132259 i64 iChild = nodeGetRowid(pRtree, pRoot, 0);
132260 rc = nodeAcquire(pRtree, iChild, pRoot, &pChild);
132261 if( rc==SQLITE_OK ){
132262 rc = removeNode(pRtree, pChild, pRtree->iDepth-1);
132264 rc2 = nodeRelease(pRtree, pChild);
132265 if( rc==SQLITE_OK ) rc = rc2;
132266 if( rc==SQLITE_OK ){
132267 pRtree->iDepth--;
132268 writeInt16(pRoot->zData, pRtree->iDepth);
132269 pRoot->isDirty = 1;
132273 /* Re-insert the contents of any underfull nodes removed from the tree. */
132274 for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){
132275 if( rc==SQLITE_OK ){
132276 rc = reinsertNodeContent(pRtree, pLeaf);
132278 pRtree->pDeleted = pLeaf->pNext;
132279 sqlite3_free(pLeaf);
132282 /* Release the reference to the root node. */
132283 if( rc==SQLITE_OK ){
132284 rc = nodeRelease(pRtree, pRoot);
132285 }else{
132286 nodeRelease(pRtree, pRoot);
132289 return rc;
132293 ** The xUpdate method for rtree module virtual tables.
132295 static int rtreeUpdate(
132296 sqlite3_vtab *pVtab,
132297 int nData,
132298 sqlite3_value **azData,
132299 sqlite_int64 *pRowid
132301 Rtree *pRtree = (Rtree *)pVtab;
132302 int rc = SQLITE_OK;
132303 RtreeCell cell; /* New cell to insert if nData>1 */
132304 int bHaveRowid = 0; /* Set to 1 after new rowid is determined */
132306 rtreeReference(pRtree);
132307 assert(nData>=1);
132309 /* Constraint handling. A write operation on an r-tree table may return
132310 ** SQLITE_CONSTRAINT for two reasons:
132312 ** 1. A duplicate rowid value, or
132313 ** 2. The supplied data violates the "x2>=x1" constraint.
132315 ** In the first case, if the conflict-handling mode is REPLACE, then
132316 ** the conflicting row can be removed before proceeding. In the second
132317 ** case, SQLITE_CONSTRAINT must be returned regardless of the
132318 ** conflict-handling mode specified by the user.
132320 if( nData>1 ){
132321 int ii;
132323 /* Populate the cell.aCoord[] array. The first coordinate is azData[3]. */
132324 assert( nData==(pRtree->nDim*2 + 3) );
132325 if( pRtree->eCoordType==RTREE_COORD_REAL32 ){
132326 for(ii=0; ii<(pRtree->nDim*2); ii+=2){
132327 cell.aCoord[ii].f = (float)sqlite3_value_double(azData[ii+3]);
132328 cell.aCoord[ii+1].f = (float)sqlite3_value_double(azData[ii+4]);
132329 if( cell.aCoord[ii].f>cell.aCoord[ii+1].f ){
132330 rc = SQLITE_CONSTRAINT;
132331 goto constraint;
132334 }else{
132335 for(ii=0; ii<(pRtree->nDim*2); ii+=2){
132336 cell.aCoord[ii].i = sqlite3_value_int(azData[ii+3]);
132337 cell.aCoord[ii+1].i = sqlite3_value_int(azData[ii+4]);
132338 if( cell.aCoord[ii].i>cell.aCoord[ii+1].i ){
132339 rc = SQLITE_CONSTRAINT;
132340 goto constraint;
132345 /* If a rowid value was supplied, check if it is already present in
132346 ** the table. If so, the constraint has failed. */
132347 if( sqlite3_value_type(azData[2])!=SQLITE_NULL ){
132348 cell.iRowid = sqlite3_value_int64(azData[2]);
132349 if( sqlite3_value_type(azData[0])==SQLITE_NULL
132350 || sqlite3_value_int64(azData[0])!=cell.iRowid
132352 int steprc;
132353 sqlite3_bind_int64(pRtree->pReadRowid, 1, cell.iRowid);
132354 steprc = sqlite3_step(pRtree->pReadRowid);
132355 rc = sqlite3_reset(pRtree->pReadRowid);
132356 if( SQLITE_ROW==steprc ){
132357 if( sqlite3_vtab_on_conflict(pRtree->db)==SQLITE_REPLACE ){
132358 rc = rtreeDeleteRowid(pRtree, cell.iRowid);
132359 }else{
132360 rc = SQLITE_CONSTRAINT;
132361 goto constraint;
132365 bHaveRowid = 1;
132369 /* If azData[0] is not an SQL NULL value, it is the rowid of a
132370 ** record to delete from the r-tree table. The following block does
132371 ** just that.
132373 if( sqlite3_value_type(azData[0])!=SQLITE_NULL ){
132374 rc = rtreeDeleteRowid(pRtree, sqlite3_value_int64(azData[0]));
132377 /* If the azData[] array contains more than one element, elements
132378 ** (azData[2]..azData[argc-1]) contain a new record to insert into
132379 ** the r-tree structure.
132381 if( rc==SQLITE_OK && nData>1 ){
132382 /* Insert the new record into the r-tree */
132383 RtreeNode *pLeaf;
132385 /* Figure out the rowid of the new row. */
132386 if( bHaveRowid==0 ){
132387 rc = newRowid(pRtree, &cell.iRowid);
132389 *pRowid = cell.iRowid;
132391 if( rc==SQLITE_OK ){
132392 rc = ChooseLeaf(pRtree, &cell, 0, &pLeaf);
132394 if( rc==SQLITE_OK ){
132395 int rc2;
132396 pRtree->iReinsertHeight = -1;
132397 rc = rtreeInsertCell(pRtree, pLeaf, &cell, 0);
132398 rc2 = nodeRelease(pRtree, pLeaf);
132399 if( rc==SQLITE_OK ){
132400 rc = rc2;
132405 constraint:
132406 rtreeRelease(pRtree);
132407 return rc;
132411 ** The xRename method for rtree module virtual tables.
132413 static int rtreeRename(sqlite3_vtab *pVtab, const char *zNewName){
132414 Rtree *pRtree = (Rtree *)pVtab;
132415 int rc = SQLITE_NOMEM;
132416 char *zSql = sqlite3_mprintf(
132417 "ALTER TABLE %Q.'%q_node' RENAME TO \"%w_node\";"
132418 "ALTER TABLE %Q.'%q_parent' RENAME TO \"%w_parent\";"
132419 "ALTER TABLE %Q.'%q_rowid' RENAME TO \"%w_rowid\";"
132420 , pRtree->zDb, pRtree->zName, zNewName
132421 , pRtree->zDb, pRtree->zName, zNewName
132422 , pRtree->zDb, pRtree->zName, zNewName
132424 if( zSql ){
132425 rc = sqlite3_exec(pRtree->db, zSql, 0, 0, 0);
132426 sqlite3_free(zSql);
132428 return rc;
132431 static sqlite3_module rtreeModule = {
132432 0, /* iVersion */
132433 rtreeCreate, /* xCreate - create a table */
132434 rtreeConnect, /* xConnect - connect to an existing table */
132435 rtreeBestIndex, /* xBestIndex - Determine search strategy */
132436 rtreeDisconnect, /* xDisconnect - Disconnect from a table */
132437 rtreeDestroy, /* xDestroy - Drop a table */
132438 rtreeOpen, /* xOpen - open a cursor */
132439 rtreeClose, /* xClose - close a cursor */
132440 rtreeFilter, /* xFilter - configure scan constraints */
132441 rtreeNext, /* xNext - advance a cursor */
132442 rtreeEof, /* xEof */
132443 rtreeColumn, /* xColumn - read data */
132444 rtreeRowid, /* xRowid - read data */
132445 rtreeUpdate, /* xUpdate - write data */
132446 0, /* xBegin - begin transaction */
132447 0, /* xSync - sync transaction */
132448 0, /* xCommit - commit transaction */
132449 0, /* xRollback - rollback transaction */
132450 0, /* xFindFunction - function overloading */
132451 rtreeRename, /* xRename - rename the table */
132452 0, /* xSavepoint */
132453 0, /* xRelease */
132454 0 /* xRollbackTo */
132457 static int rtreeSqlInit(
132458 Rtree *pRtree,
132459 sqlite3 *db,
132460 const char *zDb,
132461 const char *zPrefix,
132462 int isCreate
132464 int rc = SQLITE_OK;
132466 #define N_STATEMENT 9
132467 static const char *azSql[N_STATEMENT] = {
132468 /* Read and write the xxx_node table */
132469 "SELECT data FROM '%q'.'%q_node' WHERE nodeno = :1",
132470 "INSERT OR REPLACE INTO '%q'.'%q_node' VALUES(:1, :2)",
132471 "DELETE FROM '%q'.'%q_node' WHERE nodeno = :1",
132473 /* Read and write the xxx_rowid table */
132474 "SELECT nodeno FROM '%q'.'%q_rowid' WHERE rowid = :1",
132475 "INSERT OR REPLACE INTO '%q'.'%q_rowid' VALUES(:1, :2)",
132476 "DELETE FROM '%q'.'%q_rowid' WHERE rowid = :1",
132478 /* Read and write the xxx_parent table */
132479 "SELECT parentnode FROM '%q'.'%q_parent' WHERE nodeno = :1",
132480 "INSERT OR REPLACE INTO '%q'.'%q_parent' VALUES(:1, :2)",
132481 "DELETE FROM '%q'.'%q_parent' WHERE nodeno = :1"
132483 sqlite3_stmt **appStmt[N_STATEMENT];
132484 int i;
132486 pRtree->db = db;
132488 if( isCreate ){
132489 char *zCreate = sqlite3_mprintf(
132490 "CREATE TABLE \"%w\".\"%w_node\"(nodeno INTEGER PRIMARY KEY, data BLOB);"
132491 "CREATE TABLE \"%w\".\"%w_rowid\"(rowid INTEGER PRIMARY KEY, nodeno INTEGER);"
132492 "CREATE TABLE \"%w\".\"%w_parent\"(nodeno INTEGER PRIMARY KEY, parentnode INTEGER);"
132493 "INSERT INTO '%q'.'%q_node' VALUES(1, zeroblob(%d))",
132494 zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, zDb, zPrefix, pRtree->iNodeSize
132496 if( !zCreate ){
132497 return SQLITE_NOMEM;
132499 rc = sqlite3_exec(db, zCreate, 0, 0, 0);
132500 sqlite3_free(zCreate);
132501 if( rc!=SQLITE_OK ){
132502 return rc;
132506 appStmt[0] = &pRtree->pReadNode;
132507 appStmt[1] = &pRtree->pWriteNode;
132508 appStmt[2] = &pRtree->pDeleteNode;
132509 appStmt[3] = &pRtree->pReadRowid;
132510 appStmt[4] = &pRtree->pWriteRowid;
132511 appStmt[5] = &pRtree->pDeleteRowid;
132512 appStmt[6] = &pRtree->pReadParent;
132513 appStmt[7] = &pRtree->pWriteParent;
132514 appStmt[8] = &pRtree->pDeleteParent;
132516 for(i=0; i<N_STATEMENT && rc==SQLITE_OK; i++){
132517 char *zSql = sqlite3_mprintf(azSql[i], zDb, zPrefix);
132518 if( zSql ){
132519 rc = sqlite3_prepare_v2(db, zSql, -1, appStmt[i], 0);
132520 }else{
132521 rc = SQLITE_NOMEM;
132523 sqlite3_free(zSql);
132526 return rc;
132530 ** The second argument to this function contains the text of an SQL statement
132531 ** that returns a single integer value. The statement is compiled and executed
132532 ** using database connection db. If successful, the integer value returned
132533 ** is written to *piVal and SQLITE_OK returned. Otherwise, an SQLite error
132534 ** code is returned and the value of *piVal after returning is not defined.
132536 static int getIntFromStmt(sqlite3 *db, const char *zSql, int *piVal){
132537 int rc = SQLITE_NOMEM;
132538 if( zSql ){
132539 sqlite3_stmt *pStmt = 0;
132540 rc = sqlite3_prepare_v2(db, zSql, -1, &pStmt, 0);
132541 if( rc==SQLITE_OK ){
132542 if( SQLITE_ROW==sqlite3_step(pStmt) ){
132543 *piVal = sqlite3_column_int(pStmt, 0);
132545 rc = sqlite3_finalize(pStmt);
132548 return rc;
132552 ** This function is called from within the xConnect() or xCreate() method to
132553 ** determine the node-size used by the rtree table being created or connected
132554 ** to. If successful, pRtree->iNodeSize is populated and SQLITE_OK returned.
132555 ** Otherwise, an SQLite error code is returned.
132557 ** If this function is being called as part of an xConnect(), then the rtree
132558 ** table already exists. In this case the node-size is determined by inspecting
132559 ** the root node of the tree.
132561 ** Otherwise, for an xCreate(), use 64 bytes less than the database page-size.
132562 ** This ensures that each node is stored on a single database page. If the
132563 ** database page-size is so large that more than RTREE_MAXCELLS entries
132564 ** would fit in a single node, use a smaller node-size.
132566 static int getNodeSize(
132567 sqlite3 *db, /* Database handle */
132568 Rtree *pRtree, /* Rtree handle */
132569 int isCreate /* True for xCreate, false for xConnect */
132571 int rc;
132572 char *zSql;
132573 if( isCreate ){
132574 int iPageSize = 0;
132575 zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb);
132576 rc = getIntFromStmt(db, zSql, &iPageSize);
132577 if( rc==SQLITE_OK ){
132578 pRtree->iNodeSize = iPageSize-64;
132579 if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)<pRtree->iNodeSize ){
132580 pRtree->iNodeSize = 4+pRtree->nBytesPerCell*RTREE_MAXCELLS;
132583 }else{
132584 zSql = sqlite3_mprintf(
132585 "SELECT length(data) FROM '%q'.'%q_node' WHERE nodeno = 1",
132586 pRtree->zDb, pRtree->zName
132588 rc = getIntFromStmt(db, zSql, &pRtree->iNodeSize);
132591 sqlite3_free(zSql);
132592 return rc;
132596 ** This function is the implementation of both the xConnect and xCreate
132597 ** methods of the r-tree virtual table.
132599 ** argv[0] -> module name
132600 ** argv[1] -> database name
132601 ** argv[2] -> table name
132602 ** argv[...] -> column names...
132604 static int rtreeInit(
132605 sqlite3 *db, /* Database connection */
132606 void *pAux, /* One of the RTREE_COORD_* constants */
132607 int argc, const char *const*argv, /* Parameters to CREATE TABLE statement */
132608 sqlite3_vtab **ppVtab, /* OUT: New virtual table */
132609 char **pzErr, /* OUT: Error message, if any */
132610 int isCreate /* True for xCreate, false for xConnect */
132612 int rc = SQLITE_OK;
132613 Rtree *pRtree;
132614 int nDb; /* Length of string argv[1] */
132615 int nName; /* Length of string argv[2] */
132616 int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32);
132618 const char *aErrMsg[] = {
132619 0, /* 0 */
132620 "Wrong number of columns for an rtree table", /* 1 */
132621 "Too few columns for an rtree table", /* 2 */
132622 "Too many columns for an rtree table" /* 3 */
132625 int iErr = (argc<6) ? 2 : argc>(RTREE_MAX_DIMENSIONS*2+4) ? 3 : argc%2;
132626 if( aErrMsg[iErr] ){
132627 *pzErr = sqlite3_mprintf("%s", aErrMsg[iErr]);
132628 return SQLITE_ERROR;
132631 sqlite3_vtab_config(db, SQLITE_VTAB_CONSTRAINT_SUPPORT, 1);
132633 /* Allocate the sqlite3_vtab structure */
132634 nDb = strlen(argv[1]);
132635 nName = strlen(argv[2]);
132636 pRtree = (Rtree *)sqlite3_malloc(sizeof(Rtree)+nDb+nName+2);
132637 if( !pRtree ){
132638 return SQLITE_NOMEM;
132640 memset(pRtree, 0, sizeof(Rtree)+nDb+nName+2);
132641 pRtree->nBusy = 1;
132642 pRtree->base.pModule = &rtreeModule;
132643 pRtree->zDb = (char *)&pRtree[1];
132644 pRtree->zName = &pRtree->zDb[nDb+1];
132645 pRtree->nDim = (argc-4)/2;
132646 pRtree->nBytesPerCell = 8 + pRtree->nDim*4*2;
132647 pRtree->eCoordType = eCoordType;
132648 memcpy(pRtree->zDb, argv[1], nDb);
132649 memcpy(pRtree->zName, argv[2], nName);
132651 /* Figure out the node size to use. */
132652 rc = getNodeSize(db, pRtree, isCreate);
132654 /* Create/Connect to the underlying relational database schema. If
132655 ** that is successful, call sqlite3_declare_vtab() to configure
132656 ** the r-tree table schema.
132658 if( rc==SQLITE_OK ){
132659 if( (rc = rtreeSqlInit(pRtree, db, argv[1], argv[2], isCreate)) ){
132660 *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
132661 }else{
132662 char *zSql = sqlite3_mprintf("CREATE TABLE x(%s", argv[3]);
132663 char *zTmp;
132664 int ii;
132665 for(ii=4; zSql && ii<argc; ii++){
132666 zTmp = zSql;
132667 zSql = sqlite3_mprintf("%s, %s", zTmp, argv[ii]);
132668 sqlite3_free(zTmp);
132670 if( zSql ){
132671 zTmp = zSql;
132672 zSql = sqlite3_mprintf("%s);", zTmp);
132673 sqlite3_free(zTmp);
132675 if( !zSql ){
132676 rc = SQLITE_NOMEM;
132677 }else if( SQLITE_OK!=(rc = sqlite3_declare_vtab(db, zSql)) ){
132678 *pzErr = sqlite3_mprintf("%s", sqlite3_errmsg(db));
132680 sqlite3_free(zSql);
132684 if( rc==SQLITE_OK ){
132685 *ppVtab = (sqlite3_vtab *)pRtree;
132686 }else{
132687 rtreeRelease(pRtree);
132689 return rc;
132694 ** Implementation of a scalar function that decodes r-tree nodes to
132695 ** human readable strings. This can be used for debugging and analysis.
132697 ** The scalar function takes two arguments, a blob of data containing
132698 ** an r-tree node, and the number of dimensions the r-tree indexes.
132699 ** For a two-dimensional r-tree structure called "rt", to deserialize
132700 ** all nodes, a statement like:
132702 ** SELECT rtreenode(2, data) FROM rt_node;
132704 ** The human readable string takes the form of a Tcl list with one
132705 ** entry for each cell in the r-tree node. Each entry is itself a
132706 ** list, containing the 8-byte rowid/pageno followed by the
132707 ** <num-dimension>*2 coordinates.
132709 static void rtreenode(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
132710 char *zText = 0;
132711 RtreeNode node;
132712 Rtree tree;
132713 int ii;
132715 UNUSED_PARAMETER(nArg);
132716 memset(&node, 0, sizeof(RtreeNode));
132717 memset(&tree, 0, sizeof(Rtree));
132718 tree.nDim = sqlite3_value_int(apArg[0]);
132719 tree.nBytesPerCell = 8 + 8 * tree.nDim;
132720 node.zData = (u8 *)sqlite3_value_blob(apArg[1]);
132722 for(ii=0; ii<NCELL(&node); ii++){
132723 char zCell[512];
132724 int nCell = 0;
132725 RtreeCell cell;
132726 int jj;
132728 nodeGetCell(&tree, &node, ii, &cell);
132729 sqlite3_snprintf(512-nCell,&zCell[nCell],"%lld", cell.iRowid);
132730 nCell = strlen(zCell);
132731 for(jj=0; jj<tree.nDim*2; jj++){
132732 sqlite3_snprintf(512-nCell,&zCell[nCell]," %f",(double)cell.aCoord[jj].f);
132733 nCell = strlen(zCell);
132736 if( zText ){
132737 char *zTextNew = sqlite3_mprintf("%s {%s}", zText, zCell);
132738 sqlite3_free(zText);
132739 zText = zTextNew;
132740 }else{
132741 zText = sqlite3_mprintf("{%s}", zCell);
132745 sqlite3_result_text(ctx, zText, -1, sqlite3_free);
132748 static void rtreedepth(sqlite3_context *ctx, int nArg, sqlite3_value **apArg){
132749 UNUSED_PARAMETER(nArg);
132750 if( sqlite3_value_type(apArg[0])!=SQLITE_BLOB
132751 || sqlite3_value_bytes(apArg[0])<2
132753 sqlite3_result_error(ctx, "Invalid argument to rtreedepth()", -1);
132754 }else{
132755 u8 *zBlob = (u8 *)sqlite3_value_blob(apArg[0]);
132756 sqlite3_result_int(ctx, readInt16(zBlob));
132761 ** Register the r-tree module with database handle db. This creates the
132762 ** virtual table module "rtree" and the debugging/analysis scalar
132763 ** function "rtreenode".
132765 SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){
132766 const int utf8 = SQLITE_UTF8;
132767 int rc;
132769 rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
132770 if( rc==SQLITE_OK ){
132771 rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
132773 if( rc==SQLITE_OK ){
132774 void *c = (void *)RTREE_COORD_REAL32;
132775 rc = sqlite3_create_module_v2(db, "rtree", &rtreeModule, c, 0);
132777 if( rc==SQLITE_OK ){
132778 void *c = (void *)RTREE_COORD_INT32;
132779 rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0);
132782 return rc;
132786 ** A version of sqlite3_free() that can be used as a callback. This is used
132787 ** in two places - as the destructor for the blob value returned by the
132788 ** invocation of a geometry function, and as the destructor for the geometry
132789 ** functions themselves.
132791 static void doSqlite3Free(void *p){
132792 sqlite3_free(p);
132796 ** Each call to sqlite3_rtree_geometry_callback() creates an ordinary SQLite
132797 ** scalar user function. This C function is the callback used for all such
132798 ** registered SQL functions.
132800 ** The scalar user functions return a blob that is interpreted by r-tree
132801 ** table MATCH operators.
132803 static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){
132804 RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx);
132805 RtreeMatchArg *pBlob;
132806 int nBlob;
132808 nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(double);
132809 pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob);
132810 if( !pBlob ){
132811 sqlite3_result_error_nomem(ctx);
132812 }else{
132813 int i;
132814 pBlob->magic = RTREE_GEOMETRY_MAGIC;
132815 pBlob->xGeom = pGeomCtx->xGeom;
132816 pBlob->pContext = pGeomCtx->pContext;
132817 pBlob->nParam = nArg;
132818 for(i=0; i<nArg; i++){
132819 pBlob->aParam[i] = sqlite3_value_double(aArg[i]);
132821 sqlite3_result_blob(ctx, pBlob, nBlob, doSqlite3Free);
132826 ** Register a new geometry function for use with the r-tree MATCH operator.
132828 SQLITE_API int sqlite3_rtree_geometry_callback(
132829 sqlite3 *db,
132830 const char *zGeom,
132831 int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *),
132832 void *pContext
132834 RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */
132836 /* Allocate and populate the context object. */
132837 pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback));
132838 if( !pGeomCtx ) return SQLITE_NOMEM;
132839 pGeomCtx->xGeom = xGeom;
132840 pGeomCtx->pContext = pContext;
132842 /* Create the new user-function. Register a destructor function to delete
132843 ** the context object when it is no longer required. */
132844 return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY,
132845 (void *)pGeomCtx, geomCallback, 0, 0, doSqlite3Free
132849 #if !SQLITE_CORE
132850 SQLITE_API int sqlite3_extension_init(
132851 sqlite3 *db,
132852 char **pzErrMsg,
132853 const sqlite3_api_routines *pApi
132855 SQLITE_EXTENSION_INIT2(pApi)
132856 return sqlite3RtreeInit(db);
132858 #endif
132860 #endif
132862 /************** End of rtree.c ***********************************************/
132863 /************** Begin file icu.c *********************************************/
132865 ** 2007 May 6
132867 ** The author disclaims copyright to this source code. In place of
132868 ** a legal notice, here is a blessing:
132870 ** May you do good and not evil.
132871 ** May you find forgiveness for yourself and forgive others.
132872 ** May you share freely, never taking more than you give.
132874 *************************************************************************
132875 ** $Id: sqlite3.c,v 1.8 2013/02/14 21:07:25 martin Exp $
132877 ** This file implements an integration between the ICU library
132878 ** ("International Components for Unicode", an open-source library
132879 ** for handling unicode data) and SQLite. The integration uses
132880 ** ICU to provide the following to SQLite:
132882 ** * An implementation of the SQL regexp() function (and hence REGEXP
132883 ** operator) using the ICU uregex_XX() APIs.
132885 ** * Implementations of the SQL scalar upper() and lower() functions
132886 ** for case mapping.
132888 ** * Integration of ICU and SQLite collation seqences.
132890 ** * An implementation of the LIKE operator that uses ICU to
132891 ** provide case-independent matching.
132894 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_ICU)
132896 /* Include ICU headers */
132897 #include <unicode/utypes.h>
132898 #include <unicode/uregex.h>
132899 #include <unicode/ustring.h>
132900 #include <unicode/ucol.h>
132902 /* #include <assert.h> */
132904 #ifndef SQLITE_CORE
132905 SQLITE_EXTENSION_INIT1
132906 #else
132907 #endif
132910 ** Maximum length (in bytes) of the pattern in a LIKE or GLOB
132911 ** operator.
132913 #ifndef SQLITE_MAX_LIKE_PATTERN_LENGTH
132914 # define SQLITE_MAX_LIKE_PATTERN_LENGTH 50000
132915 #endif
132918 ** Version of sqlite3_free() that is always a function, never a macro.
132920 static void xFree(void *p){
132921 sqlite3_free(p);
132925 ** Compare two UTF-8 strings for equality where the first string is
132926 ** a "LIKE" expression. Return true (1) if they are the same and
132927 ** false (0) if they are different.
132929 static int icuLikeCompare(
132930 const uint8_t *zPattern, /* LIKE pattern */
132931 const uint8_t *zString, /* The UTF-8 string to compare against */
132932 const UChar32 uEsc /* The escape character */
132934 static const int MATCH_ONE = (UChar32)'_';
132935 static const int MATCH_ALL = (UChar32)'%';
132937 int iPattern = 0; /* Current byte index in zPattern */
132938 int iString = 0; /* Current byte index in zString */
132940 int prevEscape = 0; /* True if the previous character was uEsc */
132942 while( zPattern[iPattern]!=0 ){
132944 /* Read (and consume) the next character from the input pattern. */
132945 UChar32 uPattern;
132946 U8_NEXT_UNSAFE(zPattern, iPattern, uPattern);
132947 assert(uPattern!=0);
132949 /* There are now 4 possibilities:
132951 ** 1. uPattern is an unescaped match-all character "%",
132952 ** 2. uPattern is an unescaped match-one character "_",
132953 ** 3. uPattern is an unescaped escape character, or
132954 ** 4. uPattern is to be handled as an ordinary character
132956 if( !prevEscape && uPattern==MATCH_ALL ){
132957 /* Case 1. */
132958 uint8_t c;
132960 /* Skip any MATCH_ALL or MATCH_ONE characters that follow a
132961 ** MATCH_ALL. For each MATCH_ONE, skip one character in the
132962 ** test string.
132964 while( (c=zPattern[iPattern]) == MATCH_ALL || c == MATCH_ONE ){
132965 if( c==MATCH_ONE ){
132966 if( zString[iString]==0 ) return 0;
132967 U8_FWD_1_UNSAFE(zString, iString);
132969 iPattern++;
132972 if( zPattern[iPattern]==0 ) return 1;
132974 while( zString[iString] ){
132975 if( icuLikeCompare(&zPattern[iPattern], &zString[iString], uEsc) ){
132976 return 1;
132978 U8_FWD_1_UNSAFE(zString, iString);
132980 return 0;
132982 }else if( !prevEscape && uPattern==MATCH_ONE ){
132983 /* Case 2. */
132984 if( zString[iString]==0 ) return 0;
132985 U8_FWD_1_UNSAFE(zString, iString);
132987 }else if( !prevEscape && uPattern==uEsc){
132988 /* Case 3. */
132989 prevEscape = 1;
132991 }else{
132992 /* Case 4. */
132993 UChar32 uString;
132994 U8_NEXT_UNSAFE(zString, iString, uString);
132995 uString = u_foldCase(uString, U_FOLD_CASE_DEFAULT);
132996 uPattern = u_foldCase(uPattern, U_FOLD_CASE_DEFAULT);
132997 if( uString!=uPattern ){
132998 return 0;
133000 prevEscape = 0;
133004 return zString[iString]==0;
133008 ** Implementation of the like() SQL function. This function implements
133009 ** the build-in LIKE operator. The first argument to the function is the
133010 ** pattern and the second argument is the string. So, the SQL statements:
133012 ** A LIKE B
133014 ** is implemented as like(B, A). If there is an escape character E,
133016 ** A LIKE B ESCAPE E
133018 ** is mapped to like(B, A, E).
133020 static void icuLikeFunc(
133021 sqlite3_context *context,
133022 int argc,
133023 sqlite3_value **argv
133025 const unsigned char *zA = sqlite3_value_text(argv[0]);
133026 const unsigned char *zB = sqlite3_value_text(argv[1]);
133027 UChar32 uEsc = 0;
133029 /* Limit the length of the LIKE or GLOB pattern to avoid problems
133030 ** of deep recursion and N*N behavior in patternCompare().
133032 if( sqlite3_value_bytes(argv[0])>SQLITE_MAX_LIKE_PATTERN_LENGTH ){
133033 sqlite3_result_error(context, "LIKE or GLOB pattern too complex", -1);
133034 return;
133038 if( argc==3 ){
133039 /* The escape character string must consist of a single UTF-8 character.
133040 ** Otherwise, return an error.
133042 int nE= sqlite3_value_bytes(argv[2]);
133043 const unsigned char *zE = sqlite3_value_text(argv[2]);
133044 int i = 0;
133045 if( zE==0 ) return;
133046 U8_NEXT(zE, i, nE, uEsc);
133047 if( i!=nE){
133048 sqlite3_result_error(context,
133049 "ESCAPE expression must be a single character", -1);
133050 return;
133054 if( zA && zB ){
133055 sqlite3_result_int(context, icuLikeCompare(zA, zB, uEsc));
133060 ** This function is called when an ICU function called from within
133061 ** the implementation of an SQL scalar function returns an error.
133063 ** The scalar function context passed as the first argument is
133064 ** loaded with an error message based on the following two args.
133066 static void icuFunctionError(
133067 sqlite3_context *pCtx, /* SQLite scalar function context */
133068 const char *zName, /* Name of ICU function that failed */
133069 UErrorCode e /* Error code returned by ICU function */
133071 char zBuf[128];
133072 sqlite3_snprintf(128, zBuf, "ICU error: %s(): %s", zName, u_errorName(e));
133073 zBuf[127] = '\0';
133074 sqlite3_result_error(pCtx, zBuf, -1);
133078 ** Function to delete compiled regexp objects. Registered as
133079 ** a destructor function with sqlite3_set_auxdata().
133081 static void icuRegexpDelete(void *p){
133082 URegularExpression *pExpr = (URegularExpression *)p;
133083 uregex_close(pExpr);
133087 ** Implementation of SQLite REGEXP operator. This scalar function takes
133088 ** two arguments. The first is a regular expression pattern to compile
133089 ** the second is a string to match against that pattern. If either
133090 ** argument is an SQL NULL, then NULL Is returned. Otherwise, the result
133091 ** is 1 if the string matches the pattern, or 0 otherwise.
133093 ** SQLite maps the regexp() function to the regexp() operator such
133094 ** that the following two are equivalent:
133096 ** zString REGEXP zPattern
133097 ** regexp(zPattern, zString)
133099 ** Uses the following ICU regexp APIs:
133101 ** uregex_open()
133102 ** uregex_matches()
133103 ** uregex_close()
133105 static void icuRegexpFunc(sqlite3_context *p, int nArg, sqlite3_value **apArg){
133106 UErrorCode status = U_ZERO_ERROR;
133107 URegularExpression *pExpr;
133108 UBool res;
133109 const UChar *zString = sqlite3_value_text16(apArg[1]);
133111 (void)nArg; /* Unused parameter */
133113 /* If the left hand side of the regexp operator is NULL,
133114 ** then the result is also NULL.
133116 if( !zString ){
133117 return;
133120 pExpr = sqlite3_get_auxdata(p, 0);
133121 if( !pExpr ){
133122 const UChar *zPattern = sqlite3_value_text16(apArg[0]);
133123 if( !zPattern ){
133124 return;
133126 pExpr = uregex_open(zPattern, -1, 0, 0, &status);
133128 if( U_SUCCESS(status) ){
133129 sqlite3_set_auxdata(p, 0, pExpr, icuRegexpDelete);
133130 }else{
133131 assert(!pExpr);
133132 icuFunctionError(p, "uregex_open", status);
133133 return;
133137 /* Configure the text that the regular expression operates on. */
133138 uregex_setText(pExpr, zString, -1, &status);
133139 if( !U_SUCCESS(status) ){
133140 icuFunctionError(p, "uregex_setText", status);
133141 return;
133144 /* Attempt the match */
133145 res = uregex_matches(pExpr, 0, &status);
133146 if( !U_SUCCESS(status) ){
133147 icuFunctionError(p, "uregex_matches", status);
133148 return;
133151 /* Set the text that the regular expression operates on to a NULL
133152 ** pointer. This is not really necessary, but it is tidier than
133153 ** leaving the regular expression object configured with an invalid
133154 ** pointer after this function returns.
133156 uregex_setText(pExpr, 0, 0, &status);
133158 /* Return 1 or 0. */
133159 sqlite3_result_int(p, res ? 1 : 0);
133163 ** Implementations of scalar functions for case mapping - upper() and
133164 ** lower(). Function upper() converts its input to upper-case (ABC).
133165 ** Function lower() converts to lower-case (abc).
133167 ** ICU provides two types of case mapping, "general" case mapping and
133168 ** "language specific". Refer to ICU documentation for the differences
133169 ** between the two.
133171 ** To utilise "general" case mapping, the upper() or lower() scalar
133172 ** functions are invoked with one argument:
133174 ** upper('ABC') -> 'abc'
133175 ** lower('abc') -> 'ABC'
133177 ** To access ICU "language specific" case mapping, upper() or lower()
133178 ** should be invoked with two arguments. The second argument is the name
133179 ** of the locale to use. Passing an empty string ("") or SQL NULL value
133180 ** as the second argument is the same as invoking the 1 argument version
133181 ** of upper() or lower().
133183 ** lower('I', 'en_us') -> 'i'
133184 ** lower('I', 'tr_tr') -> 'ı' (small dotless i)
133186 ** http://www.icu-project.org/userguide/posix.html#case_mappings
133188 static void icuCaseFunc16(sqlite3_context *p, int nArg, sqlite3_value **apArg){
133189 const UChar *zInput;
133190 UChar *zOutput;
133191 int nInput;
133192 int nOutput;
133194 UErrorCode status = U_ZERO_ERROR;
133195 const char *zLocale = 0;
133197 assert(nArg==1 || nArg==2);
133198 if( nArg==2 ){
133199 zLocale = (const char *)sqlite3_value_text(apArg[1]);
133202 zInput = sqlite3_value_text16(apArg[0]);
133203 if( !zInput ){
133204 return;
133206 nInput = sqlite3_value_bytes16(apArg[0]);
133208 nOutput = nInput * 2 + 2;
133209 zOutput = sqlite3_malloc(nOutput);
133210 if( !zOutput ){
133211 return;
133214 if( sqlite3_user_data(p) ){
133215 u_strToUpper(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
133216 }else{
133217 u_strToLower(zOutput, nOutput/2, zInput, nInput/2, zLocale, &status);
133220 if( !U_SUCCESS(status) ){
133221 icuFunctionError(p, "u_strToLower()/u_strToUpper", status);
133222 return;
133225 sqlite3_result_text16(p, zOutput, -1, xFree);
133229 ** Collation sequence destructor function. The pCtx argument points to
133230 ** a UCollator structure previously allocated using ucol_open().
133232 static void icuCollationDel(void *pCtx){
133233 UCollator *p = (UCollator *)pCtx;
133234 ucol_close(p);
133238 ** Collation sequence comparison function. The pCtx argument points to
133239 ** a UCollator structure previously allocated using ucol_open().
133241 static int icuCollationColl(
133242 void *pCtx,
133243 int nLeft,
133244 const void *zLeft,
133245 int nRight,
133246 const void *zRight
133248 UCollationResult res;
133249 UCollator *p = (UCollator *)pCtx;
133250 res = ucol_strcoll(p, (UChar *)zLeft, nLeft/2, (UChar *)zRight, nRight/2);
133251 switch( res ){
133252 case UCOL_LESS: return -1;
133253 case UCOL_GREATER: return +1;
133254 case UCOL_EQUAL: return 0;
133256 assert(!"Unexpected return value from ucol_strcoll()");
133257 return 0;
133261 ** Implementation of the scalar function icu_load_collation().
133263 ** This scalar function is used to add ICU collation based collation
133264 ** types to an SQLite database connection. It is intended to be called
133265 ** as follows:
133267 ** SELECT icu_load_collation(<locale>, <collation-name>);
133269 ** Where <locale> is a string containing an ICU locale identifier (i.e.
133270 ** "en_AU", "tr_TR" etc.) and <collation-name> is the name of the
133271 ** collation sequence to create.
133273 static void icuLoadCollation(
133274 sqlite3_context *p,
133275 int nArg,
133276 sqlite3_value **apArg
133278 sqlite3 *db = (sqlite3 *)sqlite3_user_data(p);
133279 UErrorCode status = U_ZERO_ERROR;
133280 const char *zLocale; /* Locale identifier - (eg. "jp_JP") */
133281 const char *zName; /* SQL Collation sequence name (eg. "japanese") */
133282 UCollator *pUCollator; /* ICU library collation object */
133283 int rc; /* Return code from sqlite3_create_collation_x() */
133285 assert(nArg==2);
133286 zLocale = (const char *)sqlite3_value_text(apArg[0]);
133287 zName = (const char *)sqlite3_value_text(apArg[1]);
133289 if( !zLocale || !zName ){
133290 return;
133293 pUCollator = ucol_open(zLocale, &status);
133294 if( !U_SUCCESS(status) ){
133295 icuFunctionError(p, "ucol_open", status);
133296 return;
133298 assert(p);
133300 rc = sqlite3_create_collation_v2(db, zName, SQLITE_UTF16, (void *)pUCollator,
133301 icuCollationColl, icuCollationDel
133303 if( rc!=SQLITE_OK ){
133304 ucol_close(pUCollator);
133305 sqlite3_result_error(p, "Error registering collation function", -1);
133310 ** Register the ICU extension functions with database db.
133312 SQLITE_PRIVATE int sqlite3IcuInit(sqlite3 *db){
133313 struct IcuScalar {
133314 const char *zName; /* Function name */
133315 int nArg; /* Number of arguments */
133316 int enc; /* Optimal text encoding */
133317 void *pContext; /* sqlite3_user_data() context */
133318 void (*xFunc)(sqlite3_context*,int,sqlite3_value**);
133319 } scalars[] = {
133320 {"regexp", 2, SQLITE_ANY, 0, icuRegexpFunc},
133322 {"lower", 1, SQLITE_UTF16, 0, icuCaseFunc16},
133323 {"lower", 2, SQLITE_UTF16, 0, icuCaseFunc16},
133324 {"upper", 1, SQLITE_UTF16, (void*)1, icuCaseFunc16},
133325 {"upper", 2, SQLITE_UTF16, (void*)1, icuCaseFunc16},
133327 {"lower", 1, SQLITE_UTF8, 0, icuCaseFunc16},
133328 {"lower", 2, SQLITE_UTF8, 0, icuCaseFunc16},
133329 {"upper", 1, SQLITE_UTF8, (void*)1, icuCaseFunc16},
133330 {"upper", 2, SQLITE_UTF8, (void*)1, icuCaseFunc16},
133332 {"like", 2, SQLITE_UTF8, 0, icuLikeFunc},
133333 {"like", 3, SQLITE_UTF8, 0, icuLikeFunc},
133335 {"icu_load_collation", 2, SQLITE_UTF8, (void*)db, icuLoadCollation},
133338 int rc = SQLITE_OK;
133339 int i;
133341 for(i=0; rc==SQLITE_OK && i<(int)(sizeof(scalars)/sizeof(scalars[0])); i++){
133342 struct IcuScalar *p = &scalars[i];
133343 rc = sqlite3_create_function(
133344 db, p->zName, p->nArg, p->enc, p->pContext, p->xFunc, 0, 0
133348 return rc;
133351 #if !SQLITE_CORE
133352 SQLITE_API int sqlite3_extension_init(
133353 sqlite3 *db,
133354 char **pzErrMsg,
133355 const sqlite3_api_routines *pApi
133357 SQLITE_EXTENSION_INIT2(pApi)
133358 return sqlite3IcuInit(db);
133360 #endif
133362 #endif
133364 /************** End of icu.c *************************************************/
133365 /************** Begin file fts3_icu.c ****************************************/
133367 ** 2007 June 22
133369 ** The author disclaims copyright to this source code. In place of
133370 ** a legal notice, here is a blessing:
133372 ** May you do good and not evil.
133373 ** May you find forgiveness for yourself and forgive others.
133374 ** May you share freely, never taking more than you give.
133376 *************************************************************************
133377 ** This file implements a tokenizer for fts3 based on the ICU library.
133379 #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
133380 #ifdef SQLITE_ENABLE_ICU
133382 /* #include <assert.h> */
133383 /* #include <string.h> */
133385 #include <unicode/ubrk.h>
133386 /* #include <unicode/ucol.h> */
133387 /* #include <unicode/ustring.h> */
133388 #include <unicode/utf16.h>
133390 typedef struct IcuTokenizer IcuTokenizer;
133391 typedef struct IcuCursor IcuCursor;
133393 struct IcuTokenizer {
133394 sqlite3_tokenizer base;
133395 char *zLocale;
133398 struct IcuCursor {
133399 sqlite3_tokenizer_cursor base;
133401 UBreakIterator *pIter; /* ICU break-iterator object */
133402 int nChar; /* Number of UChar elements in pInput */
133403 UChar *aChar; /* Copy of input using utf-16 encoding */
133404 int *aOffset; /* Offsets of each character in utf-8 input */
133406 int nBuffer;
133407 char *zBuffer;
133409 int iToken;
133413 ** Create a new tokenizer instance.
133415 static int icuCreate(
133416 int argc, /* Number of entries in argv[] */
133417 const char * const *argv, /* Tokenizer creation arguments */
133418 sqlite3_tokenizer **ppTokenizer /* OUT: Created tokenizer */
133420 IcuTokenizer *p;
133421 int n = 0;
133423 if( argc>0 ){
133424 n = strlen(argv[0])+1;
133426 p = (IcuTokenizer *)sqlite3_malloc(sizeof(IcuTokenizer)+n);
133427 if( !p ){
133428 return SQLITE_NOMEM;
133430 memset(p, 0, sizeof(IcuTokenizer));
133432 if( n ){
133433 p->zLocale = (char *)&p[1];
133434 memcpy(p->zLocale, argv[0], n);
133437 *ppTokenizer = (sqlite3_tokenizer *)p;
133439 return SQLITE_OK;
133443 ** Destroy a tokenizer
133445 static int icuDestroy(sqlite3_tokenizer *pTokenizer){
133446 IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
133447 sqlite3_free(p);
133448 return SQLITE_OK;
133452 ** Prepare to begin tokenizing a particular string. The input
133453 ** string to be tokenized is pInput[0..nBytes-1]. A cursor
133454 ** used to incrementally tokenize this string is returned in
133455 ** *ppCursor.
133457 static int icuOpen(
133458 sqlite3_tokenizer *pTokenizer, /* The tokenizer */
133459 const char *zInput, /* Input string */
133460 int nInput, /* Length of zInput in bytes */
133461 sqlite3_tokenizer_cursor **ppCursor /* OUT: Tokenization cursor */
133463 IcuTokenizer *p = (IcuTokenizer *)pTokenizer;
133464 IcuCursor *pCsr;
133466 const int32_t opt = U_FOLD_CASE_DEFAULT;
133467 UErrorCode status = U_ZERO_ERROR;
133468 int nChar;
133470 UChar32 c;
133471 int iInput = 0;
133472 int iOut = 0;
133474 *ppCursor = 0;
133476 if( nInput<0 ){
133477 nInput = strlen(zInput);
133479 nChar = nInput+1;
133480 pCsr = (IcuCursor *)sqlite3_malloc(
133481 sizeof(IcuCursor) + /* IcuCursor */
133482 nChar * sizeof(UChar) + /* IcuCursor.aChar[] */
133483 (nChar+1) * sizeof(int) /* IcuCursor.aOffset[] */
133485 if( !pCsr ){
133486 return SQLITE_NOMEM;
133488 memset(pCsr, 0, sizeof(IcuCursor));
133489 pCsr->aChar = (UChar *)&pCsr[1];
133490 pCsr->aOffset = (int *)&pCsr->aChar[nChar];
133492 pCsr->aOffset[iOut] = iInput;
133493 U8_NEXT(zInput, iInput, nInput, c);
133494 while( c>0 ){
133495 int isError = 0;
133496 c = u_foldCase(c, opt);
133497 U16_APPEND(pCsr->aChar, iOut, nChar, c, isError);
133498 if( isError ){
133499 sqlite3_free(pCsr);
133500 return SQLITE_ERROR;
133502 pCsr->aOffset[iOut] = iInput;
133504 if( iInput<nInput ){
133505 U8_NEXT(zInput, iInput, nInput, c);
133506 }else{
133507 c = 0;
133511 pCsr->pIter = ubrk_open(UBRK_WORD, p->zLocale, pCsr->aChar, iOut, &status);
133512 if( !U_SUCCESS(status) ){
133513 sqlite3_free(pCsr);
133514 return SQLITE_ERROR;
133516 pCsr->nChar = iOut;
133518 ubrk_first(pCsr->pIter);
133519 *ppCursor = (sqlite3_tokenizer_cursor *)pCsr;
133520 return SQLITE_OK;
133524 ** Close a tokenization cursor previously opened by a call to icuOpen().
133526 static int icuClose(sqlite3_tokenizer_cursor *pCursor){
133527 IcuCursor *pCsr = (IcuCursor *)pCursor;
133528 ubrk_close(pCsr->pIter);
133529 sqlite3_free(pCsr->zBuffer);
133530 sqlite3_free(pCsr);
133531 return SQLITE_OK;
133535 ** Extract the next token from a tokenization cursor.
133537 static int icuNext(
133538 sqlite3_tokenizer_cursor *pCursor, /* Cursor returned by simpleOpen */
133539 const char **ppToken, /* OUT: *ppToken is the token text */
133540 int *pnBytes, /* OUT: Number of bytes in token */
133541 int *piStartOffset, /* OUT: Starting offset of token */
133542 int *piEndOffset, /* OUT: Ending offset of token */
133543 int *piPosition /* OUT: Position integer of token */
133545 IcuCursor *pCsr = (IcuCursor *)pCursor;
133547 int iStart = 0;
133548 int iEnd = 0;
133549 int nByte = 0;
133551 while( iStart==iEnd ){
133552 UChar32 c;
133554 iStart = ubrk_current(pCsr->pIter);
133555 iEnd = ubrk_next(pCsr->pIter);
133556 if( iEnd==UBRK_DONE ){
133557 return SQLITE_DONE;
133560 while( iStart<iEnd ){
133561 int iWhite = iStart;
133562 U8_NEXT(pCsr->aChar, iWhite, pCsr->nChar, c);
133563 if( u_isspace(c) ){
133564 iStart = iWhite;
133565 }else{
133566 break;
133569 assert(iStart<=iEnd);
133573 UErrorCode status = U_ZERO_ERROR;
133574 if( nByte ){
133575 char *zNew = sqlite3_realloc(pCsr->zBuffer, nByte);
133576 if( !zNew ){
133577 return SQLITE_NOMEM;
133579 pCsr->zBuffer = zNew;
133580 pCsr->nBuffer = nByte;
133583 u_strToUTF8(
133584 pCsr->zBuffer, pCsr->nBuffer, &nByte, /* Output vars */
133585 &pCsr->aChar[iStart], iEnd-iStart, /* Input vars */
133586 &status /* Output success/failure */
133588 } while( nByte>pCsr->nBuffer );
133590 *ppToken = pCsr->zBuffer;
133591 *pnBytes = nByte;
133592 *piStartOffset = pCsr->aOffset[iStart];
133593 *piEndOffset = pCsr->aOffset[iEnd];
133594 *piPosition = pCsr->iToken++;
133596 return SQLITE_OK;
133600 ** The set of routines that implement the simple tokenizer
133602 static const sqlite3_tokenizer_module icuTokenizerModule = {
133603 0, /* iVersion */
133604 icuCreate, /* xCreate */
133605 icuDestroy, /* xCreate */
133606 icuOpen, /* xOpen */
133607 icuClose, /* xClose */
133608 icuNext, /* xNext */
133612 ** Set *ppModule to point at the implementation of the ICU tokenizer.
133614 SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(
133615 sqlite3_tokenizer_module const**ppModule
133617 *ppModule = &icuTokenizerModule;
133620 #endif /* defined(SQLITE_ENABLE_ICU) */
133621 #endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
133623 /************** End of fts3_icu.c ********************************************/