@@ -452,11 +452,11 @@
452 452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
453 453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [sqlite_version()] and [sqlite_source_id()].
454 454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
455 455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION "3.41.0"
456 456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_VERSION_NUMBER 3041000
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2022-12-05 02:52:37 1b779afa3ed2f35a110e460fc6ed13cba744db85b9924149ab028b100d1e1e12"
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SOURCE_ID "2022-12-15 15:37:52 751e344f4cd2045caf97920cc9f4571caf0de1ba83b94ded902a03b36c10a389"
458 458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
459 459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
460 460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Run-Time Library Version Numbers
461 461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: sqlite3_version sqlite3_sourceid
462 462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -867,10 +867,11 @@
867 867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_CONSTRAINT_ROWID (SQLITE_CONSTRAINT |(10<<8))
868 868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_CONSTRAINT_PINNED (SQLITE_CONSTRAINT |(11<<8))
869 869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_CONSTRAINT_DATATYPE (SQLITE_CONSTRAINT |(12<<8))
870 870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8))
871 871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8))
872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_NOTICE_RBU (SQLITE_NOTICE | (3<<8))
872 873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8))
873 874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8))
874 875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_OK_LOAD_PERMANENTLY (SQLITE_OK | (1<<8))
875 876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_OK_SYMLINK (SQLITE_OK | (2<<8)) /* internal use only */
876 877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -2488,11 +2489,11 @@
2488 2489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_DBCONFIG_LOOKASIDE is not a multiple of 8, it is internally
2489 2490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** rounded down to the next smaller multiple of 8. ^(The lookaside memory
2490 2491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** configuration for a database connection can only be changed when that
2491 2492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** connection is not currently using lookaside memory, or in other words
2492 2493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** when the "current value" returned by
2493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [sqlite3_db_status](D,[SQLITE_CONFIG_LOOKASIDE],...) is zero.
2494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_db_status](D,[SQLITE_DBSTATUS_LOOKASIDE_USED],...) is zero.
2494 2495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Any attempt to change the lookaside memory configuration when lookaside
2495 2496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** memory is in use leaves the configuration unchanged and returns
2496 2497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [SQLITE_BUSY].)^</dd>
2497 2498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2498 2499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[SQLITE_DBCONFIG_ENABLE_FKEY]]
@@ -2638,12 +2639,16 @@
2638 2639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 1, 0);
2639 2640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> [sqlite3_exec](db, "[VACUUM]", 0, 0, 0);
2640 2641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> sqlite3_db_config(db, SQLITE_DBCONFIG_RESET_DATABASE, 0, 0);
2641 2642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ol>
2642 2643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Because resetting a database is destructive and irreversible, the
2643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** process requires the use of this obscure API and multiple steps to help
2644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ensure that it does not happen by accident.
2644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** process requires the use of this obscure API and multiple steps to
2645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** help ensure that it does not happen by accident. Because this
2646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** feature must be capable of resetting corrupt databases, and
2647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** shutting down virtual tables may require access to that corrupt
2648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** storage, the library must abandon any installed virtual tables
2649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** without calling their xDestroy() methods.
2645 2650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
2646 2651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[SQLITE_DBCONFIG_DEFENSIVE]] <dt>SQLITE_DBCONFIG_DEFENSIVE</dt>
2647 2652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>The SQLITE_DBCONFIG_DEFENSIVE option activates or deactivates the
2648 2653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** "defensive" flag for a database connection. When the defensive
2649 2654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** flag is enabled, language features that allow ordinary SQL to
@@ -7318,19 +7323,10 @@
7318 7323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^This interface disables all automatic extensions previously
7319 7324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** registered using [sqlite3_auto_extension()].
7320 7325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7321 7326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_reset_auto_extension(void);
7322 7327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
7324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The interface to the virtual-table mechanism is currently considered
7325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to be experimental. The interface might change in incompatible ways.
7326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If this is a problem for you, do not use the interface at this time.
7327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
7328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** When the virtual-table mechanism stabilizes, we will declare the
7329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** interface fixed, support it indefinitely, and remove this comment.
7330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
7331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
7332 7328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
7333 7329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Structures used by the virtual table interface
7334 7330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7335 7331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct sqlite3_vtab sqlite3_vtab;
7336 7332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct sqlite3_index_info sqlite3_index_info;
@@ -7568,11 +7564,11 @@
7568 7564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7569 7565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The collating sequence to be used for comparison can be found using
7570 7566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the [sqlite3_vtab_collation()] interface. For most real-world virtual
7571 7567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** tables, the collating sequence of constraints does not matter (for example
7572 7568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** because the constraints are numeric) and so the sqlite3_vtab_collation()
7573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** interface is no commonly needed.
7569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** interface is not commonly needed.
7574 7570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7575 7571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_INDEX_CONSTRAINT_EQ 2
7576 7572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_INDEX_CONSTRAINT_GT 4
7577 7573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_INDEX_CONSTRAINT_LE 8
7578 7574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_INDEX_CONSTRAINT_LT 16
@@ -7727,20 +7723,10 @@
7727 7723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** purpose is to be a placeholder function that can be overloaded
7728 7724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by a [virtual table].
7729 7725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
7730 7726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_overload_function(sqlite3*, const char *zFuncName, int nArg);
7731 7727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
7732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
7733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The interface to the virtual-table mechanism defined above (back up
7734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to a comment remarkably similar to this one) is currently considered
7735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** to be experimental. The interface might change in incompatible ways.
7736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If this is a problem for you, do not use the interface at this time.
7737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
7738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** When the virtual-table mechanism stabilizes, we will declare the
7739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** interface fixed, support it indefinitely, and remove this comment.
7740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
7741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
7742 7728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
7743 7729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: A Handle To An Open BLOB
7744 7730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** KEYWORDS: {BLOB handle} {BLOB handles}
7745 7731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
7746 7732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An instance of this object represents an open BLOB on which
@@ -9940,11 +9926,11 @@
9940 9926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** statement that was passed into [sqlite3_declare_vtab()], then the
9941 9927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** name of that alternative collating sequence is returned.
9942 9928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li><p> Otherwise, "BINARY" is returned.
9943 9929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ol>
9944 9930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
9945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API SQLITE_EXPERIMENTAL const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
9931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API const char *sqlite3_vtab_collation(sqlite3_index_info*,int);
9946 9932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
9947 9933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
9948 9934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Determine if a virtual table query is DISTINCT
9949 9935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** METHOD: sqlite3_index_info
9950 9936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -10209,10 +10195,14 @@
10209 10195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10210 10196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** When the value returned to V is a string, space to hold that string is
10211 10197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** managed by the prepared statement S and will be automatically freed when
10212 10198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** S is finalized.
10213 10199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Not all values are available for all query elements. When a value is
10201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not available, the output variable is set to -1 if the value is numeric,
10202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or to NULL if it is a string (SQLITE_SCANSTAT_NAME).
10203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
10214 10204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dl>
10215 10205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[SQLITE_SCANSTAT_NLOOP]] <dt>SQLITE_SCANSTAT_NLOOP</dt>
10216 10206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>^The [sqlite3_int64] variable pointed to by the V parameter will be
10217 10207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** set to the total number of times that the X-th loop has run.</dd>
10218 10208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -10236,30 +10226,44 @@
10236 10226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** [[SQLITE_SCANSTAT_EXPLAIN]] <dt>SQLITE_SCANSTAT_EXPLAIN</dt>
10237 10227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>^The "const char *" variable pointed to by the V parameter will be set
10238 10228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to a zero-terminated UTF-8 string containing the [EXPLAIN QUERY PLAN]
10239 10229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** description for the X-th loop.
10240 10230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECT</dt>
10231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [[SQLITE_SCANSTAT_SELECTID]] <dt>SQLITE_SCANSTAT_SELECTID</dt>
10242 10232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <dd>^The "int" variable pointed to by the V parameter will be set to the
10243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** "select-id" for the X-th loop. The select-id identifies which query or
10244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** subquery the loop is part of. The main query has a select-id of zero.
10245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The select-id is the same value as is output in the first column
10246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of an [EXPLAIN QUERY PLAN] query.
10233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** id for the X-th query plan element. The id value is unique within the
10234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** statement. The select-id is the same value as is output in the first
10235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** column of an [EXPLAIN QUERY PLAN] query.
10247 10236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </dl>
10237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
10238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [[SQLITE_SCANSTAT_PARENTID]] <dt>SQLITE_SCANSTAT_PARENTID</dt>
10239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <dd>The "int" variable pointed to by the V parameter will be set to the
10240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the id of the parent of the current query element, if applicable, or
10241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to zero if the query element has no parent. This is the same value as
10242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returned in the second column of an [EXPLAIN QUERY PLAN] query.
10243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
10244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [[SQLITE_SCANSTAT_NCYCLE]] <dt>SQLITE_SCANSTAT_NCYCLE</dt>
10245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <dd>The sqlite3_int64 output value is set to the number of cycles,
10246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** according to the processor time-stamp counter, that elapsed while the
10247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** query element was being processed. This value is not available for
10248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** all query elements - if it is unavailable the output variable is
10249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** set to -1.
10248 10250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
10249 10251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCANSTAT_NLOOP 0
10250 10252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCANSTAT_NVISIT 1
10251 10253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCANSTAT_EST 2
10252 10254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCANSTAT_NAME 3
10253 10255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCANSTAT_EXPLAIN 4
10254 10256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SCANSTAT_SELECTID 5
10257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SCANSTAT_PARENTID 6
10258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SCANSTAT_NCYCLE 7
10255 10259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10256 10260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10257 10261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Prepared Statement Scan Status
10258 10262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** METHOD: sqlite3_stmt
10259 10263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This interface returns information about the predicted and measured
10264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** These interfaces return information about the predicted and measured
10261 10265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** performance for pStmt. Advanced applications can use this
10262 10266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface to compare the predicted and the measured performance and
10263 10267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** issue warnings and/or rerun [ANALYZE] if discrepancies are found.
10264 10268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10265 10269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Since this interface is expected to be rarely used, it is only
@@ -10266,32 +10270,51 @@
10266 10270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** available if SQLite is compiled using the [SQLITE_ENABLE_STMT_SCANSTATUS]
10267 10271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** compile-time option.
10268 10272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10269 10273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The "iScanStatusOp" parameter determines which status information to return.
10270 10274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The "iScanStatusOp" must be one of the [scanstatus options] or the behavior
10271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of this interface is undefined.
10272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^The requested measurement is written into a variable pointed to by
10273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the "pOut" parameter.
10274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Parameter "idx" identifies the specific loop to retrieve statistics for.
10275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Loops are numbered starting from zero. ^If idx is out of range - less than
10276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** zero or greater than or equal to the total number of loops used to implement
10277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the statement - a non-zero value is returned and the variable that pOut
10278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** points to is unchanged.
10275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of this interface is undefined. ^The requested measurement is written into
10276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a variable pointed to by the "pOut" parameter.
10279 10277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^Statistics might not be available for all loops in all statements. ^In cases
10281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** where there exist loops with no available statistics, this function behaves
10282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** as if the loop did not exist - it returns non-zero and leave the variable
10283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that pOut points to unchanged.
10278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The "flags" parameter must be passed a mask of flags. At present only
10279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** one flag is defined - SQLITE_SCANSTAT_COMPLEX. If SQLITE_SCANSTAT_COMPLEX
10280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is specified, then status information is available for all elements
10281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of a query plan that are reported by "EXPLAIN QUERY PLAN" output. If
10282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** SQLITE_SCANSTAT_COMPLEX is not specified, then only query plan elements
10283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that correspond to query loops (the "SCAN..." and "SEARCH..." elements of
10284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the EXPLAIN QUERY PLAN output) are available. Invoking API
10285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_stmt_scanstatus() is equivalent to calling
10286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_stmt_scanstatus_v2() with a zeroed flags parameter.
10287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
10288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Parameter "idx" identifies the specific query element to retrieve statistics
10289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for. Query elements are numbered starting from zero. A value of -1 may be
10290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to query for statistics regarding the entire query. ^If idx is out of range
10291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** - less than -1 or greater than or equal to the total number of query
10292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** elements used to implement the statement - a non-zero value is returned and
10293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the variable that pOut points to is unchanged.
10284 10294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
10285 10295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_stmt_scanstatus_reset()]
10286 10296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
10287 10297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_stmt_scanstatus(
10288 10298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
10289 10299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idx, /* Index of loop to report on */
10290 10300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
10291 10301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pOut /* Result written here */
10292 10302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
10303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_stmt_scanstatus_v2(
10304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt, /* Prepared statement for which info desired */
10305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int idx, /* Index of loop to report on */
10306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iScanStatusOp, /* Information desired. SQLITE_SCANSTAT_* */
10307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int flags, /* Mask of flags defined below */
10308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pOut /* Result written here */
10309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
10310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
10311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
10312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CAPI3REF: Prepared Statement Scan Status
10313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** KEYWORDS: {scan status flags}
10314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
10315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_SCANSTAT_COMPLEX 0x0001
10293 10316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
10294 10317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
10295 10318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Zero Scan-Status Counters
10296 10319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** METHOD: sqlite3_stmt
10297 10320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -15901,17 +15924,17 @@
15901 15924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
15902 15925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} p4;
15903 15926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
15904 15927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zComment; /* Comment to improve readability */
15905 15928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
15906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef VDBE_PROFILE
15907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u32 cnt; /* Number of times this instruction was executed */
15908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u64 cycles; /* Total time spent executing this instruction */
15909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
15910 15929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_VDBE_COVERAGE
15911 15930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 iSrcLine; /* Source-code line that generated this opcode
15912 15931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** with flags in the upper 8 bits */
15932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
15933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
15934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 nExec;
15935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 nCycle;
15913 15936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
15914 15937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
15915 15938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct VdbeOp VdbeOp;
15916 15939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
15917 15940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -16199,33 +16222,34 @@
16199 16222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLG_IN1 0x02 /* in1: P1 is an input */
16200 16223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLG_IN2 0x04 /* in2: P2 is an input */
16201 16224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLG_IN3 0x08 /* in3: P3 is an input */
16202 16225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLG_OUT2 0x10 /* out2: P2 is an output */
16203 16226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLG_OUT3 0x20 /* out3: P3 is an output */
16227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define OPFLG_NCYCLE 0x40 /* ncycle:Cycles count against P1 */
16204 16228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define OPFLG_INITIALIZER {\
16205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00,\
16229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 0 */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x41, 0x00,\
16206 16230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 8 */ 0x01, 0x01, 0x01, 0x01, 0x03, 0x03, 0x01, 0x01,\
16207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x09, 0x09, 0x09,\
16208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 24 */ 0x09, 0x01, 0x09, 0x09, 0x09, 0x09, 0x09, 0x09,\
16209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 32 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,\
16210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 40 */ 0x01, 0x01, 0x01, 0x26, 0x26, 0x01, 0x23, 0x0b,\
16231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 16 */ 0x03, 0x03, 0x01, 0x12, 0x01, 0x49, 0x49, 0x49,\
16232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 24 */ 0x49, 0x01, 0x49, 0x49, 0x49, 0x49, 0x49, 0x49,\
16233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 32 */ 0x41, 0x01, 0x01, 0x01, 0x41, 0x01, 0x41, 0x41,\
16234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 40 */ 0x41, 0x41, 0x41, 0x26, 0x26, 0x41, 0x23, 0x0b,\
16211 16235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 48 */ 0x01, 0x01, 0x03, 0x03, 0x0b, 0x0b, 0x0b, 0x0b,\
16212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x01,\
16236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 56 */ 0x0b, 0x0b, 0x01, 0x03, 0x03, 0x03, 0x01, 0x41,\
16213 16237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 64 */ 0x01, 0x00, 0x00, 0x02, 0x02, 0x08, 0x00, 0x10,\
16214 16238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 72 */ 0x10, 0x10, 0x00, 0x10, 0x00, 0x10, 0x10, 0x00,\
16215 16239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 80 */ 0x00, 0x10, 0x10, 0x00, 0x00, 0x00, 0x02, 0x02,\
16216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x00, 0x00,\
16217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x00, 0x26, 0x26,\
16240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 88 */ 0x02, 0x00, 0x00, 0x12, 0x1e, 0x20, 0x40, 0x00,\
16241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 96 */ 0x00, 0x00, 0x10, 0x10, 0x00, 0x40, 0x26, 0x26,\
16218 16242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 104 */ 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26, 0x26,\
16219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 112 */ 0x00, 0x00, 0x12, 0x00, 0x00, 0x10, 0x00, 0x00,\
16220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10,\
16221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10,\
16222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 136 */ 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x10, 0x00,\
16243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 112 */ 0x40, 0x00, 0x12, 0x40, 0x40, 0x10, 0x40, 0x00,\
16244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 120 */ 0x00, 0x00, 0x40, 0x00, 0x40, 0x40, 0x10, 0x10,\
16245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 128 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x50,\
16246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 136 */ 0x00, 0x40, 0x04, 0x04, 0x00, 0x40, 0x50, 0x40,\
16223 16247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 144 */ 0x10, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00,\
16224 16248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 152 */ 0x00, 0x10, 0x00, 0x00, 0x06, 0x10, 0x00, 0x04,\
16225 16249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 160 */ 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
16226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00,\
16250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* 168 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x50, 0x40,\
16227 16251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 176 */ 0x00, 0x10, 0x10, 0x02, 0x00, 0x00, 0x00, 0x00,\
16228 16252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* 184 */ 0x00, 0x00, 0x00,}
16229 16253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
16230 16254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The resolve3P2Values() routine is able to run faster if it knows
16231 16255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the value of the largest JUMP opcode. The smaller the maximum
@@ -16276,18 +16300,24 @@
16276 16300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3VdbeVerifyAbortable(A,B)
16277 16301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3VdbeNoJumpsOutsideSubrtn(A,B,C,D)
16278 16302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
16279 16303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE VdbeOp *sqlite3VdbeAddOpList(Vdbe*, int nOp, VdbeOpList const *aOp,int iLineno);
16280 16304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_EXPLAIN
16281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeExplain(Parse*,u8,const char*,...);
16305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeExplain(Parse*,u8,const char*,...);
16282 16306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeExplainPop(Parse*);
16283 16307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeExplainParent(Parse*);
16284 16308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ExplainQueryPlan(P) sqlite3VdbeExplain P
16309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifdef SQLITE_ENABLE_STMT_SCANSTATUS
16310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define ExplainQueryPlan2(V,P) (V = sqlite3VdbeExplain P)
16311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # else
16312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define ExplainQueryPlan2(V,P) ExplainQueryPlan(P)
16313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
16285 16314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ExplainQueryPlanPop(P) sqlite3VdbeExplainPop(P)
16286 16315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ExplainQueryPlanParent(P) sqlite3VdbeExplainParent(P)
16287 16316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
16288 16317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ExplainQueryPlan(P)
16318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define ExplainQueryPlan2(V,P)
16289 16319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ExplainQueryPlanPop(P)
16290 16320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define ExplainQueryPlanParent(P) 0
16291 16321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define sqlite3ExplainBreakpoint(A,B) /*no-op*/
16292 16322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
16293 16323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_EXPLAIN)
@@ -16456,12 +16486,16 @@
16456 16486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define VDBE_OFFSET_LINENO(x) 0
16457 16487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
16458 16488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
16459 16489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
16460 16490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeScanStatus(Vdbe*, int, int, int, LogEst, const char*);
16491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeScanStatusRange(Vdbe*, int, int, int);
16492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeScanStatusCounters(Vdbe*, int, int, int);
16461 16493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
16462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define sqlite3VdbeScanStatus(a,b,c,d,e)
16494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeScanStatus(a,b,c,d,e,f)
16495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeScanStatusRange(a,b,c,d)
16496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3VdbeScanStatusCounters(a,b,c,d)
16463 16497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
16464 16498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
16465 16499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
16466 16500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, VdbeOp*);
16467 16501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -17254,10 +17288,11 @@
17254 17288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_BalancedMerge 0x00200000 /* Balance multi-way merges */
17255 17289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_ReleaseReg 0x00400000 /* Use OP_ReleaseReg for testing */
17256 17290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FlttnUnionAll 0x00800000 /* Disable the UNION ALL flattener */
17257 17291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* TH3 expects this value ^^^^^^^^^^ See flatten04.test */
17258 17292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_IndexedExpr 0x01000000 /* Pull exprs from index when able */
17293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_Coroutines 0x02000000 /* Co-routines for subqueries */
17259 17294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_AllOpts 0xffffffff /* All optimizations */
17260 17295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
17261 17296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
17262 17297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for testing whether or not optimizations are enabled or disabled.
17263 17298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -18875,10 +18910,11 @@
18875 18910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_UFSrcCheck 0x0800000 /* Check pSrc as required by UPDATE...FROM */
18876 18911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_PushDown 0x1000000 /* SELECT has be modified by push-down opt */
18877 18912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_MultiPart 0x2000000 /* Has multiple incompatible PARTITIONs */
18878 18913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_CopyCte 0x4000000 /* SELECT statement is a copy of a CTE */
18879 18914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SF_OrderByReqd 0x8000000 /* The ORDER BY clause may not be omitted */
18915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SF_UpdateFrom 0x10000000 /* Query originates with UPDATE FROM */
18880 18916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18881 18917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* True if S exists and has SF_NestedFrom */
18882 18918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define IsNestedFrom(S) ((S)!=0 && ((S)->selFlags&SF_NestedFrom)!=0)
18883 18919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18884 18920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -18983,11 +19019,11 @@
18983 19019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 eDest; /* How to dispose of the results. One of SRT_* above. */
18984 19020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSDParm; /* A parameter used by the eDest disposal method */
18985 19021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSDParm2; /* A second parameter for the eDest disposal method */
18986 19022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSdst; /* Base register where results are written */
18987 19023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nSdst; /* Number of registers allocated */
18988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char *zAffSdst; /* Affinity used for SRT_Set, SRT_Table, and similar */
19024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zAffSdst; /* Affinity used for SRT_Set */
18989 19025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pOrderBy; /* Key columns for SRT_Queue and SRT_DistQueue */
18990 19026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
18991 19027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18992 19028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
18993 19029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** During code generation of statements that do inserts into AUTOINCREMENT
@@ -20088,11 +20124,11 @@
20088 20124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ColumnSetColl(sqlite3*,Column*,const char*zColl);
20089 20125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3ColumnColl(Column*);
20090 20126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3DeleteColumnNames(sqlite3*,Table*);
20091 20127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3GenerateColumnNames(Parse *pParse, Select *pSelect);
20092 20128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ColumnsFromExprList(Parse*,ExprList*,i16*,Column**);
20093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(Parse*,Table*,Select*,char);
20129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(Parse*,Table*,Select*,char);
20094 20130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Table *sqlite3ResultSetOfSelect(Parse*,Select*,char);
20095 20131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3OpenSchemaTable(Parse *, int);
20096 20132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE Index *sqlite3PrimaryKeyIndex(Table*);
20097 20133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE i16 sqlite3TableColumnToIndex(Index*, i16);
20098 20134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_OMIT_GENERATED_COLUMNS
@@ -20459,10 +20495,11 @@
20459 20495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3TableAffinity(Vdbe*, Table*, int);
20460 20496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3CompareAffinity(const Expr *pExpr, char aff2);
20461 20497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3IndexAffinityOk(const Expr *pExpr, char idx_affinity);
20462 20498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3TableColumnAffinity(const Table*,int);
20463 20499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pExpr);
20500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3ExprDataType(const Expr *pExpr);
20464 20501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
20465 20502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char*, i64*);
20466 20503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...);
20467 20504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3Error(sqlite3*,int);
20468 20505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3ErrorClear(sqlite3*);
@@ -20975,11 +21012,13 @@
20975 21012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20976 21013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL)
20977 21014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3KvvfsInit(void);
20978 21015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20979 21016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(VDBE_PROFILE) || defined(SQLITE_PERFORMANCE_TRACE)
21017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(VDBE_PROFILE) \
21018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || defined(SQLITE_PERFORMANCE_TRACE) \
21019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || defined(SQLITE_ENABLE_STMT_SCANSTATUS)
20981 21020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE sqlite3_uint64 sqlite3Hwtime(void);
20982 21021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20983 21022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20984 21023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITEINT_H */
20985 21024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -22464,11 +22503,10 @@
22464 22503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct VdbeFrame VdbeFrame;
22465 22504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct VdbeFrame {
22466 22505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v; /* VM this frame belongs to */
22467 22506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeFrame *pParent; /* Parent of this frame, or NULL if parent is main */
22468 22507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Op *aOp; /* Program instructions for parent frame */
22469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 *anExec; /* Event counters from parent frame */
22470 22508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *aMem; /* Array of memory cells for parent frame */
22471 22509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor **apCsr; /* Array of Vdbe cursors for parent frame */
22472 22510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *aOnce; /* Bitmask used by OP_Once */
22473 22511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *token; /* Copy of SubProgram.token */
22474 22512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 lastRowid; /* Last insert rowid (sqlite3.lastRowid) */
@@ -22680,14 +22718,23 @@
22680 22718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
22681 22719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef unsigned bft; /* Bit Field Type */
22682 22720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
22683 22721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The ScanStatus object holds a single value for the
22684 22722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_stmt_scanstatus() interface.
22723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
22724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aAddrRange[]:
22725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This array is used by ScanStatus elements associated with EQP
22726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** notes that make an SQLITE_SCANSTAT_NCYCLE value available. It is
22727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an array of up to 3 ranges of VM addresses for which the Vdbe.anCycle[]
22728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** values should be summed to calculate the NCYCLE value. Each pair of
22729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** integer addresses is a start and end address (both inclusive) for a range
22730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** instructions. A start value of 0 indicates an empty range.
22685 22731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
22686 22732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
typedef struct ScanStatus ScanStatus;
22687 22733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ScanStatus {
22688 22734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrExplain; /* OP_Explain for loop */
22735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int aAddrRange[6];
22689 22736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrLoop; /* Address of "loops" counter */
22690 22737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrVisit; /* Address of "rows visited" counter */
22691 22738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSelectID; /* The "Select-ID" for this loop */
22692 22739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LogEst nEst; /* Estimated output rows per loop */
22693 22740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zName; /* Name of table or index */
@@ -22776,11 +22823,10 @@
22776 22823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFrame; /* Number of frames in pFrame list */
22777 22824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 expmask; /* Binding to these vars invalidates VM */
22778 22825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SubProgram *pProgram; /* Linked list of all sub-programs used by VM */
22779 22826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AuxData *pAuxData; /* Linked list of auxdata allocations */
22780 22827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
22781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 *anExec; /* Number of times each op has been executed */
22782 22828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nScan; /* Entries in aScan[] */
22783 22829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ScanStatus *aScan; /* Scan definitions for sqlite3_stmt_scanstatus() */
22784 22830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
22785 22831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
22786 22832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -35198,11 +35244,13 @@
35198 35244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35199 35245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35200 35246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35201 35247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** High-resolution hardware timer used for debugging and testing only.
35202 35248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(VDBE_PROFILE) || defined(SQLITE_PERFORMANCE_TRACE)
35249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(VDBE_PROFILE) \
35250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || defined(SQLITE_PERFORMANCE_TRACE) \
35251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || defined(SQLITE_ENABLE_STMT_SCANSTATUS)
35204 35252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Include hwtime.h in the middle of util.c *********************/
35205 35253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file hwtime.h ******************************************/
35206 35254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35207 35255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2008 May 27
35208 35256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -35251,13 +35299,13 @@
35251 35299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
35252 35300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35253 35301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__))
35254 35302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35255 35303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
__inline__ sqlite_uint64 sqlite3Hwtime(void){
35256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned long val;
35257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __asm__ __volatile__ ("rdtsc" : "=A" (val));
35258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return val;
35304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int lo, hi;
35305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
35306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (sqlite_uint64)hi << 32 | lo;
35259 35307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35260 35308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35261 35309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__))
35262 35310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35263 35311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
__inline__ sqlite_uint64 sqlite3Hwtime(void){
@@ -37442,10 +37490,13 @@
37442 37490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fd<0 ){
37443 37491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( errno==EINTR ) continue;
37444 37492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
37445 37493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
37446 37494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( fd>=SQLITE_MINIMUM_FILE_DESCRIPTOR ) break;
37495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (f & (O_EXCL|O_CREAT))==(O_EXCL|O_CREAT) ){
37496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (void)osUnlink(z);
37497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
37447 37498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
osClose(fd);
37448 37499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_log(SQLITE_WARNING,
37449 37500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"attempt to open \"%s\" as file descriptor %d", z, fd);
37450 37501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fd = -1;
37451 37502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( osOpen("/dev/null", O_RDONLY, m)<0 ) break;
@@ -51436,14 +51487,39 @@
51436 51487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemFile *pThis = (MemFile*)pFile;
51437 51488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemStore *p = pThis->pStore;
51438 51489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK;
51439 51490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eLock==pThis->eLock ) return SQLITE_OK;
51440 51491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memdbEnter(p);
51492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->nWrLock==0 || p->nWrLock==1 ); /* No more than 1 write lock */
51441 51493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eLock>SQLITE_LOCK_SHARED ){
51494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pThis->eLock>=SQLITE_LOCK_SHARED );
51442 51495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->mFlags & SQLITE_DESERIALIZE_READONLY ){
51443 51496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_READONLY;
51444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pThis->eLock<=SQLITE_LOCK_SHARED ){
51497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( eLock==SQLITE_LOCK_EXCLUSIVE ){
51498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* We never go for an EXCLUSIVE lock unless we already hold SHARED or
51499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** higher */
51500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pThis->eLock>=SQLITE_LOCK_SHARED );
51501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( pThis->eLock==SQLITE_LOCK_SHARED );
51502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
51503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Because we are holding SHARED or more, there must be at least
51504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** one read lock */
51505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->nRdLock>0 );
51506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
51507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The only way that there can be an existing write lock is if we
51508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** currently hold it. Otherwise, we would have never been able to
51509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** promote from NONE to SHARED. */
51510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->nWrLock==0 || pThis->eLock>SQLITE_LOCK_SHARED );
51511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
51512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nRdLock>1 ){
51513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Cannot take EXCLUSIVE if somebody else is holding SHARED */
51514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_BUSY;
51515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
51516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->nWrLock = 1;
51517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
51518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( ALWAYS(pThis->eLock<=SQLITE_LOCK_SHARED) ){
51519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Upgrading to RESERVED or PENDING from SHARED. Fail if any other
51520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** client has a write-lock of any kind. */
51445 51521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nWrLock ){
51446 51522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_BUSY;
51447 51523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
51448 51524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nWrLock = 1;
51449 51525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -82327,21 +82403,21 @@
82327 82403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p3 = p3;
82328 82404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p4.p = 0;
82329 82405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p4type = P4_NOTUSED;
82330 82406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
82331 82407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->zComment = 0;
82408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
82409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
82410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->nExec = 0;
82411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->nCycle = 0;
82332 82412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
82333 82413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
82334 82414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->db->flags & SQLITE_VdbeAddopTrace ){
82335 82415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbePrintOp(0, i, &p->aOp[i]);
82336 82416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
test_addop_breakpoint(i, &p->aOp[i]);
82337 82417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82338 82418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
82339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef VDBE_PROFILE
82340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOp->cycles = 0;
82341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOp->cnt = 0;
82342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
82343 82419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_VDBE_COVERAGE
82344 82420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->iSrcLine = 0;
82345 82421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
82346 82422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return i;
82347 82423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -82505,12 +82581,13 @@
82505 82581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add a new OP_Explain opcode.
82506 82582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
82507 82583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the bPush flag is true, then make this opcode the parent for
82508 82584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** subsequent Explains until sqlite3VdbeExplainPop() is called.
82509 82585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
82510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){
82511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_DEBUG
82586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3VdbeExplain(Parse *pParse, u8 bPush, const char *zFmt, ...){
82587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addr = 0;
82588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(SQLITE_DEBUG) && !defined(SQLITE_ENABLE_STMT_SCANSTATUS)
82512 82589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Always include the OP_Explain opcodes if SQLITE_DEBUG is defined.
82513 82590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** But omit them (for performance) during production builds */
82514 82591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->explain==2 )
82515 82592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
82516 82593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
@@ -82521,17 +82598,19 @@
82521 82598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_start(ap, zFmt);
82522 82599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zMsg = sqlite3VMPrintf(pParse->db, zFmt, ap);
82523 82600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
va_end(ap);
82524 82601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = pParse->pVdbe;
82525 82602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iThis = v->nOp;
82526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0,
82603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ addr = sqlite3VdbeAddOp4(v, OP_Explain, iThis, pParse->addrExplain, 0,
82527 82604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zMsg, P4_DYNAMIC);
82528 82605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExplainBreakpoint(bPush?"PUSH":"", sqlite3VdbeGetLastOp(v)->p4.z);
82529 82606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bPush){
82530 82607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->addrExplain = iThis;
82531 82608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatus(v, iThis, 0, 0, 0, 0);
82532 82610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return addr;
82533 82612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
82534 82613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
82535 82614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
82536 82615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Pop the EXPLAIN QUERY PLAN stack one level.
82537 82616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -83185,18 +83264,75 @@
83185 83264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 nByte = (p->nScan+1) * sizeof(ScanStatus);
83186 83265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ScanStatus *aNew;
83187 83266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aNew = (ScanStatus*)sqlite3DbRealloc(p->db, p->aScan, nByte);
83188 83267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aNew ){
83189 83268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ScanStatus *pNew = &aNew[p->nScan++];
83269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(pNew, 0, sizeof(ScanStatus));
83190 83270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->addrExplain = addrExplain;
83191 83271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->addrLoop = addrLoop;
83192 83272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->addrVisit = addrVisit;
83193 83273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nEst = nEst;
83194 83274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->zName = sqlite3DbStrDup(p->db, zName);
83195 83275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aScan = aNew;
83196 83276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
83197 83277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
83278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
83279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
83280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Add the range of instructions from addrStart to addrEnd (inclusive) to
83281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the set of those corresponding to the sqlite3_stmt_scanstatus() counters
83282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** associated with the OP_Explain instruction at addrExplain. The
83283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sum of the sqlite3Hwtime() values for each of these instructions
83284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will be returned for SQLITE_SCANSTAT_NCYCLE requests.
83285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
83286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeScanStatusRange(
83287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *p,
83288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrExplain,
83289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrStart,
83290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrEnd
83291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
83292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ScanStatus *pScan = 0;
83293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
83294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=p->nScan-1; ii>=0; ii--){
83295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan = &p->aScan[ii];
83296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->addrExplain==addrExplain ) break;
83297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan = 0;
83298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan ){
83300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( addrEnd<0 ) addrEnd = sqlite3VdbeCurrentAddr(p)-1;
83301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<ArraySize(pScan->aAddrRange); ii+=2){
83302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->aAddrRange[ii]==0 ){
83303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan->aAddrRange[ii] = addrStart;
83304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan->aAddrRange[ii+1] = addrEnd;
83305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
83306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
83311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
83312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Set the addresses for the SQLITE_SCANSTAT_NLOOP and SQLITE_SCANSTAT_NROW
83313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** counters for the query element associated with the OP_Explain at
83314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** addrExplain.
83315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
83316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3VdbeScanStatusCounters(
83317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Vdbe *p,
83318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrExplain,
83319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrLoop,
83320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrVisit
83321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
83322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ScanStatus *pScan = 0;
83323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
83324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=p->nScan-1; ii>=0; ii--){
83325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan = &p->aScan[ii];
83326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->addrExplain==addrExplain ) break;
83327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan = 0;
83328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan ){
83330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan->addrLoop = addrLoop;
83331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan->addrVisit = addrVisit;
83332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
83198 83334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
83199 83335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83200 83336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
83201 83337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
83202 83338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Change the value of the opcode, or P1, P2, P3, or P5 operands
@@ -84490,11 +84626,11 @@
84490 84626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
84491 84627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Rewind the VDBE back to the beginning in preparation for
84492 84628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** running it.
84493 84629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
84494 84630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
84495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
84631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_DEBUG)
84496 84632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
84497 84633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
84498 84634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p!=0 );
84499 84635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->eVdbeState==VDBE_INIT_STATE
84500 84636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| p->eVdbeState==VDBE_READY_STATE
@@ -84519,12 +84655,12 @@
84519 84655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->minWriteFileFormat = 255;
84520 84656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iStatement = 0;
84521 84657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nFkConstraint = 0;
84522 84658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef VDBE_PROFILE
84523 84659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nOp; i++){
84524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aOp[i].cnt = 0;
84525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aOp[i].cycles = 0;
84660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->aOp[i].nExec = 0;
84661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->aOp[i].nCycle = 0;
84526 84662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84527 84663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
84528 84664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84529 84665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84530 84666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -84629,24 +84765,18 @@
84629 84765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.nNeeded = 0;
84630 84766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aMem = allocSpace(&x, 0, nMem*sizeof(Mem));
84631 84767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aVar = allocSpace(&x, 0, nVar*sizeof(Mem));
84632 84768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->apArg = allocSpace(&x, 0, nArg*sizeof(Mem*));
84633 84769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->apCsr = allocSpace(&x, 0, nCursor*sizeof(VdbeCursor*));
84634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
84635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->anExec = allocSpace(&x, 0, p->nOp*sizeof(i64));
84636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
84637 84770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( x.nNeeded ){
84638 84771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.pSpace = p->pFree = sqlite3DbMallocRawNN(db, x.nNeeded);
84639 84772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.nFree = x.nNeeded;
84640 84773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !db->mallocFailed ){
84641 84774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aMem = allocSpace(&x, p->aMem, nMem*sizeof(Mem));
84642 84775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aVar = allocSpace(&x, p->aVar, nVar*sizeof(Mem));
84643 84776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->apArg = allocSpace(&x, p->apArg, nArg*sizeof(Mem*));
84644 84777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->apCsr = allocSpace(&x, p->apCsr, nCursor*sizeof(VdbeCursor*));
84645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
84646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->anExec = allocSpace(&x, p->anExec, p->nOp*sizeof(i64));
84647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
84648 84778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84649 84779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84650 84780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84651 84781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
84652 84782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nVar = 0;
@@ -84657,13 +84787,10 @@
84657 84787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nVar = (ynVar)nVar;
84658 84788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
initMemArray(p->aVar, nVar, db, MEM_Null);
84659 84789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nMem = nMem;
84660 84790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
initMemArray(p->aMem, nMem, db, MEM_Undefined);
84661 84791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(p->apCsr, 0, nCursor*sizeof(VdbeCursor*));
84662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
84663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(p->anExec, 0, p->nOp*sizeof(i64));
84664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
84665 84792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84666 84793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeRewind(p);
84667 84794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
84668 84795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
84669 84796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -84717,13 +84844,10 @@
84717 84844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** control to the main program.
84718 84845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
84719 84846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *pFrame){
84720 84847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = pFrame->v;
84721 84848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
closeCursorsInFrame(v);
84722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
84723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- v->anExec = pFrame->anExec;
84724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
84725 84849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v->aOp = pFrame->aOp;
84726 84850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v->nOp = pFrame->nOp;
84727 84851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v->aMem = pFrame->aMem;
84728 84852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v->nMem = pFrame->nMem;
84729 84853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v->apCsr = pFrame->apCsr;
@@ -85551,14 +85675,16 @@
85551 85675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85552 85676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pc!='\n' ) fprintf(out, "\n");
85553 85677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85554 85678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nOp; i++){
85555 85679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zHdr[100];
85680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 cnt = p->aOp[i].nExec;
85681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 cycles = p->aOp[i].nCycle;
85556 85682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_snprintf(sizeof(zHdr), zHdr, "%6u %12llu %8llu ",
85557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aOp[i].cnt,
85558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aOp[i].cycles,
85559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->aOp[i].cnt>0 ? p->aOp[i].cycles/p->aOp[i].cnt : 0
85683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cnt,
85684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cycles,
85685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cnt>0 ? cycles/cnt : 0
85560 85686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
85561 85687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fprintf(out, "%s", zHdr);
85562 85688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbePrintOp(out, i, &p->aOp[i]);
85563 85689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
85564 85690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
fclose(out);
@@ -87409,10 +87535,11 @@
87409 87535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file contains code use to implement APIs that are part of the
87410 87536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** VDBE.
87411 87537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
87412 87538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include "sqliteInt.h" */
87413 87539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* #include "vdbeInt.h" */
87540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* #include "opcodes.h" */
87414 87541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
87415 87542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_DEPRECATED
87416 87543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
87417 87544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return TRUE (non-zero) of the statement supplied as an argument needs
87418 87545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to be recompiled. A statement needs to be recompiled whenever the
@@ -89505,27 +89632,64 @@
89505 89632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89506 89633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
89507 89634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
89508 89635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return status data for a single loop within query pStmt.
89509 89636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
89510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_API int sqlite3_stmt_scanstatus(
89637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_stmt_scanstatus_v2(
89511 89638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_stmt *pStmt, /* Prepared statement being queried */
89512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int idx, /* Index of loop to report on */
89639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iScan, /* Index of loop to report on */
89513 89640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iScanStatusOp, /* Which metric to return */
89641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int flags,
89514 89642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void *pOut /* OUT: Write the answer here */
89515 89643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
89516 89644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *p = (Vdbe*)pStmt;
89517 89645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ScanStatus *pScan;
89518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( idx<0 || idx>=p->nScan ) return 1;
89519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pScan = &p->aScan[idx];
89646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int idx;
89647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
89648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iScan<0 ){
89649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
89650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iScanStatusOp==SQLITE_SCANSTAT_NCYCLE ){
89651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 res = 0;
89652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<p->nOp; ii++){
89653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res += p->aOp[ii].nCycle;
89654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(i64*)pOut = res;
89656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
89657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
89659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( flags & SQLITE_SCANSTAT_COMPLEX ){
89661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ idx = iScan;
89662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan = &p->aScan[idx];
89663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
89664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If the COMPLEX flag is clear, then this function must ignore any
89665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ScanStatus structures with ScanStatus.addrLoop set to 0. */
89666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(idx=0; idx<p->nScan; idx++){
89667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pScan = &p->aScan[idx];
89668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->zName ){
89669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iScan--;
89670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iScan<0 ) break;
89671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( idx>=p->nScan ) return 1;
89675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
89520 89676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( iScanStatusOp ){
89521 89677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_SCANSTAT_NLOOP: {
89522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(sqlite3_int64*)pOut = p->anExec[pScan->addrLoop];
89678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->addrLoop>0 ){
89679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(sqlite3_int64*)pOut = p->aOp[pScan->addrLoop].nExec;
89680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
89681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(sqlite3_int64*)pOut = -1;
89682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89523 89683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
89524 89684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89525 89685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_SCANSTAT_NVISIT: {
89526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *(sqlite3_int64*)pOut = p->anExec[pScan->addrVisit];
89686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->addrVisit>0 ){
89687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(sqlite3_int64*)pOut = p->aOp[pScan->addrVisit].nExec;
89688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
89689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(sqlite3_int64*)pOut = -1;
89690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89527 89691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
89528 89692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89529 89693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_SCANSTAT_EST: {
89530 89694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
double r = 1.0;
89531 89695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
LogEst x = pScan->nEst;
@@ -89553,24 +89717,80 @@
89553 89717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*(int*)pOut = p->aOp[ pScan->addrExplain ].p1;
89554 89718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
89555 89719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*(int*)pOut = -1;
89556 89720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89557 89721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
89722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_SCANSTAT_PARENTID: {
89724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->addrExplain ){
89725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pOut = p->aOp[ pScan->addrExplain ].p2;
89726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
89727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(int*)pOut = -1;
89728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
89730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_SCANSTAT_NCYCLE: {
89732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 res = 0;
89733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pScan->aAddrRange[0]==0 ){
89734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res = -1;
89735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
89736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
89737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<ArraySize(pScan->aAddrRange); ii+=2){
89738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iIns = pScan->aAddrRange[ii];
89739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iEnd = pScan->aAddrRange[ii+1];
89740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iIns==0 ) break;
89741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iIns>0 ){
89742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( iIns<=iEnd ){
89743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res += p->aOp[iIns].nCycle;
89744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ iIns++;
89745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
89747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iOp;
89748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(iOp=0; iOp<p->nOp; iOp++){
89749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Op *pOp = &p->aOp[iOp];
89750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pOp->p1!=iEnd ) continue;
89751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3OpcodeProperty[pOp->opcode] & OPFLG_NCYCLE)==0 ){
89752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
89753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res += p->aOp[iOp].nCycle;
89755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *(i64*)pOut = res;
89760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
89558 89761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89559 89762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default: {
89560 89763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
89561 89764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89562 89765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89563 89766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
89564 89767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
89769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
89770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return status data for a single loop within query pStmt.
89771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
89772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_API int sqlite3_stmt_scanstatus(
89773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_stmt *pStmt, /* Prepared statement being queried */
89774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iScan, /* Index of loop to report on */
89775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iScanStatusOp, /* Which metric to return */
89776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void *pOut /* OUT: Write the answer here */
89777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
89778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3_stmt_scanstatus_v2(pStmt, iScan, iScanStatusOp, 0, pOut);
89779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89565 89780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89566 89781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
89567 89782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Zero all counters associated with the sqlite3_stmt_scanstatus() data.
89568 89783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
89569 89784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_stmt_scanstatus_reset(sqlite3_stmt *pStmt){
89570 89785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *p = (Vdbe*)pStmt;
89571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(p->anExec, 0, p->nOp * sizeof(i64));
89786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
89787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<p->nOp; ii++){
89788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Op *pOp = &p->aOp[ii];
89789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->nExec = 0;
89790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->nCycle = 0;
89791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
89572 89792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
89573 89793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_ENABLE_STMT_SCANSTATUS */
89574 89794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
89575 89795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of vdbeapi.c *********************************************/
89576 89796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file vdbetrace.c ***************************************/
@@ -90386,11 +90606,10 @@
90386 90606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define REGISTER_TRACE(R,M) if(db->flags&SQLITE_VdbeTrace)registerTrace(R,M)
90387 90607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
90388 90608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define REGISTER_TRACE(R,M)
90389 90609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90390 90610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
90392 90611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
90393 90612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
90394 90613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is only called from within an assert() expression. It
90395 90614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** checks that the sqlite3.nTransaction variable is correctly set to
90396 90615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the number of non-transaction savepoints currently in the
@@ -90476,14 +90695,12 @@
90476 90695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3VdbeExec(
90477 90696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *p /* The VDBE */
90478 90697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
90479 90698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Op *aOp = p->aOp; /* Copy of p->aOp */
90480 90699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Op *pOp = aOp; /* Current operation */
90481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
90700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
90482 90701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Op *pOrigOp; /* Value of pOp at the top of the loop */
90483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
90484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_DEBUG
90485 90702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nExtraDelete = 0; /* Verifies FORDELETE and AUXDELETE flags */
90486 90703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90487 90704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = SQLITE_OK; /* Value to return */
90488 90705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = p->db; /* The database */
90489 90706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 resetSchemaOnFault = 0; /* Reset schema after an error if positive */
@@ -90496,12 +90713,12 @@
90496 90713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *aMem = p->aMem; /* Copy of p->aMem */
90497 90714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pIn1 = 0; /* 1st input operand */
90498 90715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pIn2 = 0; /* 2nd input operand */
90499 90716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pIn3 = 0; /* 3rd input operand */
90500 90717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pOut = 0; /* Output operand */
90501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef VDBE_PROFILE
90502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u64 start; /* CPU clock count at start of opcode */
90718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
90719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u64 *pnCycle = 0;
90503 90720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90504 90721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*** INSERT STACK UNION HERE ***/
90505 90722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90506 90723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->eVdbeState==VDBE_RUN_STATE ); /* sqlite3_step() verifies this */
90507 90724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeEnter(p);
@@ -90560,16 +90777,18 @@
90560 90777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Errors are detected by individual opcodes, with an immediate
90561 90778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jumps to abort_due_to_error. */
90562 90779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK );
90563 90780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90564 90781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp>=aOp && pOp<&aOp[p->nOp]);
90565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef VDBE_PROFILE
90566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- start = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
90567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
90568 90782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nVmStep++;
90569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
90570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->anExec ) p->anExec[(int)(pOp-aOp)]++;
90783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(SQLITE_ENABLE_STMT_SCANSTATUS) || defined(VDBE_PROFILE)
90784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pOp->nExec++;
90785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pnCycle = &pOp->nCycle;
90786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # ifdef VDBE_PROFILE
90787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3NProfileCnt==0 )
90788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # endif
90789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnCycle -= sqlite3Hwtime();
90571 90790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90572 90791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90573 90792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Only allow tracing if SQLITE_DEBUG is defined.
90574 90793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
90575 90794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
@@ -90627,11 +90846,11 @@
90627 90846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3<=(p->nMem+1 - p->nCursor) );
90628 90847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memAboutToChange(p, &aMem[pOp->p3]);
90629 90848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90630 90849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
90631 90850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
90851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
90633 90852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrigOp = pOp;
90634 90853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90635 90854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90636 90855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pOp->opcode ){
90637 90856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -91885,11 +92104,10 @@
91885 92104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn1 = &aMem[pOp->p1];
91886 92105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
91887 92106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags1 = pIn1->flags;
91888 92107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
flags3 = pIn3->flags;
91889 92108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (flags1 & flags3 & MEM_Int)!=0 ){
91890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (pOp->p5 & SQLITE_AFF_MASK)!=SQLITE_AFF_TEXT || CORRUPT_DB );
91891 92109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Common case of comparison of two integers */
91892 92110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIn3->u.i > pIn1->u.i ){
91893 92111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3aGTb[pOp->opcode] ){
91894 92112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeBranchTaken(1, (pOp->p5 & SQLITE_NULLEQ)?2:3);
91895 92113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto jump_to_p2;
@@ -91953,11 +92171,11 @@
91953 92171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
91954 92172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (flags3 & (MEM_Int|MEM_IntReal|MEM_Real|MEM_Str))==MEM_Str ){
91955 92173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
applyNumericAffinity(pIn3,0);
91956 92174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
91957 92175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
91958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( affinity==SQLITE_AFF_TEXT ){
92176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( affinity==SQLITE_AFF_TEXT && ((flags1 | flags3) & MEM_Str)!=0 ){
91959 92177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (flags1 & MEM_Str)==0 && (flags1&(MEM_Int|MEM_Real|MEM_IntReal))!=0 ){
91960 92178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pIn1->flags & MEM_Int );
91961 92179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pIn1->flags & MEM_Real );
91962 92180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pIn1->flags & MEM_IntReal );
91963 92181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeMemStringify(pIn1, encoding, 1);
@@ -92547,11 +92765,11 @@
92547 92765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of large blobs is not loaded, thus saving CPU cycles. If the
92548 92766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** OPFLAG_TYPEOFARG bit is set then the result will only be used by the
92549 92767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** typeof() function or the IS NULL or IS NOT NULL operators or the
92550 92768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** equivalent. In this case, all content loading can be omitted.
92551 92769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
92552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Column: {
92770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Column: { /* ncycle */
92553 92771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 p2; /* column number to retrieve */
92554 92772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC; /* The VDBE cursor */
92555 92773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr; /* The B-Tree cursor corresponding to pC */
92556 92774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */
92557 92775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int len; /* The length of the serialized data for the column */
@@ -93899,11 +94117,11 @@
93899 94117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This instruction works like OpenRead except that it opens the cursor
93900 94118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in read/write mode.
93901 94119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
93902 94120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: OP_OpenRead, OP_ReopenIdx
93903 94121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
93904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_ReopenIdx: {
94122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_ReopenIdx: { /* ncycle */
93905 94123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nField;
93906 94124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo;
93907 94125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 p2;
93908 94126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb;
93909 94127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int wrFlag;
@@ -93920,11 +94138,11 @@
93920 94138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeClearCursor(pCur->uc.pCursor);
93921 94139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto open_cursor_set_hints;
93922 94140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
93923 94141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the cursor is not currently open or is open on a different
93924 94142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** index, then fall through into OP_OpenRead to force a reopen */
93925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_OpenRead:
94143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_OpenRead: /* ncycle */
93926 94144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OP_OpenWrite:
93927 94145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
93928 94146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode==OP_OpenWrite || pOp->p5==0 || pOp->p5==OPFLAG_SEEKEQ );
93929 94147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->bIsReader );
93930 94148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->opcode==OP_OpenRead || pOp->opcode==OP_ReopenIdx
@@ -94014,11 +94232,11 @@
94014 94232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cursor P2. The P2 cursor must have been opened by a prior OP_OpenEphemeral
94015 94233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opcode. Only ephemeral cursors may be duplicated.
94016 94234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
94017 94235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Duplicate ephemeral cursors are used for self-joins of materialized views.
94018 94236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_OpenDup: {
94237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_OpenDup: { /* ncycle */
94020 94238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pOrig; /* The original cursor to be duplicated */
94021 94239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCx; /* The new cursor */
94022 94240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94023 94241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrig = p->apCsr[pOp->p2];
94024 94242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOrig );
@@ -94076,12 +94294,12 @@
94076 94294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This opcode works the same as OP_OpenEphemeral. It has a
94077 94295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** different name to distinguish its use. Tables created using
94078 94296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by this opcode will be used for automatically created transient
94079 94297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** indices in joins.
94080 94298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_OpenAutoindex:
94082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_OpenEphemeral: {
94299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_OpenAutoindex: /* ncycle */
94300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_OpenEphemeral: { /* ncycle */
94083 94301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCx;
94084 94302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KeyInfo *pKeyInfo;
94085 94303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
94086 94304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const int vfsFlags =
94087 94305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_OPEN_READWRITE |
@@ -94235,11 +94453,11 @@
94235 94453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Opcode: Close P1 * * * *
94236 94454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
94237 94455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Close a cursor previously opened as P1. If P1 is not
94238 94456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** currently open, this instruction is a no-op.
94239 94457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Close: {
94458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Close: { /* ncycle */
94241 94459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94242 94460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeFreeCursor(p, p->apCsr[pOp->p1]);
94243 94461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->apCsr[pOp->p1] = 0;
94244 94462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
94245 94463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -94352,14 +94570,14 @@
94352 94570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** OPFLAG_SEEKEQ flags is a hint to the btree layer to say that this
94353 94571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is an equality search.
94354 94572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
94355 94573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotFound, SeekGt, SeekGe, SeekLt
94356 94574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekLT: /* jump, in3, group */
94358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekLE: /* jump, in3, group */
94359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekGE: /* jump, in3, group */
94360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekGT: { /* jump, in3, group */
94575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekLT: /* jump, in3, group, ncycle */
94576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekLE: /* jump, in3, group, ncycle */
94577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekGE: /* jump, in3, group, ncycle */
94578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekGT: { /* jump, in3, group, ncycle */
94361 94579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res; /* Comparison result */
94362 94580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int oc; /* Opcode */
94363 94581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC; /* The cursor to seek */
94364 94582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnpackedRecord r; /* The key to seek for */
94365 94583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nField; /* Number of columns or fields in the key */
@@ -94621,11 +94839,11 @@
94621 94839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li> If the cursor ends up on a valid row that is past the target row
94622 94840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (indicating that the target row does not exist in the btree) then
94623 94841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jump to SeekOP.P2 if This.P5==0 or to This.P2 if This.P5>0.
94624 94842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ol>
94625 94843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekScan: {
94844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekScan: { /* ncycle */
94627 94845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
94628 94846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
94629 94847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nStep;
94630 94848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnpackedRecord r;
94631 94849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -94743,11 +94961,11 @@
94743 94961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** OP_IfNoHope opcode might run to see if the IN loop can be abandoned
94744 94962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** early, thus saving work. This is part of the IN-early-out optimization.
94745 94963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
94746 94964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P1 must be a valid b-tree cursor.
94747 94965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekHit: {
94966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekHit: { /* ncycle */
94749 94967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
94750 94968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94751 94969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
94752 94970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC!=0 );
94753 94971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p3>=pOp->p2 );
@@ -94875,11 +95093,11 @@
94875 95093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** advanced in either direction. In other words, the Next and Prev
94876 95094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** opcodes do not work after this operation.
94877 95095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
94878 95096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: NotFound, Found, NotExists
94879 95097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
94880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_IfNoHope: { /* jump, in3 */
95098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_IfNoHope: { /* jump, in3, ncycle */
94881 95099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
94882 95100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
94883 95101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
94884 95102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pC!=0 );
94885 95103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
@@ -94889,13 +95107,13 @@
94889 95107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
94890 95108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pC->seekHit>=pOp->p4.i ) break;
94891 95109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Fall through into OP_NotFound */
94892 95110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no break */ deliberate_fall_through
94893 95111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
94894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_NoConflict: /* jump, in3 */
94895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_NotFound: /* jump, in3 */
94896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Found: { /* jump, in3 */
95112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_NoConflict: /* jump, in3, ncycle */
95113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_NotFound: /* jump, in3, ncycle */
95114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Found: { /* jump, in3, ncycle */
94897 95115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int alreadyExists;
94898 95116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int ii;
94899 95117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
94900 95118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnpackedRecord *pIdxKey;
94901 95119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnpackedRecord r;
@@ -95021,11 +95239,11 @@
95021 95239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in either direction. In other words, the Next and Prev opcodes will
95022 95240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not work following this opcode.
95023 95241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
95024 95242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Found, NotFound, NoConflict, SeekRowid
95025 95243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekRowid: { /* jump, in3 */
95244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekRowid: { /* jump, in3, ncycle */
95027 95245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
95028 95246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
95029 95247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
95030 95248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u64 iKey;
95031 95249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -95046,11 +95264,11 @@
95046 95264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iKey = x.u.i;
95047 95265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto notExistsWithKey;
95048 95266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95049 95267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Fall through into OP_NotExists */
95050 95268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no break */ deliberate_fall_through
95051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_NotExists: /* jump, in3 */
95269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_NotExists: /* jump, in3, ncycle */
95052 95270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIn3 = &aMem[pOp->p3];
95053 95271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pIn3->flags & MEM_Int)!=0 || pOp->opcode==OP_SeekRowid );
95054 95272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
95055 95273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iKey = pIn3->u.i;
95056 95274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
notExistsWithKey:
@@ -95670,11 +95888,11 @@
95670 95888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
95671 95889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P1 can be either an ordinary table or a virtual table. There used to
95672 95890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be a separate OP_VRowid opcode for use with virtual tables, but this
95673 95891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** one opcode now works for both table types.
95674 95892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Rowid: { /* out2 */
95893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Rowid: { /* out2, ncycle */
95676 95894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
95677 95895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 v;
95678 95896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab;
95679 95897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule;
95680 95898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -95769,12 +95987,12 @@
95769 95987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
95770 95988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This opcode leaves the cursor configured to move in reverse order,
95771 95989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from the end toward the beginning. In other words, the cursor is
95772 95990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** configured to use Prev, not Next.
95773 95991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_SeekEnd:
95775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Last: { /* jump */
95992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_SeekEnd: /* ncycle */
95993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Last: { /* jump, ncycle */
95776 95994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
95777 95995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
95778 95996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
95779 95997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95780 95998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
@@ -95875,11 +96093,11 @@
95875 96093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
95876 96094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This opcode leaves the cursor configured to move in forward order,
95877 96095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from the beginning toward the end. In other words, the cursor is
95878 96096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** configured to use Next, not Prev.
95879 96097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
95880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Rewind: { /* jump */
96098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Rewind: { /* jump, ncycle */
95881 96099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
95882 96100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtCursor *pCrsr;
95883 96101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
95884 96102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95885 96103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
@@ -95969,11 +96187,11 @@
95969 96187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
95970 96188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( isSorter(pC) );
95971 96189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeSorterNext(db, pC);
95972 96190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto next_tail;
95973 96191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Prev: /* jump */
96192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Prev: /* jump, ncycle */
95975 96193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
95976 96194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p5==0
95977 96195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
95978 96196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX);
95979 96197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
@@ -95984,11 +96202,11 @@
95984 96202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pC->seekOp==OP_Last || pC->seekOp==OP_IfNoHope
95985 96203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pC->seekOp==OP_NullRow);
95986 96204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreePrevious(pC->uc.pCursor, pOp->p3);
95987 96205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto next_tail;
95988 96206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
95989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_Next: /* jump */
96207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_Next: /* jump, ncycle */
95990 96208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
95991 96209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p5==0
95992 96210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pOp->p5==SQLITE_STMTSTATUS_FULLSCAN_STEP
95993 96211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pOp->p5==SQLITE_STMTSTATUS_AUTOINDEX);
95994 96212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
@@ -96176,12 +96394,12 @@
96176 96394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the end of the index key pointed to by cursor P1. This integer should be
96177 96395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the rowid of the table entry to which this index entry points.
96178 96396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
96179 96397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: Rowid, MakeRecord.
96180 96398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_DeferredSeek:
96182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_IdxRowid: { /* out2 */
96399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_DeferredSeek: /* ncycle */
96400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_IdxRowid: { /* out2, ncycle */
96183 96401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC; /* The P1 index cursor */
96184 96402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pTabCur; /* The P2 table cursor (OP_DeferredSeek only) */
96185 96403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i64 rowid; /* Rowid that P1 current points to */
96186 96404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96187 96405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
@@ -96239,12 +96457,12 @@
96239 96457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
96240 96458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If cursor P1 was previously moved via OP_DeferredSeek, complete that
96241 96459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** seek operation now, without further delay. If the cursor seek has
96242 96460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** already occurred, this instruction is a no-op.
96243 96461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_FinishSeek: {
96245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- VdbeCursor *pC; /* The P1 index cursor */
96462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_FinishSeek: { /* ncycle */
96463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ VdbeCursor *pC; /* The P1 index cursor */
96246 96464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96247 96465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
96248 96466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
96249 96467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pC->deferredMoveto ){
96250 96468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3VdbeFinishMoveto(pC);
@@ -96295,14 +96513,14 @@
96295 96513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ROWID on the P1 index.
96296 96514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
96297 96515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the P1 index entry is less than or equal to the key value then jump
96298 96516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to P2. Otherwise fall through to the next instruction.
96299 96517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
96300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_IdxLE: /* jump */
96301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_IdxGT: /* jump */
96302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_IdxLT: /* jump */
96303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_IdxGE: { /* jump */
96518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_IdxLE: /* jump, ncycle */
96519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_IdxGT: /* jump, ncycle */
96520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_IdxLT: /* jump, ncycle */
96521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_IdxGE: { /* jump, ncycle */
96304 96522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC;
96305 96523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
96306 96524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UnpackedRecord r;
96307 96525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96308 96526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
@@ -96919,13 +97137,10 @@
96919 97137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrame->apCsr = p->apCsr;
96920 97138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrame->nCursor = p->nCursor;
96921 97139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrame->aOp = p->aOp;
96922 97140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrame->nOp = p->nOp;
96923 97141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrame->token = pProgram->token;
96924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
96925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pFrame->anExec = p->anExec;
96926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
96927 97142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
96928 97143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrame->iFrameMagic = SQLITE_FRAME_MAGIC;
96929 97144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
96930 97145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
96931 97146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEnd = &VdbeFrameMem(pFrame)[pFrame->nChildMem];
@@ -96958,13 +97173,10 @@
96958 97173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->apCsr = (VdbeCursor **)&aMem[p->nMem];
96959 97174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFrame->aOnce = (u8*)&p->apCsr[pProgram->nCsr];
96960 97175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(pFrame->aOnce, 0, (pProgram->nOp + 7)/8);
96961 97176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOp = aOp = pProgram->aOp;
96962 97177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nOp = pProgram->nOp;
96963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
96964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->anExec = 0;
96965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
96966 97178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
96967 97179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Verify that second and subsequent executions of the same trigger do not
96968 97180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** try to reuse register values from the first use. */
96969 97181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
{
96970 97182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
@@ -97717,11 +97929,11 @@
97717 97929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
97718 97930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P4 is a pointer to a virtual table object, an sqlite3_vtab structure.
97719 97931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** P1 is a cursor number. This opcode opens a cursor to the virtual
97720 97932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table and stores that cursor in P1.
97721 97933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
97722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_VOpen: {
97934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_VOpen: { /* ncycle */
97723 97935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCur;
97724 97936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab_cursor *pVCur;
97725 97937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab;
97726 97938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule;
97727 97939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -97764,11 +97976,11 @@
97764 97976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** can be used as the first argument to sqlite3_vtab_in_first() and
97765 97977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_vtab_in_next() to extract all of the values stored in the P1
97766 97978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cursor. Register P3 is used to hold the values returned by
97767 97979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_vtab_in_first() and sqlite3_vtab_in_next().
97768 97980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
97769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_VInitIn: { /* out2 */
97981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_VInitIn: { /* out2, ncycle */
97770 97982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pC; /* The cursor containing the RHS values */
97771 97983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ValueList *pRhs; /* New ValueList object to put in reg[P2] */
97772 97984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
97773 97985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC = p->apCsr[pOp->p1];
97774 97986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRhs = sqlite3_malloc64( sizeof(*pRhs) );
@@ -97801,11 +98013,11 @@
97801 98013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** additional parameters which are passed to
97802 98014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xFilter as argv. Register P3+2 becomes argv[0] when passed to xFilter.
97803 98015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
97804 98016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** A jump is made to P2 if the result set after filtering would be empty.
97805 98017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
97806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_VFilter: { /* jump */
98018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_VFilter: { /* jump, ncycle */
97807 98019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg;
97808 98020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iQuery;
97809 98021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule;
97810 98022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pQuery;
97811 98023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pArgc;
@@ -97861,11 +98073,11 @@
97861 98073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** function to return true inside the xColumn method of the virtual
97862 98074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table implementation. The P5 column might also contain other
97863 98075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** bits (OPFLAG_LENGTHARG or OPFLAG_TYPEOFARG) but those bits are
97864 98076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unused by OP_VColumn.
97865 98077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
97866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_VColumn: {
98078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_VColumn: { /* ncycle */
97867 98079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab;
97868 98080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule;
97869 98081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pDest;
97870 98082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context sContext;
97871 98083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -97913,11 +98125,11 @@
97913 98125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
97914 98126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Advance virtual table P1 to the next row in its result set and
97915 98127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** jump to instruction P2. Or, if the virtual table has reached
97916 98128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the end of its result set, then fall through to the next instruction.
97917 98129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
97918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- case OP_VNext: { /* jump */
98130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case OP_VNext: { /* jump, ncycle */
97919 98131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_vtab *pVtab;
97920 98132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const sqlite3_module *pModule;
97921 98133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int res;
97922 98134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCursor *pCur;
97923 98135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -98496,16 +98708,16 @@
98496 98708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** readability. From this point on down, the normal indentation rules are
98497 98709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** restored.
98498 98710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*****************************************************************************/
98499 98711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
98500 98712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef VDBE_PROFILE
98502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- {
98503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u64 endTime = sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
98504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( endTime>start ) pOrigOp->cycles += endTime - start;
98505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pOrigOp->cnt++;
98506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
98713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(VDBE_PROFILE)
98714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
98715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pnCycle = 0;
98716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(SQLITE_ENABLE_STMT_SCANSTATUS)
98717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnCycle += sqlite3Hwtime();
98718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pnCycle = 0;
98507 98719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
98508 98720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98509 98721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The following code adds nothing to the actual functionality
98510 98722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the program. It is only here for testing and debugging.
98511 98723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** On the other hand, it does burn CPU cycles every time through
@@ -98577,10 +98789,22 @@
98577 98789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
98578 98790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This is the only way out of this procedure. We have to
98579 98791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** release the mutexes on btrees that were acquired at the
98580 98792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** top. */
98581 98793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
vdbe_return:
98794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(VDBE_PROFILE)
98795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pnCycle ){
98796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnCycle += sqlite3NProfileCnt ? sqlite3NProfileCnt : sqlite3Hwtime();
98797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pnCycle = 0;
98798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
98799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(SQLITE_ENABLE_STMT_SCANSTATUS)
98800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pnCycle ){
98801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pnCycle += sqlite3Hwtime();
98802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pnCycle = 0;
98803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
98804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
98805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
98582 98806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
98583 98807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( nVmStep>=nProgressLimit && db->xProgress!=0 ){
98584 98808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nProgressLimit += db->nProgressOps;
98585 98809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->xProgress(db->pProgressArg) ){
98586 98810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nProgressLimit = LARGEST_UINT64;
@@ -105224,51 +105448,124 @@
105224 105448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT a AS b FROM t1 WHERE b;
105225 105449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SELECT * FROM t1 WHERE (select a from t1);
105226 105450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
105227 105451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char sqlite3ExprAffinity(const Expr *pExpr){
105228 105452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int op;
105229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){
105230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->op==TK_COLLATE
105231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || pExpr->op==TK_IF_NULL_ROW
105232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) );
105233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr = pExpr->pLeft;
105234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr!=0 );
105235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
105236 105453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = pExpr->op;
105237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_REGISTER ) op = pExpr->op2;
105238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_COLUMN || (op==TK_AGG_COLUMN && pExpr->y.pTab!=0) ){
105239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ExprUseYTab(pExpr) );
105240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->y.pTab!=0 );
105241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn);
105242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
105243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_SELECT ){
105244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ExprUseXSelect(pExpr) );
105245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->x.pSelect!=0 );
105246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->x.pSelect->pEList!=0 );
105247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 );
105248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
105249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
105454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( 1 /* exit-by-break */ ){
105455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op==TK_COLUMN || (op==TK_AGG_COLUMN && pExpr->y.pTab!=0) ){
105456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ExprUseYTab(pExpr) );
105457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->y.pTab!=0 );
105458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn);
105459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op==TK_SELECT ){
105461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ExprUseXSelect(pExpr) );
105462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->x.pSelect!=0 );
105463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->x.pSelect->pEList!=0 );
105464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->x.pSelect->pEList->a[0].pExpr!=0 );
105465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3ExprAffinity(pExpr->x.pSelect->pEList->a[0].pExpr);
105466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105250 105467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_CAST
105251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_CAST ){
105252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( !ExprHasProperty(pExpr, EP_IntValue) );
105253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3AffinityType(pExpr->u.zToken, 0);
105254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
105468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op==TK_CAST ){
105469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !ExprHasProperty(pExpr, EP_IntValue) );
105470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3AffinityType(pExpr->u.zToken, 0);
105471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105255 105472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
105256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_SELECT_COLUMN ){
105257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) );
105258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->iColumn < pExpr->iTable );
105259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr );
105260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3ExprAffinity(
105261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr
105262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- );
105263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
105264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_VECTOR ){
105265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ExprUseXList(pExpr) );
105266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr);
105473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op==TK_SELECT_COLUMN ){
105474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->pLeft!=0 && ExprUseXSelect(pExpr->pLeft) );
105475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->iColumn < pExpr->iTable );
105476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->iTable==pExpr->pLeft->x.pSelect->pEList->nExpr );
105477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3ExprAffinity(
105478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->pLeft->x.pSelect->pEList->a[pExpr->iColumn].pExpr
105479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
105480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op==TK_VECTOR ){
105482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ExprUseXList(pExpr) );
105483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return sqlite3ExprAffinity(pExpr->x.pList->a[0].pExpr);
105484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ExprHasProperty(pExpr, EP_Skip|EP_IfNullRow) ){
105486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->op==TK_COLLATE
105487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || pExpr->op==TK_IF_NULL_ROW
105488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || (pExpr->op==TK_REGISTER && pExpr->op2==TK_IF_NULL_ROW) );
105489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr = pExpr->pLeft;
105490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ op = pExpr->op;
105491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ continue;
105492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op!=TK_REGISTER || (op = pExpr->op2)==TK_REGISTER ) break;
105267 105494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105268 105495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pExpr->affExpr;
105269 105496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
105498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
105499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Make a guess at all the possible datatypes of the result that could
105500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be returned by an expression. Return a bitmask indicating the answer:
105501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
105502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x01 Numeric
105503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x02 Text
105504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x04 Blob
105505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
105506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If the expression must return NULL, then 0x00 is returned.
105507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
105508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3ExprDataType(const Expr *pExpr){
105509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pExpr ){
105510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ switch( pExpr->op ){
105511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_COLLATE:
105512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_IF_NULL_ROW:
105513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_UPLUS: {
105514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr = pExpr->pLeft;
105515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
105516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_NULL: {
105518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr = 0;
105519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
105520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_STRING: {
105522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0x02;
105523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_BLOB: {
105525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0x04;
105526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_CONCAT: {
105528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0x06;
105529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_VARIABLE:
105531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_AGG_FUNCTION:
105532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_FUNCTION: {
105533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0x07;
105534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_COLUMN:
105536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_AGG_COLUMN:
105537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_SELECT:
105538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_CAST:
105539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_SELECT_COLUMN:
105540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_VECTOR: {
105541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int aff = sqlite3ExprAffinity(pExpr);
105542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aff>=SQLITE_AFF_NUMERIC ) return 0x05;
105543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aff==SQLITE_AFF_TEXT ) return 0x06;
105544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0x07;
105545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case TK_CASE: {
105547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int res = 0;
105548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
105549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pList = pExpr->x.pList;
105550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ExprUseXList(pExpr) && pList!=0 );
105551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pList->nExpr > 0);
105552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=1; ii<pList->nExpr; ii+=2){
105553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res |= sqlite3ExprDataType(pList->a[ii].pExpr);
105554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pList->nExpr % 2 ){
105556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ res |= sqlite3ExprDataType(pList->a[pList->nExpr-1].pExpr);
105557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return res;
105559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: {
105561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0x01;
105562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } /* End of switch(op) */
105564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ } /* End of while(pExpr) */
105565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0x00;
105566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
105270 105567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
105271 105568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
105272 105569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Set the collating sequence for expression pExpr to be the collating
105273 105570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sequence named by pToken. Return a pointer to a new Expr node that
105274 105571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implements the COLLATE operator.
@@ -108437,10 +108734,13 @@
108437 108734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rReg = 0; /* Register storing resulting */
108438 108735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSel; /* SELECT statement to encode */
108439 108736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SelectDest dest; /* How to deal with SELECT result */
108440 108737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nReg; /* Registers to allocate */
108441 108738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pLimit; /* New limit expression */
108739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
108740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrExplain; /* Address of OP_Explain instruction */
108741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
108442 108742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108443 108743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = pParse->pVdbe;
108444 108744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( v!=0 );
108445 108745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ) return 0;
108446 108746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pExpr->op==TK_EXISTS );
@@ -108489,12 +108789,13 @@
108489 108789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into a register and return that register number.
108490 108790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
108491 108791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In both cases, the query is augmented with "LIMIT 1". Any
108492 108792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** preexisting limit is discarded in place of the new LIMIT 1.
108493 108793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
108494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ExplainQueryPlan((pParse, 1, "%sSCALAR SUBQUERY %d",
108794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExplainQueryPlan2(addrExplain, (pParse, 1, "%sSCALAR SUBQUERY %d",
108495 108795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrOnce?"":"CORRELATED ", pSel->selId));
108796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, -1);
108496 108797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nReg = pExpr->op==TK_SELECT ? pSel->pEList->nExpr : 1;
108497 108798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&dest, 0, pParse->nMem+1);
108498 108799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->nMem += nReg;
108499 108800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->op==TK_SELECT ){
108500 108801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dest.eDest = SRT_Mem;
@@ -108533,10 +108834,11 @@
108533 108834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->iTable = rReg = dest.iSDParm;
108534 108835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprSetVVAProperty(pExpr, EP_NoReduce);
108535 108836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( addrOnce ){
108536 108837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addrOnce);
108537 108838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
108839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
108538 108840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
108539 108841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Subroutine return */
108540 108842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseYSub(pExpr) );
108541 108843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3VdbeGetOp(v,pExpr->y.sub.iAddr-1)->opcode==OP_BeginSubrtn
108542 108844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| pParse->nErr );
@@ -119973,12 +120275,11 @@
119973 120275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&pTable->nCol, &pTable->aCol);
119974 120276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr==0
119975 120277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pTable->nCol==pSel->pEList->nExpr
119976 120278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
119977 120279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->mallocFailed==0 );
119978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectAddColumnTypeAndCollation(pParse, pTable, pSel,
119979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_AFF_NONE);
120280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SubqueryColumnTypes(pParse, pTable, pSel, SQLITE_AFF_NONE);
119980 120281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
119981 120282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
119982 120283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* CREATE VIEW name AS... without an argument list. Construct
119983 120284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the column names from the SELECT statement that defines the view.
119984 120285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -137508,10 +137809,14 @@
137508 137809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iCsr; /* Cursor number for table */
137509 137810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nKey; /* Number of PK columns for table pTab (>=1) */
137510 137811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} aDefer[4];
137511 137812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
137512 137813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct RowLoadInfo *pDeferredRowLoad; /* Deferred row loading info or NULL */
137814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
137815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrPush; /* First instruction to push data into sorter */
137816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrPushEnd; /* Last instruction that pushes data into sorter */
137817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
137513 137818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
137514 137819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SORTFLAG_UseSorter 0x01 /* Use SorterOpen instead of OpenEphemeral */
137515 137820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
137516 137821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
137517 137822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete all the content of a Select structure. Deallocate the structure
@@ -138163,10 +138468,14 @@
138163 138468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SortCtx.pDeferredRowLoad optimiation. In any of these cases
138164 138469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** regOrigData is 0 to prevent this routine from trying to copy
138165 138470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** values that might not yet exist.
138166 138471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
138167 138472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nData==1 || regData==regOrigData || regOrigData==0 );
138473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
138474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
138475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSort->addrPush = sqlite3VdbeCurrentAddr(v);
138476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
138168 138477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
138169 138478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nPrefixReg ){
138170 138479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nPrefixReg==nExpr+bSeq );
138171 138480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regBase = regData - nPrefixReg;
138172 138481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -138264,10 +138573,13 @@
138264 138573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regBase+nOBSat, nBase-nOBSat);
138265 138574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iSkip ){
138266 138575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP2(v, iSkip,
138267 138576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSort->labelOBLopt ? pSort->labelOBLopt : sqlite3VdbeCurrentAddr(v));
138268 138577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
138578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
138579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSort->addrPushEnd = sqlite3VdbeCurrentAddr(v)-1;
138580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
138269 138581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
138270 138582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
138271 138583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
138272 138584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add code to implement the OFFSET
138273 138585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -138730,13 +139042,10 @@
138730 139042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_Table );
138731 139043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_EphemTab );
138732 139044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_Fifo );
138733 139045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( eDest==SRT_DistFifo );
138734 139046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg);
138735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pDest->zAffSdst ){
138736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeChangeP4(v, -1, pDest->zAffSdst, nResultCol);
138737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
138738 139047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_CTE
138739 139048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eDest==SRT_DistFifo ){
138740 139049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the destination is DistFifo, then cursor (iParm+1) is open
138741 139050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on an ephemeral index. If the current row is already present
138742 139051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the index, do not write it to the output. If not, add the
@@ -139090,10 +139399,20 @@
139090 139399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iSortTab; /* Sorter cursor to read from */
139091 139400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
139092 139401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bSeq; /* True if sorter record includes seq. no. */
139093 139402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRefKey = 0;
139094 139403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ExprList_item *aOutEx = p->pEList->a;
139404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
139405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrExplain; /* Address of OP_Explain instruction */
139406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
139407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
139408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExplainQueryPlan2(addrExplain, (pParse, 0,
139409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "USE TEMP B-TREE FOR %sORDER BY", pSort->nOBSat>0?"RIGHT PART OF ":"")
139410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
139411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExplain,pSort->addrPush,pSort->addrPushEnd);
139412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusCounters(v, addrExplain, addrExplain, pSort->addrPush);
139413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
139095 139414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
139096 139415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( addrBreak<0 );
139097 139416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSort->labelBkOut ){
139098 139417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut);
139099 139418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeGoto(v, addrBreak);
@@ -139202,10 +139521,11 @@
139202 139521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139203 139522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, iSortTab, iRead, regRow+i);
139204 139523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s", aOutEx[i].zEName));
139205 139524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139206 139525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
139207 139527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( eDest ){
139208 139528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_Table:
139209 139529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SRT_EphemTab: {
139210 139530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, iSortTab, nKey+bSeq, regRow);
139211 139531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, regRowid);
@@ -139263,10 +139583,11 @@
139263 139583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSort->sortFlags & SORTFLAG_UseSorter ){
139264 139584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_SorterNext, iTab, addr); VdbeCoverage(v);
139265 139585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
139266 139586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Next, iTab, addr); VdbeCoverage(v);
139267 139587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExplain, sqlite3VdbeCurrentAddr(v)-1, -1);
139268 139589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSort->regReturn ) sqlite3VdbeAddOp1(v, OP_Return, pSort->regReturn);
139269 139590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, addrBreak);
139270 139591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139271 139592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
139272 139593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -139293,10 +139614,11 @@
139293 139614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_COLUMN_METADATA
139294 139615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define columnType(A,B,C,D,E) columnTypeImpl(A,B,C,D,E)
139295 139616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else /* if !defined(SQLITE_ENABLE_COLUMN_METADATA) */
139296 139617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define columnType(A,B,C,D,E) columnTypeImpl(A,B)
139297 139618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
139619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_DECLTYPE
139298 139620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char *columnTypeImpl(
139299 139621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
NameContext *pNC,
139300 139622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_ENABLE_COLUMN_METADATA
139301 139623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr
139302 139624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
@@ -139439,10 +139761,11 @@
139439 139761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pzOrigCol = zOrigCol;
139440 139762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139441 139763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
139442 139764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return zType;
139443 139765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !defined(SQLITE_OMIT_DECLTYPE) */
139444 139767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
139445 139768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
139446 139769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code that will tell the VDBE the declaration types of columns
139447 139770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the result set.
139448 139771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -139710,51 +140033,94 @@
139710 140033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139711 140034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
139712 140035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139713 140036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
139714 140037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
139715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Add type and collation information to a column list based on
139716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a SELECT statement.
139717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
139718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The column list presumably came from selectColumnNamesFromExprList().
139719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The column list has only names, not types or collations. This
139720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** routine goes through and adds the types and collations.
139721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
139722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine requires that all identifiers in the SELECT
139723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** statement be resolved.
139724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
139725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE void sqlite3SelectAddColumnTypeAndCollation(
139726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Parse *pParse, /* Parsing contexts */
139727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Table *pTab, /* Add column type information to this table */
139728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Select *pSelect, /* SELECT used to determine types and collations */
139729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char aff /* Default affinity for columns */
140038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This bit, when added to the "aff" parameter of
140039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3ColumnTypeOfSubquery() means that result set
140040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expressions of the form "CAST(expr AS NUMERIC)" should result in
140041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NONE affinity rather than NUMERIC affinity.
140042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
140043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_AFF_FLAG1 0x10
140044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
140045 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
140046 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pTab is a transient Table object that represents a subquery of some
140047 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** kind (maybe a parenthesized subquery in the FROM clause of a larger
140048 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** query, or a VIEW, or a CTE). This routine computes type information
140049 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for that Table object based on the Select object that implements the
140050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** subquery. For the purposes of this routine, "type infomation" means:
140051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
140052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The datatype name, as it might appear in a CREATE TABLE statement
140053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Which collating sequence to use for the column
140054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The affinity of the column
140055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
140056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The SQLITE_AFF_FLAG1 bit added to parameter aff means that a
140057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** result set column of the form "CAST(expr AS NUMERIC)" should use
140058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** NONE affinity rather than NUMERIC affinity. See the
140059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2022-12-10 "reopen" of ticket https://sqlite.org/src/tktview/57c47526c3.
140060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
140061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3SubqueryColumnTypes(
140062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parsing contexts */
140063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab, /* Add column type information to this table */
140064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSelect, /* SELECT used to determine types and collations */
140065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char aff /* Default affinity. Maybe with SQLITE_AFF_FLAG1 too */
139730 140066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
139731 140067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = pParse->db;
139732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- NameContext sNC;
139733 140068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Column *pCol;
139734 140069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl;
139735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
140070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i,j;
139736 140071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *p;
139737 140072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct ExprList_item *a;
139738 140073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
139739 140074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSelect!=0 );
139740 140075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pSelect->selFlags & SF_Resolved)!=0 );
139741 140076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab->nCol==pSelect->pEList->nExpr || db->mallocFailed );
139742 140077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) return;
139743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- memset(&sNC, 0, sizeof(sNC));
139744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sNC.pSrcList = pSelect->pSrc;
140078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pSelect->pPrior ) pSelect = pSelect->pPrior;
139745 140079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
a = pSelect->pEList->a;
139746 140080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pCol=pTab->aCol; i<pTab->nCol; i++, pCol++){
139747 140081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zType;
139748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- i64 n, m;
140082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 n;
139749 140083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->tabFlags |= (pCol->colFlags & COLFLAG_NOINSERT);
139750 140084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = a[i].pExpr;
139751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zType = columnType(&sNC, p, 0, 0, 0);
139752 140085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* pCol->szEst = ... // Column size est for SELECT tables never used */
139753 140086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCol->affinity = sqlite3ExprAffinity(p);
140087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->affinity<=SQLITE_AFF_NONE ){
140088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( (SQLITE_AFF_FLAG1 & SQLITE_AFF_MASK)==0 );
140089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->affinity = aff & SQLITE_AFF_MASK;
140090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aff & SQLITE_AFF_FLAG1 ){
140092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->affinity==SQLITE_AFF_NUMERIC && p->op==TK_CAST ){
140093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->affinity = SQLITE_AFF_NONE;
140094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->affinity>=SQLITE_AFF_TEXT && pSelect->pNext ){
140097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int m = 0;
140098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pS2;
140099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(m=0, pS2=pSelect->pNext; pS2; pS2=pS2->pNext){
140100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ m |= sqlite3ExprDataType(pS2->pEList->a[i].pExpr);
140101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->affinity==SQLITE_AFF_TEXT && (m&0x01)!=0 ){
140103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->affinity = SQLITE_AFF_BLOB;
140104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else
140105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->affinity>=SQLITE_AFF_NUMERIC && (m&0x02)!=0 ){
140106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->affinity = SQLITE_AFF_BLOB;
140107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->affinity==SQLITE_AFF_NUMERIC ){
140110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zType = "NUM";
140111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
140112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zType = 0;
140113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=1; j<SQLITE_N_STDTYPE; j++){
140114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3StdTypeAffinity[j]==pCol->affinity ){
140115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zType = sqlite3StdType[j];
140116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
140117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
140119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
139754 140120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zType ){
139755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- m = sqlite3Strlen30(zType);
140121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i64 m = sqlite3Strlen30(zType);
139756 140122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = sqlite3Strlen30(pCol->zCnName);
139757 140123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCol->zCnName = sqlite3DbReallocOrFree(db, pCol->zCnName, n+m+2);
139758 140124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCol->zCnName ){
139759 140125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(&pCol->zCnName[n+1], zType, m+1);
139760 140126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCol->colFlags |= COLFLAG_HASTYPE;
@@ -139761,11 +140127,10 @@
139761 140127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
139762 140128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pCol->colFlags & COLFLAG_HASTYPE );
139763 140129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCol->colFlags &= ~(COLFLAG_HASTYPE|COLFLAG_HASCOLL);
139764 140130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139765 140131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCol->affinity<=SQLITE_AFF_NONE ) pCol->affinity = aff;
139767 140132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColl = sqlite3ExprCollSeq(pParse, p);
139768 140133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pColl ){
139769 140134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab->pIndex==0 );
139770 140135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ColumnSetColl(db, pCol, pColl->zName);
139771 140136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -139795,11 +140160,11 @@
139795 140160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
139796 140161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nTabRef = 1;
139797 140162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zName = 0;
139798 140163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->nRowLogEst = 200; assert( 200==sqlite3LogEst(1048576) );
139799 140164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ColumnsFromExprList(pParse, pSelect->pEList, &pTab->nCol, &pTab->aCol);
139800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSelect, aff);
140165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SubqueryColumnTypes(pParse, pTab, pSelect, aff);
139801 140166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->iPKey = -1;
139802 140167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ){
139803 140168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DeleteTable(db, pTab);
139804 140169 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
139805 140170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -143606,18 +143971,18 @@
143606 143971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_SUBQUERY
143607 143972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143608 143973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is a Walker.xSelectCallback callback for the sqlite3SelectTypeInfo()
143609 143974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** interface.
143610 143975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
143611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** For each FROM-clause subquery, add Column.zType and Column.zColl
143612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** information to the Table structure that represents the result set
143613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of that subquery.
143976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** For each FROM-clause subquery, add Column.zType, Column.zColl, and
143977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Column.affinity information to the Table structure that represents
143978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the result set of that subquery.
143614 143979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
143615 143980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The Table structure that represents the result set was constructed
143616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** by selectExpander() but the type and collation information was omitted
143617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** at that point because identifiers had not yet been resolved. This
143618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** routine is called after identifier resolution.
143981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** by selectExpander() but the type and collation and affinity information
143982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** was omitted at that point because identifiers had not yet been resolved.
143983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine is called after identifier resolution.
143619 143984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
143620 143985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void selectAddSubqueryTypeInfo(Walker *pWalker, Select *p){
143621 143986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse;
143622 143987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
143623 143988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pTabList;
@@ -143633,13 +143998,12 @@
143633 143998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTab!=0 );
143634 143999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTab->tabFlags & TF_Ephemeral)!=0 ){
143635 144000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* A sub-query in the FROM clause of a SELECT */
143636 144001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSel = pFrom->pSelect;
143637 144002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSel ){
143638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( pSel->pPrior ) pSel = pSel->pPrior;
143639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3SelectAddColumnTypeAndCollation(pParse, pTab, pSel,
143640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_AFF_NONE);
144003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3SubqueryColumnTypes(pParse, pTab, pSel,
144004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_AFF_NONE|SQLITE_AFF_FLAG1);
143641 144005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143642 144006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143643 144007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143644 144008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143645 144009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -144117,23 +144481,28 @@
144117 144481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144118 144482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144119 144483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144120 144484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144121 144485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
144122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check to see if the pThis entry of pTabList is a self-join of a prior view.
144123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If it is, then return the SrcItem for the prior view. If it is not,
144124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** then return 0.
144486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check to see if the pThis entry of pTabList is a self-join of another view.
144487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Search FROM-clause entries in the range of iFirst..iEnd, including iFirst
144488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** but stopping before iEnd.
144489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
144490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If pThis is a self-join, then return the SrcItem for the first other
144491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** instance of that view found. If pThis is not a self-join then return 0.
144125 144492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144126 144493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static SrcItem *isSelfJoinView(
144127 144494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pTabList, /* Search for self-joins in this FROM clause */
144128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SrcItem *pThis /* Search for prior reference to this subquery */
144495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcItem *pThis, /* Search for prior reference to this subquery */
144496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iFirst, int iEnd /* Range of FROM-clause entries to search. */
144129 144497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
144130 144498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem;
144131 144499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pThis->pSelect!=0 );
144132 144500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pThis->pSelect->selFlags & SF_PushDown ) return 0;
144133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(pItem = pTabList->a; pItem<pThis; pItem++){
144501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( iFirst<iEnd ){
144134 144502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pS1;
144503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem = &pTabList->a[iFirst++];
144135 144504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->pSelect==0 ) continue;
144136 144505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.viaCoroutine ) continue;
144137 144506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->zName==0 ) continue;
144138 144507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem->pTab!=0 );
144139 144508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pThis->pTab!=0 );
@@ -144273,10 +144642,66 @@
144273 144642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
144274 144643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144275 144644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144276 144645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
144277 144646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
144648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
144649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return TRUE (non-zero) if the i-th entry in the pTabList SrcList can
144650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** be implemented as a co-routine. The i-th entry is guaranteed to be
144651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a subquery.
144652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
144653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The subquery is implemented as a co-routine if all of the following are
144654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** true:
144655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
144656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (1) The subquery will likely be implemented in the outer loop of
144657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the query. This will be the case if any one of the following
144658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** conditions hold:
144659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (a) The subquery is the only term in the FROM clause
144660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (b) The subquery is the left-most term and a CROSS JOIN or similar
144661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** requires it to be the outer loop
144662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (c) All of the following are true:
144663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (i) The subquery is the left-most subquery in the FROM clause
144664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (ii) There is nothing that would prevent the subquery from
144665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** being used as the outer loop if the sqlite3WhereBegin()
144666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** routine nominates it to that position.
144667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (iii) The query is not a UPDATE ... FROM
144668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (2) The subquery is not a CTE that should be materialized because of
144669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the AS MATERIALIZED keywords
144670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (3) The subquery is not part of a left operand for a RIGHT JOIN
144671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (4) The SQLITE_Coroutine optimization disable flag is not set
144672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (5) The subquery is not self-joined
144673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
144674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int fromClauseTermCanBeCoroutine(
144675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parsing context */
144676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcList *pTabList, /* FROM clause */
144677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, /* Which term of the FROM clause holds the subquery */
144678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int selFlags /* Flags on the SELECT statement */
144679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
144680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SrcItem *pItem = &pTabList->a[i];
144681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.isCte && pItem->u2.pCteUse->eM10d==M10d_Yes ) return 0;/* (2) */
144682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTabList->a[0].fg.jointype & JT_LTORJ ) return 0; /* (3) */
144683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( OptimizationDisabled(pParse->db, SQLITE_Coroutines) ) return 0; /* (4) */
144684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isSelfJoinView(pTabList, pItem, i+1, pTabList->nSrc)!=0 ){
144685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0; /* (5) */
144686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
144687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ){
144688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTabList->nSrc==1 ) return 1; /* (1a) */
144689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTabList->a[1].fg.jointype & JT_CROSS ) return 1; /* (1b) */
144690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */
144691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
144692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
144693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( selFlags & SF_UpdateFrom ) return 0; /* (1c-iii) */
144694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( 1 /*exit-by-break*/ ){
144695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->fg.jointype & (JT_OUTER|JT_CROSS) ) return 0; /* (1c-ii) */
144696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i==0 ) break;
144697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ i--;
144698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pItem--;
144699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pItem->pSelect!=0 ) return 0; /* (1c-i) */
144700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
144701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
144702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
144278 144703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144279 144704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
144280 144705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code for the SELECT statement given in the p argument.
144281 144706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
144282 144707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The results are returned according to the SelectDest structure.
@@ -144661,25 +145086,12 @@
144661 145086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144662 145087 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSavedAuthContext = pParse->zAuthContext;
144663 145088 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = pItem->zName;
144664 145089 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144665 145090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate code to implement the subquery
144666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
144667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The subquery is implemented as a co-routine if all of the following are
144668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** true:
144669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
144670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (1) the subquery is guaranteed to be the outer loop (so that
144671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** it does not need to be computed more than once), and
144672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (2) the subquery is not a CTE that should be materialized
144673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (3) the subquery is not part of a left operand for a RIGHT JOIN
144674 145091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i==0
144676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (pTabList->nSrc==1
144677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- || (pTabList->a[1].fg.jointype&(JT_OUTER|JT_CROSS))!=0) /* (1) */
144678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (pItem->fg.isCte==0 || pItem->u2.pCteUse->eM10d!=M10d_Yes) /* (2) */
144679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (pTabList->a[0].fg.jointype & JT_LTORJ)==0 /* (3) */
144680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
145092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( fromClauseTermCanBeCoroutine(pParse, pTabList, i, p->selFlags) ){
144681 145093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Implement a co-routine that will return a single row of the result
144682 145094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** set on each invocation.
144683 145095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144684 145096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrTop = sqlite3VdbeCurrentAddr(v)+1;
144685 145097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -144706,11 +145118,11 @@
144706 145118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->iCursor!=pCteUse->iCur ){
144707 145119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenDup, pItem->iCursor, pCteUse->iCur);
144708 145120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%!S", pItem));
144709 145121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144710 145122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->nSelectRow = pCteUse->nRowEst;
144711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( (pPrior = isSelfJoinView(pTabList, pItem))!=0 ){
145123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( (pPrior = isSelfJoinView(pTabList, pItem, 0, i))!=0 ){
144712 145124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This view has already been materialized by a prior entry in
144713 145125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** this same FROM clause. Reuse it. */
144714 145126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPrior->addrFillSub ){
144715 145127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Gosub, pPrior->regReturn, pPrior->addrFillSub);
144716 145128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -144720,10 +145132,13 @@
144720 145132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Materialize the view. If the view is not correlated, generate a
144721 145133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** subroutine to do the materialization so that subsequent uses of
144722 145134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the same view can reuse the materialization. */
144723 145135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int topAddr;
144724 145136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int onceAddr = 0;
145137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
145138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrExplain;
145139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
144725 145140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144726 145141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->regReturn = ++pParse->nMem;
144727 145142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
topAddr = sqlite3VdbeAddOp0(v, OP_Goto);
144728 145143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->addrFillSub = topAddr+1;
144729 145144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.isMaterialized = 1;
@@ -144735,19 +145150,18 @@
144735 145150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "materialize %!S", pItem));
144736 145151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
144737 145152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeNoopComment((v, "materialize %!S", pItem));
144738 145153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144739 145154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&dest, SRT_EphemTab, pItem->iCursor);
144740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ExplainQueryPlan((pParse, 1, "MATERIALIZE %!S", pItem));
144741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dest.zAffSdst = sqlite3TableAffinityStr(db, pItem->pTab);
145155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
145156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExplainQueryPlan2(addrExplain, (pParse, 1, "MATERIALIZE %!S", pItem));
144742 145157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Select(pParse, pSub, &dest);
144743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DbFree(db, dest.zAffSdst);
144744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- dest.zAffSdst = 0;
144745 145158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->pTab->nRowLogEst = pSub->nSelectRow;
144746 145159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( onceAddr ) sqlite3VdbeJumpHere(v, onceAddr);
144747 145160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Return, pItem->regReturn, topAddr+1);
144748 145161 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "end %!S", pItem));
145162 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExplain, addrExplain, -1);
144749 145163 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, topAddr);
144750 145164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ClearTempRegCache(pParse);
144751 145165 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pItem->fg.isCte && pItem->fg.isCorrelated==0 ){
144752 145166 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CteUse *pCteUse = pItem->u2.pCteUse;
144753 145167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCteUse->addrM9e = pItem->addrFillSub;
@@ -145498,12 +145912,10 @@
145498 145912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145499 145913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If there is an ORDER BY clause, then we need to sort the results
145500 145914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and send them to the callback one by one.
145501 145915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
145502 145916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sSort.pOrderBy ){
145503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- explainTempTable(pParse,
145504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sSort.nOBSat>0 ? "RIGHT PART OF ORDER BY":"ORDER BY");
145505 145917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pEList==pEList );
145506 145918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
generateSortTail(pParse, p, &sSort, pEList->nExpr, pDest);
145507 145919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145508 145920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145509 145921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Jump here to skip this query
@@ -147492,11 +147904,12 @@
147492 147904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprDup(db, pChanges->a[i].pExpr, 0)
147493 147905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
147494 147906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147495 147907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
147496 147908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSelect = sqlite3SelectNew(pParse, pList,
147497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pSrc, pWhere2, pGrp, 0, pOrderBy2, SF_UFSrcCheck|SF_IncludeHidden, pLimit2
147909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pSrc, pWhere2, pGrp, 0, pOrderBy2,
147910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SF_UFSrcCheck|SF_IncludeHidden|SF_UpdateFrom, pLimit2
147498 147911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
147499 147912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSelect ) pSelect->selFlags |= SF_OrderByReqd;
147500 147913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&dest, eDest, iEph);
147501 147914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dest.iSDParm2 = (pPk ? pPk->nKeyCol : -1);
147502 147915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3Select(pParse, pSelect, &dest);
@@ -151576,10 +151989,12 @@
151576 151989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151577 151990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_append(&str, ")", 1);
151578 151991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zMsg = sqlite3StrAccumFinish(&str);
151579 151992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ret = sqlite3VdbeAddOp4(v, OP_Explain, sqlite3VdbeCurrentAddr(v),
151580 151993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->addrExplain, 0, zMsg,P4_DYNAMIC);
151994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
151995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatus(v, sqlite3VdbeCurrentAddr(v)-1, 0, 0, 0, 0);
151581 151996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return ret;
151582 151997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151583 151998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_EXPLAIN */
151584 151999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151585 152000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_STMT_SCANSTATUS
@@ -151598,18 +152013,31 @@
151598 152013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLevel *pLvl, /* Level to add scanstatus() entry for */
151599 152014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrExplain /* Address of OP_Explain (or 0) */
151600 152015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
151601 152016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zObj = 0;
151602 152017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop *pLoop = pLvl->pWLoop;
151603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pLoop->wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){
152018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int wsFlags = pLoop->wsFlags;
152019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int viaCoroutine = 0;
152020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
152021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (wsFlags & WHERE_VIRTUALTABLE)==0 && pLoop->u.btree.pIndex!=0 ){
151604 152022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zObj = pLoop->u.btree.pIndex->zName;
151605 152023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
151606 152024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zObj = pSrclist->a[pLvl->iFrom].zName;
152025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ viaCoroutine = pSrclist->a[pLvl->iFrom].fg.viaCoroutine;
151607 152026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151608 152027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeScanStatus(
151609 152028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v, addrExplain, pLvl->addrBody, pLvl->addrVisit, pLoop->nOut, zObj
151610 152029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
152030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
152031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( viaCoroutine==0 ){
152032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (wsFlags & (WHERE_MULTI_OR|WHERE_AUTO_INDEX))==0 ){
152033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iTabCur);
152034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
152035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( wsFlags & WHERE_INDEXED ){
152036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExplain, -1, pLvl->iIdxCur);
152037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
152038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
151611 152039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151612 152040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
151613 152041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151614 152042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
151615 152043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
@@ -155999,11 +156427,11 @@
155999 156427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** terms means that no sorting is needed at all. A return that
156000 156428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is positive but less than the number of ORDER BY terms means that
156001 156429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** block sorting is required.
156002 156430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
156003 156431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3WhereIsOrdered(WhereInfo *pWInfo){
156004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return pWInfo->nOBSat;
156432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pWInfo->nOBSat<0 ? 0 : pWInfo->nOBSat;
156005 156433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
156006 156434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156007 156435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
156008 156436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In the ORDER BY LIMIT optimization, if the inner-most loop is known
156009 156437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to emit rows in increasing order, and if the last row emitted by the
@@ -156744,10 +157172,61 @@
156744 157172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
156745 157173 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
156746 157174 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156747 157175 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156748 157176 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOMATIC_INDEX
157177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
157178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
157179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
157180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Argument pIdx represents an automatic index that the current statement
157181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** will create and populate. Add an OP_Explain with text of the form:
157182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
157183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CREATE AUTOMATIC INDEX ON <table>(<cols>) [WHERE <expr>]
157184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
157185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This is only required if sqlite3_stmt_scanstatus() is enabled, to
157186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** associate an SQLITE_SCANSTAT_NCYCLE and SQLITE_SCANSTAT_NLOOP
157187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** values with. In order to avoid breaking legacy code and test cases,
157188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the OP_Explain is not added if this is an EXPLAIN QUERY PLAN command.
157189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
157190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void explainAutomaticIndex(
157191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse,
157192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Index *pIdx, /* Automatic index to explain */
157193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int bPartial, /* True if pIdx is a partial index */
157194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int *pAddrExplain /* OUT: Address of OP_Explain */
157195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
157196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->explain!=2 ){
157197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Table *pTab = pIdx->pTable;
157198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zSep = "";
157199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *zText = 0;
157200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii = 0;
157201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str *pStr = sqlite3_str_new(pParse->db);
157202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_appendf(pStr,"CREATE AUTOMATIC INDEX ON %s(", pTab->zName);
157203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIdx->nColumn>1 );
157204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pIdx->aiColumn[pIdx->nColumn-1]==XN_ROWID );
157205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<(pIdx->nColumn-1); ii++){
157206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const char *zName = 0;
157207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iCol = pIdx->aiColumn[ii];
157208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
157209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zName = pTab->aCol[iCol].zCnName;
157210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_appendf(pStr, "%s%s", zSep, zName);
157211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zSep = ", ";
157212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
157213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zText = sqlite3_str_finish(pStr);
157214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( zText==0 ){
157215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3OomFault(pParse->db);
157216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
157217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pAddrExplain = sqlite3VdbeExplain(
157218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse, 0, "%s)%s", zText, (bPartial ? " WHERE <expr>" : "")
157219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ );
157220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(zText);
157221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
157222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
157223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
157224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
157225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define explainAutomaticIndex(a,b,c,d)
157226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
157227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
156749 157228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
156750 157229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Generate code to construct the Index object for an automatic index
156751 157230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and to set up the WhereLevel object pLevel so that the code generator
156752 157231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** makes use of the automatic index.
156753 157232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -156779,10 +157258,13 @@
156779 157258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pPartial = 0; /* Partial Index Expression */
156780 157259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iContinue = 0; /* Jump here to skip excluded rows */
156781 157260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pTabItem; /* FROM clause term being indexed */
156782 157261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrCounter = 0; /* Address where integer counter is initialized */
156783 157262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regBase; /* Array of registers where record is assembled */
157263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_ENABLE_STMT_SCANSTATUS
157264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int addrExp = 0; /* Address of OP_Explain */
157265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
156784 157266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156785 157267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Generate code to skip over the creation and initialization of the
156786 157268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** transient index on 2nd and subsequent iterations of the loop. */
156787 157269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
v = pParse->pVdbe;
156788 157270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( v!=0 );
@@ -156902,10 +157384,11 @@
156902 157384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( n==nKeyCol );
156903 157385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdx->aiColumn[n] = XN_ROWID;
156904 157386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pIdx->azColl[n] = sqlite3StrBINARY;
156905 157387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156906 157388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Create the automatic index */
157389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ explainAutomaticIndex(pParse, pIdx, pPartial!=0, &addrExp);
156907 157390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pLevel->iIdxCur>=0 );
156908 157391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel->iIdxCur = pParse->nTab++;
156909 157392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_OpenAutoindex, pLevel->iIdxCur, nKeyCol+1);
156910 157393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeSetP4KeyInfo(pParse, pIdx);
156911 157394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "for %s", pTable->zName));
@@ -156937,10 +157420,11 @@
156937 157420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
156938 157421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLevel->regFilter ){
156939 157422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v, OP_FilterAdd, pLevel->regFilter, 0,
156940 157423 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regBase, pLoop->u.btree.nEq);
156941 157424 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157425 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusCounters(v, addrExp, addrExp, sqlite3VdbeCurrentAddr(v));
156942 157426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_IdxInsert, pLevel->iIdxCur, regRecord);
156943 157427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
156944 157428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPartial ) sqlite3VdbeResolveLabel(v, iContinue);
156945 157429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTabItem->fg.viaCoroutine ){
156946 157430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP2(v, addrCounter, regBase+n);
@@ -156957,10 +157441,11 @@
156957 157441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addrTop);
156958 157442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, regRecord);
156959 157443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156960 157444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Jump here when skipping the initialization */
156961 157445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addrInit);
157446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeScanStatusRange(v, addrExp, addrExp, -1);
156962 157447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
156963 157448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
end_auto_index_create:
156964 157449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprDelete(pParse->db, pPartial);
156965 157450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
156966 157451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_AUTOMATIC_INDEX */
@@ -174461,10 +174946,11 @@
174461 174946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_ROW: zName = "SQLITE_ROW"; break;
174462 174947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_NOTICE: zName = "SQLITE_NOTICE"; break;
174463 174948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_NOTICE_RECOVER_WAL: zName = "SQLITE_NOTICE_RECOVER_WAL";break;
174464 174949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_NOTICE_RECOVER_ROLLBACK:
174465 174950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zName = "SQLITE_NOTICE_RECOVER_ROLLBACK"; break;
174951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ case SQLITE_NOTICE_RBU: zName = "SQLITE_NOTICE_RBU"; break;
174466 174952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_WARNING: zName = "SQLITE_WARNING"; break;
174467 174953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_WARNING_AUTOINDEX: zName = "SQLITE_WARNING_AUTOINDEX"; break;
174468 174954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case SQLITE_DONE: zName = "SQLITE_DONE"; break;
174469 174955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
174470 174956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -175013,11 +175499,11 @@
175013 175499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
175014 175500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_enter(db->mutex);
175015 175501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3FindFunction(db, zName, nArg, SQLITE_UTF8, 0)!=0;
175016 175502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(db->mutex);
175017 175503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) return SQLITE_OK;
175018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- zCopy = sqlite3_mprintf(zName);
175504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ zCopy = sqlite3_mprintf("%s", zName);
175019 175505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zCopy==0 ) return SQLITE_NOMEM;
175020 175506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3_create_function_v2(db, zName, nArg, SQLITE_UTF8,
175021 175507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zCopy, sqlite3InvalidFunction, 0, 0, sqlite3_free);
175022 175508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
175023 175509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -211261,25 +211747,25 @@
211261 211747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** * Calls to xShmLock(UNLOCK) to release the exclusive shm WRITER,
211262 211748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** READ0 and CHECKPOINT locks taken as part of the checkpoint are
211263 211749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** no-ops. These locks will not be released until the connection
211264 211750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is closed.
211265 211751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
211266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** * Attempting to xSync() the database file causes an SQLITE_INTERNAL
211752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * Attempting to xSync() the database file causes an SQLITE_NOTICE
211267 211753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** error.
211268 211754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
211269 211755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** As a result, unless an error (i.e. OOM or SQLITE_BUSY) occurs, the
211270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** checkpoint below fails with SQLITE_INTERNAL, and leaves the aFrame[]
211756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** checkpoint below fails with SQLITE_NOTICE, and leaves the aFrame[]
211271 211757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** array populated with a set of (frame -> page) mappings. Because the
211272 211758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** WRITER, CHECKPOINT and READ0 locks are still held, it is safe to copy
211273 211759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** data from the wal file into the database file according to the
211274 211760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** contents of aFrame[].
211275 211761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
211276 211762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->rc==SQLITE_OK ){
211277 211763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc2;
211278 211764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->eStage = RBU_STAGE_CAPTURE;
211279 211765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc2 = sqlite3_exec(p->dbMain, "PRAGMA main.wal_checkpoint=restart", 0, 0,0);
211280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc2!=SQLITE_INTERNAL ) p->rc = rc2;
211766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc2!=SQLITE_NOTICE ) p->rc = rc2;
211281 211767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
211282 211768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
211283 211769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->rc==SQLITE_OK && p->nFrame>0 ){
211284 211770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->eStage = RBU_STAGE_CKPT;
211285 211771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nStep = (pState ? pState->nRow : 0);
@@ -211321,11 +211807,11 @@
211321 211807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const u32 mReq = (1<<WAL_LOCK_WRITE)|(1<<WAL_LOCK_CKPT)|(1<<WAL_LOCK_READ0);
211322 211808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 iFrame;
211323 211809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
211324 211810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRbu->mLock!=mReq ){
211325 211811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRbu->rc = SQLITE_BUSY;
211326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_INTERNAL;
211812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOTICE_RBU;
211327 211813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
211328 211814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
211329 211815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pRbu->pgsz = iAmt;
211330 211816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pRbu->nFrame==pRbu->nFrameAlloc ){
211331 211817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nNew = (pRbu->nFrameAlloc ? pRbu->nFrameAlloc : 64) * 2;
@@ -212708,11 +213194,11 @@
212708 213194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are recorded. Additionally, successful attempts to obtain exclusive
212709 213195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xShmLock() WRITER, CHECKPOINTER and READ0 locks on the target
212710 213196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** database file are recorded. xShmLock() calls to unlock the same
212711 213197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** locks are no-ops (so that once obtained, these locks are never
212712 213198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** relinquished). Finally, calls to xSync() on the target database
212713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** file fail with SQLITE_INTERNAL errors.
213199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** file fail with SQLITE_NOTICE errors.
212714 213200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
212715 213201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
212716 213202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void rbuUnlockShm(rbu_file *p){
212717 213203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->openFlags & SQLITE_OPEN_MAIN_DB );
212718 213204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pRbu ){
@@ -212987,11 +213473,11 @@
212987 213473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
212988 213474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int rbuVfsSync(sqlite3_file *pFile, int flags){
212989 213475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rbu_file *p = (rbu_file *)pFile;
212990 213476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pRbu && p->pRbu->eStage==RBU_STAGE_CAPTURE ){
212991 213477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->openFlags & SQLITE_OPEN_MAIN_DB ){
212992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_INTERNAL;
213478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOTICE_RBU;
212993 213479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212994 213480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
212995 213481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
212996 213482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return p->pReal->pMethods->xSync(p->pReal, flags);
212997 213483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -218263,10 +218749,26 @@
218263 218749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
218264 218750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( p->bInvert ){
218265 218751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->op==SQLITE_INSERT ) p->op = SQLITE_DELETE;
218266 218752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
else if( p->op==SQLITE_DELETE ) p->op = SQLITE_INSERT;
218267 218753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
218754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
218755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If this is an UPDATE that is part of a changeset, then check that
218756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** there are no fields in the old.* record that are not (a) PK fields,
218757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or (b) also present in the new.* record.
218758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
218759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Such records are technically corrupt, but the rebaser was at one
218760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** point generating them. Under most circumstances this is benign, but
218761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** can cause spurious SQLITE_RANGE errors when applying the changeset. */
218762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->bPatchset==0 && p->op==SQLITE_UPDATE){
218763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<p->nCol; i++){
218764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->abPK[i]==0 && p->apValue[i+p->nCol]==0 ){
218765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ValueFree(p->apValue[i]);
218766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->apValue[i] = 0;
218767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
218768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
218769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
218268 218770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
218269 218771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
218270 218772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_ROW;
218271 218773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
218272 218774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -220459,11 +220961,11 @@
220459 220961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n2 = sessionSerialLen(a2);
220460 220962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIter->abPK[i] || a2[0]==0 ){
220461 220963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pIter->abPK[i] && a1[0] ) bData = 1;
220462 220964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pOut, a1, n1);
220463 220965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut += n1;
220464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( a2[0]!=0xFF ){
220966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( a2[0]!=0xFF && a1[0] ){
220465 220967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bData = 1;
220466 220968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(pOut, a2, n2);
220467 220969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOut += n2;
220468 220970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
220469 220971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pOut++ = '\0';
@@ -239022,11 +239524,11 @@
239022 239524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg, /* Number of args */
239023 239525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **apUnused /* Function arguments */
239024 239526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
239025 239527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nArg==0 );
239026 239528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAM2(nArg, apUnused);
239027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_text(pCtx, "fts5: 2022-12-03 19:04:09 1a61c500add4a2bfe80c0c691d559cfca166dc5f8262651a58da7ec16a51d430", -1, SQLITE_TRANSIENT);
239529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_text(pCtx, "fts5: 2022-12-15 15:37:52 751e344f4cd2045caf97920cc9f4571caf0de1ba83b94ded902a03b36c10a389", -1, SQLITE_TRANSIENT);
239028 239530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
239029 239531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
239030 239532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
239031 239533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if zName is the extension on one of the shadow tables used
239032 239534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by this module.
239033 239535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!