@@ -222,11 +222,11 @@
222 222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
223 223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
224 224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
225 225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION "3.8.6"
226 226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION_NUMBER 3008006
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2014-07-01 11:54:02 21981e35062cc6b30e9576786cbf55265a7a4d41"
227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2014-08-12 16:13:37 6715991296886c2a02b9a285a1e61189ad1f79c0"
228 228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
229 229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
230 230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
231 231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version, sqlite3_sourceid
232 232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -382,19 +382,19 @@
382 382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
383 383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Closing A Database Connection
384 384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
385 385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The sqlite3_close() and sqlite3_close_v2() routines are destructors
386 386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for the [sqlite3] object.
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Calls to sqlite3_close() and sqlite3_close_v2() return SQLITE_OK if
387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Calls to sqlite3_close() and sqlite3_close_v2() return [SQLITE_OK] if
388 388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the [sqlite3] object is successfully destroyed and all associated
389 389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** resources are deallocated.
390 390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
391 391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the database connection is associated with unfinalized prepared
392 392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** statements or unfinished sqlite3_backup objects then sqlite3_close()
393 393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will leave the database connection open and return [SQLITE_BUSY].
394 394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If sqlite3_close_v2() is called with unfinalized prepared statements
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and unfinished sqlite3_backups, then the database connection becomes
395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and/or unfinished sqlite3_backups, then the database connection becomes
396 396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an unusable "zombie" which will automatically be deallocated when the
397 397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** last prepared statement is finalized or the last sqlite3_backup is
398 398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** finished. The sqlite3_close_v2() interface is intended for use with
399 399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** host languages that are garbage collected, and where the order in which
400 400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** destructors are called is arbitrary.
@@ -403,11 +403,11 @@
403 403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_blob_close | close] all [BLOB handles], and
404 404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_backup_finish | finish] all [sqlite3_backup] objects associated
405 405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with the [sqlite3] object prior to attempting to close the object. ^If
406 406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_close_v2() is called on a [database connection] that still has
407 407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** outstanding [prepared statements], [BLOB handles], and/or
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_backup] objects then it returns SQLITE_OK but the deallocation
408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_backup] objects then it returns [SQLITE_OK] and the deallocation
409 409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of resources is deferred until all [prepared statements], [BLOB handles],
410 410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and [sqlite3_backup] objects are also destroyed.
411 411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
412 412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If an [sqlite3] object is destroyed while a transaction is open,
413 413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the transaction is automatically rolled back.
@@ -499,20 +499,18 @@
499 499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char **errmsg /* Error msg written here */
500 500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
501 501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
502 502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
503 503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Result Codes
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** KEYWORDS: SQLITE_OK {error code} {error codes}
505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** KEYWORDS: {result code} {result codes}
504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** KEYWORDS: {result code definitions}
506 505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
507 506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Many SQLite functions return an integer result code from the set shown
508 507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** here in order to indicate success or failure.
509 508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
510 509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** New error codes may be added in future versions of SQLite.
511 510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** See also: [SQLITE_IOERR_READ | extended result codes],
513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_vtab_on_conflict()] [SQLITE_ROLLBACK | result codes].
511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: [extended result code definitions]
514 512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
515 513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_OK 0 /* Successful result */
516 514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* beginning-of-error-codes */
517 515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_ERROR 1 /* SQL error or missing database */
518 516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_INTERNAL 2 /* Internal logic error in SQLite */
@@ -546,30 +544,23 @@
546 544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_DONE 101 /* sqlite3_step() has finished executing */
547 545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* end-of-error-codes */
548 546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
549 547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
550 548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Extended Result Codes
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** KEYWORDS: {extended error code} {extended error codes}
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** KEYWORDS: {extended result code} {extended result codes}
549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** KEYWORDS: {extended result code definitions}
553 550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** In its default configuration, SQLite API routines return one of 26 integer
555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [SQLITE_OK | result codes]. However, experience has shown that many of
551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In its default configuration, SQLite API routines return one of 30 integer
552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [result codes]. However, experience has shown that many of
556 553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** these result codes are too coarse-grained. They do not provide as
557 554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** much information about problems as programmers might like. In an effort to
558 555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** address this, newer versions of SQLite (version 3.3.8 and later) include
559 556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** support for additional result codes that provide more detailed information
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** about errors. The extended result codes are enabled or disabled
557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** about errors. These [extended result codes] are enabled or disabled
561 558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on a per database connection basis using the
562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_extended_result_codes()] API.
563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Some of the available extended result codes are listed here.
565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** One may expect the number of extended result codes will increase
566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** over time. Software that uses extended result codes should expect
567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to see new result codes in future releases of SQLite.
568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The SQLITE_OK result code will never be extended. It will always
570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** be exactly zero.
559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_extended_result_codes()] API. Or, the extended code for
560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the most recent error can be obtained using
561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_extended_errcode()].
571 562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
572 563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IOERR_READ (SQLITE_IOERR | (1<<8))
573 564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IOERR_SHORT_READ (SQLITE_IOERR | (2<<8))
574 565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IOERR_WRITE (SQLITE_IOERR | (3<<8))
575 566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IOERR_FSYNC (SQLITE_IOERR | (4<<8))
@@ -798,11 +789,11 @@
798 789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** write return values. Potential uses for xFileControl() might be
799 790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** functions to enable blocking locks with timeouts, to change the
800 791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** locking strategy (for example to use dot-file locks), to inquire
801 792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** about the status of a lock, or to break stale locks. The SQLite
802 793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** core reserves all opcodes less than 100 for its own use.
803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A [SQLITE_FCNTL_LOCKSTATE | list of opcodes] less than 100 is available.
794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A [file control opcodes | list of opcodes] less than 100 is available.
804 795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Applications that define a custom xFileControl method should use opcodes
805 796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** greater than 100 to avoid conflicts. VFS implementations should
806 797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return [SQLITE_NOTFOUND] for file control opcodes that they do not
807 798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** recognize.
808 799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -871,10 +862,11 @@
871 862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Additional methods may be added in future releases */
872 863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
873 864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
874 865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
875 866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Standard File Control Opcodes
867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** KEYWORDS: {file control opcodes} {file control opcode}
876 868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
877 869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These integer constants are opcodes for the xFileControl method
878 870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the [sqlite3_io_methods] object and for the [sqlite3_file_control()]
879 871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface.
880 872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -2150,31 +2142,37 @@
2150 2142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_complete16(const void *sql);
2151 2143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2152 2144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2153 2145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Register A Callback To Handle SQLITE_BUSY Errors
2154 2146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^This routine sets a callback function that might be invoked whenever
2156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** an attempt is made to open a database table that another thread
2157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or process has locked.
2147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The sqlite3_busy_handler(D,X,P) routine sets a callback function X
2148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that might be invoked with argument P whenever
2149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an attempt is made to access a database table associated with
2150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [database connection] D when another thread
2151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or process has the table locked.
2152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The sqlite3_busy_handler() interface is used to implement
2153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_busy_timeout()] and [PRAGMA busy_timeout].
2158 2154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^If the busy callback is NULL, then [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED]
2155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^If the busy callback is NULL, then [SQLITE_BUSY]
2160 2156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is returned immediately upon encountering the lock. ^If the busy callback
2161 2157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not NULL, then the callback might be invoked with two arguments.
2162 2158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2163 2159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The first argument to the busy handler is a copy of the void* pointer which
2164 2160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is the third argument to sqlite3_busy_handler(). ^The second argument to
2165 2161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the busy handler callback is the number of times that the busy handler has
2166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** been invoked for this locking event. ^If the
2162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** been invoked for the same locking event. ^If the
2167 2163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** busy callback returns 0, then no additional attempts are made to
2168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** access the database and [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED] is returned.
2164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** access the database and [SQLITE_BUSY] is returned
2165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the application.
2169 2166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^If the callback returns non-zero, then another attempt
2170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is made to open the database for reading and the cycle repeats.
2167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is made to access the database and the cycle repeats.
2171 2168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2172 2169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The presence of a busy handler does not guarantee that it will be invoked
2173 2170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** when there is lock contention. ^If SQLite determines that invoking the busy
2174 2171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** handler could result in a deadlock, it will go ahead and return [SQLITE_BUSY]
2175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or [SQLITE_IOERR_BLOCKED] instead of invoking the busy handler.
2172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to the application instead of invoking the
2173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** busy handler.
2176 2174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Consider a scenario where one process is holding a read lock that
2177 2175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it is trying to promote to a reserved lock and
2178 2176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a second process is holding a reserved lock that it is trying
2179 2177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to promote to an exclusive lock. The first process cannot proceed
2180 2178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** because it is blocked by the second and the second process cannot
@@ -2184,32 +2182,19 @@
2184 2182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will induce the first process to release its read lock and allow
2185 2183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the second process to proceed.
2186 2184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2187 2185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The default busy callback is NULL.
2188 2186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The [SQLITE_BUSY] error is converted to [SQLITE_IOERR_BLOCKED]
2190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** when SQLite is in the middle of a large transaction where all the
2191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** changes will not fit into the in-memory cache. SQLite will
2192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** already hold a RESERVED lock on the database file, but it needs
2193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to promote this lock to EXCLUSIVE so that it can spill cache
2194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pages into the database file without harm to concurrent
2195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** readers. ^If it is unable to promote the lock, then the in-memory
2196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cache will be left in an inconsistent state and so the error
2197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** code is promoted from the relatively benign [SQLITE_BUSY] to
2198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the more severe [SQLITE_IOERR_BLOCKED]. ^This error code promotion
2199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** forces an automatic rollback of the changes. See the
2200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <a href="/cvstrac/wiki?p=CorruptionFollowingBusyError">
2201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** CorruptionFollowingBusyError</a> wiki page for a discussion of why
2202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this is important.
2203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
2204 2187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(There can only be a single busy handler defined for each
2205 2188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [database connection]. Setting a new busy handler clears any
2206 2189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** previously set handler.)^ ^Note that calling [sqlite3_busy_timeout()]
2207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** will also set or clear the busy handler.
2190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or evaluating [PRAGMA busy_timeout=N] will change the
2191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** busy handler and thus clear any previously set busy handler.
2208 2192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2209 2193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The busy callback should not take any actions which modify the
2210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** database connection that invoked the busy handler. Any such actions
2194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database connection that invoked the busy handler. In other words,
2195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the busy handler is not reentrant. Any such actions
2211 2196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** result in undefined behavior.
2212 2197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2213 2198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A busy handler must not close the database connection
2214 2199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or [prepared statement] that invoked the busy handler.
2215 2200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -2221,19 +2206,21 @@
2221 2206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^This routine sets a [sqlite3_busy_handler | busy handler] that sleeps
2222 2207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for a specified amount of time when a table is locked. ^The handler
2223 2208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will sleep multiple times until at least "ms" milliseconds of sleeping
2224 2209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** have accumulated. ^After at least "ms" milliseconds of sleeping,
2225 2210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the handler returns 0 which causes [sqlite3_step()] to return
2226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [SQLITE_BUSY] or [SQLITE_IOERR_BLOCKED].
2211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [SQLITE_BUSY].
2227 2212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2228 2213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Calling this routine with an argument less than or equal to zero
2229 2214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** turns off all busy handlers.
2230 2215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2231 2216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^(There can only be a single busy handler for a particular
2232 2217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [database connection] any any given moment. If another busy handler
2233 2218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** was defined (using [sqlite3_busy_handler()]) prior to calling
2234 2219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this routine, that other busy handler is cleared.)^
2220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: [PRAGMA busy_timeout]
2235 2222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2236 2223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_busy_timeout(sqlite3*, int ms);
2237 2224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2238 2225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2239 2226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Convenience Routines For Running Queries
@@ -2631,12 +2618,12 @@
2631 2618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return either [SQLITE_OK] or one of these two constants in order
2632 2619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to signal SQLite whether or not the action is permitted. See the
2633 2620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_set_authorizer | authorizer documentation] for additional
2634 2621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** information.
2635 2622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Note that SQLITE_IGNORE is also used as a [SQLITE_ROLLBACK | return code]
2637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** from the [sqlite3_vtab_on_conflict()] interface.
2623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Note that SQLITE_IGNORE is also used as a [conflict resolution mode]
2624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returned from the [sqlite3_vtab_on_conflict()] interface.
2638 2625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2639 2626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_DENY 1 /* Abort the SQL statement with an error */
2640 2627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IGNORE 2 /* Don't allow access, but don't generate an error */
2641 2628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2642 2629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -4818,10 +4805,17 @@
4818 4805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the name of a folder (a.k.a. directory), then all temporary files
4819 4806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** created by SQLite when using a built-in [sqlite3_vfs | VFS]
4820 4807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will be placed in that directory.)^ ^If this variable
4821 4808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is a NULL pointer, then SQLite performs a search for an appropriate
4822 4809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** temporary file directory.
4810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
4811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Applications are strongly discouraged from using this global variable.
4812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It is required to set a temporary folder on Windows Runtime (WinRT).
4813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** But for all other platforms, it is highly recommended that applications
4814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** neither read nor write this variable. This global variable is a relic
4815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that exists for backwards compatibility of legacy applications and should
4816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be avoided in new projects.
4823 4817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4824 4818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It is not safe to read or modify this variable in more than one
4825 4819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** thread at a time. It is not safe to read or modify this variable
4826 4820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if a [database connection] is being used at the same time in a separate
4827 4821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** thread.
@@ -4837,10 +4831,15 @@
4837 4831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_malloc] and the pragma may attempt to free that memory
4838 4832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using [sqlite3_free].
4839 4833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Hence, if this variable is modified directly, either it should be
4840 4834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** made NULL or made to point to memory obtained from [sqlite3_malloc]
4841 4835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or else the use of the [temp_store_directory pragma] should be avoided.
4836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Except when requested by the [temp_store_directory pragma], SQLite
4837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** does not free the memory that sqlite3_temp_directory points to. If
4838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the application wants that memory to be freed, it must do
4839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** so itself, taking care to only do so after all [database connection]
4840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** objects have been destroyed.
4842 4841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
4843 4842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <b>Note to Windows Runtime users:</b> The temporary directory must be set
4844 4843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** prior to calling [sqlite3_open] or [sqlite3_open_v2]. Otherwise, various
4845 4844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** features that require the use of temporary files may fail. Here is an
4846 4845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** example of how to do this using C++ with the Windows Runtime:
@@ -5971,14 +5970,16 @@
5971 5970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
5972 5971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_FAST
5973 5972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_RECURSIVE
5974 5973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_MASTER
5975 5974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_MEM
5976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <li> SQLITE_MUTEX_STATIC_MEM2
5975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_OPEN
5977 5976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_PRNG
5978 5977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_LRU
5979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <li> SQLITE_MUTEX_STATIC_LRU2
5978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_PMEM
5979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP1
5980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP2
5980 5981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>)^
5981 5982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5982 5983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The first two constants (SQLITE_MUTEX_FAST and SQLITE_MUTEX_RECURSIVE)
5983 5984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cause sqlite3_mutex_alloc() to create
5984 5985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a new mutex. ^The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
@@ -6178,10 +6179,13 @@
6178 6179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_MUTEX_STATIC_OPEN 4 /* sqlite3BtreeOpen() */
6179 6180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_MUTEX_STATIC_PRNG 5 /* sqlite3_random() */
6180 6181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_MUTEX_STATIC_LRU 6 /* lru page list */
6181 6182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_MUTEX_STATIC_LRU2 7 /* NOT USED */
6182 6183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_MUTEX_STATIC_PMEM 7 /* sqlite3PageMalloc() */
6184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_MUTEX_STATIC_APP1 8 /* For use by application */
6185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_MUTEX_STATIC_APP2 9 /* For use by application */
6186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_MUTEX_STATIC_APP3 10 /* For use by application */
6183 6187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6184 6188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
6185 6189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Retrieve the mutex for a database connection
6186 6190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6187 6191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^This interface returns a pointer the [sqlite3_mutex] object that
@@ -6273,11 +6277,12 @@
6273 6277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
6274 6278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_EXPLAIN_STMT 19
6275 6279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_NEVER_CORRUPT 20
6276 6280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_VDBE_COVERAGE 21
6277 6281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_TESTCTRL_BYTEORDER 22
6278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_TESTCTRL_LAST 22
6282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_TESTCTRL_ISINIT 23
6283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_TESTCTRL_LAST 23
6279 6284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
6280 6285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
6281 6286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: SQLite Runtime Status
6282 6287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
6283 6288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^This interface is used to retrieve runtime status information
@@ -7256,10 +7261,13 @@
7256 7261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using [sqlite3_wal_hook()] disables the automatic checkpoint mechanism
7257 7262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** configured by this function.
7258 7263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7259 7264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The [wal_autocheckpoint pragma] can be used to invoke this interface
7260 7265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from SQL.
7266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
7267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^Checkpoints initiated by this mechanism are
7268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_wal_checkpoint_v2|PASSIVE].
7261 7269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7262 7270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Every new [database connection] defaults to having the auto-checkpoint
7263 7271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** enabled with a threshold of 1000 or [SQLITE_DEFAULT_WAL_AUTOCHECKPOINT]
7264 7272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pages. The use of this interface
7265 7273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is only necessary if the default setting is found to be suboptimal
@@ -7273,10 +7281,14 @@
7273 7281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The [sqlite3_wal_checkpoint(D,X)] interface causes database named X
7274 7282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on [database connection] D to be [checkpointed]. ^If X is NULL or an
7275 7283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** empty string, then a checkpoint is run on all databases of
7276 7284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** connection D. ^If the database connection D is not in
7277 7285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [WAL | write-ahead log mode] then this interface is a harmless no-op.
7286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^The [sqlite3_wal_checkpoint(D,X)] interface initiates a
7287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_wal_checkpoint_v2|PASSIVE] checkpoint.
7288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Use the [sqlite3_wal_checkpoint_v2()] interface to get a FULL
7289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or RESET checkpoint.
7278 7290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7279 7291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^The [wal_checkpoint pragma] can be used to invoke this interface
7280 7292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from SQL. ^The [sqlite3_wal_autocheckpoint()] interface and the
7281 7293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [wal_autocheckpoint pragma] can be used to cause this interface to be
7282 7294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** run whenever the WAL reaches a certain size threshold.
@@ -7295,22 +7307,25 @@
7295 7307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dl>
7296 7308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dt>SQLITE_CHECKPOINT_PASSIVE<dd>
7297 7309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Checkpoint as many frames as possible without waiting for any database
7298 7310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** readers or writers to finish. Sync the db file if all frames in the log
7299 7311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are checkpointed. This mode is the same as calling
7300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3_wal_checkpoint(). The busy-handler callback is never invoked.
7312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_wal_checkpoint(). The [sqlite3_busy_handler|busy-handler callback]
7313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is never invoked.
7301 7314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7302 7315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dt>SQLITE_CHECKPOINT_FULL<dd>
7303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This mode blocks (calls the busy-handler callback) until there is no
7316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This mode blocks (it invokes the
7317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_busy_handler|busy-handler callback]) until there is no
7304 7318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database writer and all readers are reading from the most recent database
7305 7319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** snapshot. It then checkpoints all frames in the log file and syncs the
7306 7320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database file. This call blocks database writers while it is running,
7307 7321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** but not database readers.
7308 7322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7309 7323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dt>SQLITE_CHECKPOINT_RESTART<dd>
7310 7324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This mode works the same way as SQLITE_CHECKPOINT_FULL, except after
7311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** checkpointing the log file it blocks (calls the busy-handler callback)
7325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** checkpointing the log file it blocks (calls the
7326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_busy_handler|busy-handler callback])
7312 7327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** until all readers are reading from the database file only. This ensures
7313 7328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the next client to write to the database file restarts the log file
7314 7329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from the beginning. This call blocks database writers while it is running,
7315 7330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** but not database readers.
7316 7331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dl>
@@ -7444,10 +7459,11 @@
7444 7459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7445 7460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_vtab_on_conflict(sqlite3 *);
7446 7461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7447 7462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
7448 7463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Conflict resolution modes
7464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** KEYWORDS: {conflict resolution mode}
7449 7465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7450 7466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These constants are returned by [sqlite3_vtab_on_conflict()] to
7451 7467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** inform a [virtual table] implementation what the [ON CONFLICT] mode
7452 7468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is for the SQL statement being evaluated.
7453 7469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -9285,43 +9301,43 @@
9285 9301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Affinity 47 /* synopsis: affinity(r[P1@P2]) */
9286 9302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_MakeRecord 48 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
9287 9303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Count 49 /* synopsis: r[P2]=count() */
9288 9304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ReadCookie 50
9289 9305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_SetCookie 51
9290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenRead 52 /* synopsis: root=P2 iDb=P3 */
9291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenWrite 53 /* synopsis: root=P2 iDb=P3 */
9292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenAutoindex 54 /* synopsis: nColumn=P2 */
9293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenEphemeral 55 /* synopsis: nColumn=P2 */
9294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterOpen 56
9295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_OpenPseudo 57 /* synopsis: P3 columns in r[P2] */
9296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Close 58
9297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekLT 59
9298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekLE 60
9299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekGE 61
9300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SeekGT 62
9301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Seek 63 /* synopsis: intkey=r[P2] */
9302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NoConflict 64 /* synopsis: key=r[P3@P4] */
9303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NotFound 65 /* synopsis: key=r[P3@P4] */
9304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Found 66 /* synopsis: key=r[P3@P4] */
9305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NotExists 67 /* synopsis: intkey=r[P3] */
9306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Sequence 68 /* synopsis: r[P2]=cursor[P1].ctr++ */
9307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NewRowid 69 /* synopsis: r[P2]=rowid */
9308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Insert 70 /* synopsis: intkey=r[P3] data=r[P2] */
9306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ReopenIdx 52 /* synopsis: root=P2 iDb=P3 */
9307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenRead 53 /* synopsis: root=P2 iDb=P3 */
9308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenWrite 54 /* synopsis: root=P2 iDb=P3 */
9309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenAutoindex 55 /* synopsis: nColumn=P2 */
9310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenEphemeral 56 /* synopsis: nColumn=P2 */
9311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterOpen 57
9312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_OpenPseudo 58 /* synopsis: P3 columns in r[P2] */
9313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Close 59
9314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekLT 60 /* synopsis: key=r[P3@P4] */
9315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekLE 61 /* synopsis: key=r[P3@P4] */
9316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekGE 62 /* synopsis: key=r[P3@P4] */
9317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SeekGT 63 /* synopsis: key=r[P3@P4] */
9318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Seek 64 /* synopsis: intkey=r[P2] */
9319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NoConflict 65 /* synopsis: key=r[P3@P4] */
9320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NotFound 66 /* synopsis: key=r[P3@P4] */
9321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Found 67 /* synopsis: key=r[P3@P4] */
9322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NotExists 68 /* synopsis: intkey=r[P3] */
9323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Sequence 69 /* synopsis: r[P2]=cursor[P1].ctr++ */
9324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NewRowid 70 /* synopsis: r[P2]=rowid */
9309 9325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Or 71 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
9310 9326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_And 72 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
9311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_InsertInt 73 /* synopsis: intkey=P3 data=r[P2] */
9312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Delete 74
9313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_ResetCount 75
9327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Insert 73 /* synopsis: intkey=r[P3] data=r[P2] */
9328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_InsertInt 74 /* synopsis: intkey=P3 data=r[P2] */
9329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Delete 75
9314 9330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_IsNull 76 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
9315 9331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_NotNull 77 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
9316 9332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Ne 78 /* same as TK_NE, synopsis: if r[P1]!=r[P3] goto P2 */
9317 9333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Eq 79 /* same as TK_EQ, synopsis: if r[P1]==r[P3] goto P2 */
9318 9334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Gt 80 /* same as TK_GT, synopsis: if r[P1]>r[P3] goto P2 */
9319 9335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Le 81 /* same as TK_LE, synopsis: if r[P1]<=r[P3] goto P2 */
9320 9336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Lt 82 /* same as TK_LT, synopsis: if r[P1]<r[P3] goto P2 */
9321 9337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Ge 83 /* same as TK_GE, synopsis: if r[P1]>=r[P3] goto P2 */
9322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterCompare 84 /* synopsis: if key(P1)!=rtrim(r[P3],P4) goto P2 */
9338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ResetCount 84
9323 9339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_BitAnd 85 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
9324 9340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_BitOr 86 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
9325 9341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ShiftLeft 87 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
9326 9342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ShiftRight 88 /* same as TK_RSHIFT, synopsis: r[P3]=r[P2]>>r[P1] */
9327 9343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Add 89 /* same as TK_PLUS, synopsis: r[P3]=r[P1]+r[P2] */
@@ -9328,73 +9344,74 @@
9328 9344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Subtract 90 /* same as TK_MINUS, synopsis: r[P3]=r[P2]-r[P1] */
9329 9345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Multiply 91 /* same as TK_STAR, synopsis: r[P3]=r[P1]*r[P2] */
9330 9346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Divide 92 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */
9331 9347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Remainder 93 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */
9332 9348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Concat 94 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
9333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterData 95 /* synopsis: r[P2]=data */
9349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterCompare 95 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
9334 9350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_BitNot 96 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */
9335 9351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_String8 97 /* same as TK_STRING, synopsis: r[P2]='P4' */
9336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowKey 98 /* synopsis: r[P2]=key */
9337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowData 99 /* synopsis: r[P2]=data */
9338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Rowid 100 /* synopsis: r[P2]=rowid */
9339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_NullRow 101
9340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Last 102
9341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterSort 103
9342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Sort 104
9343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Rewind 105
9344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_SorterInsert 106
9345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxInsert 107 /* synopsis: key=r[P2] */
9346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxDelete 108 /* synopsis: key=r[P2@P3] */
9347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxRowid 109 /* synopsis: r[P2]=rowid */
9348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxLE 110 /* synopsis: key=r[P3@P4] */
9349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxGT 111 /* synopsis: key=r[P3@P4] */
9350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxLT 112 /* synopsis: key=r[P3@P4] */
9351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IdxGE 113 /* synopsis: key=r[P3@P4] */
9352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Destroy 114
9353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Clear 115
9354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_ResetSorter 116
9355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_CreateIndex 117 /* synopsis: r[P2]=root iDb=P1 */
9356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_CreateTable 118 /* synopsis: r[P2]=root iDb=P1 */
9357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_ParseSchema 119
9358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_LoadAnalysis 120
9359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropTable 121
9360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropIndex 122
9361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_DropTrigger 123
9362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IntegrityCk 124
9363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetAdd 125 /* synopsis: rowset(P1)=r[P2] */
9364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetRead 126 /* synopsis: r[P3]=rowset(P1) */
9365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_RowSetTest 127 /* synopsis: if r[P3] in rowset(P1) goto P2 */
9366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Program 128
9367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Param 129
9368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_FkCounter 130 /* synopsis: fkctr[P1]+=P2 */
9369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_FkIfZero 131 /* synopsis: if fkctr[P1]==0 goto P2 */
9370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_MemMax 132 /* synopsis: r[P1]=max(r[P1],r[P2]) */
9352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterData 98 /* synopsis: r[P2]=data */
9353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowKey 99 /* synopsis: r[P2]=key */
9354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowData 100 /* synopsis: r[P2]=data */
9355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Rowid 101 /* synopsis: r[P2]=rowid */
9356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_NullRow 102
9357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Last 103
9358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterSort 104
9359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Sort 105
9360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Rewind 106
9361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_SorterInsert 107
9362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxInsert 108 /* synopsis: key=r[P2] */
9363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxDelete 109 /* synopsis: key=r[P2@P3] */
9364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxRowid 110 /* synopsis: r[P2]=rowid */
9365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxLE 111 /* synopsis: key=r[P3@P4] */
9366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxGT 112 /* synopsis: key=r[P3@P4] */
9367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxLT 113 /* synopsis: key=r[P3@P4] */
9368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IdxGE 114 /* synopsis: key=r[P3@P4] */
9369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Destroy 115
9370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Clear 116
9371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ResetSorter 117
9372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_CreateIndex 118 /* synopsis: r[P2]=root iDb=P1 */
9373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_CreateTable 119 /* synopsis: r[P2]=root iDb=P1 */
9374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_ParseSchema 120
9375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_LoadAnalysis 121
9376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropTable 122
9377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropIndex 123
9378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_DropTrigger 124
9379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IntegrityCk 125
9380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetAdd 126 /* synopsis: rowset(P1)=r[P2] */
9381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetRead 127 /* synopsis: r[P3]=rowset(P1) */
9382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_RowSetTest 128 /* synopsis: if r[P3] in rowset(P1) goto P2 */
9383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Program 129
9384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Param 130
9385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_FkCounter 131 /* synopsis: fkctr[P1]+=P2 */
9386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_FkIfZero 132 /* synopsis: if fkctr[P1]==0 goto P2 */
9371 9387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_Real 133 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
9372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfPos 134 /* synopsis: if r[P1]>0 goto P2 */
9373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfNeg 135 /* synopsis: if r[P1]<0 goto P2 */
9374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IfZero 136 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */
9375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_AggFinal 137 /* synopsis: accum=r[P1] N=P2 */
9376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_IncrVacuum 138
9377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Expire 139
9378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_TableLock 140 /* synopsis: iDb=P1 root=P2 write=P3 */
9379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VBegin 141
9380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VCreate 142
9388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_MemMax 134 /* synopsis: r[P1]=max(r[P1],r[P2]) */
9389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfPos 135 /* synopsis: if r[P1]>0 goto P2 */
9390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfNeg 136 /* synopsis: r[P1]+=P3, if r[P1]<0 goto P2 */
9391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IfZero 137 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */
9392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_AggFinal 138 /* synopsis: accum=r[P1] N=P2 */
9393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_IncrVacuum 139
9394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Expire 140
9395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_TableLock 141 /* synopsis: iDb=P1 root=P2 write=P3 */
9396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VBegin 142
9381 9397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToText 143 /* same as TK_TO_TEXT */
9382 9398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToBlob 144 /* same as TK_TO_BLOB */
9383 9399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToNumeric 145 /* same as TK_TO_NUMERIC */
9384 9400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToInt 146 /* same as TK_TO_INT */
9385 9401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OP_ToReal 147 /* same as TK_TO_REAL */
9386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VDestroy 148
9387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VOpen 149
9388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VColumn 150 /* synopsis: r[P3]=vcolumn(P2) */
9389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VNext 151
9390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_VRename 152
9391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Pagecount 153
9392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_MaxPgcnt 154
9393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Init 155 /* synopsis: Start at P2 */
9394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Noop 156
9395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define OP_Explain 157
9402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VCreate 148
9403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VDestroy 149
9404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VOpen 150
9405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VColumn 151 /* synopsis: r[P3]=vcolumn(P2) */
9406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VNext 152
9407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_VRename 153
9408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Pagecount 154
9409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_MaxPgcnt 155
9410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Init 156 /* synopsis: Start at P2 */
9411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Noop 157
9412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OP_Explain 158
9396 9413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9397 9414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9398 9415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Properties such as "out2" or "jump" that are specified in
9399 9416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** comments following the "case" for each opcode in the vdbe.c
9400 9417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are encoded into bitvectors as follows:
@@ -9412,23 +9429,23 @@
9412 9429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 16 */ 0x01, 0x01, 0x04, 0x24, 0x01, 0x04, 0x05, 0x10,\
9413 9430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 24 */ 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,\
9414 9431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 32 */ 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x05, 0x04,\
9415 9432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 40 */ 0x00, 0x00, 0x01, 0x01, 0x05, 0x05, 0x00, 0x00,\
9416 9433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 48 */ 0x00, 0x02, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,\
9417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 56 */ 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11, 0x08,\
9418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 64 */ 0x11, 0x11, 0x11, 0x11, 0x02, 0x02, 0x00, 0x4c,\
9434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 56 */ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11,\
9435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 64 */ 0x08, 0x11, 0x11, 0x11, 0x11, 0x02, 0x02, 0x4c,\
9419 9436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 72 */ 0x4c, 0x00, 0x00, 0x00, 0x05, 0x05, 0x15, 0x15,\
9420 9437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 80 */ 0x15, 0x15, 0x15, 0x15, 0x00, 0x4c, 0x4c, 0x4c,\
9421 9438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x00,\
9422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 96 */ 0x24, 0x02, 0x00, 0x00, 0x02, 0x00, 0x01, 0x01,\
9423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 104 */ 0x01, 0x01, 0x08, 0x08, 0x00, 0x02, 0x01, 0x01,\
9424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 112 */ 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02, 0x00,\
9425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x45, 0x15,\
9426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 128 */ 0x01, 0x02, 0x00, 0x01, 0x08, 0x02, 0x05, 0x05,\
9427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04,\
9428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 144 */ 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01,\
9429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 152 */ 0x00, 0x02, 0x02, 0x01, 0x00, 0x00,}
9439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 96 */ 0x24, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,\
9440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 104 */ 0x01, 0x01, 0x01, 0x08, 0x08, 0x00, 0x02, 0x01,\
9441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 112 */ 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02,\
9442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x45,\
9443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 128 */ 0x15, 0x01, 0x02, 0x00, 0x01, 0x02, 0x08, 0x05,\
9444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ 0x05, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04,\
9445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 144 */ 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,\
9446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 152 */ 0x01, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00,}
9430 9447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9431 9448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of opcodes.h *********************************************/
9432 9449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in vdbe.h ***********************/
9433 9450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9434 9451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -10331,22 +10348,22 @@
10331 10348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Hash trigHash; /* All triggers indexed by name */
10332 10349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Hash fkeyHash; /* All foreign keys by referenced table name */
10333 10350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pSeqTab; /* The sqlite_sequence table used by AUTOINCREMENT */
10334 10351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 file_format; /* Schema format version for this file */
10335 10352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 enc; /* Text encoding used by this database */
10336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u16 flags; /* Flags associated with this schema */
10353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 schemaFlags; /* Flags associated with this schema */
10337 10354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cache_size; /* Number of pages to use in the cache */
10338 10355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
10339 10356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10340 10357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10341 10358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** These macros can be used to test, set, or clear bits in the
10342 10359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Db.pSchema->flags field.
10343 10360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
10344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))==(P))
10345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->flags&(P))!=0)
10346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define DbSetProperty(D,I,P) (D)->aDb[I].pSchema->flags|=(P)
10347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->flags&=~(P)
10361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DbHasProperty(D,I,P) (((D)->aDb[I].pSchema->schemaFlags&(P))==(P))
10362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DbHasAnyProperty(D,I,P) (((D)->aDb[I].pSchema->schemaFlags&(P))!=0)
10363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DbSetProperty(D,I,P) (D)->aDb[I].pSchema->schemaFlags|=(P)
10364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define DbClearProperty(D,I,P) (D)->aDb[I].pSchema->schemaFlags&=~(P)
10348 10365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10349 10366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10350 10367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allowed values for the DB.pSchema->flags field.
10351 10368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10352 10369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The DB_SchemaLoaded flag is set after the database schema has been
@@ -10932,10 +10949,13 @@
10932 10949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tnum; /* Root BTree node for this table (see note above) */
10933 10950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 iPKey; /* If not negative, use aCol[iPKey] as the primary key */
10934 10951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 nCol; /* Number of columns in this table */
10935 10952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 nRef; /* Number of pointers to this Table */
10936 10953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LogEst szTabRow; /* Estimated size of each table row in bytes */
10954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_COSTMULT
10955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst costMult; /* Cost multiplier for using this table */
10956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
10937 10957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 tabFlags; /* Mask of TF_* values */
10938 10958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 keyConf; /* What to do in case of uniqueness conflict on iPKey */
10939 10959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_ALTERTABLE
10940 10960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addColOffset; /* Offset in CREATE TABLE stmt to add a new column */
10941 10961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -11172,10 +11192,13 @@
11172 11192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IDXTYPE_PRIMARYKEY 2 /* Is the PRIMARY KEY for the table */
11173 11193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11174 11194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Return true if index X is a PRIMARY KEY index */
11175 11195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define IsPrimaryKeyIndex(X) ((X)->idxType==SQLITE_IDXTYPE_PRIMARYKEY)
11176 11196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Return true if index X is a UNIQUE index */
11198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IsUniqueIndex(X) ((X)->onError!=OE_None)
11199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
11177 11200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11178 11201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Each sample stored in the sqlite_stat3 table is represented in memory
11179 11202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using a structure of this type. See documentation at the top of the
11180 11203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** analyze.c source file for additional information.
11181 11204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -11591,10 +11614,11 @@
11591 11614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_AND_ONLY 0x0080 /* Don't use indices for OR terms */
11592 11615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_GROUPBY 0x0100 /* pOrderBy is really a GROUP BY */
11593 11616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_DISTINCTBY 0x0200 /* pOrderby is really a DISTINCT clause */
11594 11617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_WANT_DISTINCT 0x0400 /* All output needs to be distinct */
11595 11618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_SORTBYGROUP 0x0800 /* Support sqlite3WhereIsSorted() */
11619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WHERE_REOPEN_IDX 0x1000 /* Try to use OP_ReopenIdx */
11596 11620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11597 11621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allowed return values from sqlite3WhereIsDistinct()
11598 11622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
11599 11623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_DISTINCT_NOOP 0 /* DISTINCT keyword not used */
11600 11624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_DISTINCT_UNIQUE 1 /* No duplicates */
@@ -11847,13 +11871,23 @@
11847 11871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11848 11872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11849 11873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The yDbMask datatype for the bitmask of all attached databases.
11850 11874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
11851 11875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_ATTACHED>30
11852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- typedef sqlite3_uint64 yDbMask;
11876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef unsigned char yDbMask[(SQLITE_MAX_ATTACHED+9)/8];
11877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskTest(M,I) (((M)[(I)/8]&(1<<((I)&7)))!=0)
11878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskZero(M) memset((M),0,sizeof(M))
11879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskSet(M,I) (M)[(I)/8]|=(1<<((I)&7))
11880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskAllZero(M) sqlite3DbMaskAllZero(M)
11881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskNonZero(M) (sqlite3DbMaskAllZero(M)==0)
11853 11882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
11854 11883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned int yDbMask;
11884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskTest(M,I) (((M)&(((yDbMask)1)<<(I)))!=0)
11885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskZero(M) (M)=0
11886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskSet(M,I) (M)|=(((yDbMask)1)<<(I))
11887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskAllZero(M) (M)==0
11888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define DbMaskNonZero(M) (M)!=0
11855 11889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
11856 11890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
11857 11891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
11858 11892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An SQL parser context. A copy of this structure is passed through
11859 11893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the parser and down into all the parser action routine in order to
@@ -12522,10 +12556,13 @@
12522 12556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse*,Table*);
12523 12557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
12524 12558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3ViewGetColumnNames(A,B) 0
12525 12559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12526 12560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_MAX_ATTACHED>30
12562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3DbMaskAllZero(yDbMask);
12563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
12527 12564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DropTable(Parse*, SrcList*, int, int);
12528 12565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3CodeDropTable(Parse*, Table*, int, int);
12529 12566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3*, Table*);
12530 12567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOINCREMENT
12531 12568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3AutoincrementBegin(Parse *pParse);
@@ -12772,10 +12809,11 @@
12772 12809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3TableAffinity(Vdbe*, Table*, int);
12773 12810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3CompareAffinity(Expr *pExpr, char aff2);
12774 12811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
12775 12812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr);
12776 12813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
12814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char*, i64*);
12777 12815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...);
12778 12816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
12779 12817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
12780 12818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
12781 12819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -12801,11 +12839,11 @@
12801 12839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_8_3_NAMES
12802 12840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3FileSuffix3(const char*, char*);
12803 12841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
12804 12842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3FileSuffix3(X,Y)
12805 12843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
12806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z,int);
12844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z,u8);
12807 12845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
12808 12846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value*, u8);
12809 12847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value*, u8);
12810 12848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ValueSetStr(sqlite3_value*, int, const void *,u8,
12811 12849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void(*)(void*));
@@ -13025,15 +13063,25 @@
13025 13063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
13026 13064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3BeginBenignMalloc()
13027 13065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define sqlite3EndBenignMalloc()
13028 13066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
13029 13067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define IN_INDEX_ROWID 1
13031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define IN_INDEX_EPH 2
13032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define IN_INDEX_INDEX_ASC 3
13033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define IN_INDEX_INDEX_DESC 4
13034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, int*);
13068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
13069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Allowed return values from sqlite3FindInIndex()
13070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
13071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_ROWID 1 /* Search the rowid of the table */
13072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_EPH 2 /* Search an ephemeral b-tree */
13073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_INDEX_ASC 3 /* Existing index ASCENDING */
13074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_INDEX_DESC 4 /* Existing index DESCENDING */
13075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_NOOP 5 /* No table available. Use comparisons */
13076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
13077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Allowed flags for the 3rd parameter to sqlite3FindInIndex().
13078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
13079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_NOOP_OK 0x0001 /* OK to return IN_INDEX_NOOP */
13080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_MEMBERSHIP 0x0002 /* IN operator used for membership test */
13081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define IN_INDEX_LOOP 0x0004 /* IN operator used as a loop */
13082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *, Expr *, u32, int*);
13035 13083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
13036 13084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_ATOMIC_WRITE
13037 13085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3JournalOpen(sqlite3_vfs *, const char *, sqlite3_file *, int, int);
13038 13086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3JournalSize(sqlite3_vfs *);
13039 13087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3JournalCreate(sqlite3_file *);
@@ -13876,18 +13924,22 @@
13876 13924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo; /* Info about index keys needed by index cursors */
13877 13925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int seekResult; /* Result of previous sqlite3BtreeMoveto() */
13878 13926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pseudoTableReg; /* Register holding pseudotable content. */
13879 13927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 nField; /* Number of fields in the header */
13880 13928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 nHdrParsed; /* Number of header fields parsed so far */
13929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
13930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 seekOp; /* Most recent seek operation on this cursor */
13931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
13881 13932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i8 iDb; /* Index of cursor database in db->aDb[] (or -1) */
13882 13933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 nullRow; /* True if pointing to a row with no data */
13883 13934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 rowidIsValid; /* True if lastRowid is valid */
13884 13935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */
13885 13936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool isEphemeral:1; /* True for an ephemeral table */
13886 13937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool useRandomRowid:1;/* Generate new record numbers semi-randomly */
13887 13938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool isTable:1; /* True if a table requiring integer keys */
13888 13939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bool isOrdered:1; /* True if the underlying table is BTREE_UNORDERED */
13940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Pgno pgnoRoot; /* Root page of the open btree cursor */
13889 13941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */
13890 13942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 seqCount; /* Sequence counter */
13891 13943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */
13892 13944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 lastRowid; /* Rowid being deleted by OP_Delete */
13893 13945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */
@@ -18396,11 +18448,11 @@
18396 18448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
18397 18449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Retrieve a pointer to a static mutex or allocate a new dynamic one.
18398 18450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
18399 18451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API sqlite3_mutex *sqlite3_mutex_alloc(int id){
18400 18452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOINIT
18401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_initialize() ) return 0;
18453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( id<=SQLITE_MUTEX_RECURSIVE && sqlite3_initialize() ) return 0;
18402 18454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
18403 18455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3GlobalConfig.mutex.xMutexAlloc(id);
18404 18456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
18405 18457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18406 18458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE sqlite3_mutex *sqlite3MutexAlloc(int id){
@@ -18577,11 +18629,11 @@
18577 18629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The sqlite3_mutex_alloc() routine allocates a new
18578 18630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mutex and returns a pointer to it. If it returns NULL
18579 18631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that means that a mutex could not be allocated.
18580 18632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
18581 18633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite3_mutex *debugMutexAlloc(int id){
18582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3_debug_mutex aStatic[6];
18634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_debug_mutex aStatic[SQLITE_MUTEX_STATIC_APP3 - 1];
18583 18635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_debug_mutex *pNew = 0;
18584 18636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( id ){
18585 18637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_MUTEX_FAST:
18586 18638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_MUTEX_RECURSIVE: {
18587 18639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3Malloc(sizeof(*pNew));
@@ -18774,14 +18826,17 @@
18774 18826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
18775 18827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_FAST
18776 18828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_RECURSIVE
18777 18829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_MASTER
18778 18830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_MEM
18779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <li> SQLITE_MUTEX_STATIC_MEM2
18831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_OPEN
18780 18832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_PRNG
18781 18833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_LRU
18782 18834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_PMEM
18835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP1
18836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP2
18837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP3
18783 18838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
18784 18839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
18785 18840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The first two constants cause sqlite3_mutex_alloc() to create
18786 18841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
18787 18842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
@@ -18806,10 +18861,13 @@
18806 18861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mutex types, the same mutex is returned on every call that has
18807 18862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same type number.
18808 18863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
18809 18864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite3_mutex *pthreadMutexAlloc(int iType){
18810 18865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite3_mutex staticMutexes[] = {
18866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE3_MUTEX_INITIALIZER,
18867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE3_MUTEX_INITIALIZER,
18868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE3_MUTEX_INITIALIZER,
18811 18869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
18812 18870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
18813 18871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
18814 18872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
18815 18873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
@@ -19041,14 +19099,227 @@
19041 19099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you do good and not evil.
19042 19100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you find forgiveness for yourself and forgive others.
19043 19101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
19044 19102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19045 19103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
19046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This file contains the C functions that implement mutexes for win32
19104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file contains the C functions that implement mutexes for Win32.
19047 19105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19048 19106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19049 19107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WIN
19108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Include code that is common to all os_*.c files
19110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Include os_common.h in the middle of mutex_w32.c *************/
19112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Begin file os_common.h ***************************************/
19113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2004 May 22
19115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The author disclaims copyright to this source code. In place of
19117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a legal notice, here is a blessing:
19118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you do good and not evil.
19120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you find forgiveness for yourself and forgive others.
19121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you share freely, never taking more than you give.
19122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ******************************************************************************
19124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file contains macros and a little bit of code that is common to
19126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all of the platform-specific files (os_*.c) and is #included into those
19127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** files.
19128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file should be #included by the os_*.c files only. It is not a
19130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** general purpose header file.
19131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef _OS_COMMON_H_
19133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define _OS_COMMON_H_
19134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** At least two bugs have slipped in because we changed the MEMORY_DEBUG
19137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** macro to SQLITE_DEBUG and some older makefiles have not yet made the
19138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** switch. The following code should catch this problem at compile-time.
19139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef MEMORY_DEBUG
19141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # error "The MEMORY_DEBUG macro is obsolete. Use SQLITE_DEBUG instead."
19142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
19145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifndef SQLITE_DEBUG_OS_TRACE
19146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_DEBUG_OS_TRACE 0
19147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
19148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int sqlite3OSTrace = SQLITE_DEBUG_OS_TRACE;
19149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X) if( sqlite3OSTrace ) sqlite3DebugPrintf X
19150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
19151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define OSTRACE(X)
19152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Macros for performance tracing. Normally turned off. Only works
19156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on i486 hardware.
19157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_PERFORMANCE_TRACE
19159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** hwtime.h contains inline assembler code for implementing
19162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** high-performance timing routines.
19163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Include hwtime.h in the middle of os_common.h ****************/
19165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Begin file hwtime.h ******************************************/
19166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2008 May 27
19168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The author disclaims copyright to this source code. In place of
19170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a legal notice, here is a blessing:
19171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you do good and not evil.
19173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you find forgiveness for yourself and forgive others.
19174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you share freely, never taking more than you give.
19175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ******************************************************************************
19177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
19178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file contains inline asm code for retrieving "high-performance"
19179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** counters for x86 class CPUs.
19180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef _HWTIME_H_
19182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define _HWTIME_H_
19183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following routine only works on pentium-class (or newer) processors.
19186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It uses the RDTSC opcode to read the cycle count value out of the
19187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** processor and returns that value. This can be used for high-res
19188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** profiling.
19189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if (defined(__GNUC__) || defined(_MSC_VER)) && \
19191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (defined(i386) || defined(__i386__) || defined(_M_IX86))
19192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(__GNUC__)
19194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
19196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int lo, hi;
19197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
19198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (sqlite_uint64)hi << 32 | lo;
19199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(_MSC_VER)
19202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
19204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm {
19205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rdtsc
19206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ret ; return value at EDX:EAX
19207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif (defined(__GNUC__) && defined(__x86_64__))
19213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
19215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned long val;
19216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm__ __volatile__ ("rdtsc" : "=A" (val));
19217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return val;
19218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif (defined(__GNUC__) && defined(__ppc__))
19221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
19223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned long long retval;
19224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned long junk;
19225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm__ __volatile__ ("\n\
19226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 1: mftbu %1\n\
19227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mftb %L0\n\
19228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mftbu %0\n\
19229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cmpw %0,%1\n\
19230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bne 1b"
19231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : "=r" (retval), "=r" (junk));
19232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return retval;
19233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
19236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #error Need implementation of sqlite3Hwtime() for your platform.
19238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** To compile without implementing sqlite3Hwtime() for your platform,
19241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** you can remove the above #error and use the following
19242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** stub function. You will lose timing support for many
19243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the debugging and testing utilities, but it should at
19244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** least compile and run.
19245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
19247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !defined(_HWTIME_H_) */
19251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** End of hwtime.h **********************************************/
19253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Continuing where we left off in os_common.h ******************/
19254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite_uint64 g_start;
19256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite_uint64 g_elapsed;
19257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TIMER_START g_start=sqlite3Hwtime()
19258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TIMER_END g_elapsed=sqlite3Hwtime()-g_start
19259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TIMER_ELAPSED g_elapsed
19260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
19261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TIMER_START
19262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TIMER_END
19263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define TIMER_ELAPSED ((sqlite_uint64)0)
19264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If we compile with the SQLITE_TEST macro set, then the following block
19268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of code will give us the ability to simulate a disk I/O error. This
19269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is used for testing the I/O recovery logic.
19270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_TEST
19272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_io_error_hit = 0; /* Total number of I/O Errors */
19273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_io_error_hardhit = 0; /* Number of non-benign errors */
19274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_io_error_pending = 0; /* Count down to first I/O error */
19275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_io_error_persist = 0; /* True if I/O errors persist */
19276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_io_error_benign = 0; /* True if errors are benign */
19277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_diskfull_pending = 0;
19278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_diskfull = 0;
19279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SimulateIOErrorBenign(X) sqlite3_io_error_benign=(X)
19280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SimulateIOError(CODE) \
19281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3_io_error_persist && sqlite3_io_error_hit) \
19282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || sqlite3_io_error_pending-- == 1 ) \
19283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { local_ioerr(); CODE; }
19284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void local_ioerr(){
19285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IOTRACE(("IOERR\n"));
19286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_io_error_hit++;
19287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !sqlite3_io_error_benign ) sqlite3_io_error_hardhit++;
19288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SimulateDiskfullError(CODE) \
19290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_diskfull_pending ){ \
19291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_diskfull_pending == 1 ){ \
19292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ local_ioerr(); \
19293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_diskfull = 1; \
19294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_io_error_hit = 1; \
19295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CODE; \
19296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{ \
19297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_diskfull_pending--; \
19298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } \
19299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
19301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SimulateIOErrorBenign(X)
19302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SimulateIOError(A)
19303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SimulateDiskfullError(A)
19304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When testing, keep a count of the number of open files.
19308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_TEST
19310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_open_file_count = 0;
19311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OpenCounter(X) sqlite3_open_file_count+=(X)
19312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
19313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OpenCounter(X)
19314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !defined(_OS_COMMON_H_) */
19317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** End of os_common.h *******************************************/
19319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Continuing where we left off in mutex_w32.c ******************/
19320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19050 19321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19051 19322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Include the header file for the Windows VFS.
19052 19323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19053 19324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include os_win.h in the middle of mutex_w32.c ****************/
19054 19325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file os_win.h ******************************************/
@@ -19124,11 +19395,11 @@
19124 19395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in mutex_w32.c ******************/
19125 19396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19126 19397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19127 19398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19128 19399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The code in this file is only used if we are compiling multithreaded
19129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** on a win32 system.
19400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on a Win32 system.
19130 19401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19131 19402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_MUTEX_W32
19132 19403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19133 19404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19134 19405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Each recursive mutex is an instance of the following structure.
@@ -19137,94 +19408,75 @@
19137 19408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CRITICAL_SECTION mutex; /* Mutex controlling the lock */
19138 19409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int id; /* Mutex type */
19139 19410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19140 19411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
volatile int nRef; /* Number of enterances */
19141 19412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
volatile DWORD owner; /* Thread holding this mutex */
19142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int trace; /* True to trace changes */
19413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ volatile int trace; /* True to trace changes */
19143 19414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19144 19415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
19416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
19418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** These are the initializer values used when declaring a "static" mutex
19419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on Win32. It should be noted that all mutexes require initialization
19420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on the Win32 platform.
19421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
19145 19422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_W32_MUTEX_INITIALIZER { 0 }
19423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19146 19424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, 0L, (DWORD)0, 0 }
19425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0, \
19426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0L, (DWORD)0, 0 }
19148 19427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
19149 19428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE3_MUTEX_INITIALIZER { SQLITE_W32_MUTEX_INITIALIZER, 0 }
19150 19429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19151 19430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
19153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
19154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or WinCE. Return false (zero) for Win95, Win98, or WinME.
19155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
19156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Here is an interesting observation: Win95, Win98, and WinME lack
19157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the LockFileEx() API. But we can still statically link against that
19158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** API as long as we don't call it win running Win95/98/ME. A call to
19159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this routine is used to determine if the host is Win95/98/ME or
19160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** WinNT/2K/XP so that we will know whether or not we can safely call
19161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the LockFileEx() API.
19162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
19163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** mutexIsNT() is only used for the TryEnterCriticalSection() API call,
19164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** which is only available if your application was compiled with
19165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** _WIN32_WINNT defined to a value >= 0x0400. Currently, the only
19166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** call to TryEnterCriticalSection() is #ifdef'ed out, so #ifdef
19167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this out as well.
19168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
19169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
19170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_OS_WINCE || SQLITE_OS_WINRT
19171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define mutexIsNT() (1)
19172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
19173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int mutexIsNT(void){
19174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int osType = 0;
19175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( osType==0 ){
19176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSVERSIONINFO sInfo;
19177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sInfo.dwOSVersionInfoSize = sizeof(sInfo);
19178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- GetVersionEx(&sInfo);
19179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- osType = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
19180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
19181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return osType==2;
19182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
19183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* SQLITE_OS_WINCE || SQLITE_OS_WINRT */
19184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
19185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
19186 19431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19187 19432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19188 19433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The sqlite3_mutex_held() and sqlite3_mutex_notheld() routine are
19189 19434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** intended for use only inside assert() statements.
19190 19435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19191 19436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winMutexHeld(sqlite3_mutex *p){
19192 19437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p->nRef!=0 && p->owner==GetCurrentThreadId();
19193 19438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19194 19440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winMutexNotheld2(sqlite3_mutex *p, DWORD tid){
19195 19441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p->nRef==0 || p->owner!=tid;
19196 19442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19197 19444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winMutexNotheld(sqlite3_mutex *p){
19198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DWORD tid = GetCurrentThreadId();
19445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DWORD tid = GetCurrentThreadId();
19199 19446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return winMutexNotheld2(p, tid);
19200 19447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19201 19448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19202 19449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
19204 19450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19205 19451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Initialize and deinitialize the mutex subsystem.
19206 19452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static sqlite3_mutex winMutex_staticMutexes[6] = {
19453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static sqlite3_mutex winMutex_staticMutexes[] = {
19454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE3_MUTEX_INITIALIZER,
19455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE3_MUTEX_INITIALIZER,
19456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE3_MUTEX_INITIALIZER,
19208 19457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
19209 19458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
19210 19459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
19211 19460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
19212 19461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER,
19213 19462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE3_MUTEX_INITIALIZER
19214 19463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
19464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19215 19465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winMutex_isInit = 0;
19216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* As winMutexInit() and winMutexEnd() are called as part
19217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the sqlite3_initialize and sqlite3_shutdown()
19218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** processing, the "interlocked" magic is probably not
19219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** strictly necessary.
19466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMutex_isNt = -1; /* <0 means "need to query" */
19467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* As the winMutexInit() and winMutexEnd() functions are called as part
19469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the sqlite3_initialize() and sqlite3_shutdown() processing, the
19470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "interlocked" magic used here is probably not strictly necessary.
19220 19471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static LONG winMutex_lock = 0;
19472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static LONG volatile winMutex_lock = 0;
19222 19473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_win32_is_nt(void); /* os_win.c */
19223 19475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_win32_sleep(DWORD milliseconds); /* os_win.c */
19224 19476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int winMutexInit(void){
19477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMutexInit(void){
19226 19478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The first to increment to 1 does actual initialization */
19227 19479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( InterlockedCompareExchange(&winMutex_lock, 1, 0)==0 ){
19228 19480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
19229 19481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
19230 19482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINRT
@@ -19233,20 +19485,21 @@
19233 19485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
InitializeCriticalSection(&winMutex_staticMutexes[i].mutex);
19234 19486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19235 19487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19236 19488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winMutex_isInit = 1;
19237 19489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
19238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Someone else is in the process of initing the static mutexes */
19490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Another thread is (in the process of) initializing the static
19491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mutexes */
19239 19492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( !winMutex_isInit ){
19240 19493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_win32_sleep(1);
19241 19494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19242 19495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
19496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
19244 19497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19245 19498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int winMutexEnd(void){
19247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The first to decrement to 0 does actual shutdown
19499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int winMutexEnd(void){
19500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The first to decrement to 0 does actual shutdown
19248 19501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (which should be the last to shutdown.) */
19249 19502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( InterlockedCompareExchange(&winMutex_lock, 0, 1)==1 ){
19250 19503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( winMutex_isInit==1 ){
19251 19504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
19252 19505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<ArraySize(winMutex_staticMutexes); i++){
@@ -19253,11 +19506,11 @@
19253 19506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DeleteCriticalSection(&winMutex_staticMutexes[i].mutex);
19254 19507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19255 19508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winMutex_isInit = 0;
19256 19509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19257 19510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
19511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
19259 19512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19260 19513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19261 19514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19262 19515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The sqlite3_mutex_alloc() routine allocates a new
19263 19516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mutex and returns a pointer to it. If it returns NULL
@@ -19268,14 +19521,17 @@
19268 19521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <ul>
19269 19522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_FAST
19270 19523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_RECURSIVE
19271 19524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_MASTER
19272 19525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_MEM
19273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** <li> SQLITE_MUTEX_STATIC_MEM2
19526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_OPEN
19274 19527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_PRNG
19275 19528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_LRU
19276 19529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> SQLITE_MUTEX_STATIC_PMEM
19530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP1
19531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP2
19532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li> SQLITE_MUTEX_STATIC_APP3
19277 19533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
19278 19534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19279 19535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The first two constants cause sqlite3_mutex_alloc() to create
19280 19536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a new mutex. The new mutex is recursive when SQLITE_MUTEX_RECURSIVE
19281 19537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is used but not necessarily so when SQLITE_MUTEX_FAST is used.
@@ -19294,11 +19550,11 @@
19294 19550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use only the dynamic mutexes returned by SQLITE_MUTEX_FAST or
19295 19551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_MUTEX_RECURSIVE.
19296 19552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19297 19553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Note that if one of the dynamic mutex parameters (SQLITE_MUTEX_FAST
19298 19554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or SQLITE_MUTEX_RECURSIVE) is used then sqlite3_mutex_alloc()
19299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** returns a different mutex on every call. But for the static
19555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns a different mutex on every call. But for the static
19300 19556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mutex types, the same mutex is returned on every call that has
19301 19557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same type number.
19302 19558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19303 19559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite3_mutex *winMutexAlloc(int iType){
19304 19560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex *p;
@@ -19305,13 +19561,16 @@
19305 19561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19306 19562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( iType ){
19307 19563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_MUTEX_FAST:
19308 19564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_MUTEX_RECURSIVE: {
19309 19565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3MallocZero( sizeof(*p) );
19310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p ){
19566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p ){
19311 19567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19312 19568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->id = iType;
19569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MUTEX_TRACE_DYNAMIC
19570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->trace = 1;
19571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19313 19572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19314 19573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINRT
19315 19574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
InitializeCriticalSectionEx(&p->mutex, 0, 0);
19316 19575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
19317 19576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
InitializeCriticalSection(&p->mutex);
@@ -19318,16 +19577,19 @@
19318 19577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19319 19578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19320 19579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
19321 19580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19322 19581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: {
19323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( winMutex_isInit==1 );
19324 19582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iType-2 >= 0 );
19325 19583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iType-2 < ArraySize(winMutex_staticMutexes) );
19584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( winMutex_isInit==1 );
19326 19585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = &winMutex_staticMutexes[iType-2];
19327 19586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19328 19587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->id = iType;
19588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_WIN32_MUTEX_TRACE_STATIC
19589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->trace = 1;
19590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19329 19591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19330 19592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
19331 19593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19332 19594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19333 19595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p;
@@ -19339,12 +19601,15 @@
19339 19601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** allocated mutex. SQLite is careful to deallocate every
19340 19602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mutex that it allocates.
19341 19603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19342 19604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void winMutexFree(sqlite3_mutex *p){
19343 19605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p );
19606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
19344 19607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nRef==0 && p->owner==0 );
19345 19608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->id==SQLITE_MUTEX_FAST || p->id==SQLITE_MUTEX_RECURSIVE );
19609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( winMutex_isInit==1 );
19346 19611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DeleteCriticalSection(&p->mutex);
19347 19612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p);
19348 19613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19349 19614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19350 19615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -19357,53 +19622,71 @@
19357 19622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mutex must be exited an equal number of times before another thread
19358 19623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can enter. If the same thread tries to enter any other kind of mutex
19359 19624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** more than once, the behavior is undefined.
19360 19625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19361 19626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void winMutexEnter(sqlite3_mutex *p){
19627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
19628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DWORD tid = GetCurrentThreadId();
19629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19362 19630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DWORD tid = GetCurrentThreadId();
19631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p );
19364 19632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
19633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
19634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p );
19365 19635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( winMutex_isInit==1 );
19366 19637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
EnterCriticalSection(&p->mutex);
19367 19638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19368 19639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nRef>0 || p->owner==0 );
19369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->owner = tid;
19640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->owner = tid;
19370 19641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nRef++;
19371 19642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->trace ){
19372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("enter mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
19643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("ENTER-MUTEX tid=%lu, mutex=%p (%d), nRef=%d\n",
19644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tid, p, p->trace, p->nRef));
19373 19645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19374 19646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19375 19647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19376 19649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winMutexTry(sqlite3_mutex *p){
19377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef NDEBUG
19378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- DWORD tid = GetCurrentThreadId();
19650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
19651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DWORD tid = GetCurrentThreadId();
19379 19652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19380 19653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_BUSY;
19654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p );
19381 19655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->id==SQLITE_MUTEX_RECURSIVE || winMutexNotheld2(p, tid) );
19382 19656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
19383 19657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The sqlite3_mutex_try() routine is very rarely used, and when it
19384 19658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is used it is merely an optimization. So it is OK for it to always
19385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fail.
19659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fail.
19386 19660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
19387 19661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The TryEnterCriticalSection() interface is only available on WinNT.
19388 19662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** And some windows compilers complain if you try to use it without
19389 19663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** first doing some #defines that prevent SQLite from building on Win98.
19390 19664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For that reason, we will omit this optimization for now. See
19391 19665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ticket #2685.
19392 19666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
19394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( mutexIsNT() && TryEnterCriticalSection(&p->mutex) ){
19667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0400
19668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( winMutex_isInit==1 );
19669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( winMutex_isNt>=-1 && winMutex_isNt<=1 );
19670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( winMutex_isNt<0 ){
19671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winMutex_isNt = sqlite3_win32_is_nt();
19672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
19673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( winMutex_isNt==0 || winMutex_isNt==1 );
19674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( winMutex_isNt && TryEnterCriticalSection(&p->mutex) ){
19675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
19395 19676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->owner = tid;
19396 19677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nRef++;
19678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19397 19679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
19398 19680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19399 19681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
19400 19682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(p);
19401 19683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19402 19684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK && p->trace ){
19404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("try mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
19685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->trace ){
19686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("TRY-MUTEX tid=%lu, mutex=%p (%d), owner=%lu, nRef=%d, rc=%s\n",
19687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tid, p, p->trace, p->owner, p->nRef, sqlite3ErrName(rc)));
19405 19688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19406 19689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19407 19690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
19408 19691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19409 19692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -19412,22 +19695,27 @@
19412 19695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** previously entered by the same thread. The behavior
19413 19696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is undefined if the mutex is not currently entered or
19414 19697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not currently allocated. SQLite will never do either.
19415 19698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
19416 19699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void winMutexLeave(sqlite3_mutex *p){
19417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef NDEBUG
19700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
19418 19701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD tid = GetCurrentThreadId();
19702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
19703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p );
19704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
19419 19705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nRef>0 );
19420 19706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->owner==tid );
19421 19707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nRef--;
19422 19708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nRef==0 ) p->owner = 0;
19423 19709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nRef==0 || p->id==SQLITE_MUTEX_RECURSIVE );
19424 19710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( winMutex_isInit==1 );
19425 19712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LeaveCriticalSection(&p->mutex);
19426 19713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
19427 19714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->trace ){
19428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- printf("leave mutex %p (%d) with nRef=%d\n", p, p->trace, p->nRef);
19715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSTRACE(("LEAVE-MUTEX tid=%lu, mutex=%p (%d), nRef=%d\n",
19716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tid, p, p->trace, p->nRef));
19429 19717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19430 19718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19431 19719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19432 19720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19433 19721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE sqlite3_mutex_methods const *sqlite3DefaultMutex(void){
@@ -19445,13 +19733,13 @@
19445 19733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
19446 19734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
19447 19735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0
19448 19736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
19449 19737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
19450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
19451 19738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return &sMutex;
19452 19739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
19740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
19453 19741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_MUTEX_W32 */
19454 19742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
19455 19743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of mutex_w32.c *******************************************/
19456 19744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file malloc.c ******************************************/
19457 19745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -22422,13 +22710,13 @@
22422 22710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( c==(+1) );
22423 22711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22424 22712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return c;
22425 22713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22426 22714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
22428 22715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
22429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert zNum to a 64-bit signed integer.
22716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert zNum to a 64-bit signed integer. zNum must be decimal. This
22717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine does *not* accept hexadecimal notation.
22430 22718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
22431 22719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the zNum value is representable as a 64-bit twos-complement
22432 22720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** integer, then write that value into *pNum and return 0.
22433 22721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
22434 22722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If zNum is exactly 9223372036854775808, return 2. This special
@@ -22511,14 +22799,48 @@
22511 22799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( u-1==LARGEST_INT64 );
22512 22800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return neg ? 0 : 2;
22513 22801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22514 22802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22515 22803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
22805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
22806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Transform a UTF-8 integer literal, in either decimal or hexadecimal,
22807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into a 64-bit signed integer. This routine accepts hexadecimal literals,
22808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** whereas sqlite3Atoi64() does not.
22809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
22810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Returns:
22811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
22812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0 Successful transformation. Fits in a 64-bit signed integer.
22813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1 Integer too large for a 64-bit signed integer or is malformed
22814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2 Special case of 9223372036854775808
22815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
22816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char *z, i64 *pOut){
22817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_HEX_INTEGER
22818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[0]=='0'
22819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (z[1]=='x' || z[1]=='X')
22820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3Isxdigit(z[2])
22821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
22822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 u = 0;
22823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, k;
22824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=2; z[i]=='0'; i++){}
22825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(k=i; sqlite3Isxdigit(z[k]); k++){
22826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u = u*16 + sqlite3HexToInt(z[k]);
22827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
22828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pOut, &u, 8);
22829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (z[k]==0 && k-i<=16) ? 0 : 1;
22830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
22831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* SQLITE_OMIT_HEX_INTEGER */
22832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
22833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3Atoi64(z, pOut, sqlite3Strlen30(z), SQLITE_UTF8);
22834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
22835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
22516 22836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22517 22837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
22518 22838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If zNum represents an integer that will fit in 32-bits, then set
22519 22839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** *pValue to that integer and return true. Otherwise return false.
22840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
22841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine accepts both decimal and hexadecimal notation for integers.
22520 22842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
22521 22843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Any non-numeric characters that following zNum are ignored.
22522 22844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is different from sqlite3Atoi64() which requires the
22523 22845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** input number to be zero-terminated.
22524 22846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -22530,11 +22852,29 @@
22530 22852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
neg = 1;
22531 22853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zNum++;
22532 22854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( zNum[0]=='+' ){
22533 22855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zNum++;
22534 22856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( zNum[0]=='0' ) zNum++;
22857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_HEX_INTEGER
22858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( zNum[0]=='0'
22859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (zNum[1]=='x' || zNum[1]=='X')
22860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3Isxdigit(zNum[2])
22861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
22862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 u = 0;
22863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zNum += 2;
22864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( zNum[0]=='0' ) zNum++;
22865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; sqlite3Isxdigit(zNum[i]) && i<8; i++){
22866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u = u*16 + sqlite3HexToInt(zNum[i]);
22867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
22868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (u&0x80000000)==0 && sqlite3Isxdigit(zNum[i])==0 ){
22869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memcpy(pValue, &u, 4);
22870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
22871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
22872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
22873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
22874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
22875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
22536 22876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<11 && (c = zNum[i] - '0')>=0 && c<=9; i++){
22537 22877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = v*10 + c;
22538 22878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
22539 22879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22540 22880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The longest decimal representation of a 32 bit integer is 10 digits:
@@ -23606,43 +23946,43 @@
23606 23946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 47 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
23607 23947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 48 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
23608 23948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 49 */ "Count" OpHelp("r[P2]=count()"),
23609 23949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 50 */ "ReadCookie" OpHelp(""),
23610 23950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 51 */ "SetCookie" OpHelp(""),
23611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 52 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
23612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 53 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
23613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 54 */ "OpenAutoindex" OpHelp("nColumn=P2"),
23614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 55 */ "OpenEphemeral" OpHelp("nColumn=P2"),
23615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 56 */ "SorterOpen" OpHelp(""),
23616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 57 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
23617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 58 */ "Close" OpHelp(""),
23618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 59 */ "SeekLT" OpHelp(""),
23619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 60 */ "SeekLE" OpHelp(""),
23620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 61 */ "SeekGE" OpHelp(""),
23621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 62 */ "SeekGT" OpHelp(""),
23622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 63 */ "Seek" OpHelp("intkey=r[P2]"),
23623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 64 */ "NoConflict" OpHelp("key=r[P3@P4]"),
23624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 65 */ "NotFound" OpHelp("key=r[P3@P4]"),
23625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 66 */ "Found" OpHelp("key=r[P3@P4]"),
23626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 67 */ "NotExists" OpHelp("intkey=r[P3]"),
23627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 68 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
23628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 69 */ "NewRowid" OpHelp("r[P2]=rowid"),
23629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 70 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
23951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 52 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
23952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 53 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
23953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 54 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
23954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 55 */ "OpenAutoindex" OpHelp("nColumn=P2"),
23955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 56 */ "OpenEphemeral" OpHelp("nColumn=P2"),
23956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 57 */ "SorterOpen" OpHelp(""),
23957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 58 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
23958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 59 */ "Close" OpHelp(""),
23959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 60 */ "SeekLT" OpHelp("key=r[P3@P4]"),
23960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 61 */ "SeekLE" OpHelp("key=r[P3@P4]"),
23961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 62 */ "SeekGE" OpHelp("key=r[P3@P4]"),
23962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 63 */ "SeekGT" OpHelp("key=r[P3@P4]"),
23963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 64 */ "Seek" OpHelp("intkey=r[P2]"),
23964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 65 */ "NoConflict" OpHelp("key=r[P3@P4]"),
23965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 66 */ "NotFound" OpHelp("key=r[P3@P4]"),
23966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 67 */ "Found" OpHelp("key=r[P3@P4]"),
23967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 68 */ "NotExists" OpHelp("intkey=r[P3]"),
23968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 69 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
23969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 70 */ "NewRowid" OpHelp("r[P2]=rowid"),
23630 23970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 71 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
23631 23971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 72 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
23632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 73 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
23633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 74 */ "Delete" OpHelp(""),
23634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 75 */ "ResetCount" OpHelp(""),
23972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 73 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
23973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 74 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
23974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 75 */ "Delete" OpHelp(""),
23635 23975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 76 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
23636 23976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 77 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
23637 23977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 78 */ "Ne" OpHelp("if r[P1]!=r[P3] goto P2"),
23638 23978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 79 */ "Eq" OpHelp("if r[P1]==r[P3] goto P2"),
23639 23979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 80 */ "Gt" OpHelp("if r[P1]>r[P3] goto P2"),
23640 23980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 81 */ "Le" OpHelp("if r[P1]<=r[P3] goto P2"),
23641 23981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 82 */ "Lt" OpHelp("if r[P1]<r[P3] goto P2"),
23642 23982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 83 */ "Ge" OpHelp("if r[P1]>=r[P3] goto P2"),
23643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 84 */ "SorterCompare" OpHelp("if key(P1)!=rtrim(r[P3],P4) goto P2"),
23983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 84 */ "ResetCount" OpHelp(""),
23644 23984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 85 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
23645 23985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 86 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
23646 23986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 87 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
23647 23987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 88 */ "ShiftRight" OpHelp("r[P3]=r[P2]>>r[P1]"),
23648 23988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 89 */ "Add" OpHelp("r[P3]=r[P1]+r[P2]"),
@@ -23649,73 +23989,74 @@
23649 23989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 90 */ "Subtract" OpHelp("r[P3]=r[P2]-r[P1]"),
23650 23990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 91 */ "Multiply" OpHelp("r[P3]=r[P1]*r[P2]"),
23651 23991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 92 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"),
23652 23992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 93 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"),
23653 23993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 94 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
23654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 95 */ "SorterData" OpHelp("r[P2]=data"),
23994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 95 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
23655 23995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 96 */ "BitNot" OpHelp("r[P1]= ~r[P1]"),
23656 23996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 97 */ "String8" OpHelp("r[P2]='P4'"),
23657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 98 */ "RowKey" OpHelp("r[P2]=key"),
23658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 99 */ "RowData" OpHelp("r[P2]=data"),
23659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 100 */ "Rowid" OpHelp("r[P2]=rowid"),
23660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 101 */ "NullRow" OpHelp(""),
23661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 102 */ "Last" OpHelp(""),
23662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 103 */ "SorterSort" OpHelp(""),
23663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 104 */ "Sort" OpHelp(""),
23664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 105 */ "Rewind" OpHelp(""),
23665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 106 */ "SorterInsert" OpHelp(""),
23666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 107 */ "IdxInsert" OpHelp("key=r[P2]"),
23667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 108 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
23668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 109 */ "IdxRowid" OpHelp("r[P2]=rowid"),
23669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 110 */ "IdxLE" OpHelp("key=r[P3@P4]"),
23670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 111 */ "IdxGT" OpHelp("key=r[P3@P4]"),
23671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 112 */ "IdxLT" OpHelp("key=r[P3@P4]"),
23672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 113 */ "IdxGE" OpHelp("key=r[P3@P4]"),
23673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 114 */ "Destroy" OpHelp(""),
23674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 115 */ "Clear" OpHelp(""),
23675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 116 */ "ResetSorter" OpHelp(""),
23676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 117 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"),
23677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 118 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"),
23678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 119 */ "ParseSchema" OpHelp(""),
23679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 120 */ "LoadAnalysis" OpHelp(""),
23680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 121 */ "DropTable" OpHelp(""),
23681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 122 */ "DropIndex" OpHelp(""),
23682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 123 */ "DropTrigger" OpHelp(""),
23683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 124 */ "IntegrityCk" OpHelp(""),
23684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 125 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
23685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 126 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
23686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 127 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
23687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 128 */ "Program" OpHelp(""),
23688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 129 */ "Param" OpHelp(""),
23689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 130 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
23690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 131 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
23691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 132 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
23997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 98 */ "SorterData" OpHelp("r[P2]=data"),
23998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 99 */ "RowKey" OpHelp("r[P2]=key"),
23999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 100 */ "RowData" OpHelp("r[P2]=data"),
24000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 101 */ "Rowid" OpHelp("r[P2]=rowid"),
24001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 102 */ "NullRow" OpHelp(""),
24002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 103 */ "Last" OpHelp(""),
24003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 104 */ "SorterSort" OpHelp(""),
24004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 105 */ "Sort" OpHelp(""),
24005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 106 */ "Rewind" OpHelp(""),
24006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 107 */ "SorterInsert" OpHelp(""),
24007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 108 */ "IdxInsert" OpHelp("key=r[P2]"),
24008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 109 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
24009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 110 */ "IdxRowid" OpHelp("r[P2]=rowid"),
24010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 111 */ "IdxLE" OpHelp("key=r[P3@P4]"),
24011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 112 */ "IdxGT" OpHelp("key=r[P3@P4]"),
24012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 113 */ "IdxLT" OpHelp("key=r[P3@P4]"),
24013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 114 */ "IdxGE" OpHelp("key=r[P3@P4]"),
24014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 115 */ "Destroy" OpHelp(""),
24015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 116 */ "Clear" OpHelp(""),
24016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 117 */ "ResetSorter" OpHelp(""),
24017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 118 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"),
24018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 119 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"),
24019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 120 */ "ParseSchema" OpHelp(""),
24020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 121 */ "LoadAnalysis" OpHelp(""),
24021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 122 */ "DropTable" OpHelp(""),
24022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 123 */ "DropIndex" OpHelp(""),
24023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 124 */ "DropTrigger" OpHelp(""),
24024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 125 */ "IntegrityCk" OpHelp(""),
24025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 126 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
24026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 127 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
24027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 128 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
24028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 129 */ "Program" OpHelp(""),
24029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 130 */ "Param" OpHelp(""),
24030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 131 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
24031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 132 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
23692 24032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 133 */ "Real" OpHelp("r[P2]=P4"),
23693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 134 */ "IfPos" OpHelp("if r[P1]>0 goto P2"),
23694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 135 */ "IfNeg" OpHelp("if r[P1]<0 goto P2"),
23695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"),
23696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 137 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
23697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 138 */ "IncrVacuum" OpHelp(""),
23698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 139 */ "Expire" OpHelp(""),
23699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 140 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
23700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 141 */ "VBegin" OpHelp(""),
23701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 142 */ "VCreate" OpHelp(""),
24033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 134 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
24034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 135 */ "IfPos" OpHelp("if r[P1]>0 goto P2"),
24035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ "IfNeg" OpHelp("r[P1]+=P3, if r[P1]<0 goto P2"),
24036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 137 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"),
24037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 138 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
24038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 139 */ "IncrVacuum" OpHelp(""),
24039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 140 */ "Expire" OpHelp(""),
24040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 141 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
24041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 142 */ "VBegin" OpHelp(""),
23702 24042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 143 */ "ToText" OpHelp(""),
23703 24043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 144 */ "ToBlob" OpHelp(""),
23704 24044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 145 */ "ToNumeric" OpHelp(""),
23705 24045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 146 */ "ToInt" OpHelp(""),
23706 24046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 147 */ "ToReal" OpHelp(""),
23707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 148 */ "VDestroy" OpHelp(""),
23708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 149 */ "VOpen" OpHelp(""),
23709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 150 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
23710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 151 */ "VNext" OpHelp(""),
23711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 152 */ "VRename" OpHelp(""),
23712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 153 */ "Pagecount" OpHelp(""),
23713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 154 */ "MaxPgcnt" OpHelp(""),
23714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 155 */ "Init" OpHelp("Start at P2"),
23715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 156 */ "Noop" OpHelp(""),
23716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 157 */ "Explain" OpHelp(""),
24047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 148 */ "VCreate" OpHelp(""),
24048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 149 */ "VDestroy" OpHelp(""),
24049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 150 */ "VOpen" OpHelp(""),
24050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 151 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
24051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 152 */ "VNext" OpHelp(""),
24052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 153 */ "VRename" OpHelp(""),
24053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 154 */ "Pagecount" OpHelp(""),
24054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 155 */ "MaxPgcnt" OpHelp(""),
24055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 156 */ "Init" OpHelp("Start at P2"),
24056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 157 */ "Noop" OpHelp(""),
24057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 158 */ "Explain" OpHelp(""),
23717 24058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
23718 24059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return azName[i];
23719 24060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
23720 24061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
23721 24062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -23814,15 +24155,14 @@
23814 24155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <unistd.h>
23815 24156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include <time.h> */
23816 24157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <sys/time.h>
23817 24158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#include <errno.h>
23818 24159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_WAL) || SQLITE_MAX_MMAP_SIZE>0
23819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #include <sys/mman.h>
24160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # include <sys/mman.h>
23820 24161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
23821 24162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
23822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
23823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_ENABLE_LOCKING_STYLE
24163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_ENABLE_LOCKING_STYLE || OS_VXWORKS
23824 24164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <sys/ioctl.h>
23825 24165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# if OS_VXWORKS
23826 24166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <semaphore.h>
23827 24167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# include <limits.h>
23828 24168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# else
@@ -24246,11 +24586,15 @@
24246 24586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** On some systems, calls to fchown() will trigger a message in a security
24247 24587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** log if they come from non-root processes. So avoid calling fchown() if
24248 24588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we are not running as root.
24249 24589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
24250 24590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int posixFchown(int fd, uid_t uid, gid_t gid){
24591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if OS_VXWORKS
24592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
24593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
24251 24594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return geteuid() ? 0 : fchown(fd,uid,gid);
24595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
24252 24596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
24253 24597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24254 24598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Forward reference */
24255 24599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int openDirectory(const char*, int*);
24256 24600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int unixGetpagesize(void);
@@ -24302,11 +24646,11 @@
24302 24646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osFcntl ((int(*)(int,int,...))aSyscall[7].pCurrent)
24303 24647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24304 24648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "read", (sqlite3_syscall_ptr)read, 0 },
24305 24649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osRead ((ssize_t(*)(int,void*,size_t))aSyscall[8].pCurrent)
24306 24650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
24651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(USE_PREAD) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
24308 24652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pread", (sqlite3_syscall_ptr)pread, 0 },
24309 24653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
24310 24654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pread", (sqlite3_syscall_ptr)0, 0 },
24311 24655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24312 24656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osPread ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[9].pCurrent)
@@ -24319,11 +24663,11 @@
24319 24663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osPread64 ((ssize_t(*)(int,void*,size_t,off_t))aSyscall[10].pCurrent)
24320 24664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24321 24665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "write", (sqlite3_syscall_ptr)write, 0 },
24322 24666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osWrite ((ssize_t(*)(int,const void*,size_t))aSyscall[11].pCurrent)
24323 24667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(USE_PREAD) || SQLITE_ENABLE_LOCKING_STYLE
24668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(USE_PREAD) || (SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS)
24325 24669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pwrite", (sqlite3_syscall_ptr)pwrite, 0 },
24326 24670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
24327 24671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ "pwrite", (sqlite3_syscall_ptr)0, 0 },
24328 24672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
24329 24673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osPwrite ((ssize_t(*)(int,const void*,size_t,off_t))\
@@ -24689,20 +25033,10 @@
24689 25033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
24690 25034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* else fall through */
24691 25035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case EPERM:
24692 25036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_PERM;
24693 25037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
24694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* EDEADLK is only possible if a call to fcntl(F_SETLKW) is made. And
24695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this module never makes such a call. And the code in SQLite itself
24696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** asserts that SQLITE_IOERR_BLOCKED is never returned. For these reasons
24697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this case is also commented out. If the system does set errno to EDEADLK,
24698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the default SQLITE_IOERR_XXX code will be returned. */
24699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if 0
24700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case EDEADLK:
24701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_IOERR_BLOCKED;
24702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
24703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
24704 25038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if EOPNOTSUPP!=ENOTSUP
24705 25039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case EOPNOTSUPP:
24706 25040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* something went terribly awry, unless during file system support
24707 25041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
* introspection, in which it actually means what it says */
24708 25042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -25231,13 +25565,17 @@
25231 25565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25232 25566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25233 25567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return TRUE if pFile has been renamed or unlinked since it was first opened.
25234 25568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
25235 25569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int fileHasMoved(unixFile *pFile){
25570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if OS_VXWORKS
25571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pFile->pInode!=0 && pFile->pId!=pFile->pInode->fileId.pId;
25572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
25236 25573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct stat buf;
25237 25574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pFile->pInode!=0 &&
25238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (osStat(pFile->zPath, &buf)!=0 || buf.st_ino!=pFile->pInode->fileId.ino);
25575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (osStat(pFile->zPath, &buf)!=0 || buf.st_ino!=pFile->pInode->fileId.ino);
25576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
25239 25577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
25240 25578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25241 25579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
25242 25580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
25243 25581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Check a unixFile that is a database. Verify the following:
@@ -26376,11 +26714,10 @@
26376 26714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
26377 26715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26378 26716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Otherwise see if some other process holds it. */
26379 26717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !reserved ){
26380 26718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sem_t *pSem = pFile->pInode->pSem;
26381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct stat statBuf;
26382 26719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26383 26720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sem_trywait(pSem)==-1 ){
26384 26721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int tErrno = errno;
26385 26722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( EAGAIN != tErrno ){
26386 26723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqliteErrorFromPosixError(tErrno, SQLITE_IOERR_CHECKRESERVEDLOCK);
@@ -26429,11 +26766,10 @@
26429 26766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine will only increase a lock. Use the sqlite3OsUnlock()
26430 26767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routine to lower a locking level.
26431 26768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
26432 26769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int semLock(sqlite3_file *id, int eFileLock) {
26433 26770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unixFile *pFile = (unixFile*)id;
26434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int fd;
26435 26771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sem_t *pSem = pFile->pInode->pSem;
26436 26772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
26437 26773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
26438 26774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* if we already have a lock, it is exclusive.
26439 26775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Just adjust level and punt on outta here. */
@@ -31713,22 +32049,18 @@
31713 32049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NTDDI_WINBLUE
31714 32050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define NTDDI_WINBLUE 0x06030000
31715 32051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31716 32052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31717 32053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check if the GetVersionEx[AW] functions should be considered deprecated
31719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and avoid using them in that case. It should be noted here that if the
31720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value of the SQLITE_WIN32_GETVERSIONEX pre-processor macro is zero
31721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (whether via this block or via being manually specified), that implies
31722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the underlying operating system will always be based on the Windows NT
31723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Kernel.
32054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check to see if the GetVersionEx[AW] functions are deprecated on the
32055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** target system. GetVersionEx was first deprecated in Win8.1.
31724 32056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31725 32057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_WIN32_GETVERSIONEX
31726 32058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# if defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WINBLUE
31727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SQLITE_WIN32_GETVERSIONEX 0
32059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_WIN32_GETVERSIONEX 0 /* GetVersionEx() is deprecated */
31728 32060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# else
31729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SQLITE_WIN32_GETVERSIONEX 1
32061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define SQLITE_WIN32_GETVERSIONEX 1 /* GetVersionEx() is current */
31730 32062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# endif
31731 32063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31732 32064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31733 32065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31734 32066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This constant should already be defined (in the "WinDef.h" SDK file).
@@ -31796,11 +32128,11 @@
31796 32128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31797 32129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This macro is used when a local variable is set to a value that is
31798 32130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sometimes] not used by the code (e.g. via conditional compilation).
31799 32131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31800 32132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef UNUSED_VARIABLE_VALUE
31801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define UNUSED_VARIABLE_VALUE(x) (void)(x)
32133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define UNUSED_VARIABLE_VALUE(x) (void)(x)
31802 32134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31803 32135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31804 32136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31805 32137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Returns the character that should be used as the directory separator.
31806 32138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -31845,11 +32177,11 @@
31845 32177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31846 32178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
31847 32179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Some Microsoft compilers lack this definition.
31848 32180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
31849 32181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef INVALID_FILE_ATTRIBUTES
31850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
32182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define INVALID_FILE_ATTRIBUTES ((DWORD)-1)
31851 32183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31852 32184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
31853 32185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef FILE_FLAG_MASK
31854 32186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define FILE_FLAG_MASK (0xFF3C0000)
31855 32187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -31895,11 +32227,11 @@
31895 32227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31896 32228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zPath; /* Full pathname of this file */
31897 32229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szChunk; /* Chunk size configured by FCNTL_CHUNK_SIZE */
31898 32230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
31899 32231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LPWSTR zDeleteOnClose; /* Name of file to delete when closing */
31900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- HANDLE hMutex; /* Mutex used to control access to shared lock */
32232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ HANDLE hMutex; /* Mutex used to control access to shared lock */
31901 32233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
HANDLE hShared; /* Shared memory segment used for locking */
31902 32234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winceLock local; /* Locks obtained by this instance of winFile */
31903 32235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winceLock *shared; /* Global shared lock memory for the file */
31904 32236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
31905 32237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_MMAP_SIZE>0
@@ -32055,14 +32387,13 @@
32055 32387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
32056 32388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In order to facilitate testing on a WinNT system, the test fixture
32057 32389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can manually set this value to 1 to emulate Win98 behavior.
32058 32390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
32059 32391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
32060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API int sqlite3_os_type = 0;
32061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #elif !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && \
32062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- defined(SQLITE_WIN32_HAS_ANSI) && defined(SQLITE_WIN32_HAS_WIDE)
32063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int sqlite3_os_type = 0;
32392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API LONG volatile sqlite3_os_type = 0;
32393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
32394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static LONG volatile sqlite3_os_type = 0;
32064 32395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
32065 32396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32066 32397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SYSCALL
32067 32398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SYSCALL sqlite3_syscall_ptr
32068 32399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -32689,10 +33020,26 @@
32689 33020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
32690 33021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32691 33022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define osCreateFileMappingFromApp ((HANDLE(WINAPI*)(HANDLE, \
32692 33023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LPSECURITY_ATTRIBUTES,ULONG,ULONG64,LPCWSTR))aSyscall[75].pCurrent)
32693 33024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
33026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NOTE: On some sub-platforms, the InterlockedCompareExchange "function"
33027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is really just a macro that uses a compiler intrinsic (e.g. x64).
33028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** So do not try to make this is into a redefinable interface.
33029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
33030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(InterlockedCompareExchange)
33031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "InterlockedCompareExchange", (SYSCALL)0, 0 },
33032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define osInterlockedCompareExchange InterlockedCompareExchange
33034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
33035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { "InterlockedCompareExchange", (SYSCALL)InterlockedCompareExchange, 0 },
33036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define osInterlockedCompareExchange ((LONG(WINAPI*)(LONG volatile*, \
33038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LONG,LONG))aSyscall[76].pCurrent)
33039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* defined(InterlockedCompareExchange) */
33040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
32694 33041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}; /* End of the overrideable system calls */
32695 33042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32696 33043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
32697 33044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the xSetSystemCall() method of sqlite3_vfs for all of the
32698 33045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "win32" VFSes. Return SQLITE_OK opon successfully updating the
@@ -32939,26 +33286,42 @@
32939 33286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif SQLITE_OS_WINCE || SQLITE_OS_WINRT || !defined(SQLITE_WIN32_HAS_ANSI)
32940 33287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define osIsNT() (1)
32941 33288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif !defined(SQLITE_WIN32_HAS_WIDE)
32942 33289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define osIsNT() (0)
32943 33290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
32944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int osIsNT(void){
32945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3_os_type==0 ){
32946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WIN8
32947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSVERSIONINFOW sInfo;
32948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sInfo.dwOSVersionInfoSize = sizeof(sInfo);
32949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- osGetVersionExW(&sInfo);
33291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define osIsNT() ((sqlite3_os_type==2) || sqlite3_win32_is_nt())
33292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
33293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
33295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function determines if the machine is running a version of Windows
33296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** based on the NT kernel.
33297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
33298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_win32_is_nt(void){
33299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_WIN32_GETVERSIONEX) && SQLITE_WIN32_GETVERSIONEX
33300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( osInterlockedCompareExchange(&sqlite3_os_type, 0, 0)==0 ){
33301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \
33302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WIN8
33303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSVERSIONINFOW sInfo;
33304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sInfo.dwOSVersionInfoSize = sizeof(sInfo);
33305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osGetVersionExW(&sInfo);
33306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osInterlockedCompareExchange(&sqlite3_os_type,
33307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (sInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 2 : 1, 0);
33308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(SQLITE_WIN32_HAS_ANSI)
33309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ OSVERSIONINFOA sInfo;
33310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sInfo.dwOSVersionInfoSize = sizeof(sInfo);
33311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osGetVersionExA(&sInfo);
33312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ osInterlockedCompareExchange(&sqlite3_os_type,
33313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (sInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 2 : 1, 0);
33314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
33315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
33316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return osInterlockedCompareExchange(&sqlite3_os_type, 2, 2)==2;
33317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif SQLITE_TEST
33318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return osInterlockedCompareExchange(&sqlite3_os_type, 2, 2)==2;
32950 33319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
32951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- OSVERSIONINFOA sInfo;
32952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sInfo.dwOSVersionInfoSize = sizeof(sInfo);
32953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- osGetVersionExA(&sInfo);
32954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
32955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_os_type = sInfo.dwPlatformId==VER_PLATFORM_WIN32_NT ? 2 : 1;
32956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
32957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3_os_type==2;
32958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
32959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
33320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
33321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
33322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
32960 33323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
32961 33324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_WIN32_MALLOC
32962 33325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
32963 33326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocate nBytes of memory.
32964 33327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -33162,11 +33525,11 @@
33162 33525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_config(SQLITE_CONFIG_MALLOC, sqlite3MemGetWin32());
33163 33526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33164 33527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_WIN32_MALLOC */
33165 33528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33166 33529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert a UTF-8 string to Microsoft Unicode (UTF-16?).
33530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert a UTF-8 string to Microsoft Unicode (UTF-16?).
33168 33531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33169 33532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Space to hold the returned string is obtained from malloc.
33170 33533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33171 33534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static LPWSTR winUtf8ToUnicode(const char *zFilename){
33172 33535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nChar;
@@ -33215,11 +33578,11 @@
33215 33578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33216 33579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33217 33580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33218 33581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Convert an ANSI string to Microsoft Unicode, based on the
33219 33582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** current codepage settings for file apis.
33220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
33583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
33221 33584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Space to hold the returned string is obtained
33222 33585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from sqlite3_malloc.
33223 33586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33224 33587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static LPWSTR winMbcsToUnicode(const char *zFilename){
33225 33588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nByte;
@@ -33289,11 +33652,11 @@
33289 33652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zTmpWide);
33290 33653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return zFilenameUtf8;
33291 33654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33292 33655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33293 33656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert UTF-8 to multibyte character string. Space to hold the
33657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert UTF-8 to multibyte character string. Space to hold the
33295 33658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** returned string is obtained from sqlite3_malloc().
33296 33659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33297 33660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API char *sqlite3_win32_utf8_to_mbcs(const char *zFilename){
33298 33661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFilenameMbcs;
33299 33662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LPWSTR zTmpWide;
@@ -33429,15 +33792,15 @@
33429 33792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function - winLogErrorAtLine() - is only ever called via the macro
33430 33793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** winLogError().
33431 33794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33432 33795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is invoked after an error occurs in an OS function.
33433 33796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** It logs a message using sqlite3_log() containing the current value of
33434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** error code and, if possible, the human-readable equivalent from
33797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** error code and, if possible, the human-readable equivalent from
33435 33798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** FormatMessage.
33436 33799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
33437 33800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The first argument passed to the macro should be the error code that
33438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN).
33801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be returned to SQLite (e.g. SQLITE_IOERR_DELETE, SQLITE_CANTOPEN).
33439 33802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The two subsequent arguments should be the name of the OS function that
33440 33803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** failed and the associated file-system path, if any.
33441 33804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33442 33805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define winLogError(a,b,c,d) winLogErrorAtLine(a,b,c,d,__LINE__)
33443 33806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winLogErrorAtLine(
@@ -33464,11 +33827,11 @@
33464 33827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return errcode;
33465 33828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33466 33829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33467 33830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33468 33831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The number of times that a ReadFile(), WriteFile(), and DeleteFile()
33469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** will be retried following a locking error - probably caused by
33832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be retried following a locking error - probably caused by
33470 33833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** antivirus software. Also the initial delay before the first retry.
33471 33834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The delay increases linearly with each retry.
33472 33835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33473 33836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_WIN32_IOERR_RETRY
33474 33837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define SQLITE_WIN32_IOERR_RETRY 10
@@ -33539,11 +33902,11 @@
33539 33902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33540 33903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Log a I/O error retry episode.
33541 33904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33542 33905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void winLogIoerr(int nRetry){
33543 33906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRetry ){
33544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_log(SQLITE_IOERR,
33907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_log(SQLITE_IOERR,
33545 33908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"delayed %dms for lock/sharing conflict",
33546 33909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winIoerrRetryDelay*nRetry*(nRetry+1)/2
33547 33910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
33548 33911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33549 33912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -33633,21 +33996,21 @@
33633 33996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"winceCreateLock1", zFilename);
33634 33997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33635 33998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33636 33999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Acquire the mutex before continuing */
33637 34000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winceMutexAcquire(pFile->hMutex);
33638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
33639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Since the names of named mutexes, semaphores, file mappings etc are
34001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
34002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Since the names of named mutexes, semaphores, file mappings etc are
33640 34003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** case-sensitive, take advantage of that by uppercasing the mutex name
33641 34004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and using that as the shared filemapping name.
33642 34005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33643 34006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osCharUpperW(zName);
33644 34007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->hShared = osCreateFileMappingW(INVALID_HANDLE_VALUE, NULL,
33645 34008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
PAGE_READWRITE, 0, sizeof(winceLock),
33646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zName);
34009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zName);
33647 34010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Set a flag that indicates we're the first to create the memory so it
34011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Set a flag that indicates we're the first to create the memory so it
33649 34012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** must be zero-initialized */
33650 34013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lastErrno = osGetLastError();
33651 34014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if (lastErrno == ERROR_ALREADY_EXISTS){
33652 34015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bInit = FALSE;
33653 34016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -33654,11 +34017,11 @@
33654 34017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33655 34018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zName);
33656 34019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33657 34020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If we succeeded in making the shared memory handle, map it. */
33658 34021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->hShared ){
33659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFile->shared = (winceLock*)osMapViewOfFile(pFile->hShared,
34022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->shared = (winceLock*)osMapViewOfFile(pFile->hShared,
33660 34023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FILE_MAP_READ|FILE_MAP_WRITE, 0, 0, sizeof(winceLock));
33661 34024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If mapping failed, close the shared memory handle and erase it */
33662 34025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pFile->shared ){
33663 34026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = osGetLastError();
33664 34027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winLogError(SQLITE_IOERR, pFile->lastErrno,
@@ -33680,11 +34043,11 @@
33680 34043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winceMutexRelease(pFile->hMutex);
33681 34044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osCloseHandle(pFile->hMutex);
33682 34045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->hMutex = NULL;
33683 34046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR;
33684 34047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
34048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
33686 34049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize the shared memory if we're supposed to */
33687 34050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bInit ){
33688 34051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pFile->shared, 0, sizeof(winceLock));
33689 34052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33690 34053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -33718,17 +34081,17 @@
33718 34081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* De-reference and close our copy of the shared memory handle */
33719 34082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osUnmapViewOfFile(pFile->shared);
33720 34083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osCloseHandle(pFile->hShared);
33721 34084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33722 34085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Done with the mutex */
33723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- winceMutexRelease(pFile->hMutex);
34086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ winceMutexRelease(pFile->hMutex);
33724 34087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osCloseHandle(pFile->hMutex);
33725 34088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->hMutex = NULL;
33726 34089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33727 34090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
33728 34091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
34092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
33730 34093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An implementation of the LockFile() API of Windows for CE
33731 34094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33732 34095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static BOOL winceLockFile(
33733 34096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LPHANDLE phFile,
33734 34097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD dwFileOffsetLow,
@@ -33935,12 +34298,12 @@
33935 34298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef INVALID_SET_FILE_POINTER
33936 34299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define INVALID_SET_FILE_POINTER ((DWORD)-1)
33937 34300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
33938 34301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33939 34302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
33940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Move the current position of the file handle passed as the first
33941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argument to offset iOffset within the file. If successful, return 0.
34303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Move the current position of the file handle passed as the first
34304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument to offset iOffset within the file. If successful, return 0.
33942 34305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Otherwise, set pFile->lastErrno and return non-zero.
33943 34306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33944 34307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winSeekFile(winFile *pFile, sqlite3_int64 iOffset){
33945 34308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !SQLITE_OS_WINRT
33946 34309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LONG upperBits; /* Most sig. 32 bits of new offset */
@@ -33951,15 +34314,15 @@
33951 34314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("SEEK file=%p, offset=%lld\n", pFile->h, iOffset));
33952 34315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33953 34316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
upperBits = (LONG)((iOffset>>32) & 0x7fffffff);
33954 34317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
lowerBits = (LONG)(iOffset & 0xffffffff);
33955 34318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* API oddity: If successful, SetFilePointer() returns a dword
34319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* API oddity: If successful, SetFilePointer() returns a dword
33957 34320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** containing the lower 32-bits of the new file-offset. Or, if it fails,
33958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it returns INVALID_SET_FILE_POINTER. However according to MSDN,
33959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine
33960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** whether an error has actually occurred, it is also necessary to call
34321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it returns INVALID_SET_FILE_POINTER. However according to MSDN,
34322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** INVALID_SET_FILE_POINTER may also be a valid new offset. So to determine
34323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** whether an error has actually occurred, it is also necessary to call
33961 34324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** GetLastError().
33962 34325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
33963 34326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwRet = osSetFilePointer(pFile->h, lowerBits, &upperBits, FILE_BEGIN);
33964 34327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
33965 34328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (dwRet==INVALID_SET_FILE_POINTER
@@ -34038,11 +34401,11 @@
34038 34401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winceDestroyLock(pFile);
34039 34402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFile->zDeleteOnClose ){
34040 34403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cnt = 0;
34041 34404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while(
34042 34405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osDeleteFileW(pFile->zDeleteOnClose)==0
34043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && osGetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff
34406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && osGetFileAttributesW(pFile->zDeleteOnClose)!=0xffffffff
34044 34407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& cnt++ < WINCE_DELETION_ATTEMPTS
34045 34408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
34046 34409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_win32_sleep(100); /* Wait a little before trying again */
34047 34410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
34048 34411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pFile->zDeleteOnClose);
@@ -34886,11 +35249,11 @@
34886 35249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *p = (winFile*)id;
34887 35250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOCAP_UNDELETABLE_WHEN_OPEN |
34888 35251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((p->ctrlFlags & WINFILE_PSOW)?SQLITE_IOCAP_POWERSAFE_OVERWRITE:0);
34889 35252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
34890 35253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
34891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
35254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
34892 35255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Windows will only let you create file view mappings
34893 35256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on allocation size granularity boundaries.
34894 35257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** During sqlite3_os_init() we do a GetSystemInfo()
34895 35258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to get the granularity size.
34896 35259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -34898,15 +35261,15 @@
34898 35261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
34899 35262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WAL
34900 35263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
34901 35264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
34902 35265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Helper functions to obtain and relinquish the global mutex. The
34903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** global mutex is used to protect the winLockInfo objects used by
35266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** global mutex is used to protect the winLockInfo objects used by
34904 35267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this file, all of which may be shared by multiple threads.
34905 35268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
34906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Function winShmMutexHeld() is used to assert() that the global mutex
34907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is held when required. This function is only used as part of assert()
35269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Function winShmMutexHeld() is used to assert() that the global mutex
35270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is held when required. This function is only used as part of assert()
34908 35271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** statements. e.g.
34909 35272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
34910 35273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** winShmEnterMutex()
34911 35274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** assert( winShmMutexHeld() );
34912 35275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** winShmLeaveMutex()
@@ -34932,14 +35295,14 @@
34932 35295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
34933 35296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** winShmMutexHeld() must be true when creating or destroying
34934 35297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this object or while reading or writing the following fields:
34935 35298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
34936 35299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** nRef
34937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pNext
35300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pNext
34938 35301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
34939 35302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following fields are read-only after the object is created:
34940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
35303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
34941 35304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fid
34942 35305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** zFilename
34943 35306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
34944 35307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Either winShmNode.mutex must be held or winShmNode.nRef==0 and
34945 35308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** winShmMutexHeld() is true when reading or writing any other field
@@ -35031,11 +35394,11 @@
35031 35394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Initialize the locking parameters */
35032 35395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DWORD dwFlags = LOCKFILE_FAIL_IMMEDIATELY;
35033 35396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( lockType == _SHM_WRLCK ) dwFlags |= LOCKFILE_EXCLUSIVE_LOCK;
35034 35397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = winLockFile(&pFile->hFile.h, dwFlags, ofst, 0, nByte, 0);
35035 35398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
35399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35037 35400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!= 0 ){
35038 35401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
35039 35402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
35040 35403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = osGetLastError();
35041 35404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_BUSY;
@@ -35127,11 +35490,11 @@
35127 35490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(p);
35128 35491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_IOERR_NOMEM;
35129 35492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35130 35493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->zFilename = (char*)&pNew[1];
35131 35494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_snprintf(nName+15, pNew->zFilename, "%s-shm", pDbFd->zPath);
35132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename);
35495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3FileSuffix3(pDbFd->zPath, pNew->zFilename);
35133 35496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35134 35497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Look to see if there is an existing winShmNode that can be used.
35135 35498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If no matching winShmNode currently exists, create a new one.
35136 35499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35137 35500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShmEnterMutex();
@@ -35164,11 +35527,11 @@
35164 35527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=rc ){
35165 35528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto shm_open_err;
35166 35529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35167 35530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35168 35531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check to see if another process is holding the dead-man switch.
35169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If not, truncate the file to zero length.
35532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If not, truncate the file to zero length.
35170 35533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35171 35534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( winShmSystemLock(pShmNode, _SHM_WRLCK, WIN_SHM_DMS, 1)==SQLITE_OK ){
35172 35535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = winTruncate((sqlite3_file *)&pShmNode->hFile, 0);
35173 35536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
35174 35537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = winLogError(SQLITE_IOERR_SHMOPEN, osGetLastError(),
@@ -35193,11 +35556,11 @@
35193 35556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35194 35557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The reference count on pShmNode has already been incremented under
35195 35558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the cover of the winShmEnterMutex() mutex and the pointer from the
35196 35559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** new (struct winShm) object to the pShmNode has been set. All that is
35197 35560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** left to do is to link the new object into the linked list starting
35198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex
35561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** at pShmNode->pFirst. This must be done while holding the pShmNode->mutex
35199 35562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** mutex.
35200 35563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35201 35564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(pShmNode->mutex);
35202 35565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pNext = pShmNode->pFirst;
35203 35566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->pFirst = p;
@@ -35213,11 +35576,11 @@
35213 35576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShmLeaveMutex();
35214 35577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
35215 35578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35216 35579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35217 35580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Close a connection to shared-memory. Delete the underlying
35581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Close a connection to shared-memory. Delete the underlying
35219 35582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** storage if deleteFlag is true.
35220 35583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35221 35584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winShmUnmap(
35222 35585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_file *fd, /* Database holding shared memory */
35223 35586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int deleteFlag /* Delete after closing if true */
@@ -35302,11 +35665,11 @@
35302 35665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35303 35666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Undo the local locks */
35304 35667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
35305 35668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->exclMask &= ~mask;
35306 35669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->sharedMask &= ~mask;
35307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
35670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
35308 35671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( flags & SQLITE_SHM_SHARED ){
35309 35672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u16 allShared = 0; /* Union of locks held by connections other than "p" */
35310 35673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35311 35674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Find out which shared locks are already held by sibling connections.
35312 35675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If any sibling already holds an exclusive lock, go ahead and return
@@ -35341,11 +35704,11 @@
35341 35704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pX->exclMask & mask)!=0 || (pX->sharedMask & mask)!=0 ){
35342 35705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_BUSY;
35343 35706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
35344 35707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35345 35708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
35709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35347 35710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Get the exclusive locks at the system level. Then if successful
35348 35711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** also mark the local connection as being locked.
35349 35712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35350 35713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
35351 35714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = winShmSystemLock(pShmNode, _SHM_WRLCK, ofst+WIN_SHM_BASE, n);
@@ -35361,11 +35724,11 @@
35361 35724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrName(rc)));
35362 35725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
35363 35726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35364 35727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35365 35728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Implement a memory barrier or memory fence on shared memory.
35729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Implement a memory barrier or memory fence on shared memory.
35367 35730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35368 35731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** All loads and stores begun before the barrier must complete before
35369 35732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** any load or store begun after the barrier.
35370 35733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35371 35734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void winShmBarrier(
@@ -35376,26 +35739,26 @@
35376 35739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShmEnterMutex();
35377 35740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winShmLeaveMutex();
35378 35741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35379 35742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35380 35743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This function is called to obtain a pointer to region iRegion of the
35382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** shared-memory associated with the database file fd. Shared-memory regions
35383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** are numbered starting from zero. Each shared-memory region is szRegion
35744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This function is called to obtain a pointer to region iRegion of the
35745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** shared-memory associated with the database file fd. Shared-memory regions
35746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are numbered starting from zero. Each shared-memory region is szRegion
35384 35747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bytes in size.
35385 35748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35386 35749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If an error occurs, an error code is returned and *pp is set to NULL.
35387 35750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35388 35751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Otherwise, if the isWrite parameter is 0 and the requested shared-memory
35389 35752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** region has not been allocated (by any client, including one running in a
35390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
35391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** isWrite is non-zero and the requested shared-memory region has not yet
35753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** separate process), then *pp is set to NULL and SQLITE_OK returned. If
35754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** isWrite is non-zero and the requested shared-memory region has not yet
35392 35755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** been allocated, it is allocated by this function.
35393 35756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35394 35757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the shared-memory region has already been allocated or is allocated by
35395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this call as described above, then it is mapped into this processes
35396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** address space (if it is not already), *pp is set to point to the mapped
35758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this call as described above, then it is mapped into this processes
35759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** address space (if it is not already), *pp is set to point to the mapped
35397 35760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** memory and SQLITE_OK returned.
35398 35761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35399 35762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winShmMap(
35400 35763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_file *fd, /* Handle open on database file */
35401 35764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iRegion, /* Region to retrieve */
@@ -35463,21 +35826,21 @@
35463 35826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pShmNode->aRegion = apNew;
35464 35827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35465 35828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pShmNode->nRegion<=iRegion ){
35466 35829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
HANDLE hMap = NULL; /* file-mapping handle */
35467 35830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pMap = 0; /* Mapped memory region */
35468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
35831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35469 35832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINRT
35470 35833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
hMap = osCreateFileMappingFromApp(pShmNode->hFile.h,
35471 35834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NULL, PAGE_READWRITE, nByte, NULL
35472 35835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
35473 35836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif defined(SQLITE_WIN32_HAS_WIDE)
35474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hMap = osCreateFileMappingW(pShmNode->hFile.h,
35837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hMap = osCreateFileMappingW(pShmNode->hFile.h,
35475 35838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NULL, PAGE_READWRITE, 0, nByte, NULL
35476 35839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
35477 35840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif defined(SQLITE_WIN32_HAS_ANSI)
35478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- hMap = osCreateFileMappingA(pShmNode->hFile.h,
35841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ hMap = osCreateFileMappingA(pShmNode->hFile.h,
35479 35842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NULL, PAGE_READWRITE, 0, nByte, NULL
35480 35843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
35481 35844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
35482 35845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("SHM-MAP-CREATE pid=%lu, region=%d, size=%d, rc=%s\n",
35483 35846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osGetCurrentProcessId(), pShmNode->nRegion, nByte,
@@ -35570,18 +35933,18 @@
35570 35933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
35571 35934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35572 35935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35573 35936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35574 35937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Memory map or remap the file opened by file-descriptor pFd (if the file
35575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is already mapped, the existing mapping is replaced by the new). Or, if
35576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** there already exists a mapping for this file, and there are still
35938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is already mapped, the existing mapping is replaced by the new). Or, if
35939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** there already exists a mapping for this file, and there are still
35577 35940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** outstanding xFetch() references to it, this function is a no-op.
35578 35941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If parameter nByte is non-negative, then it is the requested size of
35580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the mapping to create. Otherwise, if nByte is less than zero, then the
35942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If parameter nByte is non-negative, then it is the requested size of
35943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the mapping to create. Otherwise, if nByte is less than zero, then the
35581 35944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** requested size is the size of the file on disk. The actual size of the
35582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** created mapping is either the requested size or the value configured
35945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** created mapping is either the requested size or the value configured
35583 35946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using SQLITE_FCNTL_MMAP_SIZE, whichever is smaller.
35584 35947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35585 35948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OK is returned if no error occurs (even if the mapping is not
35586 35949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** recreated as a result of outstanding references) or an SQLite error
35587 35950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** code otherwise.
@@ -35606,11 +35969,11 @@
35606 35969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35607 35970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nMap>pFd->mmapSizeMax ){
35608 35971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nMap = pFd->mmapSizeMax;
35609 35972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35610 35973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nMap &= ~(sqlite3_int64)(winSysInfo.dwPageSize - 1);
35611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
35974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35612 35975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nMap==0 && pFd->mmapSize>0 ){
35613 35976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winUnmapfile(pFd);
35614 35977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35615 35978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nMap!=pFd->mmapSize ){
35616 35979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pNew = 0;
@@ -35678,11 +36041,11 @@
35678 36041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If such a pointer can be obtained, store it in *pp and return SQLITE_OK.
35679 36042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Or, if one cannot but no error occurs, set *pp to 0 and return SQLITE_OK.
35680 36043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Finally, if an error does occur, return an SQLite error code. The final
35681 36044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value of *pp is undefined in this case.
35682 36045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If this function does return a pointer, the caller must eventually
36046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If this function does return a pointer, the caller must eventually
35684 36047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** release the reference by calling winUnfetch().
35685 36048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35686 36049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winFetch(sqlite3_file *fd, i64 iOff, int nAmt, void **pp){
35687 36050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_MMAP_SIZE>0
35688 36051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *pFd = (winFile*)fd; /* The underlying database file */
@@ -35713,24 +36076,24 @@
35713 36076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osGetCurrentProcessId(), fd, pp, *pp));
35714 36077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
35715 36078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35716 36079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35717 36080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the third argument is non-NULL, then this function releases a
36081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the third argument is non-NULL, then this function releases a
35719 36082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reference obtained by an earlier call to winFetch(). The second
35720 36083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** argument passed to this function must be the same as the corresponding
35721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** argument that was passed to the winFetch() invocation.
36084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** argument that was passed to the winFetch() invocation.
35722 36085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
35723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Or, if the third argument is NULL, then this function is being called
35724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to inform the VFS layer that, according to POSIX, any existing mapping
36086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Or, if the third argument is NULL, then this function is being called
36087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to inform the VFS layer that, according to POSIX, any existing mapping
35725 36088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** may now be invalid and should be unmapped.
35726 36089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35727 36090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winUnfetch(sqlite3_file *fd, i64 iOff, void *p){
35728 36091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_MMAP_SIZE>0
35729 36092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winFile *pFd = (winFile*)fd; /* The underlying database file */
35730 36093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If p==0 (unmap the entire file) then there must be no outstanding
36094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If p==0 (unmap the entire file) then there must be no outstanding
35732 36095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xFetch references. Or, if p!=0 (meaning it is an xFetch reference),
35733 36096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then there must be at least one outstanding. */
35734 36097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (p==0)==(pFd->nFetchOut==0) );
35735 36098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35736 36099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If p!=0, it must match the iOff value. */
@@ -35872,11 +36235,11 @@
35872 36235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nMax, nBuf, nDir, nLen;
35873 36236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zBuf;
35874 36237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35875 36238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* It's odd to simulate an io-error here, but really this is just
35876 36239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using the io-error infrastructure to test that SQLite handles this
35877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** function failing.
36240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** function failing.
35878 36241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35879 36242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError( return SQLITE_IOERR );
35880 36243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35881 36244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Allocate a temporary buffer to store the fully qualified file
35882 36245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name for the temporary file. If this fails, we cannot continue.
@@ -36054,11 +36417,11 @@
36054 36417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("TEMP-FILENAME rc=SQLITE_ERROR\n"));
36055 36418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return winLogError(SQLITE_ERROR, 0, "winGetTempname4", 0);
36056 36419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36057 36420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36058 36421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
36059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check that the output buffer is large enough for the temporary file
36422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check that the output buffer is large enough for the temporary file
36060 36423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name in the following format:
36061 36424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36062 36425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "<temporary_directory>/etilqs_XXXXXXXXXXXXXXX\0\0"
36063 36426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36064 36427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If not, return SQLITE_ERROR. The number 17 is used here in order to
@@ -36157,42 +36520,42 @@
36157 36520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isReadonly = (flags & SQLITE_OPEN_READONLY);
36158 36521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isReadWrite = (flags & SQLITE_OPEN_READWRITE);
36159 36522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36160 36523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
36161 36524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isOpenJournal = (isCreate && (
36162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eType==SQLITE_OPEN_MASTER_JOURNAL
36163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || eType==SQLITE_OPEN_MAIN_JOURNAL
36525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType==SQLITE_OPEN_MASTER_JOURNAL
36526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_MAIN_JOURNAL
36164 36527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| eType==SQLITE_OPEN_WAL
36165 36528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
));
36166 36529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
36167 36530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36168 36531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OSTRACE(("OPEN name=%s, pFile=%p, flags=%x, pOutFlags=%p\n",
36169 36532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zUtf8Name, id, flags, pOutFlags));
36170 36533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Check the following statements are true:
36534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check the following statements are true:
36172 36535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (a) Exactly one of the READWRITE and READONLY flags must be set, and
36536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (a) Exactly one of the READWRITE and READONLY flags must be set, and
36174 36537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (b) if CREATE is set, then READWRITE must also be set, and
36175 36538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (c) if EXCLUSIVE is set, then CREATE must also be set.
36176 36539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (d) if DELETEONCLOSE is set, then CREATE must also be set.
36177 36540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36178 36541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert((isReadonly==0 || isReadWrite==0) && (isReadWrite || isReadonly));
36179 36542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(isCreate==0 || isReadWrite);
36180 36543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(isExclusive==0 || isCreate);
36181 36544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert(isDelete==0 || isCreate);
36182 36545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The main DB, main journal, WAL file and master journal are never
36546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The main DB, main journal, WAL file and master journal are never
36184 36547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** automatically deleted. Nor are they ever temporary files. */
36185 36548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_DB );
36186 36549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MAIN_JOURNAL );
36187 36550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (!isDelete && zName) || eType!=SQLITE_OPEN_MASTER_JOURNAL );
36188 36551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (!isDelete && zName) || eType!=SQLITE_OPEN_WAL );
36189 36552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36190 36553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Assert that the upper layer has set one of the "file-type" flags. */
36191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB
36192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
36193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
36554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( eType==SQLITE_OPEN_MAIN_DB || eType==SQLITE_OPEN_TEMP_DB
36555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_MAIN_JOURNAL || eType==SQLITE_OPEN_TEMP_JOURNAL
36556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || eType==SQLITE_OPEN_SUBJOURNAL || eType==SQLITE_OPEN_MASTER_JOURNAL
36194 36557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| eType==SQLITE_OPEN_TRANSIENT_DB || eType==SQLITE_OPEN_WAL
36195 36558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
36196 36559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36197 36560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile!=0 );
36198 36561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pFile, 0, sizeof(winFile));
@@ -36203,12 +36566,12 @@
36203 36566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_log(SQLITE_ERROR,
36204 36567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"sqlite3_temp_directory variable should be set for WinRT");
36205 36568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36206 36569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
36207 36570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the second argument to this function is NULL, generate a
36209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** temporary file name to use
36571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the second argument to this function is NULL, generate a
36572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** temporary file name to use
36210 36573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36211 36574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !zUtf8Name ){
36212 36575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isDelete && !isOpenJournal );
36213 36576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = winGetTempname(pVfs, &zTmpname);
36214 36577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
@@ -36244,12 +36607,12 @@
36244 36607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwDesiredAccess = GENERIC_READ | GENERIC_WRITE;
36245 36608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36246 36609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dwDesiredAccess = GENERIC_READ;
36247 36610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36248 36611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is
36250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** created. SQLite doesn't use it to indicate "exclusive access"
36612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* SQLITE_OPEN_EXCLUSIVE is used to make sure that a new file is
36613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** created. SQLite doesn't use it to indicate "exclusive access"
36251 36614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as it is usually understood.
36252 36615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36253 36616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isExclusive ){
36254 36617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Creates a new file, only if it does not already exist. */
36255 36618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the file exists, it fails. */
@@ -36334,11 +36697,11 @@
36334 36697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->lastErrno = lastErrno;
36335 36698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
winLogError(SQLITE_CANTOPEN, pFile->lastErrno, "winOpen", zUtf8Name);
36336 36699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zConverted);
36337 36700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(zTmpname);
36338 36701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isReadWrite && !isExclusive ){
36339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return winOpen(pVfs, zName, id,
36702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return winOpen(pVfs, zName, id,
36340 36703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
((flags|SQLITE_OPEN_READONLY) &
36341 36704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
~(SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE)),
36342 36705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOutFlags);
36343 36706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36344 36707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_CANTOPEN_BKPT;
@@ -36543,18 +36906,18 @@
36543 36906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( osIsNT() ){
36544 36907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cnt = 0;
36545 36908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WIN32_FILE_ATTRIBUTE_DATA sAttrData;
36546 36909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sAttrData, 0, sizeof(sAttrData));
36547 36910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( !(rc = osGetFileAttributesExW((LPCWSTR)zConverted,
36548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- GetFileExInfoStandard,
36911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ GetFileExInfoStandard,
36549 36912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&sAttrData)) && winRetryIoerr(&cnt, &lastErrno) ){}
36550 36913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
36551 36914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* For an SQLITE_ACCESS_EXISTS query, treat a zero-length file
36552 36915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as if it does not exist.
36553 36916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36554 36917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags==SQLITE_ACCESS_EXISTS
36555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && sAttrData.nFileSizeHigh==0
36918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sAttrData.nFileSizeHigh==0
36556 36919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sAttrData.nFileSizeLow==0 ){
36557 36920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
attr = INVALID_FILE_ATTRIBUTES;
36558 36921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36559 36922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
attr = sAttrData.dwFileAttributes;
36560 36923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -36649,11 +37012,11 @@
36649 37012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs *pVfs, /* Pointer to vfs object */
36650 37013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zRelative, /* Possibly relative input path */
36651 37014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFull, /* Size of output buffer in bytes */
36652 37015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zFull /* Output buffer */
36653 37016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
36654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
37017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
36655 37018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(__CYGWIN__)
36656 37019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SimulateIOError( return SQLITE_ERROR );
36657 37020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAMETER(nFull);
36658 37021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nFull>=pVfs->mxPathname );
36659 37022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if ( sqlite3_data_directory && !winIsVerbatimPathname(zRelative) ){
@@ -36962,24 +37325,24 @@
36962 37325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the current time and date as a Julian Day number times 86_400_000. In
36963 37326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** other words, write into *piNow the number of milliseconds since the Julian
36964 37327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** epoch of noon in Greenwich on November 24, 4714 B.C according to the
36965 37328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** proleptic Gregorian calendar.
36966 37329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
36967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date
37330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** On success, return SQLITE_OK. Return SQLITE_ERROR if the time and date
36968 37331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cannot be found.
36969 37332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36970 37333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int winCurrentTimeInt64(sqlite3_vfs *pVfs, sqlite3_int64 *piNow){
36971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* FILETIME structure is a 64-bit value representing the number of
36972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 100-nanosecond intervals since January 1, 1601 (= JD 2305813.5).
37334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* FILETIME structure is a 64-bit value representing the number of
37335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 100-nanosecond intervals since January 1, 1601 (= JD 2305813.5).
36973 37336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
36974 37337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FILETIME ft;
36975 37338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const sqlite3_int64 winFiletimeEpoch = 23058135*(sqlite3_int64)8640000;
36976 37339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
36977 37340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const sqlite3_int64 unixEpoch = 24405875*(sqlite3_int64)8640000;
36978 37341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
36979 37342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 2^32 - to avoid use of LL and warnings in gcc */
36980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static const sqlite3_int64 max32BitValue =
37343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const sqlite3_int64 max32BitValue =
36981 37344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(sqlite3_int64)2000000000 + (sqlite3_int64)2000000000 +
36982 37345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(sqlite3_int64)294967296;
36983 37346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36984 37347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINCE
36985 37348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SYSTEMTIME time;
@@ -36991,11 +37354,11 @@
36991 37354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
36992 37355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osGetSystemTimeAsFileTime( &ft );
36993 37356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
36994 37357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36995 37358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piNow = winFiletimeEpoch +
36996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ((((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) +
37359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ((((sqlite3_int64)ft.dwHighDateTime)*max32BitValue) +
36997 37360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(sqlite3_int64)ft.dwLowDateTime)/(sqlite3_int64)10000;
36998 37361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36999 37362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
37000 37363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_current_time ){
37001 37364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piNow = 1000*(sqlite3_int64)sqlite3_current_time + unixEpoch;
@@ -37110,11 +37473,11 @@
37110 37473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
37111 37474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
37112 37475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37113 37476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Double-check that the aSyscall[] array has been constructed
37114 37477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** correctly. See ticket [bb3a86e890c8e96ab] */
37115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ArraySize(aSyscall)==76 );
37478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ArraySize(aSyscall)==77 );
37116 37479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37117 37480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* get memory map allocation granularity */
37118 37481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&winSysInfo, 0, sizeof(SYSTEM_INFO));
37119 37482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINRT
37120 37483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osGetNativeSystemInfo(&winSysInfo);
@@ -37128,14 +37491,14 @@
37128 37491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37129 37492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_WIN32_HAS_WIDE)
37130 37493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vfs_register(&winLongPathVfs, 0);
37131 37494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
37132 37495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_OK;
37496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
37134 37497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
37135 37498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
37136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API int sqlite3_os_end(void){
37499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_os_end(void){
37137 37500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WINRT
37138 37501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sleepObj!=NULL ){
37139 37502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osCloseHandle(sleepObj);
37140 37503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sleepObj = NULL;
37141 37504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -51332,11 +51695,11 @@
51332 51695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the client is reading or writing an index and the schema is
51333 51696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not loaded, then it is too difficult to actually check to see if
51334 51697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the correct locks are held. So do not bother - just return true.
51335 51698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This case does not come up very often anyhow.
51336 51699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
51337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isIndex && (!pSchema || (pSchema->flags&DB_SchemaLoaded)==0) ){
51700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isIndex && (!pSchema || (pSchema->schemaFlags&DB_SchemaLoaded)==0) ){
51338 51701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
51339 51702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51340 51703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51341 51704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Figure out the root-page that the lock should be held on. For table
51342 51705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** b-trees, this is just the root page of the b-tree being read or
@@ -52802,11 +53165,11 @@
52802 53165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pBt->nPage;
52803 53166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
52804 53167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE u32 sqlite3BtreeLastPage(Btree *p){
52805 53168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeHoldsMutex(p) );
52806 53169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ((p->pBt->nPage)&0x8000000)==0 );
52807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (int)btreePagecount(p->pBt);
53170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return btreePagecount(p->pBt);
52808 53171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
52809 53172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
52810 53173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
52811 53174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Get a page from the pager and initialize it. This routine is just a
52812 53175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** convenience wrapper around separate calls to btreeGetPage() and
@@ -61928,22 +62291,39 @@
61928 62291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pB->zSql = zTmp;
61929 62292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pB->isPrepareV2 = pA->isPrepareV2;
61930 62293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61931 62294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61932 62295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
61933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Resize the Vdbe.aOp array so that it is at least one op larger than
61934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it was.
62296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Resize the Vdbe.aOp array so that it is at least nOp elements larger
62297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** than its current size. nOp is guaranteed to be less than or equal
62298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to 1024/sizeof(Op).
61935 62299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
61936 62300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If an out-of-memory error occurs while resizing the array, return
61937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** SQLITE_NOMEM. In this case Vdbe.aOp and Vdbe.nOpAlloc remain
62301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_NOMEM. In this case Vdbe.aOp and Parse.nOpAlloc remain
61938 62302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unchanged (this is so that any opcodes already allocated can be
61939 62303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** correctly deallocated along with the rest of the Vdbe).
61940 62304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
61941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static int growOpArray(Vdbe *v){
62305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int growOpArray(Vdbe *v, int nOp){
61942 62306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pNew;
61943 62307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *p = v->pParse;
62308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
62309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The SQLITE_TEST_REALLOC_STRESS compile-time option is designed to force
62310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** more frequent reallocs and hence provide more opportunities for
62311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** simulated OOM faults. SQLITE_TEST_REALLOC_STRESS is generally used
62312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** during testing only. With SQLITE_TEST_REALLOC_STRESS grow the op array
62313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the minimum* amount required until the size reaches 512. Normal
62314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** operation (without SQLITE_TEST_REALLOC_STRESS) is to double the current
62315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** size of the op array or add 1KB of space, whichever is smaller. */
62316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_TEST_REALLOC_STRESS
62317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nNew = (p->nOpAlloc>=512 ? p->nOpAlloc*2 : p->nOpAlloc+nOp);
62318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
61944 62319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nNew = (p->nOpAlloc ? p->nOpAlloc*2 : (int)(1024/sizeof(Op)));
62320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(nOp);
62321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
62322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
62323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nOp<=(1024/sizeof(Op)) );
62324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nNew>=(p->nOpAlloc+nOp) );
61945 62325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew = sqlite3DbRealloc(p->db, v->aOp, nNew*sizeof(Op));
61946 62326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew ){
61947 62327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nOpAlloc = sqlite3DbMallocSize(p->db, pNew)/sizeof(Op);
61948 62328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v->aOp = pNew;
61949 62329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -61983,11 +62363,11 @@
61983 62363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
61984 62364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = p->nOp;
61985 62365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->magic==VDBE_MAGIC_INIT );
61986 62366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( op>0 && op<0xff );
61987 62367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pParse->nOpAlloc<=i ){
61988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( growOpArray(p) ){
62368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( growOpArray(p, 1) ){
61989 62369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
61990 62370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61991 62371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
61992 62372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nOp++;
61993 62373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp = &p->aOp[i];
@@ -62343,11 +62723,11 @@
62343 62723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62344 62724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(p->db, pParse->aLabel);
62345 62725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->aLabel = 0;
62346 62726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nLabel = 0;
62347 62727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pMaxFuncArgs = nMaxArgs;
62348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->bIsReader!=0 || p->btreeMask==0 );
62728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->bIsReader!=0 || DbMaskAllZero(p->btreeMask) );
62349 62729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62350 62730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62351 62731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
62352 62732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the address of the next instruction to be inserted.
62353 62733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -62370,11 +62750,11 @@
62370 62750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE VdbeOp *sqlite3VdbeTakeOpArray(Vdbe *p, int *pnOp, int *pnMaxArg){
62371 62751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *aOp = p->aOp;
62372 62752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( aOp && !p->db->mallocFailed );
62373 62753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62374 62754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check that sqlite3VdbeUsesBtree() was not called on this VM */
62375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->btreeMask==0 );
62755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskAllZero(p->btreeMask) );
62376 62756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62377 62757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
resolveP2Values(p, pnMaxArg);
62378 62758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnOp = p->nOp;
62379 62759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp = 0;
62380 62760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return aOp;
@@ -62385,11 +62765,11 @@
62385 62765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** address of the first operation added.
62386 62766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62387 62767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeAddOpList(Vdbe *p, int nOp, VdbeOpList const *aOp, int iLineno){
62388 62768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addr;
62389 62769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->magic==VDBE_MAGIC_INIT );
62390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nOp + nOp > p->pParse->nOpAlloc && growOpArray(p) ){
62770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nOp + nOp > p->pParse->nOpAlloc && growOpArray(p, nOp) ){
62391 62771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
62392 62772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62393 62773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = p->nOp;
62394 62774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(nOp>0) ){
62395 62775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
@@ -62570,11 +62950,11 @@
62570 62950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62571 62951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
62572 62952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the opcode at addr into OP_Noop
62573 62953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62574 62954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){
62575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->aOp ){
62955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( addr<p->nOp ){
62576 62956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pOp = &p->aOp[addr];
62577 62957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = p->db;
62578 62958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeP4(db, pOp->p4type, pOp->p4.p);
62579 62959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pOp, 0, sizeof(pOp[0]));
62580 62960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->opcode = OP_Noop;
@@ -62955,13 +63335,13 @@
62955 63335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** p->btreeMask of databases that will require a lock.
62956 63336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62957 63337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeUsesBtree(Vdbe *p, int i){
62958 63338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( i>=0 && i<p->db->nDb && i<(int)sizeof(yDbMask)*8 );
62959 63339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( i<(int)sizeof(p->btreeMask)*8 );
62960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->btreeMask |= ((yDbMask)1)<<i;
63340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DbMaskSet(p->btreeMask, i);
62961 63341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i!=1 && sqlite3BtreeSharable(p->db->aDb[i].pBt) ){
62962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->lockMask |= ((yDbMask)1)<<i;
63342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DbMaskSet(p->lockMask, i);
62963 63343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62964 63344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62965 63345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62966 63346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
62967 63347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -62985,20 +63365,19 @@
62985 63365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this routine is N*N. But as N is rarely more than 1, this should not
62986 63366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be a problem.
62987 63367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62988 63368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeEnter(Vdbe *p){
62989 63369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
62990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- yDbMask mask;
62991 63370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db;
62992 63371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Db *aDb;
62993 63372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDb;
62994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->lockMask==0 ) return; /* The common case */
63373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( DbMaskAllZero(p->lockMask) ) return; /* The common case */
62995 63374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db = p->db;
62996 63375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aDb = db->aDb;
62997 63376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nDb = db->nDb;
62998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0, mask=1; i<nDb; i++, mask += mask){
62999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
63377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nDb; i++){
63378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){
63000 63379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeEnter(aDb[i].pBt);
63001 63380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63002 63381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63003 63382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63004 63383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -63007,20 +63386,19 @@
63007 63386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
63008 63387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Unlock all of the btrees previously locked by a call to sqlite3VdbeEnter().
63009 63388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
63010 63389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeLeave(Vdbe *p){
63011 63390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
63012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- yDbMask mask;
63013 63391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db;
63014 63392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Db *aDb;
63015 63393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nDb;
63016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->lockMask==0 ) return; /* The common case */
63394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( DbMaskAllZero(p->lockMask) ) return; /* The common case */
63017 63395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db = p->db;
63018 63396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aDb = db->aDb;
63019 63397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nDb = db->nDb;
63020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0, mask=1; i<nDb; i++, mask += mask){
63021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i!=1 && (mask & p->lockMask)!=0 && ALWAYS(aDb[i].pBt!=0) ){
63398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nDb; i++){
63399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i!=1 && DbMaskTest(p->lockMask,i) && ALWAYS(aDb[i].pBt!=0) ){
63022 63400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeLeave(aDb[i].pBt);
63023 63401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63024 63402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63025 63403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63026 63404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -63987,11 +64365,11 @@
63987 64365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cnt = 0;
63988 64366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nWrite = 0;
63989 64367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRead = 0;
63990 64368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = db->pVdbe;
63991 64369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p ){
63992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->magic==VDBE_MAGIC_RUN && p->pc>=0 ){
64370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_stmt_busy((sqlite3_stmt*)p) ){
63993 64371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cnt++;
63994 64372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->readOnly==0 ) nWrite++;
63995 64373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->bIsReader ) nRead++;
63996 64374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
63997 64375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = p->pNext;
@@ -64147,11 +64525,10 @@
64147 64525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Lock all btrees used by the statement */
64148 64526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeEnter(p);
64149 64527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64150 64528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check for one of the special errors */
64151 64529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mrc = p->rc & 0xff;
64152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( p->rc!=SQLITE_IOERR_BLOCKED ); /* This error no longer exists */
64153 64530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isSpecialError = mrc==SQLITE_NOMEM || mrc==SQLITE_IOERR
64154 64531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| mrc==SQLITE_INTERRUPT || mrc==SQLITE_FULL;
64155 64532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isSpecialError ){
64156 64533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the query was read-only and the error code is SQLITE_INTERRUPT,
64157 64534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** no rollback is necessary. Otherwise, at least a savepoint
@@ -64632,11 +65009,11 @@
64632 65009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
64633 65010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the serial-type for the value stored in pMem.
64634 65011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
64635 65012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE u32 sqlite3VdbeSerialType(Mem *pMem, int file_format){
64636 65013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags = pMem->flags;
64637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n;
65014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 n;
64638 65015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64639 65016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags&MEM_Null ){
64640 65017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
64641 65018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64642 65019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags&MEM_Int ){
@@ -64662,15 +65039,15 @@
64662 65039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64663 65040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags&MEM_Real ){
64664 65041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 7;
64665 65042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64666 65043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pMem->db->mallocFailed || flags&(MEM_Str|MEM_Blob) );
64667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = pMem->n;
65044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pMem->n>=0 );
65045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = (u32)pMem->n;
64668 65046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags & MEM_Zero ){
64669 65047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n += pMem->u.nZero;
64670 65048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( n>=0 );
64672 65049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return ((n*2) + 12 + ((flags&MEM_Str)!=0));
64673 65050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
64674 65051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
64675 65052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
64676 65053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the length of the data corresponding to the supplied serial-type.
@@ -67184,11 +67561,11 @@
67184 67561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
67185 67562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the prepared statement is in need of being reset.
67186 67563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
67187 67564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_stmt_busy(sqlite3_stmt *pStmt){
67188 67565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = (Vdbe*)pStmt;
67189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return v!=0 && v->pc>0 && v->magic==VDBE_MAGIC_RUN;
67566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return v!=0 && v->pc>=0 && v->magic==VDBE_MAGIC_RUN;
67190 67567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67191 67568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67192 67569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
67193 67570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return a pointer to the next prepared statement after pStmt associated
67194 67571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with database connection pDb. If pStmt is NULL, return the first
@@ -67634,10 +68011,16 @@
67634 68011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67635 68012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** M is an integer, 2 or 3, that indices how many different ways the
67636 68013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** branch can go. It is usually 2. "I" is the direction the branch
67637 68014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** goes. 0 means falls through. 1 means branch is taken. 2 means the
67638 68015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** second alternative branch is taken.
68016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
68017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** iSrcLine is the source code line (from the __LINE__ macro) that
68018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** generated the VDBE instruction. This instrumentation assumes that all
68019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** source code is in a single file (the amalgamation). Special values 1
68020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and 2 for the iSrcLine parameter mean that this particular branch is
68021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** always taken or never taken, respectively.
67639 68022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
67640 68023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_VDBE_COVERAGE)
67641 68024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define VdbeBranchTaken(I,M)
67642 68025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
67643 68026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define VdbeBranchTaken(I,M) vdbeTakeBranch(pOp->iSrcLine,I,M)
@@ -67742,25 +68125,25 @@
67742 68125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** do so without loss of information. In other words, if the string
67743 68126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** looks like a number, convert it into a number. If it does not
67744 68127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** look like a number, leave it alone.
67745 68128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
67746 68129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void applyNumericAffinity(Mem *pRec){
67747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pRec->flags & (MEM_Real|MEM_Int))==0 ){
67748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- double rValue;
67749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 iValue;
67750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 enc = pRec->enc;
67751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pRec->flags&MEM_Str)==0 ) return;
67752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
67753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
67754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRec->u.i = iValue;
67755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRec->flags |= MEM_Int;
67756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
67757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRec->r = rValue;
67758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pRec->flags |= MEM_Real;
67759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
67760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
67761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
68130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ double rValue;
68131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 iValue;
68132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 enc = pRec->enc;
68133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pRec->flags&MEM_Str)==0 ) return;
68134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
68135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
68136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->u.i = iValue;
68137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->flags |= MEM_Int;
68138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
68139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->r = rValue;
68140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pRec->flags |= MEM_Real;
68141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
68142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
68143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ApplyNumericAffinity(X) \
68144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if(((X)->flags&(MEM_Real|MEM_Int))==0){applyNumericAffinity(X);}
67762 68145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67763 68146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
67764 68147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Processing is determine by the affinity parameter:
67765 68148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
67766 68149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_AFF_INTEGER:
@@ -67793,11 +68176,11 @@
67793 68176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67794 68177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRec->flags &= ~(MEM_Real|MEM_Int);
67795 68178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( affinity!=SQLITE_AFF_NONE ){
67796 68179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
67797 68180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| affinity==SQLITE_AFF_NUMERIC );
67798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- applyNumericAffinity(pRec);
68181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ApplyNumericAffinity(pRec);
67799 68182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRec->flags & MEM_Real ){
67800 68183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeIntegerAffinity(pRec);
67801 68184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67802 68185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
67803 68186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -68374,16 +68757,18 @@
68374 68757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
68375 68758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68376 68759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
68377 68760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: InitCoroutine P1 P2 P3 * *
68378 68761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Set up register P1 so that it will OP_Yield to the co-routine
68762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set up register P1 so that it will Yield to the coroutine
68380 68763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** located at address P3.
68381 68764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If P2!=0 then the co-routine implementation immediately follows
68383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this opcode. So jump over the co-routine implementation to
68765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If P2!=0 then the coroutine implementation immediately follows
68766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this opcode. So jump over the coroutine implementation to
68384 68767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** address P2.
68768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
68769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: EndCoroutine
68385 68770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
68386 68771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_InitCoroutine: { /* jump */
68387 68772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>0 && pOp->p1<=(p->nMem-p->nCursor) );
68388 68773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2>=0 && pOp->p2<p->nOp );
68389 68774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>=0 && pOp->p3<p->nOp );
@@ -68395,13 +68780,15 @@
68395 68780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
68396 68781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68397 68782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
68398 68783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: EndCoroutine P1 * * * *
68399 68784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The instruction at the address in register P1 is an OP_Yield.
68401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Jump to the P2 parameter of that OP_Yield.
68785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The instruction at the address in register P1 is a Yield.
68786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Jump to the P2 parameter of that Yield.
68402 68787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** After the jump, register P1 becomes undefined.
68788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
68789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: InitCoroutine
68403 68790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
68404 68791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_EndCoroutine: { /* in1 */
68405 68792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeOp *pCaller;
68406 68793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
68407 68794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn1->flags==MEM_Int );
@@ -68414,15 +68801,20 @@
68414 68801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
68415 68802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
68416 68803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
68417 68804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Yield P1 P2 * * *
68418 68805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Swap the program counter with the value in register P1.
68806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Swap the program counter with the value in register P1. This
68807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** has the effect of yielding to a coroutine.
68420 68808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the co-routine ends with OP_Yield or OP_Return then continue
68422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to the next instruction. But if the co-routine ends with
68423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** OP_EndCoroutine, jump immediately to P2.
68809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the coroutine that is launched by this instruction ends with
68810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Yield or Return then continue to the next instruction. But if
68811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the coroutine launched by this instruction ends with
68812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** EndCoroutine, then jump to P2 rather than continuing with the
68813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** next instruction.
68814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
68815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: InitCoroutine
68424 68816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
68425 68817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Yield: { /* in1, jump */
68426 68818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int pcDest;
68427 68819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
68428 68820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( VdbeMemDynamic(pIn1)==0 );
@@ -68581,11 +68973,11 @@
68581 68973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
68582 68974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: String8 * P2 * P4 *
68583 68975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: r[P2]='P4'
68584 68976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
68585 68977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 points to a nul terminated UTF-8 string. This opcode is transformed
68586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** into an OP_String before it is executed for the first time. During
68978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** into a String before it is executed for the first time. During
68587 68979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this transformation, the length of string P4 is computed and stored
68588 68980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** as the P1 parameter.
68589 68981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
68590 68982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_String8: { /* same as TK_STRING, out2-prerelease */
68591 68983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4.z!=0 );
@@ -69803,14 +70195,18 @@
69803 70195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
69804 70196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
69805 70197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69806 70198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Once P1 P2 * * *
69807 70199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check if OP_Once flag P1 is set. If so, jump to instruction P2. Otherwise,
69809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** set the flag and fall through to the next instruction. In other words,
69810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this opcode causes all following opcodes up through P2 (but not including
69811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** P2) to run just once and to be skipped on subsequent times through the loop.
70200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check the "once" flag number P1. If it is set, jump to instruction P2.
70201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Otherwise, set the flag and fall through to the next instruction.
70202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** In other words, this opcode causes all following opcodes up through P2
70203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (but not including P2) to run just once and to be skipped on subsequent
70204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** times through the loop.
70205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
70206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** All "once" flags are initially cleared whenever a prepared statement
70207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** first begins to run.
69812 70208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69813 70209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Once: { /* jump */
69814 70210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1<p->nOnceFlag );
69815 70211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(p->aOnceFlag[pOp->p1]!=0, 2);
69816 70212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->aOnceFlag[pOp->p1] ){
@@ -69823,17 +70219,17 @@
69823 70219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69824 70220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: If P1 P2 P3 * *
69825 70221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69826 70222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Jump to P2 if the value in register P1 is true. The value
69827 70223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is considered true if it is numeric and non-zero. If the value
69828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in P1 is NULL then take the jump if P3 is non-zero.
70224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in P1 is NULL then take the jump if and only if P3 is non-zero.
69829 70225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69830 70226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: IfNot P1 P2 P3 * *
69831 70227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69832 70228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Jump to P2 if the value in register P1 is False. The value
69833 70229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is considered false if it has a numeric value of zero. If the value
69834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in P1 is NULL then take the jump if P3 is zero.
70230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in P1 is NULL then take the jump if and only if P3 is non-zero.
69835 70231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69836 70232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_If: /* jump, in1 */
69837 70233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_IfNot: { /* jump, in1 */
69838 70234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int c;
69839 70235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
@@ -70641,11 +71037,11 @@
70641 71037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iGen;
70642 71038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70643 71039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->bIsReader );
70644 71040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->readOnly==0 || pOp->p2==0 );
70645 71041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<db->nDb );
70646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
71042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, pOp->p1) );
70647 71043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p2 && (db->flags & SQLITE_QueryOnly)!=0 ){
70648 71044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_READONLY;
70649 71045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto abort_due_to_error;
70650 71046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70651 71047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt = db->aDb[pOp->p1].pBt;
@@ -70736,11 +71132,11 @@
70736 71132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = pOp->p1;
70737 71133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCookie = pOp->p3;
70738 71134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3<SQLITE_N_BTREE_META );
70739 71135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb>=0 && iDb<db->nDb );
70740 71136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->aDb[iDb].pBt!=0 );
70741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
71137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, iDb) );
70742 71138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70743 71139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeGetMeta(db->aDb[iDb].pBt, iCookie, (u32 *)&iMeta);
70744 71140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->u.i = iMeta;
70745 71141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
70746 71142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -70757,11 +71153,11 @@
70757 71153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70758 71154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_SetCookie: { /* in3 */
70759 71155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Db *pDb;
70760 71156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p2<SQLITE_N_BTREE_META );
70761 71157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<db->nDb );
70762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
71158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, pOp->p1) );
70763 71159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->readOnly==0 );
70764 71160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDb = &db->aDb[pOp->p1];
70765 71161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pDb->pBt!=0 );
70766 71162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3SchemaMutexHeld(db, pOp->p1, 0) );
70767 71163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
@@ -70812,11 +71208,25 @@
70812 71208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a KeyInfo structure (P4_KEYINFO). If it is a pointer to a KeyInfo
70813 71209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** structure, then said structure defines the content and collating
70814 71210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sequence of the index being opened. Otherwise, if P4 is an integer
70815 71211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value, it is set to the number of columns in the table.
70816 71212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
70817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** See also OpenWrite.
71213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See also: OpenWrite, ReopenIdx
71214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
71215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: ReopenIdx P1 P2 P3 P4 P5
71216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Synopsis: root=P2 iDb=P3
71217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The ReopenIdx opcode works exactly like ReadOpen except that it first
71219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** checks to see if the cursor on P1 is already open with a root page
71220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** number of P2 and if it is this opcode becomes a no-op. In other words,
71221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the cursor is already open, do not reopen it.
71222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The ReopenIdx opcode may only be used with P5==0 and with P4 being
71224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a P4_KEYINFO object. Furthermore, the P3 value must be the same as
71225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** every other ReopenIdx or OpenRead for the same cursor number.
71226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** See the OpenRead opcode documentation for additional information.
70818 71228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
70819 71229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: OpenWrite P1 P2 P3 P4 P5
70820 71230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: root=P2 iDb=P3
70821 71231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
70822 71232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Open a read/write cursor named P1 on the table or index whose root
@@ -70834,10 +71244,23 @@
70834 71244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in read/write mode. For a given table, there can be one or more read-only
70835 71245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cursors or a single read/write cursor but not both.
70836 71246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
70837 71247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also OpenRead.
70838 71248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_ReopenIdx: {
71250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCursor *pCur;
71251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
71252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p5==0 );
71253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->p4type==P4_KEYINFO );
71254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur = p->apCsr[pOp->p1];
71255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCur && pCur->pgnoRoot==(u32)pOp->p2 ){
71256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->iDb==pOp->p3 ); /* Guaranteed by the code generator */
71257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
71258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
71259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the cursor is not currently open or is open on a different
71260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index, then fall through into OP_OpenRead to force a reopen */
71261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70839 71262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_OpenRead:
70840 71263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_OpenWrite: {
70841 71264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nField;
70842 71265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo;
70843 71266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int p2;
@@ -70848,11 +71271,12 @@
70848 71271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Db *pDb;
70849 71272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70850 71273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pOp->p5&(OPFLAG_P2ISREG|OPFLAG_BULKCSR))==pOp->p5 );
70851 71274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 );
70852 71275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->bIsReader );
70853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pOp->opcode==OP_OpenRead || p->readOnly==0 );
71276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode==OP_OpenRead || pOp->opcode==OP_ReopenIdx
71277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || p->readOnly==0 );
70854 71278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70855 71279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->expired ){
70856 71280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_ABORT;
70857 71281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
70858 71282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -70860,11 +71284,11 @@
70860 71284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nField = 0;
70861 71285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pKeyInfo = 0;
70862 71286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p2 = pOp->p2;
70863 71287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = pOp->p3;
70864 71288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb>=0 && iDb<db->nDb );
70865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
71289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, iDb) );
70866 71290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDb = &db->aDb[iDb];
70867 71291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pX = pDb->pBt;
70868 71292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pX!=0 );
70869 71293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->opcode==OP_OpenWrite ){
70870 71294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wrFlag = 1;
@@ -70905,10 +71329,11 @@
70905 71329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( nField==0 ); /* Table with INTEGER PRIMARY KEY and nothing else */
70906 71330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur = allocateCursor(p, pOp->p1, nField, iDb, 1);
70907 71331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCur==0 ) goto no_mem;
70908 71332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->nullRow = 1;
70909 71333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->isOrdered = 1;
71334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->pgnoRoot = p2;
70910 71335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeCursor(pX, p2, wrFlag, pKeyInfo, pCur->pCursor);
70911 71336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->pKeyInfo = pKeyInfo;
70912 71337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OPFLAG_BULKCSR==BTREE_BULKLOAD );
70913 71338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeCursorHints(pCur->pCursor, (pOp->p5 & OPFLAG_BULKCSR));
70914 71339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -71059,11 +71484,11 @@
71059 71484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
71060 71485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->apCsr[pOp->p1] = 0;
71061 71486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
71062 71487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71063 71488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: SeekGe P1 P2 P3 P4 *
71489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: SeekGE P1 P2 P3 P4 *
71065 71490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: key=r[P3@P4]
71066 71491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71067 71492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
71068 71493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use the value in register P3 as the key. If cursor P1 refers
71069 71494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to an SQL index, then P3 is the first in an array of P4 registers
@@ -71070,14 +71495,18 @@
71070 71495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that are used as an unpacked index key.
71071 71496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71072 71497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Reposition cursor P1 so that it points to the smallest entry that
71073 71498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is greater than or equal to the key value. If there are no records
71074 71499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** greater than or equal to the key and P2 is not zero, then jump to P2.
71500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode leaves the cursor configured to move in forward order,
71502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the beginning toward the end. In other words, the cursor is
71503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configured to use Next, not Prev.
71075 71504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71076 71505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotFound, SeekLt, SeekGt, SeekLe
71077 71506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: SeekGt P1 P2 P3 P4 *
71507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: SeekGT P1 P2 P3 P4 *
71079 71508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: key=r[P3@P4]
71080 71509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71081 71510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
71082 71511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use the value in register P3 as a key. If cursor P1 refers
71083 71512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to an SQL index, then P3 is the first in an array of P4 registers
@@ -71084,14 +71513,18 @@
71084 71513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that are used as an unpacked index key.
71085 71514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71086 71515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Reposition cursor P1 so that it points to the smallest entry that
71087 71516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is greater than the key value. If there are no records greater than
71088 71517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the key and P2 is not zero, then jump to P2.
71518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode leaves the cursor configured to move in forward order,
71520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the begining toward the end. In other words, the cursor is
71521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configured to use Next, not Prev.
71089 71522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71090 71523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotFound, SeekLt, SeekGe, SeekLe
71091 71524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: SeekLt P1 P2 P3 P4 *
71525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: SeekLT P1 P2 P3 P4 *
71093 71526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: key=r[P3@P4]
71094 71527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71095 71528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
71096 71529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use the value in register P3 as a key. If cursor P1 refers
71097 71530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to an SQL index, then P3 is the first in an array of P4 registers
@@ -71098,14 +71531,18 @@
71098 71531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that are used as an unpacked index key.
71099 71532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71100 71533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Reposition cursor P1 so that it points to the largest entry that
71101 71534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is less than the key value. If there are no records less than
71102 71535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the key and P2 is not zero, then jump to P2.
71536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode leaves the cursor configured to move in reverse order,
71538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the end toward the beginning. In other words, the cursor is
71539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configured to use Prev, not Next.
71103 71540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71104 71541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotFound, SeekGt, SeekGe, SeekLe
71105 71542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: SeekLe P1 P2 P3 P4 *
71543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: SeekLE P1 P2 P3 P4 *
71107 71544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: key=r[P3@P4]
71108 71545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71109 71546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If cursor P1 refers to an SQL table (B-Tree that uses integer keys),
71110 71547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use the value in register P3 as a key. If cursor P1 refers
71111 71548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to an SQL index, then P3 is the first in an array of P4 registers
@@ -71112,10 +71549,14 @@
71112 71549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that are used as an unpacked index key.
71113 71550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71114 71551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Reposition cursor P1 so that it points to the largest entry that
71115 71552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is less than or equal to the key value. If there are no records
71116 71553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** less than or equal to the key and P2 is not zero, then jump to P2.
71554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode leaves the cursor configured to move in reverse order,
71556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the end toward the beginning. In other words, the cursor is
71557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configured to use Prev, not Next.
71117 71558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71118 71559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotFound, SeekGt, SeekGe, SeekLt
71119 71560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71120 71561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_SeekLT: /* jump, in3 */
71121 71562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_SeekLE: /* jump, in3 */
@@ -71138,16 +71579,19 @@
71138 71579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( OP_SeekGT == OP_SeekLT+3 );
71139 71580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC->isOrdered );
71140 71581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC->pCursor!=0 );
71141 71582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
oc = pOp->opcode;
71142 71583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->nullRow = 0;
71584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
71585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pC->seekOp = pOp->opcode;
71586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
71143 71587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pC->isTable ){
71144 71588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The input value in P3 might be of any type: integer, real, string,
71145 71589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** blob, or NULL. But it needs to be an integer before we can do
71146 71590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the seek, so covert it. */
71147 71591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
71148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- applyNumericAffinity(pIn3);
71592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ApplyNumericAffinity(pIn3);
71149 71593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iKey = sqlite3VdbeIntValue(pIn3);
71150 71594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->rowidIsValid = 0;
71151 71595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71152 71596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the P3 value could not be converted into an integer without
71153 71597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** loss of information, then special processing is required... */
@@ -71292,10 +71736,14 @@
71292 71736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** record.
71293 71737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71294 71738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Cursor P1 is on an index btree. If the record identified by P3 and P4
71295 71739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is a prefix of any entry in P1 then a jump is made to P2 and
71296 71740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P1 is left pointing at the matching entry.
71741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This operation leaves the cursor in a state where it can be
71743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** advanced in the forward direction. The Next instruction will work,
71744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** but not the Prev instruction.
71297 71745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71298 71746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: NotFound, NoConflict, NotExists. SeekGe
71299 71747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71300 71748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: NotFound P1 P2 P3 P4 *
71301 71749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: key=r[P3@P4]
@@ -71307,10 +71755,14 @@
71307 71755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Cursor P1 is on an index btree. If the record identified by P3 and P4
71308 71756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is not the prefix of any entry in P1 then a jump is made to P2. If P1
71309 71757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** does contain an entry whose prefix matches the P3/P4 record then control
71310 71758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** falls through to the next instruction and P1 is left pointing at the
71311 71759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** matching entry.
71760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This operation leaves the cursor in a state where it cannot be
71762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** advanced in either direction. In other words, the Next and Prev
71763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** opcodes do not work after this operation.
71312 71764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71313 71765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotExists, NoConflict
71314 71766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71315 71767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: NoConflict P1 P2 P3 P4 *
71316 71768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: key=r[P3@P4]
@@ -71326,10 +71778,14 @@
71326 71778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** immediately to P2. If there is a match, fall through and leave the P1
71327 71779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cursor pointing to the matching row.
71328 71780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71329 71781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This opcode is similar to OP_NotFound with the exceptions that the
71330 71782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** branch is always taken if any part of the search key input is NULL.
71783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This operation leaves the cursor in a state where it cannot be
71785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** advanced in either direction. In other words, the Next and Prev
71786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** opcodes do not work after this operation.
71331 71787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71332 71788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: NotFound, Found, NotExists
71333 71789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71334 71790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_NoConflict: /* jump, in3 */
71335 71791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_NotFound: /* jump, in3 */
@@ -71349,10 +71805,13 @@
71349 71805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71350 71806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
71351 71807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_INT32 );
71352 71808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
71353 71809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC!=0 );
71810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
71811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pC->seekOp = pOp->opcode;
71812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
71354 71813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
71355 71814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC->pCursor!=0 );
71356 71815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC->isTable==0 );
71357 71816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFree = 0; /* Not needed. Only used to suppress a compiler warning. */
71358 71817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p4.i>0 ){
@@ -71419,10 +71878,14 @@
71419 71878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with rowid P3 then leave the cursor pointing at that record and fall
71420 71879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** through to the next instruction.
71421 71880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71422 71881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The OP_NotFound opcode performs the same operation on index btrees
71423 71882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (with arbitrary multi-value keys).
71883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
71884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode leaves the cursor in a state where it cannot be advanced
71885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in either direction. In other words, the Next and Prev opcodes will
71886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not work following this opcode.
71424 71887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71425 71888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotFound, NoConflict
71426 71889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71427 71890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_NotExists: { /* jump, in3 */
71428 71891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
@@ -71433,10 +71896,13 @@
71433 71896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
71434 71897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn3->flags & MEM_Int );
71435 71898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
71436 71899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
71437 71900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC!=0 );
71901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
71902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pC->seekOp = 0;
71903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
71438 71904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC->isTable );
71439 71905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC->pseudoTableReg==0 );
71440 71906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCrsr = pC->pCursor;
71441 71907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCrsr!=0 );
71442 71908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
res = 0;
@@ -71735,11 +72201,11 @@
71735 72201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete the record at which the P1 cursor is currently pointing.
71736 72202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71737 72203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The cursor will be left pointing at either the next or the previous
71738 72204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** record in the table. If it is left pointing at the next record, then
71739 72205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the next Next instruction will be a no-op. Hence it is OK to delete
71740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a record from within an Next loop.
72206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a record from within a Next loop.
71741 72207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71742 72208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the OPFLAG_NCHANGE flag of P2 is set, then the row change count is
71743 72209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** incremented (otherwise not).
71744 72210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71745 72211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P1 must not be pseudo-table. It has to be a real table with
@@ -71795,16 +72261,16 @@
71795 72261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nChange = 0;
71796 72262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
71797 72263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71798 72264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71799 72265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: SorterCompare P1 P2 P3 P4
71800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Synopsis: if key(P1)!=rtrim(r[P3],P4) goto P2
72266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Synopsis: if key(P1)!=trim(r[P3],P4) goto P2
71801 72267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71802 72268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P1 is a sorter cursor. This instruction compares a prefix of the
71803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the record blob in register P3 against a prefix of the entry that
71804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the sorter cursor currently points to. The final P4 fields of both
71805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the P3 and sorter record are ignored.
72269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** record blob in register P3 against a prefix of the entry that
72270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the sorter cursor currently points to. Only the first P4 fields
72271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of r[P3] and the sorter record are compared.
71806 72272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
71807 72273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If either P3 or the sorter contains a NULL in one of their significant
71808 72274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** fields (not counting the P4 fields at the end which are ignored) then
71809 72275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the comparison is assumed to be equal.
71810 72276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -71812,18 +72278,18 @@
71812 72278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** each other. Jump to P2 if they are different.
71813 72279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
71814 72280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_SorterCompare: {
71815 72281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
71816 72282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
71817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nIgnore;
72283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nKeyCol;
71818 72284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
71819 72285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
71820 72286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isSorter(pC) );
71821 72287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_INT32 );
71822 72288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
71823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nIgnore = pOp->p4.i;
71824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = sqlite3VdbeSorterCompare(pC, pIn3, nIgnore, &res);
72289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nKeyCol = pOp->p4.i;
72290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = sqlite3VdbeSorterCompare(pC, pIn3, nKeyCol, &res);
71825 72291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(res!=0,2);
71826 72292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( res ){
71827 72293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2-1;
71828 72294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
71829 72295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -71999,15 +72465,19 @@
71999 72465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
72000 72466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72001 72467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72002 72468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Last P1 P2 * * *
72003 72469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The next use of the Rowid or Column or Next instruction for P1
72470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The next use of the Rowid or Column or Prev instruction for P1
72005 72471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will refer to the last entry in the database table or index.
72006 72472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the table or index is empty and P2>0, then jump immediately to P2.
72007 72473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If P2 is 0 or if the table or index is not empty, fall through
72008 72474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the following instruction.
72475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
72476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode leaves the cursor configured to move in reverse order,
72477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the end toward the beginning. In other words, the cursor is
72478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configured to use Prev, not Next.
72009 72479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72010 72480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Last: { /* jump */
72011 72481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
72012 72482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
72013 72483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
@@ -72021,10 +72491,13 @@
72021 72491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeLast(pCrsr, &res);
72022 72492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->nullRow = (u8)res;
72023 72493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->deferredMoveto = 0;
72024 72494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->rowidIsValid = 0;
72025 72495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->cacheStatus = CACHE_STALE;
72496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
72497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pC->seekOp = OP_Last;
72498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
72026 72499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p2>0 ){
72027 72500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(res!=0,2);
72028 72501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( res ) pc = pOp->p2 - 1;
72029 72502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72030 72503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -72057,10 +72530,14 @@
72057 72530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The next use of the Rowid or Column or Next instruction for P1
72058 72531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will refer to the first entry in the database table or index.
72059 72532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the table or index is empty and P2>0, then jump immediately to P2.
72060 72533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If P2 is 0 or if the table or index is not empty, fall through
72061 72534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the following instruction.
72535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
72536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode leaves the cursor configured to move in forward order,
72537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** from the begining toward the end. In other words, the cursor is
72538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** configured to use Next, not Prev.
72062 72539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72063 72540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Rewind: { /* jump */
72064 72541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
72065 72542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
72066 72543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
@@ -72068,10 +72545,13 @@
72068 72545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
72069 72546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
72070 72547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC!=0 );
72071 72548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isSorter(pC)==(pOp->opcode==OP_SorterSort) );
72072 72549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
res = 1;
72550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
72551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pC->seekOp = OP_Rewind;
72552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
72073 72553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isSorter(pC) ){
72074 72554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeSorterRewind(db, pC, &res);
72075 72555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
72076 72556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCrsr = pC->pCursor;
72077 72557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCrsr );
@@ -72093,10 +72573,14 @@
72093 72573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72094 72574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Advance cursor P1 so that it points to the next key/data pair in its
72095 72575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table or index. If there are no more key/value pairs then fall through
72096 72576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the following instruction. But if the cursor advance was successful,
72097 72577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jump immediately to P2.
72578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
72579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The Next opcode is only valid following an SeekGT, SeekGE, or
72580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** OP_Rewind opcode used to position the cursor. Next is not allowed
72581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to follow SeekLT, SeekLE, or OP_Last.
72098 72582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72099 72583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The P1 cursor must be for a real table, not a pseudo-table. P1 must have
72100 72584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** been opened prior to this opcode or the program will segfault.
72101 72585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72102 72586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The P3 value is a hint to the btree implementation. If P3==1, that
@@ -72112,20 +72596,25 @@
72112 72596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72113 72597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Prev, NextIfOpen
72114 72598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72115 72599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: NextIfOpen P1 P2 P3 P4 P5
72116 72600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This opcode works just like OP_Next except that if cursor P1 is not
72601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode works just like Next except that if cursor P1 is not
72118 72602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** open it behaves a no-op.
72119 72603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72120 72604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Prev P1 P2 P3 P4 P5
72121 72605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72122 72606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Back up cursor P1 so that it points to the previous key/data pair in its
72123 72607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table or index. If there is no previous key/value pairs then fall through
72124 72608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to the following instruction. But if the cursor backup was successful,
72125 72609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jump immediately to P2.
72126 72610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
72612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The Prev opcode is only valid following an SeekLT, SeekLE, or
72613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** OP_Last opcode used to position the cursor. Prev is not allowed
72614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to follow SeekGT, SeekGE, or OP_Rewind.
72615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
72127 72616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The P1 cursor must be for a real table, not a pseudo-table. If P1 is
72128 72617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not open then the behavior is undefined.
72129 72618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72130 72619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The P3 value is a hint to the btree implementation. If P3==1, that
72131 72620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** means P1 is an SQL index and that this instruction could have been
@@ -72138,11 +72627,11 @@
72138 72627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If P5 is positive and the jump is taken, then event counter
72139 72628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** number P5-1 in the prepared statement is incremented.
72140 72629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72141 72630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: PrevIfOpen P1 P2 P3 P4 P5
72142 72631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This opcode works just like OP_Prev except that if cursor P1 is not
72632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This opcode works just like Prev except that if cursor P1 is not
72144 72633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** open it behaves a no-op.
72145 72634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72146 72635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_SorterNext: { /* jump */
72147 72636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
72148 72637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
@@ -72169,10 +72658,20 @@
72169 72658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( res==1 );
72170 72659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode!=OP_Next || pOp->p4.xAdvance==sqlite3BtreeNext );
72171 72660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode!=OP_Prev || pOp->p4.xAdvance==sqlite3BtreePrevious );
72172 72661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode!=OP_NextIfOpen || pOp->p4.xAdvance==sqlite3BtreeNext );
72173 72662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode!=OP_PrevIfOpen || pOp->p4.xAdvance==sqlite3BtreePrevious);
72663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The Next opcode is only used after SeekGT, SeekGE, and Rewind.
72665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The Prev opcode is only used after SeekLT, SeekLE, and Last. */
72666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode!=OP_Next || pOp->opcode!=OP_NextIfOpen
72667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pC->seekOp==OP_SeekGT || pC->seekOp==OP_SeekGE
72668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pC->seekOp==OP_Rewind || pC->seekOp==OP_Found);
72669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pOp->opcode!=OP_Prev || pOp->opcode!=OP_PrevIfOpen
72670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pC->seekOp==OP_SeekLT || pC->seekOp==OP_SeekLE
72671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pC->seekOp==OP_Last );
72672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
72174 72673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = pOp->p4.xAdvance(pC->pCursor, &res);
72175 72674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
next_tail:
72176 72675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->cacheStatus = CACHE_STALE;
72177 72676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(res==0,2);
72178 72677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( res==0 ){
@@ -72451,11 +72950,11 @@
72451 72950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_LOCKED;
72452 72951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->errorAction = OE_Abort;
72453 72952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
72454 72953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb = pOp->p3;
72455 72954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iCnt==1 );
72456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<iDb))!=0 );
72955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, iDb) );
72457 72956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iMoved = 0; /* Not needed. Only to silence a warning. */
72458 72957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeDropTable(db->aDb[iDb].pBt, pOp->p1, &iMoved);
72459 72958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->flags = MEM_Int;
72460 72959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut->u.i = iMoved;
72461 72960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOVACUUM
@@ -72491,11 +72990,11 @@
72491 72990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Clear: {
72492 72991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nChange;
72493 72992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72494 72993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nChange = 0;
72495 72994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->readOnly==0 );
72496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<pOp->p2))!=0 );
72995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, pOp->p2) );
72497 72996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeClearTable(
72498 72997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->aDb[pOp->p2].pBt, pOp->p1, (pOp->p3 ? &nChange : 0)
72499 72998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
72500 72999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->p3 ){
72501 73000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nChange += nChange;
@@ -72561,11 +73060,11 @@
72561 73060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int flags;
72562 73061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Db *pDb;
72563 73062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72564 73063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pgno = 0;
72565 73064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<db->nDb );
72566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
73065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, pOp->p1) );
72567 73066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->readOnly==0 );
72568 73067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDb = &db->aDb[pOp->p1];
72569 73068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pDb->pBt!=0 );
72570 73069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOp->opcode==OP_CreateTable ){
72571 73070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* flags = BTREE_INTKEY; */
@@ -72649,11 +73148,12 @@
72649 73148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72650 73149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: DropTable P1 * * P4 *
72651 73150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72652 73151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Remove the internal (in-memory) data structures that describe
72653 73152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the table named P4 in database P1. This is called after a table
72654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is dropped in order to keep the internal representation of the
73153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is dropped from disk (using the Destroy opcode) in order to keep
73154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the internal representation of the
72655 73155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** schema consistent with what is on disk.
72656 73156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72657 73157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_DropTable: {
72658 73158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3UnlinkAndDeleteTable(db, pOp->p1, pOp->p4.z);
72659 73159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -72661,11 +73161,12 @@
72661 73161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72662 73162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: DropIndex P1 * * P4 *
72663 73163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72664 73164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Remove the internal (in-memory) data structures that describe
72665 73165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the index named P4 in database P1. This is called after an index
72666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is dropped in order to keep the internal representation of the
73166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is dropped from disk (using the Destroy opcode)
73167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in order to keep the internal representation of the
72667 73168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** schema consistent with what is on disk.
72668 73169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72669 73170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_DropIndex: {
72670 73171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3UnlinkAndDeleteIndex(db, pOp->p1, pOp->p4.z);
72671 73172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -72673,11 +73174,12 @@
72673 73174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
72674 73175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: DropTrigger P1 * * P4 *
72675 73176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
72676 73177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Remove the internal (in-memory) data structures that describe
72677 73178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the trigger named P4 in database P1. This is called after a trigger
72678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is dropped in order to keep the internal representation of the
73179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is dropped from disk (using the Destroy opcode) in order to keep
73180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the internal representation of the
72679 73181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** schema consistent with what is on disk.
72680 73182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
72681 73183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_DropTrigger: {
72682 73184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3UnlinkAndDeleteTrigger(db, pOp->p1, pOp->p4.z);
72683 73185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -72726,11 +73228,11 @@
72726 73228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<nRoot; j++){
72727 73229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aRoot[j] = (int)sqlite3VdbeIntValue(&pIn1[j]);
72728 73230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
72729 73231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aRoot[j] = 0;
72730 73232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p5<db->nDb );
72731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<pOp->p5))!=0 );
73233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, pOp->p5) );
72732 73234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = sqlite3BtreeIntegrityCheck(db->aDb[pOp->p5].pBt, aRoot, nRoot,
72733 73235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(int)pnErr->u.i, &nErr);
72734 73236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, aRoot);
72735 73237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pnErr->u.i -= nErr;
72736 73238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemSetNull(pIn1);
@@ -73088,21 +73590,20 @@
73088 73590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2 - 1;
73089 73591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73090 73592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
73091 73593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73092 73594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Opcode: IfNeg P1 P2 * * *
73094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Synopsis: if r[P1]<0 goto P2
73595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Opcode: IfNeg P1 P2 P3 * *
73596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Synopsis: r[P1]+=P3, if r[P1]<0 goto P2
73095 73597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
73096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the value of register P1 is less than zero, jump to P2.
73097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
73098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** It is illegal to use this instruction on a register that does
73099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** not contain an integer. An assertion fault will result if you try.
73598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Register P1 must contain an integer. Add literal P3 to the value in
73599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** register P1 then if the value of register P1 is less than zero, jump to P2.
73100 73600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73101 73601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_IfNeg: { /* jump, in1 */
73102 73602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
73103 73603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn1->flags&MEM_Int );
73604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn1->u.i += pOp->p3;
73104 73605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(pIn1->u.i<0, 2);
73105 73606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIn1->u.i<0 ){
73106 73607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pc = pOp->p2 - 1;
73107 73608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73108 73609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -73111,13 +73612,10 @@
73111 73612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: IfZero P1 P2 P3 * *
73112 73613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Synopsis: r[P1]+=P3, if r[P1]==0 goto P2
73113 73614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
73114 73615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The register P1 must contain an integer. Add literal P3 to the
73115 73616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value in register P1. If the result is exactly 0, jump to P2.
73116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
73117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** It is illegal to use this instruction on a register that does
73118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** not contain an integer. An assertion fault will result if you try.
73119 73617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73120 73618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_IfZero: { /* jump, in1 */
73121 73619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
73122 73620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIn1->flags&MEM_Int );
73123 73621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1->u.i += pOp->p3;
@@ -73386,11 +73884,11 @@
73386 73884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73387 73885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_IncrVacuum: { /* jump */
73388 73886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Btree *pBt;
73389 73887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73390 73888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<db->nDb );
73391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<pOp->p1))!=0 );
73889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, pOp->p1) );
73392 73890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->readOnly==0 );
73393 73891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt = db->aDb[pOp->p1].pBt;
73394 73892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeIncrVacuum(pBt);
73395 73893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(rc==SQLITE_DONE,2);
73396 73894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_DONE ){
@@ -73401,16 +73899,17 @@
73401 73899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73402 73900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
73403 73901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73404 73902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Expire P1 * * * *
73405 73903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
73406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Cause precompiled statements to become expired. An expired statement
73407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fails with an error code of SQLITE_SCHEMA if it is ever executed
73408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (via sqlite3_step()).
73904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Cause precompiled statements to expire. When an expired statement
73905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is executed using sqlite3_step() it will either automatically
73906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** reprepare itself (if it was originally created using sqlite3_prepare_v2())
73907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or it will fail with SQLITE_SCHEMA.
73409 73908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
73410 73909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If P1 is 0, then all SQL statements become expired. If P1 is non-zero,
73411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then only the currently executing statement is affected.
73910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then only the currently executing statement is expired.
73412 73911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73413 73912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_Expire: {
73414 73913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pOp->p1 ){
73415 73914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExpirePreparedStatements(db);
73416 73915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -73438,11 +73937,11 @@
73438 73937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_TableLock: {
73439 73938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 isWriteLock = (u8)pOp->p3;
73440 73939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isWriteLock || 0==(db->flags&SQLITE_ReadUncommitted) ){
73441 73940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int p1 = pOp->p1;
73442 73941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p1>=0 && p1<db->nDb );
73443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (p->btreeMask & (((yDbMask)1)<<p1))!=0 );
73942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( DbMaskTest(p->btreeMask, p1) );
73444 73943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isWriteLock==0 || isWriteLock==1 );
73445 73944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeLockTable(db->aDb[p1].pBt, pOp->p2, isWriteLock);
73446 73945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (rc&0xFF)==SQLITE_LOCKED ){
73447 73946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = pOp->p4.z;
73448 73947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SetString(&p->zErrMsg, db, "database table is locked: %s", z);
@@ -73888,11 +74387,11 @@
73888 74387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_USE_FCNTL_TRACE
73889 74388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zTrace = (pOp->p4.z ? pOp->p4.z : p->zSql);
73890 74389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zTrace ){
73891 74390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
73892 74391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<db->nDb; i++){
73893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (MASKBIT(i) & p->btreeMask)==0 ) continue;
74392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( DbMaskTest(p->btreeMask, i)==0 ) continue;
73894 74393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_file_control(db, db->aDb[i].zName, SQLITE_FCNTL_TRACE, zTrace);
73895 74394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73896 74395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73897 74396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_USE_FCNTL_TRACE */
73898 74397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
@@ -74878,11 +75377,11 @@
74878 75377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If pKey2 is passed a NULL pointer, then it is assumed that the pCsr->aSpace
74879 75378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** has been allocated and contains an unpacked record that is used as key2.
74880 75379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
74881 75380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void vdbeSorterCompare(
74882 75381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const VdbeCursor *pCsr, /* Cursor object (for pKeyInfo) */
74883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nIgnore, /* Ignore the last nIgnore fields */
75382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nKeyCol, /* Num of columns. 0 means "all" */
74884 75383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *pKey1, int nKey1, /* Left side of comparison */
74885 75384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *pKey2, int nKey2, /* Right side of comparison */
74886 75385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pRes /* OUT: Result of comparison */
74887 75386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
74888 75387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo = pCsr->pKeyInfo;
@@ -74892,14 +75391,13 @@
74892 75391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74893 75392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pKey2 ){
74894 75393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeRecordUnpack(pKeyInfo, nKey2, pKey2, r2);
74895 75394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74896 75395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nIgnore ){
74898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- r2->nField = pKeyInfo->nField - nIgnore;
74899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( r2->nField>0 );
74900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<r2->nField; i++){
75396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nKeyCol ){
75397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r2->nField = nKeyCol;
75398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nKeyCol; i++){
74901 75399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( r2->aMem[i].flags & MEM_Null ){
74902 75400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRes = -1;
74903 75401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
74904 75402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74905 75403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -75577,18 +76075,18 @@
75577 76075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** key.
75578 76076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75579 76077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeSorterCompare(
75580 76078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const VdbeCursor *pCsr, /* Sorter cursor */
75581 76079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pVal, /* Value to compare to current sorter key */
75582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nIgnore, /* Ignore this many fields at the end */
76080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nKeyCol, /* Only compare this many fields */
75583 76081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *pRes /* OUT: Result of comparison */
75584 76082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
75585 76083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeSorter *pSorter = pCsr->pSorter;
75586 76084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pKey; int nKey; /* Sorter key to compare pVal with */
75587 76085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75588 76086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pKey = vdbeSorterRowkey(pSorter, &nKey);
75589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- vdbeSorterCompare(pCsr, nIgnore, pVal->z, pVal->n, pKey, nKey, pRes);
76087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ vdbeSorterCompare(pCsr, nKeyCol, pVal->z, pVal->n, pKey, nKey, pRes);
75590 76088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
75591 76089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75592 76090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75593 76091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of vdbesort.c ********************************************/
75594 76092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file journal.c *****************************************/
@@ -76616,11 +77114,11 @@
76616 77114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76617 77115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
76618 77116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76619 77117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76620 77118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCol>=pTab->nCol && sqlite3IsRowid(zCol) && HasRowid(pTab) ){
76621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* IMP: R-24309-18625 */
77119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* IMP: R-51414-32910 */
76622 77120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* IMP: R-44911-55124 */
76623 77121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCol = -1;
76624 77122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76625 77123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCol<pTab->nCol ){
76626 77124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cnt++;
@@ -76972,11 +77470,15 @@
76972 77470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76973 77471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
76974 77472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* EVIDENCE-OF: R-61304-29449 The unlikely(X) function is equivalent to
76975 77473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** likelihood(X, 0.0625).
76976 77474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** EVIDENCE-OF: R-01283-11636 The unlikely(X) function is short-hand for
76977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** likelihood(X,0.0625). */
77475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** likelihood(X,0.0625).
77476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** EVIDENCE-OF: R-36850-34127 The likely(X) function is short-hand for
77477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** likelihood(X,0.9375).
77478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** EVIDENCE-OF: R-53436-40973 The likely(X) function is equivalent to
77479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** likelihood(X,0.9375). */
76978 77480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* TUNING: unlikely() probability is 0.0625. likely() is 0.9375 */
76979 77481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iTable = pDef->zName[0]=='u' ? 62 : 938;
76980 77482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76981 77483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76982 77484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -79085,10 +79587,13 @@
79085 79587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_INTEGER:
79086 79588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_STRING:
79087 79589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_FLOAT:
79088 79590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_BLOB:
79089 79591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
79592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_COLUMN:
79593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pTab!=0 );
79594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return p->iColumn>=0 && p->pTab->aCol[p->iColumn].notNull==0;
79090 79595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default:
79091 79596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
79092 79597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79093 79598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79094 79599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -79192,83 +79697,124 @@
79192 79697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3CodeOnce(Parse *pParse){
79193 79698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */
79194 79699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3VdbeAddOp1(v, OP_Once, pParse->nOnce++);
79195 79700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79196 79701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
79703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Generate code that checks the left-most column of index table iCur to see if
79704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** it contains any NULL entries. Cause the register at regHasNull to be set
79705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to a non-NULL value if iCur contains no NULLs. Cause register regHasNull
79706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to be set to NULL if iCur contains one or more NULL values.
79707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void sqlite3SetHasNullFlag(Vdbe *v, int iCur, int regHasNull){
79709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int j1;
79710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, regHasNull);
79711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j1 = sqlite3VdbeAddOp1(v, OP_Rewind, iCur); VdbeCoverage(v);
79712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, iCur, 0, regHasNull);
79713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
79714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeComment((v, "first_entry_in(%d)", iCur));
79715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, j1);
79716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_SUBQUERY
79720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
79721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The argument is an IN operator with a list (not a subquery) on the
79722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** right-hand side. Return TRUE if that list is constant.
79723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int sqlite3InRhsIsConstant(Expr *pIn){
79725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pLHS;
79726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int res;
79727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !ExprHasProperty(pIn, EP_xIsSelect) );
79728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pLHS = pIn->pLeft;
79729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn->pLeft = 0;
79730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res = sqlite3ExprIsConstant(pIn);
79731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIn->pLeft = pLHS;
79732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return res;
79733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
79735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79197 79736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
79198 79737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is used by the implementation of the IN (...) operator.
79199 79738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The pX parameter is the expression on the RHS of the IN operator, which
79200 79739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** might be either a list of expressions or a subquery.
79201 79740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79202 79741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The job of this routine is to find or create a b-tree object that can
79203 79742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be used either to test for membership in the RHS set or to iterate through
79204 79743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** all members of the RHS set, skipping duplicates.
79205 79744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** A cursor is opened on the b-tree object that the RHS of the IN operator
79745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** A cursor is opened on the b-tree object that is the RHS of the IN operator
79207 79746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and pX->iTable is set to the index of that cursor.
79208 79747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79209 79748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The returned value of this function indicates the b-tree type, as follows:
79210 79749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79211 79750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** IN_INDEX_ROWID - The cursor was opened on a database table.
79212 79751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** IN_INDEX_INDEX_ASC - The cursor was opened on an ascending index.
79213 79752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** IN_INDEX_INDEX_DESC - The cursor was opened on a descending index.
79214 79753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** IN_INDEX_EPH - The cursor was opened on a specially created and
79215 79754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** populated epheremal table.
79755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IN_INDEX_NOOP - No cursor was allocated. The IN operator must be
79756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** implemented as a sequence of comparisons.
79216 79757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79217 79758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An existing b-tree might be used if the RHS expression pX is a simple
79218 79759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** subquery such as:
79219 79760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79220 79761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT <column> FROM <table>
79221 79762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79222 79763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the RHS of the IN operator is a list or a more complex subquery, then
79223 79764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** an ephemeral table might need to be generated from the RHS and then
79224 79765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pX->iTable made to point to the ephermeral table instead of an
79225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** existing table.
79766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** existing table.
79226 79767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the prNotFound parameter is 0, then the b-tree will be used to iterate
79228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** through the set members, skipping any duplicates. In this case an
79229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** epheremal table must be used unless the selected <column> is guaranteed
79768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The inFlags parameter must contain exactly one of the bits
79769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IN_INDEX_MEMBERSHIP or IN_INDEX_LOOP. If inFlags contains
79770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IN_INDEX_MEMBERSHIP, then the generated table will be used for a
79771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** fast membership test. When the IN_INDEX_LOOP bit is set, the
79772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IN index will be used to loop over all values of the RHS of the
79773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** IN operator.
79774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
79775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When IN_INDEX_LOOP is used (and the b-tree will be used to iterate
79776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** through the set members) then the b-tree must not contain duplicates.
79777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An epheremal table must be used unless the selected <column> is guaranteed
79230 79778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to be unique - either because it is an INTEGER PRIMARY KEY or it
79231 79779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** has a UNIQUE constraint or UNIQUE index.
79232 79780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the prNotFound parameter is not 0, then the b-tree will be used
79234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for fast set membership tests. In this case an epheremal table must
79781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When IN_INDEX_MEMBERSHIP is used (and the b-tree will be used
79782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for fast set membership tests) then an epheremal table must
79235 79783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be used unless <column> is an INTEGER PRIMARY KEY or an index can
79236 79784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be found with <column> as its left-most column.
79785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
79786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the IN_INDEX_NOOP_OK and IN_INDEX_MEMBERSHIP are both set and
79787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if the RHS of the IN operator is a list (not a subquery) then this
79788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine might decide that creating an ephemeral b-tree for membership
79789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** testing is too expensive and return IN_INDEX_NOOP. In that case, the
79790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** calling routine should implement the IN operator using a sequence
79791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of Eq or Ne comparison operations.
79237 79792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79238 79793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When the b-tree is being used for membership tests, the calling function
79239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** needs to know whether or not the structure contains an SQL NULL
79240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** value in order to correctly evaluate expressions like "X IN (Y, Z)".
79241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If there is any chance that the (...) might contain a NULL value at
79794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** might need to know whether or not the RHS side of the IN operator
79795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** contains a NULL. If prRhsHasNull is not a NULL pointer and
79796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if there is any chance that the (...) might contain a NULL value at
79242 79797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** runtime, then a register is allocated and the register number written
79243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to *prNotFound. If there is no chance that the (...) contains a
79244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** NULL value, then *prNotFound is left unchanged.
79245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
79246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If a register is allocated and its location stored in *prNotFound, then
79247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** its initial value is NULL. If the (...) does not remain constant
79248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for the duration of the query (i.e. the SELECT within the (...)
79249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is a correlated subquery) then the value of the allocated register is
79250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** reset to NULL each time the subquery is rerun. This allows the
79251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** caller to use vdbe code equivalent to the following:
79252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
79253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if( register==NULL ){
79254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** has_null = <test if data structure contains null>
79255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** register = 1
79256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** }
79257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
79258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in order to avoid running the <test if data structure contains null>
79259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** test more often than is necessary.
79798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to *prRhsHasNull. If there is no chance that the (...) contains a
79799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NULL value, then *prRhsHasNull is left unchanged.
79800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
79801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If a register is allocated and its location stored in *prRhsHasNull, then
79802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the value in that register will be NULL if the b-tree contains one or more
79803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NULL values, and it will be some non-NULL value if the b-tree contains no
79804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NULL values.
79260 79805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79261 79806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_SUBQUERY
79262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, int *prNotFound){
79807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, u32 inFlags, int *prRhsHasNull){
79263 79808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *p; /* SELECT to the right of IN operator */
79264 79809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int eType = 0; /* Type of RHS table. IN_INDEX_* */
79265 79810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTab = pParse->nTab++; /* Cursor of the RHS table */
79266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int mustBeUnique = (prNotFound==0); /* True if RHS must be unique */
79811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int mustBeUnique; /* True if RHS must be unique */
79267 79812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = sqlite3GetVdbe(pParse); /* Virtual machine being coded */
79268 79813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79269 79814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pX->op==TK_IN );
79815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mustBeUnique = (inFlags & IN_INDEX_LOOP)!=0;
79270 79816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79271 79817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check to see if an existing table or index can be used to
79272 79818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** satisfy the query. This is preferable to generating a new
79273 79819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ephemeral table.
79274 79820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -79321,44 +79867,59 @@
79321 79867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int affinity_ok = sqlite3IndexAffinityOk(pX, pTab->aCol[iCol].affinity);
79322 79868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79323 79869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex; pIdx && eType==0 && affinity_ok; pIdx=pIdx->pNext){
79324 79870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pIdx->aiColumn[0]==iCol)
79325 79871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3FindCollSeq(db, ENC(db), pIdx->azColl[0], 0)==pReq
79326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (!mustBeUnique || (pIdx->nKeyCol==1 && pIdx->onError!=OE_None))
79872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (!mustBeUnique || (pIdx->nKeyCol==1 && IsUniqueIndex(pIdx)))
79327 79873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
79328 79874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iAddr = sqlite3CodeOnce(pParse); VdbeCoverage(v);
79329 79875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OpenRead, iTab, pIdx->tnum, iDb);
79330 79876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
79331 79877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s", pIdx->zName));
79332 79878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( IN_INDEX_INDEX_DESC == IN_INDEX_INDEX_ASC+1 );
79333 79879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eType = IN_INDEX_INDEX_ASC + pIdx->aSortOrder[0];
79334 79880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( prNotFound && !pTab->aCol[iCol].notNull ){
79336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *prNotFound = ++pParse->nMem;
79337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
79881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( prRhsHasNull && !pTab->aCol[iCol].notNull ){
79882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *prRhsHasNull = ++pParse->nMem;
79883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SetHasNullFlag(v, iTab, *prRhsHasNull);
79338 79884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79339 79885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, iAddr);
79340 79886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79341 79887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79342 79888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79343 79889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If no preexisting index is available for the IN clause
79892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and IN_INDEX_NOOP is an allowed reply
79893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the RHS of the IN operator is a list, not a subquery
79894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and the RHS is not contant or has two or fewer terms,
79895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then it is not worth creating an ephermeral table to evaluate
79896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the IN operator so return IN_INDEX_NOOP.
79897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType==0
79899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (inFlags & IN_INDEX_NOOP_OK)
79900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && !ExprHasProperty(pX, EP_xIsSelect)
79901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (!sqlite3InRhsIsConstant(pX) || pX->x.pList->nExpr<=2)
79902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
79903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType = IN_INDEX_NOOP;
79904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79344 79906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79345 79907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eType==0 ){
79346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Could not found an existing table or index to use as the RHS b-tree.
79908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Could not find an existing table or index to use as the RHS b-tree.
79347 79909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** We will have to generate an ephemeral table to do the job.
79348 79910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79349 79911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 savedNQueryLoop = pParse->nQueryLoop;
79350 79912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rMayHaveNull = 0;
79351 79913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eType = IN_INDEX_EPH;
79352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( prNotFound ){
79353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *prNotFound = rMayHaveNull = ++pParse->nMem;
79354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Null, 0, *prNotFound);
79355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
79914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( inFlags & IN_INDEX_LOOP ){
79356 79915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nQueryLoop = 0;
79357 79916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pX->pLeft->iColumn<0 && !ExprHasProperty(pX, EP_xIsSelect) ){
79358 79917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eType = IN_INDEX_ROWID;
79359 79918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( prRhsHasNull ){
79920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *prRhsHasNull = rMayHaveNull = ++pParse->nMem;
79360 79921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79361 79922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3CodeSubselect(pParse, pX, rMayHaveNull, eType==IN_INDEX_ROWID);
79362 79923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nQueryLoop = savedNQueryLoop;
79363 79924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
79364 79925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pX->iTable = iTab;
@@ -79385,31 +79946,25 @@
79385 79946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** intkey B-Tree to store the set of IN(...) values instead of the usual
79386 79947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (slower) variable length keys B-Tree.
79387 79948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79388 79949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If rMayHaveNull is non-zero, that means that the operation is an IN
79389 79950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (not a SELECT or EXISTS) and that the RHS might contains NULLs.
79390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Furthermore, the IN is in a WHERE clause and that we really want
79391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to iterate over the RHS of the IN operator in order to quickly locate
79392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** all corresponding LHS elements. All this routine does is initialize
79393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the register given by rMayHaveNull to NULL. Calling routines will take
79394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** care of changing this register value to non-NULL if the RHS is NULL-free.
79395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
79396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If rMayHaveNull is zero, that means that the subquery is being used
79397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for membership testing only. There is no need to initialize any
79398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** registers to indicate the presence or absence of NULLs on the RHS.
79951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** All this routine does is initialize the register given by rMayHaveNull
79952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to NULL. Calling routines will take care of changing this register
79953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** value to non-NULL if the RHS is NULL-free.
79399 79954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79400 79955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For a SELECT or EXISTS operator, return the register that holds the
79401 79956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** result. For IN operators or if an error occurs, the return value is 0.
79402 79957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79403 79958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_SUBQUERY
79404 79959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3CodeSubselect(
79405 79960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse, /* Parsing context */
79406 79961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr, /* The IN, SELECT, or EXISTS operator */
79407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rMayHaveNull, /* Register that records whether NULLs exist in RHS */
79962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rHasNullFlag, /* Register that records whether NULLs exist in RHS */
79408 79963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isRowid /* If true, LHS of IN operator is a rowid */
79409 79964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
79410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int testAddr = -1; /* One-time test address */
79965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int jmpIfDynamic = -1; /* One-time test address */
79411 79966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rReg = 0; /* Register storing resulting */
79412 79967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = sqlite3GetVdbe(pParse);
79413 79968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( NEVER(v==0) ) return 0;
79414 79969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCachePush(pParse);
79415 79970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -79422,17 +79977,17 @@
79422 79977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79423 79978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If all of the above are false, then we can run this code just once
79424 79979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** save the results, and reuse the same result on subsequent invocations.
79425 79980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79426 79981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !ExprHasProperty(pExpr, EP_VarSelect) ){
79427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testAddr = sqlite3CodeOnce(pParse); VdbeCoverage(v);
79982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jmpIfDynamic = sqlite3CodeOnce(pParse); VdbeCoverage(v);
79428 79983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79429 79984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79430 79985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_EXPLAIN
79431 79986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->explain==2 ){
79432 79987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zMsg = sqlite3MPrintf(
79433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->db, "EXECUTE %s%s SUBQUERY %d", testAddr>=0?"":"CORRELATED ",
79988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->db, "EXECUTE %s%s SUBQUERY %d", jmpIfDynamic>=0?"":"CORRELATED ",
79434 79989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->op==TK_IN?"LIST":"SCALAR", pParse->iNextSelectId
79435 79990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
79436 79991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_Explain, pParse->iSelectId, 0, 0, zMsg, P4_DYNAMIC);
79437 79992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79438 79993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -79442,14 +79997,10 @@
79442 79997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char affinity; /* Affinity of the LHS of the IN */
79443 79998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addr; /* Address of OP_OpenEphemeral instruction */
79444 79999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pLeft = pExpr->pLeft; /* the LHS of the IN operator */
79445 80000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo = 0; /* Key information */
79446 80001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rMayHaveNull ){
79448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Null, 0, rMayHaveNull);
79449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79451 80002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
affinity = sqlite3ExprAffinity(pLeft);
79452 80003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79453 80004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Whether this is an 'x IN(SELECT...)' or an 'x IN(<exprlist>)'
79454 80005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expression it is handled the same way. An ephemeral table is
79455 80006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** filled with single-field index keys representing the results
@@ -79471,24 +80022,27 @@
79471 80022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Case 1: expr IN (SELECT ...)
79472 80023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79473 80024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code to write the results of the select into the temporary
79474 80025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table allocated and opened above.
79475 80026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
80027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSelect = pExpr->x.pSelect;
79476 80028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest dest;
79477 80029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pEList;
79478 80030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79479 80031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !isRowid );
79480 80032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&dest, SRT_Set, pExpr->iTable);
79481 80033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dest.affSdst = (u8)affinity;
79482 80034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
79483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->x.pSelect->iLimit = 0;
80035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSelect->iLimit = 0;
80036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( pSelect->selFlags & SF_Distinct );
80037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSelect->selFlags &= ~SF_Distinct;
79484 80038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pKeyInfo==0 ); /* Caused by OOM in sqlite3KeyInfoAlloc() */
79485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3Select(pParse, pExpr->x.pSelect, &dest) ){
80039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3Select(pParse, pSelect, &dest) ){
79486 80040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3KeyInfoUnref(pKeyInfo);
79487 80041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
79488 80042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pEList = pExpr->x.pSelect->pEList;
80043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pEList = pSelect->pEList;
79490 80044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pKeyInfo!=0 ); /* OOM will cause exit after sqlite3Select() */
79491 80045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pEList!=0 );
79492 80046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pEList->nExpr>0 );
79493 80047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3KeyInfoIsWriteable(pKeyInfo) );
79494 80048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pKeyInfo->aColl[0] = sqlite3BinaryCompareCollSeq(pParse, pExpr->pLeft,
@@ -79515,23 +80069,23 @@
79515 80069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79516 80070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79517 80071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through each expression in <exprlist>. */
79518 80072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r1 = sqlite3GetTempReg(pParse);
79519 80073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r2 = sqlite3GetTempReg(pParse);
79520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
80074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isRowid ) sqlite3VdbeAddOp2(v, OP_Null, 0, r2);
79521 80075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=pList->nExpr, pItem=pList->a; i>0; i--, pItem++){
79522 80076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pE2 = pItem->pExpr;
79523 80077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iValToIns;
79524 80078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79525 80079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the expression is not constant then we will need to
79526 80080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** disable the test that was generated above that makes sure
79527 80081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this code only executes once. Because for a non-constant
79528 80082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expression we need to rerun this code each time.
79529 80083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( testAddr>=0 && !sqlite3ExprIsConstant(pE2) ){
79531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeToNoop(v, testAddr);
79532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- testAddr = -1;
80084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( jmpIfDynamic>=0 && !sqlite3ExprIsConstant(pE2) ){
80085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeToNoop(v, jmpIfDynamic);
80086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jmpIfDynamic = -1;
79533 80087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79534 80088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79535 80089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Evaluate the expression and insert it into the temp table */
79536 80090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isRowid && sqlite3ExprIsInteger(pE2, &iValToIns) ){
79537 80091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_InsertInt, pExpr->iTable, r2, iValToIns);
@@ -79597,12 +80151,16 @@
79597 80151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprSetVVAProperty(pExpr, EP_NoReduce);
79598 80152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
79599 80153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79600 80154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79601 80155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( testAddr>=0 ){
79603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, testAddr);
80156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rHasNullFlag ){
80157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SetHasNullFlag(v, pExpr->iTable, rHasNullFlag);
80158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( jmpIfDynamic>=0 ){
80161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, jmpIfDynamic);
79604 80162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79605 80163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCachePop(pParse);
79606 80164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79607 80165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rReg;
79608 80166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -79619,11 +80177,11 @@
79619 80177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is an array of zero or more values. The expression is true if the LHS is
79620 80178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contained within the RHS. The value of the expression is unknown (NULL)
79621 80179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if the LHS is NULL or if the LHS is not contained within the RHS and the
79622 80180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** RHS contains one or more NULL values.
79623 80181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
79624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine generates code will jump to destIfFalse if the LHS is not
80182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine generates code that jumps to destIfFalse if the LHS is not
79625 80183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contained within the RHS. If due to NULLs we cannot determine if the LHS
79626 80184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is contained in the RHS then jump to destIfNull. If the LHS is contained
79627 80185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** within the RHS then fall through.
79628 80186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79629 80187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void sqlite3ExprCodeIN(
@@ -79642,11 +80200,13 @@
79642 80200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pExpr->iTable will contains the values that make up the RHS.
79643 80201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79644 80202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = pParse->pVdbe;
79645 80203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( v!=0 ); /* OOM detected prior to this routine */
79646 80204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeNoopComment((v, "begin IN expr"));
79647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eType = sqlite3FindInIndex(pParse, pExpr, &rRhsHasNull);
80205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType = sqlite3FindInIndex(pParse, pExpr,
80206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IN_INDEX_MEMBERSHIP | IN_INDEX_NOOP_OK,
80207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ destIfFalse==destIfNull ? 0 : &rRhsHasNull);
79648 80208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79649 80209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Figure out the affinity to use to create a key from the results
79650 80210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the expression. affinityStr stores a static string suitable for
79651 80211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 of OP_MakeRecord.
79652 80212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -79656,86 +80216,118 @@
79656 80216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79657 80217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCachePush(pParse);
79658 80218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r1 = sqlite3GetTempReg(pParse);
79659 80219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCode(pParse, pExpr->pLeft, r1);
79660 80220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the LHS is NULL, then the result is either false or NULL depending
79662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** on whether the RHS is empty or not, respectively.
79663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( destIfNull==destIfFalse ){
79665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Shortcut for the common case where the false and NULL outcomes are
79666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the same. */
79667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull); VdbeCoverage(v);
79668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
79669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1); VdbeCoverage(v);
79670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse);
79671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCoverage(v);
79672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
79673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr1);
79674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
79675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( eType==IN_INDEX_ROWID ){
79677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* In this case, the RHS is the ROWID of table b-tree
79678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse); VdbeCoverage(v);
79680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1);
79681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCoverage(v);
79682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
79683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* In this case, the RHS is an index b-tree.
79684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1);
79686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If the set membership test fails, then the result of the
79688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** "x IN (...)" expression must be either 0 or NULL. If the set
79689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** contains no NULL values, then the result is 0. If the set
79690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** contains one or more NULL values, then the result of the
79691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** expression is also NULL.
79692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rRhsHasNull==0 || destIfFalse==destIfNull ){
79694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* This branch runs if it is known at compile time that the RHS
79695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cannot contain NULL values. This happens as the result
79696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of a "NOT NULL" constraint in the database schema.
79697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
79698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Also run this branch if NULL is equivalent to FALSE
79699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** for this particular IN operator.
79700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1);
79702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCoverage(v);
79703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
79704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* In this branch, the RHS of the IN might contain a NULL and
79705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the presence of a NULL on the RHS makes a difference in the
79706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** outcome.
79707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int j1, j2;
79709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* First check to see if the LHS is contained in the RHS. If so,
79711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then the presence of NULLs in the RHS does not matter, so jump
79712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** over all of the code that follows.
79713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1);
79715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCoverage(v);
79716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Here we begin generating code that runs if the LHS is not
79718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** contained within the RHS. Generate additional code that
79719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** tests the RHS for NULLs. If the RHS contains a NULL then
79720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** jump to destIfNull. If there are no NULLs in the RHS then
79721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** jump to destIfFalse.
79722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
79723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_If, rRhsHasNull, destIfNull); VdbeCoverage(v);
79724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_IfNot, rRhsHasNull, destIfFalse); VdbeCoverage(v);
79725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- j2 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, rRhsHasNull, 1);
79726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCoverage(v);
79727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, 0, rRhsHasNull);
80221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If sqlite3FindInIndex() did not find or create an index that is
80222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** suitable for evaluating the IN operator, then evaluate using a
80223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sequence of comparisons.
80224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType==IN_INDEX_NOOP ){
80226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pList = pExpr->x.pList;
80227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CollSeq *pColl = sqlite3ExprCollSeq(pParse, pExpr->pLeft);
80228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int labelOk = sqlite3VdbeMakeLabel(v);
80229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int r2, regToFree;
80230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int regCkNull = 0;
80231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
80232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
80233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( destIfNull!=destIfFalse ){
80234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ regCkNull = sqlite3GetTempReg(pParse);
80235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_BitAnd, r1, r1, regCkNull);
80236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<pList->nExpr; ii++){
80238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ r2 = sqlite3ExprCodeTemp(pParse, pList->a[ii].pExpr, ®ToFree);
80239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( regCkNull && sqlite3ExprCanBeNull(pList->a[ii].pExpr) ){
80240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_BitAnd, regCkNull, r2, regCkNull);
80241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ii<pList->nExpr-1 || destIfNull!=destIfFalse ){
80243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Eq, r1, labelOk, r2,
80244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void*)pColl, P4_COLLSEQ);
80245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverageIf(v, ii<pList->nExpr-1);
80246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverageIf(v, ii==pList->nExpr-1);
80247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, affinity);
80248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
80249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( destIfNull==destIfFalse );
80250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Ne, r1, destIfFalse, r2,
80251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void*)pColl, P4_COLLSEQ); VdbeCoverage(v);
80252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, affinity | SQLITE_JUMPIFNULL);
80253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ReleaseTempReg(pParse, regToFree);
80255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( regCkNull ){
80257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IsNull, regCkNull, destIfNull); VdbeCoverage(v);
79728 80258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse);
79729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, j2);
79730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, 1, rRhsHasNull);
79731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
79732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
79733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* The OP_Found at the top of this branch jumps here when true,
79734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** causing the overall IN expression evaluation to fall through.
80259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeResolveLabel(v, labelOk);
80261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ReleaseTempReg(pParse, regCkNull);
80262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
80263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the LHS is NULL, then the result is either false or NULL depending
80265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on whether the RHS is empty or not, respectively.
80266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3ExprCanBeNull(pExpr->pLeft) ){
80268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( destIfNull==destIfFalse ){
80269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Shortcut for the common case where the false and NULL outcomes are
80270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the same. */
80271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IsNull, r1, destIfNull); VdbeCoverage(v);
80272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
80273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addr1 = sqlite3VdbeAddOp1(v, OP_NotNull, r1); VdbeCoverage(v);
80274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Rewind, pExpr->iTable, destIfFalse);
80275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
80276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfNull);
80277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, addr1);
80278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
80280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( eType==IN_INDEX_ROWID ){
80282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* In this case, the RHS is the ROWID of table b-tree
79735 80283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, j1);
80284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_MustBeInt, r1, destIfFalse); VdbeCoverage(v);
80285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_NotExists, pExpr->iTable, destIfFalse, r1);
80286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
80287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
80288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* In this case, the RHS is an index b-tree.
80289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Affinity, r1, 1, 0, &affinity, 1);
80291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the set membership test fails, then the result of the
80293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "x IN (...)" expression must be either 0 or NULL. If the set
80294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** contains no NULL values, then the result is 0. If the set
80295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** contains one or more NULL values, then the result of the
80296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expression is also NULL.
80297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( destIfFalse!=destIfNull || rRhsHasNull==0 );
80299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rRhsHasNull==0 ){
80300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This branch runs if it is known at compile time that the RHS
80301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cannot contain NULL values. This happens as the result
80302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of a "NOT NULL" constraint in the database schema.
80303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
80304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Also run this branch if NULL is equivalent to FALSE
80305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for this particular IN operator.
80306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4Int(v, OP_NotFound, pExpr->iTable, destIfFalse, r1, 1);
80308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
80309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
80310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* In this branch, the RHS of the IN might contain a NULL and
80311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the presence of a NULL on the RHS makes a difference in the
80312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** outcome.
80313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int j1;
80315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
80316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* First check to see if the LHS is contained in the RHS. If so,
80317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** then the answer is TRUE the presence of NULLs in the RHS does
80318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not matter. If the LHS is not contained in the RHS, then the
80319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** answer is NULL if the RHS contains NULLs and the answer is
80320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** FALSE if the RHS is NULL-free.
80321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
80322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ j1 = sqlite3VdbeAddOp4Int(v, OP_Found, pExpr->iTable, 0, r1, 1);
80323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
80324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IsNull, rRhsHasNull, destIfNull);
80325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
80326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, destIfFalse);
80327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, j1);
80328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79737 80329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79738 80330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79739 80331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, r1);
79740 80332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCachePop(pParse);
79741 80333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "end IN expr"));
@@ -79792,21 +80384,28 @@
79792 80384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
79793 80385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int c;
79794 80386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 value;
79795 80387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = pExpr->u.zToken;
79796 80388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( z!=0 );
79797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- c = sqlite3Atoi64(z, &value, sqlite3Strlen30(z), SQLITE_UTF8);
80389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ c = sqlite3DecOrHexToI64(z, &value);
79798 80390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c==0 || (c==2 && negFlag) ){
79799 80391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zV;
79800 80392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( negFlag ){ value = c==2 ? SMALLEST_INT64 : -value; }
79801 80393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zV = dup8bytes(v, (char*)&value);
79802 80394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_Int64, 0, iMem, 0, zV, P4_INT64);
79803 80395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
79804 80396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_FLOATING_POINT
79805 80397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "oversized integer: %s%s", negFlag ? "-" : "", z);
79806 80398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
79807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- codeReal(v, z, negFlag, iMem);
80399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_HEX_INTEGER
80400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_strnicmp(z,"0x",2)==0 ){
80401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ErrorMsg(pParse, "hex literal too big: %s", z);
80402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
80403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
80404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ {
80405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ codeReal(v, z, negFlag, iMem);
80406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79808 80407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
79809 80408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79810 80409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79811 80410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
79812 80411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -80348,11 +80947,11 @@
80348 80947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r1 = sqlite3ExprCodeTemp(pParse, pExpr->pLeft, ®Free1);
80349 80948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( regFree1==0 );
80350 80949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = sqlite3VdbeAddOp1(v, op, r1);
80351 80950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverageIf(v, op==TK_ISNULL);
80352 80951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverageIf(v, op==TK_NOTNULL);
80353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, target, -1);
80952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, 0, target);
80354 80953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addr);
80355 80954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
80356 80955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80357 80956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_AGG_FUNCTION: {
80358 80957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AggInfo *pInfo = pExpr->pAggInfo;
@@ -80384,11 +80983,11 @@
80384 80983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFarg = pFarg ? pFarg->nExpr : 0;
80385 80984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pExpr, EP_IntValue) );
80386 80985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zId = pExpr->u.zToken;
80387 80986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nId = sqlite3Strlen30(zId);
80388 80987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDef = sqlite3FindFunction(db, zId, nId, nFarg, enc, 0);
80389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pDef==0 ){
80988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pDef==0 || pDef->xFunc==0 ){
80390 80989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "unknown function: %.*s()", nId, zId);
80391 80990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
80392 80991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
80393 80992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
80394 80993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Attempt a direct implementation of the built-in COALESCE() and
@@ -83175,19 +83774,24 @@
83175 83774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
83176 83775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83177 83776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
83178 83777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of the stat_init(N,K,C) SQL function. The three parameters
83179 83778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are:
83180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** N: The number of columns in the index including the rowid/pk
83181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** K: The number of columns in the index excluding the rowid/pk
83182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** C: The number of rows in the index
83183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
83184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** C is only used for STAT3 and STAT4.
83185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
83186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** For ordinary rowid tables, N==K+1. But for WITHOUT ROWID tables,
83187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** N=K+P where P is the number of columns in the primary key. For the
83188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** covering index that implements the original WITHOUT ROWID table, N==K.
83779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** N: The number of columns in the index including the rowid/pk (note 1)
83780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** K: The number of columns in the index excluding the rowid/pk.
83781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** C: The number of rows in the index (note 2)
83782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
83783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Note 1: In the special case of the covering index that implements a
83784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WITHOUT ROWID table, N is the number of PRIMARY KEY columns, not the
83785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** total number of columns in the table.
83786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
83787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Note 2: C is only used for STAT3 and STAT4.
83788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
83789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For indexes on ordinary rowid tables, N==K+1. But for indexes on
83790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WITHOUT ROWID tables, N=K+P where P is the number of columns in the
83791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** PRIMARY KEY of the table. The covering index that implements the
83792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** original WITHOUT ROWID table as N==K as a special case.
83189 83793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83190 83794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine allocates the Stat4Accum object in heap memory. The return
83191 83795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** value is a pointer to the the Stat4Accum object encoded as a blob (i.e.
83192 83796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the size of the blob is sizeof(void*) bytes).
83193 83797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -83493,11 +84097,14 @@
83493 84097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P Pointer to the Stat4Accum object created by stat_init()
83494 84098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** C Index of left-most column to differ from previous row
83495 84099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** R Rowid for the current row. Might be a key record for
83496 84100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WITHOUT ROWID tables.
83497 84101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The SQL function always returns NULL.
84102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This SQL function always returns NULL. It's purpose it to accumulate
84103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statistical data and/or samples in the Stat4Accum object about the
84104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index being analyzed. The stat_get() SQL function will later be used to
84105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** extract relevant information for constructing the sqlite_statN tables.
83499 84106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83500 84107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The R parameter is only used for STAT3 and STAT4
83501 84108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
83502 84109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void statPush(
83503 84110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *context,
@@ -83587,11 +84194,14 @@
83587 84194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define STAT_GET_NLT 3 /* "nlt" column of stat[34] entry */
83588 84195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define STAT_GET_NDLT 4 /* "ndlt" column of stat[34] entry */
83589 84196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83590 84197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
83591 84198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of the stat_get(P,J) SQL function. This routine is
83592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** used to query the results. Content is returned for parameter J
84199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** used to query statistical information that has been gathered into
84200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the Stat4Accum object by prior calls to stat_push(). The P parameter
84201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is a BLOB which is decoded into a pointer to the Stat4Accum objects.
84202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The content to returned is determined by the parameter J
83593 84203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** which is one of the STAT_GET_xxxx values defined above.
83594 84204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83595 84205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If neither STAT3 nor STAT4 are enabled, then J is always
83596 84206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** STAT_GET_STAT1 and is hence omitted and this routine becomes
83597 84207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a one-parameter function, stat_get(P), that always returns the
@@ -83806,28 +84416,27 @@
83806 84416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nTab = MAX(pParse->nTab, iTab);
83807 84417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3OpenTable(pParse, iTabCur, iDb, pTab, OP_OpenRead);
83808 84418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, regTabname, 0, pTab->zName, 0);
83809 84419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83810 84420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
83811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nCol; /* Number of columns indexed by pIdx */
83812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *aGotoChng; /* Array of jump instruction addresses */
84421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nCol; /* Number of columns in pIdx. "N" */
83813 84422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrRewind; /* Address of "OP_Rewind iIdxCur" */
83814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int addrGotoChng0; /* Address of "Goto addr_chng_0" */
83815 84423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrNextRow; /* Address of "next_row:" */
83816 84424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zIdxName; /* Name of the index */
84425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nColTest; /* Number of columns to test for changes */
83817 84426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83818 84427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOnlyIdx && pOnlyIdx!=pIdx ) continue;
83819 84428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->pPartIdxWhere==0 ) needTableCnt = 0;
83820 84429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !HasRowid(pTab) && IsPrimaryKeyIndex(pIdx) ){
83821 84430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCol = pIdx->nKeyCol;
83822 84431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIdxName = pTab->zName;
84432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nColTest = nCol - 1;
83823 84433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
83824 84434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nCol = pIdx->nColumn;
83825 84435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zIdxName = pIdx->zName;
84436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nColTest = pIdx->uniqNotNull ? pIdx->nKeyCol-1 : nCol-1;
83826 84437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
83827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aGotoChng = sqlite3DbMallocRaw(db, sizeof(int)*(nCol+1));
83828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aGotoChng==0 ) continue;
83829 84438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83830 84439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Populate the register containing the index name. */
83831 84440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, regIdxname, 0, zIdxName, 0);
83832 84441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "Analysis for %s.%s", pTab->zName, zIdxName));
83833 84442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -83852,11 +84461,11 @@
83852 84461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** regPrev(0) = idx(0)
83853 84462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** chng_addr_1:
83854 84463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** regPrev(1) = idx(1)
83855 84464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ...
83856 84465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** chng_addr_N:
84466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** endDistinctTest:
83858 84467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** regRowid = idx(rowid)
83859 84468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** stat_push(P, regChng, regRowid)
83860 84469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Next csr
83861 84470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if !eof(csr) goto next_row;
83862 84471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -83865,24 +84474,27 @@
83865 84474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83866 84475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Make sure there are enough memory cells allocated to accommodate
83867 84476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the regPrev array and a trailing rowid (the rowid slot is required
83868 84477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** when building a record to insert into the sample column of
83869 84478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the sqlite_stat4 table. */
83870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->nMem = MAX(pParse->nMem, regPrev+nCol);
84479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem = MAX(pParse->nMem, regPrev+nColTest);
83871 84480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83872 84481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open a read-only cursor on the index being analyzed. */
83873 84482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb==sqlite3SchemaToIndex(db, pIdx->pSchema) );
83874 84483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OpenRead, iIdxCur, pIdx->tnum, iDb);
83875 84484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
83876 84485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s", pIdx->zName));
83877 84486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83878 84487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Invoke the stat_init() function. The arguments are:
83879 84488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (1) the number of columns in the index including the rowid,
83881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (2) the number of rows in the index,
84489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (1) the number of columns in the index including the rowid
84490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (or for a WITHOUT ROWID table, the number of PK columns),
84491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (2) the number of columns in the key without the rowid/pk
84492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (3) the number of rows in the index,
83882 84493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The second argument is only used for STAT3 and STAT4
84494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
84495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The third argument is only used for STAT3 and STAT4
83884 84496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
83885 84497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
83886 84498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Count, iIdxCur, regStat4+3);
83887 84499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
83888 84500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, nCol, regStat4+1);
@@ -83900,56 +84512,73 @@
83900 84512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
83901 84513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
83902 84514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrRewind = sqlite3VdbeAddOp1(v, OP_Rewind, iIdxCur);
83903 84515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
83904 84516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, 0, regChng);
83905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addrGotoChng0 = sqlite3VdbeAddOp0(v, OP_Goto);
83906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
83907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
83908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** next_row:
83909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** regChng = 0
83910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if( idx(0) != regPrev(0) ) goto chng_addr_0
83911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** regChng = 1
83912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** if( idx(1) != regPrev(1) ) goto chng_addr_1
83913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ...
83914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** regChng = N
83915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** goto chng_addr_N
83916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
83917 84517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrNextRow = sqlite3VdbeCurrentAddr(v);
83918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nCol; i++){
83919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *pColl = (char*)sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
83920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, i, regChng);
83921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regTemp);
83922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aGotoChng[i] =
83923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_Ne, regTemp, 0, regPrev+i, pColl, P4_COLLSEQ);
83924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
83925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCoverage(v);
83926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
83927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, nCol, regChng);
83928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aGotoChng[nCol] = sqlite3VdbeAddOp0(v, OP_Goto);
83929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
83930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
83931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** chng_addr_0:
83932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** regPrev(0) = idx(0)
83933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** chng_addr_1:
83934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** regPrev(1) = idx(1)
83935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ...
83936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
83937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addrGotoChng0);
83938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nCol; i++){
83939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, aGotoChng[i]);
83940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regPrev+i);
83941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
83942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
84518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
84519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nColTest>0 ){
84520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int endDistinctTest = sqlite3VdbeMakeLabel(v);
84521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *aGotoChng; /* Array of jump instruction addresses */
84522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aGotoChng = sqlite3DbMallocRaw(db, sizeof(int)*nColTest);
84523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aGotoChng==0 ) continue;
84524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
84525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
84526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** next_row:
84527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** regChng = 0
84528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if( idx(0) != regPrev(0) ) goto chng_addr_0
84529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** regChng = 1
84530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** if( idx(1) != regPrev(1) ) goto chng_addr_1
84531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ...
84532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** regChng = N
84533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** goto endDistinctTest
84534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
84535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp0(v, OP_Goto);
84536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addrNextRow = sqlite3VdbeCurrentAddr(v);
84537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nColTest==1 && pIdx->nKeyCol==1 && IsUniqueIndex(pIdx) ){
84538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* For a single-column UNIQUE index, once we have found a non-NULL
84539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** row, we know that all the rest will be distinct, so skip
84540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** subsequent distinctness tests. */
84541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_NotNull, regPrev, endDistinctTest);
84542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
84543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
84544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nColTest; i++){
84545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *pColl = (char*)sqlite3LocateCollSeq(pParse, pIdx->azColl[i]);
84546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, i, regChng);
84547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regTemp);
84548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aGotoChng[i] =
84549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_Ne, regTemp, 0, regPrev+i, pColl, P4_COLLSEQ);
84550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
84551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
84552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
84553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, nColTest, regChng);
84554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, endDistinctTest);
84555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
84556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
84557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
84558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** chng_addr_0:
84559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** regPrev(0) = idx(0)
84560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** chng_addr_1:
84561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** regPrev(1) = idx(1)
84562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ...
84563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
84564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, addrNextRow-1);
84565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nColTest; i++){
84566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, aGotoChng[i]);
84567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, iIdxCur, i, regPrev+i);
84568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
84569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeResolveLabel(v, endDistinctTest);
84570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DbFree(db, aGotoChng);
84571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
84572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
83943 84573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
83944 84574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** chng_addr_N:
83945 84575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** regRowid = idx(rowid) // STAT34 only
83946 84576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** stat_push(P, regChng, regRowid) // 3rd parameter STAT34 only
83947 84577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Next csr
83948 84578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if !eof(csr) goto next_row;
83949 84579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
83950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, aGotoChng[nCol]);
83951 84580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
83952 84581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( regRowid==(regStat4+2) );
83953 84582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( HasRowid(pTab) ){
83954 84583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IdxRowid, iIdxCur, regRowid);
83955 84584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -84023,11 +84652,10 @@
84023 84652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84024 84653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_ENABLE_STAT3_OR_STAT4 */
84025 84654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84026 84655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* End of analysis */
84027 84656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addrRewind);
84028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, aGotoChng);
84029 84657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84030 84658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84031 84659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84032 84660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Create a single sqlite_stat1 entry containing NULL as the index
84033 84661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name and the row count as the content.
@@ -84124,10 +84752,11 @@
84124 84752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
84125 84753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *z, *zDb;
84126 84754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab;
84127 84755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx;
84128 84756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Token *pTableName;
84757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *v;
84129 84758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84130 84759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Read the database schema. If an error occurs, leave an error message
84131 84760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and code in pParse and return NULL. */
84132 84761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3BtreeHoldsAllMutexes(pParse->db) );
84133 84762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_OK!=sqlite3ReadSchema(pParse) ){
@@ -84171,10 +84800,12 @@
84171 84800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84172 84801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, z);
84173 84802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84174 84803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84175 84804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ v = sqlite3GetVdbe(pParse);
84806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( v ) sqlite3VdbeAddOp0(v, OP_Expire);
84176 84807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84177 84808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84178 84809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
84179 84810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Used to pass information from the analyzer reader through to the
84180 84811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** callback routine.
@@ -84229,18 +84860,23 @@
84229 84860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_ENABLE_STAT3_OR_STAT4
84230 84861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIndex!=0 );
84231 84862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
84232 84863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIndex )
84233 84864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
84234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
84235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( strcmp(z, "unordered")==0 ){
84865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z[0] ){
84866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3_strglob("unordered*", z)==0 ){
84236 84867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex->bUnordered = 1;
84237 84868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( sqlite3_strglob("sz=[0-9]*", z)==0 ){
84238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int v32 = 0;
84239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3GetInt32(z+3, &v32);
84240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIndex->szIdxRow = sqlite3LogEst(v32);
84869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex->szIdxRow = sqlite3LogEst(sqlite3Atoi(z+3));
84241 84870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_COSTMULT
84872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ else if( sqlite3_strglob("costmult=[0-9]*",z)==0 ){
84873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex->pTable->costMult = sqlite3LogEst(sqlite3Atoi(z+9));
84874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
84875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
84876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z[0]!=0 && z[0]!=' ' ) z++;
84877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( z[0]==' ' ) z++;
84242 84878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84243 84879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84244 84880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84245 84881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
84246 84882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This callback is invoked once for each index when reading the
@@ -84277,15 +84913,19 @@
84277 84913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIndex = sqlite3FindIndex(pInfo->db, argv[1], pInfo->zDatabase);
84278 84914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84279 84915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
z = argv[2];
84280 84916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84281 84917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIndex ){
84918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex->bUnordered = 0;
84282 84919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
decodeIntArray((char*)z, pIndex->nKeyCol+1, 0, pIndex->aiRowLogEst, pIndex);
84283 84920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIndex->pPartIdxWhere==0 ) pTable->nRowLogEst = pIndex->aiRowLogEst[0];
84284 84921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
84285 84922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index fakeIdx;
84286 84923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fakeIdx.szIdxRow = pTable->szTabRow;
84924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_COSTMULT
84925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fakeIdx.pTable = pTable;
84926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
84287 84927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
decodeIntArray((char*)z, 1, 0, &pTable->nRowLogEst, &fakeIdx);
84288 84928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable->szTabRow = fakeIdx.szIdxRow;
84289 84929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84290 84930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84291 84931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
@@ -85557,10 +86197,23 @@
85557 86197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85558 86198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
85559 86199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define codeTableLocks(x)
85560 86200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
85561 86201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
86202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
86203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return TRUE if the given yDbMask object is empty - if it contains no
86204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 1 bits. This routine is used by the DbMaskAllZero() and DbMaskNotZero()
86205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** macros when SQLITE_MAX_ATTACHED is greater than 30.
86206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
86207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_MAX_ATTACHED>30
86208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3DbMaskAllZero(yDbMask m){
86209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
86210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<sizeof(yDbMask); i++) if( m[i] ) return 0;
86211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
86212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
86213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
86214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
85562 86215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
85563 86216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is called after a single SQL statement has been
85564 86217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** parsed and a VDBE program to execute that statement has been
85565 86218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** prepared. This routine puts the finishing touches on the
85566 86219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** VDBE program and resets the pParse structure for the next
@@ -85593,22 +86246,23 @@
85593 86246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are
85594 86247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** set for each database that is used. Generate code to start a
85595 86248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** transaction on each used database and to verify the schema cookie
85596 86249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on each used database.
85597 86250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
85598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( db->mallocFailed==0 && (pParse->cookieMask || pParse->pConstExpr) ){
85599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- yDbMask mask;
86251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( db->mallocFailed==0
86252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (DbMaskNonZero(pParse->cookieMask) || pParse->pConstExpr)
86253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
85600 86254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb, i;
85601 86255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3VdbeGetOp(v, 0)->opcode==OP_Init );
85602 86256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, 0);
85603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(iDb=0, mask=1; iDb<db->nDb; mask<<=1, iDb++){
85604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (mask & pParse->cookieMask)==0 ) continue;
86257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iDb=0; iDb<db->nDb; iDb++){
86258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( DbMaskTest(pParse->cookieMask, iDb)==0 ) continue;
85605 86259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeUsesBtree(v, iDb);
85606 86260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v,
85607 86261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
OP_Transaction, /* Opcode */
85608 86262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDb, /* P1 */
85609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (mask & pParse->writeMask)!=0, /* P2 */
86263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DbMaskTest(pParse->writeMask,iDb), /* P2 */
85610 86264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->cookieValue[iDb], /* P3 */
85611 86265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->aDb[iDb].pSchema->iGeneration /* P4 */
85612 86266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
85613 86267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->init.busy==0 ) sqlite3VdbeChangeP5(v, 1);
85614 86268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -85660,11 +86314,11 @@
85660 86314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85661 86315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nTab = 0;
85662 86316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nMem = 0;
85663 86317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nSet = 0;
85664 86318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nVar = 0;
85665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->cookieMask = 0;
86319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DbMaskZero(pParse->cookieMask);
85666 86320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85667 86321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
85668 86322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
85669 86323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Run the parser and code generator recursively in order to generate
85670 86324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** code for the SQL statement given onto the end of the pParse context
@@ -87560,11 +88214,11 @@
87560 88214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable->aCol = pSelTab->aCol;
87561 88215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSelTab->nCol = 0;
87562 88216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSelTab->aCol = 0;
87563 88217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DeleteTable(db, pSelTab);
87564 88218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3SchemaMutexHeld(db, 0, pTable->pSchema) );
87565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pTable->pSchema->flags |= DB_UnresetViews;
88219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTable->pSchema->schemaFlags |= DB_UnresetViews;
87566 88220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
87567 88221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTable->nCol = 0;
87568 88222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nErr++;
87569 88223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87570 88224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDelete(db, pSel);
@@ -88137,16 +88791,16 @@
88137 88791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(char *)pKey, P4_KEYINFO);
88138 88792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_BULKCSR|((memRootPage>=0)?OPFLAG_P2ISREG:0));
88139 88793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
88140 88794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr1 = sqlite3VdbeAddOp2(v, OP_SorterSort, iSorter, 0); VdbeCoverage(v);
88141 88795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pKey!=0 || db->mallocFailed || pParse->nErr );
88142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIndex->onError!=OE_None && pKey!=0 ){
88796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsUniqueIndex(pIndex) && pKey!=0 ){
88143 88797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j2 = sqlite3VdbeCurrentAddr(v) + 3;
88144 88798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, j2);
88145 88799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr2 = sqlite3VdbeCurrentAddr(v);
88146 88800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v, OP_SorterCompare, iSorter, j2, regRecord,
88147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pKey->nField - pIndex->nKeyCol); VdbeCoverage(v);
88801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIndex->nKeyCol); VdbeCoverage(v);
88148 88802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3UniqueConstraint(pParse, OE_Abort, pIndex);
88149 88803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
88150 88804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr2 = sqlite3VdbeCurrentAddr(v);
88151 88805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88152 88806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_SorterData, iSorter, regRecord);
@@ -88534,13 +89188,13 @@
88534 89188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** considered distinct and both result in separate indices.
88535 89189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
88536 89190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx;
88537 89191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
88538 89192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int k;
88539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pIdx->onError!=OE_None );
89193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( IsUniqueIndex(pIdx) );
88540 89194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIdx->idxType!=SQLITE_IDXTYPE_APPDEF );
88541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pIndex->onError!=OE_None );
89195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( IsUniqueIndex(pIndex) );
88542 89196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
88543 89197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->nKeyCol!=pIndex->nKeyCol ) continue;
88544 89198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(k=0; k<pIdx->nKeyCol; k++){
88545 89199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z1;
88546 89200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z2;
@@ -88727,11 +89381,11 @@
88727 89381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=nCopy+1; i<=pIdx->nKeyCol; i++){
88728 89382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a[i] = 23; assert( 23==sqlite3LogEst(5) );
88729 89383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88730 89384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
88731 89385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( 0==sqlite3LogEst(1) );
88732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx->onError!=OE_None ) a[pIdx->nKeyCol] = 0;
89386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsUniqueIndex(pIdx) ) a[pIdx->nKeyCol] = 0;
88733 89387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88734 89388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
88735 89389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
88736 89390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine will drop an existing named index. This routine
88737 89391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implements the DROP INDEX statement.
@@ -89287,19 +89941,17 @@
89287 89941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** later, by sqlite3FinishCoding().
89288 89942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
89289 89943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3CodeVerifySchema(Parse *pParse, int iDb){
89290 89944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pToplevel = sqlite3ParseToplevel(pParse);
89291 89945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pToplevel->db;
89292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- yDbMask mask;
89293 89946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89294 89947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb>=0 && iDb<db->nDb );
89295 89948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->aDb[iDb].pBt!=0 || iDb==1 );
89296 89949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iDb<SQLITE_MAX_ATTACHED+2 );
89297 89950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
89298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mask = ((yDbMask)1)<<iDb;
89299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pToplevel->cookieMask & mask)==0 ){
89300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pToplevel->cookieMask |= mask;
89951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( DbMaskTest(pToplevel->cookieMask, iDb)==0 ){
89952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DbMaskSet(pToplevel->cookieMask, iDb);
89301 89953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pToplevel->cookieValue[iDb] = db->aDb[iDb].pSchema->schema_cookie;
89302 89954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !OMIT_TEMPDB && iDb==1 ){
89303 89955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3OpenTempDatabase(pToplevel);
89304 89956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89305 89957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -89334,11 +89986,11 @@
89334 89986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** necessary to undo a write and the checkpoint should not be set.
89335 89987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
89336 89988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3BeginWriteOperation(Parse *pParse, int setStatement, int iDb){
89337 89989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pToplevel = sqlite3ParseToplevel(pParse);
89338 89990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3CodeVerifySchema(pParse, iDb);
89339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pToplevel->writeMask |= ((yDbMask)1)<<iDb;
89991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ DbMaskSet(pToplevel->writeMask, iDb);
89340 89992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pToplevel->isMultiWrite |= setStatement;
89341 89993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89342 89994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89343 89995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
89344 89996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Indicate that the statement currently under construction might write
@@ -90141,13 +90793,13 @@
90141 90793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DeleteTable(0, pTab);
90142 90794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90143 90795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3HashClear(&temp1);
90144 90796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3HashClear(&pSchema->fkeyHash);
90145 90797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSchema->pSeqTab = 0;
90146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pSchema->flags & DB_SchemaLoaded ){
90798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pSchema->schemaFlags & DB_SchemaLoaded ){
90147 90799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSchema->iGeneration++;
90148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSchema->flags &= ~DB_SchemaLoaded;
90800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSchema->schemaFlags &= ~DB_SchemaLoaded;
90149 90801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90150 90802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90151 90803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90152 90804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
90153 90805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Find and return the schema associated with a BTree. Create
@@ -91022,16 +91674,13 @@
91022 91674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you do good and not evil.
91023 91675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you find forgiveness for yourself and forgive others.
91024 91676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** May you share freely, never taking more than you give.
91025 91677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
91026 91678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*************************************************************************
91027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This file contains the C functions that implement various SQL
91028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** functions of SQLite.
91029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
91030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** There is only one exported symbol in this file - the function
91031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqliteRegisterBuildinFunctions() found at the bottom of the file.
91032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** All other code has file scope.
91679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file contains the C-language implementions for many of the SQL
91680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** functions of SQLite. (Some function, and in particular the date and
91681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** time functions, are implemented separately.)
91033 91682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
91034 91683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include <stdlib.h> */
91035 91684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include <assert.h> */
91036 91685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
91037 91686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -92989,11 +93638,11 @@
92989 93638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !aiCol ) return 1;
92990 93639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*paiCol = aiCol;
92991 93640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
92992 93641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
92993 93642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pParent->pIndex; pIdx; pIdx=pIdx->pNext){
92994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx->nKeyCol==nCol && pIdx->onError!=OE_None ){
93643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->nKeyCol==nCol && IsUniqueIndex(pIdx) ){
92995 93644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pIdx is a UNIQUE index (or a PRIMARY KEY) and has the right number
92996 93645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of columns. If each indexed column corresponds to a foreign key
92997 93646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** column of pFKey, then this index is a winner. */
92998 93647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
92999 93648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zKey==0 ){
@@ -96015,11 +96664,11 @@
96015 96664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
96016 96665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0; /* Default values must be the same for all columns */
96017 96666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96018 96667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96019 96668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pDestIdx=pDest->pIndex; pDestIdx; pDestIdx=pDestIdx->pNext){
96020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pDestIdx->onError!=OE_None ){
96669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsUniqueIndex(pDestIdx) ){
96021 96670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
destHasUniqueIdx = 1;
96022 96671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96023 96672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pSrcIdx=pSrc->pIndex; pSrcIdx; pSrcIdx=pSrcIdx->pNext){
96024 96673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( xferCompatibleIndex(pDestIdx, pSrcIdx) ) break;
96025 96674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -96245,10 +96894,13 @@
96245 96894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exec_out;
96246 96895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96247 96896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96248 96897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
96249 96898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( xCallback(pArg, nCol, azVals, azCols) ){
96899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-38229-40159 If the callback function to
96900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_exec() returns non-zero, then sqlite3_exec() will
96901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** return SQLITE_ABORT. */
96250 96902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_ABORT;
96251 96903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeFinalize((Vdbe *)pStmt);
96252 96904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStmt = 0;
96253 96905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Error(db, SQLITE_ABORT, 0);
96254 96906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto exec_out;
@@ -98022,11 +98674,11 @@
98022 98674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Note that the values returned are one less that the values that
98023 98675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** should be passed into sqlite3BtreeSetSafetyLevel(). The is done
98024 98676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to support legacy SQL code. The safety level used to be boolean
98025 98677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and older scripts may have used numbers 0 for OFF and 1 for ON.
98026 98678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
98027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static u8 getSafetyLevel(const char *z, int omitFull, int dflt){
98679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static u8 getSafetyLevel(const char *z, int omitFull, u8 dflt){
98028 98680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 123456789 123456789 */
98029 98681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zText[] = "onoffalseyestruefull";
98030 98682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const u8 iOffset[] = {0, 1, 2, 4, 9, 12, 16};
98031 98683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const u8 iLength[] = {2, 2, 3, 5, 3, 4, 4};
98032 98684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const u8 iValue[] = {1, 0, 0, 0, 1, 1, 2};
@@ -98044,11 +98696,11 @@
98044 98696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
98045 98697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98046 98698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
98047 98699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Interpret the given string as a boolean value.
98048 98700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
98049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z, int dflt){
98701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE u8 sqlite3GetBoolean(const char *z, u8 dflt){
98050 98702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return getSafetyLevel(z,1,dflt)!=0;
98051 98703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
98052 98704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98053 98705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The sqlite3GetBoolean() function is used by other modules but the
98054 98706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** remainder of this file is specific to PRAGMA processing. So omit
@@ -98590,11 +99242,11 @@
98590 99242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
98591 99243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case PragTyp_JOURNAL_SIZE_LIMIT: {
98592 99244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pager *pPager = sqlite3BtreePager(pDb->pBt);
98593 99245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iLimit = -2;
98594 99246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zRight ){
98595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Atoi64(zRight, &iLimit, sqlite3Strlen30(zRight), SQLITE_UTF8);
99247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DecOrHexToI64(zRight, &iLimit);
98596 99248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iLimit<-1 ) iLimit = -1;
98597 99249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
98598 99250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLimit = sqlite3PagerJournalSizeLimit(pPager, iLimit);
98599 99251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
returnSingleInt(pParse, "journal_size_limit", iLimit);
98600 99252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -98718,11 +99370,11 @@
98718 99370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 sz;
98719 99371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_MMAP_SIZE>0
98720 99372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
98721 99373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zRight ){
98722 99374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
98723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3Atoi64(zRight, &sz, sqlite3Strlen30(zRight), SQLITE_UTF8);
99375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DecOrHexToI64(zRight, &sz);
98724 99376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sz<0 ) sz = sqlite3GlobalConfig.szMmap;
98725 99377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pId2->n==0 ) db->szMmap = sz;
98726 99378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=db->nDb-1; ii>=0; ii--){
98727 99379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->aDb[ii].pBt && (ii==iDb || pId2->n==0) ){
98728 99380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeSetMmapLimit(db->aDb[ii].pBt, sz);
@@ -99086,11 +99738,11 @@
99086 99738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetColName(v, 1, COLNAME_NAME, "name", SQLITE_STATIC);
99087 99739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetColName(v, 2, COLNAME_NAME, "unique", SQLITE_STATIC);
99088 99740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex, i=0; pIdx; pIdx=pIdx->pNext, i++){
99089 99741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, i, 1);
99090 99742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, 2, 0, pIdx->zName, 0);
99091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Integer, pIdx->onError!=OE_None, 3);
99743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Integer, IsUniqueIndex(pIdx), 3);
99092 99744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_ResultRow, 1, 3);
99093 99745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99094 99746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99095 99747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99096 99748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
@@ -99336,13 +99988,12 @@
99336 99988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** messages have been generated, output OK. Otherwise output the
99337 99989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** error message
99338 99990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
99339 99991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const int iLn = VDBE_OFFSET_LINENO(2);
99340 99992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const VdbeOpList endCode[] = {
99341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { OP_AddImm, 1, 0, 0}, /* 0 */
99342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { OP_IfNeg, 1, 0, 0}, /* 1 */
99343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- { OP_String8, 0, 3, 0}, /* 2 */
99993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { OP_IfNeg, 1, 0, 0}, /* 0 */
99994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ { OP_String8, 0, 3, 0}, /* 1 */
99344 99995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{ OP_ResultRow, 3, 1, 0},
99345 99996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
99346 99997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99347 99998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isQuick = (sqlite3Tolower(zLeft[0])=='q');
99348 99999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -99450,32 +100101,80 @@
99450 100101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Integer, 0, 8+j); /* index entries counter */
99451 100102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99452 100103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nMem = MAX(pParse->nMem, 8+j);
99453 100104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Rewind, iDataCur, 0); VdbeCoverage(v);
99454 100105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
loopTop = sqlite3VdbeAddOp2(v, OP_AddImm, 7, 1);
100106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Verify that all NOT NULL columns really are NOT NULL */
100107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=0; j<pTab->nCol; j++){
100108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zErr;
100109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int jmp2, jmp3;
100110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( j==pTab->iPKey ) continue;
100111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab->aCol[j].notNull==0 ) continue;
100112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprCodeGetColumnOfTable(v, pTab, iDataCur, j, 3);
100113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP5(v, OPFLAG_TYPEOFARG);
100114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jmp2 = sqlite3VdbeAddOp1(v, OP_NotNull, 3); VdbeCoverage(v);
100115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */
100116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zErr = sqlite3MPrintf(db, "NULL value in %s.%s", pTab->zName,
100117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTab->aCol[j].zName);
100118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, zErr, P4_DYNAMIC);
100119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1);
100120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jmp3 = sqlite3VdbeAddOp1(v, OP_IfPos, 1); VdbeCoverage(v);
100121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp0(v, OP_Halt);
100122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, jmp2);
100123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, jmp3);
100124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Validate index entries for the current row */
99455 100126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0, pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext, j++){
99456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int jmp2, jmp3, jmp4;
100127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int jmp2, jmp3, jmp4, jmp5;
100128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ckUniq = sqlite3VdbeMakeLabel(v);
99457 100129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPk==pIdx ) continue;
99458 100130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r1 = sqlite3GenerateIndexKey(pParse, pIdx, iDataCur, 0, 0, &jmp3,
99459 100131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrior, r1);
99460 100132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrior = pIdx;
99461 100133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_AddImm, 8+j, 1); /* increment entry count */
99462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, 0, r1,
100134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Verify that an index entry exists for the current table row */
100135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jmp2 = sqlite3VdbeAddOp4Int(v, OP_Found, iIdxCur+j, ckUniq, r1,
99463 100136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdx->nColumn); VdbeCoverage(v);
99464 100137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */
99465 100138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0, "row ", P4_STATIC);
99466 100139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Concat, 7, 3, 3);
99467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, " missing from index ",
99468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- P4_STATIC);
100140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0,
100141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " missing from index ", P4_STATIC);
99469 100142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
99470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0, pIdx->zName, P4_TRANSIENT);
100143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jmp5 = sqlite3VdbeAddOp4(v, OP_String8, 0, 4, 0,
100144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->zName, P4_TRANSIENT);
99471 100145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Concat, 4, 3, 3);
99472 100146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_ResultRow, 3, 1);
99473 100147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jmp4 = sqlite3VdbeAddOp1(v, OP_IfPos, 1); VdbeCoverage(v);
99474 100148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp0(v, OP_Halt);
99475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, jmp4);
99476 100149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, jmp2);
100150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* For UNIQUE indexes, verify that only one entry exists with the
100151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** current key. The entry is unique if (1) any column is NULL
100152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or (2) the next entry has a different key */
100153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( IsUniqueIndex(pIdx) ){
100154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int uniqOk = sqlite3VdbeMakeLabel(v);
100155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int jmp6;
100156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int kk;
100157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(kk=0; kk<pIdx->nKeyCol; kk++){
100158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol = pIdx->aiColumn[kk];
100159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( iCol>=0 && iCol<pTab->nCol );
100160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab->aCol[iCol].notNull ) continue;
100161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_IsNull, r1+kk, uniqOk);
100162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverage(v);
100163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ jmp6 = sqlite3VdbeAddOp1(v, OP_Next, iIdxCur+j); VdbeCoverage(v);
100165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, uniqOk);
100166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, jmp6);
100167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4Int(v, OP_IdxGT, iIdxCur+j, uniqOk, r1,
100168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx->nKeyCol); VdbeCoverage(v);
100169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AddImm, 1, -1); /* Decrement error limit */
100170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp4(v, OP_String8, 0, 3, 0,
100171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "non-unique entry in index ", P4_STATIC);
100172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Goto, 0, jmp5);
100173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeResolveLabel(v, uniqOk);
100174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
100175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, jmp4);
99477 100176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ResolvePartIdxLabel(pParse, jmp3);
99478 100177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99479 100178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Next, iDataCur, loopTop); VdbeCoverage(v);
99480 100179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, loopTop-1);
99481 100180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_BTREECOUNT
@@ -99496,13 +100195,13 @@
99496 100195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99497 100196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_BTREECOUNT */
99498 100197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99499 100198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99500 100199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addr = sqlite3VdbeAddOpList(v, ArraySize(endCode), endCode, iLn);
99501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP2(v, addr, -mxErr);
99502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeJumpHere(v, addr+1);
99503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP4(v, addr+2, "ok", P4_STATIC);
100200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP3(v, addr, -mxErr);
100201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeJumpHere(v, addr);
100202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeChangeP4(v, addr+1, "ok", P4_STATIC);
99504 100203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99505 100204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
99506 100205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_INTEGRITY_CHECK */
99507 100206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
99508 100207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_UTF16
@@ -99761,11 +100460,11 @@
99761 100460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Call sqlite3_soft_heap_limit64(N). Return the result. If N is omitted,
99762 100461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use -1.
99763 100462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
99764 100463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case PragTyp_SOFT_HEAP_LIMIT: {
99765 100464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 N;
99766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( zRight && sqlite3Atoi64(zRight, &N, 1000000, SQLITE_UTF8)==SQLITE_OK ){
100465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zRight && sqlite3DecOrHexToI64(zRight, &N)==SQLITE_OK ){
99767 100466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_soft_heap_limit64(N);
99768 100467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
99769 100468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
returnSingleInt(pParse, "soft_heap_limit", sqlite3_soft_heap_limit64(-1));
99770 100469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
99771 100470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -101284,12 +101983,11 @@
101284 101983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iOffset, /* Register holding the offset counter */
101285 101984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iContinue /* Jump here to skip the current record */
101286 101985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
101287 101986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iOffset>0 ){
101288 101987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addr;
101289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AddImm, iOffset, -1);
101290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- addr = sqlite3VdbeAddOp1(v, OP_IfNeg, iOffset); VdbeCoverage(v);
101988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeAddOp3(v, OP_IfNeg, iOffset, 0, -1); VdbeCoverage(v);
101291 101989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Goto, 0, iContinue);
101292 101990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "skip OFFSET records"));
101293 101991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addr);
101294 101992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101295 101993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -101450,11 +102148,11 @@
101450 102148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
101451 102149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101452 102150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP4(v, -1, (const char *)pColl, P4_COLLSEQ);
101453 102151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, SQLITE_NULLEQ);
101454 102152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( sqlite3VdbeCurrentAddr(v)==iJump );
102153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( sqlite3VdbeCurrentAddr(v)==iJump || pParse->db->mallocFailed );
101456 102154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Copy, regResult, regPrev, nResultCol-1);
101457 102155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
101458 102156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
101459 102157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
101460 102158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case WHERE_DISTINCT_UNIQUE: {
@@ -107917,11 +108615,12 @@
107917 108615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelBreak, regKey, nKey);
107918 108616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverageNeverTaken(v);
107919 108617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
107920 108618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
labelContinue = labelBreak;
107921 108619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IsNull, pPk ? regKey : regOldRowid, labelBreak);
107922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCoverage(v);
108620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverageIf(v, pPk==0);
108621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCoverageIf(v, pPk!=0);
107923 108622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pPk ){
107924 108623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
labelContinue = sqlite3VdbeMakeLabel(v);
107925 108624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Rewind, iEph, labelBreak); VdbeCoverage(v);
107926 108625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrTop = sqlite3VdbeAddOp2(v, OP_RowKey, iEph, regKey);
107927 108626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelContinue, regKey, 0);
@@ -109927,10 +110626,11 @@
109927 110626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct WherePath {
109928 110627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask maskLoop; /* Bitmask of all WhereLoop objects in this path */
109929 110628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask revLoop; /* aLoop[]s that should be reversed for ORDER BY */
109930 110629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LogEst nRow; /* Estimated number of rows generated by this path */
109931 110630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LogEst rCost; /* Total cost of this path */
110631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst rUnsorted; /* Total cost of this path ignoring sorting costs */
109932 110632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i8 isOrdered; /* No. of ORDER BY terms satisfied. -1 for unknown */
109933 110633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop **aLoop; /* Array of WhereLoop objects implementing this path */
109934 110634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
109935 110635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
109936 110636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -111657,11 +112357,11 @@
111657 112357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
111658 112358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 3. All of those index columns for which the WHERE clause does not
111659 112359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contain a "col=X" term are subject to a NOT NULL constraint.
111660 112360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
111661 112361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
111662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx->onError==OE_None ) continue;
112362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !IsUniqueIndex(pIdx) ) continue;
111663 112363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pIdx->nKeyCol; i++){
111664 112364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 iCol = pIdx->aiColumn[i];
111665 112365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( 0==findTerm(pWC, iBase, iCol, ~(Bitmask)0, WO_EQ, pIdx) ){
111666 112366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iIdxCol = findIndexCol(pParse, pDistinct, iBase, pIdx, i);
111667 112367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iIdxCol<0 || pTab->aCol[iCol].notNull==0 ){
@@ -112234,11 +112934,12 @@
112234 112934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nEq = pLoop->u.btree.nEq;
112235 112935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db;
112236 112936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLower = -1;
112237 112937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nUpper = p->nSample+1;
112238 112938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
112239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 aff = p->pTable->aCol[ p->aiColumn[nEq] ].affinity;
112939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol = p->aiColumn[nEq];
112940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 aff = iCol>=0 ? p->pTable->aCol[iCol].affinity : SQLITE_AFF_INTEGER;
112240 112941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl;
112241 112942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
112242 112943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value *p1 = 0; /* Value extracted from pLower */
112243 112944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value *p2 = 0; /* Value extracted from pUpper */
112244 112945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value *pVal = 0; /* Value extracted from record */
@@ -112708,11 +113409,11 @@
112708 113409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( bRev );
112709 113410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bRev = !bRev;
112710 113411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112711 113412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pX->op==TK_IN );
112712 113413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iReg = iTarget;
112713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- eType = sqlite3FindInIndex(pParse, pX, 0);
113414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ eType = sqlite3FindInIndex(pParse, pX, IN_INDEX_LOOP, 0);
112714 113415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eType==IN_INDEX_INDEX_DESC ){
112715 113416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( bRev );
112716 113417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bRev = !bRev;
112717 113418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
112718 113419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iTab = pX->iTable;
@@ -113609,10 +114310,11 @@
113609 114310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRowid = 0; /* Register holding rowid */
113610 114311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLoopBody = sqlite3VdbeMakeLabel(v); /* Start of loop body */
113611 114312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iRetInit; /* Address of regReturn init */
113612 114313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int untestedTerms = 0; /* Some terms not completely tested */
113613 114314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii; /* Loop counter */
114315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 wctrlFlags; /* Flags for sub-WHERE clause */
113614 114316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pAndExpr = 0; /* An ".. AND (...)" expression */
113615 114317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab = pTabItem->pTab;
113616 114318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113617 114319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm = pLoop->aLTerm[0];
113618 114320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTerm!=0 );
@@ -113704,10 +114406,12 @@
113704 114406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113705 114407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Run a separate WHERE clause for each term of the OR clause. After
113706 114408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** eliminating duplicates from other WHERE clauses, the action for each
113707 114409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sub-WHERE clause is to to invoke the main loop body as a subroutine.
113708 114410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
114411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wctrlFlags = WHERE_OMIT_OPEN_CLOSE | WHERE_AND_ONLY |
114412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY;
113709 114413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0; ii<pOrWc->nTerm; ii++){
113710 114414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereTerm *pOrTerm = &pOrWc->a[ii];
113711 114415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOrTerm->leftCursor==iCur || (pOrTerm->eOperator & WO_AND)!=0 ){
113712 114416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereInfo *pSubWInfo; /* Info for single OR-term scan */
113713 114417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pOrExpr = pOrTerm->pExpr; /* Current OR clause term */
@@ -113716,12 +114420,11 @@
113716 114420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAndExpr->pLeft = pOrExpr;
113717 114421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrExpr = pAndExpr;
113718 114422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113719 114423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through table entries that match term pOrTerm. */
113720 114424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
113721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERE_OMIT_OPEN_CLOSE | WHERE_AND_ONLY |
113722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY, iCovCur);
114425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wctrlFlags, iCovCur);
113723 114426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSubWInfo || pParse->nErr || db->mallocFailed );
113724 114427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubWInfo ){
113725 114428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop *pSubLoop;
113726 114429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
explainOneScan(
113727 114430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse, pOrTab, &pSubWInfo->a[0], iLevel, pLevel->iFrom, 0
@@ -113808,10 +114511,11 @@
113808 114511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (ii==0 || pSubLoop->u.btree.pIndex==pCov)
113809 114512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (HasRowid(pTab) || !IsPrimaryKeyIndex(pSubLoop->u.btree.pIndex))
113810 114513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
113811 114514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSubWInfo->a[0].iIdxCur==iCovCur );
113812 114515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCov = pSubLoop->u.btree.pIndex;
114516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ wctrlFlags |= WHERE_REOPEN_IDX;
113813 114517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
113814 114518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCov = 0;
113815 114519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
113816 114520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
113817 114521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Finish the loop through table entries that match term pOrTerm. */
@@ -114414,10 +115118,20 @@
114414 115118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->nOut += (pTerm->truthProb<=0 ? pTerm->truthProb : -1);
114415 115119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114416 115120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114417 115121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114418 115122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
115124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Adjust the cost C by the costMult facter T. This only occurs if
115125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** compiled with -DSQLITE_ENABLE_COSTMULT
115126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_COSTMULT
115128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define ApplyCostMultiplier(C,T) C += T
115129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
115130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define ApplyCostMultiplier(C,T)
115131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
115132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
114419 115133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
114420 115134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** We have so far matched pBuilder->pNew->u.btree.nEq terms of the
114421 115135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index pIndex. Try to match one more.
114422 115136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
114423 115137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When this function is called, pBuilder->pNew->nOut contains the
@@ -114549,11 +115263,11 @@
114549 115263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** changes "x IN (?)" into "x=?". */
114550 115264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114551 115265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( eOp & (WO_EQ) ){
114552 115266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->wsFlags |= WHERE_COLUMN_EQ;
114553 115267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iCol<0 || (nInMul==0 && pNew->u.btree.nEq==pProbe->nKeyCol-1) ){
114554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( iCol>=0 && pProbe->onError==OE_None ){
115268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iCol>=0 && !IsUniqueIndex(pProbe) ){
114555 115269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->wsFlags |= WHERE_UNQ_WANTED;
114556 115270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
114557 115271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->wsFlags |= WHERE_ONEROW;
114558 115272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114559 115273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -114610,11 +115324,10 @@
114610 115324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eOp & WO_ISNULL );
114611 115325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereEqualScanEst(pParse, pBuilder, pExpr->pRight, &nOut);
114612 115326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
114613 115327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereInScanEst(pParse, pBuilder, pExpr->x.pList, &nOut);
114614 115328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( rc!=SQLITE_OK || nOut>0 );
114616 115329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_NOTFOUND ) rc = SQLITE_OK;
114617 115330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) break; /* Jump out of the pTerm loop */
114618 115331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nOut ){
114619 115332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = sqlite3LogEst(nOut);
114620 115333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew->nOut>saved_nOut ) pNew->nOut = saved_nOut;
@@ -114642,10 +115355,11 @@
114642 115355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
114643 115356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx);
114644 115357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK))==0 ){
114645 115358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16);
114646 115359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ApplyCostMultiplier(pNew->rRun, pProbe->pTable->costMult);
114647 115361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114648 115362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOutUnadjusted = pNew->nOut;
114649 115363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun += nInMul + nIn;
114650 115364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut += nInMul + nIn;
114651 115365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereLoopOutputAdjust(pBuilder->pWC, pNew);
@@ -114761,10 +115475,18 @@
114761 115475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cost = nSeek * (log(nRow) + (K+3.0) * nVisit) // non-covering index
114762 115476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
114763 115477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Normally, nSeek is 1. nSeek values greater than 1 come about if the
114764 115478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WHERE clause includes "x IN (....)" terms used in place of "x=?". Or when
114765 115479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implicit "x IN (SELECT x FROM tbl)" terms are added for skip-scans.
115480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
115481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The estimated values (nRow, nVisit, nSeek) often contain a large amount
115482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of uncertainty. For this reason, scoring is designed to pick plans that
115483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** "do the least harm" if the estimates are inaccurate. For example, a
115484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** log(nRow) factor is omitted from a non-covering index scan in order to
115485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** bias the scoring in favor of using an index, since the worst-case
115486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** performance of using an index is far better than the worst-case performance
115487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of a full table scan.
114766 115488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
114767 115489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int whereLoopAddBtree(
114768 115490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoopBuilder *pBuilder, /* WHERE clause information */
114769 115491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask mExtra /* Extra prerequesites for using this table */
114770 115492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
@@ -114848,10 +115570,11 @@
114848 115570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->aLTerm[0] = pTerm;
114849 115571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* TUNING: One-time cost for computing the automatic index is
114850 115572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** approximately 7*N*log2(N) where N is the number of rows in
114851 115573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the table being indexed. */
114852 115574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rSetup = rLogSize + rSize + 28; assert( 28==sqlite3LogEst(7) );
115575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ApplyCostMultiplier(pNew->rSetup, pTab->costMult);
114853 115576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* TUNING: Each index lookup yields 20 rows in the table. This
114854 115577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is more than the usual guess of 10 rows, since we have no way
114855 115578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of knowning how selective the index will ultimately be. It would
114856 115579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not be unreasonable to make this value much larger. */
114857 115580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = 43; assert( 43==sqlite3LogEst(20) );
@@ -114889,10 +115612,11 @@
114889 115612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
114890 115613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Full table scan */
114891 115614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->iSortIdx = b ? iSortIdx : 0;
114892 115615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* TUNING: Cost of full table scan is (N*3.0). */
114893 115616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = rSize + 16;
115617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ApplyCostMultiplier(pNew->rRun, pTab->costMult);
114894 115618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereLoopOutputAdjust(pWC, pNew);
114895 115619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopInsert(pBuilder, pNew);
114896 115620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = rSize;
114897 115621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) break;
114898 115622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -114924,11 +115648,11 @@
114924 115648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** also add the cost of visiting table rows (N*3.0). */
114925 115649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = rSize + 1 + (15*pProbe->szIdxRow)/pTab->szTabRow;
114926 115650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( m!=0 ){
114927 115651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = sqlite3LogEstAdd(pNew->rRun, rSize+16);
114928 115652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
114929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ApplyCostMultiplier(pNew->rRun, pTab->costMult);
114930 115654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereLoopOutputAdjust(pWC, pNew);
114931 115655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopInsert(pBuilder, pNew);
114932 115656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = rSize;
114933 115657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) break;
114934 115658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -115394,11 +116118,11 @@
115394 116118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
115395 116119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nKeyCol = pIndex->nKeyCol;
115396 116120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nColumn = pIndex->nColumn;
115397 116121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nColumn==nKeyCol+1 || !HasRowid(pIndex->pTable) );
115398 116122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIndex->aiColumn[nColumn-1]==(-1) || !HasRowid(pIndex->pTable));
115399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- isOrderDistinct = pIndex->onError!=OE_None;
116123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ isOrderDistinct = IsUniqueIndex(pIndex);
115400 116124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115401 116125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115402 116126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through all columns of the index and deal with the ones
115403 116127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that are not constrained by == or IN.
115404 116128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -115562,10 +116286,49 @@
115562 116286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLast ) zName[i++] = pLast->cId;
115563 116287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName[i] = 0;
115564 116288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return zName;
115565 116289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115566 116290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
116293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the cost of sorting nRow rows, assuming that the keys have
116294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nOrderby columns and that the first nSorted columns are already in
116295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** order.
116296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
116297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static LogEst whereSortingCost(
116298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereInfo *pWInfo,
116299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst nRow,
116300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nOrderBy,
116301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSorted
116302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
116303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TUNING: Estimated cost of a full external sort, where N is
116304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the number of rows to sort is:
116305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cost = (3.0 * N * log(N)).
116307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Or, if the order-by clause has X terms but only the last Y
116309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** terms are out of order, then block-sorting will reduce the
116310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sorting cost to:
116311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cost = (3.0 * N * log(N)) * (Y/X)
116313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The (Y/X) term is implemented using stack variable rScale
116315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** below. */
116316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst rScale, rSortCost;
116317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( nOrderBy>0 && 66==sqlite3LogEst(100) );
116318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rScale = sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66;
116319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rSortCost = nRow + estLog(nRow) + rScale + 16;
116320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TUNING: The cost of implementing DISTINCT using a B-TREE is
116322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** similar but with a larger constant of proportionality.
116323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Multiply by an additional factor of 3.0. */
116324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWInfo->wctrlFlags & WHERE_WANT_DISTINCT ){
116325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rSortCost += 16;
116326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rSortCost;
116329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
115567 116330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115568 116331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
115569 116332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Given the list of WhereLoop objects at pWInfo->pLoops, this routine
115570 116333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** attempts to find the lowest cost path that visits each WhereLoop
115571 116334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** once. This path is then loaded into the pWInfo->a[].pWLoop fields.
@@ -115584,139 +116347,170 @@
115584 116347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db; /* The database connection */
115585 116348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLoop; /* Loop counter over the terms of the join */
115586 116349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii, jj; /* Loop counters */
115587 116350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int mxI = 0; /* Index of next entry to replace */
115588 116351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nOrderBy; /* Number of ORDER BY clause terms */
115589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- LogEst rCost; /* Cost of a path */
115590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- LogEst nOut; /* Number of outputs */
115591 116352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LogEst mxCost = 0; /* Maximum cost of a set of paths */
116353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst mxUnsorted = 0; /* Maximum unsorted cost of a set of path */
115592 116354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nTo, nFrom; /* Number of valid entries in aTo[] and aFrom[] */
115593 116355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WherePath *aFrom; /* All nFrom paths at the previous level */
115594 116356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WherePath *aTo; /* The nTo best paths at the current level */
115595 116357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WherePath *pFrom; /* An element of aFrom[] that we are working on */
115596 116358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WherePath *pTo; /* An element of aTo[] that we are working on */
115597 116359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop *pWLoop; /* One of the WhereLoop objects */
115598 116360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop **pX; /* Used to divy up the pSpace memory */
116361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst *aSortCost = 0; /* Sorting and partial sorting costs */
115599 116362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *pSpace; /* Temporary memory used by this routine */
116363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSpace; /* Bytes of space allocated at pSpace */
115600 116364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115601 116365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse = pWInfo->pParse;
115602 116366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db = pParse->db;
115603 116367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nLoop = pWInfo->nLevel;
115604 116368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* TUNING: For simple queries, only the best path is tracked.
115605 116369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For 2-way joins, the 5 best paths are followed.
115606 116370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** For joins of 3 or more tables, track the 10 best paths */
115607 116371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxChoice = (nLoop<=1) ? 1 : (nLoop==2 ? 5 : 10);
115608 116372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nLoop<=pWInfo->pTabList->nSrc );
115609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x002, ("---- begin solver\n"));
116373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x002, ("---- begin solver. (nRowEst=%d)\n", nRowEst));
115610 116374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Allocate and initialize space for aTo and aFrom */
115612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ii = (sizeof(WherePath)+sizeof(WhereLoop*)*nLoop)*mxChoice*2;
115613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSpace = sqlite3DbMallocRaw(db, ii);
116375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If nRowEst is zero and there is an ORDER BY clause, ignore it. In this
116376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** case the purpose of this call is to estimate the number of rows returned
116377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by the overall query. Once this estimate has been obtained, the caller
116378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will invoke this function a second time, passing the estimate as the
116379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** nRowEst parameter. */
116380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWInfo->pOrderBy==0 || nRowEst==0 ){
116381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nOrderBy = 0;
116382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
116383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nOrderBy = pWInfo->pOrderBy->nExpr;
116384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Allocate and initialize space for aTo, aFrom and aSortCost[] */
116387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSpace = (sizeof(WherePath)+sizeof(WhereLoop*)*nLoop)*mxChoice*2;
116388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nSpace += sizeof(LogEst) * nOrderBy;
116389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSpace = sqlite3DbMallocRaw(db, nSpace);
115614 116390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSpace==0 ) return SQLITE_NOMEM;
115615 116391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aTo = (WherePath*)pSpace;
115616 116392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aFrom = aTo+mxChoice;
115617 116393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(aFrom, 0, sizeof(aFrom[0]));
115618 116394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pX = (WhereLoop**)(aFrom+mxChoice);
115619 116395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=mxChoice*2, pFrom=aTo; ii>0; ii--, pFrom++, pX += nLoop){
115620 116396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrom->aLoop = pX;
115621 116397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nOrderBy ){
116399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there is an ORDER BY clause and it is not being ignored, set up
116400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** space for the aSortCost[] array. Each element of the aSortCost array
116401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is either zero - meaning it has not yet been initialized - or the
116402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cost of sorting nRowEst rows of data where the first X terms of
116403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the ORDER BY clause are already in order, where X is the array
116404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** index. */
116405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSortCost = (LogEst*)pX;
116406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(aSortCost, 0, sizeof(LogEst) * nOrderBy);
116407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aSortCost==0 || &pSpace[nSpace]==(char*)&aSortCost[nOrderBy] );
116409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aSortCost!=0 || &pSpace[nSpace]==(char*)pX );
115622 116410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115623 116411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Seed the search with a single WherePath containing zero WhereLoops.
115624 116412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
115625 116413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** TUNING: Do not let the number of iterations go above 25. If the cost
115626 116414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of computing an automatic index is not paid back within the first 25
115627 116415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** rows, then do not use the automatic index. */
115628 116416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aFrom[0].nRow = MIN(pParse->nQueryLoop, 46); assert( 46==sqlite3LogEst(25) );
115629 116417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nFrom = 1;
115630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Precompute the cost of sorting the final result set, if the caller
115632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to sqlite3WhereBegin() was concerned about sorting */
115633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pWInfo->pOrderBy==0 || nRowEst==0 ){
115634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aFrom[0].isOrdered = 0;
115635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nOrderBy = 0;
115636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
115637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aFrom[0].isOrdered = nLoop>0 ? -1 : 1;
115638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nOrderBy = pWInfo->pOrderBy->nExpr;
116418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( aFrom[0].isOrdered==0 );
116419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nOrderBy ){
116420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If nLoop is zero, then there are no FROM terms in the query. Since
116421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in this case the query may return a maximum of one row, the results
116422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are already in the requested order. Set isOrdered to nOrderBy to
116423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** indicate this. Or, if nLoop is greater than zero, set isOrdered to
116424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** -1, indicating that the result set may or may not be ordered,
116425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** depending on the loops added to the current plan. */
116426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aFrom[0].isOrdered = nLoop>0 ? -1 : nOrderBy;
115639 116427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115640 116428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
115641 116429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Compute successively longer WherePaths using the previous generation
115642 116430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of WherePaths as the basis for the next. Keep track of the mxChoice
115643 116431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** best paths at each generation */
115644 116432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(iLoop=0; iLoop<nLoop; iLoop++){
115645 116433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nTo = 0;
115646 116434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(ii=0, pFrom=aFrom; ii<nFrom; ii++, pFrom++){
115647 116435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pWLoop=pWInfo->pLoops; pWLoop; pWLoop=pWLoop->pNextLoop){
115648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Bitmask maskNew;
115649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Bitmask revMask = 0;
115650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i8 isOrdered = pFrom->isOrdered;
116436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst nOut; /* Rows visited by (pFrom+pWLoop) */
116437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst rCost; /* Cost of path (pFrom+pWLoop) */
116438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst rUnsorted; /* Unsorted cost of (pFrom+pWLoop) */
116439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i8 isOrdered = pFrom->isOrdered; /* isOrdered for (pFrom+pWLoop) */
116440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask maskNew; /* Mask of src visited by (..) */
116441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Bitmask revMask = 0; /* Mask of rev-order loops for (..) */
116442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
115651 116443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pWLoop->prereq & ~pFrom->maskLoop)!=0 ) continue;
115652 116444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pWLoop->maskSelf & pFrom->maskLoop)!=0 ) continue;
115653 116445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* At this point, pWLoop is a candidate to be the next loop.
115654 116446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Compute its cost */
115655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rCost = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow);
115656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rCost = sqlite3LogEstAdd(rCost, pFrom->rCost);
116447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rUnsorted = sqlite3LogEstAdd(pWLoop->rSetup,pWLoop->rRun + pFrom->nRow);
116448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rUnsorted = sqlite3LogEstAdd(rUnsorted, pFrom->rUnsorted);
115657 116449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOut = pFrom->nRow + pWLoop->nOut;
115658 116450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
maskNew = pFrom->maskLoop | pWLoop->maskSelf;
115659 116451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( isOrdered<0 ){
115660 116452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isOrdered = wherePathSatisfiesOrderBy(pWInfo,
115661 116453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->pOrderBy, pFrom, pWInfo->wctrlFlags,
115662 116454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLoop, pWLoop, &revMask);
115663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( isOrdered>=0 && isOrdered<nOrderBy ){
115664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* TUNING: Estimated cost of a full external sort, where N is
115665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the number of rows to sort is:
115666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cost = (3.0 * N * log(N)).
115668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Or, if the order-by clause has X terms but only the last Y
115670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** terms are out of order, then block-sorting will reduce the
115671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sorting cost to:
115672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cost = (3.0 * N * log(N)) * (Y/X)
115674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
115675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The (Y/X) term is implemented using stack variable rScale
115676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** below. */
115677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- LogEst rScale, rSortCost;
115678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( nOrderBy>0 && 66==sqlite3LogEst(100) );
115679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rScale = sqlite3LogEst((nOrderBy-isOrdered)*100/nOrderBy) - 66;
115680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rSortCost = nRowEst + estLog(nRowEst) + rScale + 16;
115681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
115682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* TUNING: The cost of implementing DISTINCT using a B-TREE is
115683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** similar but with a larger constant of proportionality.
115684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Multiply by an additional factor of 3.0. */
115685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pWInfo->wctrlFlags & WHERE_WANT_DISTINCT ){
115686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rSortCost += 16;
115687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x002,
115689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n",
115690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rSortCost, (nOrderBy-isOrdered), nOrderBy, rCost,
115691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3LogEstAdd(rCost,rSortCost)));
115692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rCost = sqlite3LogEstAdd(rCost, rSortCost);
115693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
115694 116455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
115695 116456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
revMask = pFrom->revLoop;
115696 116457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Check to see if pWLoop should be added to the mxChoice best so far */
116458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isOrdered>=0 && isOrdered<nOrderBy ){
116459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aSortCost[isOrdered]==0 ){
116460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSortCost[isOrdered] = whereSortingCost(
116461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pWInfo, nRowEst, nOrderBy, isOrdered
116462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
116463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]);
116465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x002,
116467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n",
116468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aSortCost[isOrdered], (nOrderBy-isOrdered), nOrderBy,
116469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rUnsorted, rCost));
116470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
116471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rCost = rUnsorted;
116472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
116473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
116474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Check to see if pWLoop should be added to the set of
116475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** mxChoice best-so-far paths.
116476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** First look for an existing path among best-so-far paths
116478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that covers the same set of loops and has the same isOrdered
116479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** setting as the current path candidate.
116480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
116481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The term "((pTo->isOrdered^isOrdered)&0x80)==0" is equivalent
116482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to (pTo->isOrdered==(-1))==(isOrdered==(-1))" for the range
116483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of legal values for isOrdered, -1..64.
116484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
115698 116485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=0, pTo=aTo; jj<nTo; jj++, pTo++){
115699 116486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTo->maskLoop==maskNew
115700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && ((pTo->isOrdered^isOrdered)&80)==0
116487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && ((pTo->isOrdered^isOrdered)&0x80)==0
115701 116488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
115702 116489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( jj==nTo-1 );
115703 116490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
115704 116491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115705 116492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115706 116493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( jj>=nTo ){
115707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( nTo>=mxChoice && rCost>=mxCost ){
116494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* None of the existing best-so-far paths match the candidate. */
116495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nTo>=mxChoice
116496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (rCost>mxCost || (rCost==mxCost && rUnsorted>=mxUnsorted))
116497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
116498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The current candidate is no better than any of the mxChoice
116499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** paths currently in the best-so-far buffer. So discard
116500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** this candidate as not viable. */
115708 116501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef WHERETRACE_ENABLED /* 0x4 */
115709 116502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace&0x4 ){
115710 116503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("Skip %s cost=%-3d,%3d order=%c\n",
115711 116504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wherePathName(pFrom, iLoop, pWLoop), rCost, nOut,
115712 116505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isOrdered>=0 ? isOrdered+'0' : '?');
115713 116506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115714 116507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
115715 116508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
115716 116509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Add a new Path to the aTo[] set */
116510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If we reach this points it means that the new candidate path
116511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** needs to be added to the set of best-so-far paths. */
115718 116512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nTo<mxChoice ){
115719 116513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Increase the size of the aTo set by one */
115720 116514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
jj = nTo++;
115721 116515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
115722 116516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* New path replaces the prior worst to keep count below mxChoice */
@@ -115729,11 +116523,15 @@
115729 116523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wherePathName(pFrom, iLoop, pWLoop), rCost, nOut,
115730 116524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
isOrdered>=0 ? isOrdered+'0' : '?');
115731 116525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115732 116526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
115733 116527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
115734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTo->rCost<=rCost ){
116528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Control reaches here if best-so-far path pTo=aTo[jj] covers the
116529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** same set of loops and has the sam isOrdered setting as the
116530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** candidate path. Check to see if the candidate should replace
116531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pTo or if the candidate should be skipped */
116532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTo->rCost<rCost || (pTo->rCost==rCost && pTo->nRow<=nOut) ){
115735 116533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef WHERETRACE_ENABLED /* 0x4 */
115736 116534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace&0x4 ){
115737 116535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(
115738 116536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Skip %s cost=%-3d,%3d order=%c",
115739 116537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wherePathName(pFrom, iLoop, pWLoop), rCost, nOut,
@@ -115741,15 +116539,17 @@
115741 116539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(" vs %s cost=%-3d,%d order=%c\n",
115742 116540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wherePathName(pTo, iLoop+1, 0), pTo->rCost, pTo->nRow,
115743 116541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->isOrdered>=0 ? pTo->isOrdered+'0' : '?');
115744 116542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115745 116543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
116544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Discard the candidate path from further consideration */
115746 116545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTo->rCost==rCost );
115747 116546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
115748 116547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115749 116548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pTo->rCost==rCost+1 );
115750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* A new and better score for a previously created equivalent path */
116549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Control reaches here if the candidate path is better than the
116550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pTo path. Replace pTo with the candidate. */
115751 116551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef WHERETRACE_ENABLED /* 0x4 */
115752 116552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace&0x4 ){
115753 116553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(
115754 116554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"Update %s cost=%-3d,%3d order=%c",
115755 116555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
wherePathName(pFrom, iLoop, pWLoop), rCost, nOut,
@@ -115763,19 +116563,24 @@
115763 116563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pWLoop is a winner. Add it to the set of best so far */
115764 116564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->maskLoop = pFrom->maskLoop | pWLoop->maskSelf;
115765 116565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->revLoop = revMask;
115766 116566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->nRow = nOut;
115767 116567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->rCost = rCost;
116568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pTo->rUnsorted = rUnsorted;
115768 116569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->isOrdered = isOrdered;
115769 116570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pTo->aLoop, pFrom->aLoop, sizeof(WhereLoop*)*iLoop);
115770 116571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTo->aLoop[iLoop] = pWLoop;
115771 116572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nTo>=mxChoice ){
115772 116573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxI = 0;
115773 116574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxCost = aTo[0].rCost;
116575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mxUnsorted = aTo[0].nRow;
115774 116576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(jj=1, pTo=&aTo[1]; jj<mxChoice; jj++, pTo++){
115775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pTo->rCost>mxCost ){
116577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTo->rCost>mxCost
116578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (pTo->rCost==mxCost && pTo->rUnsorted>mxUnsorted)
116579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
115776 116580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxCost = pTo->rCost;
116581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mxUnsorted = pTo->rUnsorted;
115777 116582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mxI = jj;
115778 116583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115779 116584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115780 116585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
115781 116586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -115909,11 +116714,11 @@
115909 116714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->rRun = 33; /* 33==sqlite3LogEst(10) */
115910 116715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
115911 116716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pIdx=pTab->pIndex; pIdx; pIdx=pIdx->pNext){
115912 116717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLoop->aLTermSpace==pLoop->aLTerm );
115913 116718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ArraySize(pLoop->aLTermSpace)==4 );
115914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx->onError==OE_None
116719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !IsUniqueIndex(pIdx)
115915 116720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pIdx->pPartIdxWhere!=0
115916 116721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pIdx->nKeyCol>ArraySize(pLoop->aLTermSpace)
115917 116722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
) continue;
115918 116723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(j=0; j<pIdx->nKeyCol; j++){
115919 116724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm = findTerm(pWC, iCur, pIdx->aiColumn[j], 0, WO_EQ, pIdx);
@@ -116399,10 +117204,11 @@
116399 117204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116400 117205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = OP_OpenWrite;
116401 117206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->aiCurOnePass[1] = iIndexCur;
116402 117207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( iIdxCur && (wctrlFlags & WHERE_ONETABLE_ONLY)!=0 ){
116403 117208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIndexCur = iIdxCur;
117209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( wctrlFlags & WHERE_REOPEN_IDX ) op = OP_ReopenIdx;
116404 117210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
116405 117211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iIndexCur = pParse->nTab++;
116406 117212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
116407 117213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel->iIdxCur = iIndexCur;
116408 117214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pIx->pSchema==pTab->pSchema );
@@ -120723,10 +121529,16 @@
120723 121529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( z[0]=='0' ); testcase( z[0]=='1' ); testcase( z[0]=='2' );
120724 121530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( z[0]=='3' ); testcase( z[0]=='4' ); testcase( z[0]=='5' );
120725 121531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( z[0]=='6' ); testcase( z[0]=='7' ); testcase( z[0]=='8' );
120726 121532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( z[0]=='9' );
120727 121533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*tokenType = TK_INTEGER;
121534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_HEX_INTEGER
121535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z[0]=='0' && (z[1]=='x' || z[1]=='X') && sqlite3Isxdigit(z[2]) ){
121536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=3; sqlite3Isxdigit(z[i]); i++){}
121537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return i;
121538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
121539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
120728 121540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; sqlite3Isdigit(z[i]); i++){}
120729 121541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_FLOATING_POINT
120730 121542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( z[i]=='.' ){
120731 121543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i++;
120732 121544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( sqlite3Isdigit(z[i]) ){ i++; }
@@ -122170,10 +122982,12 @@
122170 122982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
122171 122983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Close an existing SQLite database
122172 122984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
122173 122985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int sqlite3Close(sqlite3 *db, int forceZombie){
122174 122986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db ){
122987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* EVIDENCE-OF: R-63257-11740 Calling sqlite3_close() or
122988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_close_v2() with a NULL pointer argument is a harmless no-op. */
122175 122989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
122176 122990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
122177 122991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !sqlite3SafetyCheckSickOrOk(db) ){
122178 122992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_MISUSE_BKPT;
122179 122993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -122399,11 +123213,11 @@
122399 123213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
122400 123214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
122401 123215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return a static string containing the name corresponding to the error code
122402 123216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** specified in the argument.
122403 123217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
122404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_TEST)
123218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if (defined(SQLITE_DEBUG) && SQLITE_OS_WIN) || defined(SQLITE_TEST)
122405 123219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3ErrName(int rc){
122406 123220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zName = 0;
122407 123221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, origRc = rc;
122408 123222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<2 && zName==0; i++, rc &= 0xff){
122409 123223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( rc ){
@@ -122434,11 +123248,10 @@
122434 123248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_TRUNCATE: zName = "SQLITE_IOERR_TRUNCATE"; break;
122435 123249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_FSTAT: zName = "SQLITE_IOERR_FSTAT"; break;
122436 123250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_UNLOCK: zName = "SQLITE_IOERR_UNLOCK"; break;
122437 123251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_RDLOCK: zName = "SQLITE_IOERR_RDLOCK"; break;
122438 123252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_DELETE: zName = "SQLITE_IOERR_DELETE"; break;
122439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case SQLITE_IOERR_BLOCKED: zName = "SQLITE_IOERR_BLOCKED"; break;
122440 123253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_NOMEM: zName = "SQLITE_IOERR_NOMEM"; break;
122441 123254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_ACCESS: zName = "SQLITE_IOERR_ACCESS"; break;
122442 123255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_CHECKRESERVEDLOCK:
122443 123256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = "SQLITE_IOERR_CHECKRESERVEDLOCK"; break;
122444 123257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_IOERR_LOCK: zName = "SQLITE_IOERR_LOCK"; break;
@@ -123419,11 +124232,11 @@
123419 124232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_MAX_COMPOUND_SELECT,
123420 124233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_MAX_VDBE_OP,
123421 124234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_MAX_FUNCTION_ARG,
123422 124235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_MAX_ATTACHED,
123423 124236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_MAX_LIKE_PATTERN_LENGTH,
123424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_MAX_VARIABLE_NUMBER,
124237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_MAX_VARIABLE_NUMBER, /* IMP: R-38091-32352 */
123425 124238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_MAX_TRIGGER_DEPTH,
123426 124239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
123427 124240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
123428 124241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
123429 124242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Make sure the hard limits are set to reasonable values
@@ -123444,12 +124257,12 @@
123444 124257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error SQLITE_MAX_VDBE_OP must be at least 40
123445 124258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
123446 124259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_FUNCTION_ARG<0 || SQLITE_MAX_FUNCTION_ARG>1000
123447 124260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error SQLITE_MAX_FUNCTION_ARG must be between 0 and 1000
123448 124261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
123449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>62
123450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # error SQLITE_MAX_ATTACHED must be between 0 and 62
124262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if SQLITE_MAX_ATTACHED<0 || SQLITE_MAX_ATTACHED>125
124263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # error SQLITE_MAX_ATTACHED must be between 0 and 125
123451 124264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
123452 124265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_LIKE_PATTERN_LENGTH<1
123453 124266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# error SQLITE_MAX_LIKE_PATTERN_LENGTH must be at least 1
123454 124267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
123455 124268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_MAX_COLUMN>32767
@@ -124704,10 +125517,20 @@
124704 125517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3GlobalConfig.pVdbeBranchArg = va_arg(ap,void*);
124705 125518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
124706 125519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
124707 125520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124708 125521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
125522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* sqlite3_test_control(SQLITE_TESTCTRL_ISINIT);
125523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
125524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return SQLITE_OK if SQLite has been initialized and SQLITE_ERROR if
125525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not.
125526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
125527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_TESTCTRL_ISINIT: {
125528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3GlobalConfig.isInit==0 ) rc = SQLITE_ERROR;
125529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
125530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
125531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
124709 125532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124710 125533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
124711 125534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_BUILTIN_TEST */
124712 125535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
124713 125536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -124752,11 +125575,11 @@
124752 125575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zParam, /* URI parameter sought */
124753 125576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 bDflt /* return if parameter is missing */
124754 125577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
124755 125578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = sqlite3_uri_parameter(zFilename, zParam);
124756 125579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 v;
124757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( z && sqlite3Atoi64(z, &v, sqlite3Strlen30(z), SQLITE_UTF8)==SQLITE_OK ){
125580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( z && sqlite3DecOrHexToI64(z, &v)==SQLITE_OK ){
124758 125581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bDflt = v;
124759 125582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124760 125583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return bDflt;
124761 125584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
124762 125585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -126283,11 +127106,11 @@
126283 127106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126284 127107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* fts3_tokenize_vtab.c */
126285 127108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3InitTok(sqlite3*, Fts3Hash *);
126286 127109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
126287 127110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* fts3_unicode2.c (functions generated by parsing unicode text files) */
126288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_FTS4_UNICODE61
127111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_FTS3_UNICODE
126289 127112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FtsUnicodeFold(int, int);
126290 127113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FtsUnicodeIsalnum(int);
126291 127114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3FtsUnicodeIsdiacritic(int);
126292 127115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
126293 127116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -129753,11 +130576,11 @@
129753 130576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to by the argument to point to the "simple" tokenizer implementation.
129754 130577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** And so on.
129755 130578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
129756 130579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Fts3SimpleTokenizerModule(sqlite3_tokenizer_module const**ppModule);
129757 130580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Fts3PorterTokenizerModule(sqlite3_tokenizer_module const**ppModule);
129758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_FTS4_UNICODE61
130581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_FTS3_UNICODE
129759 130582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Fts3UnicodeTokenizer(sqlite3_tokenizer_module const**ppModule);
129760 130583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
129761 130584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_ICU
129762 130585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Fts3IcuTokenizerModule(sqlite3_tokenizer_module const**ppModule);
129763 130586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -129771,20 +130594,20 @@
129771 130594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Fts3Init(sqlite3 *db){
129772 130595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
129773 130596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Fts3Hash *pHash = 0;
129774 130597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_tokenizer_module *pSimple = 0;
129775 130598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_tokenizer_module *pPorter = 0;
129776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_FTS4_UNICODE61
130599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_FTS3_UNICODE
129777 130600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_tokenizer_module *pUnicode = 0;
129778 130601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
129779 130602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129780 130603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_ICU
129781 130604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_tokenizer_module *pIcu = 0;
129782 130605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3IcuTokenizerModule(&pIcu);
129783 130606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
129784 130607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_FTS4_UNICODE61
130608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_FTS3_UNICODE
129786 130609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Fts3UnicodeTokenizer(&pUnicode);
129787 130610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
129788 130611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129789 130612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_TEST
129790 130613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Fts3InitTerm(db);
@@ -129808,11 +130631,11 @@
129808 130631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Load the built-in tokenizers into the hash table */
129809 130632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
129810 130633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3Fts3HashInsert(pHash, "simple", 7, (void *)pSimple)
129811 130634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| sqlite3Fts3HashInsert(pHash, "porter", 7, (void *)pPorter)
129812 130635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
129813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_FTS4_UNICODE61
130636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_FTS3_UNICODE
129814 130637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| sqlite3Fts3HashInsert(pHash, "unicode61", 10, (void *)pUnicode)
129815 130638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
129816 130639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_ICU
129817 130640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pIcu && sqlite3Fts3HashInsert(pHash, "icu", 4, (void *)pIcu))
129818 130641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -143068,11 +143891,11 @@
143068 143891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
******************************************************************************
143069 143892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
143070 143893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Implementation of the "unicode" full-text-search tokenizer.
143071 143894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
143072 143895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_FTS4_UNICODE61
143896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_FTS3_UNICODE
143074 143897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143075 143898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3)
143076 143899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143077 143900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include <assert.h> */
143078 143901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include <stdlib.h> */
@@ -143284,11 +144107,11 @@
143284 144107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pNew, 0, sizeof(unicode_tokenizer));
143285 144108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->bRemoveDiacritic = 1;
143286 144109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143287 144110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; rc==SQLITE_OK && i<nArg; i++){
143288 144111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *z = azArg[i];
143289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int n = strlen(z);
144112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n = (int)strlen(z);
143290 144113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143291 144114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n==19 && memcmp("remove_diacritics=1", z, 19)==0 ){
143292 144115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->bRemoveDiacritic = 1;
143293 144116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143294 144117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( n==19 && memcmp("remove_diacritics=0", z, 19)==0 ){
@@ -143371,11 +144194,11 @@
143371 144194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *piEnd, /* OUT: Ending offset of token */
143372 144195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *piPos /* OUT: Position integer of token */
143373 144196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
143374 144197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unicode_cursor *pCsr = (unicode_cursor *)pC;
143375 144198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unicode_tokenizer *p = ((unicode_tokenizer *)pCsr->base.pTokenizer);
143376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iCode;
144199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCode = 0;
143377 144200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zOut;
143378 144201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const unsigned char *z = &pCsr->aInput[pCsr->iOff];
143379 144202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const unsigned char *zStart = z;
143380 144203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const unsigned char *zEnd;
143381 144204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const unsigned char *zTerm = &pCsr->aInput[pCsr->nInput];
@@ -143416,15 +144239,15 @@
143416 144239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( unicodeIsAlnum(p, iCode)
143417 144240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| sqlite3FtsUnicodeIsdiacritic(iCode)
143418 144241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
143419 144242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143420 144243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the output variables and return. */
143421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCsr->iOff = (z - pCsr->aInput);
144244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->iOff = (int)(z - pCsr->aInput);
143422 144245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*paToken = pCsr->zToken;
143423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pnToken = zOut - pCsr->zToken;
143424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *piStart = (zStart - pCsr->aInput);
143425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *piEnd = (zEnd - pCsr->aInput);
144246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnToken = (int)(zOut - pCsr->zToken);
144247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *piStart = (int)(zStart - pCsr->aInput);
144248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *piEnd = (int)(zEnd - pCsr->aInput);
143426 144249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*piPos = pCsr->iToken++;
143427 144250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
143428 144251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143429 144252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143430 144253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -143443,11 +144266,11 @@
143443 144266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
143444 144267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppModule = &module;
143445 144268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143446 144269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143447 144270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* !defined(SQLITE_CORE) || defined(SQLITE_ENABLE_FTS3) */
143448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* ifndef SQLITE_ENABLE_FTS4_UNICODE61 */
144271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* ifndef SQLITE_DISABLE_FTS3_UNICODE */
143449 144272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143450 144273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of fts3_unicode.c ****************************************/
143451 144274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file fts3_unicode2.c ***********************************/
143452 144275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143453 144276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2012 May 25
@@ -143464,11 +144287,11 @@
143464 144287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143465 144288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143466 144289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** DO NOT EDIT THIS MACHINE GENERATED FILE.
143467 144290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
143468 144291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_ENABLE_FTS4_UNICODE61)
144292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_DISABLE_FTS3_UNICODE
143470 144293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4)
143471 144294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143472 144295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include <assert.h> */
143473 144296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143474 144297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -143488,11 +144311,11 @@
143488 144311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the size of the range (always at least 1). In other words, the value
143489 144312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ((C<<22) + N) represents a range of N codepoints starting with codepoint
143490 144313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** C. It is not possible to represent a range larger than 1023 codepoints
143491 144314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using this format.
143492 144315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
143493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const static unsigned int aEntry[] = {
144316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static const unsigned int aEntry[] = {
143494 144317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0x00000030, 0x0000E807, 0x00016C06, 0x0001EC2F, 0x0002AC07,
143495 144318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0x0002D001, 0x0002D803, 0x0002EC01, 0x0002FC01, 0x00035C01,
143496 144319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0x0003DC01, 0x000B0804, 0x000B480E, 0x000B9407, 0x000BB401,
143497 144320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0x000BBC81, 0x000DD401, 0x000DF801, 0x000E1002, 0x000E1C01,
143498 144321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0x000FD801, 0x00120808, 0x00156806, 0x00162402, 0x00163C01,
@@ -143580,11 +144403,11 @@
143580 144403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143581 144404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( c<128 ){
143582 144405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return ( (aAscii[c >> 5] & (1 << (c & 0x001F)))==0 );
143583 144406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( c<(1<<22) ){
143584 144407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int key = (((unsigned int)c)<<10) | 0x000003FF;
143585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iRes;
144408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iRes = 0;
143586 144409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iHi = sizeof(aEntry)/sizeof(aEntry[0]) - 1;
143587 144410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iLo = 0;
143588 144411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( iHi>=iLo ){
143589 144412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTest = (iHi + iLo) / 2;
143590 144413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( key >= aEntry[iTest] ){
@@ -143651,11 +144474,11 @@
143651 144474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iHi = iTest-1;
143652 144475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143653 144476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143654 144477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( key>=aDia[iRes] );
143655 144478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return ((c > (aDia[iRes]>>3) + (aDia[iRes]&0x07)) ? c : (int)aChar[iRes]);
143656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- };
144479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143657 144480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143658 144481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143659 144482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143660 144483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the argument interpreted as a unicode codepoint
143661 144484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is a diacritical modifier character.
@@ -143811,11 +144634,11 @@
143811 144634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143812 144635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143813 144636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return ret;
143814 144637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143815 144638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* defined(SQLITE_ENABLE_FTS3) || defined(SQLITE_ENABLE_FTS4) */
143816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* !defined(SQLITE_ENABLE_FTS4_UNICODE61) */
144639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !defined(SQLITE_DISABLE_FTS3_UNICODE) */
143817 144640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143818 144641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of fts3_unicode2.c ***************************************/
143819 144642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file rtree.c *******************************************/
143820 144643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143821 144644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2001 September 15
@@ -145348,13 +146171,17 @@
145348 146171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
145349 146172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCell = 0;
145350 146173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145351 146174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rtreeReference(pRtree);
145352 146175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
146176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Reset the cursor to the same state as rtreeOpen() leaves it in. */
145353 146177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeCursorConstraints(pCsr);
146178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pCsr->aPoint);
146179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pCsr, 0, sizeof(RtreeCursor));
146180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCsr->base.pVtab = (sqlite3_vtab*)pRtree;
146181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
145354 146182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCsr->iStrategy = idxNum;
145355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
145356 146183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( idxNum==1 ){
145357 146184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Special case - lookup by rowid. */
145358 146185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeNode *pLeaf; /* Leaf on which the required cell resides */
145359 146186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
RtreeSearchPoint *p; /* Search point for the the leaf */
145360 146187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 iRowid = sqlite3_value_int64(argv[0]);
145361 146188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!