@@ -1,8 +1,8 @@
1 1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/******************************************************************************
2 2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file is an amalgamation of many separate C source files from SQLite
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** version 3.7.7. By combining all the individual C code files into this
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version 3.7.8. By combining all the individual C code files into this
4 4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** single large file, the entire code can be compiled as a single translation
5 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unit. This allows many compilers to do optimizations that would not be
6 6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** possible if the files were compiled separately. Performance improvements
7 7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of 5% or more are commonly seen when SQLite is compiled as a single
8 8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** translation unit.
@@ -385,23 +385,29 @@
385 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
386 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Exactly one of the following macros must be defined in order to
387 387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** specify which memory allocation subsystem to use.
388 388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
389 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_SYSTEM_MALLOC // Use normal system malloc()
390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_WIN32_MALLOC // Use Win32 native heap API
390 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_MEMDEBUG // Debugging version of system malloc()
392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** On Windows, if the SQLITE_WIN32_MALLOC_VALIDATE macro is defined and the
394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** assert() macro is enabled, each call into the Win32 native heap subsystem
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will cause HeapValidate to be called. If heap validation should fail, an
396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** assertion will be triggered.
391 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
392 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (Historical note: There used to be several other options, but we've
393 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pared it down to just these two.)
394 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
395 401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If none of the above are defined, then set SQLITE_SYSTEM_MALLOC as
396 402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the default.
397 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)>1
404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)>1
399 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "At most one of the following compile-time configuration options\
400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- is allows: SQLITE_SYSTEM_MALLOC, SQLITE_MEMDEBUG"
406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ is allows: SQLITE_SYSTEM_MALLOC, SQLITE_WIN32_MALLOC, SQLITE_MEMDEBUG"
401 407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_MEMDEBUG)==0
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_SYSTEM_MALLOC)+defined(SQLITE_WIN32_MALLOC)+defined(SQLITE_MEMDEBUG)==0
403 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_SYSTEM_MALLOC 1
404 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
405 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
406 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
407 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If SQLITE_MALLOC_SOFT_LIMIT is not zero, then try to keep the
@@ -648,13 +654,13 @@
648 654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
649 655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_libversion()],
650 656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
651 657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
652 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION "3.7.7"
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION_NUMBER 3007007
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2011-06-15 13:11:06 f9750870ee04935f338e4d808900fee5a8b2b389"
659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION "3.7.8"
660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION_NUMBER 3007008
661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2011-08-29 11:56:14 639cc85a911454bffdcccb33f2976c683953ae64"
656 662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
657 663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
658 664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
659 665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version, sqlite3_sourceid
660 666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -851,11 +857,11 @@
851 857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** semicolon-separate SQL statements passed into its 2nd argument,
852 858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the context of the [database connection] passed in as its 1st
853 859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** argument. ^If the callback function of the 3rd argument to
854 860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_exec() is not NULL, then it is invoked for each result row
855 861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** coming out of the evaluated SQL statements. ^The 4th argument to
856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to sqlite3_exec() is relayed through to the 1st argument of each
862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_exec() is relayed through to the 1st argument of each
857 863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** callback invocation. ^If the callback pointer to sqlite3_exec()
858 864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is NULL, then no callback is ever invoked and result rows are
859 865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ignored.
860 866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
861 867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If an error occurs while evaluating the SQL statements passed into
@@ -1282,20 +1288,52 @@
1282 1288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** when [PRAGMA synchronous | PRAGMA synchronous=OFF] is set, but most
1283 1289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** VFSes do not need this signal and should silently ignore this opcode.
1284 1290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Applications should not call [sqlite3_file_control()] with this
1285 1291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opcode as doing so may disrupt the operation of the specialized VFSes
1286 1292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that do require it.
1293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The [SQLITE_FCNTL_WIN32_AV_RETRY] opcode is used to configure automatic
1295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** retry counts and intervals for certain disk I/O operations for the
1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** windows [VFS] in order to work to provide robustness against
1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** anti-virus programs. By default, the windows VFS will retry file read,
1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** file write, and file delete opertions up to 10 times, with a delay
1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of 25 milliseconds before the first retry and with the delay increasing
1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by an additional 25 milliseconds with each subsequent retry. This
1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** opcode allows those to values (10 retries and 25 milliseconds of delay)
1302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be adjusted. The values are changed for all database connections
1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** within the same process. The argument is a pointer to an array of two
1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** integers where the first integer i the new retry count and the second
1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** integer is the delay. If either integer is negative, then the setting
1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is not changed but instead the prior value of that setting is written
1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into the array entry, allowing the current retry settings to be
1308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** interrogated. The zDbName parameter is ignored.
1309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The [SQLITE_FCNTL_PERSIST_WAL] opcode is used to set or query the
1311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** persistent [WAL | Write AHead Log] setting. By default, the auxiliary
1312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** write ahead log and shared memory files used for transaction control
1313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are automatically deleted when the latest connection to the database
1314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** closes. Setting persistent WAL mode causes those files to persist after
1315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** close. Persisting the files is useful when other processes that do not
1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have write permission on the directory containing the database file want
1317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to read the database file, as the WAL and shared memory files must exist
1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in order for the database to be readable. The fourth parameter to
1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_file_control()] for this opcode should be a pointer to an integer.
1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** That integer is 0 to disable persistent WAL mode or 1 to enable persistent
1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WAL mode. If the integer is -1, then it is overwritten with the current
1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WAL persistence setting.
1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1287 1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1288 1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_LOCKSTATE 1
1289 1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_GET_LOCKPROXYFILE 2
1290 1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SET_LOCKPROXYFILE 3
1291 1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_LAST_ERRNO 4
1292 1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_SIZE_HINT 5
1293 1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_CHUNK_SIZE 6
1294 1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_FILE_POINTER 7
1295 1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_SYNC_OMITTED 8
1296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_FCNTL_WIN32_AV_RETRY 9
1334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_FCNTL_PERSIST_WAL 10
1297 1335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1298 1336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
1299 1337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Mutex Handle
1300 1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1301 1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The mutex module within SQLite defines [sqlite3_mutex] to be an
@@ -1443,11 +1481,11 @@
1443 1481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The xSleep() method causes the calling thread to sleep for at
1444 1482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** least the number of microseconds given. ^The xCurrentTime()
1445 1483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** method returns a Julian Day Number for the current date and time as
1446 1484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a floating point value.
1447 1485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
1448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Day Number multipled by 86400000 (the number of milliseconds in
1486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Day Number multiplied by 86400000 (the number of milliseconds in
1449 1487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a 24-hour day).
1450 1488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^SQLite will use the xCurrentTimeInt64() method to get the current
1451 1489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** date and time if that method is available (if iVersion is 2 or
1452 1490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** greater and the function pointer is not NULL) and will fall back
1453 1491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to xCurrentTime() if xCurrentTimeInt64() is unavailable.
@@ -1719,20 +1757,14 @@
1719 1757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** also used during testing of SQLite in order to specify an alternative
1720 1758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** memory allocator that simulates memory out-of-memory conditions in
1721 1759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** order to verify that SQLite recovers gracefully from such
1722 1760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** conditions.
1723 1761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The xMalloc and xFree methods must work like the
1725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** malloc() and free() functions from the standard C library.
1726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The xRealloc method must work like realloc() from the standard C library
1727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** with the exception that if the second argument to xRealloc is zero,
1728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** xRealloc must be a no-op - it must not perform any allocation or
1729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** deallocation. ^SQLite guarantees that the second argument to
1762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The xMalloc, xRealloc, and xFree methods must work like the
1763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** malloc(), realloc() and free() functions from the standard C library.
1764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite guarantees that the second argument to
1730 1765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xRealloc is always a value returned by a prior call to xRoundup.
1731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** And so in cases where xRoundup always returns a positive number,
1732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** xRealloc can perform exactly as the standard library realloc() and
1733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** still be in compliance with this specification.
1734 1766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1735 1767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xSize should return the allocated size of a memory allocation
1736 1768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** previously obtained from xMalloc or xRealloc. The allocated size
1737 1769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is always at least as big as the requested size but may be larger.
1738 1770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -1881,11 +1913,11 @@
1881 1913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** scratch memory beyond what is provided by this configuration option, then
1882 1914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
1883 1915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1884 1916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[SQLITE_CONFIG_PAGECACHE]] <dt>SQLITE_CONFIG_PAGECACHE</dt>
1885 1917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd> ^This option specifies a static memory buffer that SQLite can use for
1886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the database page cache with the default page cache implemenation.
1918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the database page cache with the default page cache implementation.
1887 1919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This configuration should not be used if an application-define page
1888 1920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cache implementation is loaded using the SQLITE_CONFIG_PCACHE option.
1889 1921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** There are three arguments to this option: A pointer to 8-byte aligned
1890 1922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** memory, the size of each page buffer (sz), and the number of pages (N).
1891 1923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The sz argument should be the size of the largest database page
@@ -2979,16 +3011,16 @@
2979 3011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[URI filenames in sqlite3_open()]] <h3>URI Filenames</h3>
2980 3012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2981 3013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If [URI filename] interpretation is enabled, and the filename argument
2982 3014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** begins with "file:", then the filename is interpreted as a URI. ^URI
2983 3015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** filename interpretation is enabled if the [SQLITE_OPEN_URI] flag is
2984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is set in the fourth argument to sqlite3_open_v2(), or if it has
3016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set in the fourth argument to sqlite3_open_v2(), or if it has
2985 3017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** been enabled globally using the [SQLITE_CONFIG_URI] option with the
2986 3018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_config()] method or by the [SQLITE_USE_URI] compile-time option.
2987 3019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** As of SQLite version 3.7.7, URI filename interpretation is turned off
2988 3020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by default, but future releases of SQLite might enable URI filename
2989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** intepretation by default. See "[URI filenames]" for additional
3021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** interpretation by default. See "[URI filenames]" for additional
2990 3022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** information.
2991 3023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2992 3024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** URI filenames are parsed according to RFC 3986. ^If the URI contains an
2993 3025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** authority, then it must be either an empty string or the string
2994 3026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "localhost". ^If the authority is not an empty string or "localhost", an
@@ -3803,11 +3835,11 @@
3803 3835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [extended result codes] might be returned as well.
3804 3836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3805 3837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^[SQLITE_BUSY] means that the database engine was unable to acquire the
3806 3838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database locks it needs to do its job. ^If the statement is a [COMMIT]
3807 3839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or occurs outside of an explicit transaction, then you can retry the
3808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** statement. If the statement is not a [COMMIT] and occurs within a
3840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statement. If the statement is not a [COMMIT] and occurs within an
3809 3841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** explicit transaction then you should rollback the transaction before
3810 3842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** continuing.
3811 3843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3812 3844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^[SQLITE_DONE] means that the statement has finished executing
3813 3845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** successfully. sqlite3_step() should not be called again on this virtual
@@ -4082,11 +4114,11 @@
4082 4114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4083 4115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4084 4116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Destroy A Prepared Statement Object
4085 4117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4086 4118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_finalize() function is called to delete a [prepared statement].
4087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^If the most recent evaluation of the statement encountered no errors or
4119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the most recent evaluation of the statement encountered no errors
4088 4120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or if the statement is never been evaluated, then sqlite3_finalize() returns
4089 4121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OK. ^If the most recent evaluation of statement S failed, then
4090 4122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_finalize(S) returns the appropriate [error code] or
4091 4123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [extended error code].
4092 4124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -5996,11 +6028,11 @@
5996 6028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** versions of these routines, it should at least provide stubs that always
5997 6029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return true so that one does not get spurious assertion failures.
5998 6030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5999 6031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the argument to sqlite3_mutex_held() is a NULL pointer then
6000 6032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the routine should return 1. This seems counter-intuitive since
6001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** clearly the mutex cannot be held if it does not exist. But the
6033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** clearly the mutex cannot be held if it does not exist. But
6002 6034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the reason the mutex does not exist is because the build is not
6003 6035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using mutexes. And we do not want the assert() containing the
6004 6036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** call to sqlite3_mutex_held() to fail, so a non-zero return is
6005 6037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the appropriate thing to do. ^The sqlite3_mutex_notheld()
6006 6038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface should also return 1 when given a NULL pointer.
@@ -6119,11 +6151,12 @@
6119 6151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_RESERVE 14
6120 6152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
6121 6153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_ISKEYWORD 16
6122 6154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_PGHDRSZ 17
6123 6155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_SCRATCHMALLOC 18
6124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_TESTCTRL_LAST 18
6156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_TESTCTRL_LOCALTIME_FAULT 19
6157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_TESTCTRL_LAST 19
6125 6158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6126 6159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
6127 6160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: SQLite Runtime Status
6128 6161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6129 6162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^This interface is used to retrieve runtime status information
@@ -6505,11 +6538,11 @@
6505 6538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[the xFetch() page cache methods]]
6506 6539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The xFetch() method locates a page in the cache and returns a pointer to
6507 6540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the page, or a NULL pointer.
6508 6541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A "page", in this context, means a buffer of szPage bytes aligned at an
6509 6542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 8-byte boundary. The page to be fetched is determined by the key. ^The
6510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** mimimum key value is 1. After it has been retrieved using xFetch, the page
6543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** minimum key value is 1. After it has been retrieved using xFetch, the page
6511 6544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is considered to be "pinned".
6512 6545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6513 6546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the requested page is already in the page cache, then the page cache
6514 6547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation must return a pointer to the page buffer with its content
6515 6548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** intact. If the requested page is not already in the cache, then the
@@ -7599,10 +7632,18 @@
7599 7632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7600 7633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_TEMP_STORE
7601 7634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_TEMP_STORE 1
7602 7635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
7603 7636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
7638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If all temporary storage is in-memory, then omit the external merge-sort
7639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** logic since it is superfluous.
7640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
7641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_TEMP_STORE==3 && !defined(SQLITE_OMIT_MERGE_SORT)
7642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_OMIT_MERGE_SORT
7643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
7644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
7604 7645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
7605 7646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** GCC does not define the offsetof() macro so we'll have to do it
7606 7647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ourselves.
7607 7648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7608 7649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef offsetof
@@ -7941,10 +7982,11 @@
7941 7982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_OMIT_JOURNAL 1 /* Do not create or use a rollback journal */
7942 7983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_NO_READLOCK 2 /* Omit readlocks on readonly files */
7943 7984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_MEMORY 4 /* This is an in-memory DB */
7944 7985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_SINGLE 8 /* The file contains at most 1 b-tree */
7945 7986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_UNORDERED 16 /* Use of a hash implementation is OK */
7987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_SORTER 32 /* Used as accumulator in external merge sort */
7946 7988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7947 7989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeClose(Btree*);
7948 7990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int);
7949 7991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int,int);
7950 7992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*);
@@ -8143,10 +8185,11 @@
8143 8185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or VDBE. The VDBE implements an abstract machine that runs a
8144 8186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** simple program to access and modify the underlying database.
8145 8187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
8146 8188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef _SQLITE_VDBE_H_
8147 8189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define _SQLITE_VDBE_H_
8190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
8148 8191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8149 8192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
8150 8193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A single VDBE is an opaque structure named "Vdbe". Only routines
8151 8194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the source file sqliteVdbe.c are allowed to see the insides
8152 8195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of this structure.
@@ -8186,10 +8229,11 @@
8186 8229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pMem; /* Used when p4type is P4_MEM */
8187 8230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VTable *pVtab; /* Used when p4type is P4_VTAB */
8188 8231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo; /* Used when p4type is P4_KEYINFO */
8189 8232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *ai; /* Used when p4type is P4_INTARRAY */
8190 8233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SubProgram *pProgram; /* Used when p4type is P4_SUBPROGRAM */
8234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xAdvance)(BtCursor *, int *);
8191 8235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} p4;
8192 8236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
8193 8237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zComment; /* Comment to improve readability */
8194 8238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
8195 8239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef VDBE_PROFILE
@@ -8241,10 +8285,11 @@
8241 8285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define P4_REAL (-12) /* P4 is a 64-bit floating point value */
8242 8286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define P4_INT64 (-13) /* P4 is a 64-bit signed integer */
8243 8287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define P4_INT32 (-14) /* P4 is a 32-bit signed integer */
8244 8288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define P4_INTARRAY (-15) /* P4 is a vector of 32-bit integers */
8245 8289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define P4_SUBPROGRAM (-18) /* P4 is a pointer to a SubProgram structure */
8290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define P4_ADVANCE (-19) /* P4 is a pointer to BtreeNext() or BtreePrev() */
8246 8291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8247 8292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* When adding a P4 argument using P4_KEYINFO, a copy of the KeyInfo structure
8248 8293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is made. That copy is freed when the Vdbe is finalized. But if the
8249 8294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** argument is P4_KEYINFO_HANDOFF, the passed in pointer is used. It still
8250 8295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** gets freed when the Vdbe is finalized so it still should be obtained
@@ -8354,89 +8399,89 @@
8354 8399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ReadCookie 35
8355 8400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_SetCookie 36
8356 8401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_VerifyCookie 37
8357 8402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_OpenRead 38
8358 8403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_OpenWrite 39
8359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenAutoindex 40
8360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenEphemeral 41
8361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenPseudo 42
8362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Close 43
8363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekLt 44
8364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekLe 45
8365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekGe 46
8366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekGt 47
8367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Seek 48
8368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NotFound 49
8369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Found 50
8370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IsUnique 51
8371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NotExists 52
8372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Sequence 53
8373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NewRowid 54
8374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Insert 55
8375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_InsertInt 56
8376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Delete 57
8377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_ResetCount 58
8378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowKey 59
8379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowData 60
8380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Rowid 61
8381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NullRow 62
8382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Last 63
8383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Sort 64
8384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Rewind 65
8385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Prev 66
8386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Next 67
8387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxInsert 70
8388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxDelete 71
8389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxRowid 72
8390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxLT 81
8391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxGE 92
8392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Destroy 95
8393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Clear 96
8394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_CreateIndex 97
8395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_CreateTable 98
8396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_ParseSchema 99
8397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_LoadAnalysis 100
8398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropTable 101
8399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropIndex 102
8400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropTrigger 103
8401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IntegrityCk 104
8402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetAdd 105
8403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetRead 106
8404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetTest 107
8405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Program 108
8406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Param 109
8407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_FkCounter 110
8408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_FkIfZero 111
8409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_MemMax 112
8410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfPos 113
8411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfNeg 114
8412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfZero 115
8413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_AggStep 116
8414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_AggFinal 117
8415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Checkpoint 118
8416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_JournalMode 119
8417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Vacuum 120
8418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IncrVacuum 121
8419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Expire 122
8420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_TableLock 123
8421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VBegin 124
8422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VCreate 125
8423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VDestroy 126
8424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VOpen 127
8425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VFilter 128
8426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VColumn 129
8427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VNext 131
8428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VRename 132
8429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VUpdate 133
8430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Pagecount 134
8431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_MaxPgcnt 135
8432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Trace 136
8433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Noop 137
8434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Explain 138
8435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
8436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The following opcode values are never used */
8437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NotUsed_139 139
8404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenSorter 40
8405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenAutoindex 41
8406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenEphemeral 42
8407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenPseudo 43
8408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Close 44
8409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekLt 45
8410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekLe 46
8411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekGe 47
8412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekGt 48
8413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Seek 49
8414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NotFound 50
8415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Found 51
8416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IsUnique 52
8417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NotExists 53
8418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Sequence 54
8419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NewRowid 55
8420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Insert 56
8421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_InsertInt 57
8422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Delete 58
8423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ResetCount 59
8424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowKey 60
8425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowData 61
8426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Rowid 62
8427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NullRow 63
8428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Last 64
8429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Sort 65
8430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Rewind 66
8431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Prev 67
8432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Next 70
8433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxInsert 71
8434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxDelete 72
8435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxRowid 81
8436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxLT 92
8437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxGE 95
8438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Destroy 96
8439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Clear 97
8440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_CreateIndex 98
8441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_CreateTable 99
8442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ParseSchema 100
8443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_LoadAnalysis 101
8444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropTable 102
8445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropIndex 103
8446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropTrigger 104
8447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IntegrityCk 105
8448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetAdd 106
8449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetRead 107
8450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetTest 108
8451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Program 109
8452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Param 110
8453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_FkCounter 111
8454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_FkIfZero 112
8455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_MemMax 113
8456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfPos 114
8457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfNeg 115
8458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfZero 116
8459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_AggStep 117
8460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_AggFinal 118
8461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Checkpoint 119
8462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_JournalMode 120
8463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Vacuum 121
8464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IncrVacuum 122
8465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Expire 123
8466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_TableLock 124
8467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VBegin 125
8468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VCreate 126
8469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VDestroy 127
8470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VOpen 128
8471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VFilter 129
8472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VColumn 131
8473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VNext 132
8474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VRename 133
8475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VUpdate 134
8476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Pagecount 135
8477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_MaxPgcnt 136
8478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Trace 137
8479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Noop 138
8480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Explain 139
8481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
8482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The following opcode values are never used */
8438 8483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_NotUsed_140 140
8439 8484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8440 8485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8441 8486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Properties such as "out2" or "jump" that are specified in
8442 8487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comments following the "case" for each opcode in the vdbe.c
@@ -8453,23 +8498,23 @@
8453 8498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 0 */ 0x00, 0x01, 0x05, 0x04, 0x04, 0x10, 0x00, 0x02,\
8454 8499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 8 */ 0x02, 0x02, 0x02, 0x02, 0x02, 0x00, 0x24, 0x24,\
8455 8500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 16 */ 0x00, 0x00, 0x00, 0x24, 0x04, 0x05, 0x04, 0x00,\
8456 8501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 24 */ 0x00, 0x01, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02,\
8457 8502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 32 */ 0x00, 0x00, 0x00, 0x02, 0x10, 0x00, 0x00, 0x00,\
8458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 40 */ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11,\
8459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 48 */ 0x08, 0x11, 0x11, 0x11, 0x11, 0x02, 0x02, 0x00,\
8460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 56 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,\
8461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 64 */ 0x01, 0x01, 0x01, 0x01, 0x4c, 0x4c, 0x08, 0x00,\
8462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 72 */ 0x02, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\
8463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 80 */ 0x15, 0x01, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\
8464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x02,\
8465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 96 */ 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00,\
8466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 104 */ 0x00, 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00, 0x01,\
8467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 112 */ 0x08, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00, 0x02,\
8468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 120 */ 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
8469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 128 */ 0x01, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x02,\
8470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,\
8503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 40 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11,\
8504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 48 */ 0x11, 0x08, 0x11, 0x11, 0x11, 0x11, 0x02, 0x02,\
8505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 56 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00,\
8506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 64 */ 0x01, 0x01, 0x01, 0x01, 0x4c, 0x4c, 0x01, 0x08,\
8507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 72 */ 0x00, 0x05, 0x05, 0x15, 0x15, 0x15, 0x15, 0x15,\
8508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 80 */ 0x15, 0x02, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c,\
8509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x01, 0x24, 0x02, 0x01,\
8510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 96 */ 0x02, 0x00, 0x02, 0x02, 0x00, 0x00, 0x00, 0x00,\
8511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 104 */ 0x00, 0x00, 0x0c, 0x45, 0x15, 0x01, 0x02, 0x00,\
8512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 112 */ 0x01, 0x08, 0x05, 0x05, 0x05, 0x00, 0x00, 0x00,\
8513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 120 */ 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,\
8514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 128 */ 0x00, 0x01, 0x02, 0x00, 0x01, 0x00, 0x00, 0x02,\
8515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ 0x02, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x04,\
8471 8516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 144 */ 0x04, 0x04,}
8472 8517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8473 8518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of opcodes.h *********************************************/
8474 8519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in vdbe.h ***********************/
8475 8520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -8484,13 +8529,13 @@
8484 8529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeAddOp3(Vdbe*,int,int,int,int);
8485 8530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeAddOp4(Vdbe*,int,int,int,int,const char *zP4,int);
8486 8531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeAddOp4Int(Vdbe*,int,int,int,int,int);
8487 8532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp);
8488 8533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeAddParseSchemaOp(Vdbe*,int,char*);
8489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, int addr, int P1);
8490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, int addr, int P2);
8491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, int addr, int P3);
8534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe*, u32 addr, int P1);
8535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe*, u32 addr, int P2);
8536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe*, u32 addr, int P3);
8492 8537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeP5(Vdbe*, u8 P5);
8493 8538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeJumpHere(Vdbe*, int addr);
8494 8539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe*, int addr, int N);
8495 8540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeP4(Vdbe*, int addr, const char *zP4, int N);
8496 8541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe*, int);
@@ -8608,10 +8653,11 @@
8608 8653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NOTE: These values must match the corresponding BTREE_ values in btree.h.
8609 8654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
8610 8655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGER_OMIT_JOURNAL 0x0001 /* Do not use a rollback journal */
8611 8656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGER_NO_READLOCK 0x0002 /* Omit readlocks on readonly files */
8612 8657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGER_MEMORY 0x0004 /* In-memory database */
8658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define PAGER_SORTER 0x0020 /* Accumulator in external merge sort */
8613 8659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8614 8660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
8615 8661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Valid values for the second argument to sqlite3PagerLockingMode().
8616 8662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
8617 8663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGER_LOCKINGMODE_QUERY -1
@@ -8703,10 +8749,13 @@
8703 8749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE sqlite3_file *sqlite3PagerFile(Pager*);
8704 8750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3PagerJournalname(Pager*);
8705 8751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3PagerNosync(Pager*);
8706 8752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3PagerTempSpace(Pager*);
8707 8753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager*);
8754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_MERGE_SORT
8755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3PagerUnderStress(Pager*);
8756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
8708 8757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8709 8758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Functions used to truncate the database file. */
8710 8759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3PagerTruncateImage(Pager*,Pgno);
8711 8760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8712 8761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_HAS_CODEC) && !defined(SQLITE_OMIT_WAL)
@@ -9556,10 +9605,12 @@
9556 9605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IndexSort 0x04 /* Disable indexes for sorting */
9557 9606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IndexSearch 0x08 /* Disable indexes for searching */
9558 9607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IndexCover 0x10 /* Disable index covering table */
9559 9608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_GroupByOrder 0x20 /* Disable GROUPBY cover of ORDERBY */
9560 9609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FactorOutConst 0x40 /* Disable factoring out constants */
9610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_IdxRealAsInt 0x80 /* Store REAL as INT in indices */
9611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_DistinctOpt 0x80 /* DISTINCT using indexes */
9561 9612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_OptMask 0xff /* Mask of all disablable opts */
9562 9613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9563 9614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
9564 9615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Possible values for the sqlite.magic field.
9565 9616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The numbers are obtained at random and have no special meaning, other
@@ -10447,10 +10498,11 @@
10447 10498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab; /* An SQL table corresponding to zName */
10448 10499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSelect; /* A SELECT statement used in place of a table name */
10449 10500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 isPopulated; /* Temporary table associated with SELECT is populated */
10450 10501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 jointype; /* Type of join between this able and the previous */
10451 10502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 notIndexed; /* True if there is a NOT INDEXED clause */
10503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 isCorrelated; /* True if sub-query is correlated */
10452 10504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_EXPLAIN
10453 10505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 iSelectId; /* If pSelect!=0, the id of the sub-select in EQP */
10454 10506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
10455 10507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCursor; /* The VDBE cursor number used to access this table */
10456 10508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pOn; /* The ON clause of a join */
@@ -10566,10 +10618,11 @@
10566 10618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct WhereInfo {
10567 10619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse; /* Parsing and code generating context */
10568 10620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 wctrlFlags; /* Flags originally passed to sqlite3WhereBegin() */
10569 10621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 okOnePass; /* Ok to use one-pass algorithm for UPDATE or DELETE */
10570 10622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 untestedTerms; /* Not all WHERE terms resolved by outer loop */
10623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 eDistinct;
10571 10624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pTabList; /* List of tables in the join */
10572 10625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTop; /* The very beginning of the WHERE loop */
10573 10626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iContinue; /* Jump here to continue with next record */
10574 10627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iBreak; /* Jump here to break out of the loop */
10575 10628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLevel; /* Number of nested loop */
@@ -10577,10 +10630,13 @@
10577 10630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double savedNQueryLoop; /* pParse->nQueryLoop outside the WHERE loop */
10578 10631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double nRowOut; /* Estimated number of output rows */
10579 10632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLevel a[1]; /* Information about each nest loop in WHERE */
10580 10633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
10581 10634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WHERE_DISTINCT_UNIQUE 1
10636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WHERE_DISTINCT_ORDERED 2
10637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
10582 10638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10583 10639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A NameContext defines a context in which to resolve table and column
10584 10640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** names. The context consists of a list of tables (the pSrcList) field and
10585 10641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a list of named expression (pEList). The named expression list may
10586 10642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be NULL. The pSrc corresponds to the FROM clause of a SELECT or
@@ -11053,10 +11109,11 @@
11053 11109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isPCacheInit; /* True after malloc is initialized */
11054 11110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex *pInitMutex; /* Mutex used by sqlite3_initialize() */
11055 11111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRefInitMutex; /* Number of users of pInitMutex */
11056 11112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xLog)(void*,int,const char*); /* Function for logging */
11057 11113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pLogArg; /* First argument to xLog() */
11114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bLocaltimeFault; /* True to fail localtime() calls */
11058 11115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
11059 11116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11060 11117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11061 11118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Context pointer passed down through the tree-walk.
11062 11119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -11337,11 +11394,11 @@
11337 11394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_ENABLE_UPDATE_DELETE_LIMIT) && !defined(SQLITE_OMIT_SUBQUERY)
11338 11395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Expr *sqlite3LimitWhere(Parse *, SrcList *, Expr *, ExprList *, Expr *, Expr *, char *);
11339 11396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
11340 11397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DeleteFrom(Parse*, SrcList*, Expr*);
11341 11398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Update(Parse*, SrcList*, ExprList*, Expr*, int);
11342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**, u16);
11399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(Parse*, SrcList*, Expr*, ExprList**,ExprList*,u16);
11343 11400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3WhereEnd(WhereInfo*);
11344 11401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExprCodeGetColumn(Parse*, Table*, int, int, int);
11345 11402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCodeGetColumnOfTable(Vdbe*, Table*, int, int, int);
11346 11403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse*, int, int, int);
11347 11404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCodeCopy(Parse*, int, int, int);
@@ -12013,10 +12070,11 @@
12013 12070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* isPCacheInit */
12014 12071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* pInitMutex */
12015 12072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* nRefInitMutex */
12016 12073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* xLog */
12017 12074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* pLogArg */
12075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* bLocaltimeFault */
12018 12076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
12019 12077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12020 12078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12021 12079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
12022 12080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Hash table for global functions - functions common to all
@@ -12321,10 +12379,13 @@
12321 12379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_LOOKASIDE
12322 12380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"OMIT_LOOKASIDE",
12323 12381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12324 12382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_MEMORYDB
12325 12383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"OMIT_MEMORYDB",
12384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
12385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_MERGE_SORT
12386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "OMIT_MERGE_SORT",
12326 12387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12327 12388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_OR_OPTIMIZATION
12328 12389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"OMIT_OR_OPTIMIZATION",
12329 12390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12330 12391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_PAGER_PRAGMAS
@@ -12387,10 +12448,13 @@
12387 12448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_WSD
12388 12449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"OMIT_WSD",
12389 12450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12390 12451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_XFER_OPT
12391 12452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"OMIT_XFER_OPT",
12453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
12454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_PAGECACHE_BLOCKALLOC
12455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "PAGECACHE_BLOCKALLOC",
12392 12456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12393 12457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_PERFORMANCE_TRACE
12394 12458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"PERFORMANCE_TRACE",
12395 12459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12396 12460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_PROXY_DEBUG
@@ -12508,10 +12572,13 @@
12508 12572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
12509 12573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Boolean values
12510 12574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
12511 12575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned char Bool;
12512 12576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opaque type used by code in vdbesort.c */
12578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct VdbeSorter VdbeSorter;
12579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
12513 12580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
12514 12581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A cursor is a pointer into a single BTree within a database file.
12515 12582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The cursor can seek to a BTree entry with a particular key, or
12516 12583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** loop over all entries of the Btree. You can also insert new BTree
12517 12584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** entries or retrieve the key or data from the entry that the cursor
@@ -12539,10 +12606,11 @@
12539 12606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */
12540 12607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule; /* Module for cursor pVtabCursor */
12541 12608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 seqCount; /* Sequence counter */
12542 12609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */
12543 12610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 lastRowid; /* Last rowid from a Next or NextIdx operation */
12611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter; /* Sorter object for OP_OpenSorter cursors */
12544 12612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12545 12613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Result of last sqlite3BtreeMoveto() done by an OP_NotExists or
12546 12614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** OP_IsUnique opcode on this cursor. */
12547 12615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int seekResult;
12548 12616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -12858,17 +12926,36 @@
12858 12926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*);
12859 12927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*);
12860 12928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,int,int,int,Mem*);
12861 12929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p);
12862 12930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p);
12931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define MemReleaseExt(X) \
12932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame)) \
12933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemReleaseExternal(X);
12863 12934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
12864 12935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3OpcodeName(int);
12865 12936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
12866 12937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int);
12867 12938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*);
12868 12939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *);
12869 12940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem);
12941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
12942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_MERGE_SORT
12943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeSorterInit(Y,Z) SQLITE_OK
12944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeSorterWrite(X,Y,Z) SQLITE_OK
12945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeSorterClose(Y,Z)
12946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeSorterRowkey(Y,Z) SQLITE_OK
12947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeSorterRewind(X,Y,Z) SQLITE_OK
12948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeSorterNext(X,Y,Z) SQLITE_OK
12949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
12950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *, VdbeCursor *);
12951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterWrite(sqlite3 *, VdbeCursor *, int);
12952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *, VdbeCursor *);
12953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *, Mem *);
12954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *, VdbeCursor *, int *);
12955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, VdbeCursor *, int *);
12956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
12870 12957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12871 12958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
12872 12959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe*);
12873 12960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe*);
12874 12961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
@@ -13159,30 +13246,16 @@
13159 13246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Astronomical Algorithms, 2nd Edition, 1998
13160 13247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ISBM 0-943396-61-1
13161 13248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Willmann-Bell, Inc
13162 13249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Richmond, Virginia (USA)
13163 13250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
13252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
13164 13253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <time.h>
13165 13254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13166 13255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_DATETIME_FUNCS
13167 13256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
13169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** On recent Windows platforms, the localtime_s() function is available
13170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** as part of the "Secure CRT". It is essentially equivalent to
13171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** localtime_r() available under most POSIX platforms, except that the
13172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** order of the parameters is reversed.
13173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
13174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
13175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
13176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the user has not indicated to use localtime_r() or localtime_s()
13177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** already, check for an MSVC build environment that provides
13178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** localtime_s().
13179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
13180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \
13181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE)
13182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define HAVE_LOCALTIME_S 1
13183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
13184 13257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13185 13258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
13186 13259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A structure for holding a single date and time.
13187 13260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13188 13261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct DateTime DateTime;
@@ -13523,20 +13596,90 @@
13523 13596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void clearYMD_HMS_TZ(DateTime *p){
13524 13597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->validYMD = 0;
13525 13598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->validHMS = 0;
13526 13599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->validTZ = 0;
13527 13600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
13603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** On recent Windows platforms, the localtime_s() function is available
13604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as part of the "Secure CRT". It is essentially equivalent to
13605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** localtime_r() available under most POSIX platforms, except that the
13606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** order of the parameters is reversed.
13607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See http://msdn.microsoft.com/en-us/library/a442x3ye(VS.80).aspx.
13609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the user has not indicated to use localtime_r() or localtime_s()
13611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** already, check for an MSVC build environment that provides
13612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** localtime_s().
13613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
13614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(HAVE_LOCALTIME_R) && !defined(HAVE_LOCALTIME_S) && \
13615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ defined(_MSC_VER) && defined(_CRT_INSECURE_DEPRECATE)
13616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define HAVE_LOCALTIME_S 1
13617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
13618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_LOCALTIME
13620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
13621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following routine implements the rough equivalent of localtime_r()
13622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** using whatever operating-system specific localtime facility that
13623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is available. This routine returns 0 on success and
13624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** non-zero on any kind of error.
13625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the sqlite3GlobalConfig.bLocaltimeFault variable is true then this
13627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine will always fail.
13628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
13629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int osLocaltime(time_t *t, struct tm *pTm){
13630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
13631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if (!defined(HAVE_LOCALTIME_R) || !HAVE_LOCALTIME_R) \
13632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (!defined(HAVE_LOCALTIME_S) || !HAVE_LOCALTIME_S)
13633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct tm *pX;
13634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_THREADSAFE>0
13635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);
13636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
13637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(mutex);
13638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pX = localtime(t);
13639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_BUILTIN_TEST
13640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3GlobalConfig.bLocaltimeFault ) pX = 0;
13641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
13642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pX ) *pTm = *pX;
13643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(mutex);
13644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pX==0;
13645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
13646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_BUILTIN_TEST
13647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3GlobalConfig.bLocaltimeFault ) return 1;
13648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
13649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(HAVE_LOCALTIME_R) && HAVE_LOCALTIME_R
13650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = localtime_r(t, pTm)==0;
13651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
13652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = localtime_s(pTm, t);
13653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* HAVE_LOCALTIME_R */
13654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* HAVE_LOCALTIME_R || HAVE_LOCALTIME_S */
13655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
13656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
13657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_OMIT_LOCALTIME */
13658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13528 13659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13529 13660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_LOCALTIME
13530 13661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
13531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Compute the difference (in milliseconds)
13532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** between localtime and UTC (a.k.a. GMT)
13533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for the time value p where p is in UTC.
13662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Compute the difference (in milliseconds) between localtime and UTC
13663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (a.k.a. GMT) for the time value p where p is in UTC. If no error occurs,
13664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** return this value and set *pRc to SQLITE_OK.
13665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
13666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Or, if an error does occur, set *pRc to SQLITE_ERROR. The returned value
13667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is undefined in this case.
13534 13668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3_int64 localtimeOffset(DateTime *p){
13669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_int64 localtimeOffset(
13670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DateTime *p, /* Date at which to calculate offset */
13671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_context *pCtx, /* Write error here if one occurs */
13672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pRc /* OUT: Error code. SQLITE_OK or ERROR */
13673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
13536 13674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DateTime x, y;
13537 13675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
time_t t;
13676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct tm sLocal;
13677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Initialize the contents of sLocal to avoid a compiler warning. */
13679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&sLocal, 0, sizeof(sLocal));
13680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
13538 13681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x = *p;
13539 13682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeYMD_HMS(&x);
13540 13683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( x.Y<1971 || x.Y>=2038 ){
13541 13684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.Y = 2000;
13542 13685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.M = 1;
@@ -13550,51 +13693,27 @@
13550 13693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13551 13694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.tz = 0;
13552 13695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.validJD = 0;
13553 13696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeJD(&x);
13554 13697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
t = (time_t)(x.iJD/1000 - 21086676*(i64)10000);
13555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef HAVE_LOCALTIME_R
13556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
13557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct tm sLocal;
13558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- localtime_r(&t, &sLocal);
13559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.Y = sLocal.tm_year + 1900;
13560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.M = sLocal.tm_mon + 1;
13561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.D = sLocal.tm_mday;
13562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.h = sLocal.tm_hour;
13563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.m = sLocal.tm_min;
13564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.s = sLocal.tm_sec;
13565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
13566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #elif defined(HAVE_LOCALTIME_S) && HAVE_LOCALTIME_S
13567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
13568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct tm sLocal;
13569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- localtime_s(&sLocal, &t);
13570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.Y = sLocal.tm_year + 1900;
13571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.M = sLocal.tm_mon + 1;
13572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.D = sLocal.tm_mday;
13573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.h = sLocal.tm_hour;
13574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.m = sLocal.tm_min;
13575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.s = sLocal.tm_sec;
13576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
13577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
13578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
13579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct tm *pTm;
13580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_enter(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
13581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTm = localtime(&t);
13582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.Y = pTm->tm_year + 1900;
13583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.M = pTm->tm_mon + 1;
13584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.D = pTm->tm_mday;
13585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.h = pTm->tm_hour;
13586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.m = pTm->tm_min;
13587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- y.s = pTm->tm_sec;
13588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_leave(sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER));
13589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
13590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
13698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( osLocaltime(&t, &sLocal) ){
13699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error(pCtx, "local time unavailable", -1);
13700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRc = SQLITE_ERROR;
13701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
13702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
13703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ y.Y = sLocal.tm_year + 1900;
13704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ y.M = sLocal.tm_mon + 1;
13705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ y.D = sLocal.tm_mday;
13706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ y.h = sLocal.tm_hour;
13707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ y.m = sLocal.tm_min;
13708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ y.s = sLocal.tm_sec;
13591 13709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
y.validYMD = 1;
13592 13710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
y.validHMS = 1;
13593 13711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
y.validJD = 0;
13594 13712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
y.validTZ = 0;
13595 13713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeJD(&y);
13714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRc = SQLITE_OK;
13596 13715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return y.iJD - x.iJD;
13597 13716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13598 13717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_LOCALTIME */
13599 13718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13600 13719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -13614,13 +13733,16 @@
13614 13733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** weekday N
13615 13734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unixepoch
13616 13735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** localtime
13617 13736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** utc
13618 13737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
13619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return 0 on success and 1 if there is any kind of error.
13738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return 0 on success and 1 if there is any kind of error. If the error
13739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is in a system call (i.e. localtime()), then an error message is written
13740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to context pCtx. If the error is an unrecognized modifier, no error is
13741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** written to pCtx.
13620 13742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int parseModifier(const char *zMod, DateTime *p){
13743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int parseModifier(sqlite3_context *pCtx, const char *zMod, DateTime *p){
13622 13744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = 1;
13623 13745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n;
13624 13746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double r;
13625 13747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z, zBuf[30];
13626 13748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = zBuf;
@@ -13636,13 +13758,12 @@
13636 13758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Assuming the current time value is UTC (a.k.a. GMT), shift it to
13637 13759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** show local time.
13638 13760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13639 13761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( strcmp(z, "localtime")==0 ){
13640 13762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeJD(p);
13641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->iJD += localtimeOffset(p);
13763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->iJD += localtimeOffset(p, pCtx, &rc);
13642 13764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
clearYMD_HMS_TZ(p);
13643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = 0;
13644 13765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13645 13766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
13646 13767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13647 13768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
13648 13769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'u': {
@@ -13659,15 +13780,16 @@
13659 13780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13660 13781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_LOCALTIME
13661 13782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( strcmp(z, "utc")==0 ){
13662 13783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 c1;
13663 13784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeJD(p);
13664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- c1 = localtimeOffset(p);
13665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->iJD -= c1;
13666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- clearYMD_HMS_TZ(p);
13667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->iJD += c1 - localtimeOffset(p);
13668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = 0;
13785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c1 = localtimeOffset(p, pCtx, &rc);
13786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
13787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->iJD -= c1;
13788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ clearYMD_HMS_TZ(p);
13789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->iJD += c1 - localtimeOffset(p, pCtx, &rc);
13790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
13669 13791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13670 13792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
13671 13793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
13672 13794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13673 13795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 'w': {
@@ -13844,13 +13966,12 @@
13844 13966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !z || parseDateOrTime(context, (char*)z, p) ){
13845 13967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
13846 13968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13847 13969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13848 13970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; i<argc; i++){
13849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (z = sqlite3_value_text(argv[i]))==0 || parseModifier((char*)z, p) ){
13850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
13851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
13971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = sqlite3_value_text(argv[i]);
13972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z==0 || parseModifier(context, (char*)z, p) ) return 1;
13852 13973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13853 13974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
13854 13975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13855 13976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13856 13977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -14344,11 +14465,11 @@
14344 14465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DO_OS_MALLOC_TEST(0);
14345 14466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 0x87f3f is a mask of SQLITE_OPEN_ flags that are valid to be passed
14346 14467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** down into the VFS layer. Some SQLITE_OPEN_ flags (for example,
14347 14468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OPEN_FULLMUTEX or SQLITE_OPEN_SHAREDCACHE) are blocked before
14348 14469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reaching the VFS. */
14349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f3f, pFlagsOut);
14470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pVfs->xOpen(pVfs, zPath, pFile, flags & 0x87f7f, pFlagsOut);
14350 14471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK || pFile->pMethods==0 );
14351 14472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
14352 14473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
14353 14474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3OsDelete(sqlite3_vfs *pVfs, const char *zPath, int dirSync){
14354 14475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pVfs->xDelete(pVfs, zPath, dirSync);
@@ -14880,10 +15001,11 @@
14880 15001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
extern void backtrace_symbols_fd(void*const*,int,int);
14881 15002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
14882 15003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define backtrace(A,B) 1
14883 15004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define backtrace_symbols_fd(A,B,C)
14884 15005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
15006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
14885 15007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14886 15008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14887 15009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Each memory allocation looks like this:
14888 15010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
14889 15011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ------------------------------------------------------------------------
@@ -15805,11 +15927,11 @@
15805 15927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Free an outstanding memory allocation.
15806 15928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
15807 15929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function assumes that the necessary mutexes, if any, are
15808 15930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** already held by the caller. Hence "Unsafe".
15809 15931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
15810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void memsys3FreeUnsafe(void *pOld){
15932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void memsys3FreeUnsafe(void *pOld){
15811 15933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem3Block *p = (Mem3Block*)pOld;
15812 15934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
15813 15935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 size, x;
15814 15936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(mem3.mutex) );
15815 15937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p>mem3.aPool && p<&mem3.aPool[mem3.nPool] );
@@ -15880,21 +16002,21 @@
15880 16002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
15881 16003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
15882 16004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
15883 16005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Free memory.
15884 16006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
15885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void memsys3Free(void *pPrior){
16007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void memsys3Free(void *pPrior){
15886 16008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPrior );
15887 16009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memsys3Enter();
15888 16010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memsys3FreeUnsafe(pPrior);
15889 16011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memsys3Leave();
15890 16012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
15891 16013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
15892 16014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
15893 16015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the size of an existing memory allocation
15894 16016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
15895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *memsys3Realloc(void *pPrior, int nBytes){
16017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void *memsys3Realloc(void *pPrior, int nBytes){
15896 16018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOld;
15897 16019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p;
15898 16020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPrior==0 ){
15899 16021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3_malloc(nBytes);
15900 16022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -17983,10 +18105,11 @@
17983 18105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
17984 18106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
17985 18107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
17986 18108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Memory allocation functions used throughout sqlite.
17987 18109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
18110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdarg.h> */
17988 18111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17989 18112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17990 18113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Attempt to release up to n bytes of non-essential memory currently
17991 18114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** held by SQLite. An example of non-essential memory is memory used to
17992 18115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cache database pages that are not currently in use.
@@ -19960,10 +20083,11 @@
19960 20083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** BOM or Byte Order Mark:
19961 20084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 0xff 0xfe little-endian utf-16 follows
19962 20085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 0xfe 0xff big-endian utf-16 follows
19963 20086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19964 20087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
19965 20089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19966 20090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_AMALGAMATION
19967 20091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19968 20092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following constant value is used by the SQLITE_BIGENDIAN and
19969 20093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_LITTLEENDIAN macros.
@@ -20502,10 +20626,11 @@
20502 20626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
20503 20627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains functions for allocating memory, comparing
20504 20628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** strings, and stuff like that.
20505 20629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
20506 20630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdarg.h> */
20507 20632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_HAVE_ISNAN
20508 20633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <math.h>
20509 20634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20510 20635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20511 20636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -21634,26 +21759,32 @@
21634 21759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return -x;
21635 21760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
21636 21761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
21637 21762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_8_3_NAMES
21638 21763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
21639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If SQLITE_ENABLE_8_3_NAME is set at compile-time and if the database
21764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_ENABLE_8_3_NAMES is set at compile-time and if the database
21640 21765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** filename in zBaseFilename is a URI with the "8_3_names=1" parameter and
21641 21766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if filename in z[] has a suffix (a.k.a. "extension") that is longer than
21642 21767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** three characters, then shorten the suffix on z[] to be the last three
21643 21768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** characters of the original suffix.
21769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
21770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_ENABLE_8_3_NAMES is set to 2 at compile-time, then always
21771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** do the suffix shortening regardless of URI parameter.
21644 21772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
21645 21773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Examples:
21646 21774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
21647 21775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test.db-journal => test.nal
21648 21776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test.db-wal => test.wal
21649 21777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test.db-shm => test.shm
21650 21778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
21651 21779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3FileSuffix3(const char *zBaseFilename, char *z){
21780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_8_3_NAMES<2
21652 21781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zOk;
21653 21782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zOk = sqlite3_uri_parameter(zBaseFilename, "8_3_names");
21654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zOk && sqlite3GetBoolean(zOk) ){
21783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zOk && sqlite3GetBoolean(zOk) )
21784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
21785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
21655 21786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, sz;
21656 21787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sz = sqlite3Strlen30(z);
21657 21788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=sz-1; i>0 && z[i]!='/' && z[i]!='.'; i--){}
21658 21789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z[i]=='.' && ALWAYS(sz>i+4) ) memcpy(&z[i+1], &z[sz-3], 4);
21659 21790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -21674,10 +21805,11 @@
21674 21805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
21675 21806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
21676 21807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the implementation of generic hash-tables
21677 21808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** used in SQLite.
21678 21809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
21810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
21679 21811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
21680 21812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Turn bulk memory into a hash table object by initializing the
21681 21813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fields of the Hash structure.
21682 21814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
21683 21815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "pNew" is a pointer to the hash table that is to be initialized.
@@ -21982,52 +22114,52 @@
21982 22114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 35 */ "ReadCookie",
21983 22115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 36 */ "SetCookie",
21984 22116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 37 */ "VerifyCookie",
21985 22117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 38 */ "OpenRead",
21986 22118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 39 */ "OpenWrite",
21987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 40 */ "OpenAutoindex",
21988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 41 */ "OpenEphemeral",
21989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 42 */ "OpenPseudo",
21990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 43 */ "Close",
21991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 44 */ "SeekLt",
21992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 45 */ "SeekLe",
21993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 46 */ "SeekGe",
21994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 47 */ "SeekGt",
21995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 48 */ "Seek",
21996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 49 */ "NotFound",
21997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 50 */ "Found",
21998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 51 */ "IsUnique",
21999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 52 */ "NotExists",
22000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 53 */ "Sequence",
22001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 54 */ "NewRowid",
22002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 55 */ "Insert",
22003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 56 */ "InsertInt",
22004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 57 */ "Delete",
22005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 58 */ "ResetCount",
22006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 59 */ "RowKey",
22007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 60 */ "RowData",
22008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 61 */ "Rowid",
22009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 62 */ "NullRow",
22010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 63 */ "Last",
22011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 64 */ "Sort",
22012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 65 */ "Rewind",
22013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 66 */ "Prev",
22014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 67 */ "Next",
22119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 40 */ "OpenSorter",
22120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 41 */ "OpenAutoindex",
22121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 42 */ "OpenEphemeral",
22122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 43 */ "OpenPseudo",
22123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 44 */ "Close",
22124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 45 */ "SeekLt",
22125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 46 */ "SeekLe",
22126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 47 */ "SeekGe",
22127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 48 */ "SeekGt",
22128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 49 */ "Seek",
22129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 50 */ "NotFound",
22130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 51 */ "Found",
22131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 52 */ "IsUnique",
22132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 53 */ "NotExists",
22133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 54 */ "Sequence",
22134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 55 */ "NewRowid",
22135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 56 */ "Insert",
22136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 57 */ "InsertInt",
22137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 58 */ "Delete",
22138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 59 */ "ResetCount",
22139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 60 */ "RowKey",
22140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 61 */ "RowData",
22141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 62 */ "Rowid",
22142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 63 */ "NullRow",
22143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 64 */ "Last",
22144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 65 */ "Sort",
22145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 66 */ "Rewind",
22146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 67 */ "Prev",
22015 22147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 68 */ "Or",
22016 22148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 69 */ "And",
22017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 70 */ "IdxInsert",
22018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 71 */ "IdxDelete",
22019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 72 */ "IdxRowid",
22149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 70 */ "Next",
22150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 71 */ "IdxInsert",
22151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 72 */ "IdxDelete",
22020 22152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 73 */ "IsNull",
22021 22153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 74 */ "NotNull",
22022 22154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 75 */ "Ne",
22023 22155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 76 */ "Eq",
22024 22156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 77 */ "Gt",
22025 22157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 78 */ "Le",
22026 22158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 79 */ "Lt",
22027 22159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 80 */ "Ge",
22028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 81 */ "IdxLT",
22160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 81 */ "IdxRowid",
22029 22161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 82 */ "BitAnd",
22030 22162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 83 */ "BitOr",
22031 22163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 84 */ "ShiftLeft",
22032 22164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 85 */ "ShiftRight",
22033 22165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 86 */ "Add",
@@ -22034,58 +22166,58 @@
22034 22166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 87 */ "Subtract",
22035 22167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 88 */ "Multiply",
22036 22168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 89 */ "Divide",
22037 22169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 90 */ "Remainder",
22038 22170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 91 */ "Concat",
22039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 92 */ "IdxGE",
22171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 92 */ "IdxLT",
22040 22172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 93 */ "BitNot",
22041 22173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 94 */ "String8",
22042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 95 */ "Destroy",
22043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 96 */ "Clear",
22044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 97 */ "CreateIndex",
22045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 98 */ "CreateTable",
22046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 99 */ "ParseSchema",
22047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 100 */ "LoadAnalysis",
22048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 101 */ "DropTable",
22049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 102 */ "DropIndex",
22050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 103 */ "DropTrigger",
22051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 104 */ "IntegrityCk",
22052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 105 */ "RowSetAdd",
22053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 106 */ "RowSetRead",
22054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 107 */ "RowSetTest",
22055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 108 */ "Program",
22056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 109 */ "Param",
22057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 110 */ "FkCounter",
22058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 111 */ "FkIfZero",
22059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 112 */ "MemMax",
22060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 113 */ "IfPos",
22061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 114 */ "IfNeg",
22062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 115 */ "IfZero",
22063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 116 */ "AggStep",
22064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 117 */ "AggFinal",
22065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 118 */ "Checkpoint",
22066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 119 */ "JournalMode",
22067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 120 */ "Vacuum",
22068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 121 */ "IncrVacuum",
22069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 122 */ "Expire",
22070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 123 */ "TableLock",
22071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 124 */ "VBegin",
22072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 125 */ "VCreate",
22073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 126 */ "VDestroy",
22074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 127 */ "VOpen",
22075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 128 */ "VFilter",
22076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 129 */ "VColumn",
22174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 95 */ "IdxGE",
22175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 96 */ "Destroy",
22176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 97 */ "Clear",
22177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 98 */ "CreateIndex",
22178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 99 */ "CreateTable",
22179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 100 */ "ParseSchema",
22180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 101 */ "LoadAnalysis",
22181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 102 */ "DropTable",
22182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 103 */ "DropIndex",
22183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 104 */ "DropTrigger",
22184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 105 */ "IntegrityCk",
22185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 106 */ "RowSetAdd",
22186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 107 */ "RowSetRead",
22187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 108 */ "RowSetTest",
22188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 109 */ "Program",
22189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 110 */ "Param",
22190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 111 */ "FkCounter",
22191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 112 */ "FkIfZero",
22192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 113 */ "MemMax",
22193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 114 */ "IfPos",
22194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 115 */ "IfNeg",
22195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 116 */ "IfZero",
22196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 117 */ "AggStep",
22197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 118 */ "AggFinal",
22198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 119 */ "Checkpoint",
22199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 120 */ "JournalMode",
22200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 121 */ "Vacuum",
22201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 122 */ "IncrVacuum",
22202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 123 */ "Expire",
22203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 124 */ "TableLock",
22204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 125 */ "VBegin",
22205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 126 */ "VCreate",
22206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 127 */ "VDestroy",
22207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 128 */ "VOpen",
22208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 129 */ "VFilter",
22077 22209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 130 */ "Real",
22078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 131 */ "VNext",
22079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 132 */ "VRename",
22080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 133 */ "VUpdate",
22081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 134 */ "Pagecount",
22082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 135 */ "MaxPgcnt",
22083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ "Trace",
22084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 137 */ "Noop",
22085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 138 */ "Explain",
22086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 139 */ "NotUsed_139",
22210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 131 */ "VColumn",
22211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 132 */ "VNext",
22212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 133 */ "VRename",
22213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 134 */ "VUpdate",
22214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 135 */ "Pagecount",
22215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ "MaxPgcnt",
22216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 137 */ "Trace",
22217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 138 */ "Noop",
22218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 139 */ "Explain",
22087 22219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 140 */ "NotUsed_140",
22088 22220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 141 */ "ToText",
22089 22221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 142 */ "ToBlob",
22090 22222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 143 */ "ToNumeric",
22091 22223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 144 */ "ToInt",
@@ -22183,14 +22315,17 @@
22183 22315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef MEMORY_DEBUG
22184 22316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
22185 22317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22186 22318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22187 22319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
22188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3OSTrace = 0;
22189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
22320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifndef SQLITE_DEBUG_OS_TRACE
22321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_DEBUG_OS_TRACE 0
22322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
22323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
22324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
22190 22325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
22191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X)
22326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X)
22192 22327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22193 22328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22194 22329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
22195 22330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for performance tracing. Normally turned off. Only works
22196 22331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on i486 hardware.
@@ -24343,10 +24478,11 @@
24343 24478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24344 24479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/types.h>
24345 24480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/stat.h>
24346 24481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <fcntl.h>
24347 24482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unistd.h>
24483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <time.h> */
24348 24484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/time.h>
24349 24485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <errno.h>
24350 24486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WAL
24351 24487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/mman.h>
24352 24488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -24364,10 +24500,14 @@
24364 24500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24365 24501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(__APPLE__) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
24366 24502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <sys/mount.h>
24367 24503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24368 24504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef HAVE_UTIME
24506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # include <utime.h>
24507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24369 24509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24370 24510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allowed values of unixFile.fsFlags
24371 24511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24372 24512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FSFLAGS_IS_MSDOS 0x1
24373 24513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -24374,10 +24514,11 @@
24374 24514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24375 24515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If we are to be thread-safe, include the pthreads header and define
24376 24516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the SQLITE_UNIX_THREADS macro.
24377 24517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24378 24518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_THREADSAFE
24519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* # include <pthread.h> */
24379 24520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_UNIX_THREADS 1
24380 24521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24381 24522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24382 24523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24383 24524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Default permissions when creating a new file
@@ -24429,11 +24570,10 @@
24429 24570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct unixFile unixFile;
24430 24571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct unixFile {
24431 24572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_io_methods const *pMethod; /* Always the first entry */
24432 24573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixInodeInfo *pInode; /* Info about locks on this inode */
24433 24574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int h; /* The file descriptor */
24434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd; /* File descriptor for the directory */
24435 24575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char eFileLock; /* The type of lock held on this fd */
24436 24576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char ctrlFlags; /* Behavioral bits. UNIXFILE_* flags */
24437 24577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lastErrno; /* The unix errno from last I/O error */
24438 24578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *lockingContext; /* Locking style specific state */
24439 24579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnixUnusedFd *pUnused; /* Pre-allocated UnixUnusedFd */
@@ -24471,12 +24611,18 @@
24471 24611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
24472 24612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24473 24613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24474 24614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allowed values for the unixFile.ctrlFlags bitmask:
24475 24615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define UNIXFILE_EXCL 0x01 /* Connections from one process only */
24477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define UNIXFILE_RDONLY 0x02 /* Connection is read only */
24616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_EXCL 0x01 /* Connections from one process only */
24617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_RDONLY 0x02 /* Connection is read only */
24618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define UNIXFILE_PERSIST_WAL 0x04 /* Persistent WAL mode */
24619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_DIRSYNC
24620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define UNIXFILE_DIRSYNC 0x08 /* Directory sync needed */
24621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
24622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define UNIXFILE_DIRSYNC 0x00
24623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24478 24624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24479 24625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24480 24626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Include code that is common to all os_*.c files
24481 24627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24482 24628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include os_common.h in the middle of os_unix.c ***************/
@@ -24511,14 +24657,17 @@
24511 24657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef MEMORY_DEBUG
24512 24658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
24513 24659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24514 24660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24515 24661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
24516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3OSTrace = 0;
24517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
24662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifndef SQLITE_DEBUG_OS_TRACE
24663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_DEBUG_OS_TRACE 0
24664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
24665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
24666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
24518 24667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
24519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X)
24668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X)
24520 24669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24521 24670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24522 24671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24523 24672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for performance tracing. Normally turned off. Only works
24524 24673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on i486 hardware.
@@ -24723,10 +24872,13 @@
24723 24872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24724 24873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int posixOpen(const char *zFile, int flags, int mode){
24725 24874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return open(zFile, flags, mode);
24726 24875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
24727 24876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Forward reference */
24878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int openDirectory(const char*, int*);
24879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24728 24880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24729 24881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Many system calls are accessed through pointer-to-functions so that
24730 24882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** they may be overridden at runtime to facilitate fault injection during
24731 24883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** testing and sandboxing. The following array holds the names and pointers
24732 24884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to all overrideable system calls.
@@ -24819,10 +24971,16 @@
24819 24971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
24820 24972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "fallocate", (sqlite3_syscall_ptr)0, 0 },
24821 24973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24822 24974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osFallocate ((int(*)(int,off_t,off_t))aSyscall[15].pCurrent)
24823 24975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "unlink", (sqlite3_syscall_ptr)unlink, 0 },
24977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define osUnlink ((int(*)(const char*))aSyscall[16].pCurrent)
24978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "openDirectory", (sqlite3_syscall_ptr)openDirectory, 0 },
24980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define osOpenDirectory ((int(*)(const char*,int*))aSyscall[17].pCurrent)
24981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
24824 24982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}; /* End of the overrideable system calls */
24825 24983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24826 24984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
24827 24985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the xSetSystemCall() method of sqlite3_vfs for all of the
24828 24986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "unix" VFSes. Return SQLITE_OK opon successfully updating the
@@ -25103,11 +25261,13 @@
25103 25261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case EINVAL:
25104 25262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case ENOTCONN:
25105 25263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case ENODEV:
25106 25264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case ENXIO:
25107 25265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case ENOENT:
25266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef ESTALE /* ESTALE is not defined on Interix systems */
25108 25267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case ESTALE:
25268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
25109 25269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case ENOSYS:
25110 25270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* these should force the client to close the file and reconnect */
25111 25271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25112 25272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default:
25113 25273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqliteIOErr;
@@ -26173,22 +26333,18 @@
26173 26333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** even on VxWorks. A mutex will be acquired on VxWorks by the
26174 26334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** vxworksReleaseFileId() routine.
26175 26335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
26176 26336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int closeUnixFile(sqlite3_file *id){
26177 26337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
26178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile->dirfd>=0 ){
26179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(pFile, pFile->dirfd, __LINE__);
26180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->dirfd=-1;
26181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
26182 26338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->h>=0 ){
26183 26339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(pFile, pFile->h, __LINE__);
26184 26340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->h = -1;
26185 26341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26186 26342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
26187 26343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->pId ){
26188 26344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->isDelete ){
26189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(pFile->pId->zCanonicalName);
26345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(pFile->pId->zCanonicalName);
26190 26346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26191 26347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vxworksReleaseFileId(pFile->pId);
26192 26348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->pId = 0;
26193 26349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26194 26350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -26369,12 +26525,14 @@
26369 26525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If we have any lock, then the lock file already exists. All we have
26370 26526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to do is adjust our internal record of the lock level.
26371 26527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
26372 26528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->eFileLock > NO_LOCK ){
26373 26529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->eFileLock = eFileLock;
26374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if !OS_VXWORKS
26375 26530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Always update the timestamp on the old file */
26531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef HAVE_UTIME
26532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ utime(zLockFile, NULL);
26533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
26376 26534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
utimes(zLockFile, NULL);
26377 26535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
26378 26536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
26379 26537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26380 26538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -26431,11 +26589,11 @@
26431 26589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
26432 26590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26433 26591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26434 26592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* To fully unlock the database, delete the lock file */
26435 26593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( eFileLock==NO_LOCK );
26436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( unlink(zLockFile) ){
26594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( osUnlink(zLockFile) ){
26437 26595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = 0;
26438 26596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tErrno = errno;
26439 26597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ENOENT != tErrno ){
26440 26598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR_UNLOCK;
26441 26599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -26937,15 +27095,16 @@
26937 27095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
26938 27096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int afpCheckReservedLock(sqlite3_file *id, int *pResOut){
26939 27097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
26940 27098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int reserved = 0;
26941 27099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
27100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ afpLockingContext *context;
26942 27101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26943 27102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError( return SQLITE_IOERR_CHECKRESERVEDLOCK; );
26944 27103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26945 27104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
26946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- afpLockingContext *context = (afpLockingContext *) pFile->lockingContext;
27105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ context = (afpLockingContext *) pFile->lockingContext;
26947 27106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( context->reserved ){
26948 27107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResOut = 1;
26949 27108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
26950 27109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26951 27110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixEnterMutex(); /* Because pFile->pInode is shared across threads */
@@ -27081,11 +27240,11 @@
27081 27240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27082 27241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If control gets to this point, then actually go ahead and make
27083 27242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** operating system calls for the specified lock.
27084 27243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27085 27244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eFileLock==SHARED_LOCK ){
27086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int lrc1, lrc2, lrc1Errno;
27245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int lrc1, lrc2, lrc1Errno = 0;
27087 27246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
long lk, mask;
27088 27247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27089 27248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pInode->nShared==0 );
27090 27249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pInode->eFileLock==0 );
27091 27250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -27455,21 +27614,23 @@
27455 27614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(USE_PREAD)
27456 27615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{ got = osPwrite(id->h, pBuf, cnt, offset); }while( got<0 && errno==EINTR );
27457 27616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif defined(USE_PREAD64)
27458 27617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{ got = osPwrite64(id->h, pBuf, cnt, offset);}while( got<0 && errno==EINTR);
27459 27618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
27460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- newOffset = lseek(id->h, offset, SEEK_SET);
27461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SimulateIOError( newOffset-- );
27462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( newOffset!=offset ){
27463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( newOffset == -1 ){
27464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((unixFile*)id)->lastErrno = errno;
27465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
27466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((unixFile*)id)->lastErrno = 0;
27467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
27468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -1;
27469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
27470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{ got = osWrite(id->h, pBuf, cnt); }while( got<0 && errno==EINTR );
27619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do{
27620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ newOffset = lseek(id->h, offset, SEEK_SET);
27621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SimulateIOError( newOffset-- );
27622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( newOffset!=offset ){
27623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( newOffset == -1 ){
27624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((unixFile*)id)->lastErrno = errno;
27625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
27626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((unixFile*)id)->lastErrno = 0;
27627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1;
27629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ got = osWrite(id->h, pBuf, cnt);
27631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( got<0 && errno==EINTR );
27471 27632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
27472 27633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TIMER_END;
27473 27634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( got<0 ){
27474 27635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((unixFile*)id)->lastErrno = errno;
27475 27636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -27666,10 +27827,54 @@
27666 27827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OS_VXWORKS && rc!= -1 ){
27667 27828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = 0;
27668 27829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27669 27830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
27670 27831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
27833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
27834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Open a file descriptor to the directory containing file zFilename.
27835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If successful, *pFd is set to the opened file descriptor and
27836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
27837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
27838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value.
27839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
27840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The directory file descriptor is used for only one thing - to
27841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fsync() a directory to make sure file creation and deletion events
27842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are flushed to disk. Such fsyncs are not needed on newer
27843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** journaling filesystems, but are required on older filesystems.
27844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
27845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine can be overridden using the xSetSysCall interface.
27846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The ability to override this routine was added in support of the
27847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** chromium sandbox. Opening a directory is a security risk (we are
27848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** told) so making it overrideable allows the chromium sandbox to
27849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** replace this routine with a harmless no-op. To make this routine
27850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a no-op, replace it with a stub that returns SQLITE_OK but leaves
27851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** *pFd set to a negative number.
27852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
27853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_OK is returned, the caller is responsible for closing
27854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the file descriptor *pFd using close().
27855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
27856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int openDirectory(const char *zFilename, int *pFd){
27857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
27858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fd = -1;
27859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char zDirname[MAX_PATHNAME+1];
27860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
27861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
27862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
27863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii>0 ){
27864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDirname[ii] = '\0';
27865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
27866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fd>=0 ){
27867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef FD_CLOEXEC
27868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
27869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
27870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
27871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pFd = fd;
27874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
27875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27671 27876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27672 27877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27673 27878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Make sure all writes to a particular file are committed to disk.
27674 27879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
27675 27880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If dataOnly==0 then both the file itself and its metadata (file
@@ -27707,32 +27912,27 @@
27707 27912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError( rc=1 );
27708 27913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
27709 27914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = errno;
27710 27915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return unixLogError(SQLITE_IOERR_FSYNC, "full_fsync", pFile->zPath);
27711 27916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile->dirfd>=0 ){
27713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSTRACE(("DIRSYNC %-3d (have_fullfsync=%d fullsync=%d)\n", pFile->dirfd,
27917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
27918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Also fsync the directory containing the file if the DIRSYNC flag
27919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is set. This is a one-time occurrance. Many systems (examples: AIX)
27920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are unable to fsync a directory, so ignore errors on the fsync.
27921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
27922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFile->ctrlFlags & UNIXFILE_DIRSYNC ){
27923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int dirfd;
27924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("DIRSYNC %s (have_fullfsync=%d fullsync=%d)\n", pFile->zPath,
27714 27925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
HAVE_FULLFSYNC, isFullsync));
27715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_DISABLE_DIRSYNC
27716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The directory sync is only attempted if full_fsync is
27717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** turned off or unavailable. If a full_fsync occurred above,
27718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then the directory sync is superfluous.
27719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
27720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (!HAVE_FULLFSYNC || !isFullsync) && full_fsync(pFile->dirfd,0,0) ){
27721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
27722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** We have received multiple reports of fsync() returning
27723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** errors when applied to directories on certain file systems.
27724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A failed directory sync is not a big deal. So it seems
27725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** better to ignore the error. Ticket #1657
27726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
27727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* pFile->lastErrno = errno; */
27728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* return SQLITE_IOERR; */
27729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
27730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
27731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Only need to sync once, so close the directory when we are done */
27732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(pFile, pFile->dirfd, __LINE__);
27733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->dirfd = -1;
27926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = osOpenDirectory(pFile->zPath, &dirfd);
27927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && dirfd>=0 ){
27928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ full_fsync(dirfd, 0, 0);
27929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ robust_close(pFile, dirfd, __LINE__);
27930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( rc==SQLITE_CANTOPEN ){
27931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_OK;
27932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
27933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags &= ~UNIXFILE_DIRSYNC;
27734 27934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27735 27935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
27736 27936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27737 27937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27738 27938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -27810,15 +28010,13 @@
27810 28010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int proxyFileControl(sqlite3_file*,int,void*);
27811 28011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
27812 28012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27813 28013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27814 28014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is called to handle the SQLITE_FCNTL_SIZE_HINT
27815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** file-control operation.
27816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
27817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the user has configured a chunk-size for this file, it could be
27818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that the file needs to be extended at this point. Otherwise, the
27819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_FCNTL_SIZE_HINT operation is a no-op for Unix.
28015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** file-control operation. Enlarge the database to nBytes in size
28016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (rounded up to the next chunk-size). If the database is already
28017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nBytes or larger, this routine is a no-op.
27820 28018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27821 28019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fcntlSizeHint(unixFile *pFile, i64 nByte){
27822 28020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->szChunk ){
27823 28021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 nSize; /* Required file size */
27824 28022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct stat buf; /* Used to hold return values of fstat() */
@@ -27866,25 +28064,41 @@
27866 28064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
27867 28065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
27868 28066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Information and control of an open file handle.
27869 28067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
27870 28068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int unixFileControl(sqlite3_file *id, int op, void *pArg){
28069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unixFile *pFile = (unixFile*)id;
27871 28070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( op ){
27872 28071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_LOCKSTATE: {
27873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = ((unixFile*)id)->eFileLock;
28072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->eFileLock;
27874 28073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
27875 28074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27876 28075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_LAST_ERRNO: {
27877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = ((unixFile*)id)->lastErrno;
28076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->lastErrno;
27878 28077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
27879 28078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27880 28079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_CHUNK_SIZE: {
27881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((unixFile*)id)->szChunk = *(int *)pArg;
28080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->szChunk = *(int *)pArg;
27882 28081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
27883 28082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27884 28083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_SIZE_HINT: {
27885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return fcntlSizeHint((unixFile *)id, *(i64 *)pArg);
28084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
28085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SimulateIOErrorBenign(1);
28086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fcntlSizeHint(pFile, *(i64 *)pArg);
28087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SimulateIOErrorBenign(0);
28088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
28089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
28090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_FCNTL_PERSIST_WAL: {
28091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPersist = *(int*)pArg;
28092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bPersist<0 ){
28093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = (pFile->ctrlFlags & UNIXFILE_PERSIST_WAL)!=0;
28094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( bPersist==0 ){
28095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags &= ~UNIXFILE_PERSIST_WAL;
28096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
28097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->ctrlFlags |= UNIXFILE_PERSIST_WAL;
28098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
28099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
27886 28100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
27887 28101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
27888 28102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The pager calls this method to signal that it has done
27889 28103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a rollback and that the database is therefore unchanged and
27890 28104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it hence it is OK for the transaction change counter to be
@@ -28096,11 +28310,11 @@
28096 28310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixShmNode *p = pFd->pInode->pShmNode;
28097 28311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( unixMutexHeld() );
28098 28312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p && p->nRef==0 ){
28099 28313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
28100 28314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pInode==pFd->pInode );
28101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->mutex ) sqlite3_mutex_free(p->mutex);
28315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_free(p->mutex);
28102 28316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nRegion; i++){
28103 28317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->h>=0 ){
28104 28318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
munmap(p->apRegion[i], p->szRegion);
28105 28319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
28106 28320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p->apRegion[i]);
@@ -28565,11 +28779,11 @@
28565 28779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** shared-memory file, too */
28566 28780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixEnterMutex();
28567 28781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pShmNode->nRef>0 );
28568 28782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->nRef--;
28569 28783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pShmNode->nRef==0 ){
28570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( deleteFlag && pShmNode->h>=0 ) unlink(pShmNode->zFilename);
28784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( deleteFlag && pShmNode->h>=0 ) osUnlink(pShmNode->zFilename);
28571 28785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixShmPurge(pDbFd);
28572 28786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28573 28787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixLeaveMutex();
28574 28788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28575 28789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
@@ -28878,11 +29092,11 @@
28878 29092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Initialize the contents of the unixFile structure pointed to by pId.
28879 29093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
28880 29094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fillInUnixFile(
28881 29095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs *pVfs, /* Pointer to vfs object */
28882 29096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int h, /* Open file descriptor of file being opened */
28883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd, /* Directory file descriptor */
29097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int syncDir, /* True to sync directory on first sync */
28884 29098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_file *pId, /* Write to the unixFile structure here */
28885 29099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFilename, /* Name of the file being opened */
28886 29100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int noLock, /* Omit locking if true */
28887 29101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isDelete, /* Delete on close if true */
28888 29102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isReadOnly /* True if the file is opened read-only */
@@ -28909,20 +29123,22 @@
28909 29123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zFilename==0 || zFilename[0]=='/' );
28910 29124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
28911 29125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28912 29126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("OPEN %-3d %s\n", h, zFilename));
28913 29127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->h = h;
28914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->dirfd = dirfd;
28915 29128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->zPath = zFilename;
28916 29129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( memcmp(pVfs->zName,"unix-excl",10)==0 ){
28917 29130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->ctrlFlags = UNIXFILE_EXCL;
28918 29131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
28919 29132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->ctrlFlags = 0;
28920 29133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28921 29134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isReadOnly ){
28922 29135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->ctrlFlags |= UNIXFILE_RDONLY;
28923 29136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( syncDir ){
29138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->ctrlFlags |= UNIXFILE_DIRSYNC;
29139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
28924 29140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28925 29141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
28926 29142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pId = vxworksFindFileId(zFilename);
28927 29143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew->pId==0 ){
28928 29144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
noLock = 1;
@@ -29045,56 +29261,24 @@
29045 29261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->lastErrno = 0;
29046 29262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
29047 29263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29048 29264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( h>=0 ) robust_close(pNew, h, __LINE__);
29049 29265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h = -1;
29050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(zFilename);
29266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(zFilename);
29051 29267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete = 0;
29052 29268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29053 29269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->isDelete = isDelete;
29054 29270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29055 29271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dirfd>=0 ) robust_close(pNew, dirfd, __LINE__);
29057 29272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( h>=0 ) robust_close(pNew, h, __LINE__);
29058 29273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
29059 29274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pMethod = pLockingStyle;
29060 29275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OpenCounter(+1);
29061 29276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29062 29277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
29063 29278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29064 29279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
29066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Open a file descriptor to the directory containing file zFilename.
29067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If successful, *pFd is set to the opened file descriptor and
29068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_OK is returned. If an error occurs, either SQLITE_NOMEM
29069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or SQLITE_CANTOPEN is returned and *pFd is set to an undefined
29070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value.
29071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
29072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If SQLITE_OK is returned, the caller is responsible for closing
29073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the file descriptor *pFd using close().
29074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
29075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int openDirectory(const char *zFilename, int *pFd){
29076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int ii;
29077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int fd = -1;
29078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char zDirname[MAX_PATHNAME+1];
29079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
29080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_snprintf(MAX_PATHNAME, zDirname, "%s", zFilename);
29081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(ii=(int)strlen(zDirname); ii>1 && zDirname[ii]!='/'; ii--);
29082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ii>0 ){
29083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zDirname[ii] = '\0';
29084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fd = robust_open(zDirname, O_RDONLY|O_BINARY, 0);
29085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( fd>=0 ){
29086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef FD_CLOEXEC
29087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
29088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
29089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSTRACE(("OPENDIR %-3d %s\n", fd, zDirname));
29090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pFd = fd;
29093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (fd>=0?SQLITE_OK:unixLogError(SQLITE_CANTOPEN_BKPT, "open", zDirname));
29094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
29096 29280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
29097 29281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the name of a directory in which to put temporary files.
29098 29282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If no suitable temporary file directory can be found, return NULL.
29099 29283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29100 29284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char *unixTempFileDir(void){
@@ -29205,11 +29389,11 @@
29205 29389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ignored and -1 is returned. The caller will try to open a new file
29206 29390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** descriptor on the same path, fail, and return an error to SQLite.
29207 29391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
29208 29392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Even if a subsequent open() call does succeed, the consequences of
29209 29393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not searching for a resusable file descriptor are not dire. */
29210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==stat(zPath, &sStat) ){
29394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==osStat(zPath, &sStat) ){
29211 29395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixInodeInfo *pInode;
29212 29396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29213 29397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixEnterMutex();
29214 29398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pInode = inodeList;
29215 29399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pInode && (pInode->fileId.dev!=sStat.st_dev
@@ -29281,11 +29465,11 @@
29281 29465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( nDb>0 && zPath[nDb]!='-' ) nDb--;
29282 29466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nDb==0 ) return SQLITE_OK;
29283 29467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(zDb, zPath, nDb);
29284 29468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zDb[nDb] = '\0';
29285 29469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==stat(zDb, &sStat) ){
29470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==osStat(zDb, &sStat) ){
29287 29471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pMode = sStat.st_mode & 0777;
29288 29472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
29289 29473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR_FSTAT;
29290 29474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29291 29475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & SQLITE_OPEN_DELETEONCLOSE ){
@@ -29323,11 +29507,10 @@
29323 29507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags, /* Input flags to control the opening */
29324 29508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pOutFlags /* Output flags returned to SQLite core */
29325 29509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
29326 29510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *p = (unixFile *)pFile;
29327 29511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fd = -1; /* File descriptor returned by open() */
29328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd = -1; /* Directory file descriptor */
29329 29512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int openFlags = 0; /* Flags to pass to open() */
29330 29513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eType = flags&0xFFFFFF00; /* Type of file to open */
29331 29514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int noLock; /* True to omit locking primitives */
29332 29515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Function Return Code */
29333 29516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -29337,16 +29520,19 @@
29337 29520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isReadonly = (flags & SQLITE_OPEN_READONLY);
29338 29521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isReadWrite = (flags & SQLITE_OPEN_READWRITE);
29339 29522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_ENABLE_LOCKING_STYLE
29340 29523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isAutoProxy = (flags & SQLITE_OPEN_AUTOPROXY);
29341 29524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
29526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct statfs fsInfo;
29527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
29342 29528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29343 29529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If creating a master or main-file journal, this function will open
29344 29530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a file-descriptor on the directory too. The first time unixSync()
29345 29531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is called the directory file descriptor will be fsync()ed and close()d.
29346 29532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isOpenDirectory = (isCreate && (
29533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int syncDir = (isCreate && (
29348 29534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eType==SQLITE_OPEN_MASTER_JOURNAL
29349 29535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| eType==SQLITE_OPEN_MAIN_JOURNAL
29350 29536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| eType==SQLITE_OPEN_WAL
29351 29537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
29352 29538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -29396,11 +29582,11 @@
29396 29582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29397 29583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29398 29584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pUnused = pUnused;
29399 29585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( !zName ){
29400 29586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If zName is NULL, the upper layer is requesting a temp file. */
29401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(isDelete && !isOpenDirectory);
29587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(isDelete && !syncDir);
29402 29588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = unixGetTempname(MAX_PATHNAME+1, zTmpname);
29403 29589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29404 29590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
29405 29591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29406 29592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = zTmpname;
@@ -29452,44 +29638,29 @@
29452 29638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29453 29639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isDelete ){
29454 29640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
29455 29641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPath = zName;
29456 29642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
29457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(zName);
29643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(zName);
29458 29644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29459 29645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29460 29646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_ENABLE_LOCKING_STYLE
29461 29647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else{
29462 29648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->openFlags = openFlags;
29463 29649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29464 29650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29465 29651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isOpenDirectory ){
29467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = openDirectory(zPath, &dirfd);
29468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ){
29469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* It is safe to close fd at this point, because it is guaranteed not
29470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to be open on a database file. If it were open on a database file,
29471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it would not be safe to close as this would release any locks held
29472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** on the file by this process. */
29473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( eType!=SQLITE_OPEN_MAIN_DB );
29474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(p, fd, __LINE__);
29475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto open_finished;
29476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
29479 29652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef FD_CLOEXEC
29480 29653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osFcntl(fd, F_SETFD, osFcntl(fd, F_GETFD, 0) | FD_CLOEXEC);
29481 29654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29482 29655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29483 29656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
noLock = eType!=SQLITE_OPEN_MAIN_DB;
29484 29657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29485 29658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29486 29659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(__APPLE__) || SQLITE_ENABLE_LOCKING_STYLE
29487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct statfs fsInfo;
29488 29660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fstatfs(fd, &fsInfo) == -1 ){
29489 29661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((unixFile*)pFile)->lastErrno = errno;
29490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dirfd>=0 ) robust_close(p, dirfd, __LINE__);
29491 29662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(p, fd, __LINE__);
29492 29663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR_ACCESS;
29493 29664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29494 29665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if (0 == strncmp("msdos", fsInfo.f_fstypename, 5)) {
29495 29666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((unixFile*)pFile)->fsFlags |= SQLITE_FSFLAGS_IS_MSDOS;
@@ -29507,31 +29678,27 @@
29507 29678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_FORCE_PROXY_LOCKING==1 means force always use proxy, 0 means
29508 29679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** never use proxy, NULL means use proxy for non-local files only. */
29509 29680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( envforce!=NULL ){
29510 29681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
useProxy = atoi(envforce)>0;
29511 29682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
29512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct statfs fsInfo;
29513 29683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( statfs(zPath, &fsInfo) == -1 ){
29514 29684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* In theory, the close(fd) call is sub-optimal. If the file opened
29515 29685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with fd is a database file, and there are other connections open
29516 29686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on that file that are currently holding advisory locks on it,
29517 29687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then the call to close() will cancel those locks. In practice,
29518 29688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we're assuming that statfs() doesn't fail very often. At least
29519 29689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not while other file descriptors opened by the same process on
29520 29690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same file are working. */
29521 29691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->lastErrno = errno;
29522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( dirfd>=0 ){
29523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- robust_close(p, dirfd, __LINE__);
29524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
29525 29692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(p, fd, __LINE__);
29526 29693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR_ACCESS;
29527 29694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto open_finished;
29528 29695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29529 29696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
useProxy = !(fsInfo.f_flags&MNT_LOCAL);
29530 29697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29531 29698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( useProxy ){
29532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock,
29699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fillInUnixFile(pVfs, fd, syncDir, pFile, zPath, noLock,
29533 29700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete, isReadonly);
29534 29701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29535 29702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = proxyTransformUnixFile((unixFile*)pFile, ":auto:");
29536 29703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29537 29704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Use unixClose to clean up the resources added in fillInUnixFile
@@ -29545,11 +29712,11 @@
29545 29712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto open_finished;
29546 29713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29547 29714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29548 29715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29549 29716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fillInUnixFile(pVfs, fd, dirfd, pFile, zPath, noLock,
29717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fillInUnixFile(pVfs, fd, syncDir, pFile, zPath, noLock,
29551 29718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete, isReadonly);
29552 29719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
open_finished:
29553 29720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
29554 29721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p->pUnused);
29555 29722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -29567,17 +29734,17 @@
29567 29734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int dirSync /* If true, fsync() directory after deleting file */
29568 29735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
29569 29736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
29570 29737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(NotUsed);
29571 29738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError(return SQLITE_IOERR_DELETE);
29572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( unlink(zPath)==(-1) && errno!=ENOENT ){
29739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( osUnlink(zPath)==(-1) && errno!=ENOENT ){
29573 29740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return unixLogError(SQLITE_IOERR_DELETE, "unlink", zPath);
29574 29741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29575 29742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_DISABLE_DIRSYNC
29576 29743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( dirSync ){
29577 29744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fd;
29578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = openDirectory(zPath, &fd);
29745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = osOpenDirectory(zPath, &fd);
29579 29746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
29580 29747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if OS_VXWORKS
29581 29748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fsync(fd)==-1 )
29582 29749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
29583 29750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fsync(fd) )
@@ -29584,10 +29751,12 @@
29584 29751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29585 29752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
29586 29753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = unixLogError(SQLITE_IOERR_DIR_FSYNC, "fsync", zPath);
29587 29754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29588 29755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(0, fd, __LINE__);
29756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( rc==SQLITE_CANTOPEN ){
29757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_OK;
29589 29758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29590 29759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29591 29760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
29592 29761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
29593 29762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -29626,11 +29795,11 @@
29626 29795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(!"Invalid flags argument");
29627 29796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29628 29797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResOut = (osAccess(zPath, amode)==0);
29629 29798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags==SQLITE_ACCESS_EXISTS && *pResOut ){
29630 29799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct stat buf;
29631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==stat(zPath, &buf) && buf.st_size==0 ){
29800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==osStat(zPath, &buf) && buf.st_size==0 ){
29632 29801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResOut = 0;
29633 29802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29634 29803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29635 29804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
29636 29805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -30145,11 +30314,10 @@
30145 30314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *path, /* path for the new unixFile */
30146 30315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile **ppFile, /* unixFile created and returned by ref */
30147 30316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int islockfile /* if non zero missing dirs will be created */
30148 30317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
) {
30149 30318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fd = -1;
30150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int dirfd = -1;
30151 30319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pNew;
30152 30320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
30153 30321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int openFlags = O_RDWR | O_CREAT;
30154 30322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs dummyVfs;
30155 30323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int terrno = 0;
@@ -30210,11 +30378,11 @@
30210 30378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dummyVfs.zName = "dummy";
30211 30379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUnused->fd = fd;
30212 30380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pUnused->flags = openFlags;
30213 30381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pUnused = pUnused;
30214 30382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fillInUnixFile(&dummyVfs, fd, dirfd, (sqlite3_file*)pNew, path, 0, 0, 0);
30383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fillInUnixFile(&dummyVfs, fd, 0, (sqlite3_file*)pNew, path, 0, 0, 0);
30216 30384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
30217 30385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppFile = pNew;
30218 30386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
30219 30387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30220 30388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end_create_proxy:
@@ -30250,10 +30418,12 @@
30250 30418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pError = err;
30251 30419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30252 30420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR;
30253 30421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30254 30422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
30424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(pError);
30255 30425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
30256 30426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
30257 30427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* simulate multiple hosts by creating unique hostid file paths */
30258 30428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_hostid_num != 0){
30259 30429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF));
@@ -30324,11 +30494,11 @@
30324 30494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
conchFile->openFlags = O_RDWR | O_CREAT;
30325 30495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30326 30496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end_breaklock:
30327 30497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
30328 30498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fd>=0 ){
30329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unlink(tPath);
30499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osUnlink(tPath);
30330 30500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(pFile, fd, __LINE__);
30331 30501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30332 30502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fprintf(stderr, "failed to break stale lock on %s, %s\n", cPath, errmsg);
30333 30503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30334 30504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -30342,10 +30512,11 @@
30342 30512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *conchFile = pCtx->conchFile;
30343 30513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
30344 30514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTries = 0;
30345 30515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct timespec conchModTime;
30346 30516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&conchModTime, 0, sizeof(conchModTime));
30347 30518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do {
30348 30519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = conchFile->pMethod->xLock((sqlite3_file*)conchFile, lockType);
30349 30520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTries ++;
30350 30521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_BUSY ){
30351 30522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the lock failed (busy):
@@ -30573,15 +30744,16 @@
30573 30744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
conchFile->pMethod->xUnlock((sqlite3_file*)conchFile, SHARED_LOCK);
30574 30745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30575 30746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end_takeconch:
30576 30747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("TRANSPROXY: CLOSE %d\n", pFile->h));
30577 30748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && pFile->openFlags ){
30749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int fd;
30578 30750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->h>=0 ){
30579 30751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
robust_close(pFile, pFile->h, __LINE__);
30580 30752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30581 30753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->h = -1;
30582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int fd = robust_open(pCtx->dbPath, pFile->openFlags,
30754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fd = robust_open(pCtx->dbPath, pFile->openFlags,
30583 30755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_DEFAULT_FILE_PERMISSIONS);
30584 30756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("TRANSPROXY: OPEN %d\n", fd));
30585 30757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fd>=0 ){
30586 30758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->h = fd;
30587 30759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -31147,11 +31319,11 @@
31147 31319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
31148 31320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int i; /* Loop counter */
31149 31321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31150 31322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Double-check that the aSyscall[] array has been constructed
31151 31323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** correctly. See ticket [bb3a86e890c8e96ab] */
31152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ArraySize(aSyscall)==16 );
31324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ArraySize(aSyscall)==18 );
31153 31325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31154 31326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Register all VFSes defined in the aVfs[] array */
31155 31327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<(sizeof(aVfs)/sizeof(sqlite3_vfs)); i++){
31156 31328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs_register(&aVfs[i], i==0);
31157 31329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -31264,14 +31436,17 @@
31264 31436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef MEMORY_DEBUG
31265 31437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
31266 31438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31267 31439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31268 31440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
31269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3OSTrace = 0;
31270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
31441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifndef SQLITE_DEBUG_OS_TRACE
31442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_DEBUG_OS_TRACE 0
31443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
31444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
31445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
31271 31446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
31272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OSTRACE(X)
31447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X)
31273 31448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31274 31449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31275 31450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31276 31451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for performance tracing. Normally turned off. Only works
31277 31452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on i486 hardware.
@@ -31479,12 +31654,13 @@
31479 31654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct winFile winFile;
31480 31655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct winFile {
31481 31656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_io_methods *pMethod; /*** Must be first ***/
31482 31657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs *pVfs; /* The VFS used to open this file */
31483 31658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
HANDLE h; /* Handle for accessing the file */
31484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned char locktype; /* Type of lock currently held on this file */
31659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 locktype; /* Type of lock currently held on this file */
31485 31660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
short sharedLockByte; /* Randomly chosen byte used as a shared lock */
31661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 bPersistWal; /* True to persist WAL files */
31486 31662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD lastErrno; /* The Windows errno from the last I/O error */
31487 31663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD sectorSize; /* Sector size of the device file is on */
31488 31664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShm *pShm; /* Instance of shared memory on this file */
31489 31665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPath; /* Full pathname of this file */
31490 31666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */
@@ -31495,10 +31671,80 @@
31495 31671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winceLock local; /* Locks obtained by this instance of winFile */
31496 31672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winceLock *shared; /* Global shared lock memory for the file */
31497 31673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31498 31674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
31499 31675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * If compiled with SQLITE_WIN32_MALLOC on Windows, we will use the
31678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * various Win32 API heap functions instead of our own.
31679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC
31681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * The initial size of the Win32-specific heap. This value may be zero.
31683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_WIN32_HEAP_INIT_SIZE
31685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_WIN32_HEAP_INIT_SIZE ((SQLITE_DEFAULT_CACHE_SIZE) * \
31686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (SQLITE_DEFAULT_PAGE_SIZE) + 4194304)
31687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * The maximum size of the Win32-specific heap. This value may be zero.
31691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_WIN32_HEAP_MAX_SIZE
31693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_WIN32_HEAP_MAX_SIZE (0)
31694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * The extra flags to use in calls to the Win32 heap APIs. This value may be
31698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ * zero for the default behavior.
31699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_WIN32_HEAP_FLAGS
31701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_WIN32_HEAP_FLAGS (0)
31702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The winMemData structure stores information required by the Win32-specific
31706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_mem_methods implementation.
31707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct winMemData winMemData;
31709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct winMemData {
31710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef NDEBUG
31711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 magic; /* Magic number to detect structure corruption. */
31712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HANDLE hHeap; /* The handle to our heap. */
31714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BOOL bOwned; /* Do we own the heap (i.e. destroy it on shutdown)? */
31715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
31716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef NDEBUG
31718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WINMEM_MAGIC 0x42b2830b
31719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static struct winMemData win_mem_data = {
31722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef NDEBUG
31723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WINMEM_MAGIC,
31724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NULL, FALSE
31726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
31727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef NDEBUG
31729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define winMemAssertMagic() assert( win_mem_data.magic==WINMEM_MAGIC )
31730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
31731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define winMemAssertMagic()
31732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define winMemGetHeap() win_mem_data.hHeap
31735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void *winMemMalloc(int nBytes);
31737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void winMemFree(void *pPrior);
31738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void *winMemRealloc(void *pPrior, int nBytes);
31739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMemSize(void *p);
31740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMemRoundup(int n);
31741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMemInit(void *pAppData);
31742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void winMemShutdown(void *pAppData);
31743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void);
31745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_WIN32_MALLOC */
31500 31746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31501 31747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31502 31748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Forward prototypes.
31503 31749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31504 31750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int getSectorSize(
@@ -31547,10 +31793,192 @@
31547 31793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31548 31794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3_os_type==2;
31549 31795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31550 31796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OS_WINCE */
31551 31797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC
31799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Allocate nBytes of memory.
31801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void *winMemMalloc(int nBytes){
31803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HANDLE hHeap;
31804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *p;
31805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemAssertMagic();
31807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hHeap = winMemGetHeap();
31808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=0 );
31809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=INVALID_HANDLE_VALUE );
31810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC_VALIDATE
31811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert ( HeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
31812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nBytes>=0 );
31814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = HeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes);
31815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !p ){
31816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_NOMEM, "failed to HeapAlloc %u bytes (%d), heap=%p",
31817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBytes, GetLastError(), (void*)hHeap);
31818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p;
31820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Free memory.
31824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void winMemFree(void *pPrior){
31826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HANDLE hHeap;
31827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemAssertMagic();
31829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hHeap = winMemGetHeap();
31830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=0 );
31831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=INVALID_HANDLE_VALUE );
31832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC_VALIDATE
31833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert ( HeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) );
31834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pPrior ) return; /* Passing NULL to HeapFree is undefined. */
31836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !HeapFree(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) ){
31837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_NOMEM, "failed to HeapFree block %p (%d), heap=%p",
31838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPrior, GetLastError(), (void*)hHeap);
31839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Change the size of an existing memory allocation
31844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void *winMemRealloc(void *pPrior, int nBytes){
31846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HANDLE hHeap;
31847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *p;
31848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemAssertMagic();
31850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hHeap = winMemGetHeap();
31851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=0 );
31852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=INVALID_HANDLE_VALUE );
31853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC_VALIDATE
31854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert ( HeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior) );
31855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nBytes>=0 );
31857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pPrior ){
31858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = HeapAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, (SIZE_T)nBytes);
31859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
31860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = HeapReAlloc(hHeap, SQLITE_WIN32_HEAP_FLAGS, pPrior, (SIZE_T)nBytes);
31861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !p ){
31863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_NOMEM, "failed to %s %u bytes (%d), heap=%p",
31864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPrior ? "HeapReAlloc" : "HeapAlloc", nBytes, GetLastError(),
31865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void*)hHeap);
31866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p;
31868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the size of an outstanding allocation, in bytes.
31872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMemSize(void *p){
31874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HANDLE hHeap;
31875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SIZE_T n;
31876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemAssertMagic();
31878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hHeap = winMemGetHeap();
31879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=0 );
31880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( hHeap!=INVALID_HANDLE_VALUE );
31881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC_VALIDATE
31882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert ( HeapValidate(hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
31883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !p ) return 0;
31885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = HeapSize(hHeap, SQLITE_WIN32_HEAP_FLAGS, p);
31886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n==(SIZE_T)-1 ){
31887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_NOMEM, "failed to HeapSize block %p (%d), heap=%p",
31888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p, GetLastError(), (void*)hHeap);
31889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
31890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (int)n;
31892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Round up a request size to the next valid allocation size.
31896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMemRoundup(int n){
31898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return n;
31899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Initialize this module.
31903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMemInit(void *pAppData){
31905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemData *pWinMemData = (winMemData *)pAppData;
31906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pWinMemData ) return SQLITE_ERROR;
31908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWinMemData->magic==WINMEM_MAGIC );
31909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pWinMemData->hHeap ){
31910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWinMemData->hHeap = HeapCreate(SQLITE_WIN32_HEAP_FLAGS,
31911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_WIN32_HEAP_INIT_SIZE,
31912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_WIN32_HEAP_MAX_SIZE);
31913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pWinMemData->hHeap ){
31914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_NOMEM,
31915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "failed to HeapCreate (%d), flags=%u, initSize=%u, maxSize=%u",
31916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ GetLastError(), SQLITE_WIN32_HEAP_FLAGS, SQLITE_WIN32_HEAP_INIT_SIZE,
31917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_WIN32_HEAP_MAX_SIZE);
31918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
31919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWinMemData->bOwned = TRUE;
31921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWinMemData->hHeap!=0 );
31923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE );
31924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC_VALIDATE
31925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( HeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
31926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
31928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Deinitialize this module.
31932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void winMemShutdown(void *pAppData){
31934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemData *pWinMemData = (winMemData *)pAppData;
31935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pWinMemData ) return;
31937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWinMemData->hHeap ){
31938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWinMemData->hHeap!=INVALID_HANDLE_VALUE );
31939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MALLOC_VALIDATE
31940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( HeapValidate(pWinMemData->hHeap, SQLITE_WIN32_HEAP_FLAGS, NULL) );
31941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWinMemData->bOwned ){
31943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !HeapDestroy(pWinMemData->hHeap) ){
31944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_NOMEM, "failed to HeapDestroy (%d), heap=%p",
31945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ GetLastError(), (void*)pWinMemData->hHeap);
31946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWinMemData->bOwned = FALSE;
31948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWinMemData->hHeap = NULL;
31950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
31954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Populate the low-level memory allocation function pointers in
31955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3GlobalConfig.m with pointers to the routines in this file. The
31956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arguments specify the block of memory to manage.
31957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
31958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine is only called by sqlite3_config(), and therefore
31959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is not required to be threadsafe (it is not).
31960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void){
31962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const sqlite3_mem_methods winMemMethods = {
31963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemMalloc,
31964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemFree,
31965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemRealloc,
31966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemSize,
31967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemRoundup,
31968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemInit,
31969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMemShutdown,
31970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ &win_mem_data
31971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
31972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return &winMemMethods;
31973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3MemSetDefault(void){
31976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetWin32());
31977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_WIN32_MALLOC */
31979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31552 31980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31553 31981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convert a UTF-8 string to microsoft unicode (UTF-16?).
31554 31982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
31555 31983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Space to hold the returned string is obtained from malloc.
31556 31984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -31778,19 +32206,68 @@
31778 32206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLine, iErrno, zFunc, zPath, zMsg
31779 32207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
31780 32208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31781 32209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return errcode;
31782 32210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
32213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The number of times that a ReadFile(), WriteFile(), and DeleteFile()
32214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be retried following a locking error - probably caused by
32215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** antivirus software. Also the initial delay before the first retry.
32216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The delay increases linearly with each retry.
32217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
32218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_WIN32_IOERR_RETRY
32219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_WIN32_IOERR_RETRY 10
32220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
32221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_WIN32_IOERR_RETRY_DELAY
32222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_WIN32_IOERR_RETRY_DELAY 25
32223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
32224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int win32IoerrRetry = SQLITE_WIN32_IOERR_RETRY;
32225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int win32IoerrRetryDelay = SQLITE_WIN32_IOERR_RETRY_DELAY;
32226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
32228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If a ReadFile() or WriteFile() error occurs, invoke this routine
32229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to see if it should be retried. Return TRUE to retry. Return FALSE
32230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to give up with an error.
32231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
32232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int retryIoerr(int *pnRetry){
32233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DWORD e;
32234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *pnRetry>=win32IoerrRetry ){
32235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
32236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e = GetLastError();
32238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( e==ERROR_ACCESS_DENIED ||
32239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e==ERROR_LOCK_VIOLATION ||
32240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ e==ERROR_SHARING_VIOLATION ){
32241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Sleep(win32IoerrRetryDelay*(1+*pnRetry));
32242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ++*pnRetry;
32243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
32244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
32246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
32249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Log a I/O error retry episode.
32250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
32251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void logIoerr(int nRetry){
32252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRetry ){
32253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_IOERR,
32254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "delayed %dms for lock/sharing conflict",
32255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ win32IoerrRetryDelay*nRetry*(nRetry+1)/2
32256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
32257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31783 32259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31784 32260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
31785 32261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*************************************************************************
31786 32262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This section contains code for WinCE only.
31787 32263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31788 32264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31789 32265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WindowsCE does not have a localtime() function. So create a
31790 32266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** substitute.
31791 32267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <time.h> */
31792 32269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct tm *__cdecl localtime(const time_t *t)
31793 32270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
31794 32271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static struct tm y;
31795 32272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FILETIME uTm, lTm;
31796 32273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SYSTEMTIME pTm;
@@ -32196,22 +32673,25 @@
32196 32673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int amt, /* Number of bytes to read */
32197 32674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 offset /* Begin reading at this offset */
32198 32675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
32199 32676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *pFile = (winFile*)id; /* file handle */
32200 32677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD nRead; /* Number of bytes actually read from file */
32678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRetry = 0; /* Number of retrys */
32201 32679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32202 32680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( id!=0 );
32203 32681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError(return SQLITE_IOERR_READ);
32204 32682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("READ %d lock=%d\n", pFile->h, pFile->locktype));
32205 32683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32206 32684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( seekWinFile(pFile, offset) ){
32207 32685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_FULL;
32208 32686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !ReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
32687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( !ReadFile(pFile->h, pBuf, amt, &nRead, 0) ){
32688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( retryIoerr(&nRetry) ) continue;
32210 32689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = GetLastError();
32211 32690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return winLogError(SQLITE_IOERR_READ, "winRead", pFile->zPath);
32212 32691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logIoerr(nRetry);
32213 32693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRead<(DWORD)amt ){
32214 32694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Unread parts of the buffer must be zero-filled */
32215 32695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&((char*)pBuf)[nRead], 0, amt-nRead);
32216 32696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR_SHORT_READ;
32217 32697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -32229,10 +32709,11 @@
32229 32709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int amt, /* Number of bytes to write */
32230 32710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 offset /* Offset into the file to begin writing at */
32231 32711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
32232 32712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* True if error has occured, else false */
32233 32713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *pFile = (winFile*)id; /* File handle */
32714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRetry = 0; /* Number of retries */
32234 32715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32235 32716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( amt>0 );
32236 32717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile );
32237 32718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError(return SQLITE_IOERR_WRITE);
32238 32719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateDiskfullError(return SQLITE_FULL);
@@ -32243,11 +32724,16 @@
32243 32724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==0 ){
32244 32725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *aRem = (u8 *)pBuf; /* Data yet to be written */
32245 32726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRem = amt; /* Number of bytes yet to be written */
32246 32727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD nWrite; /* Bytes written by each WriteFile() call */
32247 32728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( nRem>0 && WriteFile(pFile->h, aRem, nRem, &nWrite, 0) && nWrite>0 ){
32729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( nRem>0 ){
32730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !WriteFile(pFile->h, aRem, nRem, &nWrite, 0) ){
32731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( retryIoerr(&nRetry) ) continue;
32732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
32733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nWrite<=0 ) break;
32249 32735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aRem += nWrite;
32250 32736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRem -= nWrite;
32251 32737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32252 32738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRem>0 ){
32253 32739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = GetLastError();
@@ -32254,14 +32740,17 @@
32254 32740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = 1;
32255 32741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32256 32742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32257 32743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32258 32744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
32259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFile->lastErrno==ERROR_HANDLE_DISK_FULL ){
32745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ( pFile->lastErrno==ERROR_HANDLE_DISK_FULL )
32746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || ( pFile->lastErrno==ERROR_DISK_FULL )){
32260 32747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_FULL;
32261 32748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32262 32749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return winLogError(SQLITE_IOERR_WRITE, "winWrite", pFile->zPath);
32750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
32751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logIoerr(nRetry);
32263 32752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32264 32753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32265 32754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32266 32755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32267 32756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -32651,32 +33140,63 @@
32651 33140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32652 33141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
32653 33142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Control and query of the open file handle.
32654 33143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32655 33144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winFileControl(sqlite3_file *id, int op, void *pArg){
33145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winFile *pFile = (winFile*)id;
32656 33146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( op ){
32657 33147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_LOCKSTATE: {
32658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = ((winFile*)id)->locktype;
33148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->locktype;
32659 33149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32660 33150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32661 33151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_LAST_ERRNO: {
32662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(int*)pArg = (int)((winFile*)id)->lastErrno;
33152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = (int)pFile->lastErrno;
32663 33153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32664 33154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32665 33155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_CHUNK_SIZE: {
32666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((winFile*)id)->szChunk = *(int *)pArg;
33156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->szChunk = *(int *)pArg;
32667 33157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32668 33158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32669 33159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_SIZE_HINT: {
32670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 sz = *(sqlite3_int64*)pArg;
32671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SimulateIOErrorBenign(1);
32672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- winTruncate(id, sz);
32673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SimulateIOErrorBenign(0);
33160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winFile *pFile = (winFile*)id;
33161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 oldSz;
33162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = winFileSize(id, &oldSz);
33163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
33164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 newSz = *(sqlite3_int64*)pArg;
33165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( newSz>oldSz ){
33166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SimulateIOErrorBenign(1);
33167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = winTruncate(id, newSz);
33168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SimulateIOErrorBenign(0);
33169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
33172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_FCNTL_PERSIST_WAL: {
33174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPersist = *(int*)pArg;
33175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bPersist<0 ){
33176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pArg = pFile->bPersistWal;
33177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
33178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->bPersistWal = bPersist!=0;
33179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32674 33180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
32675 33181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32676 33182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_FCNTL_SYNC_OMITTED: {
32677 33183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
33184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_FCNTL_WIN32_AV_RETRY: {
33186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *a = (int*)pArg;
33187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( a[0]>0 ){
33188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ win32IoerrRetry = a[0];
33189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
33190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ a[0] = win32IoerrRetry;
33191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( a[1]>0 ){
33193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ win32IoerrRetryDelay = a[1];
33194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
33195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ a[1] = win32IoerrRetryDelay;
33196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
32678 33198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32679 33199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32680 33200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOTFOUND;
32681 33201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32682 33202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -33482,10 +34002,11 @@
33482 34002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isTemp = 0;
33483 34003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33484 34004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *pFile = (winFile*)id;
33485 34005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *zConverted; /* Filename in OS encoding */
33486 34006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
34007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cnt = 0;
33487 34008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33488 34009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If argument zPath is a NULL pointer, this function is required to open
33489 34010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a temporary file. Use this buffer to store the file name in.
33490 34011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33491 34012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zTmpname[MAX_PATH+1]; /* Buffer used to create temp filename */
@@ -33601,34 +34122,34 @@
33601 34122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
33602 34123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS;
33603 34124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33604 34125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33605 34126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isNT() ){
33606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- h = CreateFileW((WCHAR*)zConverted,
33607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwDesiredAccess,
33608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwShareMode,
33609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL,
33610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwCreationDisposition,
33611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwFlagsAndAttributes,
33612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL
33613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
34127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (h = CreateFileW((WCHAR*)zConverted,
34128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwDesiredAccess,
34129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwShareMode, NULL,
34130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwCreationDisposition,
34131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwFlagsAndAttributes,
34132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NULL))==INVALID_HANDLE_VALUE &&
34133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ retryIoerr(&cnt) ){}
33614 34134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
33615 34135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Since the ASCII version of these Windows API do not exist for WINCE,
33616 34136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it's important to not reference them for WINCE builds.
33617 34137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33618 34138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE==0
33619 34139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
33620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- h = CreateFileA((char*)zConverted,
33621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwDesiredAccess,
33622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwShareMode,
33623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL,
33624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwCreationDisposition,
33625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dwFlagsAndAttributes,
33626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NULL
33627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
34140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (h = CreateFileA((char*)zConverted,
34141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwDesiredAccess,
34142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwShareMode, NULL,
34143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwCreationDisposition,
34144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ dwFlagsAndAttributes,
34145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NULL))==INVALID_HANDLE_VALUE &&
34146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ retryIoerr(&cnt) ){}
33628 34147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33629 34148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
34149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
34150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logIoerr(cnt);
33630 34151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33631 34152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("OPEN %d %s 0x%lx %s\n",
33632 34153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h, zName, dwDesiredAccess,
33633 34154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
33634 34155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -33691,19 +34212,17 @@
33691 34212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** file open, we will be unable to delete it. To work around this
33692 34213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** problem, we delay 100 milliseconds and try to delete again. Up
33693 34214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to MX_DELETION_ATTEMPTs deletion attempts are run before giving
33694 34215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** up and returning an error.
33695 34216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define MX_DELETION_ATTEMPTS 5
33697 34217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winDelete(
33698 34218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs *pVfs, /* Not used on win32 */
33699 34219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zFilename, /* Name of file to delete */
33700 34220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int syncDir /* Not used on win32 */
33701 34221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
33702 34222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cnt = 0;
33703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DWORD rc;
33704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DWORD error = 0;
34223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
33705 34224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *zConverted;
33706 34225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(pVfs);
33707 34226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(syncDir);
33708 34227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33709 34228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError(return SQLITE_IOERR_DELETE);
@@ -33710,38 +34229,34 @@
33710 34229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zConverted = convertUtf8Filename(zFilename);
33711 34230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zConverted==0 ){
33712 34231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
33713 34232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33714 34233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isNT() ){
33715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{
33716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DeleteFileW(zConverted);
33717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( ( ((rc = GetFileAttributesW(zConverted)) != INVALID_FILE_ATTRIBUTES)
33718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || ((error = GetLastError()) == ERROR_ACCESS_DENIED))
33719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (++cnt < MX_DELETION_ATTEMPTS)
33720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (Sleep(100), 1) );
34234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = 1;
34235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( GetFileAttributesW(zConverted)!=INVALID_FILE_ATTRIBUTES &&
34236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (rc = DeleteFileW(zConverted))==0 && retryIoerr(&cnt) ){}
34237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = rc ? SQLITE_OK : SQLITE_ERROR;
33721 34238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* isNT() is 1 if SQLITE_OS_WINCE==1, so this else is never executed.
33722 34239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Since the ASCII version of these Windows API do not exist for WINCE,
33723 34240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it's important to not reference them for WINCE builds.
33724 34241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33725 34242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE==0
33726 34243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
33727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{
33728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DeleteFileA(zConverted);
33729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( ( ((rc = GetFileAttributesA(zConverted)) != INVALID_FILE_ATTRIBUTES)
33730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || ((error = GetLastError()) == ERROR_ACCESS_DENIED))
33731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (++cnt < MX_DELETION_ATTEMPTS)
33732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (Sleep(100), 1) );
34244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = 1;
34245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( GetFileAttributesA(zConverted)!=INVALID_FILE_ATTRIBUTES &&
34246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (rc = DeleteFileA(zConverted))==0 && retryIoerr(&cnt) ){}
34247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = rc ? SQLITE_OK : SQLITE_ERROR;
33733 34248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33734 34249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
34250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ){
34251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = winLogError(SQLITE_IOERR_DELETE, "winDelete", zFilename);
34252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
34253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logIoerr(cnt);
34254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33735 34255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zConverted);
33736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSTRACE(("DELETE \"%s\" %s\n", zFilename,
33737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ( (rc==INVALID_FILE_ATTRIBUTES) && (error==ERROR_FILE_NOT_FOUND)) ?
33738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "ok" : "failed" ));
33739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
33740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return ( (rc == INVALID_FILE_ATTRIBUTES)
33741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (error == ERROR_FILE_NOT_FOUND)) ? SQLITE_OK :
33742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- winLogError(SQLITE_IOERR_DELETE, "winDelete", zFilename);
34256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("DELETE \"%s\" %s\n", zFilename, (rc ? "failed" : "ok" )));
34257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
33743 34258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33744 34259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33745 34260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33746 34261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check the existance and status of a file.
33747 34262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -33760,15 +34275,17 @@
33760 34275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zConverted = convertUtf8Filename(zFilename);
33761 34276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zConverted==0 ){
33762 34277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
33763 34278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33764 34279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isNT() ){
34280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cnt = 0;
33765 34281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WIN32_FILE_ATTRIBUTE_DATA sAttrData;
33766 34282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sAttrData, 0, sizeof(sAttrData));
33767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( GetFileAttributesExW((WCHAR*)zConverted,
34283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( !(rc = GetFileAttributesExW((WCHAR*)zConverted,
33768 34284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
GetFileExInfoStandard,
33769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &sAttrData) ){
34285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ &sAttrData)) && retryIoerr(&cnt) ){}
34286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ){
33770 34287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
33771 34288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as if it does not exist.
33772 34289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33773 34290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags==SQLITE_ACCESS_EXISTS
33774 34291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sAttrData.nFileSizeHigh==0
@@ -33776,10 +34293,11 @@
33776 34293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
attr = INVALID_FILE_ATTRIBUTES;
33777 34294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
33778 34295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
attr = sAttrData.dwFileAttributes;
33779 34296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33780 34297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
34298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ logIoerr(cnt);
33781 34299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( GetLastError()!=ERROR_FILE_NOT_FOUND ){
33782 34300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winLogError(SQLITE_IOERR_ACCESS, "winAccess", zFilename);
33783 34301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zConverted);
33784 34302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR_ACCESS;
33785 34303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -33800,11 +34318,12 @@
33800 34318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_ACCESS_READ:
33801 34319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_ACCESS_EXISTS:
33802 34320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = attr!=INVALID_FILE_ATTRIBUTES;
33803 34321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
33804 34322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_ACCESS_READWRITE:
33805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = (attr & FILE_ATTRIBUTE_READONLY)==0;
34323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = attr!=INVALID_FILE_ATTRIBUTES &&
34324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (attr & FILE_ATTRIBUTE_READONLY)==0;
33806 34325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
33807 34326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default:
33808 34327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(!"Invalid flags argument");
33809 34328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33810 34329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResOut = rc;
@@ -35256,10 +35775,13 @@
35256 35775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PCache1 PCache1;
35257 35776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PgHdr1 PgHdr1;
35258 35777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PgFreeslot PgFreeslot;
35259 35778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PGroup PGroup;
35260 35779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct PGroupBlock PGroupBlock;
35781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct PGroupBlockList PGroupBlockList;
35782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35261 35783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Each page cache (or PCache) belongs to a PGroup. A PGroup is a set
35262 35784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of one or more PCaches that are able to recycle each others unpinned
35263 35785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pages when they are under memory pressure. A PGroup is an instance of
35264 35786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the following object.
35265 35787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -35285,12 +35807,70 @@
35285 35807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMaxPage; /* Sum of nMax for purgeable caches */
35286 35808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMinPage; /* Sum of nMin for purgeable caches */
35287 35809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mxPinned; /* nMaxpage + 10 - nMinPage */
35288 35810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCurrentPage; /* Number of purgeable pages allocated */
35289 35811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgHdr1 *pLruHead, *pLruTail; /* LRU list of unpinned pages */
35812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_PAGECACHE_BLOCKALLOC
35813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isBusy; /* Do not run ReleaseMemory() if true */
35814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlockList *pBlockList; /* List of block-lists for this group */
35815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
35290 35816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
35291 35817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
35819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_PAGECACHE_BLOCKALLOC is defined when the library is built,
35820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** each PGroup structure has a linked list of the the following starting
35821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** at PGroup.pBlockList. There is one entry for each distinct page-size
35822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** currently used by members of the PGroup (i.e. 1024 bytes, 4096 bytes
35823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** etc.). Variable PGroupBlockList.nByte is set to the actual allocation
35824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** size requested by each pcache, which is the database page-size plus
35825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the various header structures used by the pcache, pager and btree layers.
35826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Usually around (pgsz+200) bytes.
35827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This size (pgsz+200) bytes is not allocated efficiently by some
35829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** implementations of malloc. In particular, some implementations are only
35830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** able to allocate blocks of memory chunks of 2^N bytes, where N is some
35831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** integer value. Since the page-size is a power of 2, this means we
35832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** end up wasting (pgsz-200) bytes in each allocation.
35833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If SQLITE_PAGECACHE_BLOCKALLOC is defined, the (pgsz+200) byte blocks
35835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are not allocated directly. Instead, blocks of roughly M*(pgsz+200) bytes
35836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are requested from malloc allocator. After a block is returned,
35837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3MallocSize() is used to determine how many (pgsz+200) byte
35838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** allocations can fit in the space returned by malloc(). This value may
35839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be more than M.
35840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The blocks are stored in a doubly-linked list. Variable PGroupBlock.nEntry
35842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** contains the number of allocations that will fit in the aData[] space.
35843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nEntry is limited to the number of bits in bitmask mUsed. If a slot
35844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** within aData is in use, the corresponding bit in mUsed is set. Thus
35845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** when (mUsed+1==(1 << nEntry)) the block is completely full.
35846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Each time a slot within a block is freed, the block is moved to the start
35848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the linked-list. And if a block becomes completely full, then it is
35849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** moved to the end of the list. As a result, when searching for a free
35850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** slot, only the first block in the list need be examined. If it is full,
35851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then it is guaranteed that all blocks are full.
35852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
35853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct PGroupBlockList {
35854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nByte; /* Size of each allocation in bytes */
35855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlock *pFirst; /* First PGroupBlock in list */
35856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlock *pLast; /* Last PGroupBlock in list */
35857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlockList *pNext; /* Next block-list attached to group */
35858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
35859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct PGroupBlock {
35861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask mUsed; /* Mask of used slots */
35862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nEntry; /* Maximum number of allocations in aData[] */
35863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *aData; /* Pointer to data block */
35864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlock *pNext; /* Next PGroupBlock in list */
35865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlock *pPrev; /* Previous PGroupBlock in list */
35866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlockList *pList; /* Owner list */
35867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
35868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Minimum value for PGroupBlock.nEntry */
35870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define PAGECACHE_BLOCKALLOC_MINENTRY 15
35871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35292 35872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Each page cache is an instance of the following object. Every
35293 35873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** open database file (including each in-memory database and each
35294 35874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** temporary or transient database) has a single page cache which
35295 35875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is an instance of this object.
35296 35876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -35389,10 +35969,21 @@
35389 35969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35390 35970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** assert( PGHDR1_TO_PAGE(PAGE_TO_PGHDR1(pCache, X))==X );
35391 35971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35392 35972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PGHDR1_TO_PAGE(p) (void*)(((char*)p) - p->pCache->szPage)
35393 35973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGE_TO_PGHDR1(c, p) (PgHdr1*)(((char*)p) + c->szPage)
35974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
35976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Blocks used by the SQLITE_PAGECACHE_BLOCKALLOC blocks to store/retrieve
35977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a PGroupBlock pointer based on a pointer to a page buffer.
35978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
35979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define PAGE_SET_BLOCKPTR(pCache, pPg, pBlock) \
35980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( *(PGroupBlock **)&(((u8*)pPg)[sizeof(PgHdr1) + pCache->szPage]) = pBlock )
35981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define PAGE_GET_BLOCKPTR(pCache, pPg) \
35983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ( *(PGroupBlock **)&(((u8*)pPg)[sizeof(PgHdr1) + pCache->szPage]) )
35984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35394 35985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35395 35986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35396 35987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros to enter and leave the PCache LRU mutex.
35397 35988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35398 35989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define pcache1EnterMutex(X) sqlite3_mutex_enter((X)->mutex)
@@ -35515,25 +36106,159 @@
35515 36106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return iSize;
35516 36107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35517 36108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35518 36109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_ENABLE_MEMORY_MANAGEMENT */
35519 36110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_PAGECACHE_BLOCKALLOC
36112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
36113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The block pBlock belongs to list pList but is not currently linked in.
36114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Insert it into the start of the list.
36115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
36116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void addBlockToList(PGroupBlockList *pList, PGroupBlock *pBlock){
36117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pPrev = 0;
36118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pNext = pList->pFirst;
36119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pFirst = pBlock;
36120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBlock->pNext ){
36121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pNext->pPrev = pBlock;
36122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
36123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pList->pLast==0 );
36124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pLast = pBlock;
36125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
36129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If there are no blocks in the list headed by pList, remove pList
36130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the pGroup->pBlockList list and free it with sqlite3_free().
36131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
36132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void freeListIfEmpty(PGroup *pGroup, PGroupBlockList *pList){
36133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(pGroup->mutex) );
36134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList->pFirst==0 ){
36135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlockList **pp;
36136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pp=&pGroup->pBlockList; *pp!=pList; pp=&(*pp)->pNext);
36137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pp = (*pp)->pNext;
36138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pList);
36139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_PAGECACHE_BLOCKALLOC */
36142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35520 36143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35521 36144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocate a new page object initially associated with cache pCache.
35522 36145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35523 36146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static PgHdr1 *pcache1AllocPage(PCache1 *pCache){
35524 36147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nByte = sizeof(PgHdr1) + pCache->szPage;
35525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *pPg = pcache1Alloc(nByte);
36148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pPg = 0;
35526 36149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgHdr1 *p;
36150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_PAGECACHE_BLOCKALLOC
36152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroup *pGroup = pCache->pGroup;
36153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlockList *pList;
36154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlock *pBlock;
36155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
36156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nByte += sizeof(PGroupBlockList *);
36158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nByte = ROUND8(nByte);
36159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pList=pGroup->pBlockList; pList; pList=pList->pNext){
36161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList->nByte==nByte ) break;
36162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList==0 ){
36164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlockList *pNew;
36165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pGroup->isBusy==0 );
36166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(pGroup->mutex) );
36167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGroup->isBusy = 1; /* Disable sqlite3PcacheReleaseMemory() */
36168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = (PGroupBlockList *)sqlite3MallocZero(sizeof(PGroupBlockList));
36169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGroup->isBusy = 0; /* Reenable sqlite3PcacheReleaseMemory() */
36170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNew==0 ){
36171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* malloc() failure. Return early. */
36172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
36173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
36175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pList=pGroup->pBlockList; pList; pList=pList->pNext){
36176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pList->nByte!=nByte );
36177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
36179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->nByte = nByte;
36180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->pNext = pGroup->pBlockList;
36181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGroup->pBlockList = pNew;
36182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList = pNew;
36183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock = pList->pFirst;
36186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBlock==0 || pBlock->mUsed==(((Bitmask)1<<pBlock->nEntry)-1) ){
36187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sz;
36188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate a new block. Try to allocate enough space for the PGroupBlock
36190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** structure and MINENTRY allocations of nByte bytes each. If the
36191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** allocator returns more memory than requested, then more than MINENTRY
36192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** allocations may fit in it. */
36193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(pGroup->mutex) );
36194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1LeaveMutex(pCache->pGroup);
36195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sz = sizeof(PGroupBlock) + PAGECACHE_BLOCKALLOC_MINENTRY * nByte;
36196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock = (PGroupBlock *)sqlite3Malloc(sz);
36197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1EnterMutex(pCache->pGroup);
36198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pBlock ){
36200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ freeListIfEmpty(pGroup, pList);
36201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
36202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->nEntry = (sqlite3MallocSize(pBlock) - sizeof(PGroupBlock)) / nByte;
36204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBlock->nEntry>=BMS ){
36205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->nEntry = BMS-1;
36206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pList = pList;
36208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->mUsed = 0;
36209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->aData = (u8 *)&pBlock[1];
36210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addBlockToList(pList, pBlock);
36211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sz = sqlite3MallocSize(pBlock);
36213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(pcache1.mutex);
36214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, sz);
36215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(pcache1.mutex);
36216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; pPg==0 && ALWAYS(i<pBlock->nEntry); i++){
36219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==(pBlock->mUsed & ((Bitmask)1<<i)) ){
36220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->mUsed |= ((Bitmask)1<<i);
36221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPg = (void *)&pBlock->aData[pList->nByte * i];
36222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPg );
36225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PAGE_SET_BLOCKPTR(pCache, pPg, pBlock);
36226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the block is now full, shift it to the end of the list */
36228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBlock->mUsed==(((Bitmask)1<<pBlock->nEntry)-1) && pList->pLast!=pBlock ){
36229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pList->pFirst==pBlock );
36230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pBlock->pPrev==0 );
36231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pList->pLast->pNext==0 );
36232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pFirst = pBlock->pNext;
36233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pFirst->pPrev = 0;
36234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pPrev = pList->pLast;
36235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pNext = 0;
36236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pLast->pNext = pBlock;
36237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pLast = pBlock;
36238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = PAGE_TO_PGHDR1(pCache, pPg);
36240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCache->bPurgeable ){
36241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCache->pGroup->nCurrentPage++;
36242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
36244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The group mutex must be released before pcache1Alloc() is called. This
36245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is because it may call sqlite3_release_memory(), which assumes that
36246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this mutex is not held. */
36247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(pCache->pGroup->mutex) );
36248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1LeaveMutex(pCache->pGroup);
36249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPg = pcache1Alloc(nByte);
36250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1EnterMutex(pCache->pGroup);
35527 36251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPg ){
35528 36252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = PAGE_TO_PGHDR1(pCache, pPg);
35529 36253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCache->bPurgeable ){
35530 36254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCache->pGroup->nCurrentPage++;
35531 36255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35532 36256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
35533 36257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = 0;
35534 36258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
35535 36260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p;
35536 36261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35537 36262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35538 36263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35539 36264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Free a page object allocated by pcache1AllocPage().
@@ -35543,14 +36268,56 @@
35543 36268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with a NULL pointer, so we mark the NULL test with ALWAYS().
35544 36269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35545 36270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void pcache1FreePage(PgHdr1 *p){
35546 36271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(p) ){
35547 36272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PCache1 *pCache = p->pCache;
36273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pPg = PGHDR1_TO_PAGE(p);
36274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_PAGECACHE_BLOCKALLOC
36276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlock *pBlock = PAGE_GET_BLOCKPTR(pCache, pPg);
36277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroupBlockList *pList = pBlock->pList;
36278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i = ((u8 *)pPg - pBlock->aData) / pList->nByte;
36279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPg==(void *)&pBlock->aData[i*pList->nByte] );
36281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pBlock->mUsed & ((Bitmask)1<<i) );
36282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->mUsed &= ~((Bitmask)1<<i);
36283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Remove the block from the list. If it is completely empty, free it.
36285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Or if it is not completely empty, re-insert it at the start of the
36286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** list. */
36287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList->pFirst==pBlock ){
36288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pFirst = pBlock->pNext;
36289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList->pFirst ) pList->pFirst->pPrev = 0;
36290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
36291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pPrev->pNext = pBlock->pNext;
36292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList->pLast==pBlock ){
36294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList->pLast = pBlock->pPrev;
36295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList->pLast ) pList->pLast->pNext = 0;
36296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
36297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlock->pNext->pPrev = pBlock->pPrev;
36298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBlock->mUsed==0 ){
36301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PGroup *pGroup = p->pCache->pGroup;
36302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sz = sqlite3MallocSize(pBlock);
36304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(pcache1.mutex);
36305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -sz);
36306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(pcache1.mutex);
36307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ freeListIfEmpty(pGroup, pList);
36308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pBlock);
36309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
36310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addBlockToList(pList, pBlock);
36311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
36313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(p->pCache->pGroup->mutex) );
36314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1Free(pPg);
36315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
35548 36316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCache->bPurgeable ){
35549 36317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCache->pGroup->nCurrentPage--;
35550 36318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pcache1Free(PGHDR1_TO_PAGE(p));
35552 36319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35553 36320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35554 36321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35555 36322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35556 36323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Malloc function used by SQLite to obtain space from the buffer configured
@@ -35984,13 +36751,11 @@
35984 36751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Step 5. If a usable page buffer has still not been found,
35985 36752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** attempt to allocate a new one.
35986 36753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35987 36754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pPage ){
35988 36755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( createFlag==1 ) sqlite3BeginBenignMalloc();
35989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pcache1LeaveMutex(pGroup);
35990 36756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage = pcache1AllocPage(pCache);
35991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pcache1EnterMutex(pGroup);
35992 36757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( createFlag==1 ) sqlite3EndBenignMalloc();
35993 36758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35994 36759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35995 36760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPage ){
35996 36761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int h = iKey % pCache->nHash;
@@ -36156,10 +36921,13 @@
36156 36921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** been released, the function returns. The return value is the total number
36157 36922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of bytes of memory released.
36158 36923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36159 36924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
36160 36925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFree = 0;
36926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_PAGECACHE_BLOCKALLOC
36927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pcache1.grp.isBusy ) return 0;
36928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
36161 36929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_notheld(pcache1.grp.mutex) );
36162 36930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_notheld(pcache1.mutex) );
36163 36931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pcache1.pStart==0 ){
36164 36932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgHdr1 *p;
36165 36933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1EnterMutex(&pcache1.grp);
@@ -37368,10 +38136,12 @@
37368 38136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 ckptSyncFlags; /* SYNC_NORMAL or SYNC_FULL for checkpoint */
37369 38137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 syncFlags; /* SYNC_NORMAL or SYNC_FULL otherwise */
37370 38138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 tempFile; /* zFilename is a temporary file */
37371 38139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 readOnly; /* True for a read-only database */
37372 38140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 memDb; /* True to inhibit all file I/O */
38141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 hasSeenStress; /* pagerStress() called one or more times */
38142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 isSorter; /* True for a PAGER_SORTER */
37373 38143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37374 38144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**************************************************************************
37375 38145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following block contains those class members that change during
37376 38146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routine opertion. Class members not in this block are either fixed
37377 38147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** when the pager is first created or else only change when there is a
@@ -37590,10 +38360,19 @@
37590 38360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->journalMode==PAGER_JOURNALMODE_MEMORY
37591 38361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
37592 38362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->eState!=PAGER_ERROR && p->eState!=PAGER_OPEN );
37593 38363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pagerUseWal(p)==0 );
37594 38364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A sorter is a temp file that never spills to disk and always has
38367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the doNotSpill flag set
38368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
38369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->isSorter ){
38370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->tempFile );
38371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->doNotSpill );
38372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->fd->pMethods==0 );
38373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
37595 38374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37596 38375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If changeCountDone is set, a RESERVED lock or greater must be held
37597 38376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on the file.
37598 38377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
37599 38378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPager->changeCountDone==0 || pPager->eLock>=RESERVED_LOCK );
@@ -40487,10 +41266,11 @@
40487 41266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the caller.
40488 41267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
40489 41268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3PagerClose(Pager *pPager){
40490 41269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pTmp = (u8 *)pPager->pTmpSpace;
40491 41270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
41271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( assert_pager_state(pPager) );
40492 41272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
disable_simulated_io_errors();
40493 41273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginBenignMalloc();
40494 41274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pPager->errCode = 0; */
40495 41275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->exclusiveMode = 0;
40496 41276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WAL
@@ -40921,10 +41701,11 @@
40921 41701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is impossible for sqlite3PCacheFetch() to be called with createFlag==1
40922 41702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** while in the error state, hence it is impossible for this routine to
40923 41703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be called in the error state. Nevertheless, we include a NEVER()
40924 41704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test for the error state as a safeguard against future changes.
40925 41705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
41706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPager->hasSeenStress = 1;
40926 41707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( NEVER(pPager->errCode) ) return SQLITE_OK;
40927 41708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPager->doNotSpill ) return SQLITE_OK;
40928 41709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPager->doNotSyncSpill && (pPg->flags & PGHDR_NEED_SYNC)!=0 ){
40929 41710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
40930 41711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -41292,10 +42073,16 @@
41292 42073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
41293 42074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pPager->xBusyHandler = 0; */
41294 42075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pPager->pBusyHandlerArg = 0; */
41295 42076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->xReiniter = xReinit;
41296 42077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* memset(pPager->aHash, 0, sizeof(pPager->aHash)); */
42078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_MERGE_SORT
42079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( flags & PAGER_SORTER ){
42080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPager->doNotSpill = 1;
42081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPager->isSorter = 1;
42082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
42083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
41297 42084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
41298 42085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppPager = pPager;
41299 42086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
41300 42087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
41301 42088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -42835,10 +43622,21 @@
42835 43622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if this is an in-memory pager.
42836 43623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
42837 43624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3PagerIsMemdb(Pager *pPager){
42838 43625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return MEMDB;
42839 43626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
43627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
43628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_MERGE_SORT
43629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
43630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the pager has seen a pagerStress callback.
43631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
43632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3PagerUnderStress(Pager *pPager){
43633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPager->isSorter );
43634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPager->doNotSpill );
43635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pPager->hasSeenStress;
43636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
43637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
42840 43638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
42841 43639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
42842 43640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check that there are at least nSavepoint savepoints open. If there are
42843 43641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** currently less than nSavepoints open, then open one or more savepoints
42844 43642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to make up the difference. If the number of savepoints is already
@@ -45384,17 +46182,19 @@
45384 46182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
45385 46183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The EXCLUSIVE lock is not released before returning.
45386 46184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
45387 46185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsLock(pWal->pDbFd, SQLITE_LOCK_EXCLUSIVE);
45388 46186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
46187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPersistWal = -1;
45389 46188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWal->exclusiveMode==WAL_NORMAL_MODE ){
45390 46189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWal->exclusiveMode = WAL_EXCLUSIVE_MODE;
45391 46190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45392 46191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3WalCheckpoint(
45393 46192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWal, SQLITE_CHECKPOINT_PASSIVE, 0, 0, sync_flags, nBuf, zBuf, 0, 0
45394 46193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
45395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
46194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OsFileControl(pWal->pDbFd, SQLITE_FCNTL_PERSIST_WAL, &bPersistWal);
46195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && bPersistWal!=1 ){
45396 46196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isDelete = 1;
45397 46197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45398 46198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
45399 46199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
45400 46200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
walIndexClose(pWal, isDelete);
@@ -49202,15 +50002,26 @@
49202 50002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 );
49203 50003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
49204 50004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A BTREE_SINGLE database is always a temporary and/or ephemeral */
49205 50005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (flags & BTREE_SINGLE)==0 || isTempDb );
49206 50006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
50007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The BTREE_SORTER flag is only used if SQLITE_OMIT_MERGE_SORT is undef */
50008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_MERGE_SORT
50009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (flags & BTREE_SORTER)==0 );
50010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
50011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
50012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* BTREE_SORTER is always on a BTREE_SINGLE, BTREE_OMIT_JOURNAL */
50013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (flags & BTREE_SORTER)==0 ||
50014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (flags & (BTREE_SINGLE|BTREE_OMIT_JOURNAL))
50015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ==(BTREE_SINGLE|BTREE_OMIT_JOURNAL) );
50016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
49207 50017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->flags & SQLITE_NoReadlock ){
49208 50018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= BTREE_NO_READLOCK;
49209 50019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49210 50020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isMemdb ){
49211 50021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags |= BTREE_MEMORY;
50022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags &= ~BTREE_SORTER;
49212 50023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49213 50024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){
49214 50025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
49215 50026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
49216 50027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3MallocZero(sizeof(Btree));
@@ -50936,11 +51747,12 @@
50936 51747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
50937 51748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( NEVER(wrFlag && pBt->readOnly) ){
50938 51749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_READONLY;
50939 51750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
50940 51751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iTable==1 && btreePagecount(pBt)==0 ){
50941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_EMPTY;
51752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( wrFlag==0 );
51753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iTable = 0;
50942 51754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
50943 51755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
50944 51756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Now that no other errors can occur, finish filling in the BtCursor
50945 51757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** variables and link the cursor into the BtShared list. */
50946 51758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->pgnoRoot = (Pgno)iTable;
@@ -51690,10 +52502,13 @@
51690 52502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
51691 52503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=1; i<=pCur->iPage; i++){
51692 52504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
releasePage(pCur->apPage[i]);
51693 52505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51694 52506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->iPage = 0;
52507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pCur->pgnoRoot==0 ){
52508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->eState = CURSOR_INVALID;
52509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
51695 52510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
51696 52511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = getAndInitPage(pBt, pCur->pgnoRoot, &pCur->apPage[0]);
51697 52512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
51698 52513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->eState = CURSOR_INVALID;
51699 52514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -51799,11 +52614,11 @@
51799 52614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( cursorHoldsMutex(pCur) );
51800 52615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
51801 52616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = moveToRoot(pCur);
51802 52617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
51803 52618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCur->eState==CURSOR_INVALID ){
51804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->apPage[pCur->iPage]->nCell==0 );
52619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
51805 52620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRes = 1;
51806 52621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
51807 52622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCur->apPage[pCur->iPage]->nCell>0 );
51808 52623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRes = 0;
51809 52624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = moveToLeftmost(pCur);
@@ -51838,11 +52653,11 @@
51838 52653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51839 52654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51840 52655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = moveToRoot(pCur);
51841 52656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
51842 52657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( CURSOR_INVALID==pCur->eState ){
51843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->apPage[pCur->iPage]->nCell==0 );
52658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
51844 52659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRes = 1;
51845 52660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
51846 52661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCur->eState==CURSOR_VALID );
51847 52662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRes = 0;
51848 52663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = moveToRightmost(pCur);
@@ -51911,16 +52726,16 @@
51911 52726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51912 52727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = moveToRoot(pCur);
51913 52728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
51914 52729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
51915 52730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->apPage[pCur->iPage] );
51917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->apPage[pCur->iPage]->isInit );
51918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->apPage[pCur->iPage]->nCell>0 || pCur->eState==CURSOR_INVALID );
52731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage] );
52732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->isInit );
52733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->eState==CURSOR_INVALID || pCur->apPage[pCur->iPage]->nCell>0 );
51919 52734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCur->eState==CURSOR_INVALID ){
51920 52735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRes = -1;
51921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->apPage[pCur->iPage]->nCell==0 );
52736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->pgnoRoot==0 || pCur->apPage[pCur->iPage]->nCell==0 );
51922 52737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
51923 52738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51924 52739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCur->apPage[0]->intKey || pIdxKey );
51925 52740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(;;){
51926 52741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int lwr, upr, idx;
@@ -54745,13 +55560,20 @@
54745 55560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
releasePage(pPage);
54746 55561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54747 55562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
54748 55563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54749 55564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree *p, int iTable, int *piMoved){
55565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BtShared *pBt = p->pBt;
54750 55566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
54751 55567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeEnter(p);
54752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = btreeDropTable(p, iTable, piMoved);
55568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pBt->openFlags&BTREE_SINGLE) ){
55569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBt->nPage = 0;
55570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3PagerTruncateImage(pBt->pPager, 1);
55571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = newDatabase(pBt);
55572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
55573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = btreeDropTable(p, iTable, piMoved);
55574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54753 55575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeLeave(p);
54754 55576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
54755 55577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54756 55578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
54757 55579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -54826,10 +55648,15 @@
54826 55648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** corruption) an SQLite error code is returned.
54827 55649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
54828 55650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeCount(BtCursor *pCur, i64 *pnEntry){
54829 55651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 nEntry = 0; /* Value to return in *pnEntry */
54830 55652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* Return code */
55653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
55654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCur->pgnoRoot==0 ){
55655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnEntry = 0;
55656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
55657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54831 55658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = moveToRoot(pCur);
54832 55659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
54833 55660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Unless an error occurs, the following loop runs one iteration for each
54834 55661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** page in the B-Tree structure (not including overflow pages).
54835 55662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -55610,11 +56437,10 @@
55610 56437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
55611 56438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSetVersion(Btree *pBtree, int iVersion){
55612 56439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtShared *pBt = pBtree->pBt;
55613 56440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* Return code */
55614 56441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
55615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pBtree->inTrans==TRANS_NONE );
55616 56442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iVersion==1 || iVersion==2 );
55617 56443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
55618 56444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If setting the version fields to 1, do not automatically open the
55619 56445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WAL connection, even if the version fields are currently set to 2.
55620 56446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -56049,106 +56875,110 @@
56049 56875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Update the schema version field in the destination database. This
56050 56876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is to make sure that the schema-version really does change in
56051 56877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the case where the source and destination databases have the
56052 56878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** same schema version.
56053 56879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
56054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_DONE
56055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1))==SQLITE_OK
56056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
56057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDestTruncate;
56058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pDestDb ){
56060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ResetInternalSchema(p->pDestDb, -1);
56061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Set nDestTruncate to the final number of pages in the destination
56064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** database. The complication here is that the destination page
56065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** size may be different to the source page size.
56066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
56067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the source page size is smaller than the destination page size,
56068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** round up. In this case the call to sqlite3OsTruncate() below will
56069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fix the size of the file. However it is important to call
56070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3PagerTruncateImage() here so that any pages in the
56071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** destination file that lie beyond the nDestTruncate page mark are
56072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** journalled by PagerCommitPhaseOne() before they are destroyed
56073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** by the file truncation.
56074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
56075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) );
56076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) );
56077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pgszSrc<pgszDest ){
56078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int ratio = pgszDest/pgszSrc;
56079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDestTruncate = (nSrcPage+ratio-1)/ratio;
56080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nDestTruncate==(int)PENDING_BYTE_PAGE(p->pDest->pBt) ){
56081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDestTruncate--;
56082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
56084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
56085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
56087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pgszSrc<pgszDest ){
56089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the source page-size is smaller than the destination page-size,
56090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** two extra things may need to happen:
56091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
56092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * The destination may need to be truncated, and
56093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
56094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * Data stored on the pages immediately following the
56095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pending-byte page in the source database may need to be
56096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** copied into the destination database.
56097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
56098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
56099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
56100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iOff;
56101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iEnd;
56102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFile );
56104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
56105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
56106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
56107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ));
56108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* This call ensures that all data required to recreate the original
56110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** database has been stored in the journal for pDestPager and the
56111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** journal synced to disk. So at this point we may safely modify
56112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the database file in any way, knowing that if a power failure
56113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** occurs, the original database will be reconstructed from the
56114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** journal file. */
56115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
56116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Write the extra pages and truncate the database file as required. */
56118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
56119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(
56120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iOff=PENDING_BYTE+pgszSrc;
56121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc==SQLITE_OK && iOff<iEnd;
56122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iOff+=pgszSrc
56123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
56124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- PgHdr *pSrcPg = 0;
56125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
56126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
56127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
56128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 *zData = sqlite3PagerGetData(pSrcPg);
56129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
56130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3PagerUnref(pSrcPg);
56132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
56134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = backupTruncateFile(pFile, iSize);
56135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Sync the database file to disk. */
56138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
56139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3PagerSync(pDestPager);
56140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
56142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
56143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
56144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
56145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Finish committing the transaction to the destination database. */
56146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( SQLITE_OK==rc
56147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest, 0))
56148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
56149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_DONE;
56880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_DONE ){
56881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeUpdateMeta(p->pDest,1,p->iDestSchema+1);
56882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
56883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pDestDb ){
56884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ResetInternalSchema(p->pDestDb, -1);
56885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( destMode==PAGER_JOURNALMODE_WAL ){
56887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeSetVersion(p->pDest, 2);
56888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
56891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nDestTruncate;
56892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Set nDestTruncate to the final number of pages in the destination
56893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database. The complication here is that the destination page
56894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** size may be different to the source page size.
56895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
56896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the source page size is smaller than the destination page size,
56897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** round up. In this case the call to sqlite3OsTruncate() below will
56898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fix the size of the file. However it is important to call
56899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3PagerTruncateImage() here so that any pages in the
56900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** destination file that lie beyond the nDestTruncate page mark are
56901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** journalled by PagerCommitPhaseOne() before they are destroyed
56902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the file truncation.
56903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
56904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pgszSrc==sqlite3BtreeGetPageSize(p->pSrc) );
56905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pgszDest==sqlite3BtreeGetPageSize(p->pDest) );
56906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pgszSrc<pgszDest ){
56907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ratio = pgszDest/pgszSrc;
56908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nDestTruncate = (nSrcPage+ratio-1)/ratio;
56909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nDestTruncate==(int)PENDING_BYTE_PAGE(p->pDest->pBt) ){
56910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nDestTruncate--;
56911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
56913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nDestTruncate = nSrcPage * (pgszSrc/pgszDest);
56914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3PagerTruncateImage(pDestPager, nDestTruncate);
56916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pgszSrc<pgszDest ){
56918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the source page-size is smaller than the destination page-size,
56919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** two extra things may need to happen:
56920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
56921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The destination may need to be truncated, and
56922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
56923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Data stored on the pages immediately following the
56924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pending-byte page in the source database may need to be
56925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** copied into the destination database.
56926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
56927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const i64 iSize = (i64)pgszSrc * (i64)nSrcPage;
56928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_file * const pFile = sqlite3PagerFile(pDestPager);
56929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iOff;
56930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iEnd;
56931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pFile );
56933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (i64)nDestTruncate*(i64)pgszDest >= iSize || (
56934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nDestTruncate==(int)(PENDING_BYTE_PAGE(p->pDest->pBt)-1)
56935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && iSize>=PENDING_BYTE && iSize<=PENDING_BYTE+pgszDest
56936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ));
56937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This call ensures that all data required to recreate the original
56939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database has been stored in the journal for pDestPager and the
56940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** journal synced to disk. So at this point we may safely modify
56941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the database file in any way, knowing that if a power failure
56942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** occurs, the original database will be reconstructed from the
56943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** journal file. */
56944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 1);
56945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Write the extra pages and truncate the database file as required */
56947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iEnd = MIN(PENDING_BYTE + pgszDest, iSize);
56948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(
56949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iOff=PENDING_BYTE+pgszSrc;
56950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc==SQLITE_OK && iOff<iEnd;
56951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iOff+=pgszSrc
56952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
56953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ PgHdr *pSrcPg = 0;
56954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Pgno iSrcPg = (Pgno)((iOff/pgszSrc)+1);
56955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3PagerGet(pSrcPager, iSrcPg, &pSrcPg);
56956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
56957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *zData = sqlite3PagerGetData(pSrcPg);
56958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsWrite(pFile, zData, pgszSrc, iOff);
56959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3PagerUnref(pSrcPg);
56961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
56963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = backupTruncateFile(pFile, iSize);
56964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Sync the database file to disk. */
56967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
56968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3PagerSync(pDestPager);
56969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
56971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3PagerCommitPhaseOne(pDestPager, 0, 0);
56972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
56974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Finish committing the transaction to the destination database. */
56975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( SQLITE_OK==rc
56976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && SQLITE_OK==(rc = sqlite3BtreeCommitPhaseTwo(p->pDest, 0))
56977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
56978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_DONE;
56979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
56150 56980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
56151 56981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
56152 56982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
56153 56983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If bCloseTrans is true, then this function opened a read transaction
56154 56984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on the source database. Close the read transaction here. There is
@@ -56612,38 +57442,32 @@
56612 57442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** invoking an external callback, free it now. Calling this function
56613 57443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** does not free any Mem.zMalloc buffer.
56614 57444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
56615 57445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){
56616 57446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
56617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( p->flags & MEM_Agg );
56618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( p->flags & MEM_Dyn );
56619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( p->flags & MEM_RowSet );
56620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( p->flags & MEM_Frame );
56621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame) ){
56622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->flags&MEM_Agg ){
56623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemFinalize(p, p->u.pDef);
56624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->flags & MEM_Agg)==0 );
56625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemRelease(p);
56626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( p->flags&MEM_Dyn && p->xDel ){
56627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->flags&MEM_RowSet)==0 );
56628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->xDel((void *)p->z);
56629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->xDel = 0;
56630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( p->flags&MEM_RowSet ){
56631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3RowSetClear(p->u.pRowSet);
56632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( p->flags&MEM_Frame ){
56633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemSetNull(p);
56634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
57447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->flags&MEM_Agg ){
57448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemFinalize(p, p->u.pDef);
57449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (p->flags & MEM_Agg)==0 );
57450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemRelease(p);
57451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( p->flags&MEM_Dyn && p->xDel ){
57452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (p->flags&MEM_RowSet)==0 );
57453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xDel((void *)p->z);
57454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->xDel = 0;
57455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( p->flags&MEM_RowSet ){
57456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3RowSetClear(p->u.pRowSet);
57457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( p->flags&MEM_Frame ){
57458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemSetNull(p);
56635 57459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
56636 57460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
56637 57461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
56638 57462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
56639 57463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Release any memory held by the Mem. This may leave the Mem in an
56640 57464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inconsistent state, for example with (Mem.z==0) and
56641 57465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (Mem.type==SQLITE_TEXT).
56642 57466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
56643 57467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
56644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemReleaseExternal(p);
57468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemReleaseExt(p);
56645 57469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(p->db, p->zMalloc);
56646 57470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->z = 0;
56647 57471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zMalloc = 0;
56648 57472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xDel = 0;
56649 57473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -56961,11 +57785,11 @@
56961 57785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pFrom->z is used, then pTo->z points to the same thing as pFrom->z
56962 57786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and flags gets srcType (either MEM_Ephem or MEM_Static).
56963 57787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
56964 57788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
56965 57789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pFrom->flags & MEM_RowSet)==0 );
56966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemReleaseExternal(pTo);
57790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemReleaseExt(pTo);
56967 57791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pTo, pFrom, MEMCELLSIZE);
56968 57792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->xDel = 0;
56969 57793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pFrom->flags&MEM_Static)==0 ){
56970 57794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
56971 57795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( srcType==MEM_Ephem || srcType==MEM_Static );
@@ -56979,11 +57803,11 @@
56979 57803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
56980 57804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
56981 57805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
56982 57806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
56983 57807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pFrom->flags & MEM_RowSet)==0 );
56984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemReleaseExternal(pTo);
57808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemReleaseExt(pTo);
56985 57809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pTo, pFrom, MEMCELLSIZE);
56986 57810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->flags &= ~MEM_Dyn;
56987 57811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
56988 57812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTo->flags&(MEM_Str|MEM_Blob) ){
56989 57813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==(pFrom->flags&MEM_Static) ){
@@ -57934,10 +58758,16 @@
57934 58758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nOp - i >= 3 );
57935 58759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp[-1].opcode==OP_Integer );
57936 58760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = pOp[-1].p1;
57937 58761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n>nMaxArgs ) nMaxArgs = n;
57938 58762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
58763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( opcode==OP_Next ){
58764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p4.xAdvance = sqlite3BtreeNext;
58765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p4type = P4_ADVANCE;
58766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( opcode==OP_Prev ){
58767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p4.xAdvance = sqlite3BtreePrevious;
58768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p4type = P4_ADVANCE;
57939 58769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57940 58770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
57941 58771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pOp->opflags & OPFLG_JUMP)!=0 && pOp->p2<0 ){
57942 58772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( -1-pOp->p2<p->nLabel );
57943 58773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p2 = aLabel[-1-pOp->p2];
@@ -58025,37 +58855,34 @@
58025 58855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the value of the P1 operand for a specific instruction.
58026 58856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is useful when a large program is loaded from a
58027 58857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** static array using sqlite3VdbeAddOpList but we want to make a
58028 58858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** few minor changes to the program.
58029 58859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, int addr, int val){
58860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeChangeP1(Vdbe *p, u32 addr, int val){
58031 58861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p!=0 );
58032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( addr>=0 );
58033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nOp>addr ){
58862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ((u32)p->nOp)>addr ){
58034 58863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp[addr].p1 = val;
58035 58864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58036 58865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58037 58866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58038 58867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
58039 58868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the value of the P2 operand for a specific instruction.
58040 58869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is useful for setting a jump destination.
58041 58870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, int addr, int val){
58871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeChangeP2(Vdbe *p, u32 addr, int val){
58043 58872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p!=0 );
58044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( addr>=0 );
58045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nOp>addr ){
58873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ((u32)p->nOp)>addr ){
58046 58874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp[addr].p2 = val;
58047 58875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58048 58876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58049 58877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58050 58878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
58051 58879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the value of the P3 operand for a specific instruction.
58052 58880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, int addr, int val){
58881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeChangeP3(Vdbe *p, u32 addr, int val){
58054 58882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p!=0 );
58055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( addr>=0 );
58056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nOp>addr ){
58883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ((u32)p->nOp)>addr ){
58057 58884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp[addr].p3 = val;
58058 58885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58059 58886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58060 58887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58061 58888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -58442,10 +59269,14 @@
58442 59269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
58443 59270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58444 59271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case P4_SUBPROGRAM: {
58445 59272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_snprintf(nTemp, zTemp, "program");
58446 59273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
59274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
59275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case P4_ADVANCE: {
59276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zTemp[0] = 0;
59277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
58447 59278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58448 59279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: {
58449 59280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zP4 = pOp->p4.z;
58450 59281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zP4==0 ){
58451 59282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zP4 = zTemp;
@@ -59006,10 +59837,11 @@
59006 59837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nMem = 10;
59007 59838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
59008 59839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(zCsr, 0, zEnd-zCsr);
59009 59840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCsr += (zCsr - (u8*)0)&7;
59010 59841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( EIGHT_BYTE_ALIGNMENT(zCsr) );
59842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->expired = 0;
59011 59843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
59012 59844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Memory for registers, parameters, cursor, etc, is allocated in two
59013 59845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** passes. On the first pass, we try to reuse unused space at the
59014 59846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** end of the opcode array. If we are unable to satisfy all memory
59015 59847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** requirements by reusing the opcode array tail, then the second
@@ -59065,10 +59897,11 @@
59065 59897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
59066 59898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
59067 59899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCx==0 ){
59068 59900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
59069 59901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
59902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSorterClose(p->db, pCx);
59070 59903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCx->pBt ){
59071 59904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeClose(pCx->pBt);
59072 59905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The pCx->pCursor will be close automatically, if it exists, by
59073 59906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the call above. */
59074 59907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pCx->pCursor ){
@@ -61205,10 +62038,18 @@
61205 62038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = db->errCode = p->rc;
61206 62039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61207 62040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (rc&db->errMask);
61208 62041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61209 62042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
62044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The maximum number of times that a statement will try to reparse
62045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** itself before giving up and returning SQLITE_SCHEMA.
62046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
62047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_MAX_SCHEMA_RETRY
62048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_MAX_SCHEMA_RETRY 5
62049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
62050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
61210 62051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
61211 62052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the top-level implementation of sqlite3_step(). Call
61212 62053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3Step() to do most of the work. If a schema error occurs,
61213 62054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** call sqlite3Reprepare() and try again.
61214 62055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -61223,14 +62064,14 @@
61223 62064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_MISUSE_BKPT;
61224 62065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61225 62066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db = v->db;
61226 62067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(db->mutex);
61227 62068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
61228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && cnt++ < 5
62069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && cnt++ < SQLITE_MAX_SCHEMA_RETRY
61229 62070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
61230 62071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_reset(pStmt);
61231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- v->expired = 0;
62072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( v->expired==0 );
61232 62073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61233 62074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){
61234 62075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This case occurs after failing to recompile an sql statement.
61235 62076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The error message from the SQL compiler has already been loaded
61236 62077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into the database handle. This block copies the error message
@@ -62357,10 +63198,17 @@
62357 63198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Call sqlite3VdbeMemExpandBlob() on the supplied value (type Mem*)
62358 63199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P if required.
62359 63200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62360 63201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define ExpandBlob(P) (((P)->flags&MEM_Zero)?sqlite3VdbeMemExpandBlob(P):0)
62361 63202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Return true if the cursor was opened using the OP_OpenSorter opcode. */
63204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_MERGE_SORT
63205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define isSorter(x) 0
63206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
63207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define isSorter(x) ((x)->pSorter!=0)
63208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
63209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
62362 63210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
62363 63211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Argument pMem points at a register that will be passed to a
62364 63212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** user-defined function or returned to the user as the result of a query.
62365 63213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine sets the pMem->type variable used by the sqlite3_value_*()
62366 63214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routines.
@@ -62951,10 +63799,11 @@
62951 63799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *zEndHdr; /* Pointer to first byte after the header */
62952 63800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 offset; /* Offset into the data */
62953 63801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 szField; /* Number of bytes in the content of a field */
62954 63802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szHdr; /* Size of the header size field at start of record */
62955 63803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int avail; /* Number of bytes of available data */
63804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 t; /* A type code from the record header */
62956 63805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pReg; /* PseudoTable input register */
62957 63806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} am;
62958 63807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct OP_Affinity_stack_vars {
62959 63808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zAffinity; /* The affinity to be applied */
62960 63809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char cAff; /* A single character of affinity */
@@ -63109,11 +63958,10 @@
63109 63958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
63110 63959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
63111 63960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} bl;
63112 63961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct OP_Next_stack_vars {
63113 63962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
63114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- BtCursor *pCrsr;
63115 63963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
63116 63964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} bm;
63117 63965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct OP_IdxInsert_stack_vars {
63118 63966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
63119 63967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
@@ -63363,11 +64211,11 @@
63363 64211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){
63364 64212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2>0 );
63365 64213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2<=p->nMem );
63366 64214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut = &aMem[pOp->p2];
63367 64215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memAboutToChange(p, pOut);
63368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemReleaseExternal(pOut);
64216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemReleaseExt(pOut);
63369 64217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->flags = MEM_Int;
63370 64218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63371 64219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63372 64220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Sanity checking on other operands */
63373 64221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
@@ -63496,11 +64344,11 @@
63496 64344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
63497 64345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63498 64346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63499 64347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: HaltIfNull P1 P2 P3 P4 *
63500 64348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
63501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check the value in register P3. If is is NULL then Halt using
64349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check the value in register P3. If it is NULL then Halt using
63502 64350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parameter P1, P2, and P4 as if this were a Halt instruction. If the
63503 64351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value in register P3 is not NULL, then this routine is a no-op.
63504 64352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
63505 64353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_HaltIfNull: { /* in3 */
63506 64354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
@@ -63730,10 +64578,15 @@
63730 64578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( memIsValid(pIn1) );
63731 64579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memAboutToChange(p, pOut);
63732 64580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ac.zMalloc = pOut->zMalloc;
63733 64581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->zMalloc = 0;
63734 64582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemMove(pOut, pIn1);
64583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
64584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOut->pScopyFrom>=&aMem[u.ac.p1] && pOut->pScopyFrom<&aMem[u.ac.p1+pOp->p3] ){
64585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOut->pScopyFrom += u.ac.p1 - pOp->p2;
64586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
64587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
63735 64588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->zMalloc = u.ac.zMalloc;
63736 64589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(u.ac.p2++, pOut);
63737 64590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1++;
63738 64591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut++;
63739 64592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -64433,11 +65286,11 @@
64433 65286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** additional information.
64434 65287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
64435 65288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
64436 65289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** true or false and is never NULL. If both operands are NULL then the result
64437 65290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of comparison is false. If either operand is NULL then the result is true.
64438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If neither operand is NULL the the result is the same as it would be if
65291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If neither operand is NULL the result is the same as it would be if
64439 65292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the SQLITE_NULLEQ flag were omitted from P5.
64440 65293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
64441 65294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Eq P1 P2 P3 P4 P5
64442 65295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
64443 65296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This works just like the Lt opcode except that the jump is taken if
@@ -64445,11 +65298,11 @@
64445 65298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See the Lt opcode for additional information.
64446 65299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
64447 65300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If SQLITE_NULLEQ is set in P5 then the result of comparison is always either
64448 65301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** true or false and is never NULL. If both operands are NULL then the result
64449 65302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of comparison is true. If either operand is NULL then the result is false.
64450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If neither operand is NULL the the result is the same as it would be if
65303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If neither operand is NULL the result is the same as it would be if
64451 65304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the SQLITE_NULLEQ flag were omitted from P5.
64452 65305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
64453 65306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Le P1 P2 P3 P4 P5
64454 65307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
64455 65308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This works just like the Lt opcode except that the jump is taken if
@@ -64730,17 +65583,17 @@
64730 65583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
64731 65584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64732 65585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64733 65586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: If P1 P2 P3 * *
64734 65587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
64735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Jump to P2 if the value in register P1 is true. The value is
65588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Jump to P2 if the value in register P1 is true. The value
64736 65589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is considered true if it is numeric and non-zero. If the value
64737 65590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in P1 is NULL then take the jump if P3 is true.
64738 65591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
64739 65592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: IfNot P1 P2 P3 * *
64740 65593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
64741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Jump to P2 if the value in register P1 is False. The value is
65594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Jump to P2 if the value in register P1 is False. The value
64742 65595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is considered true if it has a numeric value of zero. If the value
64743 65596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in P1 is NULL then take the jump if P3 is true.
64744 65597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
64745 65598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_If: /* jump, in1 */
64746 65599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_IfNot: { /* jump, in1 */
@@ -64828,10 +65681,11 @@
64828 65681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *zEndHdr; /* Pointer to first byte after the header */
64829 65682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 offset; /* Offset into the data */
64830 65683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 szField; /* Number of bytes in the content of a field */
64831 65684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szHdr; /* Size of the header size field at start of record */
64832 65685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int avail; /* Number of bytes of available data */
65686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 t; /* A type code from the record header */
64833 65687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pReg; /* PseudoTable input register */
64834 65688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.am */
64835 65689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64836 65690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64837 65691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.p1 = pOp->p1;
@@ -64840,11 +65694,10 @@
64840 65694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&u.am.sMem, 0, sizeof(u.am.sMem));
64841 65695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.p1<p->nCursor );
64842 65696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>0 && pOp->p3<=p->nMem );
64843 65697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pDest = &aMem[pOp->p3];
64844 65698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memAboutToChange(p, u.am.pDest);
64845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MemSetTypeFlag(u.am.pDest, MEM_Null);
64846 65699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.zRec = 0;
64847 65700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64848 65701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This block sets the variable u.am.payloadSize to be the total number of
64849 65702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bytes in the record.
64850 65703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -64884,11 +65737,11 @@
64884 65737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
64885 65738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeCursorIsValid(u.am.pCrsr) );
64886 65739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeDataSize(u.am.pCrsr, &u.am.payloadSize);
64887 65740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK ); /* DataSize() cannot fail */
64888 65741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( u.am.pC->pseudoTableReg>0 ){
65742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( ALWAYS(u.am.pC->pseudoTableReg>0) ){
64890 65743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pReg = &aMem[u.am.pC->pseudoTableReg];
64891 65744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.pReg->flags & MEM_Blob );
64892 65745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( memIsValid(u.am.pReg) );
64893 65746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = u.am.pReg->n;
64894 65747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.zRec = u.am.pReg->z;
@@ -64897,13 +65750,14 @@
64897 65750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
64898 65751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Consider the row to be NULL */
64899 65752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = 0;
64900 65753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64901 65754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If u.am.payloadSize is 0, then just store a NULL */
65755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If u.am.payloadSize is 0, then just store a NULL. This can happen because of
65756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nullRow or because of a corrupt database. */
64903 65757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.payloadSize==0 ){
64904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( u.am.pDest->flags&MEM_Null );
65758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemSetTypeFlag(u.am.pDest, MEM_Null);
64905 65759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto op_column_out;
64906 65760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64907 65761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->aLimit[SQLITE_LIMIT_LENGTH]>=0 );
64908 65762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.payloadSize > (u32)db->aLimit[SQLITE_LIMIT_LENGTH] ){
64909 65763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto too_big;
@@ -65006,12 +65860,18 @@
65006 65860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the record to the start of the data for the u.am.i-th column
65007 65861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
65008 65862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.am.i=0; u.am.i<u.am.nField; u.am.i++){
65009 65863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.zIdx<u.am.zEndHdr ){
65010 65864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.aOffset[u.am.i] = u.am.offset;
65011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.am.zIdx += getVarint32(u.am.zIdx, u.am.aType[u.am.i]);
65012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.am.szField = sqlite3VdbeSerialTypeLen(u.am.aType[u.am.i]);
65865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( u.am.zIdx[0]<0x80 ){
65866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.t = u.am.zIdx[0];
65867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.zIdx++;
65868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
65869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.zIdx += sqlite3GetVarint32(u.am.zIdx, &u.am.t);
65870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
65871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.aType[u.am.i] = u.am.t;
65872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.am.szField = sqlite3VdbeSerialTypeLen(u.am.t);
65013 65873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.offset += u.am.szField;
65014 65874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.offset<u.am.szField ){ /* True if u.am.offset overflows */
65015 65875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.zIdx = &u.am.zEndHdr[1]; /* Forces SQLITE_CORRUPT return below */
65016 65876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
65017 65877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -65048,11 +65908,11 @@
65048 65908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a pointer to a Mem object.
65049 65909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
65050 65910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.aOffset[u.am.p2] ){
65051 65911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK );
65052 65912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.am.zRec ){
65053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemReleaseExternal(u.am.pDest);
65913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemReleaseExt(u.am.pDest);
65054 65914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSerialGet((u8 *)&u.am.zRec[u.am.aOffset[u.am.p2]], u.am.aType[u.am.p2], u.am.pDest);
65055 65915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
65056 65916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.len = sqlite3VdbeSerialTypeLen(u.am.aType[u.am.p2]);
65057 65917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemMove(&u.am.sMem, u.am.pDest);
65058 65918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeMemFromBtree(u.am.pCrsr, u.am.aOffset[u.am.p2], u.am.len, u.am.pC->isIndex, &u.am.sMem);
@@ -65065,11 +65925,11 @@
65065 65925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pDest->enc = encoding;
65066 65926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
65067 65927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p4type==P4_MEM ){
65068 65928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemShallowCopy(u.am.pDest, pOp->p4.pMem, MEM_Static);
65069 65929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
65070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( u.am.pDest->flags&MEM_Null );
65930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemSetTypeFlag(u.am.pDest, MEM_Null);
65071 65931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65072 65932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65073 65933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65074 65934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If we dynamically allocated space to hold the data (in the
65075 65935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3VdbeMemFromBtree() call above) then transfer control of that
@@ -65267,11 +66127,11 @@
65267 66127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 nEntry;
65268 66128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
65269 66129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.ap */
65270 66130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65271 66131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ap.pCrsr = p->apCsr[pOp->p1]->pCursor;
65272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.ap.pCrsr ){
66132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(u.ap.pCrsr) ){
65273 66133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCount(u.ap.pCrsr, &u.ap.nEntry);
65274 66134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
65275 66135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ap.nEntry = 0;
65276 66136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65277 66137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->u.i = u.ap.nEntry;
@@ -65843,19 +66703,13 @@
65843 66703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur->nullRow = 1;
65844 66704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur->isOrdered = 1;
65845 66705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCursor(u.aw.pX, u.aw.p2, u.aw.wrFlag, u.aw.pKeyInfo, u.aw.pCur->pCursor);
65846 66706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur->pKeyInfo = u.aw.pKeyInfo;
65847 66707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Since it performs no memory allocation or IO, the only values that
65849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3BtreeCursor() may return are SQLITE_EMPTY and SQLITE_OK.
65850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_EMPTY is only returned when attempting to open the table
65851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** rooted at page 1 of a zero-byte database. */
65852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( rc==SQLITE_EMPTY || rc==SQLITE_OK );
65853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_EMPTY ){
65854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.aw.pCur->pCursor = 0;
65855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_OK;
65856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
66708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Since it performs no memory allocation or IO, the only value that
66709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3BtreeCursor() may return is SQLITE_OK. */
66710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc==SQLITE_OK );
65857 66711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65858 66712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the VdbeCursor.isTable and isIndex variables. Previous versions of
65859 66713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite used to check if the root-page flags were sane at this point
65860 66714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and report database corruption if they were not, but this check has
65861 66715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** since moved into the btree layer. */
@@ -65862,11 +66716,11 @@
65862 66716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur->isTable = pOp->p4type!=P4_KEYINFO;
65863 66717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur->isIndex = !u.aw.pCur->isTable;
65864 66718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
65865 66719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65866 66720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: OpenEphemeral P1 P2 * P4 *
66721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: OpenEphemeral P1 P2 * P4 P5
65868 66722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
65869 66723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Open a new cursor P1 to a transient table.
65870 66724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The cursor is always opened read/write even if
65871 66725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the main database is read-only. The ephemeral
65872 66726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table is deleted automatically when the cursor is closed.
@@ -65879,18 +66733,30 @@
65879 66733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This opcode was once called OpenTemp. But that created
65880 66734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** confusion because the term "temp table", might refer either
65881 66735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to a TEMP table at the SQL level, or to a table opened by
65882 66736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this opcode. Then this opcode was call OpenVirtual. But
65883 66737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that created confusion with the whole virtual-table idea.
66738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
66739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The P5 parameter can be a mask of the BTREE_* flags defined
66740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in btree.h. These flags control aspects of the operation of
66741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the btree. The BTREE_OMIT_JOURNAL and BTREE_SINGLE flags are
66742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** added automatically.
65884 66743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
65885 66744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: OpenAutoindex P1 P2 * P4 *
65886 66745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
65887 66746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This opcode works the same as OP_OpenEphemeral. It has a
65888 66747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** different name to distinguish its use. Tables created using
65889 66748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by this opcode will be used for automatically created transient
65890 66749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** indices in joins.
65891 66750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
66751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: OpenSorter P1 P2 * P4 *
66752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
66753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode works like OP_OpenEphemeral except that it opens
66754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a transient index that is specifically designed to sort large
66755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tables using an external merge-sort algorithm.
66756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
66757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_OpenSorter:
65892 66758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_OpenAutoindex:
65893 66759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_OpenEphemeral: {
65894 66760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0 /* local variables moved into u.ax */
65895 66761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCx;
65896 66762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.ax */
@@ -65900,10 +66766,11 @@
65900 66766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_EXCLUSIVE |
65901 66767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_DELETEONCLOSE |
65902 66768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_TRANSIENT_DB;
65903 66769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65904 66770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 );
66771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pOp->opcode==OP_OpenSorter)==((pOp->p5 & BTREE_SORTER)!=0) );
65905 66772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
65906 66773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.ax.pCx==0 ) goto no_mem;
65907 66774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->nullRow = 1;
65908 66775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeOpen(db->pVfs, 0, db, &u.ax.pCx->pBt,
65909 66776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags);
@@ -65917,11 +66784,11 @@
65917 66784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** automatically created table with root-page 1 (an BLOB_INTKEY table).
65918 66785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
65919 66786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p4.pKeyInfo ){
65920 66787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pgno;
65921 66788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_KEYINFO );
65922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeCreateTable(u.ax.pCx->pBt, &pgno, BTREE_BLOBKEY);
66789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeCreateTable(u.ax.pCx->pBt, &pgno, BTREE_BLOBKEY | pOp->p5);
65923 66790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
65924 66791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pgno==MASTER_ROOT+1 );
65925 66792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCursor(u.ax.pCx->pBt, pgno, 1,
65926 66793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(KeyInfo*)pOp->p4.z, u.ax.pCx->pCursor);
65927 66794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->pKeyInfo = pOp->p4.pKeyInfo;
@@ -65933,10 +66800,15 @@
65933 66800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->isTable = 1;
65934 66801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65935 66802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65936 66803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
65937 66804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->isIndex = !u.ax.pCx->isTable;
66805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_MERGE_SORT
66806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && pOp->opcode==OP_OpenSorter ){
66807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeSorterInit(db, u.ax.pCx);
66808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
66809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
65938 66810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
65939 66811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65940 66812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65941 66813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: OpenPseudo P1 P2 P3 * *
65942 66814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -66052,11 +66924,11 @@
66052 66924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.az.pC->pseudoTableReg==0 );
66053 66925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OP_SeekLe == OP_SeekLt+1 );
66054 66926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OP_SeekGe == OP_SeekLt+2 );
66055 66927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OP_SeekGt == OP_SeekLt+3 );
66056 66928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.az.pC->isOrdered );
66057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.az.pC->pCursor!=0 ){
66929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(u.az.pC->pCursor!=0) ){
66058 66930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.az.oc = pOp->opcode;
66059 66931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.az.pC->nullRow = 0;
66060 66932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.az.pC->isTable ){
66061 66933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The input value in P3 might be of any type: integer, real, string,
66062 66934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** blob, or NULL. But it needs to be an integer before we can do
@@ -66390,11 +67262,11 @@
66390 67262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
66391 67263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66392 67264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
66393 67265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: NotExists P1 P2 P3 * *
66394 67266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
66395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Use the content of register P3 as a integer key. If a record
67267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the content of register P3 as an integer key. If a record
66396 67268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with that key does not exist in table of P1, then jump to P2.
66397 67269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the record does exist, then fall through. The cursor is left
66398 67270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointing to the record if it exists.
66399 67271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
66400 67272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The difference between this operation and NotFound is that this
@@ -66418,11 +67290,11 @@
66418 67290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bd.pC = p->apCsr[pOp->p1];
66419 67291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bd.pC!=0 );
66420 67292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bd.pC->isTable );
66421 67293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bd.pC->pseudoTableReg==0 );
66422 67294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bd.pCrsr = u.bd.pC->pCursor;
66423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.bd.pCrsr!=0 ){
67295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(u.bd.pCrsr!=0) ){
66424 67296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bd.res = 0;
66425 67297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bd.iKey = pIn3->u.i;
66426 67298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeMovetoUnpacked(u.bd.pCrsr, 0, u.bd.iKey, 0, &u.bd.res);
66427 67299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bd.pC->lastRowid = pIn3->u.i;
66428 67300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bd.pC->rowidIsValid = u.bd.res==0 ?1:0;
@@ -66468,11 +67340,11 @@
66468 67340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** written to register P2.
66469 67341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
66470 67342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If P3>0 then P3 is a register in the root frame of this VDBE that holds
66471 67343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the largest previously generated record number. No new record numbers are
66472 67344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** allowed to be less than this value. When this value reaches its maximum,
66473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a SQLITE_FULL error is generated. The P3 register is updated with the '
67345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an SQLITE_FULL error is generated. The P3 register is updated with the '
66474 67346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** generated record number. This P3 mechanism is used to help implement the
66475 67347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** AUTOINCREMENT feature.
66476 67348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
66477 67349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_NewRowid: { /* out2-prerelease */
66478 67350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0 /* local variables moved into u.be */
@@ -66842,10 +67714,17 @@
66842 67714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bh.pC->isTable || pOp->opcode==OP_RowKey );
66843 67715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bh.pC->isIndex || pOp->opcode==OP_RowData );
66844 67716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bh.pC!=0 );
66845 67717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bh.pC->nullRow==0 );
66846 67718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bh.pC->pseudoTableReg==0 );
67719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
67720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isSorter(u.bh.pC) ){
67721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode==OP_RowKey );
67722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeSorterRowkey(u.bh.pC, pOut);
67723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
67724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
67725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
66847 67726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bh.pC->pCursor!=0 );
66848 67727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bh.pCrsr = u.bh.pC->pCursor;
66849 67728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeCursorIsValid(u.bh.pCrsr) );
66850 67729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
66851 67730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or
@@ -66950,10 +67829,11 @@
66950 67829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66951 67830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bj.pC = p->apCsr[pOp->p1];
66952 67831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bj.pC!=0 );
66953 67832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bj.pC->nullRow = 1;
66954 67833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bj.pC->rowidIsValid = 0;
67834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.bj.pC->pCursor || u.bj.pC->pVtabCursor );
66955 67835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.bj.pC->pCursor ){
66956 67836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeClearCursor(u.bj.pC->pCursor);
66957 67837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66958 67838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
66959 67839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -66975,11 +67855,11 @@
66975 67855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
66976 67856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
66977 67857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bk.pC = p->apCsr[pOp->p1];
66978 67858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bk.pC!=0 );
66979 67859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bk.pCrsr = u.bk.pC->pCursor;
66980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.bk.pCrsr==0 ){
67860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NEVER(u.bk.pCrsr==0) ){
66981 67861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bk.res = 1;
66982 67862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
66983 67863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeLast(u.bk.pCrsr, &u.bk.res);
66984 67864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66985 67865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bk.pC->nullRow = (u8)u.bk.res;
@@ -67030,11 +67910,15 @@
67030 67910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67031 67911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
67032 67912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bl.pC = p->apCsr[pOp->p1];
67033 67913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bl.pC!=0 );
67034 67914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bl.res = 1;
67035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (u.bl.pCrsr = u.bl.pC->pCursor)!=0 ){
67915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isSorter(u.bl.pC) ){
67916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeSorterRewind(db, u.bl.pC, &u.bl.res);
67917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
67918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.bl.pCrsr = u.bl.pC->pCursor;
67919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.bl.pCrsr );
67036 67920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeFirst(u.bl.pCrsr, &u.bl.res);
67037 67921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bl.pC->atFirst = u.bl.res==0 ?1:0;
67038 67922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bl.pC->deferredMoveto = 0;
67039 67923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bl.pC->cacheStatus = CACHE_STALE;
67040 67924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bl.pC->rowidIsValid = 0;
@@ -67045,18 +67929,21 @@
67045 67929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2 - 1;
67046 67930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67047 67931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
67048 67932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67049 67933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: Next P1 P2 * * P5
67934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: Next P1 P2 * P4 P5
67051 67935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67052 67936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Advance cursor P1 so that it points to the next key/data pair in its
67053 67937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table or index. If there are no more key/value pairs then fall through
67054 67938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the following instruction. But if the cursor advance was successful,
67055 67939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jump immediately to P2.
67056 67940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67057 67941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The P1 cursor must be for a real table, not a pseudo-table.
67942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
67943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** P4 is always of type P4_ADVANCE. The function pointer points to
67944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3BtreeNext().
67058 67945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67059 67946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If P5 is positive and the jump is taken, then event counter
67060 67947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** number P5-1 in the prepared statement is incremented.
67061 67948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67062 67949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Prev
@@ -67067,19 +67954,21 @@
67067 67954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table or index. If there is no previous key/value pairs then fall through
67068 67955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the following instruction. But if the cursor backup was successful,
67069 67956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jump immediately to P2.
67070 67957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67071 67958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The P1 cursor must be for a real table, not a pseudo-table.
67959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
67960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** P4 is always of type P4_ADVANCE. The function pointer points to
67961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3BtreePrevious().
67072 67962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67073 67963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If P5 is positive and the jump is taken, then event counter
67074 67964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** number P5-1 in the prepared statement is incremented.
67075 67965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
67076 67966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Prev: /* jump */
67077 67967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Next: { /* jump */
67078 67968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0 /* local variables moved into u.bm */
67079 67969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
67080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- BtCursor *pCrsr;
67081 67970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
67082 67971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.bm */
67083 67972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67084 67973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CHECK_FOR_INTERRUPT;
67085 67974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
@@ -67086,19 +67975,21 @@
67086 67975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p5<=ArraySize(p->aCounter) );
67087 67976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bm.pC = p->apCsr[pOp->p1];
67088 67977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.bm.pC==0 ){
67089 67978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break; /* See ticket #2273 */
67090 67979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.bm.pCrsr = u.bm.pC->pCursor;
67092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.bm.pCrsr==0 ){
67093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.bm.pC->nullRow = 1;
67094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
67095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
67096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.bm.res = 1;
67097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( u.bm.pC->deferredMoveto==0 );
67098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = pOp->opcode==OP_Next ? sqlite3BtreeNext(u.bm.pCrsr, &u.bm.res) :
67099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3BtreePrevious(u.bm.pCrsr, &u.bm.res);
67980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isSorter(u.bm.pC) ){
67981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode==OP_Next );
67982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeSorterNext(db, u.bm.pC, &u.bm.res);
67983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
67984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.bm.res = 1;
67985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.bm.pC->deferredMoveto==0 );
67986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.bm.pC->pCursor );
67987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext );
67988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious );
67989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = pOp->p4.xAdvance(u.bm.pC->pCursor, &u.bm.res);
67990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
67100 67991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bm.pC->nullRow = (u8)u.bm.res;
67101 67992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bm.pC->cacheStatus = CACHE_STALE;
67102 67993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.bm.res==0 ){
67103 67994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2 - 1;
67104 67995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p5 ) p->aCounter[pOp->p5-1]++;
@@ -67110,11 +68001,11 @@
67110 68001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
67111 68002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67112 68003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67113 68004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: IdxInsert P1 P2 P3 * P5
67114 68005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Register P2 holds a SQL index key made using the
68006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Register P2 holds an SQL index key made using the
67116 68007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** MakeRecord instructions. This opcode writes that key
67117 68008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into the index P1. Data for the entry is nil.
67118 68009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67119 68010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P3 is a flag that provides a hint to the b-tree layer that this
67120 68011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** insert is likely to be an append.
@@ -67140,14 +68031,17 @@
67140 68031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bn.pC->isTable==0 );
67141 68032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = ExpandBlob(pIn2);
67142 68033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
67143 68034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bn.nKey = pIn2->n;
67144 68035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bn.zKey = pIn2->z;
67145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeInsert(u.bn.pCrsr, u.bn.zKey, u.bn.nKey, "", 0, 0, pOp->p3,
67146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bn.pC->seekResult : 0)
67147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
67148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( u.bn.pC->deferredMoveto==0 );
68036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeSorterWrite(db, u.bn.pC, u.bn.nKey);
68037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
68038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeInsert(u.bn.pCrsr, u.bn.zKey, u.bn.nKey, "", 0, 0, pOp->p3,
68039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((pOp->p5 & OPFLAG_USESEEKRESULT) ? u.bn.pC->seekResult : 0)
68040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
68041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.bn.pC->deferredMoveto==0 );
68042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
67149 68043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bn.pC->cacheStatus = CACHE_STALE;
67150 68044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67151 68045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67152 68046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
67153 68047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -69323,10 +70217,722 @@
69323 70217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69324 70218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69325 70219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* #ifndef SQLITE_OMIT_INCRBLOB */
69326 70220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69327 70221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of vdbeblob.c ********************************************/
70222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Begin file vdbesort.c ****************************************/
70223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2011 July 9
70225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The author disclaims copyright to this source code. In place of
70227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a legal notice, here is a blessing:
70228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you do good and not evil.
70230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you find forgiveness for yourself and forgive others.
70231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you share freely, never taking more than you give.
70232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *************************************************************************
70234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file contains code for the VdbeSorter object, used in concert with
70235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a VdbeCursor to sort large numbers of keys (as may be required, for
70236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** example, by CREATE INDEX statements on tables too large to fit in main
70237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** memory).
70238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_MERGE_SORT
70242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct VdbeSorterIter VdbeSorterIter;
70244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NOTES ON DATA STRUCTURE USED FOR N-WAY MERGES:
70247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** As keys are added to the sorter, they are written to disk in a series
70249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of sorted packed-memory-arrays (PMAs). The size of each PMA is roughly
70250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the same as the cache-size allowed for temporary databases. In order
70251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to allow the caller to extract keys from the sorter in sorted order,
70252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all PMAs currently stored on disk must be merged together. This comment
70253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** describes the data structure used to do so. The structure supports
70254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** merging any number of arrays in a single pass with no redundant comparison
70255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** operations.
70256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The aIter[] array contains an iterator for each of the PMAs being merged.
70258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An aIter[] iterator either points to a valid key or else is at EOF. For
70259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the purposes of the paragraphs below, we assume that the array is actually
70260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** N elements in size, where N is the smallest power of 2 greater to or equal
70261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the number of iterators being merged. The extra aIter[] elements are
70262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** treated as if they are empty (always at EOF).
70263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The aTree[] array is also N elements in size. The value of N is stored in
70265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the VdbeSorter.nTree variable.
70266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The final (N/2) elements of aTree[] contain the results of comparing
70268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pairs of iterator keys together. Element i contains the result of
70269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** comparing aIter[2*i-N] and aIter[2*i-N+1]. Whichever key is smaller, the
70270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aTree element is set to the index of it.
70271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For the purposes of this comparison, EOF is considered greater than any
70273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** other key value. If the keys are equal (only possible with two EOF
70274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** values), it doesn't matter which index is stored.
70275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The (N/4) elements of aTree[] that preceed the final (N/2) described
70277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** above contains the index of the smallest of each block of 4 iterators.
70278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** And so on. So that aTree[1] contains the index of the iterator that
70279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** currently points to the smallest key value. aTree[0] is unused.
70280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Example:
70282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[0] -> Banana
70284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[1] -> Feijoa
70285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[2] -> Elderberry
70286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[3] -> Currant
70287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[4] -> Grapefruit
70288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[5] -> Apple
70289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[6] -> Durian
70290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[7] -> EOF
70291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aTree[] = { X, 5 0, 5 0, 3, 5, 6 }
70293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The current element is "Apple" (the value of the key indicated by
70295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** iterator 5). When the Next() operation is invoked, iterator 5 will
70296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be advanced to the next key in its segment. Say the next key is
70297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "Eggplant":
70298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aIter[5] -> Eggplant
70300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The contents of aTree[] are updated first by comparing the new iterator
70302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 5 key to the current key of iterator 4 (still "Grapefruit"). The iterator
70303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 5 value is still smaller, so aTree[6] is set to 5. And so on up the tree.
70304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The value of iterator 6 - "Durian" - is now smaller than that of iterator
70305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 5, so aTree[3] is set to 6. Key 0 is smaller than key 6 (Banana<Durian),
70306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** so the value written into element 1 of the array is 0. As follows:
70307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aTree[] = { X, 0 0, 6 0, 3, 5, 6 }
70309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In other words, each time we advance to the next sorter element, log2(N)
70311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** key comparison operations are required, where N is the number of segments
70312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** being merged (rounded up to the next power of 2).
70313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct VdbeSorter {
70315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nWorking; /* Start a new b-tree after this many pages */
70316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBtree; /* Current size of b-tree contents as PMA */
70317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nTree; /* Used size of aTree/aIter (power of 2) */
70318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *aIter; /* Array of iterators to merge */
70319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *aTree; /* Current state of incremental merge */
70320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iWriteOff; /* Current write offset within file pTemp1 */
70321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iReadOff; /* Current read offset within file pTemp1 */
70322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_file *pTemp1; /* PMA file 1 */
70323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPMA; /* Number of PMAs stored in pTemp1 */
70324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
70325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following type is an iterator for a PMA. It caches the current key in
70328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** variables nKey/aKey. If the iterator is at EOF, pFile==0.
70329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct VdbeSorterIter {
70331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iReadOff; /* Current read offset */
70332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iEof; /* 1 byte past EOF for this iterator */
70333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_file *pFile; /* File iterator is reading from */
70334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nAlloc; /* Bytes of space at aAlloc */
70335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *aAlloc; /* Allocated space */
70336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nKey; /* Number of bytes in key */
70337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *aKey; /* Pointer to current key */
70338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
70339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Minimum allowable value for the VdbeSorter.nWorking variable */
70341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SORTER_MIN_WORKING 10
70342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Maximum number of segments to merge in a single pass. */
70344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SORTER_MAX_MERGE_COUNT 16
70345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Free all memory belonging to the VdbeSorterIter object passed as the second
70348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument. All structure fields are set to zero before returning.
70349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void vdbeSorterIterZero(sqlite3 *db, VdbeSorterIter *pIter){
70351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pIter->aAlloc);
70352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pIter, 0, sizeof(VdbeSorterIter));
70353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Advance iterator pIter to the next key in its PMA. Return SQLITE_OK if
70357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no error occurs, or an SQLite error code if one does.
70358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterIterNext(
70360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db, /* Database handle (for sqlite3DbMalloc() ) */
70361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *pIter /* Iterator to advance */
70362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
70363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Return Code */
70364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRead; /* Number of bytes read */
70365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRec; /* Size of record in bytes */
70366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOff; /* Size of serialized size varint in bytes */
70367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRead = pIter->iEof - pIter->iReadOff;
70369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRead>5 ) nRead = 5;
70370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRead<=0 ){
70371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This is an EOF condition */
70372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vdbeSorterIterZero(db, pIter);
70373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
70374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsRead(pIter->pFile, pIter->aAlloc, nRead, pIter->iReadOff);
70377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iOff = getVarint32(pIter->aAlloc, nRec);
70378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && (iOff+nRec)>nRead ){
70380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRead2; /* Number of extra bytes to read */
70381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (iOff+nRec)>pIter->nAlloc ){
70382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nNew = pIter->nAlloc*2;
70383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (iOff+nRec)>nNew ) nNew = nNew*2;
70384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->aAlloc = sqlite3DbReallocOrFree(db, pIter->aAlloc, nNew);
70385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pIter->aAlloc ) return SQLITE_NOMEM;
70386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->nAlloc = nNew;
70387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRead2 = iOff + nRec - nRead;
70390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsRead(
70391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->pFile, &pIter->aAlloc[nRead], nRead2, pIter->iReadOff+nRead
70392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
70393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nRec>0 || rc!=SQLITE_OK );
70396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->iReadOff += iOff+nRec;
70397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->nKey = nRec;
70398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->aKey = &pIter->aAlloc[iOff];
70399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Write a single varint, value iVal, to file-descriptor pFile. Return
70404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK if successful, or an SQLite error code if some error occurs.
70405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The value of *piOffset when this function is called is used as the byte
70407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** offset in file pFile to write to. Before returning, *piOffset is
70408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** incremented by the number of bytes written.
70409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterWriteVarint(
70411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_file *pFile, /* File to write to */
70412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iVal, /* Value to write as a varint */
70413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 *piOffset /* IN/OUT: Write offset in file pFile */
70414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
70415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 aVarint[9]; /* Buffer large enough for a varint */
70416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nVarint; /* Number of used bytes in varint */
70417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Result of write() call */
70418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nVarint = sqlite3PutVarint(aVarint, iVal);
70420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsWrite(pFile, aVarint, nVarint, *piOffset);
70421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *piOffset += nVarint;
70422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Read a single varint from file-descriptor pFile. Return SQLITE_OK if
70428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** successful, or an SQLite error code if some error occurs.
70429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The value of *piOffset when this function is called is used as the
70431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** byte offset in file pFile from whence to read the varint. If successful
70432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (i.e. if no IO error occurs), then *piOffset is set to the offset of
70433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the first byte past the end of the varint before returning. *piVal is
70434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set to the integer value read. If an error occurs, the final values of
70435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** both *piOffset and *piVal are undefined.
70436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterReadVarint(
70438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_file *pFile, /* File to read from */
70439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iEof, /* Total number of bytes in file */
70440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 *piOffset, /* IN/OUT: Read offset in pFile */
70441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 *piVal /* OUT: Value read from file */
70442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
70443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 aVarint[9]; /* Buffer large enough for a varint */
70444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iOff = *piOffset; /* Offset in file to read from */
70445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRead = 9; /* Number of bytes to read from file */
70446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Return code */
70447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iEof>iOff );
70449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (iEof-iOff)<nRead ){
70450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRead = iEof-iOff;
70451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsRead(pFile, aVarint, nRead, iOff);
70454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *piOffset += getVarint(aVarint, (u64 *)piVal);
70456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Initialize iterator pIter to scan through the PMA stored in file pFile
70463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** starting at offset iStart and ending at offset iEof-1. This function
70464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** leaves the iterator pointing to the first key in the PMA (or EOF if the
70465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** PMA is empty).
70466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterIterInit(
70468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db, /* Database handle */
70469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter, /* Sorter object */
70470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iStart, /* Start offset in pFile */
70471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *pIter, /* Iterator to populate */
70472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 *pnByte /* IN/OUT: Increment this value by PMA size */
70473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
70474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
70475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSorter->iWriteOff>iStart );
70477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIter->aAlloc==0 );
70478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->pFile = pSorter->pTemp1;
70479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->iReadOff = iStart;
70480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->nAlloc = 128;
70481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->aAlloc = (u8 *)sqlite3DbMallocRaw(db, pIter->nAlloc);
70482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pIter->aAlloc ){
70483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_NOMEM;
70484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iEof = pSorter->iWriteOff; /* EOF of file pSorter->pTemp1 */
70486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 nByte; /* Total size of PMA in bytes */
70487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterReadVarint(pSorter->pTemp1, iEof, &pIter->iReadOff, &nByte);
70488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnByte += nByte;
70489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter->iEof = pIter->iReadOff + nByte;
70490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterIterNext(db, pIter);
70493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called to compare two iterator keys when merging
70499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** multiple b-tree segments. Parameter iOut is the index of the aTree[]
70500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value to recalculate.
70501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterDoCompare(VdbeCursor *pCsr, int iOut){
70503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i1;
70505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i2;
70506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iRes;
70507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *p1;
70508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *p2;
70509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iOut<pSorter->nTree && iOut>0 );
70511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iOut>=(pSorter->nTree/2) ){
70513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i1 = (iOut - pSorter->nTree/2) * 2;
70514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i2 = i1 + 1;
70515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i1 = pSorter->aTree[iOut*2];
70517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i2 = pSorter->aTree[iOut*2+1];
70518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p1 = &pSorter->aIter[i1];
70521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p2 = &pSorter->aIter[i2];
70522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p1->pFile==0 ){
70524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iRes = i2;
70525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( p2->pFile==0 ){
70526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iRes = i1;
70527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char aSpace[150];
70529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UnpackedRecord *r1;
70530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r1 = sqlite3VdbeRecordUnpack(
70532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->pKeyInfo, p1->nKey, p1->aKey, aSpace, sizeof(aSpace)
70533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
70534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( r1==0 ) return SQLITE_NOMEM;
70535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3VdbeRecordCompare(p2->nKey, p2->aKey, r1)>=0 ){
70537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iRes = i1;
70538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iRes = i2;
70540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeDeleteUnpackedRecord(r1);
70542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->aTree[iOut] = iRes;
70545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
70546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Initialize the temporary index cursor just opened as a sorter cursor.
70550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *db, VdbeCursor *pCsr){
70552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->pKeyInfo && pCsr->pBt );
70553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->pSorter = sqlite3DbMallocZero(db, sizeof(VdbeSorter));
70554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (pCsr->pSorter ? SQLITE_OK : SQLITE_NOMEM);
70555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Free any cursor components allocated by sqlite3VdbeSorterXXX routines.
70559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){
70561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter ){
70563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->aIter ){
70564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
70565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pSorter->nTree; i++){
70566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vdbeSorterIterZero(db, &pSorter->aIter[i]);
70567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pSorter->aIter);
70569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->pTemp1 ){
70571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OsCloseFree(pSorter->pTemp1);
70572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pSorter);
70574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->pSorter = 0;
70575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Allocate space for a file-handle and open a temporary file. If successful,
70580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set *ppFile to point to the malloc'd file-handle and return SQLITE_OK.
70581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, set *ppFile to 0 and return an SQLite error code.
70582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterOpenTempFile(sqlite3 *db, sqlite3_file **ppFile){
70584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int dummy;
70585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3OsOpenMalloc(db->pVfs, 0, ppFile,
70586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_OPEN_TEMP_JOURNAL |
70587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
70588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE, &dummy
70589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
70590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Write the current contents of the b-tree to a PMA. Return SQLITE_OK
70595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if successful, or an SQLite error code otherwise.
70596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The format of a PMA is:
70598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * A varint. This varint contains the total number of bytes of content
70600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the PMA (not including the varint itself).
70601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * One or more records packed end-to-end in order of ascending keys.
70603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Each record consists of a varint followed by a blob of data (the
70604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** key). The varint is the number of bytes in the blob of data.
70605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterBtreeToPMA(sqlite3 *db, VdbeCursor *pCsr){
70607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Return code */
70608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int res = 0;
70610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* sqlite3BtreeFirst() cannot fail because sorter btrees are always held
70612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in memory and so an I/O error is not possible. */
70613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeFirst(pCsr->pCursor, &res);
70614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NEVER(rc!=SQLITE_OK) || res ) return rc;
70615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSorter->nBtree>0 );
70616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the first temporary PMA file has not been opened, open it now. */
70618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->pTemp1==0 ){
70619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterOpenTempFile(db, &pSorter->pTemp1);
70620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc!=SQLITE_OK || pSorter->pTemp1 );
70621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSorter->iWriteOff==0 );
70622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSorter->nPMA==0 );
70623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iWriteOff = pSorter->iWriteOff;
70627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *aMalloc = 0; /* Array used to hold a single record */
70628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nMalloc = 0; /* Allocated size of aMalloc[] in bytes */
70629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->nPMA++;
70631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(
70632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterWriteVarint(pSorter->pTemp1, pSorter->nBtree, &iWriteOff);
70633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc==SQLITE_OK && res==0;
70634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeNext(pCsr->pCursor, &res)
70635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
70636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 nKey; /* Size of this key in bytes */
70637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Write the size of the record in bytes to the output file */
70639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void)sqlite3BtreeKeySize(pCsr->pCursor, &nKey);
70640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterWriteVarint(pSorter->pTemp1, nKey, &iWriteOff);
70641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Make sure the aMalloc[] buffer is large enough for the record */
70643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && nKey>nMalloc ){
70644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aMalloc = sqlite3DbReallocOrFree(db, aMalloc, nKey);
70645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !aMalloc ){
70646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_NOMEM;
70647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nMalloc = nKey;
70649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Write the record itself to the output file */
70653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* sqlite3BtreeKey() cannot fail because sorter btrees held in memory */
70655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeKey(pCsr->pCursor, 0, nKey, aMalloc);
70656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(rc==SQLITE_OK) ){
70657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsWrite(pSorter->pTemp1, aMalloc, nKey, iWriteOff);
70658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iWriteOff += nKey;
70659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) break;
70663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This assert verifies that unless an error has occurred, the size of
70666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the PMA on disk is the same as the expected size stored in
70667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pSorter->nBtree. */
70668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc!=SQLITE_OK || pSorter->nBtree==(
70669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iWriteOff-pSorter->iWriteOff-sqlite3VarintLen(pSorter->nBtree)
70670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ));
70671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->iWriteOff = iWriteOff;
70673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, aMalloc);
70674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->nBtree = 0;
70677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called on a sorter cursor by the VDBE before each row
70682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is inserted into VdbeCursor.pCsr. Argument nKey is the size of the key, in
70683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bytes, about to be inserted.
70684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If it is determined that the temporary b-tree accessed via VdbeCursor.pCsr
70686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is large enough, its contents are written to a sorted PMA on disk and the
70687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tree emptied. This prevents the b-tree (which must be small enough to
70688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fit entirely in the cache in order to support efficient inserts) from
70689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** growing too large.
70690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An SQLite error code is returned if an error occurs. Otherwise, SQLITE_OK.
70692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterWrite(sqlite3 *db, VdbeCursor *pCsr, int nKey){
70694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Return code */
70695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter ){
70697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Pager *pPager = sqlite3BtreePager(pCsr->pBt);
70698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPage; /* Current size of temporary file in pages */
70699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Sorters never spill to disk */
70701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3PagerFile(pPager)->pMethods==0 );
70702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Determine how many pages the temporary b-tree has grown to */
70704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3PagerPagecount(pPager, &nPage);
70705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If pSorter->nWorking is still zero, but the temporary file has been
70707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** created in the file-system, then the most recent insert into the
70708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** current b-tree segment probably caused the cache to overflow (it is
70709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** also possible that sqlite3_release_memory() was called). So set the
70710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** size of the working set to a little less than the current size of the
70711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** file in pages. */
70712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->nWorking==0 && sqlite3PagerUnderStress(pPager) ){
70713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->nWorking = nPage-5;
70714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->nWorking<SORTER_MIN_WORKING ){
70715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->nWorking = SORTER_MIN_WORKING;
70716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the number of pages used by the current b-tree segment is greater
70720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than the size of the working set (VdbeSorter.nWorking), start a new
70721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** segment b-tree. */
70722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->nWorking && nPage>=pSorter->nWorking ){
70723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BtCursor *p = pCsr->pCursor;/* Cursor structure to close and reopen */
70724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iRoot; /* Root page of new tree */
70725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Copy the current contents of the b-tree into a PMA in sorted order.
70727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Close the currently open b-tree cursor. */
70728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterBtreeToPMA(db, pCsr);
70729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3BtreeCloseCursor(p);
70730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeDropTable(pCsr->pBt, 2, 0);
70733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
70734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3PagerPagecount(pPager, &nPage);
70735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc!=SQLITE_OK || nPage==1 );
70736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
70737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeCreateTable(pCsr->pBt, &iRoot, BTREE_BLOBKEY);
70740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iRoot==2 );
70743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeCursor(pCsr->pBt, iRoot, 1, pCsr->pKeyInfo, p);
70744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->nBtree += sqlite3VarintLen(nKey) + nKey;
70748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Helper function for sqlite3VdbeSorterRewind().
70754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int vdbeSorterInitMerge(
70756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db, /* Database handle */
70757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCursor *pCsr, /* Cursor handle for this sorter */
70758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 *pnByte /* Sum of bytes in all opened PMAs */
70759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
70760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Return code */
70762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Used to iterator through aIter[] */
70763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 nByte = 0; /* Total bytes in all opened PMAs */
70764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Initialize the iterators. */
70766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; rc==SQLITE_OK && i<SORTER_MAX_MERGE_COUNT; i++){
70767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *pIter = &pSorter->aIter[i];
70768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterIterInit(db, pSorter, pSorter->iReadOff, pIter, &nByte);
70769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->iReadOff = pIter->iEof;
70770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSorter->iReadOff<=pSorter->iWriteOff || rc!=SQLITE_OK );
70771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->iReadOff>=pSorter->iWriteOff ) break;
70772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Initialize the aTree[] array. */
70775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=pSorter->nTree-1; rc==SQLITE_OK && i>0; i--){
70776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterDoCompare(pCsr, i);
70777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnByte = nByte;
70780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Once the sorter has been populated, this function is called to prepare
70785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for iterating through its contents in sorted order.
70786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
70788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Return code */
70790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_file *pTemp2 = 0; /* Second temp file to use */
70791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iWrite2 = 0; /* Write offset for pTemp2 */
70792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nIter; /* Number of iterators used */
70793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nByte; /* Bytes of space required for aIter/aTree */
70794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int N = 2; /* Power of 2 >= nIter */
70795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSorter );
70797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Write the current b-tree to a PMA. Close the b-tree cursor. */
70799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterBtreeToPMA(db, pCsr);
70800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3BtreeCloseCursor(pCsr->pCursor);
70801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
70802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->nPMA==0 ){
70803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbEof = 1;
70804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
70805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate space for aIter[] and aTree[]. */
70808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nIter = pSorter->nPMA;
70809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nIter>SORTER_MAX_MERGE_COUNT ) nIter = SORTER_MAX_MERGE_COUNT;
70810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nIter>0 );
70811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( N<nIter ) N += N;
70812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nByte = N * (sizeof(int) + sizeof(VdbeSorterIter));
70813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->aIter = (VdbeSorterIter *)sqlite3DbMallocZero(db, nByte);
70814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pSorter->aIter ) return SQLITE_NOMEM;
70815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->aTree = (int *)&pSorter->aIter[N];
70816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->nTree = N;
70817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do {
70819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iNew; /* Index of new, merged, PMA */
70820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iNew=0;
70822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc==SQLITE_OK && iNew*SORTER_MAX_MERGE_COUNT<pSorter->nPMA;
70823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iNew++
70824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
70825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 nWrite; /* Number of bytes in new PMA */
70826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there are SORTER_MAX_MERGE_COUNT or less PMAs in file pTemp1,
70828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** initialize an iterator for each of them and break out of the loop.
70829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** These iterators will be incrementally merged as the VDBE layer calls
70830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3VdbeSorterNext().
70831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, if pTemp1 contains more than SORTER_MAX_MERGE_COUNT PMAs,
70833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** initialize interators for SORTER_MAX_MERGE_COUNT of them. These PMAs
70834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are merged into a single PMA that is written to file pTemp2.
70835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterInitMerge(db, pCsr, &nWrite);
70837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc!=SQLITE_OK || pSorter->aIter[ pSorter->aTree[1] ].pFile );
70838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK || pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
70839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
70840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Open the second temp file, if it is not already open. */
70843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTemp2==0 ){
70844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iWrite2==0 );
70845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterOpenTempFile(db, &pTemp2);
70846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterWriteVarint(pTemp2, nWrite, &iWrite2);
70850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bEof = 0;
70854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( rc==SQLITE_OK && bEof==0 ){
70855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nToWrite;
70856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *pIter = &pSorter->aIter[ pSorter->aTree[1] ];
70857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIter->pFile );
70858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nToWrite = pIter->nKey + sqlite3VarintLen(pIter->nKey);
70859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsWrite(pTemp2, pIter->aAlloc, nToWrite, iWrite2);
70860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iWrite2 += nToWrite;
70861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
70862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeSorterNext(db, pCsr, &bEof);
70863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
70869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
70870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_file *pTmp = pSorter->pTemp1;
70872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->nPMA = iNew;
70873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->pTemp1 = pTemp2;
70874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTemp2 = pTmp;
70875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->iWriteOff = iWrite2;
70876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSorter->iReadOff = 0;
70877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iWrite2 = 0;
70878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( rc==SQLITE_OK );
70880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTemp2 ){
70882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OsCloseFree(pTemp2);
70883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
70885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Advance to the next element in the sorter.
70890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, VdbeCursor *pCsr, int *pbEof){
70892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPrev = pSorter->aTree[1]; /* Index of iterator to advance */
70894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Index of aTree[] to recalculate */
70895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Return code */
70896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterIterNext(db, &pSorter->aIter[iPrev]);
70898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=(pSorter->nTree+iPrev)/2; rc==SQLITE_OK && i>0; i=i/2){
70899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = vdbeSorterDoCompare(pCsr, i);
70900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
70903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
70904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
70907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Copy the current sorter key into the memory cell pOut.
70908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
70909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(VdbeCursor *pCsr, Mem *pOut){
70910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorter *pSorter = pCsr->pSorter;
70911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeSorterIter *pIter;
70912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIter = &pSorter->aIter[ pSorter->aTree[1] ];
70914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Coverage testing note: As things are currently, this call will always
70916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** succeed. This is because the memory cell passed by the VDBE layer
70917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** happens to be the same one as was used to assemble the keys before they
70918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** were passed to the sorter - meaning it is always large enough for the
70919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** largest key. But this could change very easily, so we leave the call
70920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to sqlite3VdbeMemGrow() in. */
70921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NEVER(sqlite3VdbeMemGrow(pOut, pIter->nKey, 0)) ){
70922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
70923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOut->n = pIter->nKey;
70925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemSetTypeFlag(pOut, MEM_Blob);
70926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pOut->z, pIter->aKey, pIter->nKey);
70927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
70929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* #ifndef SQLITE_OMIT_MERGE_SORT */
70932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** End of vdbesort.c ********************************************/
69328 70934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file journal.c *****************************************/
69329 70935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69330 70936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2007 August 22
69331 70937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69332 70938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The author disclaims copyright to this source code. In place of
@@ -69839,10 +71445,12 @@
69839 71445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69840 71446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
69841 71447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains routines used for walking the parser tree for
69842 71448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an SQL statement.
69843 71449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
71451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
69844 71452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69845 71453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69846 71454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69847 71455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Walk an expression tree. Invoke the callback once for each node
69848 71456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the expression, while decending. (In other words, the callback
@@ -69977,10 +71585,12 @@
69977 71585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69978 71586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains routines used for walking the parser tree and
69979 71587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** resolve all identifiers by associating them with a particular
69980 71588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table and column.
69981 71589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
71591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
69982 71592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69983 71593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69984 71594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Turn the pExpr expression into an alias for the iCol-th column of the
69985 71595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** result set in pEList.
69986 71596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -70956,15 +72566,29 @@
70956 72566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Recursively resolve names in all subqueries
70957 72567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70958 72568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->pSrc->nSrc; i++){
70959 72569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pItem = &p->pSrc->a[i];
70960 72570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->pSelect ){
72571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NameContext *pNC; /* Used to iterate name contexts */
72572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRef = 0; /* Refcount for pOuterNC and outer contexts */
70961 72573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSavedContext = pParse->zAuthContext;
72574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Count the total number of references to pOuterNC and all of its
72576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parent contexts. After resolving references to expressions in
72577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pItem->pSelect, check if this value has changed. If so, then
72578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SELECT statement pItem->pSelect must be correlated. Set the
72579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pItem->isCorrelated flag if this is the case. */
72580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef += pNC->nRef;
72581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
70962 72582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->zName ) pParse->zAuthContext = pItem->zName;
70963 72583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ResolveSelectNames(pParse, pItem->pSelect, pOuterNC);
70964 72584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = zSavedContext;
70965 72585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr || db->mallocFailed ) return WRC_Abort;
72586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pNC=pOuterNC; pNC; pNC=pNC->pNext) nRef -= pNC->nRef;
72588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pItem->isCorrelated==0 && nRef<=0 );
72589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem->isCorrelated = (nRef!=0);
70966 72590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70967 72591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70968 72592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70969 72593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there are no aggregate functions in the result-set, and no GROUP BY
70970 72594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expression, do not allow aggregates in any of the other expressions.
@@ -72068,10 +73692,11 @@
72068 73692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->zName = sqlite3DbStrDup(db, pOldItem->zName);
72069 73693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->zAlias = sqlite3DbStrDup(db, pOldItem->zAlias);
72070 73694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->jointype = pOldItem->jointype;
72071 73695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->iCursor = pOldItem->iCursor;
72072 73696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->isPopulated = pOldItem->isPopulated;
73697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNewItem->isCorrelated = pOldItem->isCorrelated;
72073 73698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->zIndex = sqlite3DbStrDup(db, pOldItem->zIndex);
72074 73699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->notIndexed = pOldItem->notIndexed;
72075 73700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNewItem->pIndex = pOldItem->pIndex;
72076 73701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = pNewItem->pTab = pOldItem->pTab;
72077 73702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab ){
@@ -78958,11 +80583,11 @@
78958 80583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *p;
78959 80584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n;
78960 80585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
78961 80586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Token sEnd;
78962 80587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DbFixer sFix;
78963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Token *pName;
80588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Token *pName = 0;
78964 80589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb;
78965 80590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db;
78966 80591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
78967 80592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nVar>0 ){
78968 80593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "parameters are not allowed in views");
@@ -79263,10 +80888,33 @@
79263 80888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDestroyed = iLargest;
79264 80889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79265 80890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79266 80891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
79267 80892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
80895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Remove entries from the sqlite_stat1 and sqlite_stat2 tables
80896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** after a DROP INDEX or DROP TABLE command.
80897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3ClearStatTables(
80899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* The parsing context */
80900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDb, /* The database number */
80901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zType, /* "idx" or "tbl" */
80902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName /* Name of index or table */
80903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
80904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const char *azStatTab[] = { "sqlite_stat1", "sqlite_stat2" };
80905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
80906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zDbName = pParse->db->aDb[iDb].zName;
80907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<ArraySize(azStatTab); i++){
80908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3FindTable(pParse->db, azStatTab[i], zDbName) ){
80909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3NestedParse(pParse,
80910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM %Q.%s WHERE %s=%Q",
80911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zDbName, azStatTab[i], zType, zName
80912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
80913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79268 80916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79269 80917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
79270 80918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is called to do the work of a DROP TABLE statement.
79271 80919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pName is the name of the table to be dropped.
79272 80920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -79403,18 +81051,11 @@
79403 81051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database.
79404 81052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79405 81053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3NestedParse(pParse,
79406 81054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM %Q.%s WHERE tbl_name=%Q and type!='trigger'",
79407 81055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDb->zName, SCHEMA_TABLE(iDb), pTab->zName);
79408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Drop any statistics from the sqlite_stat1 table, if it exists */
79410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
79411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3NestedParse(pParse,
79412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM %Q.sqlite_stat1 WHERE tbl=%Q", pDb->zName, pTab->zName
79413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
79414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
81056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ClearStatTables(pParse, iDb, "tbl", pTab->zName);
79416 81057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isView && !IsVirtual(pTab) ){
79417 81058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
destroyTable(pParse, pTab);
79418 81059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79419 81060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79420 81061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Remove the table entry from SQLite's internal schema and modify
@@ -79592,18 +81233,28 @@
79592 81233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79593 81234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
79594 81235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab = pIndex->pTable; /* The table that is indexed */
79595 81236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTab = pParse->nTab++; /* Btree cursor used for pTab */
79596 81237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iIdx = pParse->nTab++; /* Btree cursor used for pIndex */
81238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iSorter = iTab; /* Cursor opened by OpenSorter (if in use) */
79597 81239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addr1; /* Address of top of loop */
79598 81240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tnum; /* Root page of index */
79599 81241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v; /* Generate code into this virtual machine */
79600 81242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKey; /* KeyInfo for index */
79601 81243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regIdxKey; /* Registers containing the index key */
79602 81244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRecord; /* Register holding assemblied index record */
79603 81245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db; /* The database connection */
79604 81246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
81247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
81248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Set bUseSorter to use OP_OpenSorter, or clear it to insert directly
81249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into the index. The sorter is used unless either OMIT_MERGE_SORT is
81250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** defined or the system is configured to store temp files in-memory. */
81251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_MERGE_SORT
81252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const int bUseSorter = 0;
81253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
81254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int bUseSorter = !sqlite3TempInMemory(pParse->db);
81255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
79605 81256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79606 81257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTHORIZATION
79607 81258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3AuthCheck(pParse, SQLITE_REINDEX, pIndex->zName, 0,
79608 81259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->aDb[iDb].zName ) ){
79609 81260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
@@ -79625,14 +81276,33 @@
79625 81276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_OpenWrite, iIdx, tnum, iDb,
79626 81277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char *)pKey, P4_KEYINFO_HANDOFF);
79627 81278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( memRootPage>=0 ){
79628 81279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, 1);
79629 81280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
81281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
81282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Open the sorter cursor if we are to use one. */
81283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bUseSorter ){
81284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iSorter = pParse->nTab++;
81285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_OpenSorter, iSorter, 0, 0, (char*)pKey, P4_KEYINFO);
81286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, BTREE_SORTER);
81287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
81288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
81289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Open the table. Loop through all rows of the table, inserting index
81290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** records into the sorter. */
79630 81291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3OpenTable(pParse, iTab, iDb, pTab, OP_OpenRead);
79631 81292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr1 = sqlite3VdbeAddOp2(v, OP_Rewind, iTab, 0);
79632 81293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regRecord = sqlite3GetTempReg(pParse);
79633 81294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regIdxKey = sqlite3GenerateIndexKey(pParse, pIndex, iTab, regRecord, 1);
81295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
81296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bUseSorter ){
81297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IdxInsert, iSorter, regRecord);
81298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1);
81299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, addr1);
81300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr1 = sqlite3VdbeAddOp2(v, OP_Sort, iSorter, 0);
81301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_RowKey, iSorter, regRecord);
81302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
81303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79634 81304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIndex->onError!=OE_None ){
79635 81305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int regRowid = regIdxKey + pIndex->nColumn;
79636 81306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int j2 = sqlite3VdbeCurrentAddr(v) + 2;
79637 81307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void * const pRegKey = SQLITE_INT_TO_PTR(regIdxKey);
79638 81308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -79647,17 +81317,19 @@
79647 81317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79648 81318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_IsUnique, iIdx, j2, regRowid, pRegKey, P4_INT32);
79649 81319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3HaltConstraint(
79650 81320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse, OE_Abort, "indexed columns are not unique", P4_STATIC);
79651 81321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_IdxInsert, iIdx, regRecord);
81322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, bUseSorter);
79653 81323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
79654 81324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, regRecord);
79655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Next, iTab, addr1+1);
81325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Next, iSorter, addr1+1);
79656 81326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addr1);
81327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79657 81328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, iTab);
79658 81329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, iIdx);
81330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp1(v, OP_Close, iSorter);
79659 81331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79660 81332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79661 81333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
79662 81334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Create a new index for an SQL table. pName1.pName2 is the name of the index
79663 81335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and pTblList is the name of the table that is to be indexed. Both will
@@ -80075,11 +81747,11 @@
80075 81747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStart ){
80076 81748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pEnd!=0 );
80077 81749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A named index with an explicit CREATE INDEX statement */
80078 81750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zStmt = sqlite3MPrintf(db, "CREATE%s INDEX %.*s",
80079 81751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
onError==OE_None ? "" : " UNIQUE",
80080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEnd->z - pName->z + 1,
81752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (int)(pEnd->z - pName->z) + 1,
80081 81753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pName->z);
80082 81754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
80083 81755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* An automatic index created by a PRIMARY KEY or UNIQUE constraint */
80084 81756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* zStmt = sqlite3MPrintf(""); */
80085 81757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zStmt = 0;
@@ -80233,19 +81905,13 @@
80233 81905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
80234 81906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v ){
80235 81907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginWriteOperation(pParse, 1, iDb);
80236 81908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3NestedParse(pParse,
80237 81909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"DELETE FROM %Q.%s WHERE name=%Q AND type='index'",
80238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
80239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex->zName
80240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
80241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
80242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3NestedParse(pParse,
80243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM %Q.sqlite_stat1 WHERE idx=%Q",
80244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->aDb[iDb].zName, pIndex->zName
80245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
80246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
81910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->aDb[iDb].zName, SCHEMA_TABLE(iDb), pIndex->zName
81911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
81912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ClearStatTables(pParse, iDb, "idx", pIndex->zName);
80247 81913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ChangeCookie(pParse, iDb);
80248 81914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
destroyRootPage(pParse, pIndex->tnum, iDb);
80249 81915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_DropIndex, iDb, 0, 0, pIndex->zName, 0);
80250 81916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80251 81917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -80613,12 +82279,13 @@
80613 82279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The operator is "natural cross join". The A and B operands are stored
80614 82280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in p->a[0] and p->a[1], respectively. The parser initially stores the
80615 82281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** operator with A. This routine shifts that operator over to B.
80616 82282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
80617 82283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3SrcListShiftJoinType(SrcList *p){
80618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p && p->a ){
82284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p ){
80619 82285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
82286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->a || p->nSrc==0 );
80620 82287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=p->nSrc-1; i>0; i--){
80621 82288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->a[i].jointype = p->a[i-1].jointype;
80622 82289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80623 82290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->a[0].jointype = 0;
80624 82291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -81870,11 +83537,13 @@
81870 83537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRowid; /* Actual register containing rowids */
81871 83538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
81872 83539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Collect rowids of every row to be deleted.
81873 83540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
81874 83541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet);
81875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0,WHERE_DUPLICATES_OK);
83542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo = sqlite3WhereBegin(
83543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse, pTabList, pWhere, 0, 0, WHERE_DUPLICATES_OK
83544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
81876 83545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ) goto delete_from_cleanup;
81877 83546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regRowid = sqlite3ExprCodeGetColumn(pParse, pTab, -1, iCur, iRowid);
81878 83547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_RowSetAdd, iRowSet, regRowid);
81879 83548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->flags & SQLITE_CountRows ){
81880 83549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_AddImm, memCnt, 1);
@@ -82135,12 +83804,18 @@
82135 83804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, iCur, idx, regBase+j);
82136 83805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ColumnDefault(v, pTab, idx, -1);
82137 83806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82138 83807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82139 83808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( doMakeRec ){
83809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zAff;
83810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab->pSelect || (pParse->db->flags & SQLITE_IdxRealAsInt)!=0 ){
83811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAff = 0;
83812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
83813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zAff = sqlite3IndexAffinityStr(v, pIdx);
83814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
82140 83815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol+1, regOut);
82141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP4(v, -1, sqlite3IndexAffinityStr(v, pIdx), P4_TRANSIENT);
83816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP4(v, -1, zAff, P4_TRANSIENT);
82142 83817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82143 83818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempRange(pParse, regBase, nCol+1);
82144 83819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return regBase;
82145 83820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82146 83821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -82162,10 +83837,12 @@
82162 83837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
82163 83838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** There is only one exported symbol in this file - the function
82164 83839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqliteRegisterBuildinFunctions() found at the bottom of the file.
82165 83840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** All other code has file scope.
82166 83841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
83842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
83843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
82167 83844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
82168 83845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
82169 83846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the collating function associated with a function.
82170 83847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
82171 83848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
@@ -84311,11 +85988,11 @@
84311 85988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84312 85989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Create VDBE to loop through the entries in pSrc that match the WHERE
84313 85990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** clause. If the constraint is not deferred, throw an exception for
84314 85991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** each row found. Otherwise, for deferred constraints, increment the
84315 85992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** deferred constraint counter by nIncr for each row selected. */
84316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0);
85993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo = sqlite3WhereBegin(pParse, pSrc, pWhere, 0, 0, 0);
84317 85994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nIncr>0 && pFKey->isDeferred==0 ){
84318 85995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ParseToplevel(pParse)->mayAbort = 1;
84319 85996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84320 85997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, nIncr);
84321 85998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo ){
@@ -84485,11 +86162,28 @@
84485 86162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo = sqlite3FindTable(db, pFKey->zTo, zDb);
84486 86163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
84487 86164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo = sqlite3LocateTable(pParse, 0, pFKey->zTo, zDb);
84488 86165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84489 86166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pTo || locateFkeyIndex(pParse, pTo, pFKey, &pIdx, &aiFree) ){
86167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( isIgnoreErrors==0 || (regOld!=0 && regNew==0) );
84490 86168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isIgnoreErrors || db->mallocFailed ) return;
86169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTo==0 ){
86170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If isIgnoreErrors is true, then a table is being dropped. In this
86171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** case SQLite runs a "DELETE FROM xxx" on the table being dropped
86172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** before actually dropping it in order to check FK constraints.
86173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the parent table of an FK constraint on the current table is
86174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** missing, behave as if it is empty. i.e. decrement the relevant
86175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FK counter for each row of the current table with non-NULL keys.
86176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
86177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v = sqlite3GetVdbe(pParse);
86178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iJump = sqlite3VdbeCurrentAddr(v) + pFKey->nCol + 1;
86179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pFKey->nCol; i++){
86180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iReg = pFKey->aCol[i].iFrom + regOld + 1;
86181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IsNull, iReg, iJump);
86182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
86183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_FkCounter, pFKey->isDeferred, -1);
86184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
84491 86185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
84492 86186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84493 86187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFKey->nCol==1 || (aiFree && pIdx) );
84494 86188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84495 86189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aiFree ){
@@ -87178,10 +88872,13 @@
87178 88872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*strnicmp)(const char*,const char*,int);
87179 88873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*unlock_notify)(sqlite3*,void(*)(void**,int),void*);
87180 88874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*wal_autocheckpoint)(sqlite3*,int);
87181 88875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int (*wal_checkpoint)(sqlite3*,const char*);
87182 88876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *(*wal_hook)(sqlite3*,int(*)(void*,sqlite3*,const char*,int),void*);
88877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*blob_reopen)(sqlite3_blob*,sqlite3_int64);
88878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*vtab_config)(sqlite3*,int op,...);
88879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*vtab_on_conflict)(sqlite3*);
87183 88880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
87184 88881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87185 88882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
87186 88883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following macros redefine the API routines so that they are
87187 88884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** redirected throught the global sqlite3_api structure.
@@ -87378,19 +89075,23 @@
87378 89075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_strnicmp sqlite3_api->strnicmp
87379 89076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_unlock_notify sqlite3_api->unlock_notify
87380 89077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_wal_autocheckpoint sqlite3_api->wal_autocheckpoint
87381 89078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_wal_checkpoint sqlite3_api->wal_checkpoint
87382 89079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_wal_hook sqlite3_api->wal_hook
89080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sqlite3_blob_reopen sqlite3_api->blob_reopen
89081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sqlite3_vtab_config sqlite3_api->vtab_config
89082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sqlite3_vtab_on_conflict sqlite3_api->vtab_on_conflict
87383 89083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_CORE */
87384 89084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87385 89085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_EXTENSION_INIT1 const sqlite3_api_routines *sqlite3_api = 0;
87386 89086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_EXTENSION_INIT2(v) sqlite3_api = v;
87387 89087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87388 89088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* _SQLITE3EXT_H_ */
87389 89089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87390 89090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of sqlite3ext.h ******************************************/
87391 89091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in loadext.c ********************/
89092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
87392 89093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87393 89094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_LOAD_EXTENSION
87394 89095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87395 89096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
87396 89097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Some API routines are omitted when various features are
@@ -87452,10 +89153,12 @@
87452 89153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87453 89154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_VIRTUALTABLE
87454 89155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3_create_module 0
87455 89156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3_create_module_v2 0
87456 89157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3_declare_vtab 0
89158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3_vtab_config 0
89159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3_vtab_on_conflict 0
87457 89160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
87458 89161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87459 89162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_SHARED_CACHE
87460 89163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3_enable_shared_cache 0
87461 89164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -87475,10 +89178,11 @@
87475 89178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_blob_bytes 0
87476 89179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_blob_close 0
87477 89180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_blob_open 0
87478 89181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_blob_read 0
87479 89182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_blob_write 0
89183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sqlite3_blob_reopen 0
87480 89184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
87481 89185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87482 89186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
87483 89187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following structure contains pointers to all SQLite API routines.
87484 89188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A pointer to this structure is passed into extensions when they are
@@ -87740,10 +89444,13 @@
87740 89444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
87741 89445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
87742 89446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
87743 89447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
87744 89448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
89449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_blob_reopen,
89450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab_config,
89451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_vtab_on_conflict,
87745 89452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
87746 89453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87747 89454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
87748 89455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Attempt to load an SQLite extension library contained in the file
87749 89456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zFile. The entry point is zProc. zProc may be 0 in which case a
@@ -94129,10 +95836,11 @@
94129 95836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pHaving; /* The HAVING clause. May be NULL */
94130 95837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isDistinct; /* True if the DISTINCT keyword is present */
94131 95838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int distinct; /* Table to use for the distinct set */
94132 95839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = 1; /* Value to return from this function */
94133 95840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrSortIndex; /* Address of an OP_OpenEphemeral instruction */
95841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrDistinctIndex; /* Address of an OP_OpenEphemeral instruction */
94134 95842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AggInfo sAggInfo; /* Information used by aggregate queries */
94135 95843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iEnd; /* Address of the end of the query */
94136 95844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db; /* The database connection */
94137 95845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94138 95846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_EXPLAIN
@@ -94255,20 +95963,10 @@
94255 95963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
explainSetInteger(pParse->iSelectId, iRestoreSelectId);
94256 95964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
94257 95965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94258 95966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
94259 95967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If possible, rewrite the query to use GROUP BY instead of DISTINCT.
94261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** GROUP BY might use an index, DISTINCT never does.
94262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
94263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->pGroupBy==0 || (p->selFlags & SF_Aggregate)!=0 );
94264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ){
94265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0);
94266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pGroupBy = p->pGroupBy;
94267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->selFlags &= ~SF_Distinct;
94268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
94269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
94270 95968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is both a GROUP BY and an ORDER BY clause and they are
94271 95969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** identical, then disable the ORDER BY clause since the GROUP BY
94272 95970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will cause elements to come out in the correct order. This is
94273 95971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an optimization - the correct answer should result regardless.
94274 95972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Use the SQLITE_GroupByOrder flag with SQLITE_TESTCTRL_OPTIMIZER
@@ -94276,10 +95974,34 @@
94276 95974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94277 95975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ExprListCompare(p->pGroupBy, pOrderBy)==0
94278 95976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (db->flags & SQLITE_GroupByOrder)==0 ){
94279 95977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrderBy = 0;
94280 95978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
95980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the query is DISTINCT with an ORDER BY but is not an aggregate, and
95981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the select-list is the same as the ORDER BY list, then this query
95982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can be rewritten as a GROUP BY. In other words, this:
95983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
95984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SELECT DISTINCT xyz FROM ... ORDER BY xyz
95985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
95986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is transformed to:
95987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
95988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SELECT xyz FROM ... GROUP BY xyz
95989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
95990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The second form is preferred as a single index (or temp-table) may be
95991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used for both the ORDER BY and DISTINCT processing. As originally
95992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** written the query must use a temp-table for at least one of the ORDER
95993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** BY and DISTINCT, and an index or separate temp-table for the other.
95994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
95995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct
95996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3ExprListCompare(pOrderBy, p->pEList)==0
95997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
95998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->selFlags &= ~SF_Distinct;
95999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pGroupBy = sqlite3ExprListDup(db, p->pEList, 0);
96000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGroupBy = p->pGroupBy;
96001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOrderBy = 0;
96002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
94281 96003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94282 96004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is an ORDER BY clause, then this sorting
94283 96005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index might end up being unused if the data can be
94284 96006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** extracted in pre-sorted order. If that is the case, then the
94285 96007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** OP_OpenEphemeral instruction will be changed to an OP_Noop once
@@ -94312,26 +96034,25 @@
94312 96034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94313 96035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open a virtual index to use for the distinct set.
94314 96036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94315 96037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->selFlags & SF_Distinct ){
94316 96038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo;
94317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( isAgg || pGroupBy );
94318 96039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
distinct = pParse->nTab++;
94319 96040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
94320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
94321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
96041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addrDistinctIndex = sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
96042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (char*)pKeyInfo, P4_KEYINFO_HANDOFF);
94322 96043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
94323 96044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
94324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- distinct = -1;
96045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ distinct = addrDistinctIndex = -1;
94325 96046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94326 96047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94327 96048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Aggregate and non-aggregate queries are handled differently */
94328 96049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !isAgg && pGroupBy==0 ){
94329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* This case is for non-aggregate queries
94330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Begin the database scan
94331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
94332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, 0);
96050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pDist = (isDistinct ? p->pEList : 0);
96051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Begin the database scan. */
96053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pOrderBy, pDist, 0);
94333 96054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ) goto select_end;
94334 96055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo->nRowOut < p->nSelectRow ) p->nSelectRow = pWInfo->nRowOut;
94335 96056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94336 96057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If sorting index that was created by a prior OP_OpenEphemeral
94337 96058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** instruction ended up not being needed, then change the OP_OpenEphemeral
@@ -94340,14 +96061,56 @@
94340 96061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( addrSortIndex>=0 && pOrderBy==0 ){
94341 96062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeToNoop(v, addrSortIndex, 1);
94342 96063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->addrOpenEphm[2] = -1;
94343 96064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94344 96065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Use the standard inner loop
94346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
94347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(!isDistinct);
94348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, -1, pDest,
96066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWInfo->eDistinct ){
96067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeOp *pOp; /* No longer required OpenEphemeral instr. */
96068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( addrDistinctIndex>0 );
96070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp = sqlite3VdbeGetOp(v, addrDistinctIndex);
96071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( isDistinct );
96073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED
96074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pWInfo->eDistinct==WHERE_DISTINCT_UNIQUE
96075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
96076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ distinct = -1;
96077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWInfo->eDistinct==WHERE_DISTINCT_ORDERED ){
96078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iJump;
96079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iExpr;
96080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iFlag = ++pParse->nMem;
96081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iBase = pParse->nMem+1;
96082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iBase2 = iBase + pEList->nExpr;
96083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem += (pEList->nExpr*2);
96084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Change the OP_OpenEphemeral coded earlier to an OP_Integer. The
96086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** OP_Integer initializes the "first row" flag. */
96087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->opcode = OP_Integer;
96088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p1 = 1;
96089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->p2 = iFlag;
96090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprCodeExprList(pParse, pEList, iBase, 1);
96092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iJump = sqlite3VdbeCurrentAddr(v) + 1 + pEList->nExpr + 1 + 1;
96093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_If, iFlag, iJump-1);
96094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iExpr=0; iExpr<pEList->nExpr; iExpr++){
96095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CollSeq *pColl = sqlite3ExprCollSeq(pParse, pEList->a[iExpr].pExpr);
96096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Ne, iBase+iExpr, iJump, iBase2+iExpr);
96097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ);
96098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
96099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
96100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, pWInfo->iContinue);
96101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, iFlag);
96103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3VdbeCurrentAddr(v)==iJump );
96104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Move, iBase, iBase2, pEList->nExpr);
96105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
96106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->opcode = OP_Noop;
96107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
96108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
96109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Use the standard inner loop. */
96111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ selectInnerLoop(pParse, p, pEList, 0, 0, pOrderBy, distinct, pDest,
94349 96112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->iContinue, pWInfo->iBreak);
94350 96113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94351 96114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* End the database scan loop.
94352 96115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94353 96116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereEnd(pWInfo);
@@ -94453,11 +96216,11 @@
94453 96216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This might involve two separate loops with an OP_Sort in between, or
94454 96217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it might be a single loop that uses an index to extract information
94455 96218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the right order to begin with.
94456 96219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94457 96220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
94458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0);
96221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pGroupBy, 0, 0);
94459 96222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ) goto select_end;
94460 96223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pGroupBy==0 ){
94461 96224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The optimizer is able to deliver rows in group by order so
94462 96225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we do not have to sort. The OP_OpenEphemeral table will be
94463 96226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cancelled later because we still need to use the pKeyInfo
@@ -94715,11 +96478,11 @@
94715 96478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This case runs if the aggregate has no GROUP BY clause. The
94716 96479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** processing is much simpler since there is only a single row
94717 96480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of output.
94718 96481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94719 96482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
resetAccumulator(pParse, &sAggInfo);
94720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, flag);
96483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, &pMinMax, 0, flag);
94721 96484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ){
94722 96485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(db, pDel);
94723 96486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto select_end;
94724 96487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94725 96488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
updateAccumulator(pParse, &sAggInfo);
@@ -94894,10 +96657,12 @@
94894 96657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface routine of sqlite3_exec().
94895 96658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
94896 96659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These routines are in a separate files so that they will not be linked
94897 96660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if they are not used.
94898 96661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
96663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
94899 96664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94900 96665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_GET_TABLE
94901 96666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94902 96667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
94903 96668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This structure is used to pass data from sqlite3_get_table() through
@@ -95191,19 +96956,32 @@
95191 96956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
95192 96957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iDb<0 ){
95193 96958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto trigger_cleanup;
95194 96959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95195 96960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pTableName || db->mallocFailed ){
96962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto trigger_cleanup;
96963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
96964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
96965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A long-standing parser bug is that this syntax was allowed:
96966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
96967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TRIGGER attached.demo AFTER INSERT ON attached.tab ....
96968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^^^^^^^^
96969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
96970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** To maintain backwards compatibility, ignore the database
96971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** name on pTableName if we are reparsing our of SQLITE_MASTER.
96972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
96973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db->init.busy && iDb!=1 ){
96974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pTableName->a[0].zDatabase);
96975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTableName->a[0].zDatabase = 0;
96976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
95196 96977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95197 96978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the trigger name was unqualified, and the table is a temp table,
95198 96979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then set iDb to 1 to create the trigger in the temporary database.
95199 96980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If sqlite3SrcListLookup() returns 0, indicating the table does not
95200 96981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** exist, the error is caught by the block below.
95201 96982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !pTableName || db->mallocFailed ){
95203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto trigger_cleanup;
95204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
95205 96983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab = sqlite3SrcListLookup(pParse, pTableName);
95206 96984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->init.busy==0 && pName2->n==0 && pTab
95207 96985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pTab->pSchema==db->aDb[1].pSchema ){
95208 96986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = 1;
95209 96987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -96497,11 +98275,13 @@
96497 98275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96498 98276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96499 98277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Begin the database scan
96500 98278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96501 98279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Null, 0, regOldRowid);
96502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere,0, WHERE_ONEPASS_DESIRED);
98280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo = sqlite3WhereBegin(
98281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse, pTabList, pWhere, 0, 0, WHERE_ONEPASS_DESIRED
98282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
96503 98283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ) goto update_cleanup;
96504 98284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
okOnePass = pWInfo->okOnePass;
96505 98285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96506 98286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Remember the rowid of every item to be updated.
96507 98287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -98523,10 +100303,11 @@
98523 100303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_REVERSE 0x02000000 /* Scan in reverse order */
98524 100304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_UNIQUE 0x04000000 /* Selects no more than one row */
98525 100305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_VIRTUALTABLE 0x08000000 /* Use virtual-table processing */
98526 100306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_MULTI_OR 0x10000000 /* OR using multiple indices */
98527 100307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_TEMP_INDEX 0x20000000 /* Uses an ephemeral index */
100308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WHERE_DISTINCT 0x40000000 /* Correct order for DISTINCT */
98528 100309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98529 100310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
98530 100311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Initialize a preallocated WhereClause structure.
98531 100312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
98532 100313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void whereClauseInit(
@@ -99667,10 +101448,166 @@
99667 101448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99668 101449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99669 101450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
99670 101451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99671 101452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
101454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function searches the expression list passed as the second argument
101455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for an expression of type TK_COLUMN that refers to the same column and
101456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** uses the same collation sequence as the iCol'th column of index pIdx.
101457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Argument iBase is the cursor number used for the table that pIdx refers
101458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to.
101459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If such an expression is found, its index in pList->a[] is returned. If
101461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no expression is found, -1 is returned.
101462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int findIndexCol(
101464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parse context */
101465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pList, /* Expression list to search */
101466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iBase, /* Cursor for table associated with pIdx */
101467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pIdx, /* Index to match column of */
101468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol /* Column of index to match */
101469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
101471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zColl = pIdx->azColl[iCol];
101472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pList->nExpr; i++){
101474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *p = pList->a[i].pExpr;
101475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->op==TK_COLUMN
101476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && p->iColumn==pIdx->aiColumn[iCol]
101477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && p->iTable==iBase
101478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CollSeq *pColl = sqlite3ExprCollSeq(pParse, p);
101480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(pColl) && 0==sqlite3StrICmp(pColl->zName, zColl) ){
101481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return i;
101482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return -1;
101487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
101490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine determines if pIdx can be used to assist in processing a
101491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** DISTINCT qualifier. In other words, it tests whether or not using this
101492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index for the outer loop guarantees that rows with equal values for
101493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all expressions in the pDistinct list are delivered grouped together.
101494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For example, the query
101496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SELECT DISTINCT a, b, c FROM tbl WHERE a = ?
101498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can benefit from any index on columns "b" and "c".
101500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int isDistinctIndex(
101502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parsing context */
101503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereClause *pWC, /* The WHERE clause */
101504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pIdx, /* The index being considered */
101505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int base, /* Cursor number for the table pIdx is on */
101506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pDistinct, /* The DISTINCT expressions */
101507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nEqCol /* Number of index columns with == */
101508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask mask = 0; /* Mask of unaccounted for pDistinct exprs */
101510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Iterator variable */
101511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->zName==0 || pDistinct==0 || pDistinct->nExpr>=BMS ) return 0;
101513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( pDistinct->nExpr==BMS-1 );
101514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Loop through all the expressions in the distinct list. If any of them
101516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are not simple column references, return early. Otherwise, test if the
101517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WHERE clause contains a "col=X" clause. If it does, the expression
101518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can be ignored. If it does not, and the column does not belong to the
101519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** same table as index pIdx, return early. Finally, if there is no
101520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** matching "col=X" expression and the column is on the same table as pIdx,
101521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set the corresponding bit in variable mask.
101522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pDistinct->nExpr; i++){
101524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereTerm *pTerm;
101525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *p = pDistinct->a[i].pExpr;
101526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->op!=TK_COLUMN ) return 0;
101527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTerm = findTerm(pWC, p->iTable, p->iColumn, ~(Bitmask)0, WO_EQ, 0);
101528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm ){
101529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pX = pTerm->pExpr;
101530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CollSeq *p1 = sqlite3BinaryCompareCollSeq(pParse, pX->pLeft, pX->pRight);
101531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CollSeq *p2 = sqlite3ExprCollSeq(pParse, p);
101532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p1==p2 ) continue;
101533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->iTable!=base ) return 0;
101535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mask |= (((Bitmask)1) << i);
101536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=nEqCol; mask && i<pIdx->nColumn; i++){
101539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iExpr = findIndexCol(pParse, pDistinct, base, pIdx, i);
101540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iExpr<0 ) break;
101541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mask &= ~(((Bitmask)1) << iExpr);
101542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (mask==0);
101545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
101549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the DISTINCT expression-list passed as the third argument
101550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is redundant. A DISTINCT list is redundant if the database contains a
101551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** UNIQUE index that guarantees that the result of the query will be distinct
101552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** anyway.
101553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int isDistinctRedundant(
101555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse,
101556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcList *pTabList,
101557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereClause *pWC,
101558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pDistinct
101559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab;
101561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pIdx;
101562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
101563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iBase;
101564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there is more than one table or sub-select in the FROM clause of
101566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this query, then it will not be possible to show that the DISTINCT
101567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** clause is redundant. */
101568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTabList->nSrc!=1 ) return 0;
101569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iBase = pTabList->a[0].iCursor;
101570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab = pTabList->a[0].pTab;
101571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If any of the expressions is an IPK column on table iBase, then return
101573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** true. Note: The (p->iTable==iBase) part of this test may be false if the
101574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** current SELECT is a correlated sub-query.
101575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pDistinct->nExpr; i++){
101577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *p = pDistinct->a[i].pExpr;
101578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->op==TK_COLUMN && p->iTable==iBase && p->iColumn<0 ) return 1;
101579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Loop through all indices on the table, checking each to see if it makes
101582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the DISTINCT qualifier redundant. It does so if:
101583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1. The index is itself UNIQUE, and
101585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
101586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2. All of the columns in the index are either part of the pDistinct
101587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** list, or else the WHERE clause contains a term of the form "col=X",
101588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** where X is a constant value. The collation sequences of the
101589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** comparison and select-list expressions must match those of the index.
101590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
101591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
101592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->onError==OE_None ) continue;
101593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pIdx->nColumn; i++){
101594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol = pIdx->aiColumn[i];
101595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==findTerm(pWC, iBase, iCol, ~(Bitmask)0, WO_EQ, pIdx)
101596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && 0>findIndexCol(pParse, pDistinct, iBase, pIdx, i)
101597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
101598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
101599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==pIdx->nColumn ){
101602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This index implies that the DISTINCT qualifier is redundant. */
101603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
101604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
101607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
101608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
99672 101609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99673 101610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
99674 101611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine decides if pIdx can be used to satisfy the ORDER BY
99675 101612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** clause. If it can, it returns 1. If pIdx cannot satisfy the
99676 101613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ORDER BY clause, this routine returns 0.
@@ -99703,11 +101640,14 @@
99703 101640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sortOrder = 0; /* XOR of index and ORDER BY sort direction */
99704 101641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTerm; /* Number of ORDER BY terms */
99705 101642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ExprList_item *pTerm; /* A term of the ORDER BY clause */
99706 101643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db;
99707 101644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOrderBy!=0 );
101645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pOrderBy ) return 0;
101646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( wsFlags & WHERE_COLUMN_IN ) return 0;
101647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->bUnordered ) return 0;
101648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
99709 101649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTerm = pOrderBy->nExpr;
99710 101650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nTerm>0 );
99711 101651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99712 101652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Argument pIdx must either point to a 'real' named index structure,
99713 101653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or an index structure allocated on the stack by bestBtreeIndex() to
@@ -100016,10 +101956,14 @@
100016 101956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double costTempIdx; /* per-query cost of the transient index */
100017 101957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pTerm; /* A single term of the WHERE clause */
100018 101958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pWCEnd; /* End of pWC->a[] */
100019 101959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTable; /* Table tht might be indexed */
100020 101960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nQueryLoop<=(double)1 ){
101962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* There is no point in building an automatic index for a single scan */
101963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
101964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100021 101965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pParse->db->flags & SQLITE_AutoIndex)==0 ){
100022 101966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Automatic indices are disabled at run-time */
100023 101967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
100024 101968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100025 101969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)!=0 ){
@@ -100027,10 +101971,14 @@
100027 101971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
100028 101972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100029 101973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->notIndexed ){
100030 101974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The NOT INDEXED clause appears in the SQL. */
100031 101975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
101976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSrc->isCorrelated ){
101978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The source is a correlated sub-query. No point in indexing it. */
101979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
100032 101980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100033 101981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100034 101982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->nQueryLoop >= (double)1 );
100035 101983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable = pSrc->pTab;
100036 101984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTableRow = pTable->nRowEst;
@@ -100244,10 +102192,11 @@
100244 102192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->leftCursor != pSrc->iCursor ) continue;
100245 102193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
100246 102194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_IN );
100247 102195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_ISNULL );
100248 102196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
102197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_VNULL ) continue;
100249 102198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTerm++;
100250 102199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
100251 102200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
100252 102201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the ORDER BY clause contains only columns in the current
100253 102202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** virtual table then allocate space for the aOrderBy part of
@@ -100294,10 +102243,11 @@
100294 102243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->leftCursor != pSrc->iCursor ) continue;
100295 102244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pTerm->eOperator&(pTerm->eOperator-1))==0 );
100296 102245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_IN );
100297 102246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTerm->eOperator==WO_ISNULL );
100298 102247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->eOperator & (WO_IN|WO_ISNULL) ) continue;
102248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTerm->wtFlags & TERM_VNULL ) continue;
100299 102249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxCons[j].iColumn = pTerm->u.leftColumn;
100300 102250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxCons[j].iTermOffset = i;
100301 102251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxCons[j].op = (u8)pTerm->eOperator;
100302 102252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The direct assignment in the previous line is possible only because
100303 102253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the WO_ and SQLITE_INDEX_CONSTRAINT_ codes are identical. The
@@ -100959,10 +102909,11 @@
100959 102909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *pWC, /* The WHERE clause */
100960 102910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pSrc, /* The FROM clause term to search */
100961 102911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask notReady, /* Mask of cursors not available for indexing */
100962 102912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask notValid, /* Cursors not available for any purpose */
100963 102913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy, /* The ORDER BY clause */
102914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pDistinct, /* The select-list if query is DISTINCT */
100964 102915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereCost *pCost /* Lowest cost query plan */
100965 102916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
100966 102917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */
100967 102918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pProbe; /* An index we are evaluating */
100968 102919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx; /* Copy of pProbe, or zero for IPK index */
@@ -101099,11 +103050,12 @@
101099 103050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nEq; /* Number of == or IN terms matching index */
101100 103051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bInEst = 0; /* True if "x IN (SELECT...)" seen */
101101 103052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nInMul = 1; /* Number of distinct equalities to lookup */
101102 103053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int estBound = 100; /* Estimated reduction in search space */
101103 103054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nBound = 0; /* Number of range constraints seen */
101104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bSort = 0; /* True if external sort required */
103055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bSort = !!pOrderBy; /* True if external sort required */
103056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bDist = !!pDistinct; /* True if index cannot help with DISTINCT */
101105 103057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bLookup = 0; /* True if not a covering index */
101106 103058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pTerm; /* A single term of the WHERE clause */
101107 103059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT2
101108 103060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pFirstTerm = 0; /* First term matching the index */
101109 103061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -101163,21 +103115,24 @@
101163 103115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101164 103116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is an ORDER BY clause and the index being considered will
101165 103117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** naturally scan rows in the required order, set the appropriate flags
101166 103118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in wsFlags. Otherwise, if there is an ORDER BY clause but the index
101167 103119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will scan rows in a different order, set the bSort variable. */
101168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pOrderBy ){
101169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (wsFlags & WHERE_COLUMN_IN)==0
101170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pProbe->bUnordered==0
101171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && isSortingIndex(pParse, pWC->pMaskSet, pProbe, iCur, pOrderBy,
101172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nEq, wsFlags, &rev)
101173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
101174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_ORDERBY;
101175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- wsFlags |= (rev ? WHERE_REVERSE : 0);
101176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
101177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bSort = 1;
101178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
103120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isSortingIndex(
103121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse, pWC->pMaskSet, pProbe, iCur, pOrderBy, nEq, wsFlags, &rev)
103122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
103123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bSort = 0;
103124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_ORDERBY;
103125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wsFlags |= (rev ? WHERE_REVERSE : 0);
103126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
103127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
103128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there is a DISTINCT qualifier and this index will scan rows in
103129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** order of the DISTINCT expressions, clear bDist and set the appropriate
103130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** flags in wsFlags. */
103131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isDistinctIndex(pParse, pWC, pProbe, iCur, pDistinct, nEq) ){
103132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bDist = 0;
103133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wsFlags |= WHERE_ROWID_RANGE|WHERE_COLUMN_RANGE|WHERE_DISTINCT;
101179 103134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101180 103135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101181 103136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If currently calculating the cost of using an index (not the IPK
101182 103137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index), determine if all required column data may be obtained without
101183 103138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using the main table (i.e. if the index is a covering
@@ -101208,16 +103163,17 @@
101208 103163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRow = aiRowEst[0]/2;
101209 103164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nInMul = (int)(nRow / aiRowEst[nEq]);
101210 103165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101211 103166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101212 103167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT2
101213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the constraint is of the form x=VALUE and histogram
103168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the constraint is of the form x=VALUE or x IN (E1,E2,...)
103169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and we do not think that values of x are unique and if histogram
101214 103170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** data is available for column x, then it might be possible
101215 103171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to get a better estimate on the number of rows based on
101216 103172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** VALUE and how common that value is according to the histogram.
101217 103173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 ){
103174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRow>(double)1 && nEq==1 && pFirstTerm!=0 && aiRowEst[1]>1 ){
101219 103175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFirstTerm->eOperator & (WO_EQ|WO_ISNULL) ){
101220 103176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pFirstTerm->eOperator==WO_EQ );
101221 103177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pFirstTerm->eOperator==WO_ISNULL );
101222 103178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereEqualScanEst(pParse, pProbe, pFirstTerm->pExpr->pRight, &nRow);
101223 103179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pFirstTerm->eOperator==WO_IN && bInEst==0 ){
@@ -101290,10 +103246,13 @@
101290 103246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** difference and select C of 3.0.
101291 103247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
101292 103248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bSort ){
101293 103249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cost += nRow*estLog(nRow)*3;
101294 103250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bDist ){
103252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cost += nRow*estLog(nRow)*3;
103253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
101295 103254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101296 103255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/**** Cost of using this index has now been computed ****/
101297 103256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101298 103257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there are additional constraints on this table that cannot
101299 103258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be used with the current index, but which might lower the number
@@ -101435,11 +103394,11 @@
101435 103394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101436 103395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(pParse->db, p);
101437 103396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
101438 103397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
101439 103398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
101440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
103399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, 0, pCost);
101441 103400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101442 103401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101443 103402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101444 103403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
101445 103404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Disable a term in the WHERE clause. Except, do not disable the term
@@ -102397,11 +104356,11 @@
102397 104356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pOrWc->nTerm; ii++){
102398 104357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pOrTerm = &pOrWc->a[ii];
102399 104358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrTerm->leftCursor==iCur || pOrTerm->eOperator==WO_AND ){
102400 104359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereInfo *pSubWInfo; /* Info for single OR-term scan */
102401 104360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through table entries that match term pOrTerm. */
102402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrTerm->pExpr, 0,
104361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrTerm->pExpr, 0, 0,
102403 104362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERE_OMIT_OPEN | WHERE_OMIT_CLOSE |
102404 104363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY);
102405 104364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubWInfo ){
102406 104365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
explainOneScan(
102407 104366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
@@ -102638,10 +104597,11 @@
102638 104597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
102639 104598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* The parser context */
102640 104599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pTabList, /* A list of all tables to be scanned */
102641 104600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pWhere, /* The WHERE clause */
102642 104601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList **ppOrderBy, /* An ORDER BY clause, or NULL */
104602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pDistinct, /* The select-list for DISTINCT queries - or NULL */
102643 104603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 wctrlFlags /* One of the WHERE_* flags defined in sqliteInt.h */
102644 104604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
102645 104605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* Loop counter */
102646 104606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nByteWInfo; /* Num. bytes allocated for WhereInfo struct */
102647 104607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTabList; /* Number of elements in pTabList */
@@ -102697,10 +104657,14 @@
102697 104657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->iBreak = sqlite3VdbeMakeLabel(v);
102698 104658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->pWC = pWC = (WhereClause *)&((u8 *)pWInfo)[nByteWInfo];
102699 104659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->wctrlFlags = wctrlFlags;
102700 104660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->savedNQueryLoop = pParse->nQueryLoop;
102701 104661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMaskSet = (WhereMaskSet*)&pWC[1];
104662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Disable the DISTINCT optimization if SQLITE_DistinctOpt is set via
104664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_test_ctrl(SQLITE_TESTCTRL_OPTIMIZATIONS,...) */
104665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db->flags & SQLITE_DistinctOpt ) pDistinct = 0;
102702 104666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
102703 104667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Split the WHERE clause into separate subexpressions where each
102704 104668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** subexpression is separated by an AND operator.
102705 104669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
102706 104670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
initMaskSet(pMaskSet);
@@ -102764,10 +104728,19 @@
102764 104728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
102765 104729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
exprAnalyzeAll(pTabList, pWC);
102766 104730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
102767 104731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto whereBeginError;
102768 104732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check if the DISTINCT qualifier, if there is one, is redundant.
104735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If it is, then set pDistinct to NULL and WhereInfo.eDistinct to
104736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WHERE_DISTINCT_UNIQUE to tell the caller to ignore the DISTINCT.
104737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
104738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pDistinct && isDistinctRedundant(pParse, pTabList, pWC, pDistinct) ){
104739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDistinct = 0;
104740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo->eDistinct = WHERE_DISTINCT_UNIQUE;
104741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
102769 104742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
102770 104743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Chose the best index to use for each table in the FROM clause.
102771 104744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
102772 104745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This loop fills in the following fields:
102773 104746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -102848,10 +104821,11 @@
102848 104821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask mask; /* Mask of tables not yet ready */
102849 104822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=iFrom, pTabItem=&pTabList->a[j]; j<nTabList; j++, pTabItem++){
102850 104823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int doNotReorder; /* True if this table should not be reordered */
102851 104824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereCost sCost; /* Cost information from best[Virtual]Index() */
102852 104825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy; /* ORDER BY clause for index to optimize */
104826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pDist; /* DISTINCT clause for index to optimize */
102853 104827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
102854 104828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
doNotReorder = (pTabItem->jointype & (JT_LEFT|JT_CROSS))!=0;
102855 104829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( j!=iFrom && doNotReorder ) break;
102856 104830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = getMask(pMaskSet, pTabItem->iCursor);
102857 104831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (m & notReady)==0 ){
@@ -102858,10 +104832,11 @@
102858 104832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( j==iFrom ) iFrom++;
102859 104833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
102860 104834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102861 104835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mask = (isOptimal ? m : notReady);
102862 104836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrderBy = ((i==0 && ppOrderBy )?*ppOrderBy:0);
104837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDist = (i==0 ? pDistinct : 0);
102863 104838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTabItem->pIndex==0 ) nUnconstrained++;
102864 104839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
102865 104840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE(("=== trying table %d with isOptimal=%d ===\n",
102866 104841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
j, isOptimal));
102867 104842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTabItem->pTab );
@@ -102872,11 +104847,11 @@
102872 104847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&sCost, pp);
102873 104848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
102874 104849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
102875 104850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
102876 104851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bestBtreeIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
102877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &sCost);
104852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDist, &sCost);
102878 104853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102879 104854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isOptimal || (sCost.used¬Ready)==0 );
102880 104855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
102881 104856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If an INDEXED BY clause is present, then the plan must use that
102882 104857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index if it uses any index at all */
@@ -102932,10 +104907,14 @@
102932 104907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE(("*** Optimizer selects table %d for loop %d"
102933 104908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" with cost=%g and nRow=%g\n",
102934 104909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bestJ, pLevel-pWInfo->a, bestPlan.rCost, bestPlan.plan.nRow));
102935 104910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (bestPlan.plan.wsFlags & WHERE_ORDERBY)!=0 ){
102936 104911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppOrderBy = 0;
104912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
104913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (bestPlan.plan.wsFlags & WHERE_DISTINCT)!=0 ){
104914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWInfo->eDistinct==0 );
104915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo->eDistinct = WHERE_DISTINCT_ORDERED;
102937 104916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
102938 104917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
andFlags &= bestPlan.plan.wsFlags;
102939 104918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel->plan = bestPlan.plan;
102940 104919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( bestPlan.plan.wsFlags & WHERE_INDEXED );
102941 104920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( bestPlan.plan.wsFlags & WHERE_TEMP_INDEX );
@@ -103267,10 +105246,11 @@
103267 105246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** LALR(1) grammar but which are always false in the
103268 105247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** specific grammar used by SQLite.
103269 105248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
103270 105249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* First off, code is included that follows the "include" declaration
103271 105250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the input grammar file. */
105251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
103272 105252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103273 105253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103274 105254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
103275 105255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Disable all error recovery processing in the parser push-down
103276 105256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** automaton.
@@ -104127,10 +106107,11 @@
104127 106107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
104128 106108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
104129 106109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct yyParser yyParser;
104130 106110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104131 106111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
106112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
104132 106113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static FILE *yyTraceFILE = 0;
104133 106114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static char *yyTracePrompt = 0;
104134 106115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* NDEBUG */
104135 106116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104136 106117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
@@ -106702,10 +108683,11 @@
106702 108683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
106703 108684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains C code that splits an SQL input string up into
106704 108685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** individual tokens and sends those tokens one-by-one over to the
106705 108686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parser for analysis.
106706 108687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
108688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
106707 108689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
106708 108690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
106709 108691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The charMap() macro maps alphabetic characters into their
106710 108692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** lower-case ASCII equivalent. On ASCII machines, this is just
106711 108693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an upper-to-lower case map. On EBCDIC machines we also need
@@ -108093,10 +110075,20 @@
108093 110075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&y, &x, 8);
108094 110076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3IsNaN(y) );
108095 110077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108096 110078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
108097 110079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
110080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
110081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do extra initialization steps requested by the SQLITE_EXTRA_INIT
110082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** compile-time option.
110083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
110084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_EXTRA_INIT
110085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && sqlite3GlobalConfig.isInit ){
110086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int SQLITE_EXTRA_INIT(void);
110087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_EXTRA_INIT();
110088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
110089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
108098 110090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108099 110091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
108100 110092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108101 110093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108102 110094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -110763,10 +112755,21 @@
110763 112755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
110764 112756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ScratchFree(pFree);
110765 112757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
110766 112758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
110767 112759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* sqlite3_test_control(SQLITE_TESTCTRL_LOCALTIME_FAULT, int onoff);
112761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
112762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter onoff is non-zero, configure the wrappers so that all
112763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** subsequent calls to localtime() and variants fail. If onoff is zero,
112764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** undo this setting.
112765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
112766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_TESTCTRL_LOCALTIME_FAULT: {
112767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.bLocaltimeFault = va_arg(ap, int);
112768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
112769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
112770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
110768 112771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
110769 112772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
110770 112773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_BUILTIN_TEST */
110771 112774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
110772 112775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -111420,16 +113423,10 @@
111420 113423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** TODO(shess) Provide a VACUUM type operation to clear out all
111421 113424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** deletions and duplications. This would basically be a forced merge
111422 113425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into a single segment.
111423 113426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
111424 113427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
111426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
111427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE)
111428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SQLITE_CORE 1
111429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
111430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
111431 113428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include fts3Int.h in the middle of fts3.c ********************/
111432 113429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file fts3Int.h *****************************************/
111433 113430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
111434 113431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2009 Nov 12
111435 113432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -111441,18 +113438,33 @@
111441 113438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
111442 113439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
111443 113440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
******************************************************************************
111444 113441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
111445 113442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
111446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
111447 113443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef _FTSINT_H
111448 113444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define _FTSINT_H
111449 113445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111450 113446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
111451 113447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define NDEBUG 1
111452 113448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
111453 113449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
113451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FTS4 is really an extension for FTS3. It is enabled using the
113452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all
113453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
113454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
113455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
113456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_ENABLE_FTS3
113457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
113458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
113459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
113460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
113461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If not building as part of the core, include sqlite3ext.h. */
113462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_CORE
113463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API extern const sqlite3_api_routines *sqlite3_api;
113464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
113465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
111454 113466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include fts3_tokenizer.h in the middle of fts3Int.h **********/
111455 113467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file fts3_tokenizer.h **********************************/
111456 113468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
111457 113469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2006 July 10
111458 113470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -111940,11 +113952,11 @@
111940 113952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aDoclist; /* List of docids for full-text queries */
111941 113953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDoclist; /* Size of buffer at aDoclist */
111942 113954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 bDesc; /* True to sort in descending order */
111943 113955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eEvalmode; /* An FTS3_EVAL_XX constant */
111944 113956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRowAvg; /* Average size of database rows, in pages */
111945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDoc; /* Documents in table */
113957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nDoc; /* Documents in table */
111946 113958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111947 113959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isMatchinfoNeeded; /* True when aMatchinfo[] needs filling in */
111948 113960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 *aMatchinfo; /* Information about most recent match */
111949 113961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMatchinfo; /* Number of elements in aMatchinfo[] */
111950 113962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zMatchinfo; /* Matchinfo specification */
@@ -111981,11 +113993,11 @@
111981 113993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111982 113994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iDocid; /* Current docid (if pList!=0) */
111983 113995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bFreeList; /* True if pList should be sqlite3_free()d */
111984 113996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *pList; /* Pointer to position list following iDocid */
111985 113997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nList; /* Length of position list */
111986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } doclist;
113998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
111987 113999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111988 114000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
111989 114001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A "phrase" is a sequence of one or more tokens that must match in
111990 114002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sequence. A single token is the base case and the most common case.
111991 114003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For a sequence of tokens contained in double-quotes (i.e. "one two three")
@@ -111997,19 +114009,19 @@
111997 114009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isPrefix; /* True if token ends with a "*" character */
111998 114010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111999 114011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Variables above this point are populated when the expression is
112000 114012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parsed (by code in fts3_expr.c). Below this point the variables are
112001 114013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** used when evaluating the expression. */
112002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bFulltext; /* True if full-text index was used */
112003 114014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3DeferredToken *pDeferred; /* Deferred token object for this token */
112004 114015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3MultiSegReader *pSegcsr; /* Segment-reader for this token */
112005 114016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
112006 114017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112007 114018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts3Phrase {
112008 114019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Cache of doclist for this phrase. */
112009 114020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Doclist doclist;
112010 114021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bIncr; /* True if doclist is loaded incrementally */
114022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDoclistToken;
112011 114023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112012 114024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Variables below this point are populated by fts3_expr.c when parsing
112013 114025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a MATCH expression. Everything above is part of the evaluation phase.
112014 114026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
112015 114027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nToken; /* Number of tokens in the phrase */
@@ -112130,10 +114142,11 @@
112130 114142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3SegFilter *pFilter; /* Pointer to filter object */
112131 114143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aBuffer; /* Buffer to merge doclists in */
112132 114144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nBuffer; /* Allocated size of aBuffer[] in bytes */
112133 114145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112134 114146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iColFilter; /* If >=0, filter for this column */
114147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bRestart;
112135 114148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112136 114149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Used by fts3.c only. */
112137 114150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCost; /* Cost of running iterator */
112138 114151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bLookup; /* True if a lookup of a single entry. */
112139 114152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -112180,43 +114193,49 @@
112180 114193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
112181 114194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112182 114195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* fts3_aux.c */
112183 114196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3InitAux(sqlite3 *db);
112184 114197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Fts3TermSegReaderCursor(
112186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr, /* Virtual table cursor handle */
112187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zTerm, /* Term to query for */
112188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nTerm, /* Size of zTerm in bytes */
112189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isPrefix, /* True for a prefix search */
112190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3MultiSegReader **ppSegcsr /* OUT: Allocated seg-reader cursor */
112191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
112192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
112193 114198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *);
112194 114199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Fts3EvalStart(Fts3Cursor *, Fts3Expr *, int);
112196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Fts3EvalNext(Fts3Cursor *pCsr);
112197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
112198 114200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
112199 114201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table*, Fts3MultiSegReader*, int, const char*, int);
112200 114202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
112201 114203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *, Fts3MultiSegReader *, sqlite3_int64 *, char **, int *);
112202 114204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char *sqlite3Fts3EvalPhrasePoslist(Fts3Cursor *, Fts3Expr *, int iCol);
112203 114205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3MsrOvfl(Fts3Cursor *, Fts3MultiSegReader *, int *);
114206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr);
112204 114207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112205 114208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3DeferredTokenList(Fts3DeferredToken *, char **, int *);
112206 114209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !SQLITE_CORE || SQLITE_ENABLE_FTS3 */
112208 114211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* _FTSINT_H */
112209 114212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112210 114213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of fts3Int.h *********************************************/
112211 114214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in fts3.c ***********************/
114215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
112212 114216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_ENABLE_FTS3) && !defined(SQLITE_CORE)
114218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_CORE 1
114219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
114220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
114221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
114222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
114223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stddef.h> */
114224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
114225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
114226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdarg.h> */
112213 114227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112214 114228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_CORE
112215 114229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_EXTENSION_INIT1
112216 114230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
112217 114231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3EvalNext(Fts3Cursor *pCsr);
114233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3EvalStart(Fts3Cursor *pCsr);
114234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3TermSegReaderCursor(
114235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *, const char *, int, int, Fts3MultiSegReader **);
114236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
112218 114237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
112219 114238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Write a 64-bit variable-length integer to memory starting at p[0].
112220 114239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The length of data written will be between 1 and FTS3_VARINT_MAX bytes.
112221 114240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The number of bytes written is returned.
112222 114241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -112545,10 +114564,13 @@
112545 114564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_prepare(p->db, zSql, -1, &pStmt, 0);
112546 114565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
112547 114566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_step(pStmt);
112548 114567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nPgsz = sqlite3_column_int(pStmt, 0);
112549 114568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_finalize(pStmt);
114569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( rc==SQLITE_AUTH ){
114570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nPgsz = 1024;
114571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_OK;
112550 114572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112551 114573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112552 114574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nPgsz>0 || rc!=SQLITE_OK );
112553 114575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zSql);
112554 114576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRc = rc;
@@ -112718,31 +114740,60 @@
112718 114740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112719 114741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zFree);
112720 114742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return zRet;
112721 114743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112722 114744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
114746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function interprets the string at (*pp) as a non-negative integer
114747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value. It reads the integer and sets *pnOut to the value read, then
114748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sets *pp to point to the byte immediately following the last byte of
114749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the integer value.
114750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
114751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Only decimal digits ('0'..'9') may be part of an integer value.
114752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
114753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pp does not being with a decimal digit SQLITE_ERROR is returned and
114754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the output value undefined. Otherwise SQLITE_OK is returned.
114755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
114756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used when parsing the "prefix=" FTS4 parameter.
114757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
112723 114758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3GobbleInt(const char **pp, int *pnOut){
112724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *p = *pp;
112725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nInt = 0;
114759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *p = *pp; /* Iterator pointer */
114760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nInt = 0; /* Output value */
114761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
112726 114762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=*pp; p[0]>='0' && p[0]<='9'; p++){
112727 114763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nInt = nInt * 10 + (p[0] - '0');
112728 114764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112729 114765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==*pp ) return SQLITE_ERROR;
112730 114766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnOut = nInt;
112731 114767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp = p;
112732 114768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
112733 114769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112734 114770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
114772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called to allocate an array of Fts3Index structures
114773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** representing the indexes maintained by the current FTS table. FTS tables
114774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** always maintain the main "terms" index, but may also maintain one or
114775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** more "prefix" indexes, depending on the value of the "prefix=" parameter
114776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (if any) specified as part of the CREATE VIRTUAL TABLE statement.
114777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
114778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Argument zParam is passed the value of the "prefix=" option if one was
114779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** specified, or NULL otherwise.
114780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
114781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If no error occurs, SQLITE_OK is returned and *apIndex set to point to
114782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the allocated array. *pnIndex is set to the number of elements in the
114783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** array. If an error does occur, an SQLite error code is returned.
114784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
114785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Regardless of whether or not an error is returned, it is the responsibility
114786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the caller to call sqlite3_free() on the output array to free it.
114787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
112736 114788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3PrefixParameter(
112737 114789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zParam, /* ABC in prefix=ABC parameter to parse */
112738 114790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pnIndex, /* OUT: size of *apIndex[] array */
112739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Fts3Index **apIndex, /* OUT: Array of indexes for this table */
112740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Fts3Index **apFree /* OUT: Free this with sqlite3_free() */
114791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Fts3Index **apIndex /* OUT: Array of indexes for this table */
112741 114792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
112742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Fts3Index *aIndex;
112743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nIndex = 1;
114793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Fts3Index *aIndex; /* Allocated array */
114794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nIndex = 1; /* Number of entries in array */
112744 114795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112745 114796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zParam && zParam[0] ){
112746 114797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *p;
112747 114798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nIndex++;
112748 114799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=zParam; *p; p++){
@@ -112749,11 +114800,11 @@
112749 114800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *p==',' ) nIndex++;
112750 114801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112751 114802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112752 114803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112753 114804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aIndex = sqlite3_malloc(sizeof(struct Fts3Index) * nIndex);
112754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *apIndex = *apFree = aIndex;
114805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *apIndex = aIndex;
112755 114806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnIndex = nIndex;
112756 114807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !aIndex ){
112757 114808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
112758 114809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112759 114810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -112806,12 +114857,11 @@
112806 114857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isFts4 = (argv[0][3]=='4'); /* True for FTS4, false for FTS3 */
112807 114858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char **aCol; /* Array of column names */
112808 114859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_tokenizer *pTokenizer = 0; /* Tokenizer for this table */
112809 114860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112810 114861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nIndex; /* Size of aIndex[] array */
112811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Fts3Index *aIndex; /* Array of indexes for this table */
112812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct Fts3Index *aFree = 0; /* Free this before returning */
114862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct Fts3Index *aIndex = 0; /* Array of indexes for this table */
112813 114863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112814 114864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The results of parsing supported FTS4 key=value options: */
112815 114865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bNoDocsize = 0; /* True to omit %_docsize table */
112816 114866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bDescIdx = 0; /* True to store descending indexes */
112817 114867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zPrefix = 0; /* Prefix parameter value (or NULL) */
@@ -112944,11 +114994,11 @@
112944 114994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts3InitTokenizer(pHash, "simple", &pTokenizer, pzErr);
112945 114995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) goto fts3_init_out;
112946 114996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112947 114997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTokenizer );
112948 114998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts3PrefixParameter(zPrefix, &nIndex, &aIndex, &aFree);
114999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3PrefixParameter(zPrefix, &nIndex, &aIndex);
112950 115000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_ERROR ){
112951 115001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( zPrefix );
112952 115002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pzErr = sqlite3_mprintf("error parsing prefix parameter: %s", zPrefix);
112953 115003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112954 115004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) goto fts3_init_out;
@@ -112995,11 +115045,11 @@
112995 115045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCsr += nDb;
112996 115046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112997 115047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Fill in the azColumn array */
112998 115048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iCol=0; iCol<nCol; iCol++){
112999 115049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z;
113000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n;
115050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
113001 115051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = (char *)sqlite3Fts3NextToken(aCol[iCol], &n);
113002 115052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(zCsr, z, n);
113003 115053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCsr[n] = '\0';
113004 115054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3Dequote(zCsr);
113005 115055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->azColumn[iCol] = zCsr;
@@ -113031,11 +115081,11 @@
113031 115081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Declare the table schema to SQLite. */
113032 115082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3DeclareVtab(&rc, p);
113033 115083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113034 115084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3_init_out:
113035 115085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zPrefix);
113036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(aFree);
115086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(aIndex);
113037 115087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zCompress);
113038 115088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zUncompress);
113039 115089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free((void *)aCol);
113040 115090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
113041 115091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
@@ -113622,12 +115672,10 @@
113622 115672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp1 = p1 + 1;
113623 115673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp2 = p2 + 1;
113624 115674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113625 115675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113626 115676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
113627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** nToken==1 searches for adjacent positions.
113628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
113629 115677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is used to merge two position lists into one. When it is
113630 115678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** called, *pp1 and *pp2 must both point to position lists. A position-list is
113631 115679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the part of a doclist that follows each document id. For example, if a row
113632 115680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contains:
113633 115681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -113643,10 +115691,12 @@
113643 115691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If isSaveLeft is 0, an entry is added to the output position list for
113644 115692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** each position in *pp2 for which there exists one or more positions in
113645 115693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** *pp1 so that (pos(*pp2)>pos(*pp1) && pos(*pp2)-pos(*pp1)<=nToken). i.e.
113646 115694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** when the *pp1 token appears before the *pp2 token, but not more than nToken
113647 115695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** slots before it.
115696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** e.g. nToken==1 searches for adjacent positions.
113648 115698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
113649 115699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3PoslistPhraseMerge(
113650 115700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **pp, /* IN/OUT: Preallocated output buffer */
113651 115701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nToken, /* Maximum difference in token positions */
113652 115702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isSaveLeft, /* Save the left position */
@@ -113809,26 +115859,38 @@
113809 115859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113810 115860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return res;
113811 115861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113812 115862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113813 115863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
113814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A pointer to an instance of this structure is used as the context
113815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argument to sqlite3Fts3SegReaderIterate()
115864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An instance of this function is used to merge together the (potentially
115865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** large number of) doclists for each term that matches a prefix query.
115866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See function fts3TermSelectMerge() for details.
113816 115867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
113817 115868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct TermSelect TermSelect;
113818 115869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct TermSelect {
113819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isReqPos;
113820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *aaOutput[16]; /* Malloc'd output buffer */
113821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int anOutput[16]; /* Size of output in bytes */
115870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *aaOutput[16]; /* Malloc'd output buffers */
115871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int anOutput[16]; /* Size each output buffer in bytes */
113822 115872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
113823 115873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
115875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used to read a single varint from a buffer. Parameter
115876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pEnd points 1 byte past the end of the buffer. When this function is
115877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** called, if *pp points to pEnd or greater, then the end of the buffer
115878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** has been reached. In this case *pp is set to 0 and the function returns.
115879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pp does not point to or past pEnd, then a single varint is read
115881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from *pp. *pp is then set to point 1 byte past the end of the read varint.
115882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If bDescIdx is false, the value read is added to *pVal before returning.
115884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If it is true, the value read is subtracted from *pVal before this
115885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function returns.
115886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
113825 115887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts3GetDeltaVarint3(
113826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char **pp,
113827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *pEnd,
113828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bDescIdx,
113829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 *pVal
115888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char **pp, /* IN/OUT: Point to read varint from */
115889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pEnd, /* End of buffer */
115890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bDescIdx, /* True if docids are descending */
115891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 *pVal /* IN/OUT: Integer value */
113830 115892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
113831 115893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *pp>=pEnd ){
113832 115894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp = 0;
113833 115895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
113834 115896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iVal;
@@ -113839,10 +115901,25 @@
113839 115901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pVal += iVal;
113840 115902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113841 115903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113842 115904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113843 115905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
115907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used to write a single varint to a buffer. The varint
115908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is written to *pp. Before returning, *pp is set to point 1 byte past the
115909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** end of the value written.
115910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pbFirst is zero when this function is called, the value written to
115912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the buffer is that of parameter iVal.
115913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pbFirst is non-zero when this function is called, then the value
115915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** written is either (iVal-*piPrev) (if bDescIdx is zero) or (*piPrev-iVal)
115916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (if bDescIdx is non-zero).
115917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Before returning, this function always sets *pbFirst to 1 and *piPrev
115919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the value of parameter iVal.
115920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
113844 115921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts3PutDeltaVarint3(
113845 115922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **pp, /* IN/OUT: Output pointer */
113846 115923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bDescIdx, /* True for descending docids */
113847 115924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 *piPrev, /* IN/OUT: Previous value written to list */
113848 115925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pbFirst, /* IN/OUT: True after first int written */
@@ -113859,14 +115936,38 @@
113859 115936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp += sqlite3Fts3PutVarint(*pp, iWrite);
113860 115937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piPrev = iVal;
113861 115938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pbFirst = 1;
113862 115939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113863 115940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define COMPARE_DOCID(i1, i2) ((bDescIdx?-1:1) * (i1-i2))
113865 115941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
115943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This macro is used by various functions that merge doclists. The two
115944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arguments are 64-bit docid values. If the value of the stack variable
115945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bDescDoclist is 0 when this macro is invoked, then it returns (i1-i2).
115946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, (i2-i1).
115947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Using this makes it easier to write code that can merge doclists that are
115949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sorted in either ascending or descending order.
115950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DOCID_CMP(i1, i2) ((bDescDoclist?-1:1) * (i1-i2))
115952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
115953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
115954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function does an "OR" merge of two doclists (output contains all
115955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** positions contained in either argument doclist). If the docids in the
115956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** input doclists are sorted in ascending order, parameter bDescDoclist
115957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** should be false. If they are sorted in ascending order, it should be
115958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** passed a non-zero value.
115959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If no error occurs, *paOut is set to point at an sqlite3_malloc'd buffer
115961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** containing the output doclist and SQLITE_OK is returned. In this case
115962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** *pnOut is set to the number of bytes in the output doclist.
115963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If an error occurs, an SQLite error code is returned. The output values
115965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are undefined in this case.
115966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
113866 115967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3DoclistOrMerge(
113867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bDescIdx, /* True if arguments are desc */
115968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bDescDoclist, /* True if arguments are desc */
113868 115969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *a1, int n1, /* First doclist */
113869 115970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *a2, int n2, /* Second doclist */
113870 115971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **paOut, int *pnOut /* OUT: Malloc'd doclist */
113871 115972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
113872 115973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 i1 = 0;
@@ -113887,35 +115988,47 @@
113887 115988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113888 115989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = aOut;
113889 115990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
113890 115991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
113891 115992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p1 || p2 ){
113892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 iDiff = COMPARE_DOCID(i1, i2);
115993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iDiff = DOCID_CMP(i1, i2);
113893 115994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113894 115995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p2 && p1 && iDiff==0 ){
113895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i1);
115996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
113896 115997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3PoslistMerge(&p, &p1, &p2);
113897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
113898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
115998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
115999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
113899 116000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( !p2 || (p1 && iDiff<0) ){
113900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i1);
116001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
113901 116002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3PoslistCopy(&p, &p1);
113902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
116003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
113903 116004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
113904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i2);
116005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i2);
113905 116006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3PoslistCopy(&p, &p2);
113906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
116007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
113907 116008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113908 116009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113909 116010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113910 116011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*paOut = aOut;
113911 116012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnOut = (p-aOut);
113912 116013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
113913 116014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113914 116015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function does a "phrase" merge of two doclists. In a phrase merge,
116018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the output contains a copy of each position from the right-hand input
116019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** doclist for which there is a position in the left-hand input doclist
116020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** exactly nDist tokens before it.
116021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the docids in the input doclists are sorted in ascending order,
116023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parameter bDescDoclist should be false. If they are sorted in ascending
116024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** order, it should be passed a non-zero value.
116025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The right-hand input doclist is overwritten by this function.
116027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
113915 116028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts3DoclistPhraseMerge(
113916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bDescIdx, /* True if arguments are desc */
116029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bDescDoclist, /* True if arguments are desc */
113917 116030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDist, /* Distance from left to right (1=adjacent) */
113918 116031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aLeft, int nLeft, /* Left doclist */
113919 116032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aRight, int *pnRight /* IN/OUT: Right/output doclist */
113920 116033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
113921 116034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 i1 = 0;
@@ -113934,30 +116047,30 @@
113934 116047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = aOut;
113935 116048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3GetDeltaVarint3(&p1, pEnd1, 0, &i1);
113936 116049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3GetDeltaVarint3(&p2, pEnd2, 0, &i2);
113937 116050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113938 116051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p1 && p2 ){
113939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 iDiff = COMPARE_DOCID(i1, i2);
116052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iDiff = DOCID_CMP(i1, i2);
113940 116053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iDiff==0 ){
113941 116054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *pSave = p;
113942 116055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iPrevSave = iPrev;
113943 116056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bFirstOutSave = bFirstOut;
113944 116057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3PutDeltaVarint3(&p, bDescIdx, &iPrev, &bFirstOut, i1);
116058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3PutDeltaVarint3(&p, bDescDoclist, &iPrev, &bFirstOut, i1);
113946 116059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==fts3PoslistPhraseMerge(&p, nDist, 0, 1, &p1, &p2) ){
113947 116060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = pSave;
113948 116061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iPrev = iPrevSave;
113949 116062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bFirstOut = bFirstOutSave;
113950 116063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
113952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
116064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
116065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
113953 116066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( iDiff<0 ){
113954 116067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3PoslistCopy(0, &p1);
113955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p1, pEnd1, bDescIdx, &i1);
116068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p1, pEnd1, bDescDoclist, &i1);
113956 116069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
113957 116070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3PoslistCopy(0, &p2);
113958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3GetDeltaVarint3(&p2, pEnd2, bDescIdx, &i2);
116071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3GetDeltaVarint3(&p2, pEnd2, bDescDoclist, &i2);
113959 116072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113960 116073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113961 116074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113962 116075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnRight = p - aOut;
113963 116076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -113970,11 +116083,11 @@
113970 116083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
113971 116084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If an OOM error occurs, return SQLITE_NOMEM. In this case it is
113972 116085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the responsibility of the caller to free any doclists left in the
113973 116086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** TermSelect.aaOutput[] array.
113974 116087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
113975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int fts3TermSelectMerge(Fts3Table *p, TermSelect *pTS){
116088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3TermSelectFinishMerge(Fts3Table *p, TermSelect *pTS){
113976 116089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aOut = 0;
113977 116090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOut = 0;
113978 116091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
113979 116092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113980 116093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through the doclists in the aaOutput[] array. Merge them all
@@ -114011,28 +116124,29 @@
114011 116124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTS->anOutput[0] = nOut;
114012 116125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
114013 116126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114014 116127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114015 116128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
114016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This function is used as the sqlite3Fts3SegReaderIterate() callback when
114017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** querying the full-text index for a doclist associated with a term or
114018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** term-prefix.
116129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Merge the doclist aDoclist/nDoclist into the TermSelect object passed
116130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as the first argument. The merge is an "OR" merge (see function
116131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts3DoclistOrMerge() for details).
116132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called with the doclist for each term that matches
116134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a queried prefix. It merges all these doclists into one, the doclist
116135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for the specified prefix. Since there can be a very large number of
116136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** doclists to merge, the merging is done pair-wise using the TermSelect
116137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** object.
116138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function returns SQLITE_OK if the merge is successful, or an
116140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite error code (SQLITE_NOMEM) if an error occurs.
114019 116141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
114020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int fts3TermSelectCb(
114021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Table *p, /* Virtual table object */
114022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *pContext, /* Pointer to TermSelect structure */
114023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zTerm,
114024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nTerm,
114025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *aDoclist,
114026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDoclist
116142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3TermSelectMerge(
116143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Table *p, /* FTS table handle */
116144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TermSelect *pTS, /* TermSelect object to merge into */
116145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *aDoclist, /* Pointer to doclist */
116146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nDoclist /* Size of aDoclist in bytes */
114027 116147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
114028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- TermSelect *pTS = (TermSelect *)pContext;
114029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(p);
114031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(zTerm);
114032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(nTerm);
114033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114034 116148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTS->aaOutput[0]==0 ){
114035 116149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this is the first term selected, copy the doclist to the output
114036 116150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** buffer using memcpy(). */
114037 116151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTS->aaOutput[0] = sqlite3_malloc(nDoclist);
114038 116152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTS->anOutput[0] = nDoclist;
@@ -114099,23 +116213,30 @@
114099 116213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114100 116214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->apSegment[pCsr->nSegment++] = pNew;
114101 116215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
114102 116216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114103 116217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add seg-reader objects to the Fts3MultiSegReader object passed as the
116220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 8th argument.
116221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function returns SQLITE_OK if successful, or an SQLite error code
116223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** otherwise.
116224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
114104 116225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3SegReaderCursor(
114105 116226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p, /* FTS3 table handle */
114106 116227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iIndex, /* Index to search (from 0 to p->nIndex-1) */
114107 116228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLevel, /* Level of segments to scan */
114108 116229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTerm, /* Term to query for */
114109 116230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTerm, /* Size of zTerm in bytes */
114110 116231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isPrefix, /* True for a prefix search */
114111 116232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isScan, /* True to scan from zTerm to EOF */
114112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3MultiSegReader *pCsr /* Cursor object to populate */
116233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3MultiSegReader *pCsr /* Cursor object to populate */
114113 116234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
114114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK;
114115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc2;
114116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_stmt *pStmt = 0;
116235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Error code */
116236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt = 0; /* Statement to iterate through segments */
116237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc2; /* Result of sqlite3_reset() */
114117 116238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114118 116239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If iLevel is less than 0 and this is not a scan, include a seg-reader
114119 116240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for the pending-terms. If this is a scan, then this call must be being
114120 116241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** made by an fts4aux module, not an FTS table. In this case calling
114121 116242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Fts3SegReaderPending might segfault, as the data structures used by
@@ -114200,28 +116321,46 @@
114200 116321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return fts3SegReaderCursor(
114201 116322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p, iIndex, iLevel, zTerm, nTerm, isPrefix, isScan, pCsr
114202 116323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
114203 116324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114204 116325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In addition to its current configuration, have the Fts3MultiSegReader
116328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** passed as the 4th argument also scan the doclist for term zTerm/nTerm.
116329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
116331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
114205 116332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3SegReaderCursorAddZero(
114206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Table *p,
114207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zTerm,
114208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nTerm,
114209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3MultiSegReader *pCsr
116333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Table *p, /* FTS virtual table handle */
116334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTerm, /* Term to scan doclist of */
116335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nTerm, /* Number of bytes in zTerm */
116336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3MultiSegReader *pCsr /* Fts3MultiSegReader to modify */
114210 116337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
114211 116338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return fts3SegReaderCursor(p, 0, FTS3_SEGCURSOR_ALL, zTerm, nTerm, 0, 0,pCsr);
114212 116339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114213 116340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
114215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Fts3TermSegReaderCursor(
116341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Open an Fts3MultiSegReader to scan the doclist for term zTerm/nTerm. Or,
116343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if isPrefix is true, to scan the doclist for all terms for which
116344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zTerm/nTerm is a prefix. If successful, return SQLITE_OK and write
116345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a pointer to the new Fts3MultiSegReader to *ppSegcsr. Otherwise, return
116346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an SQLite error code.
116347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It is the responsibility of the caller to free this object by eventually
116349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** passing it to fts3SegReaderCursorFree()
116350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
116352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Output parameter *ppSegcsr is set to 0 if an error occurs.
116353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3TermSegReaderCursor(
114216 116355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Cursor *pCsr, /* Virtual table cursor handle */
114217 116356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zTerm, /* Term to query for */
114218 116357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTerm, /* Size of zTerm in bytes */
114219 116358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isPrefix, /* True for a prefix search */
114220 116359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3MultiSegReader **ppSegcsr /* OUT: Allocated seg-reader cursor */
114221 116360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
114222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3MultiSegReader *pSegcsr; /* Object to allocate and return */
116361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3MultiSegReader *pSegcsr; /* Object to allocate and return */
114223 116362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_NOMEM; /* Return code */
114224 116363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114225 116364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSegcsr = sqlite3_malloc(sizeof(Fts3MultiSegReader));
114226 116365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSegcsr ){
114227 116366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
@@ -114261,62 +116400,53 @@
114261 116400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114262 116401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppSegcsr = pSegcsr;
114263 116402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
114264 116403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114265 116404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Free an Fts3MultiSegReader allocated by fts3TermSegReaderCursor().
116407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
114266 116408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts3SegReaderCursorFree(Fts3MultiSegReader *pSegcsr){
114267 116409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3SegReaderFinish(pSegcsr);
114268 116410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pSegcsr);
114269 116411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114270 116412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114271 116413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
114272 116414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function retreives the doclist for the specified term (or term
114273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** prefix) from the database.
114274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
114275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The returned doclist may be in one of two formats, depending on the
114276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value of parameter isReqPos. If isReqPos is zero, then the doclist is
114277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a sorted list of delta-compressed docids (a bare doclist). If isReqPos
114278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is non-zero, then the returned list is in the same format as is stored
114279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in the database without the found length specifier at the start of on-disk
114280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** doclists.
116415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** prefix) from the database.
114281 116416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
114282 116417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3TermSelect(
114283 116418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p, /* Virtual table handle */
114284 116419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3PhraseToken *pTok, /* Token to query for */
114285 116420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iColumn, /* Column to query (or -ve for all columns) */
114286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isReqPos, /* True to include position lists in output */
114287 116421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pnOut, /* OUT: Size of buffer at *ppOut */
114288 116422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **ppOut /* OUT: Malloced result buffer */
114289 116423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
114290 116424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* Return code */
114291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3MultiSegReader *pSegcsr; /* Seg-reader cursor for this term */
114292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- TermSelect tsc; /* Context object for fts3TermSelectCb() */
116425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3MultiSegReader *pSegcsr; /* Seg-reader cursor for this term */
116426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TermSelect tsc; /* Object for pair-wise doclist merging */
114293 116427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3SegFilter filter; /* Segment term filter configuration */
114294 116428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114295 116429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSegcsr = pTok->pSegcsr;
114296 116430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&tsc, 0, sizeof(TermSelect));
114297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- tsc.isReqPos = isReqPos;
114298 116431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- filter.flags = FTS3_SEGMENT_IGNORE_EMPTY
116432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ filter.flags = FTS3_SEGMENT_IGNORE_EMPTY | FTS3_SEGMENT_REQUIRE_POS
114300 116433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
| (pTok->isPrefix ? FTS3_SEGMENT_PREFIX : 0)
114301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- | (isReqPos ? FTS3_SEGMENT_REQUIRE_POS : 0)
114302 116434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
| (iColumn<p->nColumn ? FTS3_SEGMENT_COLUMN_FILTER : 0);
114303 116435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
filter.iCol = iColumn;
114304 116436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
filter.zTerm = pTok->z;
114305 116437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
filter.nTerm = pTok->n;
114306 116438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114307 116439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts3SegReaderStart(p, pSegcsr, &filter);
114308 116440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( SQLITE_OK==rc
114309 116441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& SQLITE_ROW==(rc = sqlite3Fts3SegReaderStep(p, pSegcsr))
114310 116442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
114311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts3TermSelectCb(p, (void *)&tsc,
114312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSegcsr->zTerm, pSegcsr->nTerm, pSegcsr->aDoclist, pSegcsr->nDoclist
114313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
116443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3TermSelectMerge(p, &tsc, pSegcsr->aDoclist, pSegcsr->nDoclist);
114314 116444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114315 116445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114316 116446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
114317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts3TermSelectMerge(p, &tsc);
116447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3TermSelectFinishMerge(p, &tsc);
114318 116448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114319 116449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
114320 116450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppOut = tsc.aaOutput[0];
114321 116451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnOut = tsc.anOutput[0];
114322 116452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -114338,28 +116468,19 @@
114338 116468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the isPoslist argument is true, then it is assumed that the doclist
114339 116469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contains a position-list following each docid. Otherwise, it is assumed
114340 116470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the doclist is simply a list of docids stored as delta encoded
114341 116471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** varints.
114342 116472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
114343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int fts3DoclistCountDocids(int isPoslist, char *aList, int nList){
116473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3DoclistCountDocids(char *aList, int nList){
114344 116474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDoc = 0; /* Return value */
114345 116475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aList ){
114346 116476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aEnd = &aList[nList]; /* Pointer to one byte after EOF */
114347 116477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *p = aList; /* Cursor */
114348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !isPoslist ){
114349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The number of docids in the list is the same as the number of
114350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** varints. In FTS3 a varint consists of a single byte with the 0x80
114351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** bit cleared and zero or more bytes with the 0x80 bit set. So to
114352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** count the varints in the buffer, just count the number of bytes
114353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** with the 0x80 bit clear. */
114354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( p<aEnd ) nDoc += (((*p++)&0x80)==0);
114355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
114356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( p<aEnd ){
114357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDoc++;
114358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( (*p++)&0x80 ); /* Skip docid varint */
114359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3PoslistCopy(0, &p); /* Skip over position list */
114360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
116478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( p<aEnd ){
116479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nDoc++;
116480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (*p++)&0x80 ); /* Skip docid varint */
116481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3PoslistCopy(0, &p); /* Skip over position list */
114361 116482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114362 116483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114363 116484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114364 116485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return nDoc;
114365 116486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -114385,11 +116506,11 @@
114385 116506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
114386 116507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->iPrevId = sqlite3_column_int64(pCsr->pStmt, 0);
114387 116508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
114388 116509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114389 116510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
114390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts3EvalNext((Fts3Cursor *)pCursor);
116511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3EvalNext((Fts3Cursor *)pCursor);
114391 116512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114392 116513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ((Fts3Table *)pCsr->base.pVtab)->pSegments==0 );
114393 116514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
114394 116515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114395 116516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -114462,11 +116583,11 @@
114462 116583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114463 116584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114464 116585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts3ReadLock(p);
114465 116586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) return rc;
114466 116587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts3EvalStart(pCsr, pCsr->pExpr, 1);
116588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3EvalStart(pCsr);
114468 116589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114469 116590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3SegmentsClose(p);
114470 116591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) return rc;
114471 116592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pNextId = pCsr->aDoclist;
114472 116593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->iPrevId = 0;
@@ -114581,12 +116702,12 @@
114581 116702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114582 116703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
114583 116704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of xBegin() method. This is a no-op.
114584 116705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
114585 116706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3BeginMethod(sqlite3_vtab *pVtab){
114586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(pVtab);
114587 116707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
116708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(pVtab);
114588 116709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pSegments==0 );
114589 116710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nPendingData==0 );
114590 116711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->inTransaction!=1 );
114591 116712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( p->inTransaction = 1 );
114592 116713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( p->mxSavepoint = -1; );
@@ -114597,12 +116718,12 @@
114597 116718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of xCommit() method. This is a no-op. The contents of
114598 116719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the pending-terms hash-table have already been flushed into the database
114599 116720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by fts3SyncMethod().
114600 116721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
114601 116722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3CommitMethod(sqlite3_vtab *pVtab){
114602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(pVtab);
114603 116723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
116724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(pVtab);
114604 116725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nPendingData==0 );
114605 116726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->inTransaction!=0 );
114606 116727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pSegments==0 );
114607 116728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( p->inTransaction = 0 );
114608 116729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( p->mxSavepoint = -1; );
@@ -114869,26 +116990,43 @@
114869 116990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zDb, p->zName, zName
114870 116991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
114871 116992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
114872 116993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114873 116994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The xSavepoint() method.
116997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Flush the contents of the pending-terms table to disk.
116999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
114874 117000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3SavepointMethod(sqlite3_vtab *pVtab, int iSavepoint){
114875 117001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(iSavepoint);
114876 117002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ((Fts3Table *)pVtab)->inTransaction );
114877 117003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ((Fts3Table *)pVtab)->mxSavepoint < iSavepoint );
114878 117004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( ((Fts3Table *)pVtab)->mxSavepoint = iSavepoint );
114879 117005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return fts3SyncMethod(pVtab);
114880 117006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The xRelease() method.
117010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is a no-op.
117012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
114881 117013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3ReleaseMethod(sqlite3_vtab *pVtab, int iSavepoint){
114882 117014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( Fts3Table *p = (Fts3Table*)pVtab );
114883 117015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(iSavepoint);
114884 117016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(pVtab);
114885 117017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->inTransaction );
114886 117018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->mxSavepoint >= iSavepoint );
114887 117019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY( p->mxSavepoint = iSavepoint-1 );
114888 117020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
114889 117021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The xRollbackTo() method.
117025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Discard the contents of the pending terms table.
117027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
114890 117028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3RollbackToMethod(sqlite3_vtab *pVtab, int iSavepoint){
114891 117029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p = (Fts3Table*)pVtab;
114892 117030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(iSavepoint);
114893 117031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->inTransaction );
114894 117032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->mxSavepoint >= iSavepoint );
@@ -115033,22 +117171,10 @@
115033 117171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3HashClear(pHash);
115034 117172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pHash);
115035 117173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115036 117174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
115037 117175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if !SQLITE_CORE
115040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API int sqlite3_extension_init(
115041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3 *db,
115042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char **pzErrMsg,
115043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const sqlite3_api_routines *pApi
115044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
115045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_EXTENSION_INIT2(pApi)
115046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3Fts3Init(db);
115047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
115049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115050 117176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115051 117177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115052 117178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocate an Fts3MultiSegReader for each token in the expression headed
115053 117179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by pExpr.
115054 117180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -115062,99 +117188,151 @@
115062 117188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** there exists prefix b-tree of the right length) then it may be traversed
115063 117189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and merged incrementally. Otherwise, it has to be merged into an in-memory
115064 117190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** doclist and then traversed.
115065 117191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115066 117192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts3EvalAllocateReaders(
115067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr,
115068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pExpr,
117193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS cursor handle */
117194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pExpr, /* Allocate readers for this expression */
115069 117195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pnToken, /* OUT: Total number of tokens in phrase. */
115070 117196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pnOr, /* OUT: Total number of OR nodes in expr. */
115071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pRc
117197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pRc /* IN/OUT: Error code */
115072 117198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115073 117199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr && SQLITE_OK==*pRc ){
115074 117200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->eType==FTSQUERY_PHRASE ){
115075 117201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
115076 117202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nToken = pExpr->pPhrase->nToken;
115077 117203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnToken += nToken;
115078 117204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nToken; i++){
115079 117205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3PhraseToken *pToken = &pExpr->pPhrase->aToken[i];
115080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = sqlite3Fts3TermSegReaderCursor(pCsr,
117206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = fts3TermSegReaderCursor(pCsr,
115081 117207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pToken->z, pToken->n, pToken->isPrefix, &pToken->pSegcsr
115082 117208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
115083 117209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
115084 117210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRc = rc;
115085 117211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
115086 117212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115087 117213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->pPhrase->iDoclistToken==0 );
117215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->pPhrase->iDoclistToken = -1;
115088 117216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
115089 117217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnOr += (pExpr->eType==FTSQUERY_OR);
115090 117218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3EvalAllocateReaders(pCsr, pExpr->pLeft, pnToken, pnOr, pRc);
115091 117219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3EvalAllocateReaders(pCsr, pExpr->pRight, pnToken, pnOr, pRc);
115092 117220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115093 117221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115094 117222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115095 117223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Arguments pList/nList contain the doclist for token iToken of phrase p.
117226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It is merged into the main doclist stored in p->doclist.aAll/nAll.
117227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function assumes that pList points to a buffer allocated using
117229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_malloc(). This function takes responsibility for eventually
117230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** freeing the buffer.
117231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts3EvalPhraseMergeToken(
117233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Table *pTab, /* FTS Table pointer */
117234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Phrase *p, /* Phrase to merge pList/nList into */
117235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iToken, /* Token pList/nList corresponds to */
117236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pList, /* Pointer to doclist */
117237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nList /* Number of bytes in pList */
117238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
117239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iToken!=p->iDoclistToken );
117240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList==0 ){
117242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(p->doclist.aAll);
117243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->doclist.aAll = 0;
117244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->doclist.nAll = 0;
117245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( p->iDoclistToken<0 ){
117248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->doclist.aAll = pList;
117249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->doclist.nAll = nList;
117250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( p->doclist.aAll==0 ){
117253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pList);
117254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else {
117257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pLeft;
117258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pRight;
117259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLeft;
117260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRight;
117261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nDiff;
117262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->iDoclistToken<iToken ){
117264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLeft = p->doclist.aAll;
117265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nLeft = p->doclist.nAll;
117266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRight = pList;
117267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRight = nList;
117268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nDiff = iToken - p->iDoclistToken;
117269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
117270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRight = p->doclist.aAll;
117271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRight = p->doclist.nAll;
117272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLeft = pList;
117273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nLeft = nList;
117274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nDiff = p->iDoclistToken - iToken;
117275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3DoclistPhraseMerge(pTab->bDescIdx, nDiff, pLeft, nLeft, pRight,&nRight);
117278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pLeft);
117279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->doclist.aAll = pRight;
117280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->doclist.nAll = nRight;
117281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iToken>p->iDoclistToken ) p->iDoclistToken = iToken;
117284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Load the doclist for phrase p into p->doclist.aAll/nAll. The loaded doclist
117288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** does not take deferred tokens into account.
117289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
117291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115096 117292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3EvalPhraseLoad(
115097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr,
115098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Phrase *p
117293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS Cursor handle */
117294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Phrase *p /* Phrase object */
115099 117295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115100 117296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
115101 117297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iToken;
115102 117298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
115103 117299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *aDoclist = 0;
115105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDoclist = 0;
115106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iPrev = -1;
115107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115108 117300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iToken=0; rc==SQLITE_OK && iToken<p->nToken; iToken++){
115109 117301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3PhraseToken *pToken = &p->aToken[iToken];
115110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pToken->pSegcsr || pToken->pDeferred );
117302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pToken->pDeferred==0 || pToken->pSegcsr==0 );
115111 117303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pToken->pDeferred==0 ){
117304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pToken->pSegcsr ){
115113 117305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nThis = 0;
115114 117306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *pThis = 0;
115115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts3TermSelect(pTab, pToken, p->iColumn, 1, &nThis, &pThis);
115116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
115117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pThis==0 ){
115118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(aDoclist);
115119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aDoclist = 0;
115120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDoclist = 0;
115121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
115122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( aDoclist==0 ){
115123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aDoclist = pThis;
115124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDoclist = nThis;
115125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( iPrev>=0 );
115127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3DoclistPhraseMerge(pTab->bDescIdx,
115128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iToken-iPrev, aDoclist, nDoclist, pThis, &nThis
115129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
115130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(aDoclist);
115131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aDoclist = pThis;
115132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDoclist = nThis;
115133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iPrev = iToken;
115135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
115140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->doclist.aAll = aDoclist;
115141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->doclist.nAll = nDoclist;
115142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(aDoclist);
115144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
115146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
117307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3TermSelect(pTab, pToken, p->iColumn, &nThis, &pThis);
117308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
117309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalPhraseMergeToken(pTab, p, iToken, pThis, nThis);
117310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pToken->pSegcsr==0 );
117313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
117316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called on each phrase after the position lists for
117320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** any deferred tokens have been loaded into memory. It updates the phrases
117321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** current position list to include only those positions that are really
117322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** instances of the phrase (after considering deferred tokens). If this
117323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** means that the phrase does not appear in the current row, doclist.pList
117324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and doclist.nList are both zeroed.
117325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
117327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115148 117328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3EvalDeferredPhrase(Fts3Cursor *pCsr, Fts3Phrase *pPhrase){
115149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iToken;
115150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK;
115151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nMaxUndeferred = -1;
115153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *aPoslist = 0;
115154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nPoslist = 0;
115155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iPrev = -1;
117329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iToken; /* Used to iterate through phrase tokens */
117330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Return code */
117331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *aPoslist = 0; /* Position list for deferred tokens */
117332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nPoslist = 0; /* Number of bytes in aPoslist */
117333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPrev = -1; /* Token number of previous deferred token */
115156 117334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115157 117335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPhrase->doclist.bFreeList==0 );
115158 117336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115159 117337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iToken=0; rc==SQLITE_OK && iToken<pPhrase->nToken; iToken++){
115160 117338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3PhraseToken *pToken = &pPhrase->aToken[iToken];
@@ -115192,16 +117370,15 @@
115192 117370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.nList = 0;
115193 117371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
115194 117372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115195 117373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115196 117374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iPrev = iToken;
115197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nMaxUndeferred = iToken;
115199 117375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115200 117376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115201 117377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115202 117378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iPrev>=0 ){
117379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nMaxUndeferred = pPhrase->iDoclistToken;
115203 117380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nMaxUndeferred<0 ){
115204 117381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.pList = aPoslist;
115205 117382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.nList = nPoslist;
115206 117383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.iDocid = pCsr->iPrevId;
115207 117384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.bFreeList = 1;
@@ -115246,19 +117423,27 @@
115246 117423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115247 117424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is called for each Fts3Phrase in a full-text query
115248 117425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expression to initialize the mechanism for returning rows. Once this
115249 117426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function has been called successfully on an Fts3Phrase, it may be
115250 117427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** used with fts3EvalPhraseNext() to iterate through the matching docids.
117428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter bOptOk is true, then the phrase may (or may not) use the
117430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** incremental loading strategy. Otherwise, the entire doclist is loaded into
117431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** memory within this call.
117432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK is returned if no error occurs, otherwise an SQLite error code.
115251 117434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115252 117435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3EvalPhraseStart(Fts3Cursor *pCsr, int bOptOk, Fts3Phrase *p){
115253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
117436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Error code */
115254 117437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3PhraseToken *pFirst = &p->aToken[0];
115255 117438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
115256 117439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->doclist.aAll==0 );
115258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCsr->bDesc==pTab->bDescIdx && bOptOk==1 && p->nToken==1
115259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pFirst->pSegcsr && pFirst->pSegcsr->bLookup
117440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCsr->bDesc==pTab->bDescIdx
117441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && bOptOk==1
117442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && p->nToken==1
117443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pFirst->pSegcsr
117444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pFirst->pSegcsr->bLookup
115260 117445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115261 117446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Use the incremental approach. */
115262 117447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCol = (p->iColumn >= pTab->nColumn ? -1 : p->iColumn);
115263 117448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts3MsrIncrStart(
115264 117449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab, pFirst->pSegcsr, iCol, pFirst->z, pFirst->n);
@@ -115274,11 +117459,17 @@
115274 117459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
115275 117460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115276 117461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115277 117462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115278 117463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is used to iterate backwards (from the end to start)
115279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** through doclists.
117464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** through doclists. It is used by this module to iterate through phrase
117465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** doclists in reverse and by the fts3_write.c module to iterate through
117466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pending-terms lists when writing to databases with "order=desc".
117467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The doclist may be sorted in ascending (parameter bDescIdx==0) or
117469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** descending (parameter bDescIdx==1) order of docid. Regardless, this
117470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function iterates from the end of the doclist to the beginning.
115280 117471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115281 117472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Fts3DoclistPrev(
115282 117473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bDescIdx, /* True if the doclist is desc */
115283 117474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aDoclist, /* Pointer to entire doclist */
115284 117475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDoclist, /* Length of aDoclist in bytes */
@@ -115339,13 +117530,13 @@
115339 117530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If there is no "next" entry and no error occurs, then *pbEof is set to
115340 117531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 1 before returning. Otherwise, if no error occurs and the iterator is
115341 117532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** successfully advanced, *pbEof is set to 0.
115342 117533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115343 117534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3EvalPhraseNext(
115344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr,
115345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Phrase *p,
115346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 *pbEof
117535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS Cursor handle */
117536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Phrase *p, /* Phrase object to advance to next docid */
117537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *pbEof /* OUT: Set to 1 if EOF */
115347 117538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115348 117539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
115349 117540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Doclist *pDL = &p->doclist;
115350 117541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
115351 117542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -115387,30 +117578,46 @@
115387 117578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3PoslistCopy(0, &pIter);
115388 117579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDL->nList = (pIter - pDL->pList);
115389 117580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115390 117581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pIter now points just past the 0x00 that terminates the position-
115391 117582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** list for document pDL->iDocid. However, if this position-list was
115392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** edited in place by fts3EvalNearTrim2(), then pIter may not actually
117583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** edited in place by fts3EvalNearTrim(), then pIter may not actually
115393 117584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** point to the start of the next docid value. The following line deals
115394 117585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with this case by advancing pIter past the zero-padding added by
115395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fts3EvalNearTrim2(). */
117586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts3EvalNearTrim(). */
115396 117587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pIter<pEnd && *pIter==0 ) pIter++;
115397 117588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115398 117589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDL->pNextDocid = pIter;
115399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( *pIter || pIter>=&pDL->aAll[pDL->nAll] );
117590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIter>=&pDL->aAll[pDL->nAll] || *pIter );
115400 117591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pbEof = 0;
115401 117592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115402 117593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115403 117594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115404 117595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
115405 117596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115406 117597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
117601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, fts3EvalPhraseStart() is called on all phrases within the
117602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expression. Also the Fts3Expr.bDeferred variable is set to true for any
117603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expressions for which all descendent tokens are deferred.
117604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter bOptOk is zero, then it is guaranteed that the
117606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts3Phrase.doclist.aAll/nAll variables contain the entire doclist for
117607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** each phrase in the expression (subject to deferred token processing).
117608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Or, if bOptOk is non-zero, then one or more tokens within the expression
117609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** may be loaded incrementally, meaning doclist.aAll/nAll is not available.
117610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If an error occurs within this function, *pRc is set to an SQLite error
117612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** code before returning.
117613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115407 117614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts3EvalStartReaders(
115408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr,
115409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pExpr,
115410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bOptOk,
115411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pRc
117615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS Cursor handle */
117616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pExpr, /* Expression to initialize phrases in */
117617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bOptOk, /* True to enable incremental loading */
117618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pRc /* IN/OUT: Error code */
115412 117619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115413 117620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr && SQLITE_OK==*pRc ){
115414 117621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->eType==FTSQUERY_PHRASE ){
115415 117622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
115416 117623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nToken = pExpr->pPhrase->nToken;
@@ -115425,33 +117632,55 @@
115425 117632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->bDeferred = (pExpr->pLeft->bDeferred && pExpr->pRight->bDeferred);
115426 117633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115427 117634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115428 117635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115429 117636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
117637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An array of the following structures is assembled as part of the process
117639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of selecting tokens to defer before the query starts executing (as part
117640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the xFilter() method). There is one element in the array for each
117641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** token in the FTS expression.
117642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Tokens are divided into AND/NEAR clusters. All tokens in a cluster belong
117644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to phrases that are connected only by AND and NEAR operators (not OR or
117645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NOT). When determining tokens to defer, each AND/NEAR cluster is considered
117646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** separately. The root of a tokens AND/NEAR cluster is stored in
117647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts3TokenAndCost.pRoot.
117648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115431 117649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts3TokenAndCost Fts3TokenAndCost;
115432 117650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts3TokenAndCost {
115433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3PhraseToken *pToken;
115434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pRoot;
115435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nOvfl;
115436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCol;
117651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Phrase *pPhrase; /* The phrase the token belongs to */
117652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iToken; /* Position of token in phrase */
117653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3PhraseToken *pToken; /* The token itself */
117654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pRoot; /* Root of NEAR/AND cluster */
117655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nOvfl; /* Number of overflow pages to load doclist */
117656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol; /* The column the token must match */
115437 117657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
115438 117658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is used to populate an allocated Fts3TokenAndCost array.
117661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
117663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, if an error occurs during execution, *pRc is set to an
117664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite error code.
117665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115439 117666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void fts3EvalTokenCosts(
115440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr,
115441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pRoot,
115442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pExpr,
115443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3TokenAndCost **ppTC,
115444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr ***ppOr,
115445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pRc
117667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS Cursor handle */
117668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pRoot, /* Root of current AND/NEAR cluster */
117669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pExpr, /* Expression to consider */
117670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3TokenAndCost **ppTC, /* Write new entries to *(*ppTC)++ */
117671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr ***ppOr, /* Write new OR root to *(*ppOr)++ */
117672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pRc /* IN/OUT: Error code */
115446 117673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115447 117674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *pRc==SQLITE_OK && pExpr ){
115448 117675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->eType==FTSQUERY_PHRASE ){
115449 117676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Phrase *pPhrase = pExpr->pPhrase;
115450 117677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
115451 117678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; *pRc==SQLITE_OK && i<pPhrase->nToken; i++){
115452 117679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3TokenAndCost *pTC = (*ppTC)++;
117680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTC->pPhrase = pPhrase;
117681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTC->iToken = i;
115453 117682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTC->pRoot = pRoot;
115454 117683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTC->pToken = &pPhrase->aToken[i];
115455 117684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTC->iCol = pPhrase->iColumn;
115456 117685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRc = sqlite3Fts3MsrOvfl(pCsr, pTC->pToken->pSegcsr, &pTC->nOvfl);
115457 117686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -115470,23 +117699,34 @@
115470 117699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3EvalTokenCosts(pCsr, pRoot, pExpr->pRight, ppTC, ppOr, pRc);
115471 117700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115472 117701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115473 117702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115474 117703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Determine the average document (row) size in pages. If successful,
117706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** write this value to *pnPage and return SQLITE_OK. Otherwise, return
117707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an SQLite error code.
117708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The average document size in pages is calculated by first calculating
117710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** determining the average size in bytes, B. If B is less than the amount
117711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of data that will fit on a single leaf page of an intkey table in
117712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this database, then the average docsize is 1. Otherwise, it is 1 plus
117713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the number of overflow pages consumed by a record B bytes in size.
117714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115475 117715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3EvalAverageDocsize(Fts3Cursor *pCsr, int *pnPage){
115476 117716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->nRowAvg==0 ){
115477 117717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The average document size, which is required to calculate the cost
115478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of each doclist, has not yet been determined. Read the required
115479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** data from the %_stat table to calculate it.
115480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3
115482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** varints, where nCol is the number of columns in the FTS3 table.
115483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The first varint is the number of documents currently stored in
115484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the table. The following nCol varints contain the total amount of
115485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** data stored in all rows of each column of the table, from left
115486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to right.
115487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
117718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of each doclist, has not yet been determined. Read the required
117719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** data from the %_stat table to calculate it.
117720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Entry 0 of the %_stat table is a blob containing (nCol+1) FTS3
117722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** varints, where nCol is the number of columns in the FTS3 table.
117723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The first varint is the number of documents currently stored in
117724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the table. The following nCol varints contain the total amount of
117725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** data stored in all rows of each column of the table, from left
117726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to right.
117727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115488 117728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
115489 117729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p = (Fts3Table*)pCsr->base.pVtab;
115490 117730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_stmt *pStmt;
115491 117731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 nDoc = 0;
115492 117732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 nByte = 0;
@@ -115517,113 +117757,151 @@
115517 117757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115518 117758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnPage = pCsr->nRowAvg;
115519 117759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
115520 117760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115521 117761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called to select the tokens (if any) that will be
117764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** deferred. The array aTC[] has already been populated when this is
117765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** called.
117766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called once for each AND/NEAR cluster in the
117768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expression. Each invocation determines which tokens to defer within
117769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the cluster with root node pRoot. See comments above the definition
117770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of struct Fts3TokenAndCost for more details.
117771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If no error occurs, SQLITE_OK is returned and sqlite3Fts3DeferToken()
117773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** called on each token to defer. Otherwise, an SQLite error code is
117774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returned.
117775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115522 117776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3EvalSelectDeferred(
115523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr,
115524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pRoot,
115525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3TokenAndCost *aTC,
115526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nTC
117777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS Cursor handle */
117778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pRoot, /* Consider tokens with this root node */
117779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3TokenAndCost *aTC, /* Array of expression tokens and costs */
117780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nTC /* Number of entries in aTC[] */
115527 117781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDocSize = 0;
115529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nDocEst = 0;
115530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK;
115531 117782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
115532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int ii;
117783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nDocSize = 0; /* Number of pages per doc loaded */
117784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Return code */
117785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii; /* Iterator variable for various purposes */
117786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nOvfl = 0; /* Total overflow pages used by doclists */
117787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nToken = 0; /* Total number of tokens in cluster */
115533 117788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nOvfl = 0;
115535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nTerm = 0;
117789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nMinEst = 0; /* The minimum count for any phrase so far. */
117790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nLoad4 = 1; /* (Phrases that will be loaded)^4. */
115536 117791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Count the tokens in this AND/NEAR cluster. If none of the doclists
117793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** associated with the tokens spill onto overflow pages, or if there is
117794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only 1 token, exit early. No tokens to defer in this case. */
115537 117795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nTC; ii++){
115538 117796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aTC[ii].pRoot==pRoot ){
115539 117797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOvfl += aTC[ii].nOvfl;
115540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nTerm++;
117798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nToken++;
115541 117799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115542 117800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nOvfl==0 || nTerm<2 ) return SQLITE_OK;
117801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nOvfl==0 || nToken<2 ) return SQLITE_OK;
115544 117802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Obtain the average docsize (in pages). */
115545 117804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts3EvalAverageDocsize(pCsr, &nDocSize);
115546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(ii=0; ii<nTerm && rc==SQLITE_OK; ii++){
115548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int jj;
115549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3TokenAndCost *pTC = 0;
115550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(jj=0; jj<nTC; jj++){
115552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aTC[jj].pToken && aTC[jj].pRoot==pRoot
115553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (!pTC || aTC[jj].nOvfl<pTC->nOvfl)
117805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc!=SQLITE_OK || nDocSize>0 );
117806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Iterate through all tokens in this AND/NEAR cluster, in ascending order
117809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the number of overflow pages that will be loaded by the pager layer
117810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to retrieve the entire doclist for the token from the full-text index.
117811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Load the doclists for tokens that are either:
117812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a. The cheapest token in the entire query (i.e. the one visited by the
117814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** first iteration of this loop), or
117815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** b. Part of a multi-token phrase.
117817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** After each token doclist is loaded, merge it with the others from the
117819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** same phrase and count the number of documents that the merged doclist
117820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** contains. Set variable "nMinEst" to the smallest number of documents in
117821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** any phrase doclist for which 1 or more token doclists have been loaded.
117822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Let nOther be the number of other phrases for which it is certain that
117823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** one or more tokens will not be deferred.
117824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Then, for each token, defer it if loading the doclist would result in
117826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** loading N or more overflow pages into memory, where N is computed as:
117827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (nMinEst + 4^nOther - 1) / (4^nOther)
117829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<nToken && rc==SQLITE_OK; ii++){
117831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iTC; /* Used to iterate through aTC[] array. */
117832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3TokenAndCost *pTC = 0; /* Set to cheapest remaining token. */
117833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Set pTC to point to the cheapest remaining token. */
117835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iTC=0; iTC<nTC; iTC++){
117836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aTC[iTC].pToken && aTC[iTC].pRoot==pRoot
117837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (!pTC || aTC[iTC].nOvfl<pTC->nOvfl)
115554 117838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTC = &aTC[jj];
117839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTC = &aTC[iTC];
115556 117840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115557 117841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115558 117842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTC );
115559 117843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* At this point pTC points to the cheapest remaining token. */
115561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ii==0 ){
115562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTC->nOvfl ){
115563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDocEst = (pTC->nOvfl * pTab->nPgsz + pTab->nPgsz) / 10;
115564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* TODO: Fix this so that the doclist need not be read twice. */
117844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii && pTC->nOvfl>=((nMinEst+(nLoad4/4)-1)/(nLoad4/4))*nDocSize ){
117845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The number of overflow pages to load for this (and therefore all
117846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** subsequent) tokens is greater than the estimated number of pages
117847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that will be loaded if all subsequent tokens are deferred.
117848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3PhraseToken *pToken = pTC->pToken;
117850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts3DeferToken(pCsr, pToken, pTC->iCol);
117851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3SegReaderCursorFree(pToken->pSegcsr);
117852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pToken->pSegcsr = 0;
117853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
117854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nLoad4 = nLoad4*4;
117855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii==0 || pTC->pPhrase->nToken>1 ){
117856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Either this is the cheapest token in the entire query, or it is
117857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** part of a multi-token phrase. Either way, the entire doclist will
117858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (eventually) be loaded into memory. It may as well be now. */
115566 117859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3PhraseToken *pToken = pTC->pToken;
115567 117860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nList = 0;
115568 117861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *pList = 0;
115569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fts3TermSelect(pTab, pToken, pTC->iCol, 1, &nList, &pList);
115570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
115571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDocEst = fts3DoclistCountDocids(1, pList, nList);
115572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(pList);
115574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
115575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts3TermSegReaderCursor(pCsr,
115576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pToken->z, pToken->n, pToken->isPrefix, &pToken->pSegcsr
117862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3TermSelect(pTab, pToken, pTC->iCol, &nList, &pList);
117863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc==SQLITE_OK || pList==0 );
117864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
117865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCount;
117866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalPhraseMergeToken(pTab, pTC->pPhrase, pTC->iToken,pList,nList);
117867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nCount = fts3DoclistCountDocids(
117868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTC->pPhrase->doclist.aAll, pTC->pPhrase->doclist.nAll
115577 117869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
117870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii==0 || nCount<nMinEst ) nMinEst = nCount;
115578 117871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115579 117872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTC->nOvfl>=(nDocEst*nDocSize) ){
115582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3PhraseToken *pToken = pTC->pToken;
115583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3Fts3DeferToken(pCsr, pToken, pTC->iCol);
115584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3SegReaderCursorFree(pToken->pSegcsr);
115585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pToken->pSegcsr = 0;
115586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nDocEst = 1 + (nDocEst/4);
115588 117873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115589 117874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTC->pToken = 0;
115590 117875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115591 117876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115592 117877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
115593 117878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115594 117879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Fts3EvalStart(Fts3Cursor *pCsr, Fts3Expr *pExpr, int bOptOk){
117880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called from within the xFilter method. It initializes
117882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the full-text query currently stored in pCsr->pExpr. To iterate through
117883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the results of a query, the caller does:
117884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts3EvalStart(pCsr);
117886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** while( 1 ){
117887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts3EvalNext(pCsr);
117888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if( pCsr->bEof ) break;
117889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ... return row pCsr->iPrevId to the caller ...
117890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** }
117891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3EvalStart(Fts3Cursor *pCsr){
115596 117893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *pTab = (Fts3Table *)pCsr->base.pVtab;
115597 117894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
115598 117895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nToken = 0;
115599 117896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOr = 0;
115600 117897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115601 117898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allocate a MultiSegReader for each token in the expression. */
115602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalAllocateReaders(pCsr, pExpr, &nToken, &nOr, &rc);
115603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Call fts3EvalPhraseStart() on all phrases in the expression. TODO:
115605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This call will eventually also be responsible for determining which
115606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** tokens are 'deferred' until the document text is loaded into memory.
115607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Each token in each phrase is dealt with using one of the following
115609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** three strategies:
115610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 1. Entire doclist loaded into memory as part of the
115612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fts3EvalStartReaders() call.
115613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 2. Doclist loaded into memory incrementally, as part of each
115615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3Fts3EvalNext() call.
115616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 3. Token doclist is never loaded. Instead, documents are loaded into
115618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** memory and scanned for the token as part of the sqlite3Fts3EvalNext()
115619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** call. This is known as a "deferred" token.
115620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
115621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If bOptOk is true, check if there are any tokens that should be deferred.
115623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
115624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && bOptOk && nToken>1 && pTab->bHasStat ){
117899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalAllocateReaders(pCsr, pCsr->pExpr, &nToken, &nOr, &rc);
117900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Determine which, if any, tokens in the expression should be deferred. */
117902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && nToken>1 && pTab->bHasStat ){
115625 117903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3TokenAndCost *aTC;
115626 117904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Expr **apOr;
115627 117905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aTC = (Fts3TokenAndCost *)sqlite3_malloc(
115628 117906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sizeof(Fts3TokenAndCost) * nToken
115629 117907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof(Fts3Expr *) * nOr * 2
@@ -115635,11 +117913,11 @@
115635 117913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
115636 117914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
115637 117915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3TokenAndCost *pTC = aTC;
115638 117916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Expr **ppOr = apOr;
115639 117917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalTokenCosts(pCsr, 0, pExpr, &pTC, &ppOr, &rc);
117918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalTokenCosts(pCsr, 0, pCsr->pExpr, &pTC, &ppOr, &rc);
115641 117919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nToken = pTC-aTC;
115642 117920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOr = ppOr-apOr;
115643 117921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115644 117922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
115645 117923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts3EvalSelectDeferred(pCsr, 0, aTC, nToken);
@@ -115650,25 +117928,50 @@
115650 117928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115651 117929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(aTC);
115652 117930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115653 117931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115654 117932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalStartReaders(pCsr, pExpr, bOptOk, &rc);
117933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalStartReaders(pCsr, pCsr->pExpr, 1, &rc);
115656 117934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
115657 117935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115658 117936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void fts3EvalZeroPoslist(Fts3Phrase *pPhrase){
117937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Invalidate the current position list for phrase pPhrase.
117939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts3EvalInvalidatePoslist(Fts3Phrase *pPhrase){
115660 117941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPhrase->doclist.bFreeList ){
115661 117942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pPhrase->doclist.pList);
115662 117943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115663 117944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.pList = 0;
115664 117945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.nList = 0;
115665 117946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->doclist.bFreeList = 0;
115666 117947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115667 117948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int fts3EvalNearTrim2(
115669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nNear,
117949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called to edit the position list associated with
117951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the phrase object passed as the fifth argument according to a NEAR
117952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** condition. For example:
117953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** abc NEAR/5 "def ghi"
117955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Parameter nNear is passed the NEAR distance of the expression (5 in
117957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the example above). When this function is called, *paPoslist points to
117958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the position list, and *pnToken is the number of phrase tokens in, the
117959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** phrase on the other side of the NEAR operator to pPhrase. For example,
117960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if pPhrase refers to the "def ghi" phrase, then *paPoslist points to
117961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the position list associated with phrase "abc".
117962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** All positions in the pPhrase position list that are not sufficiently
117964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** close to a position in the *paPoslist position list are removed. If this
117965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** leaves 0 positions, zero is returned. Otherwise, non-zero.
117966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Before returning, *paPoslist is set to point to the position lsit
117968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** associated with pPhrase. And *pnToken is set to the number of tokens in
117969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pPhrase.
117970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3EvalNearTrim(
117972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nNear, /* NEAR distance. As in "NEAR/nNear". */
115670 117973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aTmp, /* Temporary space to use */
115671 117974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **paPoslist, /* IN/OUT: Position list */
115672 117975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pnToken, /* IN/OUT: Tokens in phrase of *paPoslist */
115673 117976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Phrase *pPhrase /* The phrase object to trim the doclist of */
115674 117977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
@@ -115696,10 +117999,176 @@
115696 117999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115697 118000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115698 118001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return res;
115699 118002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115700 118003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
118005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is a no-op if *pRc is other than SQLITE_OK when it is called.
118006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, it advances the expression passed as the second argument to
118007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** point to the next matching row in the database. Expressions iterate through
118008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** matching rows in docid order. Ascending order if Fts3Cursor.bDesc is zero,
118009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or descending if it is non-zero.
118010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If an error occurs, *pRc is set to an SQLite error code. Otherwise, if
118012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** successful, the following variables in pExpr are set:
118013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts3Expr.bEof (non-zero if EOF - there is no next row)
118015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fts3Expr.iDocid (valid if bEof==0. The docid of the next row)
118016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the expression is of type FTSQUERY_PHRASE, and the expression is not
118018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** at EOF, then the following variables are populated with the position list
118019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for the phrase for the visited row:
118020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FTs3Expr.pPhrase->doclist.nList (length of pList in bytes)
118022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FTs3Expr.pPhrase->doclist.pList (pointer to position list)
118023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It says above that this function advances the expression to the next
118025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** matching row. This is usually true, but there are the following exceptions:
118026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1. Deferred tokens are not taken into account. If a phrase consists
118028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** entirely of deferred tokens, it is assumed to match every row in
118029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the db. In this case the position-list is not populated at all.
118030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Or, if a phrase contains one or more deferred tokens and one or
118032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** more non-deferred tokens, then the expression is advanced to the
118033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** next possible match, considering only non-deferred tokens. In other
118034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** words, if the phrase is "A B C", and "B" is deferred, the expression
118035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is advanced to the next row that contains an instance of "A * C",
118036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** where "*" may match any single token. The position list in this case
118037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is populated as for "A * C" before returning.
118038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2. NEAR is treated as AND. If the expression is "x NEAR y", it is
118040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** advanced to point to the next row that matches "x AND y".
118041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See fts3EvalTestDeferredAndNear() for details on testing if a row is
118043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** really a match, taking into account deferred tokens and NEAR operators.
118044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
118045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void fts3EvalNextRow(
118046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS Cursor handle */
118047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pExpr, /* Expr. to advance to next matching row */
118048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pRc /* IN/OUT: Error code */
118049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
118050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( *pRc==SQLITE_OK ){
118051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bDescDoclist = pCsr->bDesc; /* Used by DOCID_CMP() macro */
118052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->bEof==0 );
118053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->bStart = 1;
118054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( pExpr->eType ){
118056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case FTSQUERY_NEAR:
118057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case FTSQUERY_AND: {
118058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pLeft = pExpr->pLeft;
118059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pRight = pExpr->pRight;
118060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !pLeft->bDeferred || !pRight->bDeferred );
118061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pLeft->bDeferred ){
118063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* LHS is entirely deferred. So we assume it matches every row.
118064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Advance the RHS iterator to find the next row visited. */
118065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRight, pRc);
118066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iDocid = pRight->iDocid;
118067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->bEof = pRight->bEof;
118068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pRight->bDeferred ){
118069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* RHS is entirely deferred. So we assume it matches every row.
118070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Advance the LHS iterator to find the next row visited. */
118071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pLeft, pRc);
118072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iDocid = pLeft->iDocid;
118073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->bEof = pLeft->bEof;
118074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
118075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Neither the RHS or LHS are deferred. */
118076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pLeft, pRc);
118077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRight, pRc);
118078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( !pLeft->bEof && !pRight->bEof && *pRc==SQLITE_OK ){
118079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iDiff = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
118080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iDiff==0 ) break;
118081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iDiff<0 ){
118082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pLeft, pRc);
118083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
118084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRight, pRc);
118085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iDocid = pLeft->iDocid;
118088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->bEof = (pLeft->bEof || pRight->bEof);
118089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
118091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case FTSQUERY_OR: {
118094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pLeft = pExpr->pLeft;
118095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pRight = pExpr->pRight;
118096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
118097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pLeft->bStart || pLeft->iDocid==pRight->iDocid );
118099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pRight->bStart || pLeft->iDocid==pRight->iDocid );
118100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
118102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pLeft, pRc);
118103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){
118104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRight, pRc);
118105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
118106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pLeft, pRc);
118107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRight, pRc);
118108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->bEof = (pLeft->bEof && pRight->bEof);
118111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
118112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
118113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iDocid = pLeft->iDocid;
118114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
118115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iDocid = pRight->iDocid;
118116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
118119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case FTSQUERY_NOT: {
118122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pLeft = pExpr->pLeft;
118123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pRight = pExpr->pRight;
118124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRight->bStart==0 ){
118126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRight, pRc);
118127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( *pRc!=SQLITE_OK || pRight->bStart );
118128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pLeft, pRc);
118131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pLeft->bEof==0 ){
118132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( !*pRc
118133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && !pRight->bEof
118134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && DOCID_CMP(pLeft->iDocid, pRight->iDocid)>0
118135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
118136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRight, pRc);
118137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iDocid = pLeft->iDocid;
118140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->bEof = pLeft->bEof;
118141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
118142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: {
118145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Phrase *pPhrase = pExpr->pPhrase;
118146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalInvalidatePoslist(pPhrase);
118147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof);
118148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iDocid = pPhrase->doclist.iDocid;
118149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
118150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
118156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pRc is not SQLITE_OK, or if pExpr is not the root node of a NEAR
118157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cluster, then this function returns 1 immediately.
118158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, it checks if the current row really does match the NEAR
118160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expression, using the data currently stored in the position lists
118161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (Fts3Expr->pPhrase.doclist.pList/nList) for each phrase in the expression.
118162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the current row is a match, the position list associated with each
118164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** phrase in the NEAR expression is edited in place to contain only those
118165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** phrase instances sufficiently close to their peers to satisfy all NEAR
118166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** constraints. In this case it returns 1. If the NEAR expression does not
118167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** match the current row, 0 is returned. The position lists may or may not
118168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be edited if 0 is returned.
118169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115701 118170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3EvalNearTest(Fts3Expr *pExpr, int *pRc){
115702 118171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res = 1;
115703 118172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115704 118173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The following block runs if pExpr is the root of a NEAR query.
115705 118174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For example, the query:
@@ -115717,11 +118186,11 @@
115717 118186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** | |
115718 118187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "w" "x"
115719 118188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115720 118189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The right-hand child of a NEAR node is always a phrase. The
115721 118190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** left-hand child may be either a phrase or a NEAR node. There are
115722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** no exceptions to this.
118191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no exceptions to this - it's the way the parser in fts3_expr.c works.
115723 118192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115724 118193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *pRc==SQLITE_OK
115725 118194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pExpr->eType==FTSQUERY_NEAR
115726 118195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pExpr->bEof==0
115727 118196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
@@ -115744,21 +118213,21 @@
115744 118213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nToken = p->pPhrase->nToken;
115745 118214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115746 118215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=p->pParent;res && p && p->eType==FTSQUERY_NEAR; p=p->pParent){
115747 118216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Phrase *pPhrase = p->pRight->pPhrase;
115748 118217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nNear = p->nNear;
115749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- res = fts3EvalNearTrim2(nNear, aTmp, &aPoslist, &nToken, pPhrase);
118218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
115750 118219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115751 118220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115752 118221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aPoslist = pExpr->pRight->pPhrase->doclist.pList;
115753 118222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nToken = pExpr->pRight->pPhrase->nToken;
115754 118223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=pExpr->pLeft; p && res; p=p->pLeft){
115755 118224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nNear = p->pParent->nNear;
115756 118225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Phrase *pPhrase = (
115757 118226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->eType==FTSQUERY_NEAR ? p->pRight->pPhrase : p->pPhrase
115758 118227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
115759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- res = fts3EvalNearTrim2(nNear, aTmp, &aPoslist, &nToken, pPhrase);
118228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res = fts3EvalNearTrim(nNear, aTmp, &aPoslist, &nToken, pPhrase);
115760 118229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115761 118230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115762 118231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115763 118232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(aTmp);
115764 118233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -115765,132 +118234,33 @@
115765 118234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115766 118235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return res;
115767 118236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115768 118237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115769 118238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This macro is used by the fts3EvalNext() function. The two arguments are
115771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 64-bit docid values. If the current query is "ORDER BY docid ASC", then
115772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the macro returns (i1 - i2). Or if it is "ORDER BY docid DESC", then
115773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it returns (i2 - i1). This allows the same code to be used for merging
115774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** doclists in ascending or descending order.
118239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is a helper function for fts3EvalTestDeferredAndNear().
118240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Assuming no error occurs or has occurred, It returns non-zero if the
118241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expression passed as the second argument matches the row that pCsr
118242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** currently points to, or zero if it does not.
118243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pRc is not SQLITE_OK when this function is called, it is a no-op.
118245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If an error occurs during execution of this function, *pRc is set to
118246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the appropriate SQLite error code. In this case the returned value is
118247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** undefined.
115775 118248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define DOCID_CMP(i1, i2) ((pCsr->bDesc?-1:1) * (i1-i2))
115777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void fts3EvalNext(
115779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Cursor *pCsr,
115780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pExpr,
115781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pRc
115782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
115783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( *pRc==SQLITE_OK ){
115784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->bEof==0 );
115785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->bStart = 1;
115786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- switch( pExpr->eType ){
115788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case FTSQUERY_NEAR:
115789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case FTSQUERY_AND: {
115790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pLeft = pExpr->pLeft;
115791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pRight = pExpr->pRight;
115792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( !pLeft->bDeferred || !pRight->bDeferred );
115793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pLeft->bDeferred ){
115794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRight, pRc);
115795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iDocid = pRight->iDocid;
115796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->bEof = pRight->bEof;
115797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pRight->bDeferred ){
115798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pLeft, pRc);
115799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iDocid = pLeft->iDocid;
115800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->bEof = pLeft->bEof;
115801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pLeft, pRc);
115803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRight, pRc);
115804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( !pLeft->bEof && !pRight->bEof && *pRc==SQLITE_OK ){
115806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 iDiff = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
115807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iDiff==0 ) break;
115808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iDiff<0 ){
115809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pLeft, pRc);
115810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRight, pRc);
115812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iDocid = pLeft->iDocid;
115816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->bEof = (pLeft->bEof || pRight->bEof);
115817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
115819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case FTSQUERY_OR: {
115822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pLeft = pExpr->pLeft;
115823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pRight = pExpr->pRight;
115824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
115825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pLeft->bStart || pLeft->iDocid==pRight->iDocid );
115827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pRight->bStart || pLeft->iDocid==pRight->iDocid );
115828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
115830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pLeft, pRc);
115831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pLeft->bEof || (pRight->bEof==0 && iCmp>0) ){
115832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRight, pRc);
115833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pLeft, pRc);
115835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRight, pRc);
115836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->bEof = (pLeft->bEof && pRight->bEof);
115839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCmp = DOCID_CMP(pLeft->iDocid, pRight->iDocid);
115840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pRight->bEof || (pLeft->bEof==0 && iCmp<0) ){
115841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iDocid = pLeft->iDocid;
115842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iDocid = pRight->iDocid;
115844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
115847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case FTSQUERY_NOT: {
115850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pLeft = pExpr->pLeft;
115851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Expr *pRight = pExpr->pRight;
115852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pRight->bStart==0 ){
115854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRight, pRc);
115855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( *pRc!=SQLITE_OK || pRight->bStart );
115856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pLeft, pRc);
115859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pLeft->bEof==0 ){
115860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( !*pRc
115861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && !pRight->bEof
115862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && DOCID_CMP(pLeft->iDocid, pRight->iDocid)>0
115863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
115864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRight, pRc);
115865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iDocid = pLeft->iDocid;
115868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->bEof = pLeft->bEof;
115869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
115870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- default: {
115873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Phrase *pPhrase = pExpr->pPhrase;
115874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalZeroPoslist(pPhrase);
115875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pRc = fts3EvalPhraseNext(pCsr, pPhrase, &pExpr->bEof);
115876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iDocid = pPhrase->doclist.iDocid;
115877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
115878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int fts3EvalDeferredTest(Fts3Cursor *pCsr, Fts3Expr *pExpr, int *pRc){
115884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bHit = 1;
118249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3EvalTestExpr(
118250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Cursor *pCsr, /* FTS cursor handle */
118251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Expr *pExpr, /* Expr to test. May or may not be root. */
118252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pRc /* IN/OUT: Error code */
118253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
118254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bHit = 1; /* Return value */
115885 118255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *pRc==SQLITE_OK ){
115886 118256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pExpr->eType ){
115887 118257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case FTSQUERY_NEAR:
115888 118258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case FTSQUERY_AND:
115889 118259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bHit = (
115890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalDeferredTest(pCsr, pExpr->pLeft, pRc)
115891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && fts3EvalDeferredTest(pCsr, pExpr->pRight, pRc)
118260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc)
118261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && fts3EvalTestExpr(pCsr, pExpr->pRight, pRc)
115892 118262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& fts3EvalNearTest(pExpr, pRc)
115893 118263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
115894 118264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115895 118265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the NEAR expression does not match any rows, zero the doclist for
115896 118266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** all phrases involved in the NEAR. This is because the snippet(),
@@ -115912,31 +118282,31 @@
115912 118282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pExpr->pParent==0 || pExpr->pParent->eType!=FTSQUERY_NEAR)
115913 118283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115914 118284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Expr *p;
115915 118285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=pExpr; p->pPhrase==0; p=p->pLeft){
115916 118286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pRight->iDocid==pCsr->iPrevId ){
115917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalZeroPoslist(p->pRight->pPhrase);
118287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalInvalidatePoslist(p->pRight->pPhrase);
115918 118288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115919 118289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115920 118290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->iDocid==pCsr->iPrevId ){
115921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalZeroPoslist(p->pPhrase);
118291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalInvalidatePoslist(p->pPhrase);
115922 118292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115923 118293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115924 118294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115925 118295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
115926 118296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115927 118297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case FTSQUERY_OR: {
115928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bHit1 = fts3EvalDeferredTest(pCsr, pExpr->pLeft, pRc);
115929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bHit2 = fts3EvalDeferredTest(pCsr, pExpr->pRight, pRc);
118298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bHit1 = fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc);
118299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bHit2 = fts3EvalTestExpr(pCsr, pExpr->pRight, pRc);
115930 118300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bHit = bHit1 || bHit2;
115931 118301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
115932 118302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115933 118303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115934 118304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case FTSQUERY_NOT:
115935 118305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bHit = (
115936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalDeferredTest(pCsr, pExpr->pLeft, pRc)
115937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && !fts3EvalDeferredTest(pCsr, pExpr->pRight, pRc)
118306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalTestExpr(pCsr, pExpr->pLeft, pRc)
118307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && !fts3EvalTestExpr(pCsr, pExpr->pRight, pRc)
115938 118308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
115939 118309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
115940 118310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115941 118311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: {
115942 118312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->pDeferred
@@ -115943,11 +118313,11 @@
115943 118313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pExpr->iDocid==pCsr->iPrevId || pExpr->bDeferred)
115944 118314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115945 118315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Phrase *pPhrase = pExpr->pPhrase;
115946 118316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->bDeferred || pPhrase->doclist.bFreeList==0 );
115947 118317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->bDeferred ){
115948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalZeroPoslist(pPhrase);
118318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalInvalidatePoslist(pPhrase);
115949 118319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115950 118320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRc = fts3EvalDeferredPhrase(pCsr, pPhrase);
115951 118321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bHit = (pPhrase->doclist.pList!=0);
115952 118322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iDocid = pCsr->iPrevId;
115953 118323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -115959,31 +118329,53 @@
115959 118329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115960 118330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return bHit;
115961 118331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115962 118332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115963 118333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return 1 if both of the following are true:
118334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called as the second part of each xNext operation when
118335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** iterating through the results of a full-text query. At this point the
118336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cursor points to a row that matches the query expression, with the
118337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** following caveats:
118338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Up until this point, "NEAR" operators in the expression have been
118340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** treated as "AND".
118341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Deferred tokens have not yet been considered.
118343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If *pRc is not SQLITE_OK when this function is called, it immediately
118345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns 0. Otherwise, it tests whether or not after considering NEAR
118346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** operators and deferred tokens the current row is still a match for the
118347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expression. It returns 1 if both of the following are true:
115965 118348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115966 118349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 1. *pRc is SQLITE_OK when this function returns, and
115967 118350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115968 118351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2. After scanning the current FTS table row for the deferred tokens,
115969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it is determined that the row does not match the query.
118352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it is determined that the row does *not* match the query.
115970 118353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115971 118354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Or, if no error occurs and it seems the current row does match the FTS
115972 118355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** query, return 0.
115973 118356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int fts3EvalLoadDeferred(Fts3Cursor *pCsr, int *pRc){
118357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3EvalTestDeferredAndNear(Fts3Cursor *pCsr, int *pRc){
115975 118358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = *pRc;
115976 118359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bMiss = 0;
115977 118360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
118361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there are one or more deferred tokens, load the current row into
118363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** memory and scan it to determine the position list for each deferred
118364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** token. Then, see if this row is really a match, considering deferred
118365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tokens and NEAR operators (neither of which were taken into account
118366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** earlier, by fts3EvalNextRow()).
118367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115978 118368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->pDeferred ){
115979 118369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts3CursorSeek(0, pCsr);
115980 118370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
115981 118371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts3CacheDeferredDoclists(pCsr);
115982 118372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115983 118373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bMiss = (0==fts3EvalDeferredTest(pCsr, pCsr->pExpr, &rc));
118374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bMiss = (0==fts3EvalTestExpr(pCsr, pCsr->pExpr, &rc));
118375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Free the position-lists accumulated for each deferred token above. */
115985 118377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3FreeDeferredDoclists(pCsr);
115986 118378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRc = rc;
115987 118379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115988 118380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (rc==SQLITE_OK && bMiss);
115989 118381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -115990,11 +118382,11 @@
115990 118382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115991 118383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115992 118384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Advance to the next document that matches the FTS expression in
115993 118385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Fts3Cursor.pExpr.
115994 118386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
115995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Fts3EvalNext(Fts3Cursor *pCsr){
118387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3EvalNext(Fts3Cursor *pCsr){
115996 118388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Return Code */
115997 118389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Expr *pExpr = pCsr->pExpr;
115998 118390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCsr->isEof==0 );
115999 118391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr==0 ){
116000 118392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->isEof = 1;
@@ -116002,23 +118394,23 @@
116002 118394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do {
116003 118395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->isRequireSeek==0 ){
116004 118396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_reset(pCsr->pStmt);
116005 118397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116006 118398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_data_count(pCsr->pStmt)==0 );
116007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pExpr, &rc);
118399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pExpr, &rc);
116008 118400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->isEof = pExpr->bEof;
116009 118401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->isRequireSeek = 1;
116010 118402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->isMatchinfoNeeded = 1;
116011 118403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->iPrevId = pExpr->iDocid;
116012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( pCsr->isEof==0 && fts3EvalLoadDeferred(pCsr, &rc) );
118404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( pCsr->isEof==0 && fts3EvalTestDeferredAndNear(pCsr, &rc) );
116013 118405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116014 118406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116015 118407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116016 118408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116017 118409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116018 118410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Restart interation for expression pExpr so that the next call to
116019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3Fts3EvalNext() visits the first row. Do not allow incremental
118411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fts3EvalNext() visits the first row. Do not allow incremental
116020 118412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** loading or merging of phrase doclists for this iteration.
116021 118413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116022 118414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If *pRc is other than SQLITE_OK when this function is called, it is
116023 118415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a no-op. If an error occurs within this function, *pRc is set to an
116024 118416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite error code before returning.
@@ -116030,19 +118422,20 @@
116030 118422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
116031 118423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr && *pRc==SQLITE_OK ){
116032 118424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Phrase *pPhrase = pExpr->pPhrase;
116033 118425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116034 118426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPhrase ){
116035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalZeroPoslist(pPhrase);
118427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalInvalidatePoslist(pPhrase);
116036 118428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPhrase->bIncr ){
116037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Fts3EvalPhraseCleanup(pPhrase);
116038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist));
116039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pRc = sqlite3Fts3EvalStart(pCsr, pExpr, 0);
116040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
116041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPhrase->doclist.pNextDocid = 0;
116042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPhrase->doclist.iDocid = 0;
118429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPhrase->nToken==1 );
118430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pPhrase->aToken[0].pSegcsr );
118431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Fts3MsrIncrRestart(pPhrase->aToken[0].pSegcsr);
118432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRc = fts3EvalPhraseStart(pCsr, 0, pPhrase);
116043 118433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPhrase->doclist.pNextDocid = 0;
118436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPhrase->doclist.iDocid = 0;
116044 118437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116045 118438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116046 118439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iDocid = 0;
116047 118440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->bEof = 0;
116048 118441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->bStart = 0;
@@ -116145,18 +118538,18 @@
116145 118538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Ensure the %_content statement is reset. */
116146 118539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->isRequireSeek==0 ) sqlite3_reset(pCsr->pStmt);
116147 118540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_data_count(pCsr->pStmt)==0 );
116148 118541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116149 118542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Advance to the next document */
116150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRoot, &rc);
118543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRoot, &rc);
116151 118544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->isEof = pRoot->bEof;
116152 118545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->isRequireSeek = 1;
116153 118546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->isMatchinfoNeeded = 1;
116154 118547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->iPrevId = pRoot->iDocid;
116155 118548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( pCsr->isEof==0
116156 118549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pRoot->eType==FTSQUERY_NEAR
116157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && fts3EvalLoadDeferred(pCsr, &rc)
118550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && fts3EvalTestDeferredAndNear(pCsr, &rc)
116158 118551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
116159 118552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116160 118553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && pCsr->isEof==0 ){
116161 118554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3EvalUpdateCounts(pRoot);
116162 118555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -116174,14 +118567,14 @@
116174 118567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116175 118568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** do {...} while( pRoot->iDocid<iDocid && rc==SQLITE_OK );
116176 118569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116177 118570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3EvalRestart(pCsr, pRoot, &rc);
116178 118571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do {
116179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalNext(pCsr, pRoot, &rc);
118572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalNextRow(pCsr, pRoot, &rc);
116180 118573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pRoot->bEof==0 );
116181 118574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( pRoot->iDocid!=iDocid && rc==SQLITE_OK );
116182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalLoadDeferred(pCsr, &rc);
118575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalTestDeferredAndNear(pCsr, &rc);
116183 118576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116184 118577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116185 118578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116186 118579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116187 118580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -116225,12 +118618,12 @@
116225 118618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCol;
116226 118619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116227 118620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->bDeferred && pExpr->pParent->eType!=FTSQUERY_NEAR ){
116228 118621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCsr->nDoc>0 );
116229 118622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iCol=0; iCol<pTab->nColumn; iCol++){
116230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aiOut[iCol*3 + 1] = pCsr->nDoc;
116231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aiOut[iCol*3 + 2] = pCsr->nDoc;
118623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aiOut[iCol*3 + 1] = (u32)pCsr->nDoc;
118624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aiOut[iCol*3 + 2] = (u32)pCsr->nDoc;
116232 118625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116233 118626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
116234 118627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts3EvalGatherStats(pCsr, pExpr);
116235 118628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
116236 118629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->aMI );
@@ -116308,18 +118701,32 @@
116308 118701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116309 118702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Fts3EvalPhraseCleanup(Fts3Phrase *pPhrase){
116310 118703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPhrase ){
116311 118704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
116312 118705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pPhrase->doclist.aAll);
116313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3EvalZeroPoslist(pPhrase);
118706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3EvalInvalidatePoslist(pPhrase);
116314 118707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&pPhrase->doclist, 0, sizeof(Fts3Doclist));
116315 118708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pPhrase->nToken; i++){
116316 118709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3SegReaderCursorFree(pPhrase->aToken[i].pSegcsr);
116317 118710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPhrase->aToken[i].pSegcsr = 0;
116318 118711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116319 118712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116320 118713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !SQLITE_CORE
118716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
118717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Initialize API pointer table, if required.
118718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
118719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_extension_init(
118720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db,
118721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char **pzErrMsg,
118722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const sqlite3_api_routines *pApi
118723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
118724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_EXTENSION_INIT2(pApi)
118725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3Fts3Init(db);
118726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
116321 118728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116322 118729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116323 118730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116324 118731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of fts3.c ************************************************/
116325 118732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file fts3_aux.c ****************************************/
@@ -116334,13 +118741,14 @@
116334 118741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
116335 118742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116336 118743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
******************************************************************************
116337 118744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116338 118745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
116340 118746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
116341 118747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
118749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
116342 118750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116343 118751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts3auxTable Fts3auxTable;
116344 118752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Fts3auxCursor Fts3auxCursor;
116345 118753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116346 118754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct Fts3auxTable {
@@ -116875,10 +119283,12 @@
116875 119283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116876 119284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Default span for NEAR operators.
116877 119285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116878 119286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FTS3_DEFAULT_NEAR_PARAM 10
116879 119287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
119289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
116880 119290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116881 119291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116882 119292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** isNot:
116883 119293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This variable is used by function getNextNode(). When getNextNode() is
116884 119294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** called, it sets ParseContext.isNot to true if the 'next node' is a
@@ -117576,10 +119986,11 @@
117576 119986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Everything after this point is just test code.
117577 119987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117578 119988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117579 119989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
117580 119990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
117581 119992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117582 119993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
117583 119994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Function to query the hash-table of tokenizers (see README.tokenizers).
117584 119995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117585 119996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int queryTestTokenizer(
@@ -117786,10 +120197,13 @@
117786 120197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** * The FTS3 module is being built into the core of
117787 120198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
117788 120199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117789 120200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
117790 120201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
120202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
120203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
120204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
117791 120205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117792 120206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117793 120207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
117794 120208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Malloc and Free functions
117795 120209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -118166,11 +120580,14 @@
118166 120580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** * The FTS3 module is being built into the core of
118167 120581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
118168 120582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118169 120583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
118170 120584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
120585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
120586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
120587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
120588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
118172 120589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118173 120590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118174 120591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
118175 120592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Class derived from sqlite3_tokenizer
118176 120593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -118810,14 +121227,12 @@
118810 121227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** * The FTS3 module is being built into the core of
118811 121228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
118812 121229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118813 121230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
118814 121231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_CORE
118816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_EXTENSION_INIT1
118817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
118818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
121233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
118819 121234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118820 121235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
118821 121236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of the SQL scalar function for accessing the underlying
118822 121237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** hash table. This function may be called as follows:
118823 121238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -118937,11 +121352,11 @@
118937 121352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_tokenizer **ppTok, /* OUT: Tokenizer (if applicable) */
118938 121353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **pzErr /* OUT: Set to malloced error message */
118939 121354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
118940 121355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
118941 121356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z = (char *)zArg;
118942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n;
121357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = 0;
118943 121358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zCopy;
118944 121359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zEnd; /* Pointer to nul-term of zCopy */
118945 121360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_tokenizer_module *m;
118946 121361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118947 121362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCopy = sqlite3_mprintf("%s", zArg);
@@ -118989,10 +121404,12 @@
118989 121404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118990 121405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118991 121406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118992 121407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
118993 121408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <tcl.h> */
121410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
118994 121411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118995 121412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
118996 121413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of a special SQL scalar function for testing tokenizers
118997 121414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** designed to be used in concert with the Tcl testing framework. This
118998 121415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function must be called with two arguments:
@@ -119300,11 +121717,14 @@
119300 121717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** * The FTS3 module is being built into the core of
119301 121718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite (in which case SQLITE_ENABLE_FTS3 is defined).
119302 121719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
119303 121720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
119304 121721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
121723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
121724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdio.h> */
121725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
119306 121726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119307 121727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119308 121728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct simple_tokenizer {
119309 121729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_tokenizer base;
119310 121730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char delim[128]; /* flag ASCII delimiters */
@@ -119526,10 +121946,13 @@
119526 121946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** code in fts3.c.
119527 121947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
119528 121948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119529 121949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
119530 121950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
121952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
121953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <stdlib.h> */
119531 121954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119532 121955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
119533 121956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When full-text index nodes are loaded from disk, the buffer that they
119534 121957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are loaded into has the following number of bytes of padding at the end
119535 121958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of it. i.e. if a full-text index node is 900 bytes in size, then a buffer
@@ -120750,10 +123173,11 @@
120750 123173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pReader->pOffsetList = 0;
120751 123174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
120752 123175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pReader->pOffsetList = p;
120753 123176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
120754 123177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
123178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pEnd = &pReader->aDoclist[pReader->nDoclist];
120755 123179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
120756 123180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Pointer p currently points at the first byte of an offset list. The
120757 123181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** following block advances it to point one byte past the end of
120758 123182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same offset list. */
120759 123183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( 1 ){
@@ -120778,17 +123202,19 @@
120778 123202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
120779 123203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ppOffsetList ){
120780 123204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppOffsetList = pReader->pOffsetList;
120781 123205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnOffsetList = (int)(p - pReader->pOffsetList - 1);
120782 123206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
123207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
123208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( p<pEnd && *p==0 ) p++;
120783 123209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
120784 123210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there are no more entries in the doclist, set pOffsetList to
120785 123211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NULL. Otherwise, set Fts3SegReader.iDocid to the next docid and
120786 123212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Fts3SegReader.pOffsetList to point to the next offset list before
120787 123213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returning.
120788 123214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
120789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p>=&pReader->aDoclist[pReader->nDoclist] ){
123215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p>=pEnd ){
120790 123216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pReader->pOffsetList = 0;
120791 123217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
120792 123218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts3SegReaderRequire(pReader, p, FTS3_VARINT_MAX);
120793 123219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
120794 123220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iDelta;
@@ -120823,11 +123249,11 @@
120823 123249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; rc==SQLITE_OK && ii<pMsr->nSegment; ii++){
120824 123250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3SegReader *pReader = pMsr->apSegment[ii];
120825 123251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !fts3SegReaderIsPending(pReader)
120826 123252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !fts3SegReaderIsRootOnly(pReader)
120827 123253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
120828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int jj;
123254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 jj;
120829 123255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=pReader->iStartBlock; jj<=pReader->iLeafEndBlock; jj++){
120830 123256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nBlob;
120831 123257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts3ReadBlock(p, jj, 0, &nBlob, 0);
120832 123258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) break;
120833 123259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (nBlob+35)>pgsz ){
@@ -121768,55 +124194,31 @@
121768 124194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121769 124195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppList = pList;
121770 124196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnList = nList;
121771 124197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121772 124198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
121774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3Table *p, /* Virtual table handle */
121775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3MultiSegReader *pCsr, /* Cursor object */
121776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCol, /* Column to match on. */
121777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zTerm, /* Term to iterate through a doclist for */
121778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nTerm /* Number of bytes in zTerm */
124199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
124200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Cache data in the Fts3MultiSegReader.aBuffer[] buffer (overwriting any
124201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** existing data). Grow the buffer if required.
124202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
124203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If successful, return SQLITE_OK. Otherwise, if an OOM error is encountered
124204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** trying to resize the buffer, return SQLITE_NOMEM.
124205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
124206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3MsrBufferData(
124207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3MultiSegReader *pMsr, /* Multi-segment-reader handle */
124208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pList,
124209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nList
121779 124210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
121780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
121781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nSegment = pCsr->nSegment;
121782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
121783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
121784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
121785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCsr->pFilter==0 );
121787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( zTerm && nTerm>0 );
121788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Advance each segment iterator until it points to the term zTerm/nTerm. */
121790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nSegment; i++){
121791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3SegReader *pSeg = pCsr->apSegment[i];
121792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do {
121793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = fts3SegReaderNext(p, pSeg, 1);
121794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ) return rc;
121795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
121796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
121797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3SegReaderSort(pCsr->apSegment, nSegment, nSegment, fts3SegReaderCmp);
121798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Determine how many of the segments actually point to zTerm/nTerm. */
121800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nSegment; i++){
121801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Fts3SegReader *pSeg = pCsr->apSegment[i];
121802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !pSeg->aNode || fts3SegReaderTermCmp(pSeg, zTerm, nTerm) ){
121803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
121804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
121805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
121806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->nAdvance = i;
121807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Advance each of the segments to point to the first docid. */
121809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pCsr->nAdvance; i++){
121810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = fts3SegReaderFirstDocid(p, pCsr->apSegment[i]);
121811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ) return rc;
121812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
121813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3SegReaderSort(pCsr->apSegment, i, i, xCmp);
121814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( iCol<0 || iCol<p->nColumn );
121816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->iColFilter = iCol;
121817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
124211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nList>pMsr->nBuffer ){
124212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pNew;
124213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMsr->nBuffer = nList*2;
124214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew = (char *)sqlite3_realloc(pMsr->aBuffer, pMsr->nBuffer);
124215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pNew ) return SQLITE_NOMEM;
124216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMsr->aBuffer = pNew;
124217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pMsr->aBuffer, pList, nList);
121818 124220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
121819 124221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121820 124222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121821 124223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3MsrIncrNext(
121822 124224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p, /* Virtual table handle */
@@ -121866,52 +124268,138 @@
121866 124268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pMsr->iColFilter>=0 ){
121867 124269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3ColumnFilter(pMsr->iColFilter, &pList, &nList);
121868 124270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121869 124271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121870 124272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nList>0 ){
124273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fts3SegReaderIsPending(apSegment[0]) ){
124274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3MsrBufferData(pMsr, pList, nList+1);
124275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
124276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *paPoslist = pMsr->aBuffer;
124277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pMsr->aBuffer[nList] & 0xFE)==0x00 );
124278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
124279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *paPoslist = pList;
124280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
121871 124281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piDocid = iDocid;
121872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *paPoslist = pList;
121873 124282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnPoslist = nList;
121874 124283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
121875 124284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121876 124285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121878 124286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121879 124287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
124288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
124289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fts3SegReaderStart(
124292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Table *p, /* Virtual table handle */
124293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3MultiSegReader *pCsr, /* Cursor object */
124294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTerm, /* Term searched for (or NULL) */
124295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nTerm /* Length of zTerm in bytes */
124296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
124297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
124298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSeg = pCsr->nSegment;
124299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the Fts3SegFilter defines a specific term (or term prefix) to search
124301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for, then advance each segment iterator until it points to a term of
124302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** equal or greater value than the specified term. This prevents many
124303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** unnecessary merge/sort operations for the case where single segment
124304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** b-tree leaf nodes contain more than one term.
124305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
124306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; pCsr->bRestart==0 && i<pCsr->nSegment; i++){
124307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3SegReader *pSeg = pCsr->apSegment[i];
124308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do {
124309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = fts3SegReaderNext(p, pSeg, 0);
124310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
124311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }while( zTerm && fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
124312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3SegReaderSort(pCsr->apSegment, nSeg, nSeg, fts3SegReaderCmp);
124314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
121880 124315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
121881 124316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121882 124317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121883 124318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3SegReaderStart(
121884 124319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p, /* Virtual table handle */
121885 124320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3MultiSegReader *pCsr, /* Cursor object */
121886 124321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3SegFilter *pFilter /* Restrictions on range of iteration */
121887 124322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
121888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
121889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Initialize the cursor object */
121891 124323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pFilter = pFilter;
121892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
121893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the Fts3SegFilter defines a specific term (or term prefix) to search
121894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for, then advance each segment iterator until it points to a term of
121895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** equal or greater value than the specified term. This prevents many
121896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** unnecessary merge/sort operations for the case where single segment
121897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** b-tree leaf nodes contain more than one term.
121898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
121899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pCsr->nSegment; i++){
121900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nTerm = pFilter->nTerm;
121901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zTerm = pFilter->zTerm;
124324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return fts3SegReaderStart(p, pCsr, pFilter->zTerm, pFilter->nTerm);
124325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3Fts3MsrIncrStart(
124328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3Table *p, /* Virtual table handle */
124329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Fts3MultiSegReader *pCsr, /* Cursor object */
124330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol, /* Column to match on. */
124331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zTerm, /* Term to iterate through a doclist for */
124332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nTerm /* Number of bytes in zTerm */
124333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
124334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
124335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
124336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSegment = pCsr->nSegment;
124337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xCmp)(Fts3SegReader *, Fts3SegReader *) = (
124338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->bDescIdx ? fts3SegReaderDoclistCmpRev : fts3SegReaderDoclistCmp
124339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
124340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->pFilter==0 );
124342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( zTerm && nTerm>0 );
124343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Advance each segment iterator until it points to the term zTerm/nTerm. */
124345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3SegReaderStart(p, pCsr, zTerm, nTerm);
124346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
124347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Determine how many of the segments actually point to zTerm/nTerm. */
124349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nSegment; i++){
121902 124350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3SegReader *pSeg = pCsr->apSegment[i];
121903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do {
121904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = fts3SegReaderNext(p, pSeg, 0);
121905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc!=SQLITE_OK ) return rc;
121906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( zTerm && fts3SegReaderTermCmp(pSeg, zTerm, nTerm)<0 );
124351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pSeg->aNode || fts3SegReaderTermCmp(pSeg, zTerm, nTerm) ){
124352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
124353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
121907 124354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
121908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fts3SegReaderSort(
121909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->apSegment, pCsr->nSegment, pCsr->nSegment, fts3SegReaderCmp);
124355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->nAdvance = i;
124356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Advance each of the segments to point to the first docid. */
124358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pCsr->nAdvance; i++){
124359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3SegReaderFirstDocid(p, pCsr->apSegment[i]);
124360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
124361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fts3SegReaderSort(pCsr->apSegment, i, i, xCmp);
124363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iCol<0 || iCol<p->nColumn );
124365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->iColFilter = iCol;
124366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
124368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
124371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called on a MultiSegReader that has been started using
124372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3Fts3MsrIncrStart(). One or more calls to MsrIncrNext() may also
124373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have been made. Calling this function puts the MultiSegReader in such
124374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a state that if the next two calls are:
124375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
124376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3Fts3SegReaderStart()
124377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3Fts3SegReaderStep()
124378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
124379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the entire doclist for the term is available in
124380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** MultiSegReader.aDoclist/nDoclist.
124381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
124382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3Fts3MsrIncrRestart(Fts3MultiSegReader *pCsr){
124383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Used to iterate through segment-readers */
124384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->zTerm==0 );
124386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->nTerm==0 );
124387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->aDoclist==0 );
124388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->nDoclist==0 );
124389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->nAdvance = 0;
124391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->bRestart = 1;
124392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pCsr->nSegment; i++){
124393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->apSegment[i]->pOffsetList = 0;
124394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->apSegment[i]->nOffsetList = 0;
124395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->apSegment[i]->iDocid = 0;
124396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
121910 124397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121911 124398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
121912 124399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
121913 124401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121914 124402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3SegReaderStep(
121915 124403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p, /* Virtual table handle */
121916 124404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3MultiSegReader *pCsr /* Cursor object */
121917 124405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
@@ -121981,13 +124469,18 @@
121981 124469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isIgnoreEmpty || (isRequirePos && !isColFilter) );
121982 124470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nMerge==1
121983 124471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !isIgnoreEmpty
121984 124472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (p->bDescIdx==0 || fts3SegReaderIsPending(apSegment[0])==0)
121985 124473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
121986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->aDoclist = apSegment[0]->aDoclist;
121987 124474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->nDoclist = apSegment[0]->nDoclist;
121988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ROW;
124475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fts3SegReaderIsPending(apSegment[0]) ){
124476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3MsrBufferData(pCsr, apSegment[0]->aDoclist, pCsr->nDoclist);
124477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->aDoclist = pCsr->aBuffer;
124478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
124479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->aDoclist = apSegment[0]->aDoclist;
124480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
124481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ) rc = SQLITE_ROW;
121989 124482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
121990 124483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDoclist = 0; /* Size of doclist */
121991 124484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 iPrev = 0; /* Previous docid stored in doclist */
121992 124485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
121993 124486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The current term of the first nMerge entries in the array
@@ -122717,10 +125210,12 @@
122717 125210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
******************************************************************************
122718 125211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
122719 125212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
122720 125213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
122721 125214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
125216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
122722 125217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
122723 125218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
122724 125219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Characters that may appear in the second argument to matchinfo().
122725 125220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
122726 125221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS3_MATCHINFO_NPHRASE 'p' /* 1 value */
@@ -123725,11 +126220,11 @@
123725 126220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bGlobal ) pInfo->aMatchinfo[0] = pInfo->nCol;
123726 126221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
123727 126222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
123728 126223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case FTS3_MATCHINFO_NDOC:
123729 126224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bGlobal ){
123730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 nDoc;
126225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 nDoc = 0;
123731 126226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fts3MatchinfoSelectDoctotal(pTab, &pSelect, &nDoc, 0);
123732 126227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pInfo->aMatchinfo[0] = (u32)nDoc;
123733 126228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
123734 126229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
123735 126230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -124304,10 +126799,12 @@
124304 126799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_CORE
124305 126800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_EXTENSION_INIT1
124306 126801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
124307 126802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
124308 126803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
126805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
124309 126806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
124310 126807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_AMALGAMATION
124311 126808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include "sqlite3rtree.h"
124312 126809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef sqlite3_int64 i64;
124313 126810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned char u8;
@@ -125620,11 +128117,11 @@
125620 128117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
125621 128118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static float cellArea(Rtree *pRtree, RtreeCell *p){
125622 128119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float area = 1.0;
125623 128120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
125624 128121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<(pRtree->nDim*2); ii+=2){
125625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- area = area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
128122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ area = (float)(area * (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii])));
125626 128123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125627 128124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return area;
125628 128125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125629 128126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125630 128127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -125633,11 +128130,11 @@
125633 128130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
125634 128131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static float cellMargin(Rtree *pRtree, RtreeCell *p){
125635 128132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float margin = 0.0;
125636 128133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
125637 128134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<(pRtree->nDim*2); ii+=2){
125638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- margin += (DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
128135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ margin += (float)(DCOORD(p->aCoord[ii+1]) - DCOORD(p->aCoord[ii]));
125639 128136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125640 128137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return margin;
125641 128138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125642 128139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125643 128140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -125718,11 +128215,11 @@
125718 128215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125719 128216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( x2<x1 ){
125720 128217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
o = 0.0;
125721 128218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
125722 128219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
125723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- o = o * (x2-x1);
128220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ o = o * (float)(x2-x1);
125724 128221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125725 128222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125726 128223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
overlap += o;
125727 128224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125728 128225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -125737,16 +128234,16 @@
125737 128234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *pInsert,
125738 128235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *aCell,
125739 128236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell,
125740 128237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iExclude
125741 128238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
125742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float before;
125743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float after;
128239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double before;
128240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double after;
125744 128241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
before = cellOverlap(pRtree, p, aCell, nCell, iExclude);
125745 128242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cellUnion(pRtree, p, pInsert);
125746 128243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
after = cellOverlap(pRtree, p, aCell, nCell, iExclude);
125747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return after-before;
128244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (float)(after-before);
125748 128245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
125749 128246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
125750 128247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125751 128248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125752 128249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -125764,15 +128261,15 @@
125764 128261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pNode;
125765 128262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = nodeAcquire(pRtree, 1, 0, &pNode);
125766 128263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125767 128264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; rc==SQLITE_OK && ii<(pRtree->iDepth-iHeight); ii++){
125768 128265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCell;
125769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 iBest;
128266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iBest = 0;
125770 128267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fMinGrowth;
125772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fMinArea;
125773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fMinOverlap;
128268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ float fMinGrowth = 0.0;
128269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ float fMinArea = 0.0;
128270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ float fMinOverlap = 0.0;
125774 128271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125775 128272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell = NCELL(pNode);
125776 128273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell cell;
125777 128274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pChild;
125778 128275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -126198,13 +128695,13 @@
126198 128695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
126199 128696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int **aaSorted;
126200 128697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aSpare;
126201 128698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
126202 128699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iBestDim;
126204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iBestSplit;
126205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fBestMargin;
128700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iBestDim = 0;
128701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iBestSplit = 0;
128702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ float fBestMargin = 0.0;
126206 128703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126207 128704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nByte = (pRtree->nDim+1)*(sizeof(int*)+nCell*sizeof(int));
126208 128705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126209 128706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aaSorted = (int **)sqlite3_malloc(nByte);
126210 128707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !aaSorted ){
@@ -126222,13 +128719,13 @@
126222 128719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SortByDimension(pRtree, aaSorted[ii], nCell, ii, aCell, aSpare);
126223 128720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126224 128721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126225 128722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pRtree->nDim; ii++){
126226 128723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float margin = 0.0;
126227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fBestOverlap;
126228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float fBestArea;
126229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iBestLeft;
128724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ float fBestOverlap = 0.0;
128725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ float fBestArea = 0.0;
128726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iBestLeft = 0;
126230 128727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLeft;
126231 128728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126232 128729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(
126233 128730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nLeft=RTREE_MINCELLS(pRtree);
126234 128731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nLeft<=(nCell-RTREE_MINCELLS(pRtree));
@@ -126539,11 +129036,11 @@
126539 129036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int deleteCell(Rtree *, RtreeNode *, int, int);
126540 129037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126541 129038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
126542 129039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
126543 129040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc2;
126544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RtreeNode *pParent;
129041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeNode *pParent = 0;
126545 129042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCell;
126546 129043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126547 129044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNode->nRef==1 );
126548 129045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126549 129046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Remove the entry in the parent cell. */
@@ -126687,23 +129184,23 @@
126687 129184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
126688 129185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pNode, ii, &aCell[ii]);
126689 129186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126690 129187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aOrder[ii] = ii;
126691 129188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iDim=0; iDim<pRtree->nDim; iDim++){
126692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2]);
126693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aCenterCoord[iDim] += DCOORD(aCell[ii].aCoord[iDim*2+1]);
129189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2]);
129190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCenterCoord[iDim] += (float)DCOORD(aCell[ii].aCoord[iDim*2+1]);
126694 129191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126695 129192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126696 129193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iDim=0; iDim<pRtree->nDim; iDim++){
126697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aCenterCoord[iDim] = aCenterCoord[iDim]/((float)nCell*2.0);
129194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCenterCoord[iDim] = (float)(aCenterCoord[iDim]/((float)nCell*2.0));
126698 129195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126699 129196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126700 129197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nCell; ii++){
126701 129198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aDistance[ii] = 0.0;
126702 129199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iDim=0; iDim<pRtree->nDim; iDim++){
126703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- float coord = DCOORD(aCell[ii].aCoord[iDim*2+1]) -
126704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DCOORD(aCell[ii].aCoord[iDim*2]);
129200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ float coord = (float)(DCOORD(aCell[ii].aCoord[iDim*2+1]) -
129201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DCOORD(aCell[ii].aCoord[iDim*2]));
126705 129202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aDistance[ii] += (coord-aCenterCoord[iDim])*(coord-aCenterCoord[iDim]);
126706 129203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126707 129204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126708 129205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126709 129206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SortByDistance(aOrder, nCell, aDistance, aSpare);
@@ -126798,14 +129295,14 @@
126798 129295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pNode, ii, &cell);
126799 129296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126800 129297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Find a node to store this cell in. pNode->iNode currently contains
126801 129298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the height of the sub-tree headed by the cell.
126802 129299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
126803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = ChooseLeaf(pRtree, &cell, pNode->iNode, &pInsert);
129300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = ChooseLeaf(pRtree, &cell, (int)pNode->iNode, &pInsert);
126804 129301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
126805 129302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc2;
126806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = rtreeInsertCell(pRtree, pInsert, &cell, pNode->iNode);
129303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = rtreeInsertCell(pRtree, pInsert, &cell, (int)pNode->iNode);
126807 129304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc2 = nodeRelease(pRtree, pInsert);
126808 129305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
126809 129306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = rc2;
126810 129307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126811 129308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -127190,11 +129687,11 @@
127190 129687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isCreate /* True for xCreate, false for xConnect */
127191 129688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
127192 129689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
127193 129690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zSql;
127194 129691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isCreate ){
127195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iPageSize;
129692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iPageSize = 0;
127196 129693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSql = sqlite3_mprintf("PRAGMA %Q.page_size", pRtree->zDb);
127197 129694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = getIntFromStmt(db, zSql, &iPageSize);
127198 129695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
127199 129696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRtree->iNodeSize = iPageSize-64;
127200 129697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (4+pRtree->nBytesPerCell*RTREE_MAXCELLS)<pRtree->iNodeSize ){
@@ -127518,10 +130015,11 @@
127518 130015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unicode/utypes.h>
127519 130016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unicode/uregex.h>
127520 130017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unicode/ustring.h>
127521 130018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unicode/ucol.h>
127522 130019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
130020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
127523 130021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
127524 130022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_CORE
127525 130023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_EXTENSION_INIT1
127526 130024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
127527 130025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -127993,19 +130491,20 @@
127993 130491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you find forgiveness for yourself and forgive others.
127994 130492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
127995 130493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
127996 130494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
127997 130495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file implements a tokenizer for fts3 based on the ICU library.
127998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
127999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** $Id: fts3_icu.c,v 1.3 2008/09/01 18:34:20 danielk1977 Exp $
128000 130496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
128001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
128002 130497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
128003 130498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_ICU
128004 130499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
130500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <assert.h> */
130501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <string.h> */
128005 130502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
128006 130503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unicode/ubrk.h>
130504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <unicode/ucol.h> */
130505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include <unicode/ustring.h> */
128007 130506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unicode/utf16.h>
128008 130507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
128009 130508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct IcuTokenizer IcuTokenizer;
128010 130509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct IcuCursor IcuCursor;
128011 130510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
128012 130511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!