@@ -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.2. 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.3. 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 one 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% are 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.
@@ -352,19 +352,25 @@
352 352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_INT_TO_PTR(X) ((void*)(X))
353 353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_PTR_TO_INT(X) ((int)(X))
354 354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
355 355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
356 356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The SQLITE_THREADSAFE macro must be defined as either 0 or 1.
357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2.
358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0 means mutexes are permanently disable and the library is never
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** threadsafe. 1 means the library is serialized which is the highest
360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** level of threadsafety. 2 means the libary is multithreaded - multiple
361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** threads can use SQLite as long as no two threads try to use the same
362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database connection at the same time.
363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
358 364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Older versions of SQLite used an optional THREADSAFE macro.
359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** We support that for legacy
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** We support that for legacy.
360 366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
361 367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_THREADSAFE)
362 368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(THREADSAFE)
363 369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_THREADSAFE THREADSAFE
364 370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SQLITE_THREADSAFE 1
371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_THREADSAFE 1 /* IMP: R-07272-22309 */
366 372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
367 373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
368 374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
369 375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
370 376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The SQLITE_DEFAULT_MEMSTATUS macro must be defined as either 0 or 1.
@@ -642,13 +648,13 @@
642 648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
643 649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_libversion()],
644 650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
645 651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
646 652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION "3.7.2"
648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION_NUMBER 3007002
649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2010-08-23 18:52:01 42537b60566f288167f1b5864a5435986838e3a3"
653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION "3.7.3"
654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION_NUMBER 3007003
655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2010-10-04 23:55:51 ece641eb8951c6314cedbdb3243f91cb199c3239"
650 656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
651 657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
652 658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
653 659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version, sqlite3_sourceid
654 660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -1292,19 +1298,23 @@
1292 1298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** object once the object has been registered.
1293 1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1294 1300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The zName field holds the name of the VFS module. The name must
1295 1301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be unique across all VFS modules.
1296 1302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLite will guarantee that the zFilename parameter to xOpen
1303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite guarantees that the zFilename parameter to xOpen
1298 1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is either a NULL pointer or string obtained
1299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** from xFullPathname(). SQLite further guarantees that
1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from xFullPathname() with an optional suffix added.
1306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If a suffix is added to the zFilename parameter, it will
1307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** consist of a single "-" character followed by no more than
1308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 10 alphanumeric and/or "-" characters.
1309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite further guarantees that
1300 1310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the string will be valid and unchanged until xClose() is
1301 1311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** called. Because of the previous sentence,
1302 1312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the [sqlite3_file] can safely store a pointer to the
1303 1313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** filename if it needs to remember the filename for some reason.
1304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the zFilename parameter is xOpen is a NULL pointer then xOpen
1305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** must invent its own temporary name for the file. Whenever the
1314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the zFilename parameter to xOpen is a NULL pointer then xOpen
1315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** must invent its own temporary name for the file. ^Whenever the
1306 1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xFilename parameter is NULL it will also be the case that the
1307 1317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** flags parameter will include [SQLITE_OPEN_DELETEONCLOSE].
1308 1318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1309 1319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The flags argument to xOpen() includes all bits set in
1310 1320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the flags argument to [sqlite3_open_v2()]. Or if [sqlite3_open()]
@@ -1311,11 +1321,11 @@
1311 1321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or [sqlite3_open16()] is used, then flags includes at least
1312 1322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_OPEN_READWRITE] | [SQLITE_OPEN_CREATE].
1313 1323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If xOpen() opens a file read-only then it sets *pOutFlags to
1314 1324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** include [SQLITE_OPEN_READONLY]. Other bits in *pOutFlags may be set.
1315 1325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLite will also add one of the following flags to the xOpen()
1326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(SQLite will also add one of the following flags to the xOpen()
1317 1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** call, depending on the object being opened:
1318 1328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1319 1329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
1320 1330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_MAIN_DB]
1321 1331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_MAIN_JOURNAL]
@@ -1322,11 +1332,12 @@
1322 1332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_TEMP_DB]
1323 1333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_TEMP_JOURNAL]
1324 1334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_TRANSIENT_DB]
1325 1335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_SUBJOURNAL]
1326 1336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_MASTER_JOURNAL]
1327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** </ul>
1337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [SQLITE_OPEN_WAL]
1338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>)^
1328 1339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1329 1340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The file I/O implementation can use the object type flags to
1330 1341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** change the way it deals with files. For example, an application
1331 1342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that does not care about crash recovery or rollback might make
1332 1343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the open of a journal file a no-op. Writes to this journal would
@@ -1341,39 +1352,40 @@
1341 1352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_DELETEONCLOSE]
1342 1353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [SQLITE_OPEN_EXCLUSIVE]
1343 1354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
1344 1355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1345 1356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The [SQLITE_OPEN_DELETEONCLOSE] flag means the file should be
1346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** deleted when it is closed. The [SQLITE_OPEN_DELETEONCLOSE]
1347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** will be set for TEMP databases, journals and for subjournals.
1357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** deleted when it is closed. ^The [SQLITE_OPEN_DELETEONCLOSE]
1358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be set for TEMP databases and their journals, transient
1359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** databases, and subjournals.
1348 1360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
1361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The [SQLITE_OPEN_EXCLUSIVE] flag is always used in conjunction
1350 1362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with the [SQLITE_OPEN_CREATE] flag, which are both directly
1351 1363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** analogous to the O_EXCL and O_CREAT flags of the POSIX open()
1352 1364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** API. The SQLITE_OPEN_EXCLUSIVE flag, when paired with the
1353 1365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OPEN_CREATE, is used to indicate that file should always
1354 1366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be created, and that it is an error if it already exists.
1355 1367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It is <i>not</i> used to indicate the file should be opened
1356 1368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for exclusive access.
1357 1369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** At least szOsFile bytes of memory are allocated by SQLite
1370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^At least szOsFile bytes of memory are allocated by SQLite
1359 1371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to hold the [sqlite3_file] structure passed as the third
1360 1372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** argument to xOpen. The xOpen method does not have to
1361 1373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** allocate the structure; it should just fill it in. Note that
1362 1374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the xOpen method must set the sqlite3_file.pMethods to either
1363 1375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a valid [sqlite3_io_methods] object or to NULL. xOpen must do
1364 1376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this even if the open fails. SQLite expects that the sqlite3_file.pMethods
1365 1377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** element will be valid after xOpen returns regardless of the success
1366 1378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or failure of the xOpen call.
1367 1379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
1380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The flags argument to xAccess() may be [SQLITE_ACCESS_EXISTS]
1369 1381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to test for the existence of a file, or [SQLITE_ACCESS_READWRITE] to
1370 1382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** test whether a file is readable and writable, or [SQLITE_ACCESS_READ]
1371 1383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to test whether a file is at least readable. The file can be a
1372 1384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** directory.
1373 1385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLite will always allocate at least mxPathname+1 bytes for the
1386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite will always allocate at least mxPathname+1 bytes for the
1375 1387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** output buffer xFullPathname. The exact size of the output buffer
1376 1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is also passed as a parameter to both methods. If the output buffer
1377 1389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not large enough, [SQLITE_CANTOPEN] should be returned. Since this is
1378 1390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** handled as a fatal error by SQLite, vfs implementations should endeavor
1379 1391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to prevent this by setting mxPathname to a sufficiently large value.
@@ -1383,14 +1395,14 @@
1383 1395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** included in the VFS structure for completeness.
1384 1396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The xRandomness() function attempts to return nBytes bytes
1385 1397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of good-quality randomness into zOut. The return value is
1386 1398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the actual number of bytes of randomness obtained.
1387 1399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The xSleep() method causes the calling thread to sleep for at
1388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** least the number of microseconds given. The xCurrentTime()
1400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** least the number of microseconds given. ^The xCurrentTime()
1389 1401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** method returns a Julian Day Number for the current date and time as
1390 1402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a floating point value.
1391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The xCurrentTimeInt64() method returns, as an integer, the Julian
1403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The xCurrentTimeInt64() method returns, as an integer, the Julian
1392 1404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Day Number multipled by 86400000 (the number of milliseconds in
1393 1405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a 24-hour day).
1394 1406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^SQLite will use the xCurrentTimeInt64() method to get the current
1395 1407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** date and time if that method is available (if iVersion is 2 or
1396 1408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** greater and the function pointer is not NULL) and will fall back
@@ -1783,11 +1795,11 @@
1783 1795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** statistics. ^(When memory allocation statistics are disabled, the
1784 1796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** following SQLite interfaces become non-operational:
1785 1797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
1786 1798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [sqlite3_memory_used()]
1787 1799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [sqlite3_memory_highwater()]
1788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <li> [sqlite3_soft_heap_limit()]
1800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [sqlite3_soft_heap_limit64()]
1789 1801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [sqlite3_status()]
1790 1802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>)^
1791 1803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Memory allocation statistics are enabled by default unless SQLite is
1792 1804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compiled with [SQLITE_DEFAULT_MEMSTATUS]=0 in which case memory
1793 1805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** allocation statistics are disabled by default.
@@ -1797,19 +1809,18 @@
1797 1809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd> ^This option specifies a static memory buffer that SQLite can use for
1798 1810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** scratch memory. There are three arguments: A pointer an 8-byte
1799 1811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** aligned memory buffer from which the scrach allocations will be
1800 1812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** drawn, the size of each scratch allocation (sz),
1801 1813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and the maximum number of scratch allocations (N). The sz
1802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argument must be a multiple of 16. The sz parameter should be a few bytes
1803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** larger than the actual scratch space required due to internal overhead.
1814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument must be a multiple of 16.
1804 1815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The first argument must be a pointer to an 8-byte aligned buffer
1805 1816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of at least sz*N bytes of memory.
1806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^SQLite will use no more than one scratch buffer per thread. So
1807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** N should be set to the expected maximum number of threads. ^SQLite will
1808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** never require a scratch buffer that is more than 6 times the database
1809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** page size. ^If SQLite needs needs additional scratch memory beyond
1810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** what is provided by this configuration option, then
1817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite will use no more than two scratch buffers per thread. So
1818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** N should be set to twice the expected maximum number of threads.
1819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite will never require a scratch buffer that is more than 6
1820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** times the database page size. ^If SQLite needs needs additional
1821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** scratch memory beyond what is provided by this configuration option, then
1811 1822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_malloc()] will be used to obtain the memory needed.</dd>
1812 1823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1813 1824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dt>SQLITE_CONFIG_PAGECACHE</dt>
1814 1825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd> ^This option specifies a static memory buffer that SQLite can use for
1815 1826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the database page cache with the default page cache implemenation.
@@ -1825,12 +1836,11 @@
1825 1836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** argument should point to an allocation of at least sz*N bytes of memory.
1826 1837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^SQLite will use the memory provided by the first argument to satisfy its
1827 1838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** memory needs for the first N pages that it adds to cache. ^If additional
1828 1839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** page cache memory is needed beyond what is provided by this option, then
1829 1840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite goes to [sqlite3_malloc()] for the additional storage space.
1830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The implementation might use one or more of the N buffers to hold
1831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** memory accounting information. The pointer in the first argument must
1841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The pointer in the first argument must
1832 1842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be aligned to an 8-byte boundary or subsequent behavior of SQLite
1833 1843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will be undefined.</dd>
1834 1844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1835 1845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dt>SQLITE_CONFIG_HEAP</dt>
1836 1846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd> ^This option specifies a static memory buffer that SQLite will use
@@ -1955,12 +1965,18 @@
1955 1965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** size of each lookaside buffer slot. ^The third argument is the number of
1956 1966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** slots. The size of the buffer in the first argument must be greater than
1957 1967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or equal to the product of the second and third arguments. The buffer
1958 1968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** must be aligned to an 8-byte boundary. ^If the second argument to
1959 1969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
1960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** rounded down to the next smaller
1961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** multiple of 8. See also: [SQLITE_CONFIG_LOOKASIDE]</dd>
1970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rounded down to the next smaller multiple of 8. ^(The lookaside memory
1971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configuration for a database connection can only be changed when that
1972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** connection is not currently using lookaside memory, or in other words
1973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** when the "current value" returned by
1974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
1975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Any attempt to change the lookaside memory configuration when lookaside
1976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** memory is in use leaves the configuration unchanged and returns
1977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [SQLITE_BUSY].)^</dd>
1962 1978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1963 1979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dl>
1964 1980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1965 1981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_DBCONFIG_LOOKASIDE 1001 /* void* int int */
1966 1982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -2260,10 +2276,13 @@
2260 2276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2261 2277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
2262 2278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2263 2279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2264 2280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Convenience Routines For Running Queries
2281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is a legacy interface that is preserved for backwards compatibility.
2283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use of this interface is not recommended.
2265 2284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2266 2285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Definition: A <b>result table</b> is memory data structure created by the
2267 2286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_get_table()] interface. A result table records the
2268 2287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** complete query results from one or more queries.
2269 2288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -2281,11 +2300,11 @@
2281 2300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2282 2301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A result table might consist of one or more memory allocations.
2283 2302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It is not safe to pass a result table directly to [sqlite3_free()].
2284 2303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A result table should be deallocated using [sqlite3_free_table()].
2285 2304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** As an example of the result table format, suppose a query result
2305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(As an example of the result table format, suppose a query result
2287 2306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is as follows:
2288 2307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2289 2308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <blockquote><pre>
2290 2309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Name | Age
2291 2310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** -----------------------
@@ -2305,31 +2324,31 @@
2305 2324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** azResult[3] = "43";
2306 2325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** azResult[4] = "Bob";
2307 2326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** azResult[5] = "28";
2308 2327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** azResult[6] = "Cindy";
2309 2328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** azResult[7] = "21";
2310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** </pre></blockquote>
2329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </pre></blockquote>)^
2311 2330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2312 2331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_get_table() function evaluates one or more
2313 2332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** semicolon-separated SQL statements in the zero-terminated UTF-8
2314 2333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** string of its 2nd parameter and returns a result table to the
2315 2334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointer given in its 3rd parameter.
2316 2335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2317 2336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** After the application has finished with the result from sqlite3_get_table(),
2318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it should pass the result table pointer to sqlite3_free_table() in order to
2337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it must pass the result table pointer to sqlite3_free_table() in order to
2319 2338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** release the memory that was malloced. Because of the way the
2320 2339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_malloc()] happens within sqlite3_get_table(), the calling
2321 2340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function must not try to call [sqlite3_free()] directly. Only
2322 2341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_free_table()] is able to release the memory properly and safely.
2323 2342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(The sqlite3_get_table() interface is implemented as a wrapper around
2343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite3_get_table() interface is implemented as a wrapper around
2325 2344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_exec()]. The sqlite3_get_table() routine does not have access
2326 2345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to any internal data structures of SQLite. It uses only the public
2327 2346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface defined here. As a consequence, errors that occur in the
2328 2347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** wrapper layer outside of the internal [sqlite3_exec()] call are not
2329 2348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reflected in subsequent calls to [sqlite3_errcode()] or
2330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_errmsg()].)^
2349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_errmsg()].
2331 2350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2332 2351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_get_table(
2333 2352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db, /* An open database */
2334 2353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zSql, /* SQL to be evaluated */
2335 2354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char ***pazResult, /* Results of the query */
@@ -2477,11 +2496,13 @@
2477 2496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by sqlite3_realloc() and the prior allocation is freed.
2478 2497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If sqlite3_realloc() returns NULL, then the prior allocation
2479 2498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not freed.
2480 2499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2481 2500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
2482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is always aligned to at least an 8 byte boundary.
2501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is always aligned to at least an 8 byte boundary, or to a
2502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
2503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** option is used.
2483 2504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2484 2505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In SQLite version 3.5.0 and 3.5.1, it was possible to define
2485 2506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the SQLITE_OMIT_MEMORY_ALLOCATION which would cause the built-in
2486 2507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation of these routines to be omitted. That capability
2487 2508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is no longer provided. Only built-in memory allocators can be used.
@@ -2735,21 +2756,32 @@
2735 2756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void(*xProfile)(void*,const char*,sqlite3_uint64), void*);
2736 2757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2737 2758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2738 2759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Query Progress Callbacks
2739 2760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^This routine configures a callback function - the
2741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** progress callback - that is invoked periodically during long
2742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** running calls to [sqlite3_exec()], [sqlite3_step()] and
2743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_get_table()]. An example use for this
2761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_progress_handler(D,N,X,P) interface causes the callback
2762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function X to be invoked periodically during long running calls to
2763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_exec()], [sqlite3_step()] and [sqlite3_get_table()] for
2764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database connection D. An example use for this
2744 2765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface is to keep a GUI updated during a large query.
2766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The parameter P is passed through as the only parameter to the
2768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** callback function X. ^The parameter N is the number of
2769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [virtual machine instructions] that are evaluated between successive
2770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** invocations of the callback X.
2771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Only a single progress handler may be defined at one time per
2773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [database connection]; setting a new progress handler cancels the
2774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** old one. ^Setting parameter X to NULL disables the progress handler.
2775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The progress handler is also disabled by setting N to a value less
2776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than 1.
2745 2777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2746 2778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the progress callback returns non-zero, the operation is
2747 2779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interrupted. This feature can be used to implement a
2748 2780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "Cancel" button on a GUI progress dialog box.
2749 2781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The progress handler must not do anything that will modify
2782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The progress handler callback must not do anything that will modify
2751 2783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the database connection that invoked the progress handler.
2752 2784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Note that [sqlite3_prepare_v2()] and [sqlite3_step()] both modify their
2753 2785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database connections for the meaning of "modify" in this paragraph.
2754 2786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2755 2787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -2804,11 +2836,11 @@
2804 2836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dl>
2805 2837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2806 2838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the 3rd parameter to sqlite3_open_v2() is not one of the
2807 2839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** combinations shown above or one of the combinations shown above combined
2808 2840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with the [SQLITE_OPEN_NOMUTEX], [SQLITE_OPEN_FULLMUTEX],
2809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [SQLITE_OPEN_SHAREDCACHE] and/or [SQLITE_OPEN_SHAREDCACHE] flags,
2841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [SQLITE_OPEN_SHAREDCACHE] and/or [SQLITE_OPEN_PRIVATECACHE] flags,
2810 2842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then the behavior is undefined.
2811 2843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2812 2844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the [SQLITE_OPEN_NOMUTEX] flag is set, then the database connection
2813 2845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opens in the multi-thread [threading mode] as long as the single-thread
2814 2846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mode has not been set at compile-time or start-time. ^If the
@@ -2929,21 +2961,26 @@
2929 2961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(This interface allows the size of various constructs to be limited
2930 2962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on a connection by connection basis. The first parameter is the
2931 2963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [database connection] whose limit is to be set or queried. The
2932 2964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** second parameter is one of the [limit categories] that define a
2933 2965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** class of constructs to be size limited. The third parameter is the
2934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** new limit for that construct. The function returns the old limit.)^
2966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** new limit for that construct.)^
2935 2967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2936 2968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the new limit is a negative number, the limit is unchanged.
2937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(For the limit category of SQLITE_LIMIT_XYZ there is a
2969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(For each limit category SQLITE_LIMIT_<i>NAME</i> there is a
2938 2970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [limits | hard upper bound]
2939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** set by a compile-time C preprocessor macro named
2940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [limits | SQLITE_MAX_XYZ].
2971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set at compile-time by a C preprocessor macro called
2972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [limits | SQLITE_MAX_<i>NAME</i>].
2941 2973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (The "_LIMIT_" in the name is changed to "_MAX_".))^
2942 2974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Attempts to increase a limit above its hard upper bound are
2943 2975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** silently truncated to the hard upper bound.
2944 2976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Regardless of whether or not the limit was changed, the
2978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_limit()] interface returns the prior value of the limit.
2979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Hence, to find the current value of a limit without changing it,
2980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** simply invoke this interface with the third parameter set to -1.
2981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2945 2982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Run-time limits are intended for use in applications that manage
2946 2983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** both their own internal database and also databases that are controlled
2947 2984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by untrusted external sources. An example application might be a
2948 2985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** web browser that has its own databases for storing history and
2949 2986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** separate databases controlled by JavaScript applications downloaded
@@ -2968,11 +3005,11 @@
2968 3005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The synopsis of the meanings of the various limits is shown below.
2969 3006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Additional information is available at [limits | Limits in SQLite].
2970 3007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2971 3008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dl>
2972 3009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_LENGTH</dt>
2973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <dd>The maximum size of any string or BLOB or table row.<dd>)^
3010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <dd>The maximum size of any string or BLOB or table row, in bytes.<dd>)^
2974 3011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2975 3012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_SQL_LENGTH</dt>
2976 3013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>The maximum length of an SQL statement, in bytes.</dd>)^
2977 3014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2978 3015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_COLUMN</dt>
@@ -2986,11 +3023,13 @@
2986 3023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_COMPOUND_SELECT</dt>
2987 3024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>The maximum number of terms in a compound SELECT statement.</dd>)^
2988 3025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2989 3026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_VDBE_OP</dt>
2990 3027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>The maximum number of instructions in a virtual machine program
2991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** used to implement an SQL statement.</dd>)^
3028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used to implement an SQL statement. This limit is not currently
3029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** enforced, though that might be added in some future release of
3030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite.</dd>)^
2992 3031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2993 3032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_FUNCTION_ARG</dt>
2994 3033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>The maximum number of arguments on a function.</dd>)^
2995 3034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2996 3035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_ATTACHED</dt>
@@ -2999,12 +3038,11 @@
2999 3038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_LIKE_PATTERN_LENGTH</dt>
3000 3039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>The maximum length of the pattern argument to the [LIKE] or
3001 3040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [GLOB] operators.</dd>)^
3002 3041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3003 3042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_VARIABLE_NUMBER</dt>
3004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <dd>The maximum number of variables in an SQL statement that can
3005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be bound.</dd>)^
3043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <dd>The maximum index number of any [parameter] in an SQL statement.)^
3006 3044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3007 3045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
3008 3046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>The maximum depth of recursion for triggers.</dd>)^
3009 3047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dl>
3010 3048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -3072,16 +3110,11 @@
3072 3110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3073 3111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ol>
3074 3112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>
3075 3113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the database schema changes, instead of returning [SQLITE_SCHEMA] as it
3076 3114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** always used to do, [sqlite3_step()] will automatically recompile the SQL
3077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** statement and try to run it again. ^If the schema has changed in
3078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a way that makes the statement no longer valid, [sqlite3_step()] will still
3079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** return [SQLITE_SCHEMA]. But unlike the legacy behavior, [SQLITE_SCHEMA] is
3080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** now a fatal error. Calling [sqlite3_prepare_v2()] again will not make the
3081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** error go away. Note: use [sqlite3_errmsg()] to find the text
3082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the parsing error that results in an [SQLITE_SCHEMA] return.
3115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statement and try to run it again.
3083 3116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </li>
3084 3117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3085 3118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>
3086 3119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^When an error occurs, [sqlite3_step()] will return one of the detailed
3087 3120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [error codes] or [extended error codes]. ^The legacy behavior was that
@@ -3090,15 +3123,20 @@
3090 3123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in order to find the underlying cause of the problem. With the "v2" prepare
3091 3124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interfaces, the underlying reason for the error is returned immediately.
3092 3125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </li>
3093 3126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3094 3127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>
3095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^If the value of a [parameter | host parameter] in the WHERE clause might
3096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** change the query plan for a statement, then the statement may be
3097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** automatically recompiled (as if there had been a schema change) on the first
3098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_step()] call following any change to the
3099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_bind_text | bindings] of the [parameter].
3128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the specific value bound to [parameter | host parameter] in the
3129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WHERE clause might influence the choice of query plan for a statement,
3130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the statement will be automatically recompiled, as if there had been
3131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a schema change, on the first [sqlite3_step()] call following any change
3132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the [sqlite3_bind_text | bindings] of that [parameter].
3133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The specific value of WHERE-clause [parameter] might influence the
3134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** choice of query plan if the parameter is the left-hand side of a [LIKE]
3135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or [GLOB] operator or if the parameter is compared to an indexed column
3136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the [SQLITE_ENABLE_STAT2] compile-time option is enabled.
3137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the
3100 3138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </li>
3101 3139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ol>
3102 3140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
3103 3141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_prepare(
3104 3142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db, /* Database handle */
@@ -3161,11 +3199,11 @@
3161 3199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or if SQLite is run in one of reduced mutex modes
3162 3200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_CONFIG_SINGLETHREAD] or [SQLITE_CONFIG_MULTITHREAD]
3163 3201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then there is no distinction between protected and unprotected
3164 3202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_value objects and they can be used interchangeably. However,
3165 3203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for maximum code portability it is recommended that applications
3166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** still make the distinction between between protected and unprotected
3204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** still make the distinction between protected and unprotected
3167 3205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_value objects even when not strictly required.
3168 3206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3169 3207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_value objects that are passed as parameters into the
3170 3208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation of [application-defined SQL functions] are protected.
3171 3209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_value object returned by
@@ -3356,10 +3394,12 @@
3356 3394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Number Of Columns In A Result Set
3357 3395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3358 3396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Return the number of columns in the result set returned by the
3359 3397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [prepared statement]. ^This routine returns 0 if pStmt is an SQL
3360 3398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** statement that does not return data (for example an [UPDATE]).
3399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: [sqlite3_data_count()]
3361 3401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
3362 3402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_column_count(sqlite3_stmt *pStmt);
3363 3403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3364 3404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3365 3405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Column Names In A Result Set
@@ -3546,12 +3586,18 @@
3546 3586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_step(sqlite3_stmt*);
3547 3587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3548 3588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3549 3589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Number of columns in a result set
3550 3590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The sqlite3_data_count(P) the number of columns in the
3552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the result set of [prepared statement] P.
3591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_data_count(P) interface returns the number of columns in the
3592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** current row of the result set of [prepared statement] P.
3593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If prepared statement P does not have results ready to return
3594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (via calls to the [sqlite3_column_int | sqlite3_column_*()] of
3595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** interfaces) then sqlite3_data_count(P) returns 0.
3596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_data_count(P) routine also returns 0 if P is a NULL pointer.
3597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: [sqlite3_column_count()]
3553 3599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
3554 3600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_data_count(sqlite3_stmt *pStmt);
3555 3601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3556 3602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3557 3603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Fundamental Datatypes
@@ -3627,22 +3673,30 @@
3627 3673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the result is a UTF-16 string, then sqlite3_column_bytes() converts
3628 3674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the string to UTF-8 and then returns the number of bytes.
3629 3675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the result is a numeric value then sqlite3_column_bytes() uses
3630 3676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_snprintf()] to convert that value to a UTF-8 string and returns
3631 3677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the number of bytes in that string.
3632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The value returned does not include the zero terminator at the end
3633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the string. ^For clarity: the value returned is the number of
3678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the result is NULL, then sqlite3_column_bytes() returns zero.
3679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the result is a BLOB or UTF-16 string then the sqlite3_column_bytes16()
3681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine returns the number of bytes in that BLOB or string.
3682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the result is a UTF-8 string, then sqlite3_column_bytes16() converts
3683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the string to UTF-16 and then returns the number of bytes.
3684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the result is a numeric value then sqlite3_column_bytes16() uses
3685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_snprintf()] to convert that value to a UTF-16 string and returns
3686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the number of bytes in that string.
3687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the result is NULL, then sqlite3_column_bytes16() returns zero.
3688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The values returned by [sqlite3_column_bytes()] and
3690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_column_bytes16()] do not include the zero terminators at the end
3691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the string. ^For clarity: the values returned by
3692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_column_bytes()] and [sqlite3_column_bytes16()] are the number of
3634 3693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bytes in the string, not the number of characters.
3635 3694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3636 3695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Strings returned by sqlite3_column_text() and sqlite3_column_text16(),
3637 3696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** even empty strings, are always zero terminated. ^The return
3638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value from sqlite3_column_blob() for a zero-length BLOB is an arbitrary
3639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pointer, possibly even a NULL pointer.
3640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
3641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The sqlite3_column_bytes16() routine is similar to sqlite3_column_bytes()
3642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** but leaves the result in UTF-16 in native byte order instead of UTF-8.
3643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The zero terminator is not included in this count.
3697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value from sqlite3_column_blob() for a zero-length BLOB is a NULL pointer.
3644 3698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3645 3699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The object returned by [sqlite3_column_value()] is an
3646 3700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [unprotected sqlite3_value] object. An unprotected sqlite3_value object
3647 3701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** may only be used with [sqlite3_bind_value()] and [sqlite3_result_value()].
3648 3702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the [unprotected sqlite3_value] object returned by
@@ -3683,14 +3737,14 @@
3683 3737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and atof(). SQLite does not really use these functions. It has its
3684 3738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** own equivalent internal routines. The atoi() and atof() names are
3685 3739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** used in the table for brevity and because they are familiar to most
3686 3740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** C programmers.
3687 3741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Note that when type conversions occur, pointers returned by prior
3742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Note that when type conversions occur, pointers returned by prior
3689 3743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** calls to sqlite3_column_blob(), sqlite3_column_text(), and/or
3690 3744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_text16() may be invalidated.
3691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(Type conversions and pointer invalidations might occur
3745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Type conversions and pointer invalidations might occur
3692 3746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the following cases:
3693 3747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3694 3748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
3695 3749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> The initial content is a BLOB and sqlite3_column_text() or
3696 3750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_text16() is called. A zero-terminator might
@@ -3699,26 +3753,26 @@
3699 3753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_text16() is called. The content must be converted
3700 3754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to UTF-16.</li>
3701 3755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> The initial content is UTF-16 text and sqlite3_column_bytes() or
3702 3756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_text() is called. The content must be converted
3703 3757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to UTF-8.</li>
3704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** </ul>)^
3758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>
3705 3759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3706 3760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Conversions between UTF-16be and UTF-16le are always done in place and do
3707 3761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not invalidate a prior pointer, though of course the content of the buffer
3708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that the prior pointer points to will have been modified. Other kinds
3762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that the prior pointer references will have been modified. Other kinds
3709 3763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of conversion are done in place when it is possible, but sometimes they
3710 3764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are not possible and in those cases prior pointers are invalidated.
3711 3765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(The safest and easiest to remember policy is to invoke these routines
3766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The safest and easiest to remember policy is to invoke these routines
3713 3767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in one of the following ways:
3714 3768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3715 3769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
3716 3770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>sqlite3_column_text() followed by sqlite3_column_bytes()</li>
3717 3771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>sqlite3_column_blob() followed by sqlite3_column_bytes()</li>
3718 3772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>sqlite3_column_text16() followed by sqlite3_column_bytes16()</li>
3719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** </ul>)^
3773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>
3720 3774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3721 3775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In other words, you should call sqlite3_column_text(),
3722 3776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_blob(), or sqlite3_column_text16() first to force the result
3723 3777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into the desired format, then invoke sqlite3_column_bytes() or
3724 3778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_bytes16() to find the size of the result. Do not mix calls
@@ -3752,21 +3806,30 @@
3752 3806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3753 3807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3754 3808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Destroy A Prepared Statement Object
3755 3809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3756 3810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_finalize() function is called to delete a [prepared statement].
3757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^If the statement was executed successfully or not executed at all, then
3758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_OK is returned. ^If execution of the statement failed then an
3759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [error code] or [extended error code] is returned.
3811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the most recent evaluation of the statement encountered no errors or
3812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or if the statement is never been evaluated, then sqlite3_finalize() returns
3813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_OK. ^If the most recent evaluation of statement S failed, then
3814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_finalize(S) returns the appropriate [error code] or
3815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [extended error code].
3760 3816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^This routine can be called at any point during the execution of the
3762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [prepared statement]. ^If the virtual machine has not
3763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** completed execution when this routine is called, that is like
3764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** encountering an error or an [sqlite3_interrupt | interrupt].
3765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Incomplete updates may be rolled back and transactions canceled,
3766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** depending on the circumstances, and the
3767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [error code] returned will be [SQLITE_ABORT].
3817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_finalize(S) routine can be called at any point during
3818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the life cycle of [prepared statement] S:
3819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** before statement S is ever evaluated, after
3820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** one or more calls to [sqlite3_reset()], or after any call
3821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to [sqlite3_step()] regardless of whether or not the statement has
3822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** completed execution.
3823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Invoking sqlite3_finalize() on a NULL pointer is a harmless no-op.
3825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The application must finalize every [prepared statement] in order to avoid
3827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** resource leaks. It is a grievous error for the application to try to use
3828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a prepared statement after it has been finalized. Any use of a prepared
3829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statement after it has been finalized can result in undefined and
3830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** undesirable behavior such as segfaults and heap corruption.
3768 3831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
3769 3832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt);
3770 3833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3771 3834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3772 3835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Reset A Prepared Statement Object
@@ -3798,40 +3861,42 @@
3798 3861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Create Or Redefine SQL Functions
3799 3862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: {function creation routines}
3800 3863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: {application-defined SQL function}
3801 3864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: {application-defined SQL functions}
3802 3865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^These two functions (collectively known as "function creation routines")
3866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^These functions (collectively known as "function creation routines")
3804 3867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are used to add SQL functions or aggregates or to redefine the behavior
3805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of existing SQL functions or aggregates. The only difference between the
3806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** two is that the second parameter, the name of the (scalar) function or
3807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** aggregate, is encoded in UTF-8 for sqlite3_create_function() and UTF-16
3808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for sqlite3_create_function16().
3868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of existing SQL functions or aggregates. The only differences between
3869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** these routines are the text encoding expected for
3870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the the second parameter (the name of the function being created)
3871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the presence or absence of a destructor callback for
3872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the application data pointer.
3809 3873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3810 3874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The first parameter is the [database connection] to which the SQL
3811 3875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function is to be added. ^If an application uses more than one database
3812 3876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** connection then application-defined SQL functions must be added
3813 3877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to each database connection separately.
3814 3878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The second parameter is the name of the SQL function to be created or
3816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** redefined. ^The length of the name is limited to 255 bytes, exclusive of
3817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the zero-terminator. Note that the name length limit is in bytes, not
3818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** characters. ^Any attempt to create a function with a longer name
3819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** will result in [SQLITE_ERROR] being returned.
3879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The second parameter is the name of the SQL function to be created or
3880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** redefined. ^The length of the name is limited to 255 bytes in a UTF-8
3881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** representation, exclusive of the zero-terminator. ^Note that the name
3882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** length limit is in UTF-8 bytes, not characters nor UTF-16 bytes.
3883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Any attempt to create a function with a longer name
3884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will result in [SQLITE_MISUSE] being returned.
3820 3885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3821 3886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The third parameter (nArg)
3822 3887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is the number of arguments that the SQL function or
3823 3888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** aggregate takes. ^If this parameter is -1, then the SQL function or
3824 3889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** aggregate may take any number of arguments between 0 and the limit
3825 3890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** set by [sqlite3_limit]([SQLITE_LIMIT_FUNCTION_ARG]). If the third
3826 3891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parameter is less than -1 or greater than 127 then the behavior is
3827 3892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** undefined.
3828 3893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The fourth parameter, eTextRep, specifies what
3894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The fourth parameter, eTextRep, specifies what
3830 3895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_UTF8 | text encoding] this SQL function prefers for
3831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** its parameters. Any SQL function implementation should be able to work
3832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** work with UTF-8, UTF-16le, or UTF-16be. But some implementations may be
3896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** its parameters. Every SQL function implementation must be able to work
3897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with UTF-8, UTF-16le, or UTF-16be. But some implementations may be
3833 3898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** more efficient with one encoding than another. ^An application may
3834 3899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** invoke sqlite3_create_function() or sqlite3_create_function16() multiple
3835 3900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** times with the same function but with different values of eTextRep.
3836 3901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^When multiple implementations of the same function are available, SQLite
3837 3902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will pick the one that involves the least amount of data conversion.
@@ -3839,17 +3904,25 @@
3839 3904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** encoding is used, then the fourth argument should be [SQLITE_ANY].
3840 3905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3841 3906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(The fifth parameter is an arbitrary pointer. The implementation of the
3842 3907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function can gain access to this pointer using [sqlite3_user_data()].)^
3843 3908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are
3909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The seventh, eighth and ninth parameters, xFunc, xStep and xFinal, are
3845 3910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointers to C-language functions that implement the SQL function or
3846 3911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** aggregate. ^A scalar SQL function requires an implementation of the xFunc
3847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** callback only; NULL pointers should be passed as the xStep and xFinal
3912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** callback only; NULL pointers must be passed as the xStep and xFinal
3848 3913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parameters. ^An aggregate SQL function requires an implementation of xStep
3849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and xFinal and NULL should be passed for xFunc. ^To delete an existing
3850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQL function or aggregate, pass NULL for all three function callbacks.
3914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and xFinal and NULL pointer must be passed for xFunc. ^To delete an existing
3915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQL function or aggregate, pass NULL poiners for all three function
3916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** callbacks.
3917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
3918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the tenth parameter to sqlite3_create_function_v2() is not NULL,
3919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then it is invoked when the function is deleted, either by being
3920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** overloaded or when the database connection closes.
3921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^When the destructure callback of the tenth parameter is invoked, it
3922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is passed a single argument which is a copy of the pointer which was
3923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the fifth parameter to sqlite3_create_function_v2().
3851 3924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3852 3925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^It is permitted to register multiple implementations of the same
3853 3926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** functions with the same name but with either differing numbers of
3854 3927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** arguments or differing preferred text encodings. ^SQLite will use
3855 3928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the implementation that most closely matches the way in which the
@@ -3861,15 +3934,10 @@
3861 3934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^A function where the encoding difference is between UTF16le and UTF16be
3862 3935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is a closer match than a function where the encoding difference is
3863 3936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** between UTF8 and UTF16.
3864 3937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3865 3938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Built-in functions may be overloaded by new application-defined functions.
3866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The first application-defined function with a given name overrides all
3867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** built-in functions in the same [database connection] with the same name.
3868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Subsequent application-defined functions of the same name only override
3869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** prior application-defined functions that are an exact match for the
3870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** number of parameters and preferred encoding.
3871 3939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
3872 3940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^An application-defined function is permitted to call other
3873 3941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLite interfaces. However, such calls must not
3874 3942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** close the database connection nor finalize or reset the prepared
3875 3943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** statement in which the function is running.
@@ -3891,10 +3959,21 @@
3891 3959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eTextRep,
3892 3960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pApp,
3893 3961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
3894 3962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xStep)(sqlite3_context*,int,sqlite3_value**),
3895 3963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xFinal)(sqlite3_context*)
3964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
3965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_create_function_v2(
3966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db,
3967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zFunctionName,
3968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nArg,
3969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eTextRep,
3970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pApp,
3971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value**),
3972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xStep)(sqlite3_context*,int,sqlite3_value**),
3973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xFinal)(sqlite3_context*),
3974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void(*xDestroy)(void*)
3896 3975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
3897 3976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
3898 3977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
3899 3978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Text Encodings
3900 3979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -4238,73 +4317,97 @@
4238 4317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_zeroblob(sqlite3_context*, int n);
4239 4318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4240 4319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4241 4320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Define New Collating Sequences
4242 4321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** These functions are used to add new collation sequences to the
4244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [database connection] specified as the first argument.
4322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^These functions add, remove, or modify a [collation] associated
4323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with the [database connection] specified as the first argument.
4245 4324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The name of the new collation sequence is specified as a UTF-8 string
4325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The name of the collation is a UTF-8 string
4247 4326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for sqlite3_create_collation() and sqlite3_create_collation_v2()
4248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and a UTF-16 string for sqlite3_create_collation16(). ^In all cases
4249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the name is passed as the second function argument.
4250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The third argument may be one of the constants [SQLITE_UTF8],
4252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [SQLITE_UTF16LE], or [SQLITE_UTF16BE], indicating that the user-supplied
4253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** routine expects to be passed pointers to strings encoded using UTF-8,
4254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** UTF-16 little-endian, or UTF-16 big-endian, respectively. ^The
4255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** third argument might also be [SQLITE_UTF16] to indicate that the routine
4256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** expects pointers to be UTF-16 strings in the native byte order, or the
4257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argument can be [SQLITE_UTF16_ALIGNED] if the
4258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the routine expects pointers to 16-bit word aligned strings
4259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of UTF-16 in the native byte order.
4260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A pointer to the user supplied routine must be passed as the fifth
4262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argument. ^If it is NULL, this is the same as deleting the collation
4263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sequence (so that SQLite cannot call it any more).
4264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Each time the application supplied function is invoked, it is passed
4265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** as its first parameter a copy of the void* passed as the fourth argument
4266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to sqlite3_create_collation() or sqlite3_create_collation16().
4267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The remaining arguments to the application-supplied routine are two strings,
4269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** each represented by a (length, data) pair and encoded in the encoding
4270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that was passed as the third argument when the collation sequence was
4271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** registered. The application defined collation routine should
4272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** return negative, zero or positive if the first string is less than,
4273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** equal to, or greater than the second string. i.e. (STRING1 - STRING2).
4327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and a UTF-16 string in native byte order for sqlite3_create_collation16().
4328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Collation names that compare equal according to [sqlite3_strnicmp()] are
4329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** considered to be the same name.
4330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(The third argument (eTextRep) must be one of the constants:
4332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <ul>
4333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [SQLITE_UTF8],
4334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [SQLITE_UTF16LE],
4335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [SQLITE_UTF16BE],
4336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [SQLITE_UTF16], or
4337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> [SQLITE_UTF16_ALIGNED].
4338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>)^
4339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The eTextRep argument determines the encoding of strings passed
4340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the collating function callback, xCallback.
4341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The [SQLITE_UTF16] and [SQLITE_UTF16_ALIGNED] values for eTextRep
4342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** force strings to be UTF16 with native byte order.
4343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The [SQLITE_UTF16_ALIGNED] value for eTextRep forces strings to begin
4344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on an even byte address.
4345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The fourth argument, pArg, is a application data pointer that is passed
4347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** through as the first argument to the collating function callback.
4348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The fifth argument, xCallback, is a pointer to the collating function.
4350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Multiple collating functions can be registered using the same name but
4351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with different eTextRep parameters and SQLite will use whichever
4352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function requires the least amount of data transformation.
4353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the xCallback argument is NULL then the collating function is
4354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** deleted. ^When all collating functions having the same name are deleted,
4355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that collation is no longer usable.
4356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The collating function callback is invoked with a copy of the pArg
4358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** application data pointer and with two strings in the encoding specified
4359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the eTextRep argument. The collating function must return an
4360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** integer that is negative, zero, or positive
4361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the first string is less than, equal to, or greater than the second,
4362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** respectively. A collating function must alway return the same answer
4363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** given the same inputs. If two or more collating functions are registered
4364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the same collation name (using different eTextRep values) then all
4365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** must give an equivalent answer when invoked with equivalent strings.
4366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The collating function must obey the following properties for all
4367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** strings A, B, and C:
4368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <ol>
4370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> If A==B then B==A.
4371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> If A==B and B==C then A==C.
4372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> If A<B THEN B>A.
4373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> If A<B and B<C then A<C.
4374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ol>
4375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If a collating function fails any of the above constraints and that
4377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** collating function is registered and used, then the behavior of SQLite
4378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is undefined.
4274 4379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4275 4380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_create_collation_v2() works like sqlite3_create_collation()
4276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** except that it takes an extra argument which is a destructor for
4277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the collation. ^The destructor is called when the collation is
4278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** destroyed and is passed a copy of the fourth parameter void* pointer
4279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the sqlite3_create_collation_v2().
4280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Collations are destroyed when they are overridden by later calls to the
4281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** collation creation functions or when the [database connection] is closed
4282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** using [sqlite3_close()].
4381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with the addition that the xDestroy callback is invoked on pArg when
4382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the collating function is deleted.
4383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Collating functions are deleted when they are overridden by later
4384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** calls to the collation creation functions or when the
4385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [database connection] is closed using [sqlite3_close()].
4283 4386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4284 4387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_collation_needed()] and [sqlite3_collation_needed16()].
4285 4388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4286 4389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_create_collation(
4287 4390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3*,
4288 4391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName,
4289 4392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eTextRep,
4290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void*,
4393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pArg,
4291 4394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int(*xCompare)(void*,int,const void*,int,const void*)
4292 4395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
4293 4396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_create_collation_v2(
4294 4397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3*,
4295 4398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName,
4296 4399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eTextRep,
4297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void*,
4400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pArg,
4298 4401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int(*xCompare)(void*,int,const void*,int,const void*),
4299 4402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void(*xDestroy)(void*)
4300 4403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
4301 4404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_create_collation16(
4302 4405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3*,
4303 4406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *zName,
4304 4407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eTextRep,
4305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void*,
4408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pArg,
4306 4409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int(*xCompare)(void*,int,const void*,int,const void*)
4307 4410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
4308 4411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4309 4412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4310 4413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Collation Needed Callbacks
@@ -4389,20 +4492,23 @@
4389 4492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
4390 4493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4391 4494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4392 4495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Suspend Execution For A Short Time
4393 4496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The sqlite3_sleep() function causes the current thread to suspend execution
4497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite3_sleep() function causes the current thread to suspend execution
4395 4498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for at least a number of milliseconds specified in its parameter.
4396 4499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^If the operating system does not support sleep requests with
4500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the operating system does not support sleep requests with
4398 4501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** millisecond time resolution, then the time will be rounded up to
4399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the nearest second. ^The number of milliseconds of sleep actually
4502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the nearest second. The number of milliseconds of sleep actually
4400 4503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** requested from the operating system is returned.
4401 4504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4402 4505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^SQLite implements this interface by calling the xSleep()
4403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** method of the default [sqlite3_vfs] object.
4506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** method of the default [sqlite3_vfs] object. If the xSleep() method
4507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the default VFS is not implemented correctly, or not implemented at
4508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all, then the behavior of sqlite3_sleep() may deviate from the description
4509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the previous paragraphs.
4404 4510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4405 4511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_sleep(int);
4406 4512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4407 4513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4408 4514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Name Of The Folder Holding Temporary Files
@@ -4620,44 +4726,77 @@
4620 4726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of heap memory by deallocating non-essential memory allocations
4621 4727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** held by the database library. Memory used to cache database
4622 4728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pages to improve performance is an example of non-essential memory.
4623 4729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^sqlite3_release_memory() returns the number of bytes actually freed,
4624 4730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** which might be more or less than the amount requested.
4731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_release_memory() routine is a no-op returning zero
4732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if SQLite is not compiled with [SQLITE_ENABLE_MEMORY_MANAGEMENT].
4625 4733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4626 4734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_release_memory(int);
4627 4735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4628 4736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4629 4737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Impose A Limit On Heap Size
4630 4738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The sqlite3_soft_heap_limit() interface places a "soft" limit
4632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** on the amount of heap memory that may be allocated by SQLite.
4633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^If an internal allocation is requested that would exceed the
4634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** soft heap limit, [sqlite3_release_memory()] is invoked one or
4635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** more times to free up some space before the allocation is performed.
4636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The limit is called "soft" because if [sqlite3_release_memory()]
4638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cannot free sufficient memory to prevent the limit from being exceeded,
4639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the memory is allocated anyway and the current operation proceeds.
4640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^A negative or zero value for N means that there is no soft heap limit and
4642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_release_memory()] will only be called when memory is exhausted.
4643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The default value for the soft heap limit is zero.
4644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(SQLite makes a best effort to honor the soft heap limit.
4646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** But if the soft heap limit cannot be honored, execution will
4647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** continue without error or notification.)^ This is why the limit is
4648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** called a "soft" limit. It is advisory only.
4649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Prior to SQLite version 3.5.0, this routine only constrained the memory
4651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** allocated by a single thread - the same thread in which this routine
4652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** runs. Beginning with SQLite version 3.5.0, the soft heap limit is
4653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** applied to all threads. The value specified for the soft heap limit
4654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is an upper bound on the total memory allocation for all threads. In
4655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** version 3.5.0 there is no mechanism for limiting the heap usage for
4656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** individual threads.
4657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
4658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API void sqlite3_soft_heap_limit(int);
4739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_soft_heap_limit64() interface sets and/or queries the
4740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** soft limit on the amount of heap memory that may be allocated by SQLite.
4741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite strives to keep heap memory utilization below the soft heap
4742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** limit by reducing the number of pages held in the page cache
4743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as heap memory usages approaches the limit.
4744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The soft heap limit is "soft" because even though SQLite strives to stay
4745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** below the limit, it will exceed the limit rather than generate
4746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an [SQLITE_NOMEM] error. In other words, the soft heap limit
4747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is advisory only.
4748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The return value from sqlite3_soft_heap_limit64() is the size of
4750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the soft heap limit prior to the call. ^If the argument N is negative
4751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then no change is made to the soft heap limit. Hence, the current
4752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** size of the soft heap limit can be determined by invoking
4753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_soft_heap_limit64() with a negative argument.
4754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the argument N is zero then the soft heap limit is disabled.
4756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(The soft heap limit is not enforced in the current implementation
4758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if one or more of following conditions are true:
4759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <ul>
4761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> The soft heap limit is set to zero.
4762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> Memory accounting is disabled using a combination of the
4763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_config]([SQLITE_CONFIG_MEMSTATUS],...) start-time option and
4764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the [SQLITE_DEFAULT_MEMSTATUS] compile-time option.
4765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> An alternative page cache implementation is specifed using
4766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_config]([SQLITE_CONFIG_PCACHE],...).
4767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> The page cache allocates from its own memory pool supplied
4768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by [sqlite3_config]([SQLITE_CONFIG_PAGECACHE],...) rather than
4769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the heap.
4770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </ul>)^
4771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Beginning with SQLite version 3.7.3, the soft heap limit is enforced
4773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** regardless of whether or not the [SQLITE_ENABLE_MEMORY_MANAGEMENT]
4774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** compile-time option is invoked. With [SQLITE_ENABLE_MEMORY_MANAGEMENT],
4775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the soft heap limit is enforced on every memory allocation. Without
4776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [SQLITE_ENABLE_MEMORY_MANAGEMENT], the soft heap limit is only enforced
4777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** when memory is allocated by the page cache. Testing suggests that because
4778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the page cache is the predominate memory user in SQLite, most
4779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** applications will achieve adequate soft heap limit enforcement without
4780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the use of [SQLITE_ENABLE_MEMORY_MANAGEMENT].
4781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The circumstances under which SQLite will enforce the soft heap limit may
4783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** changes in future releases of SQLite.
4784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
4785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 N);
4786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
4787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
4788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CAPI3REF: Deprecated Soft Heap Limit Interface
4789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** DEPRECATED
4790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is a deprecated version of the [sqlite3_soft_heap_limit64()]
4792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** interface. This routine is provided for historical compatibility
4793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only. All new applications should use the
4794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_soft_heap_limit64()] interface rather than this one.
4795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
4796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API SQLITE_DEPRECATED void sqlite3_soft_heap_limit(int N);
4797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
4659 4798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4660 4799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4661 4800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Extract Metadata About A Column Of A Table
4662 4801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4663 4802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^This routine returns metadata about a specific column of a specific
@@ -4777,38 +4916,51 @@
4777 4916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it back off again.
4778 4917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4779 4918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_enable_load_extension(sqlite3 *db, int onoff);
4780 4919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4781 4920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CAPI3REF: Automatically Load An Extensions
4783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^This API can be invoked at program startup in order to register
4785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** one or more statically linked extensions that will be available
4786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to all new [database connections].
4787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(This routine stores a pointer to the extension entry point
4789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in an array that is obtained from [sqlite3_malloc()]. That memory
4790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is deallocated by [sqlite3_reset_auto_extension()].)^
4791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^This function registers an extension entry point that is
4793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** automatically invoked whenever a new [database connection]
4794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is opened using [sqlite3_open()], [sqlite3_open16()],
4795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or [sqlite3_open_v2()].
4796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Duplicate extensions are detected so calling this routine
4797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** multiple times with the same extension is harmless.
4798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Automatic extensions apply across all threads.
4921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CAPI3REF: Automatically Load Statically Linked Extensions
4922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^This interface causes the xEntryPoint() function to be invoked for
4924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** each new [database connection] that is created. The idea here is that
4925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xEntryPoint() is the entry point for a statically linked SQLite extension
4926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that is to be automatically loaded into all new database connections.
4927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(Even though the function prototype shows that xEntryPoint() takes
4929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no arguments and returns void, SQLite invokes xEntryPoint() with three
4930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** arguments and expects and integer result as if the signature of the
4931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** entry point where as follows:
4932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <blockquote><pre>
4934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** int xEntryPoint(
4935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3 *db,
4936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** const char **pzErrMsg,
4937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** const struct sqlite3_api_routines *pThunk
4938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** );
4939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </pre></blockquote>)^
4940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the xEntryPoint routine encounters an error, it should make *pzErrMsg
4942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** point to an appropriate error message (obtained from [sqlite3_mprintf()])
4943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and return an appropriate [error code]. ^SQLite ensures that *pzErrMsg
4944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is NULL before calling the xEntryPoint(). ^SQLite will invoke
4945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_free()] on *pzErrMsg after xEntryPoint() returns. ^If any
4946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xEntryPoint() returns an error, the [sqlite3_open()], [sqlite3_open16()],
4947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or [sqlite3_open_v2()] call that provoked the xEntryPoint() will fail.
4948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Calling sqlite3_auto_extension(X) with an entry point X that is already
4950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on the list of automatic extensions is a harmless no-op. ^No entry point
4951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be called more than once for each database connection that is opened.
4952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: [sqlite3_reset_auto_extension()].
4799 4954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4800 4955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_auto_extension(void (*xEntryPoint)(void));
4801 4956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4802 4957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4803 4958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Reset Automatic Extension Loading
4804 4959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(This function disables all previously registered automatic
4806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** extensions. It undoes the effect of all prior
4807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_auto_extension()] calls.)^
4808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
4809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^This function disables automatic extensions in all threads.
4960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^This interface disables all automatic extensions previously
4961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** registered using [sqlite3_auto_extension()].
4810 4962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
4811 4963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_reset_auto_extension(void);
4812 4964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
4813 4965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
4814 4966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The interface to the virtual-table mechanism is currently considered
@@ -5443,11 +5595,11 @@
5443 5595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** output variable when querying the system for the current mutex
5444 5596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation, using the [SQLITE_CONFIG_GETMUTEX] option.
5445 5597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5446 5598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The xMutexInit method defined by this structure is invoked as
5447 5599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** part of system initialization by the sqlite3_initialize() function.
5448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xMutexInit routine is calle by SQLite exactly once for each
5600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The xMutexInit routine is called by SQLite exactly once for each
5449 5601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** effective call to [sqlite3_initialize()].
5450 5602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5451 5603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The xMutexEnd method defined by this structure is invoked as
5452 5604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** part of system shutdown by the sqlite3_shutdown() function. The
5453 5605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation of this method is expected to release all outstanding
@@ -5640,11 +5792,12 @@
5640 5792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_ALWAYS 13
5641 5793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_RESERVE 14
5642 5794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_OPTIMIZATIONS 15
5643 5795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_ISKEYWORD 16
5644 5796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_PGHDRSZ 17
5645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_TESTCTRL_LAST 17
5797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_TESTCTRL_SCRATCHMALLOC 18
5798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_TESTCTRL_LAST 18
5646 5799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
5647 5800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
5648 5801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: SQLite Runtime Status
5649 5802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5650 5803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^This interface is used to retrieve runtime status information
@@ -5659,11 +5812,11 @@
5659 5812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value. For those parameters
5660 5813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** nothing is written into *pHighwater and the resetFlag is ignored.)^
5661 5814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(Other parameters record only the highwater mark and not the current
5662 5815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value. For these latter parameters nothing is written into *pCurrent.)^
5663 5816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a
5817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_status() routine returns SQLITE_OK on success and a
5665 5818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** non-zero [error code] on failure.
5666 5819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5667 5820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is threadsafe but is not atomic. This routine can be
5668 5821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** called while other threads are running the same or different SQLite
5669 5822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interfaces. However the values returned in *pCurrent and
@@ -5709,11 +5862,11 @@
5709 5862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_CONFIG_PAGECACHE]. The
5710 5863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value returned is in pages, not in bytes.</dd>)^
5711 5864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5712 5865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_STATUS_PAGECACHE_OVERFLOW</dt>
5713 5866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>This parameter returns the number of bytes of page cache
5714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** allocation which could not be statisfied by the [SQLITE_CONFIG_PAGECACHE]
5867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** allocation which could not be satisfied by the [SQLITE_CONFIG_PAGECACHE]
5715 5868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** buffer and where forced to overflow to [sqlite3_malloc()]. The
5716 5869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned value includes allocations that overflowed because they
5717 5870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** where too large (they were larger than the "sz" parameter to
5718 5871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_CONFIG_PAGECACHE]) and allocations that overflowed because
5719 5872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** no space was left in the page cache.</dd>)^
@@ -5732,11 +5885,11 @@
5732 5885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** outstanding at time, this parameter also reports the number of threads
5733 5886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using scratch memory at the same time.</dd>)^
5734 5887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5735 5888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(<dt>SQLITE_STATUS_SCRATCH_OVERFLOW</dt>
5736 5889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>This parameter returns the number of bytes of scratch memory
5737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** allocation which could not be statisfied by the [SQLITE_CONFIG_SCRATCH]
5890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** allocation which could not be satisfied by the [SQLITE_CONFIG_SCRATCH]
5738 5891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** buffer and where forced to overflow to [sqlite3_malloc()]. The values
5739 5892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned include overflows because the requested allocation was too
5740 5893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** larger (that is, because the requested allocation was larger than the
5741 5894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "sz" parameter to [SQLITE_CONFIG_SCRATCH]) and because no scratch buffer
5742 5895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** slots were available.
@@ -5780,10 +5933,13 @@
5780 5933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5781 5934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The current value of the requested parameter is written into *pCur
5782 5935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and the highest instantaneous value is written into *pHiwtr. ^If
5783 5936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the resetFlg is true, then the highest instantaneous value is
5784 5937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reset back down to the current value.
5938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
5939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_db_status() routine returns SQLITE_OK on success and a
5940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** non-zero [error code] on failure.
5785 5941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5786 5942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_status()] and [sqlite3_stmt_status()].
5787 5943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
5788 5944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int resetFlg);
5789 5945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -5907,122 +6063,134 @@
5907 6063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Application Defined Page Cache.
5908 6064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: {page cache}
5909 6065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5910 6066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(The [sqlite3_config]([SQLITE_CONFIG_PCACHE], ...) interface can
5911 6067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** register an alternative page cache implementation by passing in an
5912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** instance of the sqlite3_pcache_methods structure.)^ The majority of the
5913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** heap memory used by SQLite is used by the page cache to cache data read
5914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** from, or ready to be written to, the database file. By implementing a
5915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** custom page cache using this API, an application can control more
5916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** precisely the amount of memory consumed by SQLite, the way in which
6068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** instance of the sqlite3_pcache_methods structure.)^
6069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In many applications, most of the heap memory allocated by
6070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite is used for the page cache.
6071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** By implementing a
6072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** custom page cache using this API, an application can better control
6073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the amount of memory consumed by SQLite, the way in which
5917 6074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that memory is allocated and released, and the policies used to
5918 6075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** determine exactly which parts of a database file are cached and for
5919 6076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** how long.
5920 6077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The alternative page cache mechanism is an
6079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** extreme measure that is only needed by the most demanding applications.
6080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The built-in page cache is recommended for most uses.
6081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
5921 6082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(The contents of the sqlite3_pcache_methods structure are copied to an
5922 6083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** internal buffer by SQLite within the call to [sqlite3_config]. Hence
5923 6084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the application may discard the parameter after the call to
5924 6085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_config()] returns.)^
5925 6086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xInit() method is called once for each call to [sqlite3_initialize()]
6087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(The xInit() method is called once for each effective
6088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** call to [sqlite3_initialize()])^
5927 6089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (usually only once during the lifetime of the process). ^(The xInit()
5928 6090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** method is passed a copy of the sqlite3_pcache_methods.pArg value.)^
5929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xInit() method can set up up global structures and/or any mutexes
6091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The intent of the xInit() method is to set up global data structures
5930 6092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** required by the custom page cache implementation.
6093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(If the xInit() method is NULL, then the
6094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** built-in default page cache is used instead of the application defined
6095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page cache.)^
5931 6096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xShutdown() method is called from within [sqlite3_shutdown()],
5933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if the application invokes this API. It can be used to clean up
6097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The xShutdown() method is called by [sqlite3_shutdown()].
6098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It can be used to clean up
5934 6099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** any outstanding resources before process shutdown, if required.
6100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The xShutdown() method may be NULL.
5935 6101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^SQLite holds a [SQLITE_MUTEX_RECURSIVE] mutex when it invokes
5937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the xInit method, so the xInit method need not be threadsafe. ^The
6102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite automatically serializes calls to the xInit method,
6103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** so the xInit method need not be threadsafe. ^The
5938 6104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xShutdown method is only called from [sqlite3_shutdown()] so it does
5939 6105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not need to be threadsafe either. All other methods must be threadsafe
5940 6106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in multithreaded applications.
5941 6107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5942 6108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^SQLite will never invoke xInit() more than once without an intervening
5943 6109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** call to xShutdown().
5944 6110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xCreate() method is used to construct a new cache instance. SQLite
5946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** will typically create one cache instance for each open database file,
6111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^SQLite invokes the xCreate() method to construct a new cache instance.
6112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLite will typically create one cache instance for each open database file,
5947 6113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** though this is not guaranteed. ^The
5948 6114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** first parameter, szPage, is the size in bytes of the pages that must
5949 6115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be allocated by the cache. ^szPage will not be a power of two. ^szPage
5950 6116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will the page size of the database file that is to be cached plus an
5951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** increment (here called "R") of about 100 or 200. ^SQLite will use the
6117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** increment (here called "R") of about 100 or 200. SQLite will use the
5952 6118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** extra R bytes on each page to store metadata about the underlying
5953 6119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database page on disk. The value of R depends
5954 6120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on the SQLite version, the target platform, and how SQLite was compiled.
5955 6121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^R is constant for a particular build of SQLite. ^The second argument to
5956 6122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xCreate(), bPurgeable, is true if the cache being created will
5957 6123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be used to cache database pages of a file stored on disk, or
5958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** false if it is used for an in-memory database. ^The cache implementation
6124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** false if it is used for an in-memory database. The cache implementation
5959 6125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** does not have to do anything special based with the value of bPurgeable;
5960 6126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it is purely advisory. ^On a cache where bPurgeable is false, SQLite will
5961 6127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** never invoke xUnpin() except to deliberately delete a page.
5962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^In other words, a cache created with bPurgeable set to false will
6128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^In other words, calls to xUnpin() on a cache with bPurgeable set to
6129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** false will always have the "discard" flag set to true.
6130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Hence, a cache created with bPurgeable false will
5963 6131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** never contain any unpinned pages.
5964 6132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5965 6133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(The xCachesize() method may be called at any time by SQLite to set the
5966 6134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** suggested maximum cache-size (number of pages stored by) the cache
5967 6135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** instance passed as the first argument. This is the value configured using
5968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the SQLite "[PRAGMA cache_size]" command.)^ ^As with the bPurgeable
6136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the SQLite "[PRAGMA cache_size]" command.)^ As with the bPurgeable
5969 6137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parameter, the implementation is not required to do anything with this
5970 6138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value; it is advisory only.
5971 6139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xPagecount() method should return the number of pages currently
5973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** stored in the cache.
6140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The xPagecount() method must return the number of pages currently
6141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** stored in the cache, both pinned and unpinned.
5974 6142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xFetch() method is used to fetch a page and return a pointer to it.
5976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^A 'page', in this context, is a buffer of szPage bytes aligned at an
5977 { 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
5978 { 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
6143 { 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
6144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the page, or a NULL pointer.
6145 { 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
6146 { 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
6147 { 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
5979 6148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is considered to be "pinned".
5980 6149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5981 { 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
6150 { 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
5982 6151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implementation must return a pointer to the page buffer with its content
5983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** intact. ^(If the requested page is not already in the cache, then the
5984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** behavior of the cache implementation is determined by the value of the
5985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** createFlag parameter passed to xFetch, according to the following table:
6152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** intact. If the requested page is not already in the cache, then the
6153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** behavior of the cache implementation should use the value of the createFlag
6154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parameter to help it determined what action to take:
5986 6155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5987 6156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <table border=1 width=85% align=center>
5988 6157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <tr><th> createFlag <th> Behaviour when page is not already in cache
5989 6158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <tr><td> 0 <td> Do not allocate a new page. Return NULL.
5990 6159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <tr><td> 1 <td> Allocate a new page if it easy and convenient to do so.
5991 6160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Otherwise return NULL.
5992 6161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <tr><td> 2 <td> Make every effort to allocate a new page. Only return
5993 6162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NULL if allocating a new page is effectively impossible.
5994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** </table>)^
6163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** </table>
5995 6164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLite will normally invoke xFetch() with a createFlag of 0 or 1. If
5997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a call to xFetch() with createFlag==1 returns NULL, then SQLite will
6165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(SQLite will normally invoke xFetch() with a createFlag of 0 or 1. SQLite
6166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will only use a createFlag of 2 after a prior call with a createFlag of 1
6167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** failed.)^ In between the to xFetch() calls, SQLite may
5998 6168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** attempt to unpin one or more cache pages by spilling the content of
5999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pinned pages to disk and synching the operating system disk cache. After
6000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** attempting to unpin pages, the xFetch() method will be invoked again with
6001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a createFlag of 2.
6169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pinned pages to disk and synching the operating system disk cache.
6002 6170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6003 6171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^xUnpin() is called by SQLite with a pointer to a currently pinned page
6004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** as its second argument. ^(If the third parameter, discard, is non-zero,
6005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then the page should be evicted from the cache. In this case SQLite
6006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** assumes that the next time the page is retrieved from the cache using
6007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the xFetch() method, it will be zeroed.)^ ^If the discard parameter is
6008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** zero, then the page is considered to be unpinned. ^The cache implementation
6172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as its second argument. If the third parameter, discard, is non-zero,
6173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the page must be evicted from the cache.
6174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the discard parameter is
6175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zero, then the page may be discarded or retained at the discretion of
6176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page cache implementation. ^The page cache implementation
6009 6177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** may choose to evict unpinned pages at any time.
6010 6178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(The cache is not required to perform any reference counting. A single
6179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The cache must not perform any reference counting. A single
6012 6180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** call to xUnpin() unpins the page regardless of the number of prior calls
6013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to xFetch().)^
6181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to xFetch().
6014 6182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The xRekey() method is used to change the key value associated with the
6016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** page passed as the second argument from oldKey to newKey. ^If the cache
6017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** previously contains an entry associated with newKey, it should be
6183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The xRekey() method is used to change the key value associated with the
6184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page passed as the second argument. If the cache
6185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** previously contains an entry associated with newKey, it must be
6018 6186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** discarded. ^Any prior cache entry associated with newKey is guaranteed not
6019 6187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to be pinned.
6020 6188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^When SQLite calls the xTruncate() method, the cache must discard all
6189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When SQLite calls the xTruncate() method, the cache must discard all
6022 6190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** existing cache entries with page numbers (keys) greater than or equal
6023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to the value of the iLimit parameter passed to xTruncate(). ^If any
6191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the value of the iLimit parameter passed to xTruncate(). If any
6024 6192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of these pages are pinned, they are implicitly unpinned, meaning that
6025 6193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** they can be safely discarded.
6026 6194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6027 6195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The xDestroy() method is used to delete a cache allocated by xCreate().
6028 6196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** All resources associated with the specified cache should be freed. ^After
@@ -6496,10 +6664,66 @@
6496 6664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0
6497 6665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} /* End of the 'extern "C"' block */
6498 6666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
6499 6667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
6500 6668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
6670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2010 August 30
6671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
6672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The author disclaims copyright to this source code. In place of
6673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a legal notice, here is a blessing:
6674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
6675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you do good and not evil.
6676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you find forgiveness for yourself and forgive others.
6677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you share freely, never taking more than you give.
6678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
6679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *************************************************************************
6680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
6681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef _SQLITE3RTREE_H_
6683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define _SQLITE3RTREE_H_
6684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if 0
6687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ extern "C" {
6688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
6689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct sqlite3_rtree_geometry sqlite3_rtree_geometry;
6691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
6693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Register a geometry callback named zGeom that can be used as part of an
6694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** R-Tree geometry query as follows:
6695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
6696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SELECT ... FROM <rtree> WHERE <rtree col> MATCH $zGeom(... params ...)
6697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
6698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_rtree_geometry_callback(
6699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db,
6700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zGeom,
6701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry *, int nCoord, double *aCoord, int *pRes),
6702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pContext
6703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
6704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
6707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A pointer to a structure of the following type is passed as the first
6708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument to callbacks registered using rtree_geometry_callback().
6709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
6710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct sqlite3_rtree_geometry {
6711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pContext; /* Copy of pContext passed to s_r_g_c() */
6712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nParam; /* Size of array aParam[] */
6713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double *aParam; /* Parameters passed to SQL geom function */
6714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUser; /* Callback implementation user data */
6715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDelUser)(void *); /* Called by SQLite to clean up pUser */
6716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
6717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if 0
6720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } /* end of the 'extern "C"' block */
6721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
6722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* ifndef _SQLITE3RTREE_H_ */
6724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
6501 6725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6502 6726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of sqlite3.h *********************************************/
6503 6727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in sqliteInt.h ******************/
6504 6728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include hash.h in the middle of sqliteInt.h ******************/
6505 6729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file hash.h ********************************************/
@@ -7066,10 +7290,11 @@
7066 7290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Schema Schema;
7067 7291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Expr Expr;
7068 7292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct ExprList ExprList;
7069 7293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct ExprSpan ExprSpan;
7070 7294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct FKey FKey;
7295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct FuncDestructor FuncDestructor;
7071 7296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct FuncDef FuncDef;
7072 7297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct FuncDefHash FuncDefHash;
7073 7298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct IdList IdList;
7074 7299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Index Index;
7075 7300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct IndexSample IndexSample;
@@ -7172,16 +7397,15 @@
7172 7397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** following values.
7173 7398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7174 7399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NOTE: These values must match the corresponding PAGER_ values in
7175 7400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pager.h.
7176 7401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_OMIT_JOURNAL 1 /* Do not use journal. No argument */
7402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_OMIT_JOURNAL 1 /* Do not create or use a rollback journal */
7178 7403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_NO_READLOCK 2 /* Omit readlocks on readonly files */
7179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_MEMORY 4 /* In-memory DB. No argument */
7180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_READONLY 8 /* Open the database in read-only mode */
7181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_READWRITE 16 /* Open for both reading and writing */
7182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_CREATE 32 /* Create the database if it does not exist */
7404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_MEMORY 4 /* This is an in-memory DB */
7405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_SINGLE 8 /* The file contains at most 1 b-tree */
7406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_UNORDERED 16 /* Use of a hash implementation is OK */
7183 7407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7184 7408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeClose(Btree*);
7185 7409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSetCacheSize(Btree*,int);
7186 7410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSetSafetyLevel(Btree*,int,int);
7187 7411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeSyncDisabled(Btree*);
@@ -7213,15 +7437,21 @@
7213 7437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeCopyFile(Btree *, Btree *);
7214 7438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7215 7439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *);
7216 7440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7217 7441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The flags parameter to sqlite3BtreeCreateTable can be the bitwise OR
7218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the following flags:
7442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the flags shown below.
7443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
7444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Every SQLite table must have either BTREE_INTKEY or BTREE_BLOBKEY set.
7445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** With BTREE_INTKEY, the table key is a 64-bit integer and arbitrary data
7446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is stored in the leaves. (BTREE_INTKEY is used for SQL tables.) With
7447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** BTREE_BLOBKEY, the key is an arbitrary BLOB and no content is stored
7448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** anywhere - the key is the content. (BTREE_BLOBKEY is used for SQL
7449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** indices.)
7219 7450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7220 7451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define BTREE_INTKEY 1 /* Table has only 64-bit signed integer keys */
7221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_ZERODATA 2 /* Table has keys only - no data */
7222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define BTREE_LEAFDATA 4 /* Data stored in leaves only. Implies INTKEY */
7452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define BTREE_BLOBKEY 2 /* Table has keys only - no data */
7223 7453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7224 7454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*);
7225 7455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*);
7226 7456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int);
7227 7457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -7838,10 +8068,11 @@
7838 8068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7839 8069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NOTE: These values must match the corresponding BTREE_ values in btree.h.
7840 8070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7841 8071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGER_OMIT_JOURNAL 0x0001 /* Do not use a rollback journal */
7842 8072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGER_NO_READLOCK 0x0002 /* Omit readlocks on readonly files */
8073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define PAGER_MEMORY 0x0004 /* In-memory database */
7843 8074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7844 8075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
7845 8076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Valid values for the second argument to sqlite3PagerLockingMode().
7846 8077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7847 8078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define PAGER_LOCKINGMODE_QUERY -1
@@ -8472,12 +8703,12 @@
8472 8703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_mutex_alloc(X) ((sqlite3_mutex*)8)
8473 8704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_mutex_free(X)
8474 8705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_mutex_enter(X)
8475 8706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_mutex_try(X) SQLITE_OK
8476 8707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3_mutex_leave(X)
8477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define sqlite3_mutex_held(X) 1
8478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define sqlite3_mutex_notheld(X) 1
8708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sqlite3_mutex_held(X) ((void)(X),1)
8709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define sqlite3_mutex_notheld(X) ((void)(X),1)
8479 8710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3MutexAlloc(X) ((sqlite3_mutex*)8)
8480 8711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3MutexInit() SQLITE_OK
8481 8712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3MutexEnd()
8482 8713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* defined(SQLITE_MUTEX_OMIT) */
8483 8714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -8795,10 +9026,31 @@
8795 9026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xFunc)(sqlite3_context*,int,sqlite3_value**); /* Regular function */
8796 9027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xStep)(sqlite3_context*,int,sqlite3_value**); /* Aggregate step */
8797 9028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xFinalize)(sqlite3_context*); /* Aggregate finalizer */
8798 9029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName; /* SQL name of the function. */
8799 9030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDef *pHash; /* Next with a different name but the same hash */
9031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FuncDestructor *pDestructor; /* Reference counted destructor function */
9032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
9033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
9034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
9035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This structure encapsulates a user-function destructor callback (as
9036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configured using create_function_v2()) and a reference counter. When
9037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** create_function_v2() is called to create a function with a destructor,
9038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a single object of this type is allocated. FuncDestructor.nRef is set to
9039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the number of FuncDef objects created (either 1 or 3, depending on whether
9040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or not the specified encoding is SQLITE_ANY). The FuncDef.pDestructor
9041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** member of each of the new FuncDef objects is set to point to the allocated
9042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FuncDestructor.
9043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
9044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Thereafter, when one of the FuncDef objects is deleted, the reference
9045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** count on this object is decremented. When it reaches 0, the destructor
9046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is invoked and the FuncDestructor structure freed.
9047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
9048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct FuncDestructor {
9049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nRef;
9050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDestroy)(void *);
9051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pUserData;
8800 9052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
8801 9053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8802 9054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
8803 9055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Possible values for FuncDef.flags
8804 9056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -8835,19 +9087,19 @@
8835 9087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** FuncDef.flags variable is set to the value passed as the flags
8836 9088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parameter.
8837 9089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
8838 9090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FUNCTION(zName, nArg, iArg, bNC, xFunc) \
8839 9091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
8840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0}
9092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_INT_TO_PTR(iArg), 0, xFunc, 0, 0, #zName, 0, 0}
8841 9093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define STR_FUNCTION(zName, nArg, pArg, bNC, xFunc) \
8842 9094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{nArg, SQLITE_UTF8, bNC*SQLITE_FUNC_NEEDCOLL, \
8843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pArg, 0, xFunc, 0, 0, #zName, 0}
9095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pArg, 0, xFunc, 0, 0, #zName, 0, 0}
8844 9096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define LIKEFUNC(zName, nArg, arg, flags) \
8845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0}
9097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {nArg, SQLITE_UTF8, flags, (void *)arg, 0, likeFunc, 0, 0, #zName, 0, 0}
8846 9098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \
8847 9099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{nArg, SQLITE_UTF8, nc*SQLITE_FUNC_NEEDCOLL, \
8848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0}
9100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
8849 9101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
8850 9102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
8851 9103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** All current savepoints are stored in a linked list starting at
8852 9104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3.pSavepoint. The first element in the list is the most recently
8853 9105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opened savepoint. Savepoints are added to the list by the vdbe
@@ -9063,10 +9315,11 @@
9063 9315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iPKey; /* If not negative, use aCol[iPKey] as the primary key */
9064 9316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCol; /* Number of columns in this table */
9065 9317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Column *aCol; /* Information about each column */
9066 9318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIndex; /* List of SQL indexes on this table. */
9067 9319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tnum; /* Root BTree node for this table (see note above) */
9320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned nRowEst; /* Estimated rows in table - from sqlite_stat1 table */
9068 9321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSelect; /* NULL for tables. Points to definition if a view. */
9069 9322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 nRef; /* Number of pointers to this Table */
9070 9323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 tabFlags; /* Mask of TF_* values */
9071 9324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */
9072 9325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FKey *pFKey; /* Linked list of all foreign keys in this table */
@@ -10317,11 +10570,10 @@
10317 10570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10318 10571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10319 10572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Internal function prototypes
10320 10573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
10321 10574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3StrICmp(const char *, const char *);
10322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3IsNumber(const char*, int*, u8);
10323 10575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Strlen30(const char*);
10324 10576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3StrNICmp sqlite3_strnicmp
10325 10577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10326 10578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3MallocInit(void);
10327 10579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3MallocEnd(void);
@@ -10341,11 +10593,11 @@
10341 10593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ScratchFree(void*);
10342 10594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3PageMalloc(int);
10343 10595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3PageFree(void*);
10344 10596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3MemSetDefault(void);
10345 10597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BenignMallocHooks(void (*)(void), void (*)(void));
10346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3MemoryAlarm(void (*)(void*, sqlite3_int64, int), void*, sqlite3_int64);
10598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3HeapNearlyFull(void);
10347 10599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10348 10600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10349 10601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** On systems with ample stack space and that support alloca(), make
10350 10602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use of alloca() to obtain space for large automatic objects. By default,
10351 10603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** obtain space from malloc().
@@ -10512,11 +10764,10 @@
10512 10764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCachePush(Parse*);
10513 10765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCachePop(Parse*, int);
10514 10766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCacheRemove(Parse*, int, int);
10515 10767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCacheClear(Parse*);
10516 10768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse*, int, int);
10517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3ExprHardCopy(Parse*,int,int);
10518 10769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExprCode(Parse*, Expr*, int);
10519 10770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExprCodeTemp(Parse*, Expr*, int*);
10520 10771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse*, Expr*, int);
10521 10772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExprCodeAndCache(Parse*, Expr*, int);
10522 10773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ExprCodeConstants(Parse*, Expr*);
@@ -10632,21 +10883,18 @@
10632 10883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3AuthContextPush(a,b,c)
10633 10884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3AuthContextPop(a) ((void)(a))
10634 10885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
10635 10886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Attach(Parse*, Expr*, Expr*, Expr*);
10636 10887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Detach(Parse*, Expr*);
10637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3BtreeFactory(sqlite3 *db, const char *zFilename,
10638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int omitJournal, int nCache, int flags, Btree **ppBtree);
10639 10888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FixInit(DbFixer*, Parse*, int, const char*, const Token*);
10640 10889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FixSrcList(DbFixer*, SrcList*);
10641 10890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FixSelect(DbFixer*, Select*);
10642 10891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FixExpr(DbFixer*, Expr*);
10643 10892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FixExprList(DbFixer*, ExprList*);
10644 10893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FixTriggerStep(DbFixer*, TriggerStep*);
10645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*);
10894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double*, int, u8);
10646 10895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3GetInt32(const char *, int*);
10647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3FitsIn64Bits(const char *, int);
10648 10896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Utf16ByteLen(const void *pData, int nChar);
10649 10897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Utf8CharLen(const char *pData, int nByte);
10650 10898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Utf8Read(const u8*, const u8**);
10651 10899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10652 10900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -10688,11 +10936,11 @@
10688 10936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *, Index *);
10689 10937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3TableAffinityStr(Vdbe *, Table *);
10690 10938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2);
10691 10939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
10692 10940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr);
10693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*);
10941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
10694 10942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...);
10695 10943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
10696 10944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
10697 10945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3ErrStr(int);
10698 10946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
@@ -10759,11 +11007,13 @@
10759 11007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Schema *sqlite3SchemaGet(sqlite3 *, Btree *);
10760 11008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3SchemaToIndex(sqlite3 *db, Schema *);
10761 11009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE KeyInfo *sqlite3IndexKeyinfo(Parse *, Index *);
10762 11010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3CreateFunc(sqlite3 *, const char *, int, int, void *,
10763 11011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*)(sqlite3_context*,int,sqlite3_value **),
10764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*));
11012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*)(sqlite3_context*,int,sqlite3_value **), void (*)(sqlite3_context*),
11013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FuncDestructor *pDestructor
11014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
10765 11015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ApiExit(sqlite3 *db, int);
10766 11016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *);
10767 11017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10768 11018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int);
10769 11019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int);
@@ -11679,10 +11929,11 @@
11679 11929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool useRandomRowid; /* Generate new record numbers semi-randomly */
11680 11930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool nullRow; /* True if pointing to a row with no data */
11681 11931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */
11682 11932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool isTable; /* True if a table requiring integer keys */
11683 11933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool isIndex; /* True if an index containing keys only - no data */
11934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bool isOrdered; /* True if the underlying table is BTREE_UNORDERED */
11684 11935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */
11685 11936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Btree *pBt; /* Separate file holding temporary table */
11686 11937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pseudoTableReg; /* Register holding pseudotable content. */
11687 11938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */
11688 11939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nField; /* Number of fields in the header */
@@ -11773,10 +12024,14 @@
11773 12024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z; /* String or BLOB value */
11774 12025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n; /* Number of characters in string value, excluding '\0' */
11775 12026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
11776 12027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 type; /* One of SQLITE_NULL, SQLITE_TEXT, SQLITE_INTEGER, etc */
11777 12028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
12029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
12030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */
12031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */
12032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
11778 12033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *); /* If not null, call this function to delete Mem.z */
11779 12034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zMalloc; /* Dynamic buffer allocated by sqlite3_malloc() */
11780 12035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
11781 12036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11782 12037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* One or more of the following flags are set to indicate the validOK
@@ -11799,10 +12054,11 @@
11799 12054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Int 0x0004 /* Value is an integer */
11800 12055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Real 0x0008 /* Value is a real number */
11801 12056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Blob 0x0010 /* Value is a BLOB */
11802 12057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_RowSet 0x0020 /* Value is a RowSet object */
11803 12058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Frame 0x0040 /* Value is a VdbeFrame object */
12059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define MEM_Invalid 0x0080 /* Value is undefined */
11804 12060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_TypeMask 0x00ff /* Mask of type bits */
11805 12061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11806 12062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Whenever Mem contains a valid string or blob representation, one of
11807 12063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the following flags must be set to determine the memory management
11808 12064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** policy for Mem.z. The MEM_Term flag tells us whether or not the
@@ -11812,23 +12068,29 @@
11812 12068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Dyn 0x0400 /* Need to call sqliteFree() on Mem.z */
11813 12069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Static 0x0800 /* Mem.z points to a static string */
11814 12070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Ephem 0x1000 /* Mem.z points to an ephemeral string */
11815 12071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Agg 0x2000 /* Mem.z points to an agg function context */
11816 12072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Zero 0x4000 /* Mem.i contains count of 0s appended to blob */
11817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
11818 12073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_INCRBLOB
11819 12074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#undef MEM_Zero
11820 12075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEM_Zero 0x0000
11821 12076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
11822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
11823 12077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11824 12078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11825 12079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Clear any existing type flags from a Mem and replace them with f
11826 12080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
11827 12081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MemSetTypeFlag(p, f) \
11828 12082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((p)->flags = ((p)->flags&~(MEM_TypeMask|MEM_Zero))|f)
11829 12083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
12085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if a memory cell is not marked as invalid. This macro
12086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is for use inside assert() statements only.
12087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
12088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
12089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define memIsValid(M) ((M)->flags & MEM_Invalid)==0
12090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
12091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
11830 12092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11831 12093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A VdbeFunc is just a FuncDef (defined in sqliteInt.h) that contains
11832 12094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** additional information about auxiliary information bound to arguments
11833 12095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the function. This is used to implement the sqlite3_get_auxdata()
11834 12096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and sqlite3_set_auxdata() APIs. The "auxdata" is some auxiliary data
@@ -12012,10 +12274,14 @@
12012 12274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
12013 12275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int);
12014 12276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*);
12015 12277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *);
12016 12278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeMemStoreType(Mem *pMem);
12279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
12280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
12281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeMemPrepareToChange(Vdbe*,Mem*);
12282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
12017 12283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12018 12284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_FOREIGN_KEY
12019 12285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeCheckFk(Vdbe *, int);
12020 12286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
12021 12287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3VdbeCheckFk(p,i) 0
@@ -12369,16 +12635,10 @@
12369 12635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end_getDigits:
12370 12636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
12371 12637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return cnt;
12372 12638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
12373 12639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
12375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Read text from z[] and convert into a floating point number. Return
12376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the number of digits converted.
12377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
12378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define getValue sqlite3AtoF
12379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
12380 12640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
12381 12641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Parse a timezone extension on the end of a date-time.
12382 12642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The extension is of the form:
12383 12643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
12384 12644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (+/-)HH:MM
@@ -12576,21 +12836,19 @@
12576 12836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int parseDateOrTime(
12577 12837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *context,
12578 12838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zDate,
12579 12839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DateTime *p
12580 12840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
12581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int isRealNum; /* Return from sqlite3IsNumber(). Not used */
12841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double r;
12582 12842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( parseYyyyMmDd(zDate,p)==0 ){
12583 12843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
12584 12844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( parseHhMmSs(zDate, p)==0 ){
12585 12845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
12586 12846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( sqlite3StrICmp(zDate,"now")==0){
12587 12847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setDateTimeToCurrent(context, p);
12588 12848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
12589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( sqlite3IsNumber(zDate, &isRealNum, SQLITE_UTF8) ){
12590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double r;
12591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- getValue(zDate, &r);
12849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( sqlite3AtoF(zDate, &r, sqlite3Strlen30(zDate), SQLITE_UTF8) ){
12592 12850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iJD = (sqlite3_int64)(r*86400000.0 + 0.5);
12593 12851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->validJD = 1;
12594 12852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
12595 12853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
12596 12854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
@@ -12807,12 +13065,13 @@
12807 13065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
12808 13066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Move the date to the same time on the next occurrence of
12809 13067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** weekday N where 0==Sunday, 1==Monday, and so forth. If the
12810 13068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** date is already on the appropriate weekday, this is a no-op.
12811 13069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
12812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( strncmp(z, "weekday ", 8)==0 && getValue(&z[8],&r)>0
12813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (n=(int)r)==r && n>=0 && r<7 ){
13070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( strncmp(z, "weekday ", 8)==0
13071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3AtoF(&z[8], &r, sqlite3Strlen30(&z[8]), SQLITE_UTF8)
13072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (n=(int)r)==r && n>=0 && r<7 ){
12814 13073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 Z;
12815 13074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeYMD_HMS(p);
12816 13075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->validTZ = 0;
12817 13076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->validJD = 0;
12818 13077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
computeJD(p);
@@ -12863,12 +13122,15 @@
12863 13122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case '6':
12864 13123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case '7':
12865 13124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case '8':
12866 13125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case '9': {
12867 13126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double rRounder;
12868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = getValue(z, &r);
12869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( n>=1 );
13127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(n=1; z[n] && z[n]!=':' && !sqlite3Isspace(z[n]); n++){}
13128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !sqlite3AtoF(z, &r, n, SQLITE_UTF8) ){
13129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = 1;
13130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
13131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
12870 13132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z[n]==':' ){
12871 13133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A modifier of the form (+|-)HH:MM:SS.FFF adds (or subtracts) the
12872 13134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** specified number of hours, minutes, seconds, and fractional seconds
12873 13135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the time. The ".FFF" may be omitted. The ":SS.FFF" may be
12874 13136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** omitted.
@@ -13518,10 +13780,16 @@
13518 13780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3OsSleep(sqlite3_vfs *pVfs, int nMicro){
13519 13781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pVfs->xSleep(pVfs, nMicro);
13520 13782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
13521 13783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3OsCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *pTimeOut){
13522 13784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
13785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-49045-42493 SQLite will use the xCurrentTimeInt64()
13786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** method to get the current date and time if that method is available
13787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (if iVersion is 2 or greater and the function pointer is not NULL) and
13788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will fall back to xCurrentTime() if xCurrentTimeInt64() is
13789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** unavailable.
13790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
13523 13791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pVfs->iVersion>=2 && pVfs->xCurrentTimeInt64 ){
13524 13792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pVfs->xCurrentTimeInt64(pVfs, pTimeOut);
13525 13793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
13526 13794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double r;
13527 13795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pVfs->xCurrentTime(pVfs, &r);
@@ -13901,11 +14169,11 @@
13901 14169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routines and redirected to xFree.
13902 14170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
13903 14171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void *sqlite3MemRealloc(void *pPrior, int nByte){
13904 14172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 *p = (sqlite3_int64*)pPrior;
13905 14173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPrior!=0 && nByte>0 );
13906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nByte = ROUND8(nByte);
14174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nByte==ROUND8(nByte) ); /* EV: R-46199-30249 */
13907 14175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p--;
13908 14176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = realloc(p, nByte+8 );
13909 14177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
13910 14178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p[0] = nByte;
13911 14179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p++;
@@ -14307,10 +14575,11 @@
14307 14575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14308 14576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void *sqlite3MemRealloc(void *pPrior, int nByte){
14309 14577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct MemBlockHdr *pOldHdr;
14310 14578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pNew;
14311 14579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( mem.disallow==0 );
14580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (nByte & 7)==0 ); /* EV: R-46199-30249 */
14312 14581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOldHdr = sqlite3MemsysGetHeader(pPrior);
14313 14582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3MemMalloc(nByte);
14314 14583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew ){
14315 14584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pNew, pPrior, nByte<pOldHdr->iSize ? nByte : pOldHdr->iSize);
14316 14585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nByte>pOldHdr->iSize ){
@@ -15576,11 +15845,11 @@
15576 15845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
15577 15846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void *memsys5Realloc(void *pPrior, int nBytes){
15578 15847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOld;
15579 15848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p;
15580 15849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPrior!=0 );
15581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (nBytes&(nBytes-1))==0 );
15850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (nBytes&(nBytes-1))==0 ); /* EV: R-46199-30249 */
15582 15851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nBytes>=0 );
15583 15852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nBytes==0 ){
15584 15853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
15585 15854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
15586 15855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOld = memsys5Size(pPrior);
@@ -17100,10 +17369,70 @@
17100 17369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
17101 17370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
17102 17371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Memory allocation functions used throughout sqlite.
17103 17372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17104 17373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Attempt to release up to n bytes of non-essential memory currently
17376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** held by SQLite. An example of non-essential memory is memory used to
17377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cache database pages that are not currently in use.
17378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_release_memory(int n){
17380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
17381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3PcacheReleaseMemory(n);
17382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
17383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-34391-24921 The sqlite3_release_memory() routine
17384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is a no-op returning zero if SQLite is not compiled with
17385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_ENABLE_MEMORY_MANAGEMENT. */
17386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(n);
17387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
17388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
17389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An instance of the following object records the location of
17393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** each unused scratch buffer.
17394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct ScratchFreeslot {
17396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct ScratchFreeslot *pNext; /* Next unused scratch buffer */
17397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } ScratchFreeslot;
17398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** State information local to the memory allocation subsystem.
17401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static SQLITE_WSD struct Mem0Global {
17403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex *mutex; /* Mutex to serialize access */
17404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The alarm callback and its arguments. The mem0.mutex lock will
17407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be held while the callback is running. Recursive calls into
17408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the memory subsystem are allowed, but no new callbacks will be
17409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** issued.
17410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 alarmThreshold;
17412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*alarmCallback)(void*, sqlite3_int64,int);
17413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *alarmArg;
17414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Pointers to the end of sqlite3GlobalConfig.pScratch memory
17417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (so that a range test can be used to determine if an allocation
17418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** being freed came from pScratch) and a pointer to the list of
17419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** unused scratch allocations.
17420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pScratchEnd;
17422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ScratchFreeslot *pScratchFree;
17423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 nScratchFree;
17424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** True if heap is nearly "full" where "full" is defined by the
17427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_soft_heap_limit() setting.
17428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nearlyFull;
17430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } mem0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
17431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define mem0 GLOBAL(struct Mem0Global, mem0)
17433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17105 17434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17106 17435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine runs when the memory allocator sees that the
17107 17436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** total memory allocation is about to exceed the soft heap
17108 17437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** limit.
17109 17438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -17114,82 +17443,70 @@
17114 17443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
17115 17444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER2(NotUsed, NotUsed2);
17116 17445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_release_memory(allocSize);
17117 17446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17118 17447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Change the alarm callback
17450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3MemoryAlarm(
17452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
17453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pArg,
17454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iThreshold
17455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
17456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nUsed;
17457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(mem0.mutex);
17458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.alarmCallback = xCallback;
17459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.alarmArg = pArg;
17460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.alarmThreshold = iThreshold;
17461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
17462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.nearlyFull = (iThreshold>0 && iThreshold<=nUsed);
17463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(mem0.mutex);
17464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
17465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_DEPRECATED
17468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Deprecated external interface. Internal/core SQLite code
17470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** should call sqlite3MemoryAlarm.
17471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_memory_alarm(
17473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
17474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pArg,
17475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 iThreshold
17476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
17477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3MemoryAlarm(xCallback, pArg, iThreshold);
17478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
17480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17119 17481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17120 17482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Set the soft heap-size limit for the library. Passing a zero or
17121 17483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** negative value indicates no limit.
17122 17484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API void sqlite3_soft_heap_limit(int n){
17124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_uint64 iLimit;
17125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int overage;
17126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n<0 ){
17127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iLimit = 0;
17128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
17129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iLimit = n;
17130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){
17486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 priorLimit;
17487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_int64 excess;
17131 17488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOINIT
17132 17489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_initialize();
17133 17490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
17134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iLimit>0 ){
17135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, iLimit);
17491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(mem0.mutex);
17492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ priorLimit = mem0.alarmThreshold;
17493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(mem0.mutex);
17494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n<0 ) return priorLimit;
17495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n>0 ){
17496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, n);
17136 17497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
17137 17498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemoryAlarm(0, 0, 0);
17138 17499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- overage = (int)(sqlite3_memory_used() - (i64)n);
17140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( overage>0 ){
17141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_release_memory(overage);
17142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
17146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Attempt to release up to n bytes of non-essential memory currently
17147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** held by SQLite. An example of non-essential memory is memory used to
17148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cache database pages that are not currently in use.
17149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
17150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API int sqlite3_release_memory(int n){
17151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
17152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nRet = 0;
17153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nRet += sqlite3PcacheReleaseMemory(n-nRet);
17154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return nRet;
17155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
17156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(n);
17157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
17158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
17159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
17162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** State information local to the memory allocation subsystem.
17163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
17164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static SQLITE_WSD struct Mem0Global {
17165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Number of free pages for scratch and page-cache memory */
17166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u32 nScratchFree;
17167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u32 nPageFree;
17168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex *mutex; /* Mutex to serialize access */
17170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
17172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The alarm callback and its arguments. The mem0.mutex lock will
17173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be held while the callback is running. Recursive calls into
17174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the memory subsystem are allowed, but no new callbacks will be
17175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** issued.
17176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
17177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 alarmThreshold;
17178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void (*alarmCallback)(void*, sqlite3_int64,int);
17179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *alarmArg;
17180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
17182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Pointers to the end of sqlite3GlobalConfig.pScratch and
17183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3GlobalConfig.pPage to a block of memory that records
17184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** which pages are available.
17185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
17186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u32 *aScratchFree;
17187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u32 *aPageFree;
17188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- } mem0 = { 0, 0, 0, 0, 0, 0, 0, 0 };
17189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define mem0 GLOBAL(struct Mem0Global, mem0)
17500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ excess = sqlite3_memory_used() - n;
17501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff));
17502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return priorLimit;
17503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API void sqlite3_soft_heap_limit(int n){
17505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n<0 ) n = 0;
17506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_soft_heap_limit64(n);
17507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17191 17508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17192 17509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17193 17510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Initialize the memory allocation subsystem.
17194 17511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17195 17512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3MallocInit(void){
@@ -17199,39 +17516,48 @@
17199 17516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&mem0, 0, sizeof(mem0));
17200 17517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bCoreMutex ){
17201 17518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
17202 17519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17203 17520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.pScratch && sqlite3GlobalConfig.szScratch>=100
17204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && sqlite3GlobalConfig.nScratch>=0 ){
17205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
17206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.szScratch = ROUNDDOWN8(sqlite3GlobalConfig.szScratch-4);
17207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.aScratchFree = (u32*)&((char*)sqlite3GlobalConfig.pScratch)
17208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [sqlite3GlobalConfig.szScratch*sqlite3GlobalConfig.nScratch];
17209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<sqlite3GlobalConfig.nScratch; i++){ mem0.aScratchFree[i] = i; }
17210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.nScratchFree = sqlite3GlobalConfig.nScratch;
17521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3GlobalConfig.nScratch>0 ){
17522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, n, sz;
17523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ScratchFreeslot *pSlot;
17524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sz = ROUNDDOWN8(sqlite3GlobalConfig.szScratch);
17525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.szScratch = sz;
17526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSlot = (ScratchFreeslot*)sqlite3GlobalConfig.pScratch;
17527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = sqlite3GlobalConfig.nScratch;
17528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.pScratchFree = pSlot;
17529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.nScratchFree = n;
17530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<n-1; i++){
17531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSlot->pNext = (ScratchFreeslot*)(sz+(char*)pSlot);
17532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSlot = pSlot->pNext;
17533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSlot->pNext = 0;
17535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.pScratchEnd = (void*)&pSlot[1];
17211 17536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
17537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.pScratchEnd = 0;
17212 17538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.pScratch = 0;
17213 17539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.szScratch = 0;
17214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3GlobalConfig.pPage && sqlite3GlobalConfig.szPage>=512
17216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && sqlite3GlobalConfig.nPage>=1 ){
17217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
17218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int overhead;
17219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int sz = ROUNDDOWN8(sqlite3GlobalConfig.szPage);
17220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n = sqlite3GlobalConfig.nPage;
17221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- overhead = (4*n + sz - 1)/sz;
17222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GlobalConfig.nPage -= overhead;
17223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.aPageFree = (u32*)&((char*)sqlite3GlobalConfig.pPage)
17224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- [sqlite3GlobalConfig.szPage*sqlite3GlobalConfig.nPage];
17225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<sqlite3GlobalConfig.nPage; i++){ mem0.aPageFree[i] = i; }
17226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.nPageFree = sqlite3GlobalConfig.nPage;
17227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
17540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.nScratch = 0;
17541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3GlobalConfig.pPage==0 || sqlite3GlobalConfig.szPage<512
17543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || sqlite3GlobalConfig.nPage<1 ){
17228 17544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.pPage = 0;
17229 17545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.szPage = 0;
17546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3GlobalConfig.nPage = 0;
17230 17547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17231 17548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3GlobalConfig.m.xInit(sqlite3GlobalConfig.m.pAppData);
17232 17549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
17552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the heap is currently under memory pressure - in other
17553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** words if the amount of heap used is close to the limit set by
17554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_soft_heap_limit().
17555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
17556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3HeapNearlyFull(void){
17557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return mem0.nearlyFull;
17558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17233 17559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17234 17560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17235 17561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Deinitialize the memory allocation subsystem.
17236 17562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17237 17563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3MallocEnd(void){
@@ -17263,40 +17589,10 @@
17263 17589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
17264 17590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
res = (sqlite3_int64)mx; /* Work around bug in Borland C. Ticket #3216 */
17265 17591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return res;
17266 17592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17267 17593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
17269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Change the alarm callback
17270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
17271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3MemoryAlarm(
17272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
17273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *pArg,
17274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 iThreshold
17275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
17276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_enter(mem0.mutex);
17277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.alarmCallback = xCallback;
17278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.alarmArg = pArg;
17279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.alarmThreshold = iThreshold;
17280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_leave(mem0.mutex);
17281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
17282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_DEPRECATED
17285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
17286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Deprecated external interface. Internal/core SQLite code
17287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** should call sqlite3MemoryAlarm.
17288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
17289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API int sqlite3_memory_alarm(
17290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
17291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *pArg,
17292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_int64 iThreshold
17293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
17294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3MemoryAlarm(xCallback, pArg, iThreshold);
17295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
17297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17298 17594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17299 17595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Trigger the alarm
17300 17596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17301 17597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void sqlite3MallocAlarm(int nByte){
17302 17598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xCallback)(void*,sqlite3_int64,int);
@@ -17325,18 +17621,23 @@
17325 17621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFull = sqlite3GlobalConfig.m.xRoundup(n);
17326 17622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
17327 17623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mem0.alarmCallback!=0 ){
17328 17624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
17329 17625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nUsed+nFull >= mem0.alarmThreshold ){
17626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.nearlyFull = 1;
17330 17627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MallocAlarm(nFull);
17628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
17629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.nearlyFull = 0;
17331 17630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17332 17631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17333 17632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3GlobalConfig.m.xMalloc(nFull);
17633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
17334 17634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==0 && mem0.alarmCallback ){
17335 17635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MallocAlarm(nFull);
17336 17636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3GlobalConfig.m.xMalloc(nFull);
17337 17637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
17338 17639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
17339 17640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFull = sqlite3MallocSize(p);
17340 17641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
17341 17642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusAdd(SQLITE_STATUS_MALLOC_COUNT, 1);
17342 17643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -17348,11 +17649,13 @@
17348 17649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocate memory. This routine is like sqlite3_malloc() except that it
17349 17650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** assumes the memory subsystem has already been initialized.
17350 17651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17351 17652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3Malloc(int n){
17352 17653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p;
17353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( n<=0 || n>=0x7fffff00 ){
17654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n<=0 /* IMP: R-65312-04917 */
17655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || n>=0x7fffff00
17656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
17354 17657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A memory allocation of a number of bytes which is near the maximum
17355 17658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** signed integer value might cause an integer overflow inside of the
17356 17659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xMalloc(). Hence we limit the maximum size to 0x7fffff00, giving
17357 17660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 255 bytes of overhead. SQLite itself will never use anything near
17358 17661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this amount. The only way to reach the limit is with sqlite3_malloc() */
@@ -17362,10 +17665,11 @@
17362 17665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mallocWithAlarm(n, &p);
17363 17666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
17364 17667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
17365 17668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3GlobalConfig.m.xMalloc(n);
17366 17669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( EIGHT_BYTE_ALIGNMENT(p) ); /* IMP: R-04675-44850 */
17367 17671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p;
17368 17672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17369 17673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17370 17674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17371 17675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This version of the memory allocation is for use by the application.
@@ -17399,64 +17703,70 @@
17399 17703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** embedded processor.
17400 17704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17401 17705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
17402 17706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p;
17403 17707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( n>0 );
17708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(mem0.mutex);
17710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
17711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = mem0.pScratchFree;
17712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.pScratchFree = mem0.pScratchFree->pNext;
17713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.nScratchFree--;
17714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
17715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
17716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(mem0.mutex);
17717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
17718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3GlobalConfig.bMemstat ){
17719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
17720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = mallocWithAlarm(n, &p);
17721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
17722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(mem0.mutex);
17723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
17724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(mem0.mutex);
17725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = sqlite3GlobalConfig.m.xMalloc(n);
17726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
17728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
17729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_notheld(mem0.mutex) );
17730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17404 17731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17405 17732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
17406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Verify that no more than two scratch allocation per thread
17407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is outstanding at one time. (This is only checked in the
17733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Verify that no more than two scratch allocations per thread
17734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are outstanding at one time. (This is only checked in the
17408 17735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** single-threaded case since checking in the multi-threaded case
17409 17736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** would be much more complicated.) */
17410 17737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( scratchAllocOut<=1 );
17411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
17412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3GlobalConfig.szScratch<n ){
17414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto scratch_overflow;
17415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
17416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_enter(mem0.mutex);
17417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( mem0.nScratchFree==0 ){
17418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_leave(mem0.mutex);
17419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto scratch_overflow;
17420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
17421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
17422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i = mem0.aScratchFree[--mem0.nScratchFree];
17423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i *= sqlite3GlobalConfig.szScratch;
17424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
17425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
17426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_leave(mem0.mutex);
17427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p = (void*)&((char*)sqlite3GlobalConfig.pScratch)[i];
17428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (((u8*)p - (u8*)0) & 7)==0 );
17429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
17432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- scratchAllocOut = p!=0;
17433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
17434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p;
17436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- scratch_overflow:
17438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3GlobalConfig.bMemstat ){
17439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_enter(mem0.mutex);
17440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
17441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = mallocWithAlarm(n, &p);
17442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
17443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_leave(mem0.mutex);
17444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
17445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p = sqlite3GlobalConfig.m.xMalloc(n);
17446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
17447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
17448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
17449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- scratchAllocOut = p!=0;
17450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
17451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p;
17738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p ) scratchAllocOut++;
17739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
17740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p;
17452 17742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17453 17743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ScratchFree(void *p){
17454 17744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p ){
17455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3GlobalConfig.pScratch==0
17456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || p<sqlite3GlobalConfig.pScratch
17457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || p>=(void*)mem0.aScratchFree ){
17745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
17747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Verify that no more than two scratch allocation per thread
17748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is outstanding at one time. (This is only checked in the
17749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** single-threaded case since checking in the multi-threaded case
17750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** would be much more complicated.) */
17751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
17752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ scratchAllocOut--;
17753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
17754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
17755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p>=sqlite3GlobalConfig.pScratch && p<mem0.pScratchEnd ){
17756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Release memory from the SQLITE_CONFIG_SCRATCH allocation */
17757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ScratchFreeslot *pSlot;
17758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSlot = (ScratchFreeslot*)p;
17759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_enter(mem0.mutex);
17760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSlot->pNext = mem0.pScratchFree;
17761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.pScratchFree = pSlot;
17762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mem0.nScratchFree++;
17763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( mem0.nScratchFree<=sqlite3GlobalConfig.nScratch );
17764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
17765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_mutex_leave(mem0.mutex);
17766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
17767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Release memory back to the heap */
17458 17768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_SCRATCH) );
17459 17769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugNoType(p, ~MEMTYPE_SCRATCH) );
17460 17770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
17461 17771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bMemstat ){
17462 17772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSize = sqlite3MallocSize(p);
@@ -17467,30 +17777,10 @@
17467 17777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.m.xFree(p);
17468 17778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
17469 17779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
17470 17780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.m.xFree(p);
17471 17781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
17473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
17474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i = (int)((u8*)p - (u8*)sqlite3GlobalConfig.pScratch);
17475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i /= sqlite3GlobalConfig.szScratch;
17476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( i>=0 && i<sqlite3GlobalConfig.nScratch );
17477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_enter(mem0.mutex);
17478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( mem0.nScratchFree<(u32)sqlite3GlobalConfig.nScratch );
17479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mem0.aScratchFree[mem0.nScratchFree++] = i;
17480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
17481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_mutex_leave(mem0.mutex);
17482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
17484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Verify that no more than two scratch allocation per thread
17485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is outstanding at one time. (This is only checked in the
17486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** single-threaded case since checking in the multi-threaded case
17487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** would be much more complicated.) */
17488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( scratchAllocOut>=1 && scratchAllocOut<=2 );
17489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- scratchAllocOut = 0;
17490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
17491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
17492 17782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17493 17783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17494 17784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17495 17785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17496 17786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -17527,11 +17817,11 @@
17527 17817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17528 17818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17529 17819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Free memory previously obtained from sqlite3Malloc().
17530 17820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17531 17821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_free(void *p){
17532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p==0 ) return;
17822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 ) return; /* IMP: R-49053-54554 */
17533 17823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
17534 17824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
17535 17825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bMemstat ){
17536 17826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
17537 17827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
@@ -17574,21 +17864,24 @@
17574 17864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
17575 17865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
17576 17866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOld, nNew;
17577 17867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pNew;
17578 17868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOld==0 ){
17579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3Malloc(nBytes);
17869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3Malloc(nBytes); /* IMP: R-28354-25769 */
17580 17870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17581 17871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nBytes<=0 ){
17582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(pOld);
17872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pOld); /* IMP: R-31593-10574 */
17583 17873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
17584 17874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17585 17875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nBytes>=0x7fffff00 ){
17586 17876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */
17587 17877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
17588 17878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17589 17879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOld = sqlite3MallocSize(pOld);
17880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second
17881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument to xRealloc is always a value returned by a prior call to
17882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** xRoundup. */
17590 17883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);
17591 17884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nOld==nNew ){
17592 17885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = pOld;
17593 17886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( sqlite3GlobalConfig.bMemstat ){
17594 17887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(mem0.mutex);
@@ -17610,10 +17903,11 @@
17610 17903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17611 17904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mem0.mutex);
17612 17905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
17613 17906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
17614 17907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-04675-44850 */
17615 17909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pNew;
17616 17910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
17617 17911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17618 17912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17619 17913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The public interface to sqlite3Realloc. Make sure that the memory
@@ -19773,10 +20067,16 @@
19773 20067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define UpperToLower sqlite3UpperToLower
19774 20068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19775 20069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19776 20070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Some systems have stricmp(). Others have strcasecmp(). Because
19777 20071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** there is no consistency, we will define our own.
20072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
20073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-20522-24639 The sqlite3_strnicmp() API allows
20074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** applications and extensions to compare the contents of two buffers
20075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** containing UTF-8 strings in a case-independent fashion, using the same
20076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** definition of case independence that SQLite uses internally when
20077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** comparing identifiers.
19778 20078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19779 20079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3StrICmp(const char *zLeft, const char *zRight){
19780 20080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
register unsigned char *a, *b;
19781 20081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a = (unsigned char *)zLeft;
19782 20082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
b = (unsigned char *)zRight;
@@ -19790,125 +20090,115 @@
19790 20090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( N-- > 0 && *a!=0 && UpperToLower[*a]==UpperToLower[*b]){ a++; b++; }
19791 20091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return N<0 ? 0 : UpperToLower[*a] - UpperToLower[*b];
19792 20092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19793 20093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19794 20094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return TRUE if z is a pure numeric string. Return FALSE and leave
19796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** *realnum unchanged if the string contains any character which is not
19797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** part of a number.
19798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
19799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the string is pure numeric, set *realnum to TRUE if the string
19800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** contains the '.' character or an "E+000" style exponentiation suffix.
19801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Otherwise set *realnum to FALSE. Note that just becaue *realnum is
19802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** false does not mean that the number can be successfully converted into
19803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** an integer - it might be too big.
19804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
19805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** An empty string is considered non-numeric.
19806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
19807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3IsNumber(const char *z, int *realnum, u8 enc){
20095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The string z[] is an text representation of a real number.
20096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert this string to a double and write it into *pResult.
20097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
20098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The string z[] is length bytes in length (bytes, not characters) and
20099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** uses the encoding enc. The string is not necessarily zero-terminated.
20100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
20101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return TRUE if the result is a valid real number (or integer) and FALSE
20102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the string is empty or contains extraneous text. Valid numbers
20103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are in one of these formats:
20104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
20105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [+-]digits[E[+-]digits]
20106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [+-]digits.[digits][E[+-]digits]
20107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [+-].digits[E[+-]digits]
20108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
20109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Leading and trailing whitespace is ignored for the purpose of determining
20110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** validity.
20111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
20112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If some prefix of the input string is a valid number, this routine
20113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns FALSE but it still converts the prefix and writes the result
20114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into *pResult.
20115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
20116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult, int length, u8 enc){
20117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_FLOATING_POINT
19808 20118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int incr = (enc==SQLITE_UTF8?1:2);
19809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( enc==SQLITE_UTF16BE ) z++;
19810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( *z=='-' || *z=='+' ) z += incr;
19811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !sqlite3Isdigit(*z) ){
19812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
19813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
19814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z += incr;
19815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *realnum = 0;
19816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){ z += incr; }
19817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_FLOATING_POINT
19818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( *z=='.' ){
19819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z += incr;
19820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !sqlite3Isdigit(*z) ) return 0;
19821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){ z += incr; }
19822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *realnum = 1;
19823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
19824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( *z=='e' || *z=='E' ){
19825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z += incr;
19826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( *z=='+' || *z=='-' ) z += incr;
19827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !sqlite3Isdigit(*z) ) return 0;
19828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){ z += incr; }
19829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *realnum = 1;
19830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
19831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
19832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return *z==0;
19833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
19834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
19835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
19836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The string z[] is an ASCII representation of a real number.
19837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert this string to a double.
19838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
19839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine assumes that z[] really is a valid number. If it
19840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is not, the result is undefined.
19841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
19842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine is used instead of the library atof() function because
19843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the library atof() might want to use "," as the decimal point instead
19844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of "." depending on how locale is set. But that would cause problems
19845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for SQL. So this routine always uses "." regardless of locale.
19846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
19847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3AtoF(const char *z, double *pResult){
19848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_FLOATING_POINT
19849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zBegin = z;
20119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zEnd = z + length;
19850 20120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* sign * significand * (10 ^ (esign * exponent)) */
19851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int sign = 1; /* sign of significand */
19852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 s = 0; /* significand */
19853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int d = 0; /* adjust exponent for shifting decimal point */
19854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int esign = 1; /* sign of exponent */
19855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int e = 0; /* exponent */
20121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sign = 1; /* sign of significand */
20122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 s = 0; /* significand */
20123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int d = 0; /* adjust exponent for shifting decimal point */
20124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int esign = 1; /* sign of exponent */
20125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int e = 0; /* exponent */
20126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eValid = 1; /* True exponent is either not used or is well-formed */
19856 20127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double result;
19857 20128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDigits = 0;
19858 20129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pResult = 0.0; /* Default return value, in case of an error */
20131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
20132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( enc==SQLITE_UTF16BE ) z++;
20133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19859 20134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* skip leading spaces */
19860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isspace(*z) ) z++;
20135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
20136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z>=zEnd ) return 0;
20137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19861 20138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* get sign of significand */
19862 20139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z=='-' ){
19863 20140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sign = -1;
19864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
20141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr;
19865 20142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( *z=='+' ){
19866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
20143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr;
19867 20144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19868 20146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* skip leading zeroes */
19869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( z[0]=='0' ) z++, nDigits++;
20147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && z[0]=='0' ) z+=incr, nDigits++;
19870 20148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19871 20149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* copy max significant digits to significand */
19872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
20150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
19873 20151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s = s*10 + (*z - '0');
19874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++, nDigits++;
20152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr, nDigits++;
19875 20153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19876 20155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* skip non-significant significand digits
19877 20156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (increase exponent by d to shift decimal left) */
19878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ) z++, nDigits++, d++;
20157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++, d++;
20158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z>=zEnd ) goto do_atof_calc;
19879 20159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19880 20160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* if decimal point is present */
19881 20161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z=='.' ){
19882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
20162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr;
19883 20163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* copy digits from after decimal to significand
19884 20164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (decrease exponent by d to shift decimal right) */
19885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
20165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && sqlite3Isdigit(*z) && s<((LARGEST_INT64-9)/10) ){
19886 20166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
s = s*10 + (*z - '0');
19887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++, nDigits++, d--;
20167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr, nDigits++, d--;
19888 20168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19889 20169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* skip non-significant digits */
19890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ) z++, nDigits++;
20170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && sqlite3Isdigit(*z) ) z+=incr, nDigits++;
19891 20171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z>=zEnd ) goto do_atof_calc;
19892 20173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19893 20174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* if exponent is present */
19894 20175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z=='e' || *z=='E' ){
19895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
20176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr;
20177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eValid = 0;
20178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z>=zEnd ) goto do_atof_calc;
19896 20179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* get sign of exponent */
19897 20180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z=='-' ){
19898 20181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
esign = -1;
19899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
20182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr;
19900 20183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( *z=='+' ){
19901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
20184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr;
19902 20185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19903 20186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* copy digits to exponent */
19904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isdigit(*z) ){
20187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && sqlite3Isdigit(*z) ){
19905 20188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e = e*10 + (*z - '0');
19906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z++;
20189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z+=incr;
20190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eValid = 1;
19907 20191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19908 20192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19909 20193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* skip trailing spaces */
20195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nDigits && eValid ){
20196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z<zEnd && sqlite3Isspace(*z) ) z+=incr;
20197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
20198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
20199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do_atof_calc:
19910 20200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* adjust exponent by d, and update sign */
19911 20201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e = (e*esign) + d;
19912 20202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( e<0 ) {
19913 20203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
esign = -1;
19914 20204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
e *= -1;
@@ -19963,132 +20253,104 @@
19963 20253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19964 20254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19965 20255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* store the result */
19966 20256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pResult = result;
19967 20257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* return number of characters used */
19969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (int)(z - zBegin);
20258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* return true if number and no extra non-whitespace chracters after */
20259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return z>=zEnd && nDigits>0 && eValid;
19970 20260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
19971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3Atoi64(z, pResult);
20261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return !sqlite3Atoi64(z, pResult, length, enc);
19972 20262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_FLOATING_POINT */
19973 20263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19974 20264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19975 20265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19976 20266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Compare the 19-character string zNum against the text representation
19977 20267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value 2^63: 9223372036854775808. Return negative, zero, or positive
19978 20268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if zNum is less than, equal to, or greater than the string.
20269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Note that zNum must contain exactly 19 characters.
19979 20270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19980 20271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Unlike memcmp() this routine is guaranteed to return the difference
19981 20272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the values of the last digit if the only difference is in the
19982 20273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** last digit. So, for example,
19983 20274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** compare2pow63("9223372036854775800")
20275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** compare2pow63("9223372036854775800", 1)
19985 20276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19986 20277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will return -8.
19987 20278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int compare2pow63(const char *zNum){
19989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int c;
19990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- c = memcmp(zNum,"922337203685477580",18)*10;
20279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int compare2pow63(const char *zNum, int incr){
20280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int c = 0;
20281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
20282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 012345678901234567 */
20283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *pow63 = "922337203685477580";
20284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; c==0 && i<18; i++){
20285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c = (zNum[i*incr]-pow63[i])*10;
20286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19991 20287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c==0 ){
19992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- c = zNum[18] - '8';
20288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c = zNum[18*incr] - '8';
19993 20289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( c==(-1) );
19994 20290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( c==0 );
19995 20291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( c==(+1) );
19996 20292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19997 20293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return c;
19998 20294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19999 20295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20000 20296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20001 20297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
20002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return TRUE if zNum is a 64-bit signed integer and write
20003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the value of the integer into *pNum. If zNum is not an integer
20004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or is an integer that is too large to be expressed with 64 bits,
20005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then return false.
20298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert zNum to a 64-bit signed integer and write
20299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the value of the integer into *pNum.
20300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If zNum is exactly 9223372036854665808, return 2.
20301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is a special case as the context will determine
20302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if it is too big (used as a negative).
20303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If zNum is not an integer or is an integer that
20304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is too large to be expressed with 64 bits,
20305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then return 1. Otherwise return 0.
20006 20306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
20007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** When this routine was originally written it dealt with only
20008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 32-bit numbers. At that time, it was much faster than the
20009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** atoi() library routine in RedHat 7.2.
20307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** length is the number of bytes in the string (bytes, not characters).
20308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The string is not necessarily zero-terminated. The encoding is
20309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** given by enc.
20010 20310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum){
20311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3Atoi64(const char *zNum, i64 *pNum, int length, u8 enc){
20312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int incr = (enc==SQLITE_UTF8?1:2);
20012 20313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 v = 0;
20013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int neg;
20014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i, c;
20314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int neg = 0; /* assume positive */
20315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
20316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int c = 0;
20015 20317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zStart;
20016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( sqlite3Isspace(*zNum) ) zNum++;
20318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zEnd = zNum + length;
20319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( enc==SQLITE_UTF16BE ) zNum++;
20320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( zNum<zEnd && sqlite3Isspace(*zNum) ) zNum+=incr;
20321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zNum>=zEnd ) goto do_atoi_calc;
20017 20322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *zNum=='-' ){
20018 20323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
neg = 1;
20019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zNum++;
20324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zNum+=incr;
20020 20325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( *zNum=='+' ){
20021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- neg = 0;
20022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zNum++;
20023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
20024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- neg = 0;
20326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zNum+=incr;
20025 20327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ do_atoi_calc:
20026 20329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zStart = zNum;
20027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( zNum[0]=='0' ){ zNum++; } /* Skip over leading zeros. Ticket #2454 */
20028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; (c=zNum[i])>='0' && c<='9'; i++){
20330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( zNum<zEnd && zNum[0]=='0' ){ zNum+=incr; } /* Skip leading zeros. */
20331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; &zNum[i]<zEnd && (c=zNum[i])>='0' && c<='9'; i+=incr){
20029 20332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = v*10 + c - '0';
20030 20333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20031 20334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pNum = neg ? -v : v;
20032 20335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==18 );
20033 20336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==19 );
20034 20337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==20 );
20035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( c!=0 || (i==0 && zStart==zNum) || i>19 ){
20338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (c!=0 && &zNum[i]<zEnd) || (i==0 && zStart==zNum) || i>19*incr ){
20036 20339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* zNum is empty or contains non-numeric text or is longer
20037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** than 19 digits (thus guaranting that it is too large) */
20038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
20039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( i<19 ){
20340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than 19 digits (thus guaranteeing that it is too large) */
20341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
20342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( i<19*incr ){
20040 20343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Less than 19 digits, so we know that it fits in 64 bits */
20041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
20344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
20042 20345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
20043 20346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 19-digit numbers must be no larger than 9223372036854775807 if positive
20044 20347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or 9223372036854775808 if negative. Note that 9223372036854665808
20045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is 2^63. */
20046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return compare2pow63(zNum)<neg;
20047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
20048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
20049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
20051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The string zNum represents an unsigned integer. The zNum string
20052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** consists of one or more digit characters and is terminated by
20053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a zero character. Any stray characters in zNum result in undefined
20054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** behavior.
20055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
20056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the unsigned integer that zNum represents will fit in a
20057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 64-bit signed integer, return TRUE. Otherwise return FALSE.
20058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
20059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the negFlag parameter is true, that means that zNum really represents
20060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a negative number. (The leading "-" is omitted from zNum.) This
20061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** parameter is needed to determine a boundary case. A string
20062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of "9223373036854775808" returns false if negFlag is false or true
20063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if negFlag is true.
20064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
20065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Leading zeros are ignored.
20066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
20067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3FitsIn64Bits(const char *zNum, int negFlag){
20068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
20069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int neg = 0;
20070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( zNum[0]>='0' && zNum[0]<='9' ); /* zNum is an unsigned number */
20072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( negFlag ) neg = 1-neg;
20074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( *zNum=='0' ){
20075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zNum++; /* Skip leading zeros. Ticket #2454 */
20076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
20077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; zNum[i]; i++){ assert( zNum[i]>='0' && zNum[i]<='9' ); }
20078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( i==18 );
20079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( i==19 );
20080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( i==20 );
20081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i<19 ){
20082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Guaranteed to fit if less than 19 digits */
20083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
20084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( i>19 ){
20085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Guaranteed to be too big if greater than 19 digits */
20086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
20087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
20088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Compare against 2^63. */
20089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return compare2pow63(zNum)<neg;
20348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is 2^63. Return 1 if to large */
20349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c=compare2pow63(zNum, incr);
20350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c==0 && neg==0 ) return 2; /* too big, exactly 9223372036854665808 */
20351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return c<neg ? 0 : 1;
20090 20352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20091 20353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
20092 20354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20093 20355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
20094 20356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If zNum represents an integer that will fit in 32-bits, then set
@@ -26177,11 +26439,11 @@
26177 26439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto shmpage_out;
26178 26440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26179 26441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->apRegion = apNew;
26180 26442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while(pShmNode->nRegion<=iRegion){
26181 26443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pMem = mmap(0, szRegion, PROT_READ|PROT_WRITE,
26182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MAP_SHARED, pShmNode->h, iRegion*szRegion
26444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MAP_SHARED, pShmNode->h, pShmNode->nRegion*szRegion
26183 26445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
26184 26446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pMem==MAP_FAILED ){
26185 26447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR;
26186 26448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto shmpage_out;
26187 26449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -28000,17 +28262,20 @@
28000 28262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int proxyGetHostID(unsigned char *pHostID, int *pError){
28001 28263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct timespec timeout = {1, 0}; /* 1 sec timeout */
28002 28264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
28003 28265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(PROXY_HOSTIDLEN == sizeof(uuid_t));
28004 28266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pHostID, 0, PROXY_HOSTIDLEN);
28267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(__MAX_OS_X_VERSION_MIN_REQUIRED)\
28268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && __MAC_OS_X_VERSION_MIN_REQUIRED<1050
28005 28269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( gethostuuid(pHostID, &timeout) ){
28006 28270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int err = errno;
28007 28271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pError ){
28008 28272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pError = err;
28009 28273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28010 28274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR;
28011 28275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
28276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
28012 28277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
28013 28278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* simulate multiple hosts by creating unique hostid file paths */
28014 28279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_hostid_num != 0){
28015 28280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pHostID[0] = (char)(pHostID[0] + (char)(sqlite3_hostid_num & 0xFF));
28016 28281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -30339,10 +30604,18 @@
30339 30604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN;
30340 30605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30341 30606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30342 30607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WAL
30343 30608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
30610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Windows will only let you create file view mappings
30611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on allocation size granularity boundaries.
30612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** During sqlite3_os_init() we do a GetSystemInfo()
30613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to get the granularity size.
30614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
30615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SYSTEM_INFO winSysInfo;
30616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
30344 30617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
30345 30618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Helper functions to obtain and relinquish the global mutex. The
30346 30619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** global mutex is used to protect the winLockInfo objects used by
30347 30620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this file, all of which may be shared by multiple threads.
30348 30621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -30507,19 +30780,26 @@
30507 30780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by VFS shared-memory methods.
30508 30781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
30509 30782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void winShmPurge(sqlite3_vfs *pVfs, int deleteFlag){
30510 30783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShmNode **pp;
30511 30784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShmNode *p;
30785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BOOL bRc;
30512 30786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( winShmMutexHeld() );
30513 30787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pp = &winShmNodeList;
30514 30788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (p = *pp)!=0 ){
30515 30789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nRef==0 ){
30516 30790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
30517 30791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->mutex ) sqlite3_mutex_free(p->mutex);
30518 30792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nRegion; i++){
30519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UnmapViewOfFile(p->aRegion[i].pMap);
30520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- CloseHandle(p->aRegion[i].hMap);
30793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRc = UnmapViewOfFile(p->aRegion[i].pMap);
30794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("SHM-PURGE pid-%d unmap region=%d %s\n",
30795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (int)GetCurrentProcessId(), i,
30796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRc ? "ok" : "failed"));
30797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRc = CloseHandle(p->aRegion[i].hMap);
30798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("SHM-PURGE pid-%d close region=%d %s\n",
30799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (int)GetCurrentProcessId(), i,
30800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRc ? "ok" : "failed"));
30521 30801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30522 30802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->hFile.h != INVALID_HANDLE_VALUE ){
30523 30803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOErrorBenign(1);
30524 30804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winClose((sqlite3_file *)&p->hFile);
30525 30805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOErrorBenign(0);
@@ -30592,14 +30872,15 @@
30592 30872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);
30593 30873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pShmNode->mutex==0 ){
30594 30874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
30595 30875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto shm_open_err;
30596 30876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
30597 30878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = winOpen(pDbFd->pVfs,
30598 30879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->zFilename, /* Name of the file (UTF-8) */
30599 30880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(sqlite3_file*)&pShmNode->hFile, /* File handle here */
30600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
30881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_OPEN_WAL | SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, /* Mode flags */
30601 30882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0);
30602 30883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=rc ){
30603 30884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_CANTOPEN_BKPT;
30604 30885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto shm_open_err;
30605 30886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -30903,14 +31184,22 @@
30903 31184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pMap = 0; /* Mapped memory region */
30904 31185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30905 31186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hMap = CreateFileMapping(pShmNode->hFile.h,
30906 31187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NULL, PAGE_READWRITE, 0, nByte, NULL
30907 31188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
31189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("SHM-MAP pid-%d create region=%d nbyte=%d %s\n",
31190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (int)GetCurrentProcessId(), pShmNode->nRegion, nByte,
31191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hMap ? "ok" : "failed"));
30908 31192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( hMap ){
31193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOffset = pShmNode->nRegion*szRegion;
31194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
30909 31195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMap = MapViewOfFile(hMap, FILE_MAP_WRITE | FILE_MAP_READ,
30910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0, 0, nByte
31196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, iOffset - iOffsetShift, szRegion + iOffsetShift
30911 31197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
31198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("SHM-MAP pid-%d map region=%d offset=%d size=%d %s\n",
31199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (int)GetCurrentProcessId(), pShmNode->nRegion, iOffset, szRegion,
31200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMap ? "ok" : "failed"));
30912 31201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30913 31202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pMap ){
30914 31203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->lastErrno = GetLastError();
30915 31204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_IOERR;
30916 31205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( hMap ) CloseHandle(hMap);
@@ -30923,12 +31212,14 @@
30923 31212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30924 31213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30925 31214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
30926 31215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
shmpage_out:
30927 31216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pShmNode->nRegion>iRegion ){
31217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOffset = iRegion*szRegion;
31218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOffsetShift = iOffset % winSysInfo.dwAllocationGranularity;
30928 31219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *p = (char *)pShmNode->aRegion[iRegion].pMap;
30929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pp = (void *)&p[iRegion*szRegion];
31220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pp = (void *)&p[iOffsetShift];
30930 31221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
30931 31222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp = 0;
30932 31223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
30933 31224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(pShmNode->mutex);
30934 31225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -31151,13 +31442,64 @@
31151 31442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD dwFlagsAndAttributes = 0;
31152 31443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
31153 31444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isTemp = 0;
31154 31445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31155 31446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *pFile = (winFile*)id;
31156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *zConverted; /* Filename in OS encoding */
31157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
31158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char zTmpname[MAX_PATH+1]; /* Buffer used to create temp filename */
31447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *zConverted; /* Filename in OS encoding */
31448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zUtf8Name = zName; /* Filename in UTF-8 encoding */
31449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If argument zPath is a NULL pointer, this function is required to open
31451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a temporary file. Use this buffer to store the file name in.
31452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char zTmpname[MAX_PATH+1]; /* Buffer used to create temp filename */
31454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK; /* Function Return Code */
31456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(NDEBUG) || SQLITE_OS_WINCE
31457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eType = flags&0xFFFFFF00; /* Type of file to open */
31458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isExclusive = (flags & SQLITE_OPEN_EXCLUSIVE);
31461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isDelete = (flags & SQLITE_OPEN_DELETEONCLOSE);
31462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isCreate = (flags & SQLITE_OPEN_CREATE);
31463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef NDEBUG
31464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isReadonly = (flags & SQLITE_OPEN_READONLY);
31465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isReadWrite = (flags & SQLITE_OPEN_READWRITE);
31467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef NDEBUG
31469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int isOpenJournal = (isCreate && (
31470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType==SQLITE_OPEN_MASTER_JOURNAL
31471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_MAIN_JOURNAL
31472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_WAL
31473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ));
31474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check the following statements are true:
31477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
31478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (a) Exactly one of the READWRITE and READONLY flags must be set, and
31479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (b) if CREATE is set, then READWRITE must also be set, and
31480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (c) if EXCLUSIVE is set, then CREATE must also be set.
31481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (d) if DELETEONCLOSE is set, then CREATE must also be set.
31482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
31483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
31484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(isCreate==0 || isReadWrite);
31485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(isExclusive==0 || isCreate);
31486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(isDelete==0 || isCreate);
31487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The main DB, main journal, WAL file and master journal are never
31489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** automatically deleted. Nor are they ever temporary files. */
31490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
31491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
31492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
31493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
31494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Assert that the upper layer has set one of the "file-type" flags. */
31496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB
31497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
31498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
31499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
31500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
31159 31501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31160 31502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( id!=0 );
31161 31503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(pVfs);
31162 31504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31163 31505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->h = INVALID_HANDLE_VALUE;
@@ -31164,11 +31506,12 @@
31164 31506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31165 31507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the second argument to this function is NULL, generate a
31166 31508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** temporary file name to use
31167 31509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31168 31510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !zUtf8Name ){
31169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = getTempname(MAX_PATH+1, zTmpname);
31511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(isDelete && !isOpenJournal);
31512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = getTempname(MAX_PATH+1, zTmpname);
31170 31513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
31171 31514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
31172 31515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31173 31516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUtf8Name = zTmpname;
31174 31517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -31177,33 +31520,35 @@
31177 31520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zConverted = convertUtf8Filename(zUtf8Name);
31178 31521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zConverted==0 ){
31179 31522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
31180 31523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31181 31524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( flags & SQLITE_OPEN_READWRITE ){
31525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isReadWrite ){
31183 31526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
31184 31527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
31185 31528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwDesiredAccess = GENERIC_READ;
31186 31529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31187 31531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is
31188 31532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** created. SQLite doesn't use it to indicate "exclusive access"
31189 31533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as it is usually understood.
31190 31534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(!(flags & SQLITE_OPEN_EXCLUSIVE) || (flags & SQLITE_OPEN_CREATE));
31192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( flags & SQLITE_OPEN_EXCLUSIVE ){
31535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isExclusive ){
31193 31536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Creates a new file, only if it does not already exist. */
31194 31537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the file exists, it fails. */
31195 31538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwCreationDisposition = CREATE_NEW;
31196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( flags & SQLITE_OPEN_CREATE ){
31539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( isCreate ){
31197 31540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open existing file, or create if it doesn't exist */
31198 31541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwCreationDisposition = OPEN_ALWAYS;
31199 31542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
31200 31543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opens a file, only if it exists. */
31201 31544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwCreationDisposition = OPEN_EXISTING;
31202 31545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31203 31547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwShareMode = FILE_SHARE_READ | FILE_SHARE_WRITE;
31204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( flags & SQLITE_OPEN_DELETEONCLOSE ){
31548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isDelete ){
31205 31550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
31206 31551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwFlagsAndAttributes = FILE_ATTRIBUTE_HIDDEN;
31207 31552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isTemp = 1;
31208 31553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
31209 31554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwFlagsAndAttributes = FILE_ATTRIBUTE_TEMPORARY
@@ -31216,10 +31561,11 @@
31216 31561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Reports from the internet are that performance is always
31217 31562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** better if FILE_FLAG_RANDOM_ACCESS is used. Ticket #2699. */
31218 31563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
31219 31564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwFlagsAndAttributes |= FILE_FLAG_RANDOM_ACCESS;
31220 31565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31221 31567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isNT() ){
31222 31568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h = CreateFileW((WCHAR*)zConverted,
31223 31569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwDesiredAccess,
31224 31570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwShareMode,
31225 31571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NULL,
@@ -31241,41 +31587,45 @@
31241 31587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwFlagsAndAttributes,
31242 31588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NULL
31243 31589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
31244 31590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31245 31591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31246 31593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("OPEN %d %s 0x%lx %s\n",
31247 31594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h, zName, dwDesiredAccess,
31248 31595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
h==INVALID_HANDLE_VALUE ? "failed" : "ok"));
31596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31249 31597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( h==INVALID_HANDLE_VALUE ){
31250 31598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = GetLastError();
31251 31599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zConverted);
31252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( flags & SQLITE_OPEN_READWRITE ){
31600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isReadWrite ){
31253 31601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return winOpen(pVfs, zName, id,
31254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((flags|SQLITE_OPEN_READONLY)&~SQLITE_OPEN_READWRITE), pOutFlags);
31602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((flags|SQLITE_OPEN_READONLY)&~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)), pOutFlags);
31255 31603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
31256 31604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_CANTOPEN_BKPT;
31257 31605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31258 31606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31259 31608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOutFlags ){
31260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( flags & SQLITE_OPEN_READWRITE ){
31609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isReadWrite ){
31261 31610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pOutFlags = SQLITE_OPEN_READWRITE;
31262 31611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
31263 31612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pOutFlags = SQLITE_OPEN_READONLY;
31264 31613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31265 31614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31266 31616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pFile, 0, sizeof(*pFile));
31267 31617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->pMethod = &winIoMethod;
31268 31618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->h = h;
31269 31619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = NO_ERROR;
31270 31620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->pVfs = pVfs;
31271 31621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->pShm = 0;
31272 31622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->zPath = zName;
31273 31623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->sectorSize = getSectorSize(pVfs, zUtf8Name);
31624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31274 31625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
31275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (flags & (SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB)) ==
31276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (SQLITE_OPEN_READWRITE|SQLITE_OPEN_MAIN_DB)
31626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isReadWrite && eType==SQLITE_OPEN_MAIN_DB
31277 31627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !winceCreateLock(zName, pFile)
31278 31628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
31279 31629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CloseHandle(h);
31280 31630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zConverted);
31281 31631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_CANTOPEN_BKPT;
@@ -31285,12 +31635,13 @@
31285 31635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
31286 31636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31287 31637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
31288 31638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
free(zConverted);
31289 31639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
31290 31641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OpenCounter(+1);
31291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
31642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
31292 31643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31293 31644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31294 31645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31295 31646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete the named file.
31296 31647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -31804,10 +32155,17 @@
31804 32155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winSleep, /* xSleep */
31805 32156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winCurrentTime, /* xCurrentTime */
31806 32157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winGetLastError, /* xGetLastError */
31807 32158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winCurrentTimeInt64, /* xCurrentTimeInt64 */
31808 32159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
32160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_WAL
32162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* get memory map allocation granularity */
32163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&winSysInfo, 0, sizeof(SYSTEM_INFO));
32164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ GetSystemInfo(&winSysInfo);
32165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert(winSysInfo.dwAllocationGranularity > 0);
32166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
31809 32167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31810 32168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs_register(&winVfs, 1);
31811 32169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
31812 32170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31813 32171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_os_end(void){
@@ -32369,16 +32727,20 @@
32369 32727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Initialize and shutdown the page cache subsystem. Neither of these
32370 32728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** functions are threadsafe.
32371 32729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32372 32730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3PcacheInitialize(void){
32373 32731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.pcache.xInit==0 ){
32732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-26801-64137 If the xInit() method is NULL, then the
32733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** built-in default page cache is used instead of the application defined
32734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** page cache. */
32374 32735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3PCacheSetDefault();
32375 32736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32376 32737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3GlobalConfig.pcache.xInit(sqlite3GlobalConfig.pcache.pArg);
32377 32738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32378 32739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3PcacheShutdown(void){
32379 32740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.pcache.xShutdown ){
32741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-26000-56589 The xShutdown() method may be NULL. */
32380 32742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.pcache.xShutdown(sqlite3GlobalConfig.pcache.pArg);
32381 32743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32382 32744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
32383 32745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32384 32746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -32835,12 +33197,17 @@
32835 33197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32836 33198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PCache1 PCache1;
32837 33199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PgHdr1 PgHdr1;
32838 33200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct PgFreeslot PgFreeslot;
32839 33201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Pointers to structures of this type are cast and returned as
32841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** opaque sqlite3_pcache* handles
33202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Each page cache is an instance of the following object. Every
33203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** open database file (including each in-memory database and each
33204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** temporary or transient database) has a single page cache which
33205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is an instance of this object.
33206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
33207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Pointers to structures of this type are cast and returned as
33208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** opaque sqlite3_pcache* handles.
32842 33209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32843 33210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct PCache1 {
32844 33211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Cache configuration parameters. Page size (szPage) and the purgeable
32845 33212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** flag (bPurgeable) are set when the cache is created. nMax may be
32846 33213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** modified at any time by a call to the pcache1CacheSize() method.
@@ -32896,10 +33263,13 @@
32896 33263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCurrentPage; /* Number of purgeable pages allocated */
32897 33264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgHdr1 *pLruHead, *pLruTail; /* LRU list of unpinned pages */
32898 33265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32899 33266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Variables related to SQLITE_CONFIG_PAGECACHE settings. */
32900 33267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szSlot; /* Size of each free slot */
33268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSlot; /* The number of pcache slots */
33269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nFreeSlot; /* Number of unused pcache slots */
33270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nReserve; /* Try to keep nFreeSlot above this */
32901 33271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pStart, *pEnd; /* Bounds of pagecache malloc range */
32902 33272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgFreeslot *pFree; /* Free page blocks */
32903 33273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isInit; /* True if initialized */
32904 33274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} pcache1_g;
32905 33275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -32943,10 +33313,12 @@
32943 33313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *pBuf, int sz, int n){
32944 33314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pcache1.isInit ){
32945 33315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgFreeslot *p;
32946 33316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sz = ROUNDDOWN8(sz);
32947 33317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.szSlot = sz;
33318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1.nSlot = pcache1.nFreeSlot = n;
33319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1.nReserve = n>90 ? 10 : (n/10 + 1);
32948 33320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.pStart = pBuf;
32949 33321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.pFree = 0;
32950 33322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( n-- ){
32951 33323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = (PgFreeslot*)pBuf;
32952 33324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pNext = pcache1.pFree;
@@ -32969,10 +33341,12 @@
32969 33341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, nByte);
32970 33342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nByte<=pcache1.szSlot && pcache1.pFree ){
32971 33343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pcache1.isInit );
32972 33344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = (PgHdr1 *)pcache1.pFree;
32973 33345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.pFree = pcache1.pFree->pNext;
33346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1.nFreeSlot--;
33347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pcache1.nFreeSlot>=0 );
32974 33348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
32975 33349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
32976 33350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32977 33351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allocate a new buffer using sqlite3Malloc. Before doing so, exit the
32978 33352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** global pcache mutex and unlock the pager-cache object pCache. This is
@@ -33002,10 +33376,12 @@
33002 33376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgFreeslot *pSlot;
33003 33377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
33004 33378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSlot = (PgFreeslot*)p;
33005 33379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSlot->pNext = pcache1.pFree;
33006 33380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.pFree = pSlot;
33381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pcache1.nFreeSlot++;
33382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pcache1.nFreeSlot<=pcache1.nSlot );
33007 33383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
33008 33384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSize;
33009 33385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3MemdebugHasType(p, MEMTYPE_PCACHE) );
33010 33386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
33011 33387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iSize = sqlite3MallocSize(p);
@@ -33014,11 +33390,11 @@
33014 33390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33015 33391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33016 33392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33017 33393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
33018 33394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return the size of a pache allocation
33395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the size of a pcache allocation
33020 33396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33021 33397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int pcache1MemSize(void *p){
33022 33398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pcache1.mutex) );
33023 33399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p>=pcache1.pStart && p<pcache1.pEnd ){
33024 33400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pcache1.szSlot;
@@ -33087,10 +33463,36 @@
33087 33463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1EnterMutex();
33088 33464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1Free(p);
33089 33465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1LeaveMutex();
33090 33466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33091 33467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
33470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if it desirable to avoid allocating a new page cache
33471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** entry.
33472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
33473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If memory was allocated specifically to the page cache using
33474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_CONFIG_PAGECACHE but that memory has all been used, then
33475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it is desirable to avoid allocating a new page cache entry because
33476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** presumably SQLITE_CONFIG_PAGECACHE was suppose to be sufficient
33477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for all page cache needs and we should not need to spill the
33478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** allocation onto the heap.
33479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
33480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Or, the heap is used for all page cache memory put the heap is
33481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** under memory pressure, then again it is desirable to avoid
33482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** allocating a new page cache entry in order to avoid stressing
33483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the heap even further.
33484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
33485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int pcache1UnderMemoryPressure(PCache1 *pCache){
33486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3_mutex_held(pcache1.mutex) );
33487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pcache1.nSlot && pCache->szPage<=pcache1.szSlot ){
33488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pcache1.nFreeSlot<pcache1.nReserve;
33489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
33490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3HeapNearlyFull();
33491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33092 33494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/******************************************************************************/
33093 33495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/******** General Implementation Functions ************************************/
33094 33496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33095 33497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33096 33498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is used to resize the hash table used by the cache passed
@@ -33328,18 +33730,20 @@
33328 33730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** copy of the requested page. If one is found, it is returned.
33329 33731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33330 33732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2. If createFlag==0 and the page is not already in the cache, NULL is
33331 33733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned.
33332 33734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 3. If createFlag is 1, and the page is not already in the cache,
33334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and if either of the following are true, return NULL:
33735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3. If createFlag is 1, and the page is not already in the cache, then
33736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** return NULL (do not allocate a new page) if any of the following
33737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** conditions are true:
33335 33738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33336 33739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (a) the number of pages pinned by the cache is greater than
33337 33740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** PCache1.nMax, or
33741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
33338 33742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (b) the number of pages pinned by the cache is greater than
33339 33743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the sum of nMax for all purgeable caches, less the sum of
33340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** nMin for all other purgeable caches.
33744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nMin for all other purgeable caches, or
33341 33745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33342 33746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 4. If none of the first three conditions apply and the cache is marked
33343 33747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as purgeable, and if one of the following is true:
33344 33748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33345 33749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (a) The number of pages allocated for the cache is already
@@ -33346,10 +33750,13 @@
33346 33750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** PCache1.nMax, or
33347 33751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33348 33752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (b) The number of pages allocated for all purgeable caches is
33349 33753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** already equal to or greater than the sum of nMax for all
33350 33754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** purgeable caches,
33755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
33756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (c) The system is under memory pressure and wants to avoid
33757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** unnecessary pages cache entry allocations
33351 33758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33352 33759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then attempt to recycle a page from the LRU list. If it is the right
33353 33760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** size, return the recycled buffer. Otherwise, free the buffer and
33354 33761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** proceed to step 5.
33355 33762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -33378,10 +33785,11 @@
33378 33785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Step 3 of header comment. */
33379 33786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nPinned = pCache->nPage - pCache->nRecyclable;
33380 33787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( createFlag==1 && (
33381 33788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nPinned>=(pcache1.nMaxPage+pCache->nMin-pcache1.nMinPage)
33382 33789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| nPinned>=(pCache->nMax * 9 / 10)
33790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pcache1UnderMemoryPressure(pCache)
33383 33791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)){
33384 33792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto fetch_out;
33385 33793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33386 33794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33387 33795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){
@@ -33388,11 +33796,13 @@
33388 33796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto fetch_out;
33389 33797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33390 33798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33391 33799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Step 4. Try to recycle a page buffer if appropriate. */
33392 33800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCache->bPurgeable && pcache1.pLruTail && (
33393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (pCache->nPage+1>=pCache->nMax) || pcache1.nCurrentPage>=pcache1.nMaxPage
33801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (pCache->nPage+1>=pCache->nMax)
33802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pcache1.nCurrentPage>=pcache1.nMaxPage
33803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pcache1UnderMemoryPressure(pCache)
33394 33804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
)){
33395 33805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage = pcache1.pLruTail;
33396 33806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1RemoveFromHash(pPage);
33397 33807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1PinPage(pPage);
33398 33808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPage->pCache->szPage!=pCache->szPage ){
@@ -33531,10 +33941,11 @@
33531 33941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33532 33942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Destroy a cache allocated using pcache1Create().
33533 33943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33534 33944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void pcache1Destroy(sqlite3_pcache *p){
33535 33945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PCache1 *pCache = (PCache1 *)p;
33946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCache->bPurgeable || (pCache->nMax==0 && pCache->nMin==0) );
33536 33947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1EnterMutex();
33537 33948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1TruncateUnsafe(pCache, 0);
33538 33949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.nMaxPage -= pCache->nMax;
33539 33950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1.nMinPage -= pCache->nMin;
33540 33951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1EnforceMaxPage();
@@ -33578,11 +33989,11 @@
33578 33989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3PcacheReleaseMemory(int nReq){
33579 33990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFree = 0;
33580 33991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pcache1.pStart==0 ){
33581 33992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PgHdr1 *p;
33582 33993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1EnterMutex();
33583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( (nReq<0 || nFree<nReq) && (p=pcache1.pLruTail) ){
33994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( (nReq<0 || nFree<nReq) && ((p=pcache1.pLruTail)!=0) ){
33584 33995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFree += pcache1MemSize(PGHDR1_TO_PAGE(p));
33585 33996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1PinPage(p);
33586 33997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1RemoveFromHash(p);
33587 33998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pcache1FreePage(p);
33588 33999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -37120,16 +37531,17 @@
37120 37531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the duplicate call is harmless.
37121 37532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
37122 37533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalEndReadTransaction(pPager->pWal);
37123 37534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37124 37535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3WalBeginReadTransaction(pPager->pWal, &changed);
37125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && changed ){
37536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK || changed ){
37126 37537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pager_reset(pPager);
37127 37538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
37128 37539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37129 37540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
37130 37541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
37542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
37131 37543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37132 37544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
37133 37545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is called as part of the transition from PAGER_OPEN
37134 37546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to PAGER_READER state to determine the size of the database file
37135 37547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in pages (assuming the page size currently stored in Pager.pageSize).
@@ -37182,11 +37594,11 @@
37182 37594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37183 37595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnPage = nPage;
37184 37596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
37185 37597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
37186 37598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
37599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_WAL
37188 37600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
37189 37601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check if the *-wal file that corresponds to the database opened by pPager
37190 37602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** exists if the database is not empy, or verify that the *-wal file does
37191 37603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not exist (by deleting it) if the database file is empty.
37192 37604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -38374,10 +38786,17 @@
38374 38786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
journalFileSize = ROUND8(sqlite3MemJournalSize());
38375 38787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38376 38788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38377 38789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the output variable to NULL in case an error occurs. */
38378 38790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppPager = 0;
38791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
38792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_MEMORYDB
38793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( flags & PAGER_MEMORY ){
38794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memDb = 1;
38795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zFilename = 0;
38796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
38797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
38379 38798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38380 38799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Compute and store the full pathname in an allocated buffer pointed
38381 38800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to by zPathname, length nPathname. Or, if this is a temporary file,
38382 38801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** leave both nPathname and zPathname set to 0.
38383 38802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -38385,21 +38804,12 @@
38385 38804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nPathname = pVfs->mxPathname+1;
38386 38805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zPathname = sqlite3Malloc(nPathname*2);
38387 38806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zPathname==0 ){
38388 38807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
38389 38808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_MEMORYDB
38391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( strcmp(zFilename,":memory:")==0 ){
38392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memDb = 1;
38393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zPathname[0] = 0;
38394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else
38395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
38396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
38397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */
38398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);
38399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
38809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zPathname[0] = 0; /* Make sure initialized even if FullPathname() fails */
38810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3OsFullPathname(pVfs, zFilename, nPathname, zPathname);
38401 38811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nPathname = sqlite3Strlen30(zPathname);
38402 38812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && nPathname+8>pVfs->mxPathname ){
38403 38813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This branch is taken when the journal path required by
38404 38814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the database being opened will be more than pVfs->mxPathname
38405 38815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bytes in length. This means the database cannot be opened,
@@ -38450,34 +38860,31 @@
38450 38860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->zFilename = (char*)(pPtr += journalFileSize);
38451 38861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( EIGHT_BYTE_ALIGNMENT(pPager->jfd) );
38452 38862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38453 38863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Fill in the Pager.zFilename and Pager.zJournal buffers, if required. */
38454 38864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zPathname ){
38865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nPathname>0 );
38455 38866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->zJournal = (char*)(pPtr += nPathname + 1);
38456 38867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pPager->zFilename, zPathname, nPathname);
38457 38868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pPager->zJournal, zPathname, nPathname);
38458 38869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&pPager->zJournal[nPathname], "-journal", 8);
38459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pPager->zFilename[0]==0 ){
38460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPager->zJournal[0] = 0;
38461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38462 38870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WAL
38463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else{
38464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPager->zWal = &pPager->zJournal[nPathname+8+1];
38465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(pPager->zWal, zPathname, nPathname);
38466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(&pPager->zWal[nPathname], "-wal", 4);
38467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
38871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPager->zWal = &pPager->zJournal[nPathname+8+1];
38872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pPager->zWal, zPathname, nPathname);
38873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(&pPager->zWal[nPathname], "-wal", 4);
38468 38874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
38469 38875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zPathname);
38470 38876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38471 38877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->pVfs = pVfs;
38472 38878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPager->vfsFlags = vfsFlags;
38473 38879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38474 38880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open the pager file.
38475 38881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zFilename && zFilename[0] && !memDb ){
38882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zFilename && zFilename[0] ){
38477 38883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int fout = 0; /* VFS flags returned by xOpen() */
38478 38884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsOpen(pVfs, pPager->zFilename, pPager->fd, vfsFlags, &fout);
38885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !memDb );
38479 38886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
readOnly = (fout&SQLITE_OPEN_READONLY);
38480 38887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38481 38888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the file was successfully opened for read/write access,
38482 38889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** choose a default page size in case we have to create the
38483 38890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database file. The default page size is the maximum of:
@@ -38927,11 +39334,13 @@
38927 39334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38928 39335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is a WAL file in the file-system, open this database in WAL
38929 39336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mode. Otherwise, the following function call is a no-op.
38930 39337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
38931 39338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pagerOpenWalIfPresent(pPager);
39339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_WAL
38932 39340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPager->pWal==0 || rc==SQLITE_OK );
39341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
38933 39342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
38934 39343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
38935 39344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pagerUseWal(pPager) ){
38936 39345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK );
38937 39346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pagerBeginReadTransaction(pPager);
@@ -43292,11 +43701,11 @@
43292 43701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WALTRACE(("WAL%p: wal-header write %s\n", pWal, rc ? "failed" : "ok"));
43293 43702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
43294 43703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
43295 43704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
43296 43705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
43297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pWal->szPage==szPage );
43706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (int)pWal->szPage==szPage );
43298 43707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
43299 43708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Write the log file. */
43300 43709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=pList; p; p=p->pDirty){
43301 43710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 nDbsize; /* Db-size field for frame header */
43302 43711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iOffset; /* Write offset in log file */
@@ -43952,10 +44361,11 @@
43952 44361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pPage1; /* First page of the database */
43953 44362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 readOnly; /* True if the underlying file is readonly */
43954 44363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 pageSizeFixed; /* True if the page size can no longer be changed */
43955 44364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 secureDelete; /* True if secure_delete is enabled */
43956 44365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 initiallyEmpty; /* Database is empty at start of transaction */
44366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 openFlags; /* Flags to sqlite3BtreeOpen() */
43957 44367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOVACUUM
43958 44368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 autoVacuum; /* True if auto-vacuum is enabled */
43959 44369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 incrVacuum; /* True if incr-vacuum is enabled */
43960 44370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
43961 44371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 maxLocal; /* Maximum local payload in non-LEAFDATA tables */
@@ -46202,15 +46612,24 @@
46202 46612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46203 46613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
46204 46614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Open a database file.
46205 46615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
46206 46616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zFilename is the name of the database file. If zFilename is NULL
46207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a new database with a random name is created. This randomly named
46208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** database file will be deleted when sqlite3BtreeClose() is called.
46617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then an ephemeral database is created. The ephemeral database might
46618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be exclusively in memory, or it might use a disk-based memory cache.
46619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Either way, the ephemeral database will be automatically deleted
46620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** when sqlite3BtreeClose() is called.
46621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
46209 46622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If zFilename is ":memory:" then an in-memory database is created
46210 46623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that is automatically destroyed when it is closed.
46211 46624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
46625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The "flags" parameter is a bitmask that might contain bits
46626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** BTREE_OMIT_JOURNAL and/or BTREE_NO_READLOCK. The BTREE_NO_READLOCK
46627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bit is also set if the SQLITE_NoReadlock flags is set in db->flags.
46628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** These flags are passed through into sqlite3PagerOpen() and must
46629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be the same values as PAGER_OMIT_JOURNAL and PAGER_NO_READLOCK.
46630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
46212 46631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the database is already opened in the same database connection
46213 46632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and we are in shared cache mode, then the open will fail with an
46214 46633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_CONSTRAINT error. We cannot allow two or more BtShared
46215 46634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** objects in the same database connection since doing so will lead
46216 46635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to problems with locking.
@@ -46227,10 +46646,13 @@
46227 46646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Btree *p; /* Handle to return */
46228 46647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex *mutexOpen = 0; /* Prevents a race condition. Ticket #3537 */
46229 46648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Result code from this function */
46230 46649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 nReserve; /* Byte of unused space on each page */
46231 46650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char zDbHeader[100]; /* Database header content */
46651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
46652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* True if opening an ephemeral, temporary database */
46653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int isTempDb = zFilename==0 || zFilename[0]==0;
46232 46654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46233 46655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the variable isMemdb to true for an in-memory database, or
46234 46656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** false for a file-based database. This symbol is only required if
46235 46657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** either of the shared-data or autovacuum features are compiled
46236 46658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into the library.
@@ -46237,17 +46659,34 @@
46237 46659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46238 46660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SHARED_CACHE) || !defined(SQLITE_OMIT_AUTOVACUUM)
46239 46661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_MEMORYDB
46240 46662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int isMemdb = 0;
46241 46663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
46242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const int isMemdb = zFilename && !strcmp(zFilename, ":memory:");
46664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int isMemdb = (zFilename && strcmp(zFilename, ":memory:")==0)
46665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (isTempDb && sqlite3TempInMemory(db));
46243 46666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
46244 46667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
46245 46668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46246 46669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db!=0 );
46247 46670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(db->mutex) );
46671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (flags&0xff)==flags ); /* flags fit in 8 bits */
46248 46672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Only a BTREE_SINGLE database can be BTREE_UNORDERED */
46674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (flags & BTREE_UNORDERED)==0 || (flags & BTREE_SINGLE)!=0 );
46675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
46676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A BTREE_SINGLE database is always a temporary and/or ephemeral */
46677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (flags & BTREE_SINGLE)==0 || isTempDb );
46678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
46679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db->flags & SQLITE_NoReadlock ){
46680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags |= BTREE_NO_READLOCK;
46681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
46682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isMemdb ){
46683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags |= BTREE_MEMORY;
46684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
46685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (isMemdb || isTempDb) ){
46686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
46687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
46249 46688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVfs = db->pVfs;
46250 46689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3MallocZero(sizeof(Btree));
46251 46690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !p ){
46252 46691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
46253 46692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -46261,11 +46700,11 @@
46261 46700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SHARED_CACHE) && !defined(SQLITE_OMIT_DISKIO)
46262 46701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
46263 46702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If this Btree is a candidate for shared cache, try to find an
46264 46703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** existing BtShared object that we can share with
46265 46704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
46266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isMemdb==0 && zFilename && zFilename[0] ){
46705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isMemdb==0 && isTempDb==0 ){
46267 46706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( vfsFlags & SQLITE_OPEN_SHAREDCACHE ){
46268 46707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFullPathname = pVfs->mxPathname+1;
46269 46708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFullPathname = sqlite3Malloc(nFullPathname);
46270 46709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex *mutexShared;
46271 46710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->sharable = 1;
@@ -46336,10 +46775,11 @@
46336 46775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3PagerReadFileheader(pBt->pPager,sizeof(zDbHeader),zDbHeader);
46337 46776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46338 46777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
46339 46778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto btree_open_out;
46340 46779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBt->openFlags = (u8)flags;
46341 46781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt->db = db;
46342 46782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3PagerSetBusyhandler(pBt->pPager, btreeInvokeBusyHandler, pBt);
46343 46783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pBt = pBt;
46344 46784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
46345 46785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt->pCursor = 0;
@@ -46440,10 +46880,18 @@
46440 46880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3PagerClose(pBt->pPager);
46441 46881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46442 46882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pBt);
46443 46883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p);
46444 46884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppBtree = 0;
46885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
46886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the B-Tree was successfully opened, set the pager-cache size to the
46887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** default value. Except, when opening on an existing shared pager-cache,
46888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** do not change the pager-cache size.
46889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
46890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3BtreeSchema(p, 0, 0)==0 ){
46891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3PagerSetCachesize(p->pBt->pPager, SQLITE_DEFAULT_CACHE_SIZE);
46892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
46445 46893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
46446 46894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mutexOpen ){
46447 46895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(mutexOpen) );
46448 46896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mutexOpen);
46449 46897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -51390,15 +51838,16 @@
51390 51838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** flags might not work:
51391 51839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
51392 51840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** BTREE_INTKEY|BTREE_LEAFDATA Used for SQL tables with rowid keys
51393 51841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** BTREE_ZERODATA Used for SQL indices
51394 51842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
51395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int btreeCreateTable(Btree *p, int *piTable, int flags){
51843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int btreeCreateTable(Btree *p, int *piTable, int createTabFlags){
51396 51844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtShared *pBt = p->pBt;
51397 51845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pRoot;
51398 51846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pgno pgnoRoot;
51399 51847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
51848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ptfFlags; /* Page-type flage for the root page of new table */
51400 51849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51401 51850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeHoldsMutex(p) );
51402 51851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pBt->inTransaction==TRANS_WRITE );
51403 51852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !pBt->readOnly );
51404 51853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -51513,12 +51962,18 @@
51513 51962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = allocateBtreePage(pBt, &pRoot, &pgnoRoot, 1, 0);
51514 51963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) return rc;
51515 51964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51516 51965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
51517 51966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3PagerIswriteable(pRoot->pDbPage) );
51518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zeroPage(pRoot, flags | PTF_LEAF);
51967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( createTabFlags & BTREE_INTKEY ){
51968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ptfFlags = PTF_INTKEY | PTF_LEAFDATA | PTF_LEAF;
51969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
51970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ptfFlags = PTF_ZERODATA | PTF_LEAF;
51971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
51972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zeroPage(pRoot, ptfFlags);
51519 51973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3PagerUnref(pRoot->pDbPage);
51974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pBt->openFlags & BTREE_SINGLE)==0 || pgnoRoot==2 );
51520 51975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piTable = (int)pgnoRoot;
51521 51976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
51522 51977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51523 51978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree *p, int *piTable, int flags){
51524 51979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
@@ -52774,11 +53229,14 @@
52774 53229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Error(
52775 53230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDestDb, SQLITE_ERROR, "source and destination must be distinct"
52776 53231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
52777 53232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = 0;
52778 53233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else {
52779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Allocate space for a new sqlite3_backup object */
53234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate space for a new sqlite3_backup object...
53235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
53236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** call to sqlite3_backup_init() and is destroyed by a call to
53237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_backup_finish(). */
52780 53238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = (sqlite3_backup *)sqlite3_malloc(sizeof(sqlite3_backup));
52781 53239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !p ){
52782 53240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Error(pDestDb, SQLITE_NOMEM, 0);
52783 53241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
52784 53242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -53157,10 +53615,13 @@
53157 53615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pDestDb ){
53158 53616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(p->pDestDb->mutex);
53159 53617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53160 53618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeLeave(p->pSrc);
53161 53619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pDestDb ){
53620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-64852-21591 The sqlite3_backup object is created by a
53621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** call to sqlite3_backup_init() and is destroyed by a call to
53622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_backup_finish(). */
53162 53623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p);
53163 53624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53164 53625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(mutex);
53165 53626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
53166 53627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -53408,10 +53869,13 @@
53408 53869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
53409 53870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53410 53871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->z[pMem->n] = 0;
53411 53872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->z[pMem->n+1] = 0;
53412 53873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pMem->flags |= MEM_Term;
53874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
53875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMem->pScopyFrom = 0;
53876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
53413 53877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53414 53878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
53415 53879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
53416 53880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53417 53881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -53528,11 +53992,11 @@
53528 53992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&ctx, 0, sizeof(ctx));
53529 53993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.s.flags = MEM_Null;
53530 53994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.s.db = pMem->db;
53531 53995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.pMem = pMem;
53532 53996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ctx.pFunc = pFunc;
53533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFunc->xFinalize(&ctx);
53997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
53534 53998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
53535 53999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(pMem->db, pMem->zMalloc);
53536 54000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pMem, &ctx.s, sizeof(ctx.s));
53537 54001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = ctx.isError;
53538 54002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -53641,17 +54105,13 @@
53641 54105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pMem->u.i;
53642 54106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & MEM_Real ){
53643 54107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return doubleToInt64(pMem->r);
53644 54108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & (MEM_Str|MEM_Blob) ){
53645 54109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 value;
53646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMem->flags |= MEM_Str;
53647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3VdbeChangeEncoding(pMem, SQLITE_UTF8)
53648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || sqlite3VdbeMemNulTerminate(pMem) ){
53649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
53650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
53651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pMem->z );
53652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Atoi64(pMem->z, &value);
54110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pMem->z || pMem->n==0 );
54111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( pMem->z==0 );
54112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc);
53653 54113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return value;
53654 54114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
53655 54115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
53656 54116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53657 54117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -53677,11 +54137,11 @@
53677 54137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| sqlite3VdbeMemNulTerminate(pMem) ){
53678 54138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
53679 54139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (double)0;
53680 54140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53681 54141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pMem->z );
53682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AtoF(pMem->z, &val);
54142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AtoF(pMem->z, &val, pMem->n, SQLITE_UTF8);
53683 54143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return val;
53684 54144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
53685 54145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* (double)0 In case of SQLITE_OMIT_FLOATING_POINT... */
53686 54146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (double)0;
53687 54147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -53750,25 +54210,23 @@
53750 54210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Every effort is made to force the conversion, even if the input
53751 54211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is a string that does not look completely like a number. Convert
53752 54212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as much of the string as we can and ignore the rest.
53753 54213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
53754 54214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
53755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
53756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 );
53757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
53758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
53759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3VdbeChangeEncoding(pMem, SQLITE_UTF8);
53760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) return rc;
53761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3VdbeMemNulTerminate(pMem);
53762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) return rc;
53763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3Atoi64(pMem->z, &pMem->u.i) ){
53764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MemSetTypeFlag(pMem, MEM_Int);
53765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
53766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pMem->r = sqlite3VdbeRealValue(pMem);
53767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MemSetTypeFlag(pMem, MEM_Real);
53768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeIntegerAffinity(pMem);
53769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
54215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))==0 ){
54216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pMem->flags & (MEM_Blob|MEM_Str))!=0 );
54217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
54218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
54219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemSetTypeFlag(pMem, MEM_Int);
54220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
54221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMem->r = sqlite3VdbeRealValue(pMem);
54222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemSetTypeFlag(pMem, MEM_Real);
54223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeIntegerAffinity(pMem);
54224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pMem->flags & (MEM_Int|MEM_Real|MEM_Null))!=0 );
54227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMem->flags &= ~(MEM_Str|MEM_Blob);
53770 54228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
53771 54229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53772 54230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
53773 54231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
53774 54232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete any previous value and set the value stored in *pMem to NULL.
@@ -53869,10 +54327,32 @@
53869 54327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return n>p->db->aLimit[SQLITE_LIMIT_LENGTH];
53870 54328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53871 54329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
53872 54330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
53873 54331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
54332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
54333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
54334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine prepares a memory cell for modication by breaking
54335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** its link to a shallow copy and by marking any current shallow
54336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** copies of this cell as invalid.
54337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
54338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is used for testing and debugging only - to make sure shallow
54339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** copies are not misused.
54340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
54341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeMemPrepareToChange(Vdbe *pVdbe, Mem *pMem){
54342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
54343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Mem *pX;
54344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=1, pX=&pVdbe->aMem[1]; i<=pVdbe->nMem; i++, pX++){
54345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pX->pScopyFrom==pMem ){
54346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pX->flags |= MEM_Invalid;
54347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pX->pScopyFrom = 0;
54348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pMem->pScopyFrom = 0;
54351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_DEBUG */
54353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
53874 54354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
53875 54355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Size of struct Mem not including the Mem.zMalloc member.
53876 54356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
53877 54357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define MEMCELLSIZE (size_t)(&(((Mem *)0)->zMalloc))
53878 54358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -54237,11 +54717,11 @@
54237 54717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
54238 54718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
54239 54719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
54240 54720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54241 54721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemNulTerminate(pVal);
54722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-59893-45467 */
54243 54723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
54244 54724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pVal->flags&MEM_Blob)==0 );
54245 54725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemStringify(pVal, enc);
54246 54726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
54247 54727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -54285,10 +54765,12 @@
54285 54765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **ppVal /* Write the new value here */
54286 54766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
54287 54767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int op;
54288 54768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zVal = 0;
54289 54769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value *pVal = 0;
54770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int negInt = 1;
54771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zNeg = "";
54290 54772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
54291 54773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pExpr ){
54292 54774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppVal = 0;
54293 54775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
54294 54776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -54301,35 +54783,50 @@
54301 54783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT2
54302 54784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_REGISTER ) op = pExpr->op2;
54303 54785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
54304 54786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
54305 54787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
54788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
54789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Handle negative integers in a single step. This is needed in the
54790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** case when the value is -9223372036854775808.
54791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
54792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op==TK_UMINUS
54793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pExpr->pLeft->op==TK_INTEGER || pExpr->pLeft->op==TK_FLOAT) ){
54794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr = pExpr->pLeft;
54795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op = pExpr->op;
54796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ negInt = -1;
54797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zNeg = "-";
54798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
54306 54799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
54307 54800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_STRING || op==TK_FLOAT || op==TK_INTEGER ){
54308 54801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVal = sqlite3ValueNew(db);
54309 54802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pVal==0 ) goto no_mem;
54310 54803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExprHasProperty(pExpr, EP_IntValue) ){
54311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue);
54804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemSetInt64(pVal, (i64)pExpr->u.iValue*negInt);
54312 54805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
54313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zVal = sqlite3DbStrDup(db, pExpr->u.zToken);
54806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zVal = sqlite3MPrintf(db, "%s%s", zNeg, pExpr->u.zToken);
54314 54807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zVal==0 ) goto no_mem;
54315 54808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ValueSetStr(pVal, -1, zVal, SQLITE_UTF8, SQLITE_DYNAMIC);
54316 54809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_FLOAT ) pVal->type = SQLITE_FLOAT;
54317 54810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54318 54811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (op==TK_INTEGER || op==TK_FLOAT ) && affinity==SQLITE_AFF_NONE ){
54319 54812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ValueApplyAffinity(pVal, SQLITE_AFF_NUMERIC, SQLITE_UTF8);
54320 54813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
54321 54814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ValueApplyAffinity(pVal, affinity, SQLITE_UTF8);
54322 54815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pVal->flags & (MEM_Int|MEM_Real) ) pVal->flags &= ~MEM_Str;
54323 54817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( enc!=SQLITE_UTF8 ){
54324 54818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeEncoding(pVal, enc);
54325 54819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54326 54820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( op==TK_UMINUS ) {
54821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This branch happens for multiple negative signs. Ex: -(-5) */
54327 54822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK==sqlite3ValueFromExpr(db,pExpr->pLeft,enc,affinity,&pVal) ){
54823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemNumerify(pVal);
54328 54824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVal->u.i = -1 * pVal->u.i;
54329 54825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* (double)-1 In case of SQLITE_OMIT_FLOATING_POINT... */
54330 54826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVal->r = (double)-1 * pVal->r;
54827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ValueApplyAffinity(pVal, affinity, enc);
54331 54828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54332 54829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
54333 54830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_BLOB_LITERAL
54334 54831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( op==TK_BLOB ){
54335 54832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nVal;
@@ -56152,13 +56649,14 @@
56152 56649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
56153 56650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<db->nDb; i++){
56154 56651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Btree *pBt = db->aDb[i].pBt;
56155 56652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3BtreeIsInTrans(pBt) ){
56156 56653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char const *zFile = sqlite3BtreeGetJournalname(pBt);
56157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zFile==0 || zFile[0]==0 ){
56654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zFile==0 ){
56158 56655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue; /* Ignore TEMP and :memory: databases */
56159 56656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
56657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( zFile[0]!=0 );
56160 56658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !needSync && !sqlite3BtreeSyncDisabled(pBt) ){
56161 56659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
needSync = 1;
56162 56660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
56163 56661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsWrite(pMaster, zFile, sqlite3Strlen30(zFile)+1, offset);
56164 56662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
offset += sqlite3Strlen30(zFile)+1;
@@ -57618,10 +58116,12 @@
57618 58116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().
57619 58117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
57620 58118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_finalize(sqlite3_stmt *pStmt){
57621 58119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
57622 58120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pStmt==0 ){
58121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL
58122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pointer is a harmless no-op. */
57623 58123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
57624 58124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
57625 58125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = (Vdbe*)pStmt;
57626 58126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = v->db;
57627 58127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_THREADSAFE
@@ -57694,11 +58194,11 @@
57694 58194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *p = (Mem*)pVal;
57695 58195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->flags & (MEM_Blob|MEM_Str) ){
57696 58196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemExpandBlob(p);
57697 58197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->flags &= ~MEM_Str;
57698 58198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->flags |= MEM_Blob;
57699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return p->z;
58199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p->n ? p->z : 0;
57700 58200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
57701 58201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3_value_text(pVal);
57702 58202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57703 58203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
57704 58204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_bytes(sqlite3_value *pVal){
@@ -58048,10 +58548,16 @@
58048 58548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
58049 58549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58050 58550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
58051 58551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Extract the user data from a sqlite3_context structure and return a
58052 58552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointer to it.
58553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
58554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-46798-50301 The sqlite3_context_db_handle() interface
58555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns a copy of the pointer to the database connection (the 1st
58556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parameter) of the sqlite3_create_function() and
58557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_create_function16() routines that originally registered the
58558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** application defined function.
58053 58559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58054 58560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
58055 58561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p && p->pFunc );
58056 58562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p->s.db;
58057 58563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -58257,12 +58763,11 @@
58257 58763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_text()
58258 58764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_text16()
58259 58765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_real()
58260 58766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_bytes()
58261 58767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_bytes16()
58262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
58263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** But not for sqlite3_column_blob(), which never calls malloc().
58768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqiite3_column_blob()
58264 58769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58265 58770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void columnMallocFailure(sqlite3_stmt *pStmt)
58266 58771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
58267 58772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If malloc() failed during an encoding conversion within an
58268 58773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_column_XXX API, then set the return code of the statement to
@@ -58526,10 +59031,16 @@
58526 59031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pVar->flags = MEM_Null;
58527 59032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Error(p->db, SQLITE_OK, 0);
58528 59033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
58529 59034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the bit corresponding to this variable in Vdbe.expmask is set, then
58530 59035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** binding a new value to this variable invalidates the current query plan.
59036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
59037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-48440-37595 If the specific value bound to host
59038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** parameter in the WHERE clause might influence the choice of query plan
59039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for a statement, then the statement will be automatically recompiled,
59040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as if there had been a schema change, on the first sqlite3_step() call
59041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** following any change to the bindings of that parameter.
58531 59042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
58532 59043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->isPrepareV2 &&
58533 59044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((i<32 && p->expmask & ((u32)1 << i)) || p->expmask==0xffffffff)
58534 59045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
58535 59046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->expired = 1;
@@ -59023,10 +59534,21 @@
59023 59534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the code in this file is, therefore, important. See other comments
59024 59535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in this file for details. If in doubt, do not deviate from existing
59025 59536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** commenting and indentation practices when changing or adding code.
59026 59537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
59027 59538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
59539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
59540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Invoke this macro on memory cells just prior to changing the
59541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value of the cell. This macro verifies that shallow copies are
59542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not misused.
59543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
59544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
59545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define memAboutToChange(P,M) sqlite3VdbeMemPrepareToChange(P,M)
59546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
59547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define memAboutToChange(P,M)
59548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
59549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
59028 59550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
59029 59551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following global variable is incremented every time a cursor
59030 59552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** moves, either by the OP_SeekXX, OP_Next, or OP_Prev opcodes. The test
59031 59553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** procedures use this information to make sure that indices are
59032 59554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** working correctly. This variable has no function other than to
@@ -59215,35 +59737,21 @@
59215 59737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** looks like a number, convert it into a number. If it does not
59216 59738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** look like a number, leave it alone.
59217 59739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
59218 59740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void applyNumericAffinity(Mem *pRec){
59219 59741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){
59220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int realnum;
59742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double rValue;
59743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iValue;
59221 59744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 enc = pRec->enc;
59222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemNulTerminate(pRec);
59223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pRec->flags&MEM_Str) && sqlite3IsNumber(pRec->z, &realnum, enc) ){
59224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 value;
59225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zUtf8 = pRec->z;
59226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_UTF16
59227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( enc!=SQLITE_UTF8 ){
59228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pRec->db );
59229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zUtf8 = sqlite3Utf16to8(pRec->db, pRec->z, pRec->n, enc);
59230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !zUtf8 ) return;
59231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
59232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
59233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !realnum && sqlite3Atoi64(zUtf8, &value) ){
59234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRec->u.i = value;
59235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MemSetTypeFlag(pRec, MEM_Int);
59236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
59237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AtoF(zUtf8, &pRec->r);
59238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- MemSetTypeFlag(pRec, MEM_Real);
59239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
59240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_UTF16
59241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( enc!=SQLITE_UTF8 ){
59242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(pRec->db, zUtf8);
59243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
59244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
59745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pRec->flags&MEM_Str)==0 ) return;
59746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
59747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
59748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->u.i = iValue;
59749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->flags |= MEM_Int;
59750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
59751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->r = rValue;
59752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->flags |= MEM_Real;
59245 59753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
59246 59754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
59247 59755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
59248 59756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
59249 59757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -60132,38 +60640,44 @@
60132 60640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opflags==sqlite3OpcodeProperty[pOp->opcode] );
60133 60641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->opflags & OPFLG_OUT2_PRERELEASE ){
60134 60642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2>0 );
60135 60643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2<=p->nMem );
60136 60644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut = &aMem[pOp->p2];
60645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pOut);
60137 60646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemReleaseExternal(pOut);
60138 60647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->flags = MEM_Int;
60139 60648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60140 60649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60141 60650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Sanity checking on other operands */
60142 60651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
60143 60652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pOp->opflags & OPFLG_IN1)!=0 ){
60144 60653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>0 );
60145 60654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1<=p->nMem );
60655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(&aMem[pOp->p1]) );
60146 60656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p1, &aMem[pOp->p1]);
60147 60657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60148 60658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pOp->opflags & OPFLG_IN2)!=0 ){
60149 60659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2>0 );
60150 60660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2<=p->nMem );
60661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(&aMem[pOp->p2]) );
60151 60662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p2, &aMem[pOp->p2]);
60152 60663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60153 60664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pOp->opflags & OPFLG_IN3)!=0 ){
60154 60665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>0 );
60155 60666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3<=p->nMem );
60667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(&aMem[pOp->p3]) );
60156 60668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p3, &aMem[pOp->p3]);
60157 60669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60158 60670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pOp->opflags & OPFLG_OUT2)!=0 ){
60159 60671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2>0 );
60160 60672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2<=p->nMem );
60673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, &aMem[pOp->p2]);
60161 60674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60162 60675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pOp->opflags & OPFLG_OUT3)!=0 ){
60163 60676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>0 );
60164 60677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3<=p->nMem );
60678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, &aMem[pOp->p3]);
60165 60679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60166 60680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
60167 60681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60168 60682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pOp->opcode ){
60169 60683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -60221,10 +60735,11 @@
60221 60735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and then jump to address P2.
60222 60736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60223 60737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Gosub: { /* jump, in1 */
60224 60738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
60225 60739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pIn1->flags & MEM_Dyn)==0 );
60740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pIn1);
60226 60741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->flags = MEM_Int;
60227 60742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->u.i = pc;
60228 60743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p1, pIn1);
60229 60744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2 - 1;
60230 60745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -60428,15 +60943,11 @@
60428 60943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60429 60944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60430 60945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Blob P1 P2 * P4
60431 60946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
60432 60947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 points to a blob of data P1 bytes long. Store this
60433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** blob in register P2. This instruction is not coded directly
60434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** by the compiler. Instead, the compiler layer specifies
60435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** an OP_HexBlob opcode, with the hex string representation of
60436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the blob as P4. This opcode is transformed to an OP_Blob
60437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the first time it is executed.
60948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** blob in register P2.
60438 60949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60439 60950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Blob: { /* out2-prerelease */
60440 60951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1 <= SQLITE_MAX_LENGTH );
60441 60952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetStr(pOut, pOp->p4.z, pOp->p1, 0, 0);
60442 60953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->enc = encoding;
@@ -60490,10 +61001,12 @@
60490 61001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[u.ac.p1];
60491 61002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut = &aMem[u.ac.p2];
60492 61003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( u.ac.n-- ){
60493 61004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOut<=&aMem[p->nMem] );
60494 61005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn1<=&aMem[p->nMem] );
61006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(pIn1) );
61007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pOut);
60495 61008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ac.zMalloc = pOut->zMalloc;
60496 61009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->zMalloc = 0;
60497 61010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemMove(pOut, pIn1);
60498 61011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->zMalloc = u.ac.zMalloc;
60499 61012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(u.ac.p2++, pOut);
@@ -60535,10 +61048,13 @@
60535 61048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_SCopy: { /* in1, out2 */
60536 61049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
60537 61050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut = &aMem[pOp->p2];
60538 61051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOut!=pIn1 );
60539 61052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemShallowCopy(pOut, pIn1, MEM_Ephem);
61053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
61054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOut->pScopyFrom==0 ) pOut->pScopyFrom = pIn1;
61055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
60540 61056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p2, pOut);
60541 61057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
60542 61058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60543 61059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60544 61060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: ResultRow P1 P2 * * *
@@ -60595,10 +61111,14 @@
60595 61111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and have an assigned type. The results are de-ephemeralized as
60596 61112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as side effect.
60597 61113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60598 61114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ad.pMem = p->pResultSet = &aMem[pOp->p1];
60599 61115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.ad.i=0; u.ad.i<pOp->p2; u.ad.i++){
61116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(&u.ad.pMem[u.ad.i]) );
61117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Deephemeralize(&u.ad.pMem[u.ad.i]);
61118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (u.ad.pMem[u.ad.i].flags & MEM_Ephem)==0
61119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (u.ad.pMem[u.ad.i].flags & (MEM_Str|MEM_Blob))==0 );
60600 61120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemNulTerminate(&u.ad.pMem[u.ad.i]);
60601 61121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemStoreType(&u.ad.pMem[u.ad.i]);
60602 61122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p1+u.ad.i, &u.ad.pMem[u.ad.i]);
60603 61123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60604 61124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) goto no_mem;
@@ -60826,16 +61346,21 @@
60826 61346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.ag */
60827 61347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60828 61348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.n = pOp->p5;
60829 61349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.apVal = p->apArg;
60830 61350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.ag.apVal || u.ag.n==0 );
61351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p3>0 && pOp->p3<=p->nMem );
61352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOut = &aMem[pOp->p3];
61353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pOut);
60831 61354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60832 61355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.ag.n==0 || (pOp->p2>0 && pOp->p2+u.ag.n<=p->nMem+1) );
60833 61356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+u.ag.n );
60834 61357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.pArg = &aMem[pOp->p2];
60835 61358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.ag.i=0; u.ag.i<u.ag.n; u.ag.i++, u.ag.pArg++){
61359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.ag.pArg) );
60836 61360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.apVal[u.ag.i] = u.ag.pArg;
61361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Deephemeralize(u.ag.pArg);
60837 61362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemStoreType(u.ag.pArg);
60838 61363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p2+u.ag.i, u.ag.pArg);
60839 61364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60840 61365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60841 61366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_FUNCDEF || pOp->p4type==P4_VDBEFUNC );
@@ -60845,12 +61370,10 @@
60845 61370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
60846 61371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.ctx.pVdbeFunc = (VdbeFunc*)pOp->p4.pVdbeFunc;
60847 61372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.ctx.pFunc = u.ag.ctx.pVdbeFunc->pFunc;
60848 61373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60849 61374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
60850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOp->p3>0 && pOp->p3<=p->nMem );
60851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOut = &aMem[pOp->p3];
60852 61375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.ctx.s.flags = MEM_Null;
60853 61376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.ctx.s.db = db;
60854 61377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.ctx.s.xDel = 0;
60855 61378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.ctx.s.zMalloc = 0;
60856 61379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -60866,11 +61389,11 @@
60866 61389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp>aOp );
60867 61390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp[-1].p4type==P4_COLLSEQ );
60868 61391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp[-1].opcode==OP_CollSeq );
60869 61392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ag.ctx.pColl = pOp[-1].p4.pColl;
60870 61393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (*u.ag.ctx.pFunc->xFunc)(&u.ag.ctx, u.ag.n, u.ag.apVal);
61394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (*u.ag.ctx.pFunc->xFunc)(&u.ag.ctx, u.ag.n, u.ag.apVal); /* IMP: R-24505-23230 */
60872 61395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
60873 61396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Even though a malloc() has failed, the implementation of the
60874 61397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** user function may have called an sqlite3_result_XXX() function
60875 61398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to return a value. The following call releases any resources
60876 61399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** associated with such a value.
@@ -60918,11 +61441,11 @@
60918 61441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If either input is NULL, the result is NULL.
60919 61442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60920 61443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: ShiftLeft P1 P2 P3 * *
60921 61444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
60922 61445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Shift the integer value in register P2 to the left by the
60923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** number of bits specified by the integer in regiser P1.
61446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** number of bits specified by the integer in register P1.
60924 61447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Store the result in register P3.
60925 61448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If either input is NULL, the result is NULL.
60926 61449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60927 61450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: ShiftRight P1 P2 P3 * *
60928 61451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -60968,10 +61491,11 @@
60968 61491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
60969 61492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** To force any register to be an integer, just add 0.
60970 61493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60971 61494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_AddImm: { /* in1 */
60972 61495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
61496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pIn1);
60973 61497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemIntegerify(pIn1);
60974 61498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->u.i += pOp->p2;
60975 61499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
60976 61500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
60977 61501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -60982,10 +61506,11 @@
60982 61506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** without data loss, then jump immediately to P2, or if P2==0
60983 61507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** raise an SQLITE_MISMATCH exception.
60984 61508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
60985 61509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_MustBeInt: { /* jump, in1 */
60986 61510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
61511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pIn1);
60987 61512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
applyAffinity(pIn1, SQLITE_AFF_NUMERIC, encoding);
60988 61513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pIn1->flags & MEM_Int)==0 ){
60989 61514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p2==0 ){
60990 61515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_MISMATCH;
60991 61516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto abort_due_to_error;
@@ -61027,10 +61552,11 @@
61027 61552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61028 61553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A NULL value is not changed by this routine. It remains NULL.
61029 61554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61030 61555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_ToText: { /* same as TK_TO_TEXT, in1 */
61031 61556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
61557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pIn1);
61032 61558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIn1->flags & MEM_Null ) break;
61033 61559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( MEM_Str==(MEM_Blob>>3) );
61034 61560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->flags |= (pIn1->flags&MEM_Blob)>>3;
61035 61561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
61036 61562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = ExpandBlob(pIn1);
@@ -61073,20 +61599,18 @@
61073 61599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61074 61600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A NULL value is not changed by this routine. It remains NULL.
61075 61601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61076 61602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_ToNumeric: { /* same as TK_TO_NUMERIC, in1 */
61077 61603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
61078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pIn1->flags & (MEM_Null|MEM_Int|MEM_Real))==0 ){
61079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeMemNumerify(pIn1);
61080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
61604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeMemNumerify(pIn1);
61081 61605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
61082 61606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61083 61607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_CAST */
61084 61608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61085 61609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: ToInt P1 * * * *
61086 61610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Force the value in register P1 be an integer. If
61611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Force the value in register P1 to be an integer. If
61088 61612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The value is currently a real number, drop its fractional part.
61089 61613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the value is text or blob, try to convert it to an integer using the
61090 61614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** equivalent of atoi() and store 0 if no such conversion is possible.
61091 61615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61092 61616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A NULL value is not changed by this routine. It remains NULL.
@@ -61109,10 +61633,11 @@
61109 61633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61110 61634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A NULL value is not changed by this routine. It remains NULL.
61111 61635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61112 61636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_ToReal: { /* same as TK_TO_REAL, in1 */
61113 61637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
61638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pIn1);
61114 61639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pIn1->flags & MEM_Null)==0 ){
61115 61640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemRealify(pIn1);
61116 61641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61117 61642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
61118 61643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -61123,11 +61648,11 @@
61123 61648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Compare the values in register P1 and P3. If reg(P3)<reg(P1) then
61124 61649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jump to address P2.
61125 61650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61126 61651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the SQLITE_JUMPIFNULL bit of P5 is set and either reg(P1) or
61127 61652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reg(P3) is NULL then take the jump. If the SQLITE_JUMPIFNULL
61128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** bit is clear then fall thru if either operand is NULL.
61653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bit is clear then fall through if either operand is NULL.
61129 61654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61130 61655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The SQLITE_AFF_MASK portion of P5 must be an affinity character -
61131 61656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_AFF_TEXT, SQLITE_AFF_INTEGER, and so forth. An attempt is made
61132 61657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to coerce both inputs according to this affinity before the
61133 61658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comparison is made. If the SQLITE_AFF_MASK is 0x00, then numeric
@@ -61253,10 +61778,11 @@
61253 61778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: u.ai.res = u.ai.res>=0; break;
61254 61779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61255 61780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61256 61781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p5 & SQLITE_STOREP2 ){
61257 61782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut = &aMem[pOp->p2];
61783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pOut);
61258 61784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemSetTypeFlag(pOut, MEM_Int);
61259 61785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->u.i = u.ai.res;
61260 61786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p2, pOut);
61261 61787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( u.ai.res ){
61262 61788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2-1;
@@ -61284,12 +61810,12 @@
61284 61810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
61285 61811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61286 61812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61287 61813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Compare P1 P2 P3 P4 *
61288 61814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Compare to vectors of registers in reg(P1)..reg(P1+P3-1) (all this
61290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** one "A") and in reg(P2)..reg(P2+P3-1) ("B"). Save the result of
61815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Compare two vectors of registers in reg(P1)..reg(P1+P3-1) (call this
61816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** vector "A") and in reg(P2)..reg(P2+P3-1) ("B"). Save the result of
61291 61817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the comparison for use by the next OP_Jump instruct.
61292 61818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61293 61819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 is a KeyInfo structure that defines collating sequences and sort
61294 61820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** orders for the comparison. The permutation applies to registers
61295 61821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** only. The KeyInfo elements are used sequentially.
@@ -61327,10 +61853,12 @@
61327 61853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.aj.p2>0 && u.aj.p2+u.aj.n<=p->nMem+1 );
61328 61854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61329 61855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_DEBUG */
61330 61856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.aj.i=0; u.aj.i<u.aj.n; u.aj.i++){
61331 61857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aj.idx = aPermute ? aPermute[u.aj.i] : u.aj.i;
61858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(&aMem[u.aj.p1+u.aj.idx]) );
61859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(&aMem[u.aj.p2+u.aj.idx]) );
61332 61860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(u.aj.p1+u.aj.idx, &aMem[u.aj.p1+u.aj.idx]);
61333 61861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(u.aj.p2+u.aj.idx, &aMem[u.aj.p2+u.aj.idx]);
61334 61862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.aj.i<u.aj.pKeyInfo->nField );
61335 61863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aj.pColl = u.aj.pKeyInfo->aColl[u.aj.i];
61336 61864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aj.bRev = u.aj.pKeyInfo->aSortOrder[u.aj.i];
@@ -61558,10 +62086,11 @@
61558 62086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pC = 0;
61559 62087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&u.am.sMem, 0, sizeof(u.am.sMem));
61560 62088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.p1<p->nCursor );
61561 62089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>0 && pOp->p3<=p->nMem );
61562 62090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pDest = &aMem[pOp->p3];
62091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, u.am.pDest);
61563 62092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemSetTypeFlag(u.am.pDest, MEM_Null);
61564 62093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.zRec = 0;
61565 62094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61566 62095 { 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
61567 62096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bytes in the record.
@@ -61605,10 +62134,11 @@
61605 62134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK ); /* DataSize() cannot fail */
61606 62135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61607 62136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( u.am.pC->pseudoTableReg>0 ){
61608 62137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pReg = &aMem[u.am.pC->pseudoTableReg];
61609 62138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.pReg->flags & MEM_Blob );
62139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.am.pReg) );
61610 62140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.payloadSize = u.am.pReg->n;
61611 62141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.zRec = u.am.pReg->z;
61612 62142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.am.pC->cacheStatus = (pOp->p5&OPFLAG_CLEARCACHE) ? CACHE_STALE : p->cacheCtr;
61613 62143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.am.payloadSize==0 || u.am.zRec!=0 );
61614 62144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -61829,25 +62359,23 @@
61829 62359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.an.zAffinity!=0 );
61830 62360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.an.zAffinity[pOp->p2]==0 );
61831 62361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
61832 62362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (u.an.cAff = *(u.an.zAffinity++))!=0 ){
61833 62363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn1 <= &p->aMem[p->nMem] );
62364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(pIn1) );
61834 62365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExpandBlob(pIn1);
61835 62366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
applyAffinity(pIn1, u.an.cAff, encoding);
61836 62367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1++;
61837 62368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61838 62369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
61839 62370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61840 62371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61841 62372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: MakeRecord P1 P2 P3 P4 *
61842 62373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert P2 registers beginning with P1 into a single entry
61844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** suitable for use as a data record in a database table or as a key
61845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in an index. The details of the format are irrelevant as long as
61846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the OP_Column opcode can decode the record later.
61847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Refer to source code comments for the details of the record
61848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** format.
62374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert P2 registers beginning with P1 into the [record format]
62375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** use as a data record in a database table or as a key
62376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in an index. The OP_Column opcode can decode the record later.
61849 62377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61850 62378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 may be a string that is P2 characters long. The nth character of the
61851 62379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** string indicates the column affinity that should be used for the nth
61852 62380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** field of the index key.
61853 62381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -61899,15 +62427,21 @@
61899 62427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.ao.nField>0 && pOp->p2>0 && pOp->p2+u.ao.nField<=p->nMem+1 );
61900 62428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ao.pData0 = &aMem[u.ao.nField];
61901 62429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ao.nField = pOp->p2;
61902 62430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ao.pLast = &u.ao.pData0[u.ao.nField-1];
61903 62431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ao.file_format = p->minWriteFileFormat;
62432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
62433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Identify the output register */
62434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p3<pOp->p1 || pOp->p3>=pOp->p1+pOp->p2 );
62435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOut = &aMem[pOp->p3];
62436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pOut);
61904 62437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61905 62438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through the elements that will make up the record to figure
61906 62439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** out how much space is required for the new record.
61907 62440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61908 62441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.ao.pRec=u.ao.pData0; u.ao.pRec<=u.ao.pLast; u.ao.pRec++){
62442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.ao.pRec) );
61909 62443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.ao.zAffinity ){
61910 62444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
applyAffinity(u.ao.pRec, u.ao.zAffinity[u.ao.pRec-u.ao.pData0], encoding);
61911 62445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61912 62446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.ao.pRec->flags&MEM_Zero && u.ao.pRec->n>0 ){
61913 62447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemExpandBlob(u.ao.pRec);
@@ -61938,12 +62472,10 @@
61938 62472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Make sure the output register has a buffer large enough to store
61939 62473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the new record. The output register (pOp->p3) is not allowed to
61940 62474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be one of the input registers (because the following call to
61941 62475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3VdbeMemGrow() could clobber the value before it is used).
61942 62476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOp->p3<pOp->p1 || pOp->p3>=pOp->p1+pOp->p2 );
61944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOut = &aMem[pOp->p3];
61945 62477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3VdbeMemGrow(pOut, (int)u.ao.nByte, 0) ){
61946 62478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto no_mem;
61947 62479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61948 62480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ao.zNewRecord = (u8 *)pOut->z;
61949 62481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -62112,10 +62644,11 @@
62112 62644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62113 62645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62114 62646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.aq.p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){
62115 62647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExpirePreparedStatements(db);
62116 62648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ResetInternalSchema(db, 0);
62649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->flags = (db->flags | SQLITE_InternChanges);
62117 62650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62118 62651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62119 62652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62120 62653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Regardless of whether this is a RELEASE or ROLLBACK, destroy all
62121 62654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** savepoints nested inside of the savepoint being operated on. */
@@ -62502,10 +63035,12 @@
62502 63035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62503 63036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p5 ){
62504 63037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.aw.p2>0 );
62505 63038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.aw.p2<=p->nMem );
62506 63039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn2 = &aMem[u.aw.p2];
63040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(pIn2) );
63041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pIn2->flags & MEM_Int)!=0 );
62507 63042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemIntegerify(pIn2);
62508 63043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.p2 = (int)pIn2->u.i;
62509 63044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The u.aw.p2 value always comes from a prior OP_CreateTable opcode and
62510 63045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that opcode will always set the u.aw.p2 value to 2 or more or else fail.
62511 63046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If there were a failure, the prepared statement would have halted
@@ -62524,10 +63059,11 @@
62524 63059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62525 63060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 );
62526 63061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur = allocateCursor(p, pOp->p1, u.aw.nField, u.aw.iDb, 1);
62527 63062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.aw.pCur==0 ) goto no_mem;
62528 63063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur->nullRow = 1;
63064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.aw.pCur->isOrdered = 1;
62529 63065 { 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);
62530 63066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.aw.pCur->pKeyInfo = u.aw.pKeyInfo;
62531 63067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62532 63068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Since it performs no memory allocation or IO, the only values that
62533 63069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3BtreeCursor() may return are SQLITE_EMPTY and SQLITE_OK.
@@ -62576,11 +63112,11 @@
62576 63112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_OpenAutoindex:
62577 63113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_OpenEphemeral: {
62578 63114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0 /* local variables moved into u.ax */
62579 63115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCx;
62580 63116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.ax */
62581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const int openFlags =
63117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const int vfsFlags =
62582 63118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_READWRITE |
62583 63119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_CREATE |
62584 63120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_EXCLUSIVE |
62585 63121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_DELETEONCLOSE |
62586 63122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_TRANSIENT_DB;
@@ -62587,25 +63123,25 @@
62587 63123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62588 63124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 );
62589 63125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx = allocateCursor(p, pOp->p1, pOp->p2, -1, 1);
62590 63126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.ax.pCx==0 ) goto no_mem;
62591 63127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->nullRow = 1;
62592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeFactory(db, 0, 1, SQLITE_DEFAULT_TEMP_CACHE_SIZE, openFlags,
62593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &u.ax.pCx->pBt);
63128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeOpen(0, db, &u.ax.pCx->pBt,
63129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BTREE_OMIT_JOURNAL | BTREE_SINGLE | pOp->p5, vfsFlags);
62594 63130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
62595 63131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeBeginTrans(u.ax.pCx->pBt, 1);
62596 63132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62597 63133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
62598 63134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If a transient index is required, create it by calling
62599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3BtreeCreateTable() with the BTREE_ZERODATA flag before
63135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3BtreeCreateTable() with the BTREE_BLOBKEY flag before
62600 63136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opening it. If a transient table is required, just use the
62601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** automatically created table with root-page 1 (an INTKEY table).
63137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** automatically created table with root-page 1 (an BLOB_INTKEY table).
62602 63138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62603 63139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p4.pKeyInfo ){
62604 63140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pgno;
62605 63141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_KEYINFO );
62606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeCreateTable(u.ax.pCx->pBt, &pgno, BTREE_ZERODATA);
63142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeCreateTable(u.ax.pCx->pBt, &pgno, BTREE_BLOBKEY);
62607 63143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
62608 63144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pgno==MASTER_ROOT+1 );
62609 63145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCursor(u.ax.pCx->pBt, pgno, 1,
62610 63146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(KeyInfo*)pOp->p4.z, u.ax.pCx->pCursor);
62611 63147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->pKeyInfo = pOp->p4.pKeyInfo;
@@ -62615,10 +63151,11 @@
62615 63151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
62616 63152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCursor(u.ax.pCx->pBt, MASTER_ROOT, 1, 0, u.ax.pCx->pCursor);
62617 63153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->isTable = 1;
62618 63154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62619 63155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.ax.pCx->isOrdered = (pOp->p5!=BTREE_UNORDERED);
62620 63157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ax.pCx->isIndex = !u.ax.pCx->isTable;
62621 63158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
62622 63159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62623 63160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62624 63161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: OpenPseudo P1 P2 P3 * *
@@ -62734,10 +63271,11 @@
62734 63271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.az.pC!=0 );
62735 63272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.az.pC->pseudoTableReg==0 );
62736 63273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OP_SeekLe == OP_SeekLt+1 );
62737 63274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OP_SeekGe == OP_SeekLt+2 );
62738 63275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OP_SeekGt == OP_SeekLt+3 );
63276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.az.pC->isOrdered );
62739 63277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.az.pC->pCursor!=0 ){
62740 63278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.az.oc = pOp->opcode;
62741 63279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.az.pC->nullRow = 0;
62742 63280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.az.pC->isTable ){
62743 63281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The input value in P3 might be of any type: integer, real, string,
@@ -62816,10 +63354,13 @@
62816 63354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.az.oc!=OP_SeekLe || u.az.r.flags==UNPACKED_INCRKEY );
62817 63355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.az.oc!=OP_SeekGe || u.az.r.flags==0 );
62818 63356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.az.oc!=OP_SeekLt || u.az.r.flags==0 );
62819 63357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62820 63358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.az.r.aMem = &aMem[pOp->p3];
63359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
63360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { int i; for(i=0; i<u.az.r.nField; i++) assert( memIsValid(&u.az.r.aMem[i]) ); }
63361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
62821 63362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExpandBlob(u.az.r.aMem);
62822 63363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeMovetoUnpacked(u.az.pC->pCursor, &u.az.r, 0, 0, &u.az.res);
62823 63364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
62824 63365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto abort_due_to_error;
62825 63366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -62944,15 +63485,18 @@
62944 63485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bb.pC->isTable==0 );
62945 63486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p4.i>0 ){
62946 63487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bb.r.pKeyInfo = u.bb.pC->pKeyInfo;
62947 63488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bb.r.nField = (u16)pOp->p4.i;
62948 63489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bb.r.aMem = pIn3;
63490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
63491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { int i; for(i=0; i<u.bb.r.nField; i++) assert( memIsValid(&u.bb.r.aMem[i]) ); }
63492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
62949 63493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bb.r.flags = UNPACKED_PREFIX_MATCH;
62950 63494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bb.pIdxKey = &u.bb.r;
62951 63495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
62952 63496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn3->flags & MEM_Blob );
62953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ExpandBlob(pIn3);
63497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (pIn3->flags & MEM_Zero)==0 ); /* zeroblobs already expanded */
62954 63498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bb.pIdxKey = sqlite3VdbeRecordUnpack(u.bb.pC->pKeyInfo, pIn3->n, pIn3->z,
62955 63499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bb.aTempRec, sizeof(u.bb.aTempRec));
62956 63500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.bb.pIdxKey==0 ){
62957 63501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto no_mem;
62958 63502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -63043,10 +63587,13 @@
63043 63587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Populate the index search key. */
63044 63588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bc.r.pKeyInfo = u.bc.pCx->pKeyInfo;
63045 63589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bc.r.nField = u.bc.nField + 1;
63046 63590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bc.r.flags = UNPACKED_PREFIX_SEARCH;
63047 63591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bc.r.aMem = u.bc.aMx;
63592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
63593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { int i; for(i=0; i<u.bc.r.nField; i++) assert( memIsValid(&u.bc.r.aMem[i]) ); }
63594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
63048 63595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63049 63596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Extract the value of u.bc.R from register P3. */
63050 63597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemIntegerify(pIn3);
63051 63598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bc.R = pIn3->u.i;
63052 63599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -63065,11 +63612,11 @@
63065 63612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63066 63613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: NotExists P1 P2 P3 * *
63067 63614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
63068 63615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Use the content of register P3 as a integer key. If a record
63069 63616 { 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.
63070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the record does exist, then fall thru. The cursor is left
63617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the record does exist, then fall through. The cursor is left
63071 63618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pointing to the record if it exists.
63072 63619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
63073 63620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The difference between this operation and NotFound is that this
63074 63621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** operation assumes the key is an integer and that P1 is a table whereas
63075 63622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** NotFound assumes key is a blob constructed from MakeRecord and
@@ -63223,11 +63770,13 @@
63223 63770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.be.pMem = &u.be.pFrame->aMem[pOp->p3];
63224 63771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
63225 63772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Assert that P3 is a valid memory cell. */
63226 63773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3<=p->nMem );
63227 63774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.be.pMem = &aMem[pOp->p3];
63775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, u.be.pMem);
63228 63776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.be.pMem) );
63229 63778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63230 63779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p3, u.be.pMem);
63231 63780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemIntegerify(u.be.pMem);
63232 63781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (u.be.pMem->flags & MEM_Int)!=0 ); /* mem(P3) holds an integer */
63233 63782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.be.pMem->u.i==MAX_ROWID || u.be.pC->useRandomRowid ){
@@ -63242,33 +63791,40 @@
63242 63791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
63243 63792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63244 63793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeSetCachedRowid(u.be.pC->pCursor, u.be.v<MAX_ROWID ? u.be.v+1 : 0);
63245 63794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63246 63795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.be.pC->useRandomRowid ){
63247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* IMPLEMENTATION-OF: R-48598-02938 If the largest ROWID is equal to the
63796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-07677-41881 If the largest ROWID is equal to the
63248 63797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** largest possible integer (9223372036854775807) then the database
63249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** engine starts picking candidate ROWIDs at random until it finds one
63250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that is not previously used.
63251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
63798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** engine starts picking positive candidate ROWIDs at random until
63799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it finds one that is not previously used. */
63252 63800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is
63253 63801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an AUTOINCREMENT table. */
63802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* on the first attempt, simply do one more than previous */
63254 63803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.be.v = db->lastRowid;
63804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.be.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
63805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.be.v++; /* ensure non-zero */
63255 63806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.be.cnt = 0;
63256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- do{
63257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.be.cnt==0 && (u.be.v&0xffffff)==u.be.v ){
63258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.be.v++;
63807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( ((rc = sqlite3BtreeMovetoUnpacked(u.be.pC->pCursor, 0, (u64)u.be.v,
63808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, &u.be.res))==SQLITE_OK)
63809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (u.be.res==0)
63810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (++u.be.cnt<100)){
63811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* collision - try another random rowid */
63812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_randomness(sizeof(u.be.v), &u.be.v);
63813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( u.be.cnt<5 ){
63814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* try "small" random rowids for the initial attempts */
63815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.be.v &= 0xffffff;
63259 63816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
63260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_randomness(sizeof(u.be.v), &u.be.v);
63261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( u.be.cnt<5 ) u.be.v &= 0xffffff;
63817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.be.v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
63262 63818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeMovetoUnpacked(u.be.pC->pCursor, 0, (u64)u.be.v, 0, &u.be.res);
63264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.be.cnt++;
63265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }while( u.be.cnt<100 && rc==SQLITE_OK && u.be.res==0 );
63819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.be.v++; /* ensure non-zero */
63820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
63266 63821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && u.be.res==0 ){
63267 63822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_FULL; /* IMP: R-38219-53002 */
63268 63823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto abort_due_to_error;
63269 63824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.be.v>0 ); /* EV: R-40812-03570 */
63270 63826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63271 63827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.be.pC->rowidIsValid = 0;
63272 63828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.be.pC->deferredMoveto = 0;
63273 63829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.be.pC->cacheStatus = CACHE_STALE;
63274 63830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -63334,10 +63890,11 @@
63334 63890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int op; /* Opcode for update hook: SQLITE_UPDATE or SQLITE_INSERT */
63335 63891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.bf */
63336 63892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63337 63893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.pData = &aMem[pOp->p2];
63338 63894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
63895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.bf.pData) );
63339 63896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.pC = p->apCsr[pOp->p1];
63340 63897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bf.pC!=0 );
63341 63898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bf.pC->pCursor!=0 );
63342 63899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bf.pC->pseudoTableReg==0 );
63343 63900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bf.pC->isTable );
@@ -63344,10 +63901,11 @@
63344 63901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p2, u.bf.pData);
63345 63902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63346 63903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->opcode==OP_Insert ){
63347 63904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.pKey = &aMem[pOp->p3];
63348 63905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bf.pKey->flags & MEM_Int );
63906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.bf.pKey) );
63349 63907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p3, u.bf.pKey);
63350 63908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.iKey = u.bf.pKey->u.i;
63351 63909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
63352 63910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode==OP_InsertInt );
63353 63911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bf.iKey = pOp->p3;
@@ -63495,10 +64053,11 @@
63495 64053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 n;
63496 64054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 n64;
63497 64055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.bh */
63498 64056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63499 64057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut = &aMem[pOp->p2];
64058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, pOut);
63500 64059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63501 64060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Note that RowKey and RowData are really exactly the same instruction */
63502 64061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
63503 64062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bh.pC = p->apCsr[pOp->p1];
63504 64063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bh.pC->isTable || pOp->opcode==OP_RowKey );
@@ -63837,10 +64396,13 @@
63837 64396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(u.bo.pCrsr!=0) ){
63838 64397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bo.r.pKeyInfo = u.bo.pC->pKeyInfo;
63839 64398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bo.r.nField = (u16)pOp->p3;
63840 64399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bo.r.flags = 0;
63841 64400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bo.r.aMem = &aMem[pOp->p2];
64401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
64402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { int i; for(i=0; i<u.bo.r.nField; i++) assert( memIsValid(&u.bo.r.aMem[i]) ); }
64403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
63842 64404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeMovetoUnpacked(u.bo.pCrsr, &u.bo.r, 0, 0, &u.bo.res);
63843 64405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && u.bo.res==0 ){
63844 64406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeDelete(u.bo.pCrsr);
63845 64407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63846 64408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bo.pC->deferredMoveto==0 );
@@ -63921,10 +64483,11 @@
63921 64483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.bq */
63922 64484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
63923 64485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
63924 64486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bq.pC = p->apCsr[pOp->p1];
63925 64487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bq.pC!=0 );
64488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( u.bq.pC->isOrdered );
63926 64489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(u.bq.pC->pCursor!=0) ){
63927 64490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bq.pC->deferredMoveto==0 );
63928 64491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p5==0 || pOp->p5==1 );
63929 64492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_INT32 );
63930 64493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bq.r.pKeyInfo = u.bq.pC->pKeyInfo;
@@ -63933,10 +64496,13 @@
63933 64496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bq.r.flags = UNPACKED_INCRKEY | UNPACKED_IGNORE_ROWID;
63934 64497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
63935 64498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bq.r.flags = UNPACKED_IGNORE_ROWID;
63936 64499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63937 64500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bq.r.aMem = &aMem[pOp->p3];
64501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
64502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { int i; for(i=0; i<u.bq.r.nField; i++) assert( memIsValid(&u.bq.r.aMem[i]) ); }
64503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
63938 64504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeIdxKeyCompare(u.bq.pC, &u.bq.r, &u.bq.res);
63939 64505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->opcode==OP_IdxLT ){
63940 64506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bq.res = -u.bq.res;
63941 64507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
63942 64508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode==OP_IdxGE );
@@ -64036,10 +64602,12 @@
64036 64602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &u.bs.nChange : 0)
64037 64603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
64038 64604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p3 ){
64039 64605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nChange += u.bs.nChange;
64040 64606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p3>0 ){
64607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(&aMem[pOp->p3]) );
64608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, &aMem[pOp->p3]);
64041 64609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aMem[pOp->p3].u.i += u.bs.nChange;
64042 64610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64043 64611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64044 64612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
64045 64613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -64079,13 +64647,13 @@
64079 64647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (p->btreeMask & (1<<pOp->p1))!=0 );
64080 64648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.bt.pDb = &db->aDb[pOp->p1];
64081 64649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.bt.pDb->pBt!=0 );
64082 64650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->opcode==OP_CreateTable ){
64083 64651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* u.bt.flags = BTREE_INTKEY; */
64084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.bt.flags = BTREE_LEAFDATA|BTREE_INTKEY;
64652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.bt.flags = BTREE_INTKEY;
64085 64653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
64086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u.bt.flags = BTREE_ZERODATA;
64654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u.bt.flags = BTREE_BLOBKEY;
64087 64655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64088 64656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCreateTable(u.bt.pDb->pBt, &u.bt.pgno, u.bt.flags);
64089 64657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->u.i = u.bt.pgno;
64090 64658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
64091 64659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -64410,10 +64978,11 @@
64410 64978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *t; /* Token identifying trigger */
64411 64979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.by */
64412 64980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64413 64981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.by.pProgram = pOp->p4.pProgram;
64414 64982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.by.pRt = &aMem[pOp->p3];
64983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.by.pRt) );
64415 64984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.by.pProgram->nOp>0 );
64416 64985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64417 64986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the p5 flag is clear, then recursive invocation of triggers is
64418 64987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** disabled for backwards compatibility (p5 is set if this sub-program
64419 64988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is really a trigger, not a foreign key action, and the flag set
@@ -64583,10 +65152,11 @@
64583 65152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.ca.pFrame=p->pFrame; u.ca.pFrame->pParent; u.ca.pFrame=u.ca.pFrame->pParent);
64584 65153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ca.pIn1 = &u.ca.pFrame->aMem[pOp->p1];
64585 65154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
64586 65155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ca.pIn1 = &aMem[pOp->p1];
64587 65156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.ca.pIn1) );
64588 65158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemIntegerify(u.ca.pIn1);
64589 65159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn2 = &aMem[pOp->p2];
64590 65160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemIntegerify(pIn2);
64591 65161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.ca.pIn1->u.i<pIn2->u.i){
64592 65162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ca.pIn1->u.i = pIn2->u.i;
@@ -64669,11 +65239,13 @@
64669 65239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.cb.n>=0 );
64670 65240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cb.pRec = &aMem[pOp->p2];
64671 65241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cb.apVal = p->apArg;
64672 65242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.cb.apVal || u.cb.n==0 );
64673 65243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.cb.i=0; u.cb.i<u.cb.n; u.cb.i++, u.cb.pRec++){
65244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.cb.pRec) );
64674 65245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cb.apVal[u.cb.i] = u.cb.pRec;
65246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, u.cb.pRec);
64675 65247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemStoreType(u.cb.pRec);
64676 65248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64677 65249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cb.ctx.pFunc = pOp->p4.pFunc;
64678 65250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>0 && pOp->p3<=p->nMem );
64679 65251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cb.ctx.pMem = u.cb.pMem = &aMem[pOp->p3];
@@ -64689,11 +65261,11 @@
64689 65261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp>p->aOp );
64690 65262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp[-1].p4type==P4_COLLSEQ );
64691 65263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp[-1].opcode==OP_CollSeq );
64692 65264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cb.ctx.pColl = pOp[-1].p4.pColl;
64693 65265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (u.cb.ctx.pFunc->xStep)(&u.cb.ctx, u.cb.n, u.cb.apVal);
65266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (u.cb.ctx.pFunc->xStep)(&u.cb.ctx, u.cb.n, u.cb.apVal); /* IMP: R-24505-23230 */
64695 65267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( u.cb.ctx.isError ){
64696 65268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&u.cb.ctx.s));
64697 65269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = u.cb.ctx.isError;
64698 65270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64699 65271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemRelease(&u.cb.ctx.s);
@@ -65076,10 +65648,11 @@
65076 65648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.ch */
65077 65649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65078 65650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ch.pQuery = &aMem[pOp->p3];
65079 65651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ch.pArgc = &u.ch.pQuery[1];
65080 65652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ch.pCur = p->apCsr[pOp->p1];
65653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.ch.pQuery) );
65081 65654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p3, u.ch.pQuery);
65082 65655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.ch.pCur->pVtabCursor );
65083 65656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ch.pVtabCursor = u.ch.pCur->pVtabCursor;
65084 65657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ch.pVtab = u.ch.pVtabCursor->pVtab;
65085 65658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ch.pModule = u.ch.pVtab->pModule;
@@ -65133,10 +65706,11 @@
65133 65706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65134 65707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCur = p->apCsr[pOp->p1];
65135 65708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCur->pVtabCursor );
65136 65709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>0 && pOp->p3<=p->nMem );
65137 65710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ci.pDest = &aMem[pOp->p3];
65711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, u.ci.pDest);
65138 65712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCur->nullRow ){
65139 65713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetNull(u.ci.pDest);
65140 65714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
65141 65715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65142 65716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ci.pVtab = pCur->pVtabCursor->pVtab;
@@ -65235,14 +65809,16 @@
65235 65809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* local variables moved into u.ck */
65236 65810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65237 65811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ck.pVtab = pOp->p4.pVtab->pVtab;
65238 65812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.ck.pName = &aMem[pOp->p1];
65239 65813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.ck.pVtab->pModule->xRename );
65814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.ck.pName) );
65240 65815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
REGISTER_TRACE(pOp->p1, u.ck.pName);
65241 65816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u.ck.pName->flags & MEM_Str );
65242 65817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = u.ck.pVtab->pModule->xRename(u.ck.pVtab, u.ck.pName->z);
65243 65818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
importVtabErrMsg(p, u.ck.pVtab);
65819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->expired = 0;
65244 65820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
65245 65821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
65246 65822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65247 65823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
65248 65824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -65287,10 +65863,12 @@
65287 65863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_VTAB );
65288 65864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(u.cl.pModule->xUpdate) ){
65289 65865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cl.apArg = p->apArg;
65290 65866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cl.pX = &aMem[pOp->p3];
65291 65867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(u.cl.i=0; u.cl.i<u.cl.nArg; u.cl.i++){
65868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( memIsValid(u.cl.pX) );
65869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memAboutToChange(p, u.cl.pX);
65292 65870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemStoreType(u.cl.pX);
65293 65871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cl.apArg[u.cl.i] = u.cl.pX;
65294 65872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u.cl.pX++;
65295 65873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
65296 65874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = u.cl.pModule->xUpdate(u.cl.pVtab, u.cl.nArg, u.cl.apArg, &u.cl.rowid);
@@ -66341,12 +66919,11 @@
66341 66919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IsMemJournal(sqlite3_file *pJfd){
66342 66920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pJfd->pMethods==&MemJournalMethods;
66343 66921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66344 66922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
66345 66923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
66346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return the number of bytes required to store a MemJournal that uses vfs
66347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pVfs to create the underlying on-disk files.
66924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the number of bytes required to store a MemJournal file descriptor.
66348 66925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
66349 66926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3MemJournalSize(void){
66350 66927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sizeof(MemJournal);
66351 66928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
66352 66929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -68246,11 +68823,11 @@
68246 68823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iColumn = (ynVar)(++pParse->nVar);
68247 68824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( z[0]=='?' ){
68248 68825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Wildcard of the form "?nnn". Convert "nnn" to an integer and
68249 68826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use it as the variable number */
68250 68827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 i;
68251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int bOk = sqlite3Atoi64(&z[1], &i);
68828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bOk = 0==sqlite3Atoi64(&z[1], &i, sqlite3Strlen30(&z[1]), SQLITE_UTF8);
68252 68829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iColumn = (ynVar)i;
68253 68830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==0 );
68254 68831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==1 );
68255 68832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER]-1 );
68256 68833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( i==db->aLimit[SQLITE_LIMIT_VARIABLE_NUMBER] );
@@ -69226,12 +69803,12 @@
69226 69803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return eType;
69227 69804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69228 69805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
69229 69806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69230 69807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Generate code for scalar subqueries used as an expression
69232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and IN operators. Examples:
69808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Generate code for scalar subqueries used as a subquery expression, EXISTS,
69809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or IN operators. Examples:
69233 69810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69234 69811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (SELECT a FROM b) -- subquery
69235 69812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** EXISTS (SELECT a FROM b) -- EXISTS subquery
69236 69813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** x IN (4,5,11) -- IN operator with list on right-hand side
69237 69814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** x IN (SELECT a FROM b) -- IN operator with subquery on the right
@@ -69290,14 +69867,14 @@
69290 69867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( testAddr>0 || pParse->db->mallocFailed );
69291 69868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69292 69869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69293 69870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pExpr->op ){
69294 69871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_IN: {
69295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char affinity;
69296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- KeyInfo keyInfo;
69297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr; /* Address of OP_OpenEphemeral instruction */
69298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *pLeft = pExpr->pLeft;
69872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char affinity; /* Affinity of the LHS of the IN */
69873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ KeyInfo keyInfo; /* Keyinfo for the generated table */
69874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addr; /* Address of OP_OpenEphemeral instruction */
69875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */
69299 69876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69300 69877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rMayHaveNull ){
69301 69878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
69302 69879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69303 69880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -69316,10 +69893,11 @@
69316 69893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 'x' nor the SELECT... statement are columns, then numeric affinity
69317 69894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is used.
69318 69895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69319 69896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iTable = pParse->nTab++;
69320 69897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = sqlite3VdbeAddOp2(v, OP_OpenEphemeral, pExpr->iTable, !isRowid);
69898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rMayHaveNull==0 ) sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
69321 69899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&keyInfo, 0, sizeof(keyInfo));
69322 69900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
keyInfo.nField = 1;
69323 69901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69324 69902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExprHasProperty(pExpr, EP_xIsSelect) ){
69325 69903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Case 1: expr IN (SELECT ...)
@@ -69608,11 +70186,11 @@
69608 70186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69609 70187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void codeReal(Vdbe *v, const char *z, int negateFlag, int iMem){
69610 70188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(z!=0) ){
69611 70189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double value;
69612 70190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zV;
69613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AtoF(z, &value);
70191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AtoF(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
69614 70192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !sqlite3IsNaN(value) ); /* The new AtoF never returns NaN */
69615 70193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( negateFlag ) value = -value;
69616 70194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zV = dup8bytes(v, (char*)&value);
69617 70195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_Real, 0, iMem, 0, zV, P4_REAL);
69618 70196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -69622,28 +70200,27 @@
69622 70200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69623 70201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69624 70202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate an instruction that will put the integer describe by
69625 70203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** text z[0..n-1] into register iMem.
69626 70204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The z[] string will probably not be zero-terminated. But the
69628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** z[n] character is guaranteed to be something that does not look
69629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** like the continuation of the number.
70205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Expr.u.zToken is always UTF8 and zero-terminated.
69630 70206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69631 70207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void codeInteger(Parse *pParse, Expr *pExpr, int negFlag, int iMem){
69632 70208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = pParse->pVdbe;
69633 70209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->flags & EP_IntValue ){
69634 70210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i = pExpr->u.iValue;
69635 70211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( negFlag ) i = -i;
69636 70212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, i, iMem);
69637 70213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
70214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int c;
70215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 value;
69638 70216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = pExpr->u.zToken;
69639 70217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( z!=0 );
69640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3FitsIn64Bits(z, negFlag) ){
69641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 value;
70218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
70219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( c==0 || (c==2 && negFlag) ){
69642 70220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zV;
69643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Atoi64(z, &value);
69644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( negFlag ) value = -value;
70221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( negFlag ){ value = -value; }
69645 70222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zV = dup8bytes(v, (char*)&value);
69646 70223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
69647 70224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
69648 70225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_FLOATING_POINT
69649 70226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
@@ -69924,77 +70501,10 @@
69924 70501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69925 70502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
69926 70503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69927 70504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_DEBUG || SQLITE_COVERAGE_TEST */
69928 70505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
69930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the last instruction coded is an ephemeral copy of any of
69931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the registers in the nReg registers beginning with iReg, then
69932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** convert the last instruction from OP_SCopy to OP_Copy.
69933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
69934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3ExprHardCopy(Parse *pParse, int iReg, int nReg){
69935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeOp *pOp;
69936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Vdbe *v;
69937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
69938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pParse->db->mallocFailed==0 );
69939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- v = pParse->pVdbe;
69940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( v!=0 );
69941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOp = sqlite3VdbeGetOp(v, -1);
69942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOp!=0 );
69943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pOp->opcode==OP_SCopy && pOp->p1>=iReg && pOp->p1<iReg+nReg ){
69944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOp->opcode = OP_Copy;
69945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
69948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
69949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Generate code to store the value of the iAlias-th alias in register
69950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** target. The first time this is called, pExpr is evaluated to compute
69951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the value of the alias. The value is stored in an auxiliary register
69952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and the number of that register is returned. On subsequent calls,
69953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the register number is returned without generating any code.
69954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
69955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Note that in order for this to work, code must be generated in the
69956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** same order that it is executed.
69957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
69958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Aliases are numbered starting with 1. So iAlias is in the range
69959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of 1 to pParse->nAlias inclusive.
69960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
69961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pParse->aAlias[iAlias-1] records the register number where the value
69962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the iAlias-th alias is stored. If zero, that means that the
69963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** alias has not yet been computed.
69964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
69965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int codeAlias(Parse *pParse, int iAlias, Expr *pExpr, int target){
69966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
69967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3 *db = pParse->db;
69968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iReg;
69969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pParse->nAliasAlloc<pParse->nAlias ){
69970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->aAlias = sqlite3DbReallocOrFree(db, pParse->aAlias,
69971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sizeof(pParse->aAlias[0])*pParse->nAlias );
69972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testcase( db->mallocFailed && pParse->nAliasAlloc>0 );
69973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( db->mallocFailed ) return 0;
69974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(&pParse->aAlias[pParse->nAliasAlloc], 0,
69975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (pParse->nAlias-pParse->nAliasAlloc)*sizeof(pParse->aAlias[0]));
69976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nAliasAlloc = pParse->nAlias;
69977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( iAlias>0 && iAlias<=pParse->nAlias );
69979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iReg = pParse->aAlias[iAlias-1];
69980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iReg==0 ){
69981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pParse->iCacheLevel>0 ){
69982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
69983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
69984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iReg = ++pParse->nMem;
69985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprCode(pParse, pExpr, iReg);
69986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->aAlias[iAlias-1] = iReg;
69987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return iReg;
69990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
69991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- UNUSED_PARAMETER(iAlias);
69992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3ExprCodeTarget(pParse, pExpr, target);
69993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
69994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
69995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
69996 70506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
69997 70507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code into the current Vdbe to evaluate the given
69998 70508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expression. Attempt to store the results in register "target".
69999 70509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the register where results are stored.
70000 70510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -70099,11 +70609,11 @@
70099 70609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_REGISTER: {
70100 70610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
inReg = pExpr->iTable;
70101 70611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
70102 70612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70103 70613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_AS: {
70104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inReg = codeAlias(pParse, pExpr->iTable, pExpr->pLeft, target);
70614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
70105 70615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
70106 70616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70107 70617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_CAST
70108 70618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_CAST: {
70109 70619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Expressions of the form: CAST(pLeft AS token) */
@@ -70531,10 +71041,15 @@
70531 71041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( regFree1==0 );
70532 71042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cacheX.op = TK_REGISTER;
70533 71043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
opCompare.op = TK_EQ;
70534 71044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
opCompare.pLeft = &cacheX;
70535 71045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTest = &opCompare;
71046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Ticket b351d95f9cd5ef17e9d9dbae18f5ca8611190001:
71047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The value in regFree1 might get SCopy-ed into the file result.
71048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** So make sure that the regFree1 register is not reused for other
71049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** purposes and possibly overwritten. */
71050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regFree1 = 0;
70536 71051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70537 71052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nExpr; i=i+2){
70538 71053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCachePush(pParse);
70539 71054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pX ){
70540 71055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTest!=0 );
@@ -70624,14 +71139,18 @@
70624 71139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70625 71140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ExprCode(Parse *pParse, Expr *pExpr, int target){
70626 71141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int inReg;
70627 71142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70628 71143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( target>0 && target<=pParse->nMem );
70629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
70630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pParse->pVdbe || pParse->db->mallocFailed );
70631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( inReg!=target && pParse->pVdbe ){
70632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
71144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr && pExpr->op==TK_REGISTER ){
71145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(pParse->pVdbe, OP_Copy, pExpr->iTable, target);
71146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
71147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inReg = sqlite3ExprCodeTarget(pParse, pExpr, target);
71148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pParse->pVdbe || pParse->db->mallocFailed );
71149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( inReg!=target && pParse->pVdbe ){
71150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(pParse->pVdbe, OP_SCopy, inReg, target);
71151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70633 71152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70634 71153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return target;
70635 71154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70636 71155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70637 71156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -70800,23 +71319,18 @@
70800 71319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
70801 71320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ExprList_item *pItem;
70802 71321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, n;
70803 71322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pList!=0 );
70804 71323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( target>0 );
71324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pParse->pVdbe!=0 ); /* Never gets this far otherwise */
70805 71325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = pList->nExpr;
70806 71326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pItem=pList->a, i=0; i<n; i++, pItem++){
70807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pItem->iAlias ){
70808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iReg = codeAlias(pParse, pItem->iAlias, pItem->pExpr, target+i);
70809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Vdbe *v = sqlite3GetVdbe(pParse);
70810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iReg!=target+i ){
70811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_SCopy, iReg, target+i);
70812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
70813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
70814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprCode(pParse, pItem->pExpr, target+i);
70815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
70816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( doHardCopy && !pParse->db->mallocFailed ){
70817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprHardCopy(pParse, target, n);
71327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pExpr = pItem->pExpr;
71328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int inReg = sqlite3ExprCodeTarget(pParse, pExpr, target+i);
71329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( inReg!=target+i ){
71330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(pParse->pVdbe, doHardCopy ? OP_Copy : OP_SCopy,
71331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inReg, target+i);
70818 71332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70819 71333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70820 71334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return n;
70821 71335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70822 71336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -71794,10 +72308,15 @@
71794 72308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTrig->pSchema==pTempSchema ){
71795 72309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zWhere = whereOrName(db, zWhere, pTrig->zName);
71796 72310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71797 72311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71798 72312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zWhere ){
72314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zNew = sqlite3MPrintf(pParse->db, "type='trigger' AND (%s)", zWhere);
72315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(pParse->db, zWhere);
72316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zWhere = zNew;
72317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
71799 72318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return zWhere;
71800 72319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71801 72320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71802 72321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
71803 72322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code to drop and reload the internal representation of table
@@ -72401,11 +72920,12 @@
72401 72920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iIdxCur; /* Cursor open on index being analyzed */
72402 72921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v; /* The virtual machine being built up */
72403 72922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i; /* Loop counter */
72404 72923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int topOfLoop; /* The top of the loop */
72405 72924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int endOfLoop; /* The end of the loop */
72406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr; /* The address of an instruction */
72925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addr = 0; /* The address of an instruction */
72926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int jZeroRows = 0; /* Jump from here if number of rows is zero */
72407 72927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb; /* Index of database containing pTab */
72408 72928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regTabname = iMem++; /* Register containing table name */
72409 72929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regIdxname = iMem++; /* Register containing index name */
72410 72930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regSampleno = iMem++; /* Register containing next sample number */
72411 72931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regCol = iMem++; /* Content of a column analyzed table */
@@ -72420,12 +72940,19 @@
72420 72940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regLast = iMem++; /* Index of last sample to record */
72421 72941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regFirst = iMem++; /* Index of first sample to record */
72422 72942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
72423 72943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72424 72944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
72425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( v==0 || NEVER(pTab==0) || pTab->pIndex==0 ){
72426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Do no analysis for tables that have no indices */
72945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( v==0 || NEVER(pTab==0) ){
72946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
72947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
72948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab->tnum==0 ){
72949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do not gather statistics on views or virtual tables */
72950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
72951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
72952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( memcmp(pTab->zName, "sqlite_", 7)==0 ){
72953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Do not gather statistics on system tables */
72427 72954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
72428 72955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72429 72956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeHoldsAllMutexes(db) );
72430 72957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3SchemaToIndex(db, pTab->pSchema);
72431 72958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb>=0 );
@@ -72438,10 +72965,11 @@
72438 72965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72439 72966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Establish a read-lock on the table at the shared-cache level. */
72440 72967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TableLock(pParse, iDb, pTab->tnum, 0, pTab->zName);
72441 72968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72442 72969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIdxCur = pParse->nTab++;
72970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
72443 72971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
72444 72972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCol = pIdx->nColumn;
72445 72973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
72446 72974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72447 72975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iMem+1+(nCol*2)>pParse->nMem ){
@@ -72452,14 +72980,11 @@
72452 72980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
72453 72981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb,
72454 72982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char *)pKey, P4_KEYINFO_HANDOFF);
72455 72983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s", pIdx->zName));
72456 72984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Populate the registers containing the table and index names. */
72458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTab->pIndex==pIdx ){
72459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
72460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
72985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Populate the register containing the index name. */
72461 72986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, pIdx->zName, 0);
72462 72987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72463 72988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT2
72464 72989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72465 72990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this iteration of the loop is generating code to analyze the
@@ -72590,12 +73115,14 @@
72590 73115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72591 73116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If K==0 then no entry is made into the sqlite_stat1 table.
72592 73117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If K>0 then it is always the case the D>0 so division by zero
72593 73118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is never possible.
72594 73119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
72596 73120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_SCopy, iMem, regSampleno);
73121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( jZeroRows==0 ){
73122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, iMem);
73123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
72597 73124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nCol; i++){
72598 73125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, regTemp, 0, " ", 0);
72599 73126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Concat, regTemp, regSampleno, regSampleno);
72600 73127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Add, iMem, iMem+i+1, regTemp);
72601 73128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_AddImm, regTemp, -1);
@@ -72605,17 +73132,39 @@
72605 73132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72606 73133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
72607 73134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
72608 73135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
72609 73136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
73137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
73139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the table has no indices, create a single sqlite_stat1 entry
73140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** containing NULL as the index name and the row count as the content.
73141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
73142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab->pIndex==0 ){
73143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pTab->tnum, iDb);
73144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "%s", pTab->zName));
73145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regSampleno);
73146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp1(v, OP_Close, iIdxCur);
73147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
73148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( jZeroRows>0 );
73149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeAddOp0(v, OP_Goto);
73150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, jZeroRows);
73151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
73153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regRec, "aaa", 0);
73154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regRowid);
73155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regRec, regRowid);
73156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
73157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nMem<regRec ) pParse->nMem = regRec;
73158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( jZeroRows ){
72610 73159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addr);
72611 73160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72612 73161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72613 73162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72614 73163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
72615 73164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code that will cause the most recent index analysis to
72616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be laoded into internal hash tables where is can be used.
73165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be loaded into internal hash tables where is can be used.
72617 73166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72618 73167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void loadAnalysis(Parse *pParse, int iDb){
72619 73168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = sqlite3GetVdbe(pParse);
72620 73169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v ){
72621 73170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_LoadAnalysis, iDb);
@@ -72741,37 +73290,50 @@
72741 73290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72742 73291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
72743 73292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This callback is invoked once for each index when reading the
72744 73293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite_stat1 table.
72745 73294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argv[0] = name of the index
72747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argv[1] = results of analysis - on integer for each column
73295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argv[0] = name of the table
73296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argv[1] = name of the index (might be NULL)
73297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argv[2] = results of analysis - on integer for each column
73298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
73299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Entries for which argv[1]==NULL simply record the number of rows in
73300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the table.
72748 73301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72749 73302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
72750 73303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
analysisInfo *pInfo = (analysisInfo*)pData;
72751 73304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIndex;
72752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i, c;
73305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTable;
73306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, c, n;
72753 73307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int v;
72754 73308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z;
72755 73309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( argc==2 );
73310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( argc==3 );
72757 73311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER2(NotUsed, argc);
72758 73312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( argv==0 || argv[0]==0 || argv[1]==0 ){
73313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( argv==0 || argv[0]==0 || argv[2]==0 ){
72760 73314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
72761 73315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex = sqlite3FindIndex(pInfo->db, argv[0], pInfo->zDatabase);
72763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIndex==0 ){
73316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTable = sqlite3FindTable(pInfo->db, argv[0], pInfo->zDatabase);
73317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTable==0 ){
72764 73318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
72765 73319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- z = argv[1];
72767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; *z && i<=pIndex->nColumn; i++){
73320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( argv[1] ){
73321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase);
73322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
73323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex = 0;
73324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = pIndex ? pIndex->nColumn : 0;
73326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ z = argv[2];
73327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; *z && i<=n; i++){
72768 73328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = 0;
72769 73329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( (c=z[0])>='0' && c<='9' ){
72770 73330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = v*10 + c - '0';
72771 73331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z++;
72772 73332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ) pTable->nRowEst = v;
73334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIndex==0 ) break;
72773 73335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->aiRowEst[i] = v;
72774 73336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *z==' ' ) z++;
72775 73337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72776 73338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
72777 73339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -72843,11 +73405,11 @@
72843 73405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
72844 73406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72845 73407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72846 73408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Load new statistics out of the sqlite_stat1 table */
72847 73409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSql = sqlite3MPrintf(db,
72848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "SELECT idx, stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
73410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "SELECT tbl, idx, stat FROM %Q.sqlite_stat1", sInfo.zDatabase);
72849 73411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zSql==0 ){
72850 73412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
72851 73413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
72852 73414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_exec(db, zSql, analysisLoader, &sInfo, 0);
72853 73415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, zSql);
@@ -73060,13 +73622,12 @@
73060 73622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73061 73623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open the database file. If the btree is successfully opened, use
73062 73624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it to obtain the database schema. At this point the schema may
73063 73625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or may not be initialised.
73064 73626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeFactory(db, zFile, 0, SQLITE_DEFAULT_CACHE_SIZE,
73066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db->openFlags | SQLITE_OPEN_MAIN_DB,
73067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &aNew->pBt);
73627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeOpen(zFile, db, &aNew->pBt, 0,
73628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ db->openFlags | SQLITE_OPEN_MAIN_DB);
73068 73629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->nDb++;
73069 73630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_CONSTRAINT ){
73070 73631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_ERROR;
73071 73632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zErrDyn = sqlite3MPrintf(db, "database is already attached");
73072 73633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( rc==SQLITE_OK ){
@@ -73303,11 +73864,12 @@
73303 73864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* pNext */
73304 73865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
detachFunc, /* xFunc */
73305 73866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* xStep */
73306 73867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* xFinalize */
73307 73868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"sqlite_detach", /* zName */
73308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 /* pHash */
73869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pHash */
73870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0 /* pDestructor */
73309 73871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
73310 73872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
codeAttach(pParse, SQLITE_DETACH, &detach_func, pDbname, 0, 0, pDbname);
73311 73873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73312 73874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73313 73875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -73324,11 +73886,12 @@
73324 73886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* pNext */
73325 73887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
attachFunc, /* xFunc */
73326 73888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* xStep */
73327 73889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* xFinalize */
73328 73890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"sqlite_attach", /* zName */
73329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0 /* pHash */
73891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, /* pHash */
73892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0 /* pDestructor */
73330 73893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
73331 73894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
codeAttach(pParse, SQLITE_ATTACH, &attach_func, p, p, pDbname, pKey);
73332 73895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73333 73896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_ATTACH */
73334 73897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -74453,12 +75016,13 @@
74453 75016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** set to the index of the database that the table or view is to be
74454 75017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** created in.
74455 75018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
74456 75019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3TwoPartName(pParse, pName1, pName2, &pName);
74457 75020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iDb<0 ) return;
74458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !OMIT_TEMPDB && isTemp && iDb>1 ){
74459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If creating a temp table, the name may not be qualified */
75021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !OMIT_TEMPDB && isTemp && pName2->n>0 && iDb!=1 ){
75022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If creating a temp table, the name may not be qualified. Unless
75023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the database name is "temp" anyway. */
74460 75024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "temporary table name must be unqualified");
74461 75025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
74462 75026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74463 75027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !OMIT_TEMPDB && isTemp ) iDb = 1;
74464 75028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -74502,21 +75066,22 @@
74502 75066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to an sqlite3_declare_vtab() call. In that case only the column names
74503 75067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and types will be used, so there is no need to test for namespace
74504 75068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** collisions.
74505 75069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
74506 75070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !IN_DECLARE_VTAB ){
75071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zDb = db->aDb[iDb].zName;
74507 75072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
74508 75073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto begin_table_error;
74509 75074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTable = sqlite3FindTable(db, zName, db->aDb[iDb].zName);
75075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTable = sqlite3FindTable(db, zName, zDb);
74511 75076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTable ){
74512 75077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !noErr ){
74513 75078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "table %T already exists", pName);
74514 75079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74515 75080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto begin_table_error;
74516 75081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3FindIndex(db, zName, 0)!=0 && (iDb==0 || !db->init.busy) ){
75082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3FindIndex(db, zName, zDb)!=0 ){
74518 75083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "there is already an index named %s", zName);
74519 75084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto begin_table_error;
74520 75085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74521 75086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74522 75087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -74529,10 +75094,11 @@
74529 75094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74530 75095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable->zName = zName;
74531 75096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable->iPKey = -1;
74532 75097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable->pSchema = db->aDb[iDb].pSchema;
74533 75098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable->nRef = 1;
75099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTable->nRowEst = 1000000;
74534 75100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->pNewTable==0 );
74535 75101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->pNewTable = pTable;
74536 75102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74537 75103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this is the magic sqlite_sequence table used by autoincrement,
74538 75104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then record a pointer to this table in the main database structure
@@ -75375,16 +75941,14 @@
75375 75941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDelete(db, pSelect);
75376 75942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
75377 75943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75378 75944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StartTable(pParse, pName1, pName2, isTemp, 1, 0, noErr);
75379 75945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = pParse->pNewTable;
75380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p==0 ){
75946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p==0 || pParse->nErr ){
75381 75947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDelete(db, pSelect);
75382 75948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
75383 75949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pParse->nErr==0 ); /* If sqlite3StartTable return non-NULL then
75385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** there could not have been an error */
75386 75950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TwoPartName(pParse, pName1, pName2, &pName);
75387 75951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = sqlite3SchemaToIndex(db, p->pSchema);
75388 75952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3FixInit(&sFix, pParse, iDb, "view", pName)
75389 75953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3FixSelect(&sFix, pSelect)
75390 75954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
@@ -76498,11 +77062,12 @@
76498 77062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76499 77063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTblName ){
76500 77064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3RefillIndex(pParse, pIndex, iMem);
76501 77065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ChangeCookie(pParse, iDb);
76502 77066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 0, 0,
76503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3MPrintf(db, "name='%q'", pIndex->zName), P4_DYNAMIC);
77067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3MPrintf(db, "name='%q' AND type='index'", pIndex->zName),
77068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ P4_DYNAMIC);
76504 77069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Expire, 0);
76505 77070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76506 77071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76507 77072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76508 77073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* When adding an index to the list of indices for a table, make
@@ -76559,18 +77124,18 @@
76559 77124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are based on typical values found in actual indices.
76560 77125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76561 77126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DefaultRowEst(Index *pIdx){
76562 77127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned *a = pIdx->aiRowEst;
76563 77128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
77129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned n;
76564 77130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( a!=0 );
76565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a[0] = 1000000;
76566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=pIdx->nColumn; i>=5; i--){
76567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a[i] = 5;
76568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
76569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( i>=1 ){
76570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- a[i] = 11 - i;
76571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i--;
77131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ a[0] = pIdx->pTable->nRowEst;
77132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( a[0]<10 ) a[0] = 10;
77133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = 10;
77134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=1; i<=pIdx->nColumn; i++){
77135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ a[i] = n;
77136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( n>5 ) n--;
76572 77137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76573 77138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->onError!=OE_None ){
76574 77139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a[pIdx->nColumn] = 1;
76575 77140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76576 77141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -76626,11 +77191,11 @@
76626 77191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate code to remove the index and from the master table */
76627 77192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
76628 77193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v ){
76629 77194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginWriteOperation(pParse, 1, iDb);
76630 77195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3NestedParse(pParse,
76631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "DELETE FROM %Q.%s WHERE name=%Q",
77196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "DELETE FROM %Q.%s WHERE name=%Q AND type='index'",
76632 77197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->aDb[iDb].zName, SCHEMA_TABLE(iDb),
76633 77198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->zName
76634 77199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
76635 77200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3FindTable(db, "sqlite_stat1", db->aDb[iDb].zName) ){
76636 77201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3NestedParse(pParse,
@@ -77118,11 +77683,11 @@
77118 77683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_CREATE |
77119 77684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_EXCLUSIVE |
77120 77685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_DELETEONCLOSE |
77121 77686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_TEMP_DB;
77122 77687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeFactory(db, 0, 0, SQLITE_DEFAULT_CACHE_SIZE, flags, &pBt);
77688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeOpen(0, db, &pBt, 0, flags);
77124 77689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
77125 77690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "unable to open a temporary database "
77126 77691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"file for storing temporary tables");
77127 77692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->rc = rc;
77128 77693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
@@ -77775,11 +78340,11 @@
77775 78340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the SQLITE_PreferBuiltin flag is set, then search the built-in
77776 78341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** functions even if a prior app-defined function was found. And give
77777 78342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** priority to built-in functions.
77778 78343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
77779 78344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Except, if createFlag is true, that means that we are trying to
77780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** install a new function. Whatever FuncDef structure is returned will
78345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** install a new function. Whatever FuncDef structure is returned it will
77781 78346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** have fields overwritten with new information appropriate for the
77782 78347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** new function. But the FuncDefs for built-in functions are read-only.
77783 78348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** So we must not search for built-ins when creating a new function.
77784 78349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
77785 78350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !createFlag && (pBest==0 || (db->flags & SQLITE_PreferBuiltin)!=0) ){
@@ -78791,11 +79356,11 @@
78791 79356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zBuf = sqlite3_mprintf("%.*f",n,r);
78792 79357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zBuf==0 ){
78793 79358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_error_nomem(context);
78794 79359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
78795 79360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3AtoF(zBuf, &r);
79361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3AtoF(zBuf, &r, sqlite3Strlen30(zBuf), SQLITE_UTF8);
78797 79362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zBuf);
78798 79363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78799 79364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_double(context, r);
78800 79365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
78801 79366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -79956,14 +80521,14 @@
79956 80521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( caseSensitive ){
79957 80522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pInfo = (struct compareInfo*)&likeInfoAlt;
79958 80523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
79959 80524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pInfo = (struct compareInfo*)&likeInfoNorm;
79960 80525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3CreateFunc(db, "like", 2, SQLITE_ANY, pInfo, likeFunc, 0, 0);
79962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3CreateFunc(db, "like", 3, SQLITE_ANY, pInfo, likeFunc, 0, 0);
80526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3CreateFunc(db, "like", 2, SQLITE_ANY, pInfo, likeFunc, 0, 0, 0);
80527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3CreateFunc(db, "like", 3, SQLITE_ANY, pInfo, likeFunc, 0, 0, 0);
79963 80528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3CreateFunc(db, "glob", 2, SQLITE_ANY,
79964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (struct compareInfo*)&globInfo, likeFunc, 0,0);
80529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (struct compareInfo*)&globInfo, likeFunc, 0, 0, 0);
79965 80530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setLikeOptFlag(db, "glob", SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE);
79966 80531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setLikeOptFlag(db, "like",
79967 80532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
caseSensitive ? (SQLITE_FUNC_LIKE | SQLITE_FUNC_CASE) : SQLITE_FUNC_LIKE);
79968 80533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79969 80534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -80043,14 +80608,14 @@
80043 80608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(upper, 1, 0, 0, upperFunc ),
80044 80609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(lower, 1, 0, 0, lowerFunc ),
80045 80610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(coalesce, 1, 0, 0, 0 ),
80046 80611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(coalesce, 0, 0, 0, 0 ),
80047 80612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* FUNCTION(coalesce, -1, 0, 0, ifnullFunc ), */
80048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {-1,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"coalesce",0},
80613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {-1,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"coalesce",0,0},
80049 80614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(hex, 1, 0, 0, hexFunc ),
80050 80615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* FUNCTION(ifnull, 2, 0, 0, ifnullFunc ), */
80051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {2,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"ifnull",0},
80616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {2,SQLITE_UTF8,SQLITE_FUNC_COALESCE,0,0,ifnullFunc,0,0,"ifnull",0,0},
80052 80617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(random, 0, 0, 0, randomFunc ),
80053 80618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(randomblob, 1, 0, 0, randomBlob ),
80054 80619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(nullif, 2, 0, 1, nullifFunc ),
80055 80620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
80056 80621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
@@ -80073,11 +80638,11 @@
80073 80638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
80074 80639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
80075 80640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
80076 80641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
80077 80642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
80078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0},
80643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {0,SQLITE_UTF8,SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
80079 80644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
80080 80645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
80081 80646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
80082 80647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
80083 80648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LIKEFUNC(glob, 2, &globInfo, SQLITE_FUNC_LIKE|SQLITE_FUNC_CASE),
@@ -80484,11 +81049,11 @@
80484 81049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKey = sqlite3IndexKeyinfo(pParse, pIdx);
80485 81050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
80486 81051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OpenRead, iCur, pIdx->tnum, iDb);
80487 81052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP4(v, -1, (char*)pKey, P4_KEYINFO_HANDOFF);
80488 81053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nCol; i++){
80489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_SCopy, aiCol[i]+1+regData, regTemp+i);
81054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Copy, aiCol[i]+1+regData, regTemp+i);
80490 81055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80491 81056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
80492 81057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the parent table is the same as the child table, and we are about
80493 81058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to increment the constraint-counter (i.e. this is an INSERT operation),
80494 81059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then check if the row being inserted matches itself. If so, do not
@@ -84849,11 +85414,11 @@
84849 85414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
84850 85415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3StrICmp(zLeft,"journal_size_limit")==0 ){
84851 85416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pager *pPager = sqlite3BtreePager(pDb->pBt);
84852 85417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iLimit = -2;
84853 85418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zRight ){
84854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Atoi64(zRight, &iLimit);
85419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3Atoi64(zRight, &iLimit, 1000000, SQLITE_UTF8);
84855 85420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iLimit<-1 ) iLimit = -1;
84856 85421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84857 85422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit);
84858 85423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
returnSingleInt(pParse, "journal_size_limit", iLimit);
84859 85424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
@@ -87131,15 +87696,17 @@
87131 87696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_MakeRecord, iMem, N, r1);
87132 87697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IdxInsert, iTab, r1);
87133 87698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, r1);
87134 87699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87135 87700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_SUBQUERY
87136 87702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
87137 87703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate an error message when a SELECT is used within a subexpression
87138 87704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (example: "a IN (SELECT * FROM table)") but it has more than 1 result
87139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** column. We do this in a subroutine because the error occurs in multiple
87140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** places.
87705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** column. We do this in a subroutine because the error used to occur
87706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in multiple places. (The error only occurs in one place now, but we
87707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** retain the subroutine to minimize code disruption.)
87141 87708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
87142 87709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int checkForMultiColumnSelectError(
87143 87710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parse context. */
87144 87711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest *pDest, /* Destination of SELECT results */
87145 87712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nExpr /* Number of result columns returned by SELECT */
@@ -87151,10 +87718,11 @@
87151 87718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
87152 87719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
87153 87720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
87154 87721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87155 87722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
87156 87724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87157 87725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
87158 87726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine generates the code for the inside of the inner loop
87159 87727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of a SELECT.
87160 87728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -87230,14 +87798,10 @@
87230 87798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrderBy==0 ){
87231 87799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
codeOffset(v, p, iContinue);
87232 87800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87233 87801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87234 87802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
87236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
87237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
87238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
87239 87803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( eDest ){
87240 87804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* In this mode, write each query result to the key of the temporary
87241 87805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table iParm.
87242 87806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
87243 87807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_COMPOUND_SELECT
@@ -88143,10 +88707,11 @@
88143 88707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Create the destination temporary table if necessary
88144 88708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
88145 88709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( dest.eDest==SRT_EphemTab ){
88146 88710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pEList );
88147 88711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, dest.iParm, p->pEList->nExpr);
88712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
88148 88713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dest.eDest = SRT_Table;
88149 88714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88150 88715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
88151 88716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Make sure all SELECTs in the statement have the same number of elements
88152 88717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in their result sets.
@@ -90105,11 +90670,11 @@
90105 90670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pList = pF->pExpr->x.pList;
90106 90671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pF->pExpr, EP_xIsSelect) );
90107 90672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pList ){
90108 90673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nArg = pList->nExpr;
90109 90674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regAgg = sqlite3GetTempRange(pParse, nArg);
90110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprCodeExprList(pParse, pList, regAgg, 0);
90675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprCodeExprList(pParse, pList, regAgg, 1);
90111 90676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
90112 90677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nArg = 0;
90113 90678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regAgg = 0;
90114 90679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90115 90680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pF->iDistinct>=0 ){
@@ -90264,10 +90829,19 @@
90264 90829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90265 90830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Begin generating code.
90266 90831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
90267 90832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
90268 90833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( v==0 ) goto select_end;
90834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
90835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If writing to memory or generating a set
90836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** only a single column may be output.
90837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
90838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_SUBQUERY
90839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
90840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto select_end;
90841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
90842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
90269 90843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90270 90844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate code for all sub-queries in the FROM clause
90271 90845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
90272 90846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
90273 90847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; !p->pPrior && i<pTabList->nSrc; i++){
@@ -90338,19 +90912,10 @@
90338 90912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90339 90913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return multiSelect(pParse, p, pDest);
90340 90914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90341 90915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90342 90916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If writing to memory or generating a set
90344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** only a single column may be output.
90345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
90346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_SUBQUERY
90347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( checkForMultiColumnSelectError(pParse, pDest, pEList->nExpr) ){
90348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- goto select_end;
90349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
90350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
90351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
90352 90917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If possible, rewrite the query to use GROUP BY instead of DISTINCT.
90353 90918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** GROUP BY might use an index, DISTINCT never does.
90354 90919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
90355 90920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pGroupBy==0 || (p->selFlags & SF_Aggregate)!=0 );
90356 90921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (p->selFlags & (SF_Distinct|SF_Aggregate))==SF_Distinct ){
@@ -90409,10 +90974,11 @@
90409 90974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isAgg || pGroupBy );
90410 90975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
distinct = pParse->nTab++;
90411 90976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pKeyInfo = keyInfoFromExprList(pParse, p->pEList);
90412 90977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_OpenEphemeral, distinct, 0, 0,
90413 90978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char*)pKeyInfo, P4_KEYINFO_HANDOFF);
90979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
90414 90980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
90415 90981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
distinct = -1;
90416 90982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90417 90983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90418 90984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Aggregate and non-aggregate queries are handled differently */
@@ -92884,10 +93450,11 @@
92884 93450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be stored.
92885 93451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
92886 93452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( v );
92887 93453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ephemTab = pParse->nTab++;
92888 93454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenEphemeral, ephemTab, pTab->nCol+1+(pRowid!=0));
93455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, BTREE_UNORDERED);
92889 93456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
92890 93457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* fill the ephemeral table
92891 93458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
92892 93459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&dest, SRT_Table, ephemTab);
92893 93460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Select(pParse, pSelect, &dest);
@@ -93022,10 +93589,14 @@
93022 93589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDb; /* Number of attached databases */
93023 93590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
93024 93591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db->autoCommit ){
93025 93592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SetString(pzErrMsg, db, "cannot VACUUM from within a transaction");
93026 93593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ERROR;
93594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
93595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db->activeVdbeCnt>1 ){
93596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SetString(pzErrMsg, db,"cannot VACUUM - SQL statements in progress");
93597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_ERROR;
93027 93598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93028 93599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
93029 93600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Save the current value of the database flags so that it can be
93030 93601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** restored before returning. Then set the writable-schema flag, and
93031 93602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** disable CHECK and foreign key constraints. */
@@ -93624,11 +94195,11 @@
93624 94195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, zStmt);
93625 94196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = sqlite3GetVdbe(pParse);
93626 94197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ChangeCookie(pParse, iDb);
93627 94198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
93628 94199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Expire, 0, 0);
93629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zWhere = sqlite3MPrintf(db, "name='%q'", pTab->zName);
94200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zWhere = sqlite3MPrintf(db, "name='%q' AND type='table'", pTab->zName);
93630 94201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_ParseSchema, iDb, 1, 0, zWhere, P4_DYNAMIC);
93631 94202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_VCreate, iDb, 0, 0,
93632 94203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zName, sqlite3Strlen30(pTab->zName) + 1);
93633 94204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93634 94205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -94864,15 +95435,16 @@
94864 95435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_REGISTER ){
94865 95436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = pRight->op2;
94866 95437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94867 95438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_VARIABLE ){
94868 95439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *pReprepare = pParse->pReprepare;
94869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pVal = sqlite3VdbeGetValue(pReprepare, pRight->iColumn, SQLITE_AFF_NONE);
95440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol = pRight->iColumn;
95441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pVal = sqlite3VdbeGetValue(pReprepare, iCol, SQLITE_AFF_NONE);
94870 95442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pVal && sqlite3_value_type(pVal)==SQLITE_TEXT ){
94871 95443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = (char *)sqlite3_value_text(pVal);
94872 95444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeSetVarmask(pParse->pVdbe, pRight->iColumn);
95445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSetVarmask(pParse->pVdbe, iCol); /* IMP: R-23257-02778 */
94874 95446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pRight->op==TK_VARIABLE || pRight->op==TK_REGISTER );
94875 95447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( op==TK_STRING ){
94876 95448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = pRight->u.zToken;
94877 95449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94878 95450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z ){
@@ -94886,11 +95458,11 @@
94886 95458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrefix = sqlite3Expr(db, TK_STRING, z);
94887 95459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPrefix ) pPrefix->u.zToken[cnt] = 0;
94888 95460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppPrefix = pPrefix;
94889 95461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_VARIABLE ){
94890 95462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = pParse->pVdbe;
94891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeSetVarmask(v, pRight->iColumn);
95463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSetVarmask(v, pRight->iColumn); /* IMP: R-23257-02778 */
94892 95464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( *pisComplete && pRight->u.zToken[1] ){
94893 95465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the rhs of the LIKE expression is a variable, and the current
94894 95466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value of the variable means there is no need to invoke the LIKE
94895 95467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function, then no OP_Variable will be added to the program.
94896 95468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This causes problems for the sqlite3_bind_parameter_name()
@@ -95750,11 +96322,12 @@
95750 96322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95751 96323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
95752 96324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Required because bestIndex() is called by bestOrClauseIndex()
95753 96325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95754 96326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void bestIndex(
95755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Parse*, WhereClause*, struct SrcList_item*, Bitmask, ExprList*, WhereCost*);
96327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse*, WhereClause*, struct SrcList_item*,
96328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask, Bitmask, ExprList*, WhereCost*);
95756 96329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95757 96330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
95758 96331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine attempts to find an scanning strategy that can be used
95759 96332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to optimize an 'OR' expression that is part of a WHERE clause.
95760 96333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -95763,11 +96336,12 @@
95763 96336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95764 96337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void bestOrClauseIndex(
95765 96338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* The parsing context */
95766 96339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *pWC, /* The WHERE clause */
95767 96340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pSrc, /* The FROM clause term to search */
95768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Bitmask notReady, /* Mask of cursors that are not available */
96341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notReady, /* Mask of cursors not available for indexing */
96342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notValid, /* Cursors not available for any purpose */
95769 96343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy, /* The ORDER BY clause */
95770 96344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereCost *pCost /* Lowest cost query plan */
95771 96345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
95772 96346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_OR_OPTIMIZATION
95773 96347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */
@@ -95799,19 +96373,19 @@
95799 96373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE(("... Multi-index OR testing for term %d of %d....\n",
95800 96374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(pOrTerm - pOrWC->a), (pTerm - pWC->a)
95801 96375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
95802 96376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrTerm->eOperator==WO_AND ){
95803 96377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *pAndWC = &pOrTerm->u.pAndInfo->wc;
95804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestIndex(pParse, pAndWC, pSrc, notReady, 0, &sTermCost);
96378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestIndex(pParse, pAndWC, pSrc, notReady, notValid, 0, &sTermCost);
95805 96379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pOrTerm->leftCursor==iCur ){
95806 96380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause tempWC;
95807 96381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tempWC.pParse = pWC->pParse;
95808 96382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tempWC.pMaskSet = pWC->pMaskSet;
95809 96383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tempWC.op = TK_AND;
95810 96384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tempWC.a = pOrTerm;
95811 96385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tempWC.nTerm = 1;
95812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestIndex(pParse, &tempWC, pSrc, notReady, 0, &sTermCost);
96386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestIndex(pParse, &tempWC, pSrc, notReady, notValid, 0, &sTermCost);
95813 96387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
95814 96388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
95815 96389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95816 96390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rTotal += sTermCost.rCost;
95817 96391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRow += sTermCost.nRow;
@@ -95900,11 +96474,11 @@
95900 96474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
95901 96475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95902 96476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95903 96477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->nQueryLoop >= (double)1 );
95904 96478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable = pSrc->pTab;
95905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nTableRow = pTable->pIndex ? pTable->pIndex->aiRowEst[0] : 1000000;
96479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nTableRow = pTable->nRowEst;
95906 96480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
logN = estLog(nTableRow);
95907 96481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
costTempIdx = 2*logN*(nTableRow/pParse->nQueryLoop + 1);
95908 96482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( costTempIdx>=pCost->rCost ){
95909 96483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The cost of creating the transient table would be greater than
95910 96484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** doing the full table scan */
@@ -96254,11 +96828,12 @@
96254 96828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96255 96829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void bestVirtualIndex(
96256 96830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* The parsing context */
96257 96831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *pWC, /* The WHERE clause */
96258 96832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pSrc, /* The FROM clause term to search */
96259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Bitmask notReady, /* Mask of cursors that are not available */
96833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notReady, /* Mask of cursors not available for index */
96834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notValid, /* Cursors not valid for any purpose */
96260 96835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy, /* The order by clause */
96261 96836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereCost *pCost, /* Lowest cost query plan */
96262 96837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_index_info **ppIdxInfo /* Index information passed to xBestIndex */
96263 96838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
96264 96839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab = pSrc->pTab;
@@ -96384,11 +96959,11 @@
96384 96959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->nOrderBy = nOrderBy;
96385 96960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96386 96961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Try to find a more efficient access pattern by using multiple indexes
96387 96962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to optimize an OR expression within the WHERE clause.
96388 96963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestOrClauseIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost);
96964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
96390 96965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96391 96966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_VIRTUALTABLE */
96392 96967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96393 96968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
96394 96969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Argument pIdx is a pointer to an index structure that has an array of
@@ -96510,11 +97085,11 @@
96510 97085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The evalConstExpr() function will have already converted any TK_VARIABLE
96511 97086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expression involved in an comparison into a TK_REGISTER. */
96512 97087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->op!=TK_VARIABLE );
96513 97088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->op==TK_REGISTER && pExpr->op2==TK_VARIABLE ){
96514 97089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iVar = pExpr->iColumn;
96515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeSetVarmask(pParse->pVdbe, iVar);
97090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeSetVarmask(pParse->pVdbe, iVar); /* IMP: R-23257-02778 */
96516 97091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pp = sqlite3VdbeGetValue(pParse->pReprepare, iVar, aff);
96517 97092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
96518 97093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96519 97094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3ValueFromExpr(pParse->db, pExpr, SQLITE_UTF8, aff, pp);
96520 97095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -96665,11 +97240,12 @@
96665 97240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96666 97241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void bestBtreeIndex(
96667 97242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* The parsing context */
96668 97243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *pWC, /* The WHERE clause */
96669 97244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pSrc, /* The FROM clause term to search */
96670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Bitmask notReady, /* Mask of cursors that are not available */
97245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notReady, /* Mask of cursors not available for indexing */
97246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notValid, /* Cursors not available for any purpose */
96671 97247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy, /* The ORDER BY clause */
96672 97248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereCost *pCost /* Lowest cost query plan */
96673 97249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
96674 97250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCur = pSrc->iCursor; /* The cursor of the table to be accessed */
96675 97251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pProbe; /* An index we are evaluating */
@@ -96707,27 +97283,18 @@
96707 97283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pFirst; /* Any other index on the table */
96708 97284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sPk, 0, sizeof(Index));
96709 97285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.nColumn = 1;
96710 97286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.aiColumn = &aiColumnPk;
96711 97287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.aiRowEst = aiRowEstPk;
96712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aiRowEstPk[1] = 1;
96713 97288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.onError = OE_Replace;
96714 97289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.pTable = pSrc->pTab;
97290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aiRowEstPk[0] = pSrc->pTab->nRowEst;
97291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aiRowEstPk[1] = 1;
96715 97292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFirst = pSrc->pTab->pIndex;
96716 97293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->notIndexed==0 ){
96717 97294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.pNext = pFirst;
96718 97295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The aiRowEstPk[0] is an estimate of the total number of rows in the
96720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** table. Get this information from the ANALYZE information if it is
96721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** available. If not available, assume the table 1 million rows in size.
96722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
96723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pFirst ){
96724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pFirst->aiRowEst!=0 ); /* Allocated together with pFirst */
96725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aiRowEstPk[0] = pFirst->aiRowEst[0];
96726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
96727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aiRowEstPk[0] = 1000000;
96728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
96729 97296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pProbe = &sPk;
96730 97297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wsFlagMask = ~(
96731 97298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERE_COLUMN_IN|WHERE_COLUMN_EQ|WHERE_COLUMN_NULL|WHERE_COLUMN_RANGE
96732 97299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
96733 97300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eqTermMask = WO_EQ|WO_IN;
@@ -96936,29 +97503,29 @@
96936 97503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of output rows, adjust the nRow value accordingly. This only
96937 97504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** matters if the current index is the least costly, so do not bother
96938 97505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with this step if we already know this index will not be chosen.
96939 97506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Also, never reduce the output row count below 2 using this step.
96940 97507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
96941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Do not reduce the output row count if pSrc is the only table that
96942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is notReady; if notReady is a power of two. This will be the case
96943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** when the main sqlite3WhereBegin() loop is scanning for a table with
96944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and "optimal" index, and on such a scan the output row count
96945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** reduction is not valid because it does not update the "pCost->used"
96946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** bitmap. The notReady bitmap will also be a power of two when we
96947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** are scanning for the last table in a 64-way join. We are willing
96948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to bypass this optimization in that corner case.
97508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It is critical that the notValid mask be used here instead of
97509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the notReady mask. When computing an "optimal" index, the notReady
97510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mask will only have one bit set - the bit for the current table.
97511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The notValid mask, on the other hand, always has all bits set for
97512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tables that are not in outer loops. If notReady is used here instead
97513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of notValid, then a optimal index that depends on inner joins loops
97514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** might be selected even when there exists an optimal index that has
97515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** no such dependency.
96949 97516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nRow>2 && cost<=pCost->rCost && (notReady & (notReady-1))!=0 ){
97517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nRow>2 && cost<=pCost->rCost ){
96951 97518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int k; /* Loop counter */
96952 97519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nSkipEq = nEq; /* Number of == constraints to skip */
96953 97520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nSkipRange = nBound; /* Number of < constraints to skip */
96954 97521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask thisTab; /* Bitmap for pSrc */
96955 97522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96956 97523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
thisTab = getMask(pWC->pMaskSet, iCur);
96957 97524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pTerm=pWC->a, k=pWC->nTerm; nRow>2 && k; k--, pTerm++){
96958 97525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->wtFlags & TERM_VIRTUAL ) continue;
96959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pTerm->prereqAll & notReady)!=thisTab ) continue;
97526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pTerm->prereqAll & notValid)!=thisTab ) continue;
96960 97527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->eOperator & (WO_EQ|WO_IN|WO_ISNULL) ){
96961 97528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nSkipEq ){
96962 97529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Ignore the first nEq equality matches since the index
96963 97530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** has already accounted for these */
96964 97531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nSkipEq--;
@@ -97036,11 +97603,11 @@
97036 97603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE(("best index is: %s\n",
97037 97604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((pCost->plan.wsFlags & WHERE_NOT_FULLSCAN)==0 ? "none" :
97038 97605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCost->plan.u.pIdx ? pCost->plan.u.pIdx->zName : "ipk")
97039 97606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
97040 97607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
97041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestOrClauseIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost);
97608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestOrClauseIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
97042 97609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bestAutomaticIndex(pParse, pWC, pSrc, notReady, pCost);
97043 97610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCost->plan.wsFlags |= eqTermMask;
97044 97611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
97045 97612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
97046 97613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -97051,26 +97618,27 @@
97051 97618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
97052 97619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void bestIndex(
97053 97620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* The parsing context */
97054 97621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereClause *pWC, /* The WHERE clause */
97055 97622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct SrcList_item *pSrc, /* The FROM clause term to search */
97056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Bitmask notReady, /* Mask of cursors that are not available */
97623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notReady, /* Mask of cursors not available for indexing */
97624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask notValid, /* Cursors not available for any purpose */
97057 97625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy, /* The ORDER BY clause */
97058 97626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereCost *pCost /* Lowest cost query plan */
97059 97627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
97060 97628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
97061 97629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IsVirtual(pSrc->pTab) ){
97062 97630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_index_info *p = 0;
97063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestVirtualIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost, &p);
97631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestVirtualIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost,&p);
97064 97632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->needToFreeIdxStr ){
97065 97633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p->idxStr);
97066 97634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
97067 97635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(pParse->db, p);
97068 97636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
97069 97637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
97070 97638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
97071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestBtreeIndex(pParse, pWC, pSrc, notReady, pOrderBy, pCost);
97639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestBtreeIndex(pParse, pWC, pSrc, notReady, notValid, pOrderBy, pCost);
97072 97640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
97073 97641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
97074 97642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
97075 97643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
97076 97644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Disable a term in the WHERE clause. Except, do not disable the term
@@ -98281,14 +98849,20 @@
98281 98849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by waiting for other tables to run first. This "optimal" test works
98282 98850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by first assuming that the FROM clause is on the inner loop and finding
98283 98851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** its query plan, then checking to see if that query plan uses any
98284 98852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** other FROM clause terms that are notReady. If no notReady terms are
98285 98853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** used then the "optimal" query plan works.
98854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
98855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Note that the WhereCost.nRow parameter for an optimal scan might
98856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not be as small as it would be if the table really were the innermost
98857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** join. The nRow value can be reduced by WHERE clause constraints
98858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that do not use indices. But this nRow reduction only happens if the
98859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table really is the innermost join.
98286 98860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
98287 98861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The second loop iteration is only performed if no optimal scan
98288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** strategies were found by the first loop. This 2nd iteration is used to
98289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** search for the lowest cost scan overall.
98862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** strategies were found by the first iteration. This second iteration
98863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is used to search for the lowest cost scan overall.
98290 98864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
98291 98865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Previous versions of SQLite performed only the second iteration -
98292 98866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the next outermost loop was always that with the lowest overall
98293 98867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cost. However, this meant that SQLite could select the wrong plan
98294 98868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for scripts such as the following:
@@ -98297,18 +98871,18 @@
98297 98871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CREATE TABLE t2(c, d);
98298 98872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT * FROM t2, t1 WHERE t2.rowid = t1.a;
98299 98873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
98300 98874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The best strategy is to iterate through table t1 first. However it
98301 98875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not possible to determine this with a simple greedy algorithm.
98302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** However, since the cost of a linear scan through table t2 is the same
98876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Since the cost of a linear scan through table t2 is the same
98303 98877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as the cost of a linear scan through table t1, a simple greedy
98304 98878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** algorithm may choose to use t2 for the outer loop, which is a much
98305 98879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** costlier approach.
98306 98880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
98307 98881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nUnconstrained = 0;
98308 98882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
notIndexed = 0;
98309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(isOptimal=(iFrom<nTabList-1); isOptimal>=0; isOptimal--){
98883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(isOptimal=(iFrom<nTabList-1); isOptimal>=0 && bestJ<0; isOptimal--){
98310 98884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask mask; /* Mask of tables not yet ready */
98311 98885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=iFrom, pTabItem=&pTabList->a[j]; j<nTabList; j++, pTabItem++){
98312 98886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int doNotReorder; /* True if this table should not be reordered */
98313 98887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereCost sCost; /* Cost information from best[Virtual]Index() */
98314 98888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy; /* ORDER BY clause for index to optimize */
@@ -98326,15 +98900,17 @@
98326 98900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98327 98901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTabItem->pTab );
98328 98902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
98329 98903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IsVirtual(pTabItem->pTab) ){
98330 98904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_index_info **pp = &pWInfo->a[j].pIdxInfo;
98331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestVirtualIndex(pParse, pWC, pTabItem, mask, pOrderBy, &sCost, pp);
98905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestVirtualIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
98906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ &sCost, pp);
98332 98907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else
98333 98908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
98334 98909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
98335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bestBtreeIndex(pParse, pWC, pTabItem, mask, pOrderBy, &sCost);
98910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bestBtreeIndex(pParse, pWC, pTabItem, mask, notReady, pOrderBy,
98911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ &sCost);
98336 98912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
98337 98913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isOptimal || (sCost.used¬Ready)==0 );
98338 98914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98339 98915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If an INDEXED BY clause is present, then the plan must use that
98340 98916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index if it uses any index at all */
@@ -103366,19 +103942,37 @@
103366 103942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103367 103943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of sqliteicu.h *******************************************/
103368 103944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in main.c ***********************/
103369 103945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
103370 103946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
103372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The version of the library
103373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
103374 103947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_AMALGAMATION
103948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-46656-45156 The sqlite3_version[] string constant
103949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** contains the text of SQLITE_VERSION macro.
103950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
103375 103951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API const char sqlite3_version[] = SQLITE_VERSION;
103376 103952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
103953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
103954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-53536-42575 The sqlite3_libversion() function returns
103955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a pointer to the to the sqlite3_version[] string constant.
103956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
103377 103957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API const char *sqlite3_libversion(void){ return sqlite3_version; }
103958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
103959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-63124-39300 The sqlite3_sourceid() function returns a
103960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pointer to a string constant whose value is the same as the
103961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_SOURCE_ID C preprocessor macro.
103962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
103378 103963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API const char *sqlite3_sourceid(void){ return SQLITE_SOURCE_ID; }
103964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
103965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-35210-63508 The sqlite3_libversion_number() function
103966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns an integer equal to SQLITE_VERSION_NUMBER.
103967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
103379 103968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_libversion_number(void){ return SQLITE_VERSION_NUMBER; }
103969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
103970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMPLEMENTATION-OF: R-54823-41343 The sqlite3_threadsafe() function returns
103971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** zero if and only if SQLite was compiled mutexing code omitted due to
103972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the SQLITE_THREADSAFE compile-time option being set to 0.
103973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
103380 103974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_threadsafe(void){ return SQLITE_THREADSAFE; }
103381 103975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103382 103976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_TRACE) && defined(SQLITE_ENABLE_IOTRACE)
103383 103977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
103384 103978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the following function pointer is not NULL and if
@@ -103495,10 +104089,17 @@
103495 104089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Do the rest of the initialization under the recursive mutex so
103496 104090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that we will be able to handle recursive calls into
103497 104091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_initialize(). The recursive calls normally come through
103498 104092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_os_init() when it invokes sqlite3_vfs_register(), but other
103499 104093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** recursive calls might also be possible.
104094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
104095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IMPLEMENTATION-OF: R-00140-37445 SQLite automatically serializes calls
104096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the xInit method, so the xInit method need not be threadsafe.
104097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
104098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following mutex is what serializes access to the appdef pcache xInit
104099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** methods. The sqlite3_pcache_methods.xInit() all is embedded in the
104100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** call to sqlite3PcacheInitialize().
103500 104101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
103501 104102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(sqlite3GlobalConfig.pInitMutex);
103502 104103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.isInit==0 && sqlite3GlobalConfig.inProgress==0 ){
103503 104104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDefHash *pHash = &GLOBAL(FuncDefHash, sqlite3GlobalFunctions);
103504 104105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.inProgress = 1;
@@ -103775,16 +104376,16 @@
103775 104376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( cnt<0 ) cnt = 0;
103776 104377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sz==0 || cnt==0 ){
103777 104378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sz = 0;
103778 104379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStart = 0;
103779 104380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pBuf==0 ){
103780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sz = ROUND8(sz);
104381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
103781 104382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BeginBenignMalloc();
103782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pStart = sqlite3Malloc( sz*cnt );
104383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pStart = sqlite3Malloc( sz*cnt ); /* IMP: R-61949-35727 */
103783 104384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3EndBenignMalloc();
103784 104385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
103785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sz = ROUNDDOWN8(sz);
104386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sz = ROUNDDOWN8(sz); /* IMP: R-33038-09382 */
103786 104387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStart = pBuf;
103787 104388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103788 104389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->lookaside.pStart = pStart;
103789 104390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->lookaside.pFree = 0;
103790 104391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->lookaside.sz = (u16)sz;
@@ -103823,18 +104424,18 @@
103823 104424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_list ap;
103824 104425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
103825 104426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_start(ap, op);
103826 104427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( op ){
103827 104428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_DBCONFIG_LOOKASIDE: {
103828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void *pBuf = va_arg(ap, void*);
103829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int sz = va_arg(ap, int);
103830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int cnt = va_arg(ap, int);
104429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pBuf = va_arg(ap, void*); /* IMP: R-21112-12275 */
104430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sz = va_arg(ap, int); /* IMP: R-47871-25994 */
104431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int cnt = va_arg(ap, int); /* IMP: R-04460-53386 */
103831 104432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = setupLookaside(db, pBuf, sz, cnt);
103832 104433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
103833 104434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103834 104435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: {
103835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
104436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_ERROR; /* IMP: R-42790-23372 */
103836 104437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
103837 104438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103838 104439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103839 104440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
103840 104441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -103934,16 +104535,33 @@
103934 104535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
103935 104536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->nSavepoint = 0;
103936 104537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->nStatement = 0;
103937 104538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->isTransactionSavepoint = 0;
103938 104539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
104542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Invoke the destructor function associated with FuncDef p, if any. Except,
104543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if this is not the last copy of the function, do not invoke it. Multiple
104544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** copies of a single function are created when create_function() is called
104545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** with SQLITE_ANY as the encoding.
104546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
104547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void functionDestroy(sqlite3 *db, FuncDef *p){
104548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FuncDestructor *pDestructor = p->pDestructor;
104549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pDestructor ){
104550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDestructor->nRef--;
104551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pDestructor->nRef==0 ){
104552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDestructor->xDestroy(pDestructor->pUserData);
104553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pDestructor);
104554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
104555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
104556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
103939 104557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103940 104558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
103941 104559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Close an existing SQLite database
103942 104560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
103943 104561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_close(sqlite3 *db){
103944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- HashElem *i;
104562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HashElem *i; /* Hash table iterator */
103945 104563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j;
103946 104564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
103947 104565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db ){
103948 104566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
103949 104567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -104007,10 +104625,11 @@
104007 104625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<ArraySize(db->aFunc.a); j++){
104008 104626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDef *pNext, *pHash, *p;
104009 104627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=db->aFunc.a[j]; p; p=pHash){
104010 104628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pHash = p->pHash;
104011 104629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p ){
104630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ functionDestroy(db, p);
104012 104631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNext = p->pNext;
104013 104632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, p);
104014 104633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = pNext;
104015 104634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104016 104635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -104281,11 +104900,12 @@
104281 104900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg,
104282 104901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int enc,
104283 104902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pUserData,
104284 104903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
104285 104904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xStep)(sqlite3_context*,int,sqlite3_value **),
104286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void (*xFinal)(sqlite3_context*)
104905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xFinal)(sqlite3_context*),
104906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FuncDestructor *pDestructor
104287 104907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
104288 104908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDef *p;
104289 104909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nName;
104290 104910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104291 104911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(db->mutex) );
@@ -104309,14 +104929,14 @@
104309 104929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( enc==SQLITE_UTF16 ){
104310 104930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
enc = SQLITE_UTF16NATIVE;
104311 104931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( enc==SQLITE_ANY ){
104312 104932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
104313 104933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF8,
104314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pUserData, xFunc, xStep, xFinal);
104934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pUserData, xFunc, xStep, xFinal, pDestructor);
104315 104935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
104316 104936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3CreateFunc(db, zFunctionName, nArg, SQLITE_UTF16LE,
104317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pUserData, xFunc, xStep, xFinal);
104937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pUserData, xFunc, xStep, xFinal, pDestructor);
104318 104938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104319 104939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
104320 104940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
104321 104941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104322 104942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
enc = SQLITE_UTF16BE;
@@ -104345,10 +104965,19 @@
104345 104965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 1);
104346 104966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(p || db->mallocFailed);
104347 104967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !p ){
104348 104968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM;
104349 104969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If an older version of the function with a configured destructor is
104972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** being replaced invoke the destructor function here. */
104973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ functionDestroy(db, p);
104974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pDestructor ){
104976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pDestructor->nRef++;
104977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
104978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pDestructor = pDestructor;
104350 104979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->flags = 0;
104351 104980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xFunc = xFunc;
104352 104981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xStep = xStep;
104353 104982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->xFinalize = xFinal;
104354 104983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pUserData = pUserData;
@@ -104359,21 +104988,53 @@
104359 104988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
104360 104989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Create new user functions.
104361 104990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104362 104991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_create_function(
104363 104992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db,
104364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zFunctionName,
104993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zFunc,
104365 104994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg,
104366 104995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int enc,
104367 104996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *p,
104368 104997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
104369 104998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xStep)(sqlite3_context*,int,sqlite3_value **),
104370 104999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xFinal)(sqlite3_context*)
104371 105000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
104372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
105001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_create_function_v2(db, zFunc, nArg, enc, p, xFunc, xStep,
105002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xFinal, 0);
105003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_create_function_v2(
105006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db,
105007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zFunc,
105008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nArg,
105009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int enc,
105010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *p,
105011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xFunc)(sqlite3_context*,int,sqlite3_value **),
105012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xStep)(sqlite3_context*,int,sqlite3_value **),
105013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xFinal)(sqlite3_context*),
105014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void (*xDestroy)(void *)
105015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
105016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_ERROR;
105017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ FuncDestructor *pArg = 0;
104373 105018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(db->mutex);
104374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3CreateFunc(db, zFunctionName, nArg, enc, p, xFunc, xStep, xFinal);
105019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( xDestroy ){
105020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pArg = (FuncDestructor *)sqlite3DbMallocZero(db, sizeof(FuncDestructor));
105021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pArg ){
105022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xDestroy(p);
105023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto out;
105024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pArg->xDestroy = xDestroy;
105026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pArg->pUserData = p;
105027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3CreateFunc(db, zFunc, nArg, enc, p, xFunc, xStep, xFinal, pArg);
105029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pArg && pArg->nRef==0 ){
105030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc!=SQLITE_OK );
105031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ xDestroy(p);
105032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, pArg);
105033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ out:
104375 105036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3ApiExit(db, rc);
104376 105037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(db->mutex);
104377 105038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
104378 105039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104379 105040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -104391,11 +105052,11 @@
104391 105052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
104392 105053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFunc8;
104393 105054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(db->mutex);
104394 105055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !db->mallocFailed );
104395 105056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1, SQLITE_UTF16NATIVE);
104396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal);
105057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal,0);
104397 105058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, zFunc8);
104398 105059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3ApiExit(db, rc);
104399 105060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(db->mutex);
104400 105061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
104401 105062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -104422,11 +105083,11 @@
104422 105083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nName = sqlite3Strlen30(zName);
104423 105084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
104424 105085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(db->mutex);
104425 105086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3FindFunction(db, zName, nName, nArg, SQLITE_UTF8, 0)==0 ){
104426 105087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3CreateFunc(db, zName, nArg, SQLITE_UTF8,
104427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0, sqlite3InvalidFunction, 0, 0);
105088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, sqlite3InvalidFunction, 0, 0, 0);
104428 105089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104429 105090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3ApiExit(db, SQLITE_OK);
104430 105091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(db->mutex);
104431 105092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
104432 105093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -104560,11 +105221,14 @@
104560 105221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** registered using sqlite3_wal_hook(). Likewise, registering a callback
104561 105222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using sqlite3_wal_hook() disables the automatic checkpoint mechanism
104562 105223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** configured by this function.
104563 105224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104564 105225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_wal_autocheckpoint(sqlite3 *db, int nFrame){
104565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_WAL
105226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_OMIT_WAL
105227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(db);
105228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(nFrame);
105229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
104566 105230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nFrame>0 ){
104567 105231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_wal_hook(db, sqlite3WalDefaultHook, SQLITE_INT_TO_PTR(nFrame));
104568 105232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
104569 105233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_wal_hook(db, 0, 0);
104570 105234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -104690,64 +105354,10 @@
104690 105354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_TEMP_STORE<1 || SQLITE_TEMP_STORE>3
104691 105355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
104692 105356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
104693 105357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104694 105358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
104695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
104696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine is called to create a connection to a database BTree
104697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** driver. If zFilename is the name of a file, then that file is
104698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** opened and used. If zFilename is the magic name ":memory:" then
104699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the database is stored in memory (and is thus forgotten as soon as
104700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the connection is closed.) If zFilename is NULL then the database
104701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is a "virtual" database for transient use only and is deleted as
104702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** soon as the connection is closed.
104703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
104704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A virtual database can be either a disk file (that is automatically
104705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** deleted when the file is closed) or it an be held entirely in memory.
104706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The sqlite3TempInMemory() function is used to determine which.
104707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
104708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3BtreeFactory(
104709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3 *db, /* Main database when opening aux otherwise 0 */
104710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const char *zFilename, /* Name of the file containing the BTree database */
104711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int omitJournal, /* if TRUE then do not journal this file */
104712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nCache, /* How many pages in the page cache */
104713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int vfsFlags, /* Flags passed through to vfsOpen */
104714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Btree **ppBtree /* Pointer to new Btree object written here */
104715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
104716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int btFlags = 0;
104717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
104718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
104719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3_mutex_held(db->mutex) );
104720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ppBtree != 0);
104721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( omitJournal ){
104722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- btFlags |= BTREE_OMIT_JOURNAL;
104723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
104724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( db->flags & SQLITE_NoReadlock ){
104725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- btFlags |= BTREE_NO_READLOCK;
104726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
104727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_MEMORYDB
104728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zFilename==0 && sqlite3TempInMemory(db) ){
104729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zFilename = ":memory:";
104730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
104731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
104732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
104733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (vfsFlags & SQLITE_OPEN_MAIN_DB)!=0 && (zFilename==0 || *zFilename==0) ){
104734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- vfsFlags = (vfsFlags & ~SQLITE_OPEN_MAIN_DB) | SQLITE_OPEN_TEMP_DB;
104735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
104736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeOpen(zFilename, (sqlite3 *)db, ppBtree, btFlags, vfsFlags);
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 the B-Tree was successfully opened, set the pager-cache size to the
104739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** default value. Except, if the call to BtreeOpen() returned a handle
104740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** open on an existing shared pager-cache, do not change the pager-cache
104741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** size.
104742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
104743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && 0==sqlite3BtreeSchema(*ppBtree, 0, 0) ){
104744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3BtreeSetCacheSize(*ppBtree, nCache);
104745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
104746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
104747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
104748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
104749 105359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
104750 105360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return UTF-8 encoded English language explanation of the most recent
104751 105361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** error.
104752 105362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104753 105363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API const char *sqlite3_errmsg(sqlite3 *db){
@@ -104986,21 +105596,43 @@
104986 105596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It merely prevents new constructs that exceed the limit
104987 105597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from forming.
104988 105598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
104989 105599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
104990 105600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int oldLimit;
105601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-30189-54097 For each limit category SQLITE_LIMIT_NAME
105604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** there is a hard upper bound set at compile-time by a C preprocessor
105605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** macro called SQLITE_MAX_NAME. (The "_LIMIT_" in the name is changed to
105606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "_MAX_".)
105607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
105608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_LENGTH]==SQLITE_MAX_LENGTH );
105609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_SQL_LENGTH]==SQLITE_MAX_SQL_LENGTH );
105610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_COLUMN]==SQLITE_MAX_COLUMN );
105611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_EXPR_DEPTH]==SQLITE_MAX_EXPR_DEPTH );
105612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_COMPOUND_SELECT]==SQLITE_MAX_COMPOUND_SELECT);
105613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_VDBE_OP]==SQLITE_MAX_VDBE_OP );
105614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_FUNCTION_ARG]==SQLITE_MAX_FUNCTION_ARG );
105615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_ATTACHED]==SQLITE_MAX_ATTACHED );
105616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_LIKE_PATTERN_LENGTH]==
105617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_MAX_LIKE_PATTERN_LENGTH );
105618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
105619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
105620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) );
105621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
104991 105623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
104992 105624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return -1;
104993 105625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104994 105626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
oldLimit = db->aLimit[limitId];
104995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( newLimit>=0 ){
105627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( newLimit>=0 ){ /* IMP: R-52476-28732 */
104996 105628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( newLimit>aHardLimit[limitId] ){
104997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- newLimit = aHardLimit[limitId];
105629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ newLimit = aHardLimit[limitId]; /* IMP: R-51463-25634 */
104998 105630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
104999 105631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->aLimit[limitId] = newLimit;
105000 105632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return oldLimit;
105633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return oldLimit; /* IMP: R-53341-35419 */
105002 105634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105003 105635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
105004 105636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
105005 105637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine does the work of opening a database on behalf of
105006 105638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_open() and sqlite3_open16(). The database filename "zFilename"
@@ -105019,10 +105651,28 @@
105019 105651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppDb = 0;
105020 105652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOINIT
105021 105653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_initialize();
105022 105654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) return rc;
105023 105655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
105656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Only allow sensible combinations of bits in the flags argument.
105658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Throw an error if any non-sense combination is used. If we
105659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** do not block illegal combinations here, it could trigger
105660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** assert() statements in deeper layers. Sensible combinations
105661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are:
105662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
105663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1: SQLITE_OPEN_READONLY
105664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2: SQLITE_OPEN_READWRITE
105665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 6: SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
105666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
105667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( SQLITE_OPEN_READONLY == 0x01 );
105668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( SQLITE_OPEN_READWRITE == 0x02 );
105669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( SQLITE_OPEN_CREATE == 0x04 );
105670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( (1<<(flags&7))==0x02 ); /* READONLY */
105671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
105672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
105673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE;
105024 105674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
105025 105675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3GlobalConfig.bCoreMutex==0 ){
105026 105676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isThreadsafe = 0;
105027 105677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & SQLITE_OPEN_NOMUTEX ){
105028 105678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isThreadsafe = 0;
@@ -105053,11 +105703,12 @@
105053 105703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_MAIN_JOURNAL |
105054 105704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_TEMP_JOURNAL |
105055 105705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_SUBJOURNAL |
105056 105706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_MASTER_JOURNAL |
105057 105707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_NOMUTEX |
105058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_OPEN_FULLMUTEX
105708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_OPEN_FULLMUTEX |
105709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_OPEN_WAL
105059 105710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
105060 105711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
105061 105712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allocate the sqlite data structure */
105062 105713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db = sqlite3MallocZero( sizeof(sqlite3) );
105063 105714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db==0 ) goto opendb_out;
@@ -105125,13 +105776,12 @@
105125 105776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
createCollation(db, "NOCASE", SQLITE_UTF8, SQLITE_COLL_NOCASE, 0,
105126 105777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nocaseCollatingFunc, 0);
105127 105778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
105128 105779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open the backend database driver */
105129 105780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->openFlags = flags;
105130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3BtreeFactory(db, zFilename, 0, SQLITE_DEFAULT_CACHE_SIZE,
105131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- flags | SQLITE_OPEN_MAIN_DB,
105132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- &db->aDb[0].pBt);
105781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3BtreeOpen(zFilename, db, &db->aDb[0].pBt, 0,
105782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ flags | SQLITE_OPEN_MAIN_DB);
105133 105783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
105134 105784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_IOERR_NOMEM ){
105135 105785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
105136 105786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105137 105787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Error(db, rc, 0);
@@ -105833,10 +106483,26 @@
105833 106483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
105834 106484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_TESTCTRL_PGHDRSZ: {
105835 106485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sizeof(PgHdr);
105836 106486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
105837 106487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
106488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
106489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* sqlite3_test_control(SQLITE_TESTCTRL_SCRATCHMALLOC, sz, &pNew, pFree);
106490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
106491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Pass pFree into sqlite3ScratchFree().
106492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If sz>0 then allocate a scratch buffer into pNew.
106493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
106494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_TESTCTRL_SCRATCHMALLOC: {
106495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pFree, **ppNew;
106496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sz;
106497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sz = va_arg(ap, int);
106498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ppNew = va_arg(ap, void**);
106499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFree = va_arg(ap, void*);
106500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sz ) *ppNew = sqlite3ScratchMalloc(sz);
106501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ScratchFree(pFree);
106502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
106503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105838 106504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
105839 106505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105840 106506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
105841 106507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_BUILTIN_TEST */
105842 106508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -107022,10 +107688,11 @@
107022 107688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
107023 107689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3ReadBlock(Fts3Table*, sqlite3_int64, char const**, int*);
107024 107690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3AllSegdirs(Fts3Table*, sqlite3_stmt **);
107025 107691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3MatchinfoDocsizeLocal(Fts3Cursor*, u32*);
107026 107692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3MatchinfoDocsizeGlobal(Fts3Cursor*, u32*);
107693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *);
107027 107694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
107028 107695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Flags allowed as part of the 4th argument to SegmentReaderIterate() */
107029 107696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS3_SEGMENT_REQUIRE_POS 0x00000001
107030 107697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS3_SEGMENT_IGNORE_EMPTY 0x00000002
107031 107698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define FTS3_SEGMENT_COLUMN_FILTER 0x00000004
@@ -108971,10 +109638,13 @@
108971 109638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zQuery);
108972 109639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108973 109640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
108974 109641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108975 109642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
109643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts3ReadLock(p);
109644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ) return rc;
109645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
108976 109646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = evalFts3Expr(p, pCsr->pExpr, &pCsr->aDoclist, &pCsr->nDoclist, 0);
108977 109647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pNextId = pCsr->aDoclist;
108978 109648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->iPrevId = 0;
108979 109649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108980 109650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -109349,15 +110019,18 @@
109349 110019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fts3RenameMethod(
109350 110020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab, /* Virtual table handle */
109351 110021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName /* New name of table */
109352 110022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
109353 110023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Table *p = (Fts3Table *)pVtab;
109354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3 *db; /* Database connection */
110024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db = p->db; /* Database connection */
109355 110025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc; /* Return Code */
109356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
109357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- db = p->db;
109358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_OK;
110026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
110027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3Fts3PendingTermsFlush(p);
110028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
110029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
110030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
110031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
109359 110032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fts3DbExec(&rc, db,
109360 110033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"ALTER TABLE %Q.'%q_content' RENAME TO '%q_content';",
109361 110034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zDb, p->zName, zName
109362 110035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
109363 110036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_ERROR ) rc = SQLITE_OK;
@@ -112512,10 +113185,40 @@
112512 113185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_CORRUPT;
112513 113186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112514 113187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112515 113188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
112516 113189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
113191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
113192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function ensures that the caller has obtained a shared-cache
113193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table-lock on the %_content table. This is required before reading
113194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** data from the fts3 table. If this lock is not acquired first, then
113195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the caller may end up holding read-locks on the %_segments and %_segdir
113196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** tables, but no read-lock on the %_content table. If this happens
113197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a second connection will be able to write to the fts3 table, but
113198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** attempting to commit those writes might return SQLITE_LOCKED or
113199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_LOCKED_SHAREDCACHE (because the commit attempts to obtain
113200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** write-locks on the %_segments and %_segdir ** tables).
113201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
113202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** We try to avoid this because if FTS3 returns any error when committing
113203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a transaction, the whole transaction will be rolled back. And this is
113204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not what users expect when they get SQLITE_LOCKED_SHAREDCACHE. It can
113205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** still happen if the user reads data directly from the %_segments or
113206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** %_segdir tables instead of going through FTS3 though.
113207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
113208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3Fts3ReadLock(Fts3Table *p){
113209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc; /* Return code */
113210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt; /* Statement used to obtain lock */
113211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
113212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fts3SqlStmt(p, SQL_SELECT_CONTENT_BY_ROWID, &pStmt, 0);
113213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
113214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_null(pStmt, 1);
113215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_step(pStmt);
113216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_reset(pStmt);
113217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
113218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
113219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
112517 113220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112518 113221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
112519 113222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Set *ppStmt to a statement handle that may be used to iterate through
112520 113223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** all rows in the %_segdir table, from oldest to newest. If successful,
112521 113224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return SQLITE_OK. If an error occurs while preparing the statement,
@@ -116003,10 +116706,49 @@
116003 116706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116004 116707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
116005 116708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains code for implementations of the r-tree and r*-tree
116006 116709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** algorithms packaged as an SQLite virtual table module.
116007 116710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Database Format of R-Tree Tables
116714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** --------------------------------
116715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The data structure for a single virtual r-tree table is stored in three
116717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** native SQLite tables declared as follows. In each case, the '%' character
116718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in the table name is replaced with the user-supplied name of the r-tree
116719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table.
116720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE %_node(nodeno INTEGER PRIMARY KEY, data BLOB)
116722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE %_parent(nodeno INTEGER PRIMARY KEY, parentnode INTEGER)
116723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE TABLE %_rowid(rowid INTEGER PRIMARY KEY, nodeno INTEGER)
116724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The data for each node of the r-tree structure is stored in the %_node
116726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table. For each node that is not the root node of the r-tree, there is
116727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an entry in the %_parent table associating the node with its parent.
116728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** And for each row of data in the table, there is an entry in the %_rowid
116729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table that maps from the entries rowid to the id of the node that it
116730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is stored on.
116731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The root node of an r-tree always exists, even if the r-tree table is
116733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** empty. The nodeno of the root node is always 1. All other nodes in the
116734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table must be the same size as the root node. The content of each node
116735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is formatted as follows:
116736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1. If the node is the root node (node 1), then the first 2 bytes
116738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the node contain the tree depth as a big-endian integer.
116739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For non-root nodes, the first 2 bytes are left unused.
116740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2. The next 2 bytes contain the number of entries currently
116742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** stored in the node.
116743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 3. The remainder of the node contains the node entries. Each entry
116745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** consists of a single 8-byte integer followed by an even number
116746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of 4-byte coordinates. For leaf nodes the integer is the rowid
116747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of a record. For internal nodes it is the node number of a
116748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** child page.
116749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116008 116750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116009 116751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_RTREE)
116010 116752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116011 116753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116012 116754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains an implementation of a couple of different variants
@@ -116044,18 +116786,22 @@
116044 116786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116045 116787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if VARIANT_RSTARTREE_SPLIT
116046 116788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define AssignCells splitNodeStartree
116047 116789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116048 116790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(NDEBUG) && !defined(SQLITE_DEBUG)
116792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define NDEBUG 1
116793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
116049 116794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116050 116795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_CORE
116051 116796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_EXTENSION_INIT1
116052 116797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
116053 116798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116054 116799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116055 116800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116056 116801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_AMALGAMATION
116802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #include "sqlite3rtree.h"
116057 116803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef sqlite3_int64 i64;
116058 116804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned char u8;
116059 116805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned int u32;
116060 116806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116061 116807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -116062,10 +116808,12 @@
116062 116808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct Rtree Rtree;
116063 116809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct RtreeCursor RtreeCursor;
116064 116810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct RtreeNode RtreeNode;
116065 116811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct RtreeCell RtreeCell;
116066 116812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct RtreeConstraint RtreeConstraint;
116813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct RtreeMatchArg RtreeMatchArg;
116814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct RtreeGeomCallback RtreeGeomCallback;
116067 116815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef union RtreeCoord RtreeCoord;
116068 116816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116069 116817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The rtree may have between 1 and RTREE_MAX_DIMENSIONS dimensions. */
116070 116818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define RTREE_MAX_DIMENSIONS 5
116071 116819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -116131,10 +116879,19 @@
116131 116879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116132 116880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define RTREE_MINCELLS(p) ((((p)->iNodeSize-4)/(p)->nBytesPerCell)/3)
116133 116881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define RTREE_REINSERT(p) RTREE_MINCELLS(p)
116134 116882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define RTREE_MAXCELLS 51
116135 116883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The smallest possible node-size is (512-64)==448 bytes. And the largest
116886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** supported cell size is 48 bytes (8 byte rowid + ten 4 byte coordinates).
116887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Therefore all non-root nodes must contain at least 3 entries. Since
116888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2^40 is greater than 2^64, an r-tree structure always has a depth of
116889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 40 or less.
116890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_MAX_DEPTH 40
116892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116136 116893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116137 116894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An rtree cursor object.
116138 116895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116139 116896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RtreeCursor {
116140 116897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab_cursor base;
@@ -116163,39 +116920,27 @@
116163 116920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116164 116921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116165 116922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A search constraint.
116166 116923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116167 116924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RtreeConstraint {
116168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCoord; /* Index of constrained coordinate */
116169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int op; /* Constraining operation */
116170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double rValue; /* Constraint value. */
116925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCoord; /* Index of constrained coordinate */
116926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int op; /* Constraining operation */
116927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double rValue; /* Constraint value. */
116928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
116929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_rtree_geometry *pGeom; /* Constraint callback argument for a MATCH */
116171 116930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
116172 116931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116173 116932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Possible values for RtreeConstraint.op */
116174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define RTREE_EQ 0x41
116175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define RTREE_LE 0x42
116176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define RTREE_LT 0x43
116177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define RTREE_GE 0x44
116178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define RTREE_GT 0x45
116933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_EQ 0x41
116934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_LE 0x42
116935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_LT 0x43
116936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_GE 0x44
116937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_GT 0x45
116938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_MATCH 0x46
116179 116939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116180 116940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116181 116941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An rtree structure node.
116182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
116183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Data format (RtreeNode.zData):
116184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
116185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 1. If the node is the root node (node 1), then the first 2 bytes
116186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the node contain the tree depth as a big-endian integer.
116187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** For non-root nodes, the first 2 bytes are left unused.
116188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
116189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 2. The next 2 bytes contain the number of entries currently
116190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** stored in the node.
116191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
116192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 3. The remainder of the node contains the node entries. Each entry
116193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** consists of a single 8-byte integer followed by an even number
116194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of 4-byte coordinates. For leaf nodes the integer is the rowid
116195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of a record. For internal nodes it is the node number of a
116196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** child page.
116197 116942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116198 116943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RtreeNode {
116199 116944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pParent; /* Parent node */
116200 116945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iNode;
116201 116946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRef;
@@ -116211,10 +116956,44 @@
116211 116956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RtreeCell {
116212 116957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iRowid;
116213 116958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCoord aCoord[RTREE_MAX_DIMENSIONS*2];
116214 116959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
116215 116960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Value for the first field of every RtreeMatchArg object. The MATCH
116964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** operator tests that the first field of a blob operand matches this
116965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value to avoid operating on invalid blobs (which could cause a segfault).
116966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define RTREE_GEOMETRY_MAGIC 0x891245AB
116968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An instance of this structure must be supplied as a blob argument to
116971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the right-hand-side of an SQL MATCH operator used to constrain an
116972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** r-tree query.
116973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RtreeMatchArg {
116975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 magic; /* Always RTREE_GEOMETRY_MAGIC */
116976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
116977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pContext;
116978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nParam;
116979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double aParam[1];
116980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
116981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When a geometry callback is created (see sqlite3_rtree_geometry_callback),
116984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a single instance of the following structure is allocated. It is used
116985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as the context for the user-function created by by s_r_g_c(). The object
116986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is eventually deleted by the destructor mechanism provided by
116987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_create_function_v2() (which is called by s_r_g_c() to create
116988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the geometry callback function).
116989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct RtreeGeomCallback {
116991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *);
116992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pContext;
116993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ };
116994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116216 116995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef MAX
116217 116996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define MAX(x,y) ((x) < (y) ? (y) : (x))
116218 116997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116219 116998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef MIN
116220 116999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define MIN(x,y) ((x) > (y) ? (y) : (x))
@@ -116293,14 +117072,12 @@
116293 117072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116294 117073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116295 117074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Clear the content of node p (set all bytes to 0x00).
116296 117075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116297 117076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void nodeZero(Rtree *pRtree, RtreeNode *p){
116298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p ){
116299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(&p->zData[2], 0, pRtree->iNodeSize-2);
116300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->isDirty = 1;
116301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
117077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&p->zData[2], 0, pRtree->iNodeSize-2);
117078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->isDirty = 1;
116302 117079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116303 117080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116304 117081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116305 117082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Given a node number iNode, return the corresponding key to use
116306 117083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the Rtree.aHash table.
@@ -116316,26 +117093,23 @@
116316 117093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Search the node hash table for node iNode. If found, return a pointer
116317 117094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to it. Otherwise, return 0.
116318 117095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116319 117096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static RtreeNode *nodeHashLookup(Rtree *pRtree, i64 iNode){
116320 117097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *p;
116321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( iNode!=0 );
116322 117098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(p=pRtree->aHash[nodeHash(iNode)]; p && p->iNode!=iNode; p=p->pNext);
116323 117099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p;
116324 117100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116325 117101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116326 117102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116327 117103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add node pNode to the node hash table.
116328 117104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116329 117105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void nodeHashInsert(Rtree *pRtree, RtreeNode *pNode){
116330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNode ){
116331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iHash;
116332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pNode->pNext==0 );
116333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iHash = nodeHash(pNode->iNode);
116334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->pNext = pRtree->aHash[iHash];
116335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRtree->aHash[iHash] = pNode;
116336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
117106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iHash;
117107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pNode->pNext==0 );
117108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iHash = nodeHash(pNode->iNode);
117109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->pNext = pRtree->aHash[iHash];
117110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRtree->aHash[iHash] = pNode;
116337 117111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116338 117112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116339 117113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116340 117114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Remove node pNode from the node hash table.
116341 117115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -116353,15 +117127,15 @@
116353 117127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocate and return new r-tree node. Initially, (RtreeNode.iNode==0),
116354 117128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** indicating that node has not yet been assigned a node number. It is
116355 117129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** assigned a node number when nodeWrite() is called to write the
116356 117130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** node contents out to the database.
116357 117131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent, int zero){
117132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static RtreeNode *nodeNew(Rtree *pRtree, RtreeNode *pParent){
116359 117133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pNode;
116360 117134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize);
116361 117135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNode ){
116362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(pNode, 0, sizeof(RtreeNode) + (zero?pRtree->iNodeSize:0));
117136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pNode, 0, sizeof(RtreeNode) + pRtree->iNodeSize);
116363 117137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->zData = (u8 *)&pNode[1];
116364 117138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->nRef = 1;
116365 117139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->pParent = pParent;
116366 117140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->isDirty = 1;
116367 117141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeReference(pParent);
@@ -116378,10 +117152,11 @@
116378 117152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iNode, /* Node number to load */
116379 117153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pParent, /* Either the parent node or NULL */
116380 117154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode **ppNode /* OUT: Acquired node */
116381 117155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
116382 117156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
117157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc2 = SQLITE_OK;
116383 117158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pNode;
116384 117159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116385 117160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check if the requested node is already in the hash table. If so,
116386 117161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** increase its reference count and return it.
116387 117162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -116394,43 +117169,67 @@
116394 117169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->nRef++;
116395 117170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppNode = pNode;
116396 117171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
116397 117172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116398 117173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode) + pRtree->iNodeSize);
116400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !pNode ){
116401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *ppNode = 0;
116402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_NOMEM;
116403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
116404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->pParent = pParent;
116405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->zData = (u8 *)&pNode[1];
116406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->nRef = 1;
116407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->iNode = iNode;
116408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->isDirty = 0;
116409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->pNext = 0;
116410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
116411 117174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_bind_int64(pRtree->pReadNode, 1, iNode);
116412 117175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_step(pRtree->pReadNode);
116413 117176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_ROW ){
116414 117177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const u8 *zBlob = sqlite3_column_blob(pRtree->pReadNode, 0);
116415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3_column_bytes(pRtree->pReadNode, 0)==pRtree->iNodeSize );
116416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memcpy(pNode->zData, zBlob, pRtree->iNodeSize);
116417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nodeReference(pParent);
117178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRtree->iNodeSize==sqlite3_column_bytes(pRtree->pReadNode, 0) ){
117179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode = (RtreeNode *)sqlite3_malloc(sizeof(RtreeNode)+pRtree->iNodeSize);
117180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pNode ){
117181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc2 = SQLITE_NOMEM;
117182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
117183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->pParent = pParent;
117184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->zData = (u8 *)&pNode[1];
117185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->nRef = 1;
117186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->iNode = iNode;
117187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->isDirty = 0;
117188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->pNext = 0;
117189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pNode->zData, zBlob, pRtree->iNodeSize);
117190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nodeReference(pParent);
117191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_reset(pRtree->pReadNode);
117195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ) rc = rc2;
117196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the root node was just loaded, set pRtree->iDepth to the height
117198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the r-tree structure. A height of zero means all data is stored on
117199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the root node. A height of one means the children of the root node
117200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are the leaves, and so on. If the depth as specified on the root node
117201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is greater than RTREE_MAX_DEPTH, the r-tree structure must be corrupt.
117202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNode && iNode==1 ){
117204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRtree->iDepth = readInt16(pNode->zData);
117205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pRtree->iDepth>RTREE_MAX_DEPTH ){
117206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_CORRUPT;
117207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If no error has occurred so far, check if the "number of entries"
117211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** field on the node is too large. If so, set the return code to
117212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_CORRUPT.
117213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNode && rc==SQLITE_OK ){
117215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NCELL(pNode)>((pRtree->iNodeSize-4)/pRtree->nBytesPerCell) ){
117216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_CORRUPT;
117217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
117221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pNode!=0 ){
117222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nodeHashInsert(pRtree, pNode);
117223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
117224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_CORRUPT;
117225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppNode = pNode;
116418 117227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
116419 117228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pNode);
116420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode = 0;
116421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
116422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
116423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *ppNode = pNode;
116424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3_reset(pRtree->pReadNode);
116425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
116426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && iNode==1 ){
116427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRtree->iDepth = readInt16(pNode->zData);
116428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
116429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
116430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (rc==SQLITE_OK && pNode) || (pNode==0 && rc!=SQLITE_OK) );
116431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nodeHashInsert(pRtree, pNode);
117229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *ppNode = 0;
117230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116432 117231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116433 117232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116434 117233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116435 117234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116436 117235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -116479,12 +117278,11 @@
116479 117278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMaxCell; /* Maximum number of cells for pNode */
116480 117279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116481 117280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nMaxCell = (pRtree->iNodeSize-4)/pRtree->nBytesPerCell;
116482 117281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCell = NCELL(pNode);
116483 117282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(nCell<=nMaxCell);
116485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
117283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nCell<=nMaxCell );
116486 117284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nCell<nMaxCell ){
116487 117285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeOverwriteCell(pRtree, pNode, pCell, nCell);
116488 117286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
writeInt16(&pNode->zData[2], nCell+1);
116489 117287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->isDirty = 1;
116490 117288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -116700,18 +117498,37 @@
116700 117498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppCursor = (sqlite3_vtab_cursor *)pCsr;
116701 117499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116702 117500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116703 117501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116704 117502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Free the RtreeCursor.aConstraint[] array and its contents.
117506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void freeCursorConstraints(RtreeCursor *pCsr){
117508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCsr->aConstraint ){
117509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Used to iterate through constraint array */
117510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pCsr->nConstraint; i++){
117511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_rtree_geometry *pGeom = pCsr->aConstraint[i].pGeom;
117512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pGeom ){
117513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pGeom->xDelUser ) pGeom->xDelUser(pGeom->pUser);
117514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pGeom);
117515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pCsr->aConstraint);
117518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->aConstraint = 0;
117519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116705 117522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116706 117523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Rtree virtual table module xClose method.
116707 117524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116708 117525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int rtreeClose(sqlite3_vtab_cursor *cur){
116709 117526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Rtree *pRtree = (Rtree *)(cur->pVtab);
116710 117527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
116711 117528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCursor *pCsr = (RtreeCursor *)cur;
116712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(pCsr->aConstraint);
117529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ freeCursorConstraints(pCsr);
116713 117530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = nodeRelease(pRtree, pCsr->pNode);
116714 117531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pCsr);
116715 117532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116716 117533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116717 117534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -116723,18 +117540,44 @@
116723 117540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116724 117541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int rtreeEof(sqlite3_vtab_cursor *cur){
116725 117542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCursor *pCsr = (RtreeCursor *)cur;
116726 117543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return (pCsr->pNode==0);
116727 117544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The r-tree constraint passed as the second argument to this function is
117548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** guaranteed to be a MATCH constraint.
117549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int testRtreeGeom(
117551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Rtree *pRtree, /* R-Tree object */
117552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeConstraint *pConstraint, /* MATCH constraint to test */
117553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeCell *pCell, /* Cell to test */
117554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pbRes /* OUT: Test result */
117555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
117556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
117557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double aCoord[RTREE_MAX_DIMENSIONS*2];
117558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCoord = pRtree->nDim*2;
117559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pConstraint->op==RTREE_MATCH );
117561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pConstraint->pGeom );
117562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nCoord; i++){
117564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aCoord[i] = DCOORD(pCell->aCoord[i]);
117565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pConstraint->xGeom(pConstraint->pGeom, nCoord, aCoord, pbRes);
117567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116728 117568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116729 117569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116730 117570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Cursor pCursor currently points to a cell in a non-leaf page.
116731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return true if the sub-tree headed by the cell is filtered
117571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set *pbEof to true if the sub-tree headed by the cell is filtered
116732 117572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (excluded) by the constraints in the pCursor->aConstraint[]
116733 117573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** array, or false otherwise.
117574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return SQLITE_OK if successful or an SQLite error code if an error
117576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** occurs within a geometry callback.
116734 117577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor){
117578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int testRtreeCell(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
116736 117579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell cell;
116737 117580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
116738 117581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bRes = 0;
116739 117582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116740 117583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
@@ -116742,56 +117585,92 @@
116742 117585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeConstraint *p = &pCursor->aConstraint[ii];
116743 117586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double cell_min = DCOORD(cell.aCoord[(p->iCoord>>1)*2]);
116744 117587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double cell_max = DCOORD(cell.aCoord[(p->iCoord>>1)*2+1]);
116745 117588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116746 117589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE
116747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || p->op==RTREE_GT || p->op==RTREE_EQ
117590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
116748 117591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
116749 117592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116750 117593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( p->op ){
116751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case RTREE_LE: case RTREE_LT: bRes = p->rValue<cell_min; break;
116752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case RTREE_GE: case RTREE_GT: bRes = p->rValue>cell_max; break;
116753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case RTREE_EQ:
117594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case RTREE_LE: case RTREE_LT:
117595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRes = p->rValue<cell_min;
117596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
117597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case RTREE_GE: case RTREE_GT:
117599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRes = p->rValue>cell_max;
117600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
117601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case RTREE_EQ:
116754 117603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bRes = (p->rValue>cell_max || p->rValue<cell_min);
116755 117604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
117605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: {
117607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
117608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->op==RTREE_MATCH );
117609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = testRtreeGeom(pRtree, p, &cell, &bRes);
117610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
117611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
117612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bRes = !bRes;
117614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
117615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116756 117616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116757 117617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116758 117618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return bRes;
117619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbEof = bRes;
117620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
116760 117621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116761 117622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116762 117623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return true if the cell that cursor pCursor currently points to
117624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Test if the cell that cursor pCursor currently points to
116764 117625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** would be filtered (excluded) by the constraints in the
116765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pCursor->aConstraint[] array, or false otherwise.
117626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pCursor->aConstraint[] array. If so, set *pbEof to true before
117627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returning. If the cell is not filtered (excluded) by the constraints,
117628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set pbEof to zero.
117629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
117630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return SQLITE_OK if successful or an SQLite error code if an error
117631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** occurs within a geometry callback.
116766 117632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
116767 117633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function assumes that the cell is part of a leaf node.
116768 117634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor){
117635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int testRtreeEntry(Rtree *pRtree, RtreeCursor *pCursor, int *pbEof){
116770 117636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell cell;
116771 117637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
117638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbEof = 0;
116772 117639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116773 117640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pCursor->pNode, pCursor->iCell, &cell);
116774 117641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pCursor->nConstraint; ii++){
116775 117642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeConstraint *p = &pCursor->aConstraint[ii];
116776 117643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double coord = DCOORD(cell.aCoord[p->iCoord]);
116777 117644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
116778 117645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(p->op==RTREE_LE || p->op==RTREE_LT || p->op==RTREE_GE
116779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || p->op==RTREE_GT || p->op==RTREE_EQ
117646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || p->op==RTREE_GT || p->op==RTREE_EQ || p->op==RTREE_MATCH
116780 117647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
116781 117648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( p->op ){
116782 117649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case RTREE_LE: res = (coord<=p->rValue); break;
116783 117650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case RTREE_LT: res = (coord<p->rValue); break;
116784 117651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case RTREE_GE: res = (coord>=p->rValue); break;
116785 117652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case RTREE_GT: res = (coord>p->rValue); break;
116786 117653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case RTREE_EQ: res = (coord==p->rValue); break;
117654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: {
117655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
117656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->op==RTREE_MATCH );
117657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = testRtreeGeom(pRtree, p, &cell, &res);
117658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
117659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
117660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
117662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116787 117663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116788 117664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !res ) return 1;
117665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !res ){
117666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pbEof = 1;
117667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
117668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116790 117669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116791 117670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
117671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
116793 117672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116794 117673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116795 117674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116796 117675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Cursor pCursor currently points at a node that heads a sub-tree of
116797 117676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** height iHeight (if iHeight==0, then the node is a leaf). Descend
@@ -116814,17 +117693,17 @@
116814 117693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSavedCell = pCursor->iCell;
116815 117694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116816 117695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iHeight>=0 );
116817 117696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116818 117697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iHeight==0 ){
116819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- isEof = testRtreeEntry(pRtree, pCursor);
117698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = testRtreeEntry(pRtree, pCursor, &isEof);
116820 117699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
116821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- isEof = testRtreeCell(pRtree, pCursor);
117700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = testRtreeCell(pRtree, pCursor, &isEof);
116822 117701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isEof || iHeight==0 ){
117702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK || isEof || iHeight==0 ){
116824 117703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pEof = isEof;
116825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
117704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
116826 117705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116827 117706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116828 117707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iRowid = nodeGetRowid(pRtree, pCursor->pNode, pCursor->iCell);
116829 117708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = nodeAcquire(pRtree, iRowid, pCursor->pNode, &pChild);
116830 117709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
@@ -116856,45 +117735,59 @@
116856 117735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116857 117736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116858 117737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** One of the cells in node pNode is guaranteed to have a 64-bit
116859 117738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** integer value equal to iRowid. Return the index of this cell.
116860 117739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int nodeRowidIndex(Rtree *pRtree, RtreeNode *pNode, i64 iRowid){
117740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int nodeRowidIndex(
117741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Rtree *pRtree,
117742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeNode *pNode,
117743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iRowid,
117744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *piIndex
117745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
116862 117746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
116863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(ii=0; nodeGetRowid(pRtree, pNode, ii)!=iRowid; ii++){
116864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ii<(NCELL(pNode)-1) );
117747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCell = NCELL(pNode);
117748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<nCell; ii++){
117749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nodeGetRowid(pRtree, pNode, ii)==iRowid ){
117750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *piIndex = ii;
117751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
117752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116865 117753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return ii;
117754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_CORRUPT;
116867 117755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116868 117756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116869 117757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116870 117758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the index of the cell containing a pointer to node pNode
116871 117759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in its parent. If pNode is the root node, return -1.
116872 117760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode){
117761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int nodeParentIndex(Rtree *pRtree, RtreeNode *pNode, int *piIndex){
116874 117762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pParent = pNode->pParent;
116875 117763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParent ){
116876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return nodeRowidIndex(pRtree, pParent, pNode->iNode);
117764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return nodeRowidIndex(pRtree, pParent, pNode->iNode, piIndex);
116877 117765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return -1;
117766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *piIndex = -1;
117767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
116879 117768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116880 117769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116881 117770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116882 117771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Rtree virtual table module xNext method.
116883 117772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116884 117773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int rtreeNext(sqlite3_vtab_cursor *pVtabCursor){
116885 117774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Rtree *pRtree = (Rtree *)(pVtabCursor->pVtab);
116886 117775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCursor *pCsr = (RtreeCursor *)pVtabCursor;
116887 117776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
117777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* RtreeCursor.pNode must not be NULL. If is is NULL, then this cursor is
117779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** already at EOF. It is against the rules to call the xNext() method of
117780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a cursor that has already reached EOF.
117781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCsr->pNode );
116888 117783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116889 117784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCsr->iStrategy==1 ){
116890 117785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This "scan" is a direct lookup by rowid. There is no next entry. */
116891 117786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeRelease(pRtree, pCsr->pNode);
116892 117787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pNode = 0;
116893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
116894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
116895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- else if( pCsr->pNode ){
117788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
116896 117789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Move to the next entry that matches the configured constraints. */
116897 117790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iHeight = 0;
116898 117791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pCsr->pNode ){
116899 117792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pNode = pCsr->pNode;
116900 117793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell = NCELL(pNode);
@@ -116904,11 +117797,14 @@
116904 117797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK || !isEof ){
116905 117798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116906 117799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116907 117800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116908 117801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pNode = pNode->pParent;
116909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->iCell = nodeParentIndex(pRtree, pNode);
117802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = nodeParentIndex(pRtree, pNode, &pCsr->iCell);
117803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
117804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
117805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116910 117806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeReference(pCsr->pNode);
116911 117807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeRelease(pRtree, pNode);
116912 117808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iHeight++;
116913 117809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116914 117810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -116972,10 +117868,55 @@
116972 117868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_reset(pRtree->pReadRowid);
116973 117869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116974 117870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
116975 117871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116976 117872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
117874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called to configure the RtreeConstraint object passed
117875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** as the second argument for a MATCH constraint. The value passed as the
117876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** first argument to this function is the right-hand operand to the MATCH
117877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** operator.
117878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int deserializeGeometry(sqlite3_value *pValue, RtreeConstraint *pCons){
117880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeMatchArg *p;
117881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_rtree_geometry *pGeom;
117882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBlob;
117883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check that value is actually a blob. */
117885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !sqlite3_value_type(pValue)==SQLITE_BLOB ) return SQLITE_ERROR;
117886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check that the blob is roughly the right size. */
117888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBlob = sqlite3_value_bytes(pValue);
117889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nBlob<sizeof(RtreeMatchArg)
117890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || ((nBlob-sizeof(RtreeMatchArg))%sizeof(double))!=0
117891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
117892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_ERROR;
117893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGeom = (sqlite3_rtree_geometry *)sqlite3_malloc(
117896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sizeof(sqlite3_rtree_geometry) + nBlob
117897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
117898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pGeom ) return SQLITE_NOMEM;
117899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pGeom, 0, sizeof(sqlite3_rtree_geometry));
117900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = (RtreeMatchArg *)&pGeom[1];
117901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(p, sqlite3_value_blob(pValue), nBlob);
117903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->magic!=RTREE_GEOMETRY_MAGIC
117904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || nBlob!=(sizeof(RtreeMatchArg) + (p->nParam-1)*sizeof(double))
117905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
117906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pGeom);
117907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_ERROR;
117908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGeom->pContext = p->pContext;
117911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGeom->nParam = p->nParam;
117912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGeom->aParam = p->aParam;
117913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCons->xGeom = p->xGeom;
117915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCons->pGeom = pGeom;
117916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
117917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116977 117918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116978 117919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
116979 117920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Rtree virtual table module xFilter method.
116980 117921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
116981 117922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int rtreeFilter(
@@ -116990,22 +117931,22 @@
116990 117931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
116991 117932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
116992 117933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116993 117934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rtreeReference(pRtree);
116994 117935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_free(pCsr->aConstraint);
116996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->aConstraint = 0;
117936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ freeCursorConstraints(pCsr);
116997 117937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->iStrategy = idxNum;
116998 117938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
116999 117939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( idxNum==1 ){
117000 117940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Special case - lookup by rowid. */
117001 117941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pLeaf; /* Leaf on which the required cell resides */
117002 117942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iRowid = sqlite3_value_int64(argv[0]);
117003 117943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = findLeafNode(pRtree, iRowid, &pLeaf);
117004 117944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->pNode = pLeaf;
117005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pLeaf && rc==SQLITE_OK ){
117006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->iCell = nodeRowidIndex(pRtree, pLeaf, iRowid);
117945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pLeaf ){
117946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( rc==SQLITE_OK );
117947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = nodeRowidIndex(pRtree, pLeaf, iRowid, &pCsr->iCell);
117007 117948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117008 117949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117009 117950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Normal case - r-tree scan. Set up the RtreeCursor.aConstraint array
117010 117951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with the configured constraints.
117011 117952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -117013,16 +117954,28 @@
117013 117954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->aConstraint = sqlite3_malloc(sizeof(RtreeConstraint)*argc);
117014 117955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->nConstraint = argc;
117015 117956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pCsr->aConstraint ){
117016 117957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
117017 117958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pCsr->aConstraint, 0, sizeof(RtreeConstraint)*argc);
117018 117960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (idxStr==0 && argc==0) || strlen(idxStr)==argc*2 );
117019 117961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<argc; ii++){
117020 117962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeConstraint *p = &pCsr->aConstraint[ii];
117021 117963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->op = idxStr[ii*2];
117022 117964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iCoord = idxStr[ii*2+1]-'a';
117023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->rValue = sqlite3_value_double(argv[ii]);
117965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->op==RTREE_MATCH ){
117966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* A MATCH operator. The right-hand-side must be a blob that
117967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can be cast into an RtreeMatchArg object. One created using
117968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an sqlite3_rtree_geometry_callback() SQL user function.
117969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
117970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = deserializeGeometry(argv[ii], p);
117971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
117972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
117973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
117975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->rValue = sqlite3_value_double(argv[ii]);
117976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117024 117977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117025 117978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117026 117979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117027 117980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117028 117981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
@@ -117078,10 +118031,11 @@
117078 118031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** = 0x41 ('A')
117079 118032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <= 0x42 ('B')
117080 118033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** < 0x43 ('C')
117081 118034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** >= 0x44 ('D')
117082 118035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** > 0x45 ('E')
118036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** MATCH 0x46 ('F')
117083 118037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ----------------------
117084 118038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
117085 118039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The second of each pair of bytes identifies the coordinate column
117086 118040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to which the constraint applies. The leftmost coordinate column
117087 118041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is 'a', the second from the left 'b' etc.
@@ -117116,43 +118070,47 @@
117116 118070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117117 118071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdxInfo->estimatedCost = 10.0;
117118 118072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
117119 118073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117120 118074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->usable && p->iColumn>0 ){
118075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->usable && (p->iColumn>0 || p->op==SQLITE_INDEX_CONSTRAINT_MATCH) ){
118076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int j, opmsk;
118077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const unsigned char compatible[] = { 0, 0, 1, 1, 2, 2 };
117122 118078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 op = 0;
117123 118079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( p->op ){
117124 118080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_INDEX_CONSTRAINT_EQ: op = RTREE_EQ; break;
117125 118081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_INDEX_CONSTRAINT_GT: op = RTREE_GT; break;
117126 118082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_INDEX_CONSTRAINT_LE: op = RTREE_LE; break;
117127 118083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_INDEX_CONSTRAINT_LT: op = RTREE_LT; break;
117128 118084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_INDEX_CONSTRAINT_GE: op = RTREE_GE; break;
117129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
117130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op ){
117131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Make sure this particular constraint has not been used before.
117132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If it has been used before, ignore it.
117133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
117134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A <= or < can be used if there is a prior >= or >.
117135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A >= or > can be used if there is a prior < or <=.
117136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A <= or < is disqualified if there is a prior <=, <, or ==.
117137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A >= or > is disqualified if there is a prior >=, >, or ==.
117138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A == is disqualifed if there is any prior constraint.
117139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
117140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int j, opmsk;
117141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const unsigned char compatible[] = { 0, 0, 1, 1, 2, 2 };
117142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( compatible[RTREE_EQ & 7]==0 );
117143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( compatible[RTREE_LT & 7]==1 );
117144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( compatible[RTREE_LE & 7]==1 );
117145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( compatible[RTREE_GT & 7]==2 );
117146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( compatible[RTREE_GE & 7]==2 );
117147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cCol = p->iColumn - 1 + 'a';
117148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- opmsk = compatible[op & 7];
117149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(j=0; j<iIdx; j+=2){
117150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zIdxStr[j+1]==cCol && (compatible[zIdxStr[j] & 7] & opmsk)!=0 ){
117151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- op = 0;
117152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
117153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
118085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default:
118086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->op==SQLITE_INDEX_CONSTRAINT_MATCH );
118087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op = RTREE_MATCH;
118088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
118089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( op!=0 );
118091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Make sure this particular constraint has not been used before.
118093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If it has been used before, ignore it.
118094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
118095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A <= or < can be used if there is a prior >= or >.
118096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A >= or > can be used if there is a prior < or <=.
118097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A <= or < is disqualified if there is a prior <=, <, or ==.
118098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A >= or > is disqualified if there is a prior >=, >, or ==.
118099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A == is disqualifed if there is any prior constraint.
118100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
118101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( compatible[RTREE_EQ & 7]==0 );
118102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( compatible[RTREE_LT & 7]==1 );
118103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( compatible[RTREE_LE & 7]==1 );
118104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( compatible[RTREE_GT & 7]==2 );
118105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( compatible[RTREE_GE & 7]==2 );
118106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cCol = p->iColumn - 1 + 'a';
118107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ opmsk = compatible[op & 7];
118108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=0; j<iIdx; j+=2){
118109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zIdxStr[j+1]==cCol && (compatible[zIdxStr[j] & 7] & opmsk)!=0 ){
118110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op = 0;
118111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
117154 118112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117155 118113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117156 118114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op ){
117157 118115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iIdx<sizeof(zIdxStr)-1 );
117158 118116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIdxStr[iIdx++] = op;
@@ -117256,11 +118214,16 @@
117256 118214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iExclude
117257 118215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
117258 118216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
117259 118217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float overlap = 0.0;
117260 118218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<nCell; ii++){
117261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ii!=iExclude ){
118219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if VARIANT_RSTARTREE_CHOOSESUBTREE
118220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii!=iExclude )
118221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
118222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iExclude==-1 );
118223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
118224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
117262 118225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int jj;
117263 118226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float o = 1.0;
117264 118227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=0; jj<(pRtree->nDim*2); jj+=2){
117265 118228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double x1;
117266 118229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double x2;
@@ -117349,26 +118312,35 @@
117349 118312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Select the child node which will be enlarged the least if pCell
117350 118313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is inserted into it. Resolve ties by choosing the entry with
117351 118314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the smallest area.
117352 118315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117353 118316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iCell=0; iCell<nCell; iCell++){
118317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bBest = 0;
117354 118318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float growth;
117355 118319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float area;
117356 118320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
float overlap = 0.0;
117357 118321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pNode, iCell, &cell);
117358 118322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
growth = cellGrowth(pRtree, &cell, pCell);
117359 118323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
area = cellArea(pRtree, &cell);
118324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
117360 118325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if VARIANT_RSTARTREE_CHOOSESUBTREE
117361 118326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ii==(pRtree->iDepth-1) ){
117362 118327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
overlap = cellOverlapEnlargement(pRtree,&cell,pCell,aCell,nCell,iCell);
117363 118328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
117365 118329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (iCell==0)
117366 118330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (overlap<fMinOverlap)
117367 118331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (overlap==fMinOverlap && growth<fMinGrowth)
117368 118332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (overlap==fMinOverlap && growth==fMinGrowth && area<fMinArea)
117369 118333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
118334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bBest = 1;
118335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
118337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iCell==0||growth<fMinGrowth||(growth==fMinGrowth && area<fMinArea) ){
118338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bBest = 1;
118339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
118341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( bBest ){
117370 118342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fMinOverlap = overlap;
117371 118343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fMinGrowth = growth;
117372 118344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fMinArea = area;
117373 118345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iBest = cell.iRowid;
117374 118346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -117387,29 +118359,34 @@
117387 118359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
117388 118360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A cell with the same content as pCell has just been inserted into
117389 118361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the node pNode. This function updates the bounding box cells in
117390 118362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** all ancestor elements.
117391 118363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
117392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void AdjustTree(
118364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int AdjustTree(
117393 118365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Rtree *pRtree, /* Rtree table */
117394 118366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pNode, /* Adjust ancestry of this node. */
117395 118367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell *pCell /* This cell was just inserted */
117396 118368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
117397 118369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *p = pNode;
117398 118370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p->pParent ){
117399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RtreeCell cell;
117400 118371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pParent = p->pParent;
117401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCell = nodeParentIndex(pRtree, p);
118372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeCell cell;
118373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCell;
118374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
118375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nodeParentIndex(pRtree, p, &iCell) ){
118376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_CORRUPT;
118377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117402 118378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117403 118379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pParent, iCell, &cell);
117404 118380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !cellContains(pRtree, &cell, pCell) ){
117405 118381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cellUnion(pRtree, &cell, pCell);
117406 118382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeOverwriteCell(pRtree, pParent, &cell, iCell);
117407 118383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117408 118384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117409 118385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = pParent;
117410 118386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
117411 118388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117412 118389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117413 118390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
117414 118391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Write mapping (iRowid->iNode) to the <rtree>_rowid table.
117415 118392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -117934,18 +118911,18 @@
117934 118911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeZero(pRtree, pNode);
117935 118912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&aCell[nCell], pCell, sizeof(RtreeCell));
117936 118913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCell++;
117937 118914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117938 118915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNode->iNode==1 ){
117939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRight = nodeNew(pRtree, pNode, 1);
117940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pLeft = nodeNew(pRtree, pNode, 1);
118916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRight = nodeNew(pRtree, pNode);
118917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLeft = nodeNew(pRtree, pNode);
117941 118918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRtree->iDepth++;
117942 118919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNode->isDirty = 1;
117943 118920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
writeInt16(pNode->zData, pRtree->iDepth);
117944 118921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117945 118922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLeft = pNode;
117946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRight = nodeNew(pRtree, pLeft->pParent, 1);
118923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRight = nodeNew(pRtree, pLeft->pParent);
117947 118924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeReference(pLeft);
117948 118925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117949 118926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117950 118927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pLeft || !pRight ){
117951 118928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_NOMEM;
@@ -117958,12 +118935,16 @@
117958 118935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = AssignCells(pRtree, aCell, nCell, pLeft, pRight, &leftbbox, &rightbbox);
117959 118936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
117960 118937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto splitnode_out;
117961 118938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117962 118939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
117963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Ensure both child nodes have node numbers assigned to them. */
117964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (0==pRight->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pRight)))
118940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Ensure both child nodes have node numbers assigned to them by calling
118941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nodeWrite(). Node pRight always needs a node number, as it was created
118942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by nodeNew() above. But node pLeft sometimes already has a node number.
118943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In this case avoid the all to nodeWrite().
118944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
118945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( SQLITE_OK!=(rc = nodeWrite(pRtree, pRight))
117965 118946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (0==pLeft->iNode && SQLITE_OK!=(rc = nodeWrite(pRtree, pLeft)))
117966 118947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
117967 118948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto splitnode_out;
117968 118949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117969 118950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -117975,13 +118956,19 @@
117975 118956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
117976 118957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto splitnode_out;
117977 118958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117978 118959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
117979 118960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pParent = pLeft->pParent;
117980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCell = nodeParentIndex(pRtree, pLeft);
117981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell);
117982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- AdjustTree(pRtree, pParent, &leftbbox);
118961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCell;
118962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = nodeParentIndex(pRtree, pLeft, &iCell);
118963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
118964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nodeOverwriteCell(pRtree, pParent, &leftbbox, iCell);
118965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = AdjustTree(pRtree, pParent, &leftbbox);
118966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
118968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto splitnode_out;
118969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
117983 118970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117984 118971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (rc = rtreeInsertCell(pRtree, pRight->pParent, &rightbbox, iHeight+1)) ){
117985 118972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto splitnode_out;
117986 118973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
117987 118974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -118021,44 +119008,73 @@
118021 119008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeRelease(pRtree, pLeft);
118022 119009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(aCell);
118023 119010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
118024 119011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118025 119012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
119013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
119014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If node pLeaf is not the root of the r-tree and its pParent pointer is
119015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** still NULL, load all ancestor nodes of pLeaf into memory and populate
119016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the pLeaf->pParent chain all the way up to the root node.
119017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
119018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This operation is required when a row is deleted (or updated - an update
119019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is implemented as a delete followed by an insert). SQLite provides the
119020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** rowid of the row to delete, which can be used to find the leaf on which
119021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the entry resides (argument pLeaf). Once the leaf is located, this
119022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function is called to determine its ancestry.
119023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
118026 119024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fixLeafParent(Rtree *pRtree, RtreeNode *pLeaf){
118027 119025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
118028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pLeaf->iNode!=1 && pLeaf->pParent==0 ){
118029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_bind_int64(pRtree->pReadParent, 1, pLeaf->iNode);
118030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_step(pRtree->pReadParent)==SQLITE_ROW ){
118031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iNode = sqlite3_column_int64(pRtree->pReadParent, 0);
118032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = nodeAcquire(pRtree, iNode, 0, &pLeaf->pParent);
118033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
118034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_ERROR;
118035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
118036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_reset(pRtree->pReadParent);
118037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
118038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = fixLeafParent(pRtree, pLeaf->pParent);
118039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
119026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeNode *pChild = pLeaf;
119027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( rc==SQLITE_OK && pChild->iNode!=1 && pChild->pParent==0 ){
119028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc2 = SQLITE_OK; /* sqlite3_reset() return code */
119029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_bind_int64(pRtree->pReadParent, 1, pChild->iNode);
119030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_step(pRtree->pReadParent);
119031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_ROW ){
119032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeNode *pTest; /* Used to test for reference loops */
119033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iNode; /* Node number of parent node */
119034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Before setting pChild->pParent, test that we are not creating a
119036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** loop of references (as we would if, say, pChild==pParent). We don't
119037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** want to do this as it leads to a memory leak when trying to delete
119038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the referenced counted node structures.
119039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
119040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iNode = sqlite3_column_int64(pRtree->pReadParent, 0);
119041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pTest=pLeaf; pTest && pTest->iNode!=iNode; pTest=pTest->pParent);
119042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pTest ){
119043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc2 = nodeAcquire(pRtree, iNode, 0, &pChild->pParent);
119044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_reset(pRtree->pReadParent);
119047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ) rc = rc2;
119048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && !pChild->pParent ) rc = SQLITE_CORRUPT;
119049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pChild = pChild->pParent;
118040 119050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118041 119051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
118042 119052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118043 119053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118044 119054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int deleteCell(Rtree *, RtreeNode *, int, int);
118045 119055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118046 119056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int removeNode(Rtree *pRtree, RtreeNode *pNode, int iHeight){
118047 119057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
119058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc2;
118048 119059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pParent;
118049 119060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCell;
118050 119061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118051 119062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNode->nRef==1 );
118052 119063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118053 119064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Remove the entry in the parent cell. */
118054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCell = nodeParentIndex(pRtree, pNode);
118055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParent = pNode->pParent;
118056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNode->pParent = 0;
118057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( SQLITE_OK!=(rc = deleteCell(pRtree, pParent, iCell, iHeight+1))
118058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || SQLITE_OK!=(rc = nodeRelease(pRtree, pParent))
118059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
119065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = nodeParentIndex(pRtree, pNode, &iCell);
119066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
119067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParent = pNode->pParent;
119068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNode->pParent = 0;
119069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = deleteCell(pRtree, pParent, iCell, iHeight+1);
119070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc2 = nodeRelease(pRtree, pParent);
119072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
119073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = rc2;
119074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc!=SQLITE_OK ){
118060 119076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
118061 119077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118062 119078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118063 119079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Remove the xxx_node entry. */
118064 119080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_bind_int64(pRtree->pDeleteNode, 1, pNode->iNode);
@@ -118084,12 +119100,13 @@
118084 119100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRtree->pDeleted = pNode;
118085 119101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118086 119102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
118087 119103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118088 119104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
119105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fixBoundingBox(Rtree *pRtree, RtreeNode *pNode){
118090 119106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pParent = pNode->pParent;
119107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
118091 119108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParent ){
118092 119109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
118093 119110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nCell = NCELL(pNode);
118094 119111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell box; /* Bounding box for pNode */
118095 119112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pNode, 0, &box);
@@ -118097,21 +119114,25 @@
118097 119114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeCell cell;
118098 119115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nodeGetCell(pRtree, pNode, ii, &cell);
118099 119116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cellUnion(pRtree, &box, &cell);
118100 119117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118101 119118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
box.iRowid = pNode->iNode;
118102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ii = nodeParentIndex(pRtree, pNode);
118103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nodeOverwriteCell(pRtree, pParent, &box, ii);
118104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fixBoundingBox(pRtree, pParent);
119119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = nodeParentIndex(pRtree, pNode, &ii);
119120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
119121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nodeOverwriteCell(pRtree, pParent, &box, ii);
119122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fixBoundingBox(pRtree, pParent);
119123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118105 119124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
119125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
118106 119126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118107 119127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118108 119128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
118109 119129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete the cell at index iCell of node pNode. After removing the
118110 119130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cell, adjust the r-tree data structure if required.
118111 119131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118112 119132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int deleteCell(Rtree *pRtree, RtreeNode *pNode, int iCell, int iHeight){
119133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeNode *pParent;
118113 119134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
118114 119135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118115 119136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=(rc = fixLeafParent(pRtree, pNode)) ){
118116 119137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
118117 119138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -118124,18 +119145,17 @@
118124 119145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the node is not the tree root and now has less than the minimum
118125 119146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** number of cells, remove it from the tree. Otherwise, update the
118126 119147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cell in the parent node so that it tightly contains the updated
118127 119148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** node.
118128 119149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pNode->iNode!=1 ){
118130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RtreeNode *pParent = pNode->pParent;
118131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pParent->iNode!=1 || NCELL(pParent)!=1)
118132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (NCELL(pNode)<RTREE_MINCELLS(pRtree))
118133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
119150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParent = pNode->pParent;
119151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pParent || pNode->iNode==1 );
119152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParent ){
119153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NCELL(pNode)<RTREE_MINCELLS(pRtree) ){
118134 119154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = removeNode(pRtree, pNode, iHeight);
118135 119155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
118136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fixBoundingBox(pRtree, pNode);
119156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fixBoundingBox(pRtree, pNode);
118137 119157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118138 119158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118139 119159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118140 119160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
118141 119161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -118214,11 +119234,11 @@
118214 119234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = parentWrite(pRtree, p->iRowid, pNode->iNode);
118215 119235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118216 119236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118217 119237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118218 119238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
118219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- fixBoundingBox(pRtree, pNode);
119239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = fixBoundingBox(pRtree, pNode);
118220 119240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118221 119241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(; rc==SQLITE_OK && ii<nCell; ii++){
118222 119242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Find a node to store this cell in. pNode->iNode currently contains
118223 119243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the height of the sub-tree headed by the cell.
118224 119244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -118268,15 +119288,17 @@
118268 119288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118269 119289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
118270 119290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SplitNode(pRtree, pNode, pCell, iHeight);
118271 119291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
118272 119292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
118273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- AdjustTree(pRtree, pNode, pCell);
118274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iHeight==0 ){
118275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode);
118276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
118277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode);
119293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = AdjustTree(pRtree, pNode, pCell);
119294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
119295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iHeight==0 ){
119296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = rowidWrite(pRtree, pCell->iRowid, pNode->iNode);
119297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
119298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = parentWrite(pRtree, pCell->iRowid, pNode->iNode);
119299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118278 119300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118279 119301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118280 119302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
118281 119303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118282 119304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -118342,11 +119364,10 @@
118342 119364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
118343 119365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118344 119366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rtreeReference(pRtree);
118345 119367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118346 119368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(nData>=1);
118347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert(hashIsEmpty(pRtree));
118348 119369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118349 119370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If azData[0] is not an SQL NULL value, it is the rowid of a
118350 119371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** record to delete from the r-tree table. The following block does
118351 119372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** just that.
118352 119373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -118368,12 +119389,14 @@
118368 119389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118369 119390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118370 119391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Delete the cell in question from the leaf node. */
118371 119392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
118372 119393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc2;
118373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- iCell = nodeRowidIndex(pRtree, pLeaf, iDelete);
118374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = deleteCell(pRtree, pLeaf, iCell, 0);
119394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = nodeRowidIndex(pRtree, pLeaf, iDelete, &iCell);
119395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
119396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = deleteCell(pRtree, pLeaf, iCell, 0);
119397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118375 119398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc2 = nodeRelease(pRtree, pLeaf);
118376 119399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
118377 119400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = rc2;
118378 119401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118379 119402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -118391,23 +119414,24 @@
118391 119414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
118392 119415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is equivalent to copying the contents of the child into
118393 119416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the root node (the operation that Gutman's paper says to perform
118394 119417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in this scenario).
118395 119418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && pRtree->iDepth>0 ){
118397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && NCELL(pRoot)==1 ){
118398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- RtreeNode *pChild;
118399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iChild = nodeGetRowid(pRtree, pRoot, 0);
118400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = nodeAcquire(pRtree, iChild, pRoot, &pChild);
118401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
118402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = removeNode(pRtree, pChild, pRtree->iDepth-1);
118403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
118404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
118405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRtree->iDepth--;
118406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- writeInt16(pRoot->zData, pRtree->iDepth);
118407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRoot->isDirty = 1;
118408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
119419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK && pRtree->iDepth>0 && NCELL(pRoot)==1 ){
119420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc2;
119421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeNode *pChild;
119422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iChild = nodeGetRowid(pRtree, pRoot, 0);
119423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = nodeAcquire(pRtree, iChild, pRoot, &pChild);
119424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
119425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = removeNode(pRtree, pChild, pRtree->iDepth-1);
119426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc2 = nodeRelease(pRtree, pChild);
119428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ) rc = rc2;
119429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
119430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRtree->iDepth--;
119431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ writeInt16(pRoot->zData, pRtree->iDepth);
119432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRoot->isDirty = 1;
118409 119433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118410 119434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118411 119435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118412 119436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Re-insert the contents of any underfull nodes removed from the tree. */
118413 119437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pLeaf=pRtree->pDeleted; pLeaf; pLeaf=pRtree->pDeleted){
@@ -118693,11 +119717,11 @@
118693 119717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
118694 119718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
118695 119719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Rtree *pRtree;
118696 119720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDb; /* Length of string argv[1] */
118697 119721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nName; /* Length of string argv[2] */
118698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int eCoordType = (int)pAux;
119722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int eCoordType = (pAux ? RTREE_COORD_INT32 : RTREE_COORD_REAL32);
118699 119723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118700 119724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *aErrMsg[] = {
118701 119725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0, /* 0 */
118702 119726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Wrong number of columns for an rtree table", /* 1 */
118703 119727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Too few columns for an rtree table", /* 2 */
@@ -118839,16 +119863,14 @@
118839 119863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Register the r-tree module with database handle db. This creates the
118840 119864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** virtual table module "rtree" and the debugging/analysis scalar
118841 119865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function "rtreenode".
118842 119866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
118843 119867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3RtreeInit(sqlite3 *db){
118844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK;
119868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const int utf8 = SQLITE_UTF8;
119869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc;
118845 119870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
118847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int utf8 = SQLITE_UTF8;
118848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
118849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
119871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3_create_function(db, "rtreenode", 2, utf8, 0, rtreenode, 0, 0);
118850 119872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
118851 119873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int utf8 = SQLITE_UTF8;
118852 119874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_function(db, "rtreedepth", 1, utf8, 0,rtreedepth, 0, 0);
118853 119875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118854 119876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
@@ -118860,10 +119882,74 @@
118860 119882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3_create_module_v2(db, "rtree_i32", &rtreeModule, c, 0);
118861 119883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
118862 119884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118863 119885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
118864 119886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
119887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
119889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A version of sqlite3_free() that can be used as a callback. This is used
119890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in two places - as the destructor for the blob value returned by the
119891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** invocation of a geometry function, and as the destructor for the geometry
119892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** functions themselves.
119893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
119894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void doSqlite3Free(void *p){
119895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(p);
119896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
119899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Each call to sqlite3_rtree_geometry_callback() creates an ordinary SQLite
119900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** scalar user function. This C function is the callback used for all such
119901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** registered SQL functions.
119902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
119903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The scalar user functions return a blob that is interpreted by r-tree
119904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** table MATCH operators.
119905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
119906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void geomCallback(sqlite3_context *ctx, int nArg, sqlite3_value **aArg){
119907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeGeomCallback *pGeomCtx = (RtreeGeomCallback *)sqlite3_user_data(ctx);
119908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeMatchArg *pBlob;
119909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nBlob;
119910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nBlob = sizeof(RtreeMatchArg) + (nArg-1)*sizeof(double);
119912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob = (RtreeMatchArg *)sqlite3_malloc(nBlob);
119913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pBlob ){
119914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_error_nomem(ctx);
119915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
119916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
119917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob->magic = RTREE_GEOMETRY_MAGIC;
119918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob->xGeom = pGeomCtx->xGeom;
119919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob->pContext = pGeomCtx->pContext;
119920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob->nParam = nArg;
119921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nArg; i++){
119922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pBlob->aParam[i] = sqlite3_value_double(aArg[i]);
119923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_blob(ctx, pBlob, nBlob, doSqlite3Free);
119925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
119927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
119929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Register a new geometry function for use with the r-tree MATCH operator.
119930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
119931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_rtree_geometry_callback(
119932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3 *db,
119933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zGeom,
119934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int (*xGeom)(sqlite3_rtree_geometry *, int, double *, int *),
119935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pContext
119936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
119937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ RtreeGeomCallback *pGeomCtx; /* Context object for new user-function */
119938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate and populate the context object. */
119940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGeomCtx = (RtreeGeomCallback *)sqlite3_malloc(sizeof(RtreeGeomCallback));
119941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !pGeomCtx ) return SQLITE_NOMEM;
119942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGeomCtx->xGeom = xGeom;
119943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pGeomCtx->pContext = pContext;
119944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
119945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Create the new user-function. Register a destructor function to delete
119946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the context object when it is no longer required. */
119947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_create_function_v2(db, zGeom, -1, SQLITE_ANY,
119948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void *)pGeomCtx, geomCallback, 0, 0, doSqlite3Free
119949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
119950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
118865 119951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
118866 119952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !SQLITE_CORE
118867 119953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_extension_init(
118868 119954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db,
118869 119955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **pzErrMsg,
118870 119956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!