@@ -1,8 +1,8 @@
1 1 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/******************************************************************************
2 2 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This file is an amalgamation of many separate C source files from SQLite
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** version 3.40.0. By combining all the individual C code files into this
3 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** version 3.41.0. By combining all the individual C code files into this
4 4 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** single large file, the entire code can be compiled as a single translation
5 5 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** unit. This allows many compilers to do optimizations that would not be
6 6 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** possible if the files were compiled separately. Performance improvements
7 7 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of 5% or more are commonly seen when SQLite is compiled as a single
8 8 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** translation unit.
@@ -450,13 +450,13 @@
450 450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
451 451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See also: [sqlite3_libversion()],
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 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION "3.40.0"
456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_VERSION_NUMBER 3040000
457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_SOURCE_ID "2022-11-16 19:57:21 5689f0d9ad1be532b274508938b25ff0d63027b8cc31f796dfaa2cca71d53642"
455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_VERSION "3.41.0"
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"
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!
**
@@ -1496,10 +1496,16 @@
1496 1496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by clients within the current process, only within other processes.
1497 1497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
1498 1498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
1499 1499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** <li>[[SQLITE_FCNTL_CKSM_FILE]]
1500 1500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Used by the cksmvfs VFS module only.
1501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
1502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** <li>[[SQLITE_FCNTL_RESET_CACHE]]
1503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If there is currently no transaction open on the database, and the
1504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** database is not a temp db, then this file-control purges the contents
1505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the in-memory page cache. If there is an open transaction, or if
1506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the db is a temp-db, it is a no-op, not an error.
1501 1507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** </ul>
1502 1508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
1503 1509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_LOCKSTATE 1
1504 1510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_GET_LOCKPROXYFILE 2
1505 1511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_SET_LOCKPROXYFILE 3
@@ -1538,10 +1544,11 @@
1538 1544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_CKPT_DONE 37
1539 1545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_RESERVE_BYTES 38
1540 1546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_CKPT_START 39
1541 1547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_EXTERNAL_READER 40
1542 1548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_FCNTL_CKSM_FILE 41
1549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_FCNTL_RESET_CACHE 42
1543 1550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
1544 1551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* deprecated names */
1545 1552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_GET_LOCKPROXYFILE SQLITE_FCNTL_GET_LOCKPROXYFILE
1546 1553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_SET_LOCKPROXYFILE SQLITE_FCNTL_SET_LOCKPROXYFILE
1547 1554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define SQLITE_LAST_ERRNO SQLITE_FCNTL_LAST_ERRNO
@@ -5846,20 +5853,10 @@
5846 5853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** such a conversion is possible without loss of information (in other
5847 5854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** words, if the value is a string that looks like a number)
5848 5855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then the conversion is performed. Otherwise no conversion occurs.
5849 5856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The [SQLITE_INTEGER | datatype] after conversion is returned.)^
5850 5857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
5851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8],
5852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current encoding
5853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X)
5854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** returns something other than SQLITE_TEXT, then the return value from
5855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3_value_encoding(X) is meaningless. ^Calls to
5856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3_value_text(X), sqlite3_value_text16(X), sqlite3_value_text16be(X),
5857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3_value_text16le(X), sqlite3_value_bytes(X), or
5858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3_value_bytes16(X) might change the encoding of the value X and
5859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** thus change the return from subsequent calls to sqlite3_value_encoding(X).
5860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
5861 5858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** ^Within the [xUpdate] method of a [virtual table], the
5862 5859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_value_nochange(X) interface returns true if and only if
5863 5860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the column corresponding to X is unchanged by the UPDATE operation
5864 5861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the xUpdate method call was invoked to implement and if
5865 5862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and the prior [xColumn] method call that was invoked to extracted
@@ -5920,10 +5917,31 @@
5920 5917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_bytes16(sqlite3_value*);
5921 5918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_type(sqlite3_value*);
5922 5919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_numeric_type(sqlite3_value*);
5923 5920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_nochange(sqlite3_value*);
5924 5921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_frombind(sqlite3_value*);
5922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
5923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
5924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** CAPI3REF: Report the internal text encoding state of an sqlite3_value object
5925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** METHOD: sqlite3_value
5926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
5927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** ^(The sqlite3_value_encoding(X) interface returns one of [SQLITE_UTF8],
5928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [SQLITE_UTF16BE], or [SQLITE_UTF16LE] according to the current text encoding
5929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** of the value X, assuming that X has type TEXT.)^ If sqlite3_value_type(X)
5930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returns something other than SQLITE_TEXT, then the return value from
5931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3_value_encoding(X) is meaningless. ^Calls to
5932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_value_text(X)], [sqlite3_value_text16(X)], [sqlite3_value_text16be(X)],
5933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_value_text16le(X)], [sqlite3_value_bytes(X)], or
5934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** [sqlite3_value_bytes16(X)] might change the encoding of the value X and
5935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** thus change the return from subsequent calls to sqlite3_value_encoding(X).
5936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
5937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine is intended for used by applications that test and validate
5938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the SQLite implementation. This routine is inquiring about the opaque
5939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** internal state of an [sqlite3_value] object. Ordinary applications should
5940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** not need to know what the internal state of an sqlite3_value object is and
5941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** hence should not need to use this interface.
5942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
5925 5943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_value_encoding(sqlite3_value*);
5926 5944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
5927 5945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
5928 5946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** CAPI3REF: Finding The Subtype Of SQL Values
5929 5947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** METHOD: sqlite3_value
@@ -14526,18 +14544,41 @@
14526 14544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
14527 14545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(SQLITE_DEBUG) \
14528 14546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (defined(SQLITE_TEST) || defined(SQLITE_ENABLE_SELECTTRACE) \
14529 14547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| defined(SQLITE_ENABLE_TREETRACE))
14530 14548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define TREETRACE_ENABLED 1
14531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SELECTTRACE(K,P,S,X) \
14549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define TREETRACE(K,P,S,X) \
14532 14550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(sqlite3TreeTrace&(K)) \
14533 14551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("%u/%d/%p: ",(S)->selId,(P)->addrExplain,(S)),\
14534 14552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf X
14535 14553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
14536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- # define SELECTTRACE(K,P,S,X)
14554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define TREETRACE(K,P,S,X)
14537 14555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define TREETRACE_ENABLED 0
14538 14556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
14557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
14558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TREETRACE flag meanings:
14559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
14560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000001 Beginning and end of SELECT processing
14561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000002 WHERE clause processing
14562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000004 Query flattener
14563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000008 Result-set wildcard expansion
14564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000010 Query name resolution
14565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000020 Aggregate analysis
14566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000040 Window functions
14567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000080 Generated column names
14568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000100 Move HAVING terms into WHERE
14569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000200 Count-of-view optimization
14570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000400 Compound SELECT processing
14571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000800 Drop superfluous ORDER BY
14572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00001000 LEFT JOIN simplifies to JOIN
14573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00002000 Constant propagation
14574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00004000 Push-down optimization
14575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00008000 After all FROM-clause analysis
14576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00010000 Beginning of DELETE/INSERT/UPDATE processing
14577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00020000 Transform DISTINCT into GROUP BY
14578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00040000 SELECT tree dump after all code has been generated
14579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
14539 14580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14540 14581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14541 14582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for "wheretrace"
14542 14583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
14543 14584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE u32 sqlite3WhereTrace;
@@ -14546,10 +14587,40 @@
14546 14587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define WHERETRACE(K,X) if(sqlite3WhereTrace&(K)) sqlite3DebugPrintf X
14547 14588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define WHERETRACE_ENABLED 1
14548 14589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
14549 14590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define WHERETRACE(K,X)
14550 14591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
14592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
14593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
14594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Bits for the sqlite3WhereTrace mask:
14595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
14596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (---any--) Top-level block structure
14597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x-------F High-level debug messages
14598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x----FFF- More detail
14599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0xFFFF---- Low-level debug messages
14600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
14601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000001 Code generation
14602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000002 Solver
14603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000004 Solver costs
14604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000008 WhereLoop inserts
14605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
14606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000010 Display sqlite3_index_info xBestIndex calls
14607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000020 Range an equality scan metrics
14608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000040 IN operator decisions
14609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000080 WhereLoop cost adjustements
14610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000100
14611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000200 Covering index decisions
14612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000400 OR optimization
14613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00000800 Index scanner
14614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00001000 More details associated with code generation
14615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00002000
14616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00004000 Show all WHERE terms at key points
14617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00008000 Show the full SELECT statement at key places
14618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
14619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00010000 Show more detail when printing WHERE terms
14620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0x00020000 Show WHERE terms returned from whereScanNext()
14621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
14551 14622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14552 14623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
14553 14624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
14554 14625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** An instance of the following structure is used to store the busy-handler
14555 14626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** callback for a given sqlite handle.
@@ -15711,10 +15782,12 @@
15711 15782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_WAL
15712 15783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeCheckpoint(Btree*, int, int *, int *);
15713 15784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
15714 15785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
15715 15786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor*, BtCursor*, i64);
15787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
15788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3BtreeClearCache(Btree*);
15716 15789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
15717 15790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
15718 15791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If we are not using shared cache, then there is no need to
15719 15792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** use mutexes to access the BtShared structures. So make the
15720 15793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Enter and Leave procedures no-ops.
@@ -18106,20 +18179,19 @@
18106 18179 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo {
18107 18180 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 directMode; /* Direct rendering mode means take data directly
18108 18181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** from source tables rather than from accumulators */
18109 18182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 useSortingIdx; /* In direct mode, reference the sorting index rather
18110 18183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** than the source table */
18184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 nSortingColumn; /* Number of columns in the sorting index */
18111 18185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sortingIdx; /* Cursor number of the sorting index */
18112 18186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sortingIdxPTab; /* Cursor number of pseudo-table */
18113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nSortingColumn; /* Number of columns in the sorting index */
18114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int mnReg, mxReg; /* Range of registers allocated for aCol and aFunc */
18187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iFirstReg; /* First register in range for aCol[] and aFunc[] */
18115 18188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pGroupBy; /* The group by clause */
18116 18189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_col { /* For each column used in source tables */
18117 18190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab; /* Source table */
18118 18191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pCExpr; /* The original expression */
18119 18192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTable; /* Cursor number of the source table */
18120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iMem; /* Memory location that acts as accumulator */
18121 18193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 iColumn; /* Column number within the source table */
18122 18194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i16 iSorterColumn; /* Column number in the sorting index */
18123 18195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} *aCol;
18124 18196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nColumn; /* Number of used entries in aCol[] */
18125 18197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nAccumulator; /* Number of columns that show through to the output.
@@ -18126,18 +18198,28 @@
18126 18198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Additional columns are used only as parameters to
18127 18199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** aggregate functions */
18128 18200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func { /* For each aggregate function */
18129 18201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pFExpr; /* Expression encoding the function */
18130 18202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
FuncDef *pFunc; /* The aggregate function implementation */
18131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int iMem; /* Memory location that acts as accumulator */
18132 18203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDistinct; /* Ephemeral table used to enforce DISTINCT */
18133 18204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDistAddr; /* Address of OP_OpenEphemeral */
18134 18205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} *aFunc;
18135 18206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nFunc; /* Number of entries in aFunc[] */
18136 18207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 selId; /* Select to which this AggInfo belongs */
18137 18208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
18138 18209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
18210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
18211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Macros to compute aCol[] and aFunc[] register numbers.
18212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
18213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** These macros should not be used prior to the call to
18214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** assignAggregateRegisters() that computes the value of pAggInfo->iFirstReg.
18215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The assert()s that are part of this macro verify that constraint.
18216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
18217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define AggInfoColumnReg(A,I) (assert((A)->iFirstReg),(A)->iFirstReg+(I))
18218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define AggInfoFuncReg(A,I) \
18219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (assert((A)->iFirstReg),(A)->iFirstReg+(A)->nColumn+(I))
18220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
18139 18221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
18140 18222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The datatype ynVar is a signed integer, either 16-bit or 32-bit.
18141 18223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Usually it is 16-bits. But if SQLITE_MAX_VARIABLE_NUMBER is greater
18142 18224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** than 32767 we have to make it 32-bit. 16-bit is preferred because
18143 18225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it uses less memory in the Expr object, which is a big memory user
@@ -19046,11 +19128,11 @@
19046 19128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the base register during check-constraint eval */
19047 19129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLabel; /* The *negative* of the number of labels used */
19048 19130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLabelAlloc; /* Number of slots in aLabel */
19049 19131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int *aLabel; /* Space to hold the labels */
19050 19132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pConstExpr;/* Constant expressions */
19051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IndexedExpr *pIdxExpr;/* List of expressions used by active indexes */
19133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexedExpr *pIdxEpr;/* List of expressions used by active indexes */
19052 19134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Token constraintName;/* Name of the constraint currently being parsed */
19053 19135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
yDbMask writeMask; /* Start a write transaction on these databases */
19054 19136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
yDbMask cookieMask; /* Bitmask of schema verified databases */
19055 19137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRowid; /* Register holding rowid of CREATE TABLE entry */
19056 19138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regRoot; /* Register holding root page number for new objects */
@@ -20393,10 +20475,13 @@
20393 20475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3ErrName(int);
20394 20476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20395 20477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20396 20478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_DESERIALIZE
20397 20479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3MemdbInit(void);
20480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3IsMemdb(const sqlite3_vfs*);
20481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
20482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ # define sqlite3IsMemdb(X) 0
20398 20483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20399 20484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20400 20485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3ErrStr(int);
20401 20486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3ReadSchema(Parse *pParse);
20402 20487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE CollSeq *sqlite3FindCollSeq(sqlite3*,u8 enc, const char*,int);
@@ -20889,10 +20974,14 @@
20889 20974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20890 20975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20891 20976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_UNIX && defined(SQLITE_OS_KV_OPTIONAL)
20892 20977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3KvvfsInit(void);
20893 20978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
20979 { 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)
20981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite3_uint64 sqlite3Hwtime(void);
20982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
20894 20983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20895 20984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITEINT_H */
20896 20985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20897 20986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of sqliteInt.h *******************************************/
20898 20987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file os_common.h ***************************************/
@@ -20931,105 +21020,10 @@
20931 21020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Macros for performance tracing. Normally turned off. Only works
20932 21021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on i486 hardware.
20933 21022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
20934 21023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_PERFORMANCE_TRACE
20935 21024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
20936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
20937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** hwtime.h contains inline assembler code for implementing
20938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** high-performance timing routines.
20939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
20940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /************** Include hwtime.h in the middle of os_common.h ****************/
20941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /************** Begin file hwtime.h ******************************************/
20942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
20943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** 2008 May 27
20944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
20945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The author disclaims copyright to this source code. In place of
20946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** a legal notice, here is a blessing:
20947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
20948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** May you do good and not evil.
20949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** May you find forgiveness for yourself and forgive others.
20950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** May you share freely, never taking more than you give.
20951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
20952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ******************************************************************************
20953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
20954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This file contains inline asm code for retrieving "high-performance"
20955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** counters for x86 and x86_64 class CPUs.
20956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
20957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_HWTIME_H
20958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define SQLITE_HWTIME_H
20959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
20961 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The following routine only works on pentium-class (or newer) processors.
20962 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** It uses the RDTSC opcode to read the cycle count value out of the
20963 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** processor and returns that value. This can be used for high-res
20964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** profiling.
20965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
20966 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if !defined(__STRICT_ANSI__) && \
20967 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (defined(__GNUC__) || defined(_MSC_VER)) && \
20968 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (defined(i386) || defined(__i386__) || defined(_M_IX86))
20969 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20970 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if defined(__GNUC__)
20971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __inline__ sqlite_uint64 sqlite3Hwtime(void){
20973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned int lo, hi;
20974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
20975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (sqlite_uint64)hi << 32 | lo;
20976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
20977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #elif defined(_MSC_VER)
20979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
20981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __asm {
20982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rdtsc
20983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ret ; return value at EDX:EAX
20984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
20985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
20986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
20988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__))
20990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __inline__ sqlite_uint64 sqlite3Hwtime(void){
20992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned long val;
20993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __asm__ __volatile__ ("rdtsc" : "=A" (val));
20994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return val;
20995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
20996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__))
20998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
20999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __inline__ sqlite_uint64 sqlite3Hwtime(void){
21000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned long long retval;
21001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- unsigned long junk;
21002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- __asm__ __volatile__ ("\n\
21003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 1: mftbu %1\n\
21004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mftb %L0\n\
21005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- mftbu %0\n\
21006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- cmpw %0,%1\n\
21007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- bne 1b"
21008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- : "=r" (retval), "=r" (junk));
21009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return retval;
21010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
21011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
21012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #else
21013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
21014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
21015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** asm() is needed for hardware timing support. Without asm(),
21016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** disable the sqlite3Hwtime() routine.
21017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
21018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** sqlite3Hwtime() is only used for some obscure debugging
21019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** and analysis configurations, not in any deliverable, so this
21020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** should not be a great loss.
21021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
21022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
21023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
21024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
21025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
21026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif /* !defined(SQLITE_HWTIME_H) */
21027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
21028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /************** End of hwtime.h **********************************************/
21029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /************** Continuing where we left off in os_common.h ******************/
21030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
21031 21025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite_uint64 g_start;
21032 21026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static sqlite_uint64 g_elapsed;
21033 21027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TIMER_START g_start=sqlite3Hwtime()
21034 21028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TIMER_END g_elapsed=sqlite3Hwtime()-g_start
21035 21029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define TIMER_ELAPSED g_elapsed
@@ -29200,11 +29194,11 @@
29200 29194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a limit on the size parameter to sqlite3_malloc() and sqlite3_realloc().
29201 29195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
29202 29196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The upper bound is slightly less than 2GiB: 0x7ffffeff == 2,147,483,391
29203 29197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This provides a 256-byte safety margin for defense against 32-bit
29204 29198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** signed integer overflow bugs when computing memory allocation sizes.
29205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Parnoid applications might want to reduce the maximum allocation size
29199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Paranoid applications might want to reduce the maximum allocation size
29206 29200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** further for an even larger safety margin. 0x3fffffff or 0x0fffffff
29207 29201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or even smaller would be reasonable upper bounds on the size of a memory
29208 29202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** allocations for most applications.
29209 29203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29210 29204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_MAX_ALLOCATION_SIZE
@@ -29714,13 +29708,18 @@
29714 29708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQL statement. Make a copy of this phrase in space obtained form
29715 29709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3DbMalloc(). Omit leading and trailing whitespace.
29716 29710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
29717 29711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){
29718 29712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n;
29713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef SQLITE_DEBUG
29714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Because of the way the parser works, the span is guaranteed to contain
29715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** at least one non-space character */
29716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(n=0; sqlite3Isspace(zStart[n]); n++){ assert( &zStart[n]<zEnd ); }
29717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
29719 29718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( sqlite3Isspace(zStart[0]) ) zStart++;
29720 29719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = (int)(zEnd - zStart);
29721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( ALWAYS(n>0) && sqlite3Isspace(zStart[n-1]) ) n--;
29720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( sqlite3Isspace(zStart[n-1]) ) n--;
29722 29721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3DbStrNDup(db, zStart, n);
29723 29722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
29724 29723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
29725 29724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
29726 29725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Free any prior content in *pz and replace it with a copy of zNew.
@@ -31698,11 +31697,11 @@
31698 31697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr==0 ){
31699 31698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewLine(pView, "nil");
31700 31699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewPop(&pView);
31701 31700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
31702 31701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags ){
31702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->flags || pExpr->affExpr || pExpr->vvaFlags || pExpr->pAggInfo ){
31704 31703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
StrAccum x;
31705 31704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StrAccumInit(&x, 0, zFlgs, sizeof(zFlgs), 0);
31706 31705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&x, " fg.af=%x.%c",
31707 31706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->flags, pExpr->affExpr ? pExpr->affExpr : 'n');
31708 31707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExprHasProperty(pExpr, EP_OuterON) ){
@@ -31715,10 +31714,13 @@
31715 31714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&x, " DDL");
31716 31715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31717 31716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ExprHasVVAProperty(pExpr, EP_Immutable) ){
31718 31717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_str_appendf(&x, " IMMUTABLE");
31719 31718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->pAggInfo!=0 ){
31720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_str_appendf(&x, " agg-column[%d]", pExpr->iAgg);
31721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
31720 31722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3StrAccumFinish(&x);
31721 31723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
31722 31724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zFlgs[0] = 0;
31723 31725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
31724 31726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pExpr->op ){
@@ -35193,10 +35195,106 @@
35193 35195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i += pIn[i+1];
35194 35196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( i<mx );
35195 35197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
35196 35198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
35197 35199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
35201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** High-resolution hardware timer used for debugging and testing only.
35202 { 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)
35204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Include hwtime.h in the middle of util.c *********************/
35205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Begin file hwtime.h ******************************************/
35206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
35207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 2008 May 27
35208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The author disclaims copyright to this source code. In place of
35210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a legal notice, here is a blessing:
35211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you do good and not evil.
35213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you find forgiveness for yourself and forgive others.
35214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** May you share freely, never taking more than you give.
35215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ******************************************************************************
35217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This file contains inline asm code for retrieving "high-performance"
35219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** counters for x86 and x86_64 class CPUs.
35220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
35221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_HWTIME_H
35222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_HWTIME_H
35223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
35225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The following routine only works on pentium-class (or newer) processors.
35226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** It uses the RDTSC opcode to read the cycle count value out of the
35227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** processor and returns that value. This can be used for high-res
35228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** profiling.
35229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
35230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if !defined(__STRICT_ANSI__) && \
35231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (defined(__GNUC__) || defined(_MSC_VER)) && \
35232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ (defined(i386) || defined(__i386__) || defined(_M_IX86))
35233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if defined(__GNUC__)
35235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
35237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned int lo, hi;
35238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
35239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return (sqlite_uint64)hi << 32 | lo;
35240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
35241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif defined(_MSC_VER)
35243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __declspec(naked) __inline sqlite_uint64 __cdecl sqlite3Hwtime(void){
35245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm {
35246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rdtsc
35247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ret ; return value at EDX:EAX
35248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
35249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
35250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
35252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__x86_64__))
35254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35255 { 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;
35259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
35260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #elif !defined(__STRICT_ANSI__) && (defined(__GNUC__) && defined(__ppc__))
35262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __inline__ sqlite_uint64 sqlite3Hwtime(void){
35264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned long long retval;
35265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ unsigned long junk;
35266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ __asm__ __volatile__ ("\n\
35267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 1: mftbu %1\n\
35268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mftb %L0\n\
35269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ mftbu %0\n\
35270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ cmpw %0,%1\n\
35271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ bne 1b"
35272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ : "=r" (retval), "=r" (junk));
35273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return retval;
35274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
35275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
35277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
35279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** asm() is needed for hardware timing support. Without asm(),
35280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** disable the sqlite3Hwtime() routine.
35281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
35282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** sqlite3Hwtime() is only used for some obscure debugging
35283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and analysis configurations, not in any deliverable, so this
35284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** should not be a great loss.
35285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
35286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE sqlite_uint64 sqlite3Hwtime(void){ return ((sqlite_uint64)0); }
35287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
35289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* !defined(SQLITE_HWTIME_H) */
35291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** End of hwtime.h **********************************************/
35293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /************** Continuing where we left off in util.c ***********************/
35294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
35295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
35198 35296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of util.c ************************************************/
35199 35297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Begin file hash.c ********************************************/
35200 35298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35201 35299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** 2001 September 22
35202 35300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -35727,11 +35825,13 @@
35727 35825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int isJournal; /* True if this is a journal file */
35728 35826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int nJrnl; /* Space allocated for aJrnl[] */
35729 35827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *aJrnl; /* Journal content */
35730 35828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szPage; /* Last known page size */
35731 35829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_int64 szDb; /* Database file size. -1 means unknown */
35830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *aData; /* Buffer to hold page data */
35732 35831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
35832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define SQLITE_KVOS_SZ 133073
35733 35833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
35734 35834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
35735 35835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Methods for KVVfsFile
35736 35836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
35737 35837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int kvvfsClose(sqlite3_file*);
@@ -36168,10 +36268,11 @@
36168 36268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KVVfsFile *pFile = (KVVfsFile *)pProtoFile;
36169 36269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36170 36270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_KV_LOG(("xClose %s %s\n", pFile->zClass,
36171 36271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->isJournal ? "journal" : "db"));
36172 36272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pFile->aJrnl);
36273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_free(pFile->aData);
36173 36274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
36174 36275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36175 36276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
36176 36277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
36177 36278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Read from the -journal file.
@@ -36216,11 +36317,11 @@
36216 36317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
36217 36318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KVVfsFile *pFile = (KVVfsFile*)pProtoFile;
36218 36319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int pgno;
36219 36320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int got, n;
36220 36321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zKey[30];
36221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char aData[133073];
36322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *aData = pFile->aData;
36222 36323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iOfst>=0 );
36223 36324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iAmt>=0 );
36224 36325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_KV_LOG(("xRead('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst));
36225 36326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iOfst+iAmt>=512 ){
36226 36327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (iOfst % iAmt)!=0 ){
@@ -36233,19 +36334,20 @@
36233 36334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pgno = 1 + iOfst/iAmt;
36234 36335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36235 36336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pgno = 1;
36236 36337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36237 36338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_snprintf(sizeof(zKey), zKey, "%u", pgno);
36238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- got = sqlite3KvvfsMethods.xRead(pFile->zClass, zKey, aData, sizeof(aData)-1);
36339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ got = sqlite3KvvfsMethods.xRead(pFile->zClass, zKey,
36340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aData, SQLITE_KVOS_SZ-1);
36239 36341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( got<0 ){
36240 36342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = 0;
36241 36343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36242 36344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aData[got] = 0;
36243 36345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iOfst+iAmt<512 ){
36244 36346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int k = iOfst+iAmt;
36245 36347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aData[k*2] = 0;
36246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = kvvfsDecode(aData, &aData[2000], sizeof(aData)-2000);
36348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = kvvfsDecode(aData, &aData[2000], SQLITE_KVOS_SZ-2000);
36247 36349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n>=iOfst+iAmt ){
36248 36350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(zBuf, &aData[2000+iOfst], iAmt);
36249 36351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = iAmt;
36250 36352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36251 36353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
n = 0;
@@ -36300,11 +36402,11 @@
36300 36402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite_int64 iOfst
36301 36403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
36302 36404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
KVVfsFile *pFile = (KVVfsFile*)pProtoFile;
36303 36405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned int pgno;
36304 36406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char zKey[30];
36305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char aData[131073];
36407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char *aData = pFile->aData;
36306 36408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_KV_LOG(("xWrite('%s-db',%d,%lld)\n", pFile->zClass, iAmt, iOfst));
36307 36409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( iAmt>=512 && iAmt<=65536 );
36308 36410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (iAmt & (iAmt-1))==0 );
36309 36411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pFile->szPage<0 || pFile->szPage==iAmt );
36310 36412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->szPage = iAmt;
@@ -36508,10 +36610,14 @@
36508 36610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36509 36611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( zName[0]=='s' ){
36510 36612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->zClass = "session";
36511 36613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
36512 36614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->zClass = "local";
36615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
36616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pFile->aData = sqlite3_malloc64(SQLITE_KVOS_SZ);
36617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pFile->aData==0 ){
36618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_NOMEM;
36513 36619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
36514 36620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->aJrnl = 0;
36515 36621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->nJrnl = 0;
36516 36622 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->szPage = -1;
36517 36623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFile->szDb = -1;
@@ -43326,11 +43432,11 @@
43326 43432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** requested from the underlying operating system, a number which
43327 43433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** might be greater than or equal to the argument, but not less
43328 43434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** than the argument.
43329 43435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
43330 43436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int unixSleep(sqlite3_vfs *NotUsed, int microseconds){
43331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if OS_VXWORKS
43437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if OS_VXWORKS || _POSIX_C_SOURCE >= 199309L
43332 43438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct timespec sp;
43333 43439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
43334 43440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sp.tv_sec = microseconds / 1000000;
43335 43441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sp.tv_nsec = (microseconds % 1000000) * 1000;
43336 43442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nanosleep(&sp, NULL);
@@ -51816,10 +51922,17 @@
51816 51922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pData);
51817 51923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51818 51924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_mutex_leave(db->mutex);
51819 51925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
51820 51926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
51927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
51928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
51929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if the VFS is the memvfs.
51930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
51931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE int sqlite3IsMemdb(const sqlite3_vfs *pVfs){
51932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pVfs==&memdb_vfs;
51933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
51821 51934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
51822 51935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
51823 51936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine is called when the extension is loaded.
51824 51937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Register the new VFS.
51825 51938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -62136,11 +62249,15 @@
62136 62249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The return value to this routine is always safe to use with
62137 62250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sqlite3_uri_parameter() and sqlite3_filename_database() and friends.
62138 62251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
62139 62252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE const char *sqlite3PagerFilename(const Pager *pPager, int nullIfMemDb){
62140 62253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static const char zFake[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
62141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return (nullIfMemDb && pPager->memDb) ? &zFake[4] : pPager->zFilename;
62254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nullIfMemDb && (pPager->memDb || sqlite3IsMemdb(pPager->pVfs)) ){
62255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return &zFake[4];
62256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
62257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return pPager->zFilename;
62258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
62142 62259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
62143 62260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
62144 62261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
62145 62262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the VFS structure for the pager.
62146 62263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -67719,13 +67836,13 @@
67719 67836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** within an expression that is an argument to another macro
67720 67837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (sqliteMallocRaw), it is not possible to use conditional compilation.
67721 67838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** So, this macro is defined instead.
67722 67839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
67723 67840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOVACUUM
67724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define ISAUTOVACUUM (pBt->autoVacuum)
67841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ISAUTOVACUUM(pBt) (pBt->autoVacuum)
67725 67842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
67726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #define ISAUTOVACUUM 0
67843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define ISAUTOVACUUM(pBt) 0
67727 67844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
67728 67845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67729 67846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
67730 67847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
67731 67848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This structure is passed around through all the sanity checking routines
@@ -69973,66 +70090,71 @@
69973 70090 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** and initialize fields of the MemPage structure accordingly.
69974 70091 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69975 70092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Only the following combinations are supported. Anything different
69976 70093 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** indicates a corrupt database files:
69977 70094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
69978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** PTF_ZERODATA
69979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** PTF_ZERODATA | PTF_LEAF
69980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** PTF_LEAFDATA | PTF_INTKEY
69981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF
70095 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** PTF_ZERODATA (0x02, 2)
70096 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** PTF_LEAFDATA | PTF_INTKEY (0x05, 5)
70097 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** PTF_ZERODATA | PTF_LEAF (0x0a, 10)
70098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF (0x0d, 13)
69982 70099 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
69983 70100 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int decodeFlags(MemPage *pPage, int flagByte){
69984 70101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtShared *pBt; /* A copy of pPage->pBt */
69985 70102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
69986 70103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPage->hdrOffset==(pPage->pgno==1 ? 100 : 0) );
69987 70104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
69988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->leaf = (u8)(flagByte>>3); assert( PTF_LEAF == 1<<3 );
69989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- flagByte &= ~PTF_LEAF;
69990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->childPtrSize = 4-4*pPage->leaf;
69991 70105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt = pPage->pBt;
69992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
69993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* EVIDENCE-OF: R-07291-35328 A value of 5 (0x05) means the page is an
69994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** interior table b-tree page. */
69995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (PTF_LEAFDATA|PTF_INTKEY)==5 );
69996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* EVIDENCE-OF: R-26900-09176 A value of 13 (0x0d) means the page is a
69997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** leaf table b-tree page. */
69998 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (PTF_LEAFDATA|PTF_INTKEY|PTF_LEAF)==13 );
69999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->intKey = 1;
70000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pPage->leaf ){
70106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->max1bytePayload = pBt->max1bytePayload;
70107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( flagByte>=(PTF_ZERODATA | PTF_LEAF) ){
70108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->childPtrSize = 0;
70109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->leaf = 1;
70110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( flagByte==(PTF_LEAFDATA | PTF_INTKEY | PTF_LEAF) ){
70001 70111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->intKeyLeaf = 1;
70002 70112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->xCellSize = cellSizePtrTableLeaf;
70003 70113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->xParseCell = btreeParseCellPtr;
70114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKey = 1;
70115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->maxLocal = pBt->maxLeaf;
70116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->minLocal = pBt->minLeaf;
70117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( flagByte==(PTF_ZERODATA | PTF_LEAF) ){
70118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKey = 0;
70119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKeyLeaf = 0;
70120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xCellSize = cellSizePtr;
70121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xParseCell = btreeParseCellPtrIndex;
70122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->maxLocal = pBt->maxLocal;
70123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->minLocal = pBt->minLocal;
70004 70124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
70125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKey = 0;
70126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKeyLeaf = 0;
70127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xCellSize = cellSizePtr;
70128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xParseCell = btreeParseCellPtrIndex;
70129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_CORRUPT_PAGE(pPage);
70130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->childPtrSize = 4;
70133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->leaf = 0;
70134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( flagByte==(PTF_ZERODATA) ){
70135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKey = 0;
70136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKeyLeaf = 0;
70137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xCellSize = cellSizePtr;
70138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xParseCell = btreeParseCellPtrIndex;
70139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->maxLocal = pBt->maxLocal;
70140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->minLocal = pBt->minLocal;
70141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
70005 70142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->intKeyLeaf = 0;
70006 70143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->xCellSize = cellSizePtrNoPayload;
70007 70144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->xParseCell = btreeParseCellPtrNoPayload;
70008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
70009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->maxLocal = pBt->maxLeaf;
70010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->minLocal = pBt->minLeaf;
70011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( flagByte==PTF_ZERODATA ){
70012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* EVIDENCE-OF: R-43316-37308 A value of 2 (0x02) means the page is an
70013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** interior index b-tree page. */
70014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (PTF_ZERODATA)==2 );
70015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* EVIDENCE-OF: R-59615-42828 A value of 10 (0x0a) means the page is a
70016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** leaf index b-tree page. */
70017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( (PTF_ZERODATA|PTF_LEAF)==10 );
70018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->intKey = 0;
70019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->intKeyLeaf = 0;
70020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->xCellSize = cellSizePtr;
70021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->xParseCell = btreeParseCellPtrIndex;
70022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->maxLocal = pBt->maxLocal;
70023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->minLocal = pBt->minLocal;
70024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
70025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* EVIDENCE-OF: R-47608-56469 Any other value for the b-tree page type is
70026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** an error. */
70027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->intKey = 0;
70028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->intKeyLeaf = 0;
70029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->xCellSize = cellSizePtr;
70030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->xParseCell = btreeParseCellPtrIndex;
70031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return SQLITE_CORRUPT_PAGE(pPage);
70032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
70033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pPage->max1bytePayload = pBt->max1bytePayload;
70145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKey = 1;
70146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->maxLocal = pBt->maxLeaf;
70147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->minLocal = pBt->minLeaf;
70148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
70149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKey = 0;
70150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->intKeyLeaf = 0;
70151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xCellSize = cellSizePtr;
70152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pPage->xParseCell = btreeParseCellPtrIndex;
70153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_CORRUPT_PAGE(pPage);
70154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
70034 70156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
70035 70157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
70036 70158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
70037 70159 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
70038 70160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Compute the amount of freespace on the page. In other words, fill
@@ -73568,13 +73690,29 @@
73568 73690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73569 73691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Move the cursor to the last entry in the table. Return SQLITE_OK
73570 73692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** on success. Set *pRes to 0 if the cursor actually points to something
73571 73693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or set *pRes to 1 if the table is empty.
73572 73694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
73695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static SQLITE_NOINLINE int btreeLast(BtCursor *pCur, int *pRes){
73696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = moveToRoot(pCur);
73697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
73698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->eState==CURSOR_VALID );
73699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRes = 0;
73700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = moveToRightmost(pCur);
73701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc==SQLITE_OK ){
73702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->curFlags |= BTCF_AtLast;
73703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
73704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCur->curFlags &= ~BTCF_AtLast;
73705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( rc==SQLITE_EMPTY ){
73707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
73708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ *pRes = 1;
73709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_OK;
73710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
73712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
73573 73713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeLast(BtCursor *pCur, int *pRes){
73574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc;
73575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
73576 73714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( cursorOwnsBtShared(pCur) );
73577 73715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCur->pBtree->db->mutex) );
73578 73716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73579 73717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the cursor already points to the last entry, this is a no-op. */
73580 73718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( CURSOR_VALID==pCur->eState && (pCur->curFlags & BTCF_AtLast)!=0 ){
@@ -73591,27 +73729,11 @@
73591 73729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pCur->pPage->leaf );
73592 73730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
73593 73731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRes = 0;
73594 73732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
73595 73733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
73597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = moveToRoot(pCur);
73598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
73599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->eState==CURSOR_VALID );
73600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pRes = 0;
73601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = moveToRightmost(pCur);
73602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc==SQLITE_OK ){
73603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCur->curFlags |= BTCF_AtLast;
73604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else{
73605 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCur->curFlags &= ~BTCF_AtLast;
73606 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
73607 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( rc==SQLITE_EMPTY ){
73608 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCur->pgnoRoot==0 || pCur->pPage->nCell==0 );
73609 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pRes = 1;
73610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = SQLITE_OK;
73611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
73612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
73734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return btreeLast(pCur, pRes);
73613 73735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
73614 73736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
73615 73737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Move the cursor so that it points to an entry in a table (a.k.a INTKEY)
73616 73738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table near the key intKey. Return a success code.
73617 73739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -74674,11 +74796,11 @@
74674 74796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74675 74797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74676 74798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the database supports auto-vacuum, write an entry in the pointer-map
74677 74799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to indicate that the page is free.
74678 74800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
74679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
74801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) ){
74680 74802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ptrmapPut(pBt, iPage, PTRMAP_FREEPAGE, 0, &rc);
74681 74803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) goto freepage_out;
74682 74804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
74683 74805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
74684 74806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Now manipulate the actual database free-list structure. There are two
@@ -75114,28 +75236,24 @@
75114 75236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pTemp is not null. Regardless of pTemp, allocate a new entry
75115 75237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in pPage->apOvfl[] and make it point to the cell content (either
75116 75238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in pTemp or the original pCell) and also record its index.
75117 75239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Allocating a new entry in pPage->aCell[] implies that
75118 75240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pPage->nOverflow is incremented.
75119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
75120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** *pRC must be SQLITE_OK when this routine is called.
75121 75241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- static void insertCell(
75242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int insertCell(
75123 75243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pPage, /* Page into which we are copying */
75124 75244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, /* New cell becomes the i-th cell of the page */
75125 75245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pCell, /* Content of the new cell */
75126 75246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sz, /* Bytes of content in pCell */
75127 75247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pTemp, /* Temp storage space for pCell, if needed */
75128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Pgno iChild, /* If non-zero, replace first 4 bytes with this value */
75129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int *pRC /* Read and write return code from here */
75248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Pgno iChild /* If non-zero, replace first 4 bytes with this value */
75130 75249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
75131 75250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idx = 0; /* Where to write new cell content in data[] */
75132 75251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j; /* Loop counter */
75133 75252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *data; /* The content of the whole page */
75134 75253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pIns; /* The point in pPage->aCellIdx[] where no cell inserted */
75135 75254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( *pRC==SQLITE_OK );
75137 75255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( i>=0 && i<=pPage->nCell+pPage->nOverflow );
75138 75256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( MX_CELL(pPage->pBt)<=10921 );
75139 75257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPage->nCell<=MX_CELL(pPage->pBt) || CORRUPT_DB );
75140 75258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPage->nOverflow<=ArraySize(pPage->apOvfl) );
75141 75259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ArraySize(pPage->apOvfl)==ArraySize(pPage->aiOvfl) );
@@ -75166,18 +75284,17 @@
75166 75284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( j==0 || pPage->aiOvfl[j-1]<(u16)i ); /* Overflows in sorted order */
75167 75285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( j==0 || i==pPage->aiOvfl[j-1]+1 ); /* Overflows are sequential */
75168 75286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
75169 75287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc = sqlite3PagerWrite(pPage->pDbPage);
75170 75288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
75171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- *pRC = rc;
75172 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return;
75289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
75173 75290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75174 75291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
75175 75292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
data = pPage->aData;
75176 75293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( &data[pPage->cellOffset]==pPage->aCellIdx );
75177 75294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = allocateSpace(pPage, sz, &idx);
75178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ){ *pRC = rc; return; }
75295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ){ return rc; }
75179 75296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The allocateSpace() routine guarantees the following properties
75180 75297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if it returns successfully */
75181 75298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( idx >= 0 );
75182 75299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( idx >= pPage->cellOffset+2*pPage->nCell+2 || CORRUPT_DB );
75183 75300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( idx+sz <= (int)pPage->pBt->usableSize );
@@ -75200,17 +75317,20 @@
75200 75317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* increment the cell count */
75201 75318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (++data[pPage->hdrOffset+4])==0 ) data[pPage->hdrOffset+3]++;
75202 75319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( get2byte(&data[pPage->hdrOffset+3])==pPage->nCell || CORRUPT_DB );
75203 75320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_AUTOVACUUM
75204 75321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPage->pBt->autoVacuum ){
75322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc2 = SQLITE_OK;
75205 75323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The cell may contain a pointer to an overflow page. If so, write
75206 75324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the entry for the overflow page into the pointer map.
75207 75325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ptrmapPutOvflPtr(pPage, pPage, pCell, pRC);
75326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ptrmapPutOvflPtr(pPage, pPage, pCell, &rc2);
75327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc2 ) return rc2;
75209 75328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75210 75329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
75211 75330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
75212 75332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75213 75333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75214 75334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
75215 75335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The following parameters determine how many adjacent pages get involved
75216 75336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in a balancing operation. NN is the number of neighbors on either side
@@ -75307,18 +75427,20 @@
75307 75427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
75308 75428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Make sure the cell sizes at idx, idx+1, ..., idx+N-1 have been
75309 75429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** computed.
75310 75430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75311 75431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void populateCellCache(CellArray *p, int idx, int N){
75432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ MemPage *pRef = p->pRef;
75433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 *szCell = p->szCell;
75312 75434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( idx>=0 && idx+N<=p->nCell );
75313 75435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( N>0 ){
75314 75436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->apCell[idx]!=0 );
75315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->szCell[idx]==0 ){
75316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->szCell[idx] = p->pRef->xCellSize(p->pRef, p->apCell[idx]);
75437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( szCell[idx]==0 ){
75438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szCell[idx] = pRef->xCellSize(pRef, p->apCell[idx]);
75317 75439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
75318 75440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( CORRUPT_DB ||
75319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->szCell[idx]==p->pRef->xCellSize(p->pRef, p->apCell[idx]) );
75441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szCell[idx]==pRef->xCellSize(pRef, p->apCell[idx]) );
75320 75442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75321 75443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idx++;
75322 75444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
N--;
75323 75445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75324 75446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -75516,12 +75638,12 @@
75516 75638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 * const pEnd = &aData[pPg->pBt->usableSize];
75517 75639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 * const pStart = &aData[pPg->hdrOffset + 8 + pPg->childPtrSize];
75518 75640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nRet = 0;
75519 75641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
75520 75642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iEnd = iFirst + nCell;
75521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u8 *pFree = 0;
75522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int szFree = 0;
75643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 *pFree = 0; /* \__ Parameters for pending call to */
75644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int szFree = 0; /* / freeSpace() */
75523 75645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75524 75646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=iFirst; i<iEnd; i++){
75525 75647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pCell = pCArray->apCell[i];
75526 75648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_WITHIN(pCell, pStart, pEnd) ){
75527 75649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int sz;
@@ -75538,10 +75660,13 @@
75538 75660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
szFree = sz;
75539 75661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFree+sz>pEnd ){
75540 75662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
75541 75663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75542 75664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
75665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The current cell is adjacent to and before the pFree cell.
75666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Combine the two regions into one to reduce the number of calls
75667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to freeSpace(). */
75543 75668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFree = pCell;
75544 75669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
szFree += sz;
75545 75670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75546 75671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRet++;
75547 75672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -75745,11 +75870,11 @@
75745 75870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the parent page are still manipulated by thh code below.
75746 75871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** That is Ok, at this point the parent page is guaranteed to
75747 75872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be marked as dirty. Returning an error code will cause a
75748 75873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** rollback, undoing any changes made to the parent page.
75749 75874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
75875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) ){
75751 75876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ptrmapPut(pBt, pgnoNew, PTRMAP_BTREE, pParent->pgno, &rc);
75752 75877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( szCell>pNew->minLocal ){
75753 75878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ptrmapPutOvflPtr(pNew, pNew, pCell, &rc);
75754 75879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75755 75880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -75773,12 +75898,12 @@
75773 75898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pStop = &pCell[9];
75774 75899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( ((*(pOut++) = *(pCell++))&0x80) && pCell<pStop );
75775 75900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75776 75901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Insert the new divider cell into pParent. */
75777 75902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
75778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
75779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- 0, pPage->pgno, &rc);
75903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = insertCell(pParent, pParent->nCell, pSpace, (int)(pOut-pSpace),
75904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ 0, pPage->pgno);
75780 75905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75781 75906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75782 75907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the right-child pointer of pParent to point to the new page. */
75783 75908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put4byte(&pParent->aData[pParent->hdrOffset+8], pgnoNew);
75784 75909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -75883,11 +76008,11 @@
75883 76008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75884 76009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
75885 76010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If this is an auto-vacuum database, update the pointer-map entries
75886 76011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for any b-tree or overflow pages that pTo now contains the pointers to.
75887 76012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
75888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
76013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) ){
75889 76014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pRC = setChildPtrmaps(pTo);
75890 76015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75891 76016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75892 76017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
75893 76018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -76307,19 +76432,21 @@
76307 76432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76308 76433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r = cntNew[i-1] - 1;
76309 76434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
d = r + 1 - leafData;
76310 76435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void)cachedCellSize(&b, d);
76311 76436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
do{
76437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int szR, szD;
76312 76438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( d<nMaxCells );
76313 76439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( r<nMaxCells );
76314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- (void)cachedCellSize(&b, r);
76440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szR = cachedCellSize(&b, r);
76441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szD = b.szCell[d];
76315 76442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( szRight!=0
76316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (bBulk || szRight+b.szCell[d]+2 > szLeft-(b.szCell[r]+(i==k-1?0:2)))){
76443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (bBulk || szRight+szD+2 > szLeft-(szR+(i==k-1?0:2)))){
76317 76444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
76318 76445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- szRight += b.szCell[d] + 2;
76320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- szLeft -= b.szCell[r] + 2;
76446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szRight += szD + 2;
76447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szLeft -= szR + 2;
76321 76448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cntNew[i-1] = r;
76322 76449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
r--;
76323 76450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
d--;
76324 76451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( r>=0 );
76325 76452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
szNew[i] = szRight;
@@ -76369,11 +76496,11 @@
76369 76496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
apNew[i] = pNew;
76370 76497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nNew++;
76371 76498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
cntOld[i] = b.nCell;
76372 76499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76373 76500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set the pointer-map entry for the new sibling page. */
76374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
76501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) ){
76375 76502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ptrmapPut(pBt, pNew->pgno, PTRMAP_BTREE, pParent->pgno, &rc);
76376 76503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ){
76377 76504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto balance_cleanup;
76378 76505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76379 76506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -76462,11 +76589,11 @@
76462 76589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the sibling pages are not leaves, then the pointer map entry
76463 76590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** associated with the right-child of each sibling may also need to be
76464 76591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** updated. This happens below, after the sibling pages have been
76465 76592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** populated, not here.
76466 76593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
76594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) ){
76468 76595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pOld;
76469 76596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pNew = pOld = apNew[0];
76470 76597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int cntOldNext = pNew->nCell + pNew->nOverflow;
76471 76598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iNew = 0;
76472 76599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iOld = 0;
@@ -76559,11 +76686,11 @@
76559 76686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSrcEnd = b.apEnd[k];
76560 76687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( SQLITE_WITHIN(pSrcEnd, pCell, pCell+sz) ){
76561 76688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_CORRUPT_BKPT;
76562 76689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto balance_cleanup;
76563 76690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno, &rc);
76691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = insertCell(pParent, nxDiv+i, pCell, sz, pTemp, pNew->pgno);
76565 76692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) goto balance_cleanup;
76566 76693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3PagerIswriteable(pParent->pDbPage) );
76567 76694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76568 76695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76569 76696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Now update the actual sibling pages. The order in which they are updated
@@ -76655,11 +76782,11 @@
76655 76782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- apNew[0]->nCell*2)
76656 76783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| rc!=SQLITE_OK
76657 76784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
76658 76785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
copyNodeContent(apNew[0], pParent, &rc);
76659 76786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freePage(apNew[0], &rc);
76660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( ISAUTOVACUUM && !leafCorrection ){
76787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( ISAUTOVACUUM(pBt) && !leafCorrection ){
76661 76788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Fix the pointer map entries associated with the right-child of each
76662 76789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sibling page. All other pointer map entries have already been taken
76663 76790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** care of. */
76664 76791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<nNew; i++){
76665 76792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 key = get4byte(&apNew[i]->aData[8]);
@@ -76676,11 +76803,11 @@
76676 76803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=nNew; i<nOld; i++){
76677 76804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freePage(apOld[i], &rc);
76678 76805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76679 76806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
76680 76807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if 0
76681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM && rc==SQLITE_OK && apNew[0]->isInit ){
76808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) && rc==SQLITE_OK && apNew[0]->isInit ){
76682 76809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The ptrmapCheckPages() contains assert() statements that verify that
76683 76810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** all pointer map pages are set correctly. This is helpful while
76684 76811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** debugging. This is usually disabled because a corrupt database may
76685 76812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cause an assert() statement to fail. */
76686 76813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ptrmapCheckPages(apNew, nNew);
@@ -76738,11 +76865,11 @@
76738 76865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
76739 76866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3PagerWrite(pRoot->pDbPage);
76740 76867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
76741 76868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = allocateBtreePage(pBt,&pChild,&pgnoChild,pRoot->pgno,0);
76742 76869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
copyNodeContent(pRoot, pChild, &rc);
76743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM ){
76870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) ){
76744 76871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ptrmapPut(pBt, pgnoChild, PTRMAP_BTREE, pRoot->pgno, &rc);
76745 76872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76746 76873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
76747 76874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
76748 76875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*ppChild = 0;
@@ -77070,11 +77197,10 @@
77070 77197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int loc = seekResult; /* -1: before desired location +1: after */
77071 77198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int szNew = 0;
77072 77199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int idx;
77073 77200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pPage;
77074 77201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Btree *p = pCur->pBtree;
77075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- BtShared *pBt = p->pBt;
77076 77202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char *oldCell;
77077 77203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char *newCell = 0;
77078 77204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77079 77205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (flags & (BTREE_SAVEPOSITION|BTREE_APPEND|BTREE_PREFORMAT))==flags );
77080 77206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (flags & BTREE_PREFORMAT)==0 || seekResult || pCur->pKeyInfo==0 );
@@ -77089,11 +77215,11 @@
77089 77215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the cursor is already where it needs to be and returns without
77090 77216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** doing any work. To avoid thwarting these optimizations, it is important
77091 77217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not to clear the cursor here.
77092 77218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
77093 77219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pCur->curFlags & BTCF_Multiple ){
77094 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rc = saveAllCursors(pBt, pCur->pgnoRoot, pCur);
77220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = saveAllCursors(p->pBt, pCur->pgnoRoot, pCur);
77095 77221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) return rc;
77096 77222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( loc && pCur->iPage<0 ){
77097 77223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This can only happen if the schema is corrupt such that there is more
77098 77224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** than one table or index with the same root page as used by the cursor.
77099 77225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Which can only happen if the SQLITE_NoSchemaError flag was set when
@@ -77113,12 +77239,12 @@
77113 77239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc && rc!=SQLITE_EMPTY ) return rc;
77114 77240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77115 77241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77116 77242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( cursorOwnsBtShared(pCur) );
77117 77243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( (pCur->curFlags & BTCF_WriteFlag)!=0
77118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pBt->inTransaction==TRANS_WRITE
77119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (pBt->btsFlags & BTS_READ_ONLY)==0 );
77244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && p->pBt->inTransaction==TRANS_WRITE
77245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (p->pBt->btsFlags & BTS_READ_ONLY)==0 );
77120 77246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
77121 77247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77122 77248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Assert that the caller has been consistent. If this cursor was opened
77123 77249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** expecting an index b-tree, then the caller should be inserting blob
77124 77250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** keys with no associated data. If the cursor was opened expecting an
@@ -77231,30 +77357,32 @@
77231 77357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77232 77358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TRACE(("INSERT: table=%d nkey=%lld ndata=%d page=%d %s\n",
77233 77359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->pgnoRoot, pX->nKey, pX->nData, pPage->pgno,
77234 77360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
loc==0 ? "overwrite" : "new entry"));
77235 77361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPage->isInit || CORRUPT_DB );
77236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- newCell = pBt->pTmpSpace;
77362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ newCell = p->pBt->pTmpSpace;
77237 77363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( newCell!=0 );
77364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT );
77238 77365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( flags & BTREE_PREFORMAT ){
77239 77366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
77240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- szNew = pBt->nPreformatSize;
77367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ szNew = p->pBt->nPreformatSize;
77241 77368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( szNew<4 ) szNew = 4;
77242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM && szNew>pPage->maxLocal ){
77369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(p->pBt) && szNew>pPage->maxLocal ){
77243 77370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CellInfo info;
77244 77371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPage->xParseCell(pPage, newCell, &info);
77245 77372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( info.nPayload!=info.nLocal ){
77246 77373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pgno ovfl = get4byte(&newCell[szNew-4]);
77247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ptrmapPut(pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc);
77374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ptrmapPut(p->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, &rc);
77375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NEVER(rc) ) goto end_insert;
77248 77376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77249 77377 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77250 77378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
77251 77379 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = fillInCell(pPage, newCell, pX, &szNew);
77380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( rc ) goto end_insert;
77252 77381 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( rc ) goto end_insert;
77254 77382 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( szNew==pPage->xCellSize(pPage, newCell) );
77255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( szNew <= MX_CELL_SIZE(pBt) );
77383 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( szNew <= MX_CELL_SIZE(p->pBt) );
77256 77384 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idx = pCur->ix;
77257 77385 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( loc==0 ){
77258 77386 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CellInfo info;
77259 77387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( idx>=0 );
77260 77388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( idx>=pPage->nCell ){
@@ -77270,11 +77398,11 @@
77270 77398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77271 77399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BTREE_CLEAR_CELL(rc, pPage, oldCell, info);
77272 77400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pCur->curFlags & BTCF_ValidOvfl );
77273 77401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
invalidateOverflowCache(pCur);
77274 77402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( info.nSize==szNew && info.nLocal==info.nPayload
77275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (!ISAUTOVACUUM || szNew<pPage->minLocal)
77403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (!ISAUTOVACUUM(p->pBt) || szNew<pPage->minLocal)
77276 77404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
77277 77405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Overwrite the old cell with the new if they are the same size.
77278 77406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** We could also try to do this if the old cell is smaller, then add
77279 77407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the leftover space to the free list. But experiments show that
77280 77408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** doing that is no faster then skipping this optimization and just
@@ -77300,11 +77428,11 @@
77300 77428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
idx = ++pCur->ix;
77301 77429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCur->curFlags &= ~BTCF_ValidNKey;
77302 77430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
77303 77431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPage->leaf );
77304 77432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- insertCell(pPage, idx, newCell, szNew, 0, 0, &rc);
77433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = insertCell(pPage, idx, newCell, szNew, 0, 0);
77306 77434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pPage->nOverflow==0 || rc==SQLITE_OK );
77307 77435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc!=SQLITE_OK || pPage->nCell>0 || pPage->nOverflow>0 );
77308 77436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77309 77437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If no error has occurred and pPage has an overflow cell, call balance()
77310 77438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to redistribute the cells within the tree. Since balance() may move
@@ -77373,11 +77501,10 @@
77373 77501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** calling sqlite3BtreeInsert() with the BTREE_PREFORMAT flag specified.
77374 77502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
77375 77503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
77376 77504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
77377 77505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3BtreeTransferRow(BtCursor *pDest, BtCursor *pSrc, i64 iKey){
77378 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int rc = SQLITE_OK;
77379 77506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
BtShared *pBt = pDest->pBt;
77380 77507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *aOut = pBt->pTmpSpace; /* Pointer to next output buffer */
77381 77508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const u8 *aIn; /* Pointer to next input buffer */
77382 77509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 nIn; /* Size of input buffer aIn[] */
77383 77510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u32 nRem; /* Bytes of data still to copy */
@@ -77396,11 +77523,13 @@
77396 77523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77397 77524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nRem = pSrc->info.nPayload;
77398 77525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nIn==nRem && nIn<pDest->pPage->maxLocal ){
77399 77526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memcpy(aOut, aIn, nIn);
77400 77527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBt->nPreformatSize = nIn + (aOut - pBt->pTmpSpace);
77528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return SQLITE_OK;
77401 77529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
77530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int rc = SQLITE_OK;
77402 77531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pager *pSrcPager = pSrc->pBt->pPager;
77403 77532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 *pPgnoOut = 0;
77404 77533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pgno ovflIn = 0;
77405 77534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
DbPage *pPageIn = 0;
77406 77535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pPageOut = 0;
@@ -77448,11 +77577,11 @@
77448 77577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && nRem>0 && ALWAYS(pPgnoOut) ){
77449 77578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Pgno pgnoNew;
77450 77579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
MemPage *pNew = 0;
77451 77580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = allocateBtreePage(pBt, &pNew, &pgnoNew, 0, 0);
77452 77581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
put4byte(pPgnoOut, pgnoNew);
77453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ISAUTOVACUUM && pPageOut ){
77582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ISAUTOVACUUM(pBt) && pPageOut ){
77454 77583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ptrmapPut(pBt, pgnoNew, PTRMAP_OVERFLOW2, pPageOut->pgno, &rc);
77455 77584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77456 77585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
releasePage(pPageOut);
77457 77586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPageOut = pNew;
77458 77587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPageOut ){
@@ -77464,13 +77593,12 @@
77464 77593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77465 77594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}while( nRem>0 && rc==SQLITE_OK );
77466 77595 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77467 77596 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
releasePage(pPageOut);
77468 77597 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3PagerUnref(pPageIn);
77598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
77469 77599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
77471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return rc;
77472 77600 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77473 77601 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
77474 77602 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
77475 77603 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Delete the entry that the cursor is pointing to.
77476 77604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -77621,11 +77749,11 @@
77621 77749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( MX_CELL_SIZE(pBt) >= nCell );
77622 77750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTmp = pBt->pTmpSpace;
77623 77751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTmp!=0 );
77624 77752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3PagerWrite(pLeaf->pDbPage);
77625 77753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
77626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);
77754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n);
77627 77755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77628 77756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);
77629 77757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) return rc;
77630 77758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
77631 77759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -79144,10 +79272,21 @@
79144 79272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79145 79273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
79146 79274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the size of the header added to each page by this module.
79147 79275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
79148 79276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_PRIVATE int sqlite3HeaderSizeBtree(void){ return ROUND8(sizeof(MemPage)); }
79277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
79278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
79279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If no transaction is active and the database is not a temp-db, clear
79280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the in-memory pager cache.
79281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
79282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ SQLITE_PRIVATE void sqlite3BtreeClearCache(Btree *p){
79283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ BtShared *pBt = p->pBt;
79284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pBt->inTransaction==TRANS_NONE ){
79285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3PagerClearCache(pBt->pPager);
79286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
79149 79288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
79150 79289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SHARED_CACHE)
79151 79290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
79152 79291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return true if the Btree passed as the only argument is sharable.
79153 79292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -83384,11 +83523,11 @@
83384 83523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( n!=P4_INT32 && n!=P4_VTAB );
83385 83524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( n<=0 );
83386 83525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->db->mallocFailed ){
83387 83526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
freeP4(p->db, n, pP4);
83388 83527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
83389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pP4!=0 );
83528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pP4!=0 || n==P4_DYNAMIC );
83390 83529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->nOp>0 );
83391 83530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp = &p->aOp[p->nOp-1];
83392 83531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pOp->p4type==P4_NOTUSED );
83393 83532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p4type = n;
83394 83533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOp->p4.p = pP4;
@@ -87760,11 +87899,14 @@
87760 87899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *),
87761 87900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char enc
87762 87901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
87763 87902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
87764 87903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( xDel!=SQLITE_DYNAMIC );
87765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
87904 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( enc!=SQLITE_UTF8 ){
87905 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
87906 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n &= ~(u64)1;
87907 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
87766 87908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( n>0x7fffffff ){
87767 87909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void)invokeValueDestructor(z, xDel, pCtx);
87768 87910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
87769 87911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
setResultStrOrError(pCtx, z, (int)n, enc, xDel);
87770 87912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -87775,29 +87917,29 @@
87775 87917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *z,
87776 87918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
87777 87919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
87778 87920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
87779 87921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
87780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
87922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16NATIVE, xDel);
87781 87923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87782 87924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_text16be(
87783 87925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *pCtx,
87784 87926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *z,
87785 87927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
87786 87928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
87787 87929 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
87788 87930 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
87789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
87931 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16BE, xDel);
87790 87932 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87791 87933 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_text16le(
87792 87934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_context *pCtx,
87793 87935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *z,
87794 87936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int n,
87795 87937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void *)
87796 87938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
87797 87939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
87798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
87940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ setResultStrOrError(pCtx, z, n & ~(u64)1, SQLITE_UTF16LE, xDel);
87799 87941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
87800 87942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_UTF16 */
87801 87943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
87802 87944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Mem *pOut = pCtx->pOut;
87803 87945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
@@ -88858,22 +89000,25 @@
88858 89000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_uint64 nData,
88859 89001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void*),
88860 89002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsigned char enc
88861 89003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
88862 89004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( xDel!=SQLITE_DYNAMIC );
88863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
89005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( enc!=SQLITE_UTF8 ){
89006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
89007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nData &= ~(u16)1;
89008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
88864 89009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return bindText(pStmt, i, zData, nData, xDel, enc);
88865 89010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88866 89011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_UTF16
88867 89012 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_bind_text16(
88868 89013 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_stmt *pStmt,
88869 89014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i,
88870 89015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const void *zData,
88871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nData,
89016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int n,
88872 89017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
void (*xDel)(void*)
88873 89018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
88874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF16NATIVE);
89019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return bindText(pStmt, i, zData, n & ~(u64)1, xDel, SQLITE_UTF16NATIVE);
88875 89020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
88876 89021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_UTF16 */
88877 89022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_value *pValue){
88878 89023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int rc;
88879 89024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( sqlite3_value_type((sqlite3_value*)pValue) ){
@@ -90242,20 +90387,10 @@
90242 90387 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#else
90243 90388 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
# define REGISTER_TRACE(R,M)
90244 90389 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
90245 90390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90246 90391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
90247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef VDBE_PROFILE
90248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
90249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /*
90250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** hwtime.h contains inline assembler code for implementing
90251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** high-performance timing routines.
90252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
90253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* #include "hwtime.h" */
90254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
90255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
90256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
-
90257 90392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef NDEBUG
90258 90393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
90259 90394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This function is only called from within an assert() expression. It
90260 90395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** checks that the sqlite3.nTransaction variable is correctly set to
90261 90396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the number of non-transaction savepoints currently in the
@@ -95203,10 +95338,11 @@
95203 95338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.nZero = pData->u.nZero;
95204 95339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
95205 95340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.nZero = 0;
95206 95341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
95207 95342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
x.pKey = 0;
95343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( BTREE_PREFORMAT==OPFLAG_PREFORMAT );
95208 95344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3BtreeInsert(pC->uc.pCursor, &x,
95209 95345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(pOp->p5 & (OPFLAG_APPEND|OPFLAG_SAVEPOSITION|OPFLAG_PREFORMAT)),
95210 95346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
seekResult
95211 95347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
95212 95348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pC->deferredMoveto = 0;
@@ -105097,11 +105233,11 @@
105097 105233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr = pExpr->pLeft;
105098 105234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr!=0 );
105099 105235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105100 105236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = pExpr->op;
105101 105237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_REGISTER ) op = pExpr->op2;
105102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_COLUMN || op==TK_AGG_COLUMN ){
105238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op==TK_COLUMN || (op==TK_AGG_COLUMN && pExpr->y.pTab!=0) ){
105103 105239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseYTab(pExpr) );
105104 105240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->y.pTab!=0 );
105105 105241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3TableColumnAffinity(pExpr->y.pTab, pExpr->iColumn);
105106 105242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
105107 105243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_SELECT ){
@@ -105217,11 +105353,13 @@
105217 105353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
CollSeq *pColl = 0;
105218 105354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const Expr *p = pExpr;
105219 105355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p ){
105220 105356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int op = p->op;
105221 105357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( op==TK_REGISTER ) op = p->op2;
105222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op==TK_AGG_COLUMN || op==TK_COLUMN || op==TK_TRIGGER ){
105358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (op==TK_AGG_COLUMN && p->y.pTab!=0)
105359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ || op==TK_COLUMN || op==TK_TRIGGER
105360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
105223 105361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int j;
105224 105362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseYTab(p) );
105225 105363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->y.pTab!=0 );
105226 105364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (j = p->iColumn)>=0 ){
105227 105365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
const char *zColl = sqlite3ColumnColl(&p->y.pTab->aCol[j]);
@@ -109081,11 +109219,11 @@
109081 109219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109082 109220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return target;
109083 109221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109084 109222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
109085 109223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
109086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Check to see if pExpr is one of the indexed expressions on pParse->pIdxExpr.
109224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Check to see if pExpr is one of the indexed expressions on pParse->pIdxEpr.
109087 109225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If it is, then resolve the expression by reading from the index and
109088 109226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** return the register into which the value has been read. If pExpr is
109089 109227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** not an indexed expression, then return negative.
109090 109228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
109091 109229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static SQLITE_NOINLINE int sqlite3IndexedExprLookup(
@@ -109093,11 +109231,11 @@
109093 109231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr, /* The expression to potentially bypass */
109094 109232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int target /* Where to store the result of the expression */
109095 109233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
109096 109234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
IndexedExpr *p;
109097 109235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v;
109098 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(p=pParse->pIdxExpr; p; p=p->pIENext){
109236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(p=pParse->pIdxEpr; p; p=p->pIENext){
109099 109237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDataCur = p->iDataCur;
109100 109238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iDataCur<0 ) continue;
109101 109239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->iSelfTab ){
109102 109240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->iDataCur!=pParse->iSelfTab-1 ) continue;
109103 109241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iDataCur = -1;
@@ -109113,14 +109251,14 @@
109113 109251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_IfNullRow, p->iIdxCur, addr+3, target);
109114 109252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
109115 109253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target);
109116 109254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s expr-column %d", p->zIdxName, p->iIdxCol));
109117 109255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeGoto(v, 0);
109118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p = pParse->pIdxExpr;
109119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->pIdxExpr = 0;
109256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p = pParse->pIdxEpr;
109257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->pIdxEpr = 0;
109120 109258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprCode(pParse, pExpr, target);
109121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->pIdxExpr = p;
109259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->pIdxEpr = p;
109122 109260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHere(v, addr+2);
109123 109261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
109124 109262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, p->iIdxCur, p->iIdxCol, target);
109125 109263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "%s expr-column %d", p->zIdxName, p->iIdxCol));
109126 109264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -109155,11 +109293,11 @@
109155 109293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( v!=0 );
109156 109294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
109157 109295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
expr_code_doover:
109158 109296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr==0 ){
109159 109297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
op = TK_NULL;
109160 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( pParse->pIdxExpr!=0
109298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pParse->pIdxEpr!=0
109161 109299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& !ExprHasProperty(pExpr, EP_Leaf)
109162 109300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (r1 = sqlite3IndexedExprLookup(pParse, pExpr, target))>=0
109163 109301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
109164 109302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return r1;
109165 109303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
@@ -109172,26 +109310,32 @@
109172 109310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_col *pCol;
109173 109311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pAggInfo!=0 );
109174 109312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
109175 109313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCol = &pAggInfo->aCol[pExpr->iAgg];
109176 109314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pAggInfo->directMode ){
109177 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pCol->iMem>0 );
109178 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return pCol->iMem;
109315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return AggInfoColumnReg(pAggInfo, pExpr->iAgg);
109179 109316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pAggInfo->useSortingIdx ){
109180 109317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Table *pTab = pCol->pTab;
109181 109318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
109182 109319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCol->iSorterColumn, target);
109183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCol->iColumn<0 ){
109320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pTab==0 ){
109321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* No comment added */
109322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pCol->iColumn<0 ){
109184 109323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v,"%s.rowid",pTab->zName));
109185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }else if( ALWAYS(pTab!=0) ){
109324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
109186 109325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v,"%s.%s",
109187 109326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTab->zName, pTab->aCol[pCol->iColumn].zCnName));
109188 109327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTab->aCol[pCol->iColumn].affinity==SQLITE_AFF_REAL ){
109189 109328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_RealAffinity, target);
109190 109329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109191 109330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109192 109331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return target;
109332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pExpr->y.pTab==0 ){
109333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* This case happens when the argument to an aggregate function
109334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is rewritten by aggregateConvertIndexedExprRefToColumn() */
109335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Column, pExpr->iTable, pExpr->iColumn, target);
109336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return target;
109193 109337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109194 109338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Otherwise, fall thru into the TK_COLUMN case */
109195 109339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no break */ deliberate_fall_through
109196 109340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109197 109341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_COLUMN: {
@@ -109485,11 +109629,11 @@
109485 109629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| NEVER(pExpr->iAgg>=pInfo->nFunc)
109486 109630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
109487 109631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pExpr, EP_IntValue) );
109488 109632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ErrorMsg(pParse, "misuse of aggregate: %#T()", pExpr);
109489 109633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
109490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return pInfo->aFunc[pExpr->iAgg].iMem;
109634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return AggInfoFuncReg(pInfo, pExpr->iAgg);
109491 109635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109492 109636 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
109493 109637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109494 109638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_FUNCTION: {
109495 109639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pFarg; /* List of function arguments */
@@ -109774,11 +109918,11 @@
109774 109918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 okConstFactor = pParse->okConstFactor;
109775 109919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AggInfo *pAggInfo = pExpr->pAggInfo;
109776 109920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pAggInfo ){
109777 109921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
109778 109922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pAggInfo->directMode ){
109779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- inReg = pAggInfo->aCol[pExpr->iAgg].iMem;
109923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ inReg = AggInfoColumnReg(pAggInfo, pExpr->iAgg);
109780 109924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
109781 109925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
109782 109926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->pAggInfo->useSortingIdx ){
109783 109927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_Column, pAggInfo->sortingIdxPTab,
109784 109928 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->aCol[pExpr->iAgg].iSorterColumn,
@@ -111285,10 +111429,76 @@
111285 111429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&pInfo->nFunc,
111286 111430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&i
111287 111431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
111288 111432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return i;
111289 111433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
111435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
111436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Search the AggInfo object for an aCol[] entry that has iTable and iColumn.
111437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return the index in aCol[] of the entry that describes that column.
111438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
111439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If no prior entry is found, create a new one and return -1. The
111440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** new column will have an idex of pAggInfo->nColumn-1.
111441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
111442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void findOrCreateAggInfoColumn(
111443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parsing context */
111444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AggInfo *pAggInfo, /* The AggInfo object to search and/or modify */
111445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pExpr /* Expr describing the column to find or insert */
111446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
111447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct AggInfo_col *pCol;
111448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int k;
111449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
111450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo->iFirstReg==0 );
111451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol = pAggInfo->aCol;
111452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(k=0; k<pAggInfo->nColumn; k++, pCol++){
111453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->iTable==pExpr->iTable
111454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pCol->iColumn==pExpr->iColumn
111455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pExpr->op!=TK_IF_NULL_ROW
111456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
111457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ goto fix_up_expr;
111458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ k = addAggInfoColumn(pParse->db, pAggInfo);
111461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( k<0 ){
111462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* OOM on resize */
111463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pParse->db->mallocFailed );
111464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return;
111465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol = &pAggInfo->aCol[k];
111467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ExprUseYTab(pExpr) );
111468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->pTab = pExpr->y.pTab;
111469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->iTable = pExpr->iTable;
111470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->iColumn = pExpr->iColumn;
111471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->iSorterColumn = -1;
111472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->pCExpr = pExpr;
111473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
111474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int j, n;
111475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pGB = pAggInfo->pGroupBy;
111476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct ExprList_item *pTerm = pGB->a;
111477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ n = pGB->nExpr;
111478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(j=0; j<n; j++, pTerm++){
111479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pE = pTerm->pExpr;
111480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pE->op==TK_COLUMN
111481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pE->iTable==pExpr->iTable
111482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && pE->iColumn==pExpr->iColumn
111483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
111484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->iSorterColumn = j;
111485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ break;
111486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pCol->iSorterColumn<0 ){
111490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->iSorterColumn = pAggInfo->nSortingColumn++;
111491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ fix_up_expr:
111493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprSetVVAProperty(pExpr, EP_NoReduce);
111494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->pAggInfo = pAggInfo;
111495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->op==TK_COLUMN ){
111496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->op = TK_AGG_COLUMN;
111497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iAgg = (i16)k;
111499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111290 111500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111291 111501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
111292 111502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is the xExprCallback for a tree walker. It is used to
111293 111503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** implement sqlite3ExprAnalyzeAggregates(). See sqlite3ExprAnalyzeAggregates
111294 111504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** for additional information.
@@ -111299,11 +111509,40 @@
111299 111509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse = pNC->pParse;
111300 111510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcList *pSrcList = pNC->pSrcList;
111301 111511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
AggInfo *pAggInfo = pNC->uNC.pAggInfo;
111302 111512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
111303 111513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pNC->ncFlags & NC_UAggInfo );
111514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo->iFirstReg==0 );
111304 111515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( pExpr->op ){
111516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ default: {
111517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexedExpr *pIEpr;
111518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr tmp;
111519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pParse->iSelfTab==0 );
111520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pNC->ncFlags & NC_InAggFunc)==0 ) break;
111521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->pIdxEpr==0 ) break;
111522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){
111523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iDataCur = pIEpr->iDataCur;
111524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( iDataCur<0 ) continue;
111525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3ExprCompare(0, pExpr, pIEpr->pExpr, iDataCur)==0 ) break;
111526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIEpr==0 ) break;
111528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( NEVER(!ExprUseYTab(pExpr)) ) break;
111529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
111530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If we reach this point, it means that expression pExpr can be
111531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** translated into a reference to an index column as described by
111532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pIEpr.
111533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
111534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&tmp, 0, sizeof(tmp));
111535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tmp.op = TK_AGG_COLUMN;
111536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tmp.iTable = pIEpr->iIdxCur;
111537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ tmp.iColumn = pIEpr->iIdxCol;
111538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ findOrCreateAggInfoColumn(pParse, pAggInfo, &tmp);
111539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo->aCol[tmp.iAgg].pCExpr = pExpr;
111540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->pAggInfo = pAggInfo;
111541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iAgg = tmp.iAgg;
111542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Prune;
111543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
111305 111544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_IF_NULL_ROW:
111306 111545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_AGG_COLUMN:
111307 111546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case TK_COLUMN: {
111308 111547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pExpr->op==TK_AGG_COLUMN );
111309 111548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pExpr->op==TK_COLUMN );
@@ -111311,71 +111550,13 @@
111311 111550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Check to see if the column is in one of the tables in the FROM
111312 111551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** clause of the aggregate query */
111313 111552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( ALWAYS(pSrcList!=0) ){
111314 111553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pItem = pSrcList->a;
111315 111554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pSrcList->nSrc; i++, pItem++){
111316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct AggInfo_col *pCol;
111317 111555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pExpr, EP_TokenOnly|EP_Reduced) );
111318 111556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->iTable==pItem->iCursor ){
111319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* If we reach this point, it means that pExpr refers to a table
111320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** that is in the FROM clause of the aggregate query.
111321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
111322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Make an entry for the column in pAggInfo->aCol[] if there
111323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** is not an entry there already.
111324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
111325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int k;
111326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol = pAggInfo->aCol;
111327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(k=0; k<pAggInfo->nColumn; k++, pCol++){
111328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCol->iTable==pExpr->iTable
111329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pCol->iColumn==pExpr->iColumn
111330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pExpr->op!=TK_IF_NULL_ROW
111331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
111332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
111333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (k>=pAggInfo->nColumn)
111336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && (k = addAggInfoColumn(pParse->db, pAggInfo))>=0
111337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
111338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol = &pAggInfo->aCol[k];
111339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ExprUseYTab(pExpr) );
111340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->pTab = pExpr->y.pTab;
111341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iTable = pExpr->iTable;
111342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iColumn = pExpr->iColumn;
111343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iMem = ++pParse->nMem;
111344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iSorterColumn = -1;
111345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->pCExpr = pExpr;
111346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pAggInfo->pGroupBy && pExpr->op!=TK_IF_NULL_ROW ){
111347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int j, n;
111348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ExprList *pGB = pAggInfo->pGroupBy;
111349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct ExprList_item *pTerm = pGB->a;
111350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- n = pGB->nExpr;
111351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(j=0; j<n; j++, pTerm++){
111352 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *pE = pTerm->pExpr;
111353 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pE->op==TK_COLUMN
111354 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pE->iTable==pExpr->iTable
111355 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pE->iColumn==pExpr->iColumn
111356 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ){
111357 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iSorterColumn = j;
111358 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- break;
111359 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pCol->iSorterColumn<0 ){
111363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iSorterColumn = pAggInfo->nSortingColumn++;
111364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* There is now an entry for pExpr in pAggInfo->aCol[] (either
111367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** because it was there before or because we just created it).
111368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Convert the pExpr to be a TK_AGG_COLUMN referring to that
111369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pAggInfo->aCol[] entry.
111370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- */
111371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ExprSetVVAProperty(pExpr, EP_NoReduce);
111372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->pAggInfo = pAggInfo;
111373 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pExpr->op==TK_COLUMN ){
111374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->op = TK_AGG_COLUMN;
111375 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
111376 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pExpr->iAgg = (i16)k;
111557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ findOrCreateAggInfoColumn(pParse, pAggInfo, pExpr);
111377 111558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
111378 111559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} /* endif pExpr->iTable==pItem->iCursor */
111379 111560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
} /* end loop over pSrcList */
111380 111561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
111381 111562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Prune;
@@ -111401,11 +111582,10 @@
111401 111582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i = addAggInfoFunc(pParse->db, pAggInfo);
111402 111583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( i>=0 ){
111403 111584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pExpr, EP_xIsSelect) );
111404 111585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem = &pAggInfo->aFunc[i];
111405 111586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->pFExpr = pExpr;
111406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pItem->iMem = ++pParse->nMem;
111407 111587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseUToken(pExpr) );
111408 111588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->pFunc = sqlite3FindFunction(pParse->db,
111409 111589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->u.zToken,
111410 111590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pExpr->x.pList ? pExpr->x.pList->nExpr : 0, enc, 0);
111411 111591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pExpr->flags & EP_Distinct ){
@@ -126002,21 +126182,19 @@
126002 126182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default:
126003 126183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return;
126004 126184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126005 126185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ans = log(x)/b;
126006 126186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
126007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ans = log(x);
126008 126187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
switch( SQLITE_PTR_TO_INT(sqlite3_user_data(context)) ){
126009 126188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 1:
126010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Convert from natural logarithm to log base 10 */
126011 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ans /= M_LN10;
126189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ans = log10(x);
126012 126190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
126013 126191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 2:
126014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Convert from natural logarithm to log base 2 */
126015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ans /= M_LN2;
126192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ans = log2(x);
126016 126193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
126017 126194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
default:
126195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ans = log(x);
126018 126196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
126019 126197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126020 126198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
126021 126199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_double(context, ans);
126022 126200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -129565,10 +129743,11 @@
129565 129743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* no break */ deliberate_fall_through
129566 129744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OE_Rollback:
129567 129745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case OE_Fail: {
129568 129746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
char *zMsg = sqlite3MPrintf(db, "%s.%s", pTab->zName,
129569 129747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pCol->zCnName);
129748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ testcase( zMsg==0 && db->mallocFailed==0 );
129570 129749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_HaltIfNull, SQLITE_CONSTRAINT_NOTNULL,
129571 129750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
onError, iReg);
129572 129751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAppendP4(v, zMsg, P4_DYNAMIC);
129573 129752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, P5_ConstraintNotNull);
129574 129753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
@@ -132296,11 +132475,11 @@
132296 132475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
132297 132476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
0,
132298 132477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
132299 132478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_db_name,
132300 132479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Version 3.40.0 and later */
132301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_value_type
132480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_value_encoding
132302 132481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
132303 132482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
132304 132483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* True if x is the directory separator character
132305 132484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
132306 132485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if SQLITE_OS_WIN
@@ -139355,11 +139534,11 @@
139355 139534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
139356 139535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
139357 139536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->colNamesSet ) return;
139358 139537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Column names are determined by the left-most term of a compound select */
139359 139538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pSelect->pPrior ) pSelect = pSelect->pPrior;
139360 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,pSelect,("generating column names\n"));
139539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x80,pParse,pSelect,("generating column names\n"));
139361 139540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList = pSelect->pSrc;
139362 139541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pEList = pSelect->pEList;
139363 139542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( v!=0 );
139364 139543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pTabList!=0 );
139365 139544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->colNamesSet = 1;
@@ -140141,11 +140320,11 @@
140141 140320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nLimit = 0; /* Initialize to suppress harmless compiler warning */
140142 140321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !pPrior->pLimit );
140143 140322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrior->iLimit = p->iLimit;
140144 140323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrior->iOffset = p->iOffset;
140145 140324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrior->pLimit = p->pLimit;
140146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL left...\n"));
140325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL left...\n"));
140147 140326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Select(pParse, pPrior, &dest);
140148 140327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pPrior->pLimit = 0;
140149 140328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
140150 140329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto multi_select_end;
140151 140330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -140159,11 +140338,11 @@
140159 140338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OffsetLimit,
140160 140339 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iLimit, p->iOffset+1, p->iOffset);
140161 140340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
140162 140341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
140163 140342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlan((pParse, 1, "UNION ALL"));
140164 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1, pParse, p, ("multiSelect UNION ALL right...\n"));
140343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x200, pParse, p, ("multiSelect UNION ALL right...\n"));
140165 140344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Select(pParse, p, &dest);
140166 140345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( rc!=SQLITE_OK );
140167 140346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDelete = p->pPrior;
140168 140347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = pPrior;
140169 140348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nSelectRow = sqlite3LogEstAdd(p->nSelectRow, pPrior->nSelectRow);
@@ -140212,11 +140391,11 @@
140212 140391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
140213 140392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Code the SELECT statements to our left
140214 140393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
140215 140394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !pPrior->pOrderBy );
140216 140395 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&uniondest, priorOp, unionTab);
140217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION left...\n"));
140396 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION left...\n"));
140218 140397 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Select(pParse, pPrior, &uniondest);
140219 140398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
140220 140399 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto multi_select_end;
140221 140400 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
140222 140401 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -140232,11 +140411,11 @@
140232 140411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLimit = p->pLimit;
140233 140412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pLimit = 0;
140234 140413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
uniondest.eDest = op;
140235 140414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
140236 140415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectOpName(p->op)));
140237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1, pParse, p, ("multiSelect EXCEPT/UNION right...\n"));
140416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x200, pParse, p, ("multiSelect EXCEPT/UNION right...\n"));
140238 140417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Select(pParse, p, &uniondest);
140239 140418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( rc!=SQLITE_OK );
140240 140419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pOrderBy==0 );
140241 140420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDelete = p->pPrior;
140242 140421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = pPrior;
@@ -140293,11 +140472,11 @@
140293 140472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pEList );
140294 140473 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
140295 140474 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Code the SELECTs to our left into temporary table "tab1".
140296 140475 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
140297 140476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDestInit(&intersectdest, SRT_Union, tab1);
140298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT left...\n"));
140477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT left...\n"));
140299 140478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Select(pParse, pPrior, &intersectdest);
140300 140479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ){
140301 140480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto multi_select_end;
140302 140481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
140303 140482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -140310,11 +140489,11 @@
140310 140489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLimit = p->pLimit;
140311 140490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pLimit = 0;
140312 140491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
intersectdest.iSDParm = tab2;
140313 140492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlan((pParse, 1, "%s USING TEMP B-TREE",
140314 140493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectOpName(p->op)));
140315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1, pParse, p, ("multiSelect INTERSECT right...\n"));
140494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x400, pParse, p, ("multiSelect INTERSECT right...\n"));
140316 140495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3Select(pParse, p, &intersectdest);
140317 140496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( rc!=SQLITE_OK );
140318 140497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDelete = p->pPrior;
140319 140498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = pPrior;
140320 140499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->nSelectRow>pPrior->nSelectRow ){
@@ -141313,10 +141492,38 @@
141313 141492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pSel->pPrior ){
141314 141493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSel = pSel->pPrior;
141315 141494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141316 141495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pSel->pEList;
141317 141496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
141498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
141499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Return true if any of the result-set columns in the compound query
141500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have incompatible affinities on one or more arms of the compound.
141501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
141502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int compoundHasDifferentAffinities(Select *p){
141503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
141504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ExprList *pList;
141505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p!=0 );
141506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pEList!=0 );
141507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( p->pPrior!=0 );
141508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList = p->pEList;
141509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<pList->nExpr; ii++){
141510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ char aff;
141511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSub1;
141512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pList->a[ii].pExpr!=0 );
141513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aff = sqlite3ExprAffinity(pList->a[ii].pExpr);
141514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pSub1=p->pPrior; pSub1; pSub1=pSub1->pPrior){
141515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSub1->pEList!=0 );
141516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSub1->pEList->nExpr>ii );
141517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pSub1->pEList->a[ii].pExpr!=0 );
141518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3ExprAffinity(pSub1->pEList->a[ii].pExpr)!=aff ){
141519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
141520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
141521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
141522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
141523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
141524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
141318 141525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141319 141526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW)
141320 141527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
141321 141528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine attempts to flatten subqueries as a performance optimization.
141322 141529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This routine returns 1 if it makes changes and 0 if no flattening occurs.
@@ -141417,11 +141624,12 @@
141417 141624 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (17f) the subquery must not be the RHS of a LEFT JOIN.
141418 141625 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (17g) either the subquery is the first element of the outer
141419 141626 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** query or there are no RIGHT or FULL JOINs in any arm
141420 141627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of the subquery. (This is a duplicate of condition (27b).)
141421 141628 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (17h) The corresponding result set expressions in all arms of the
141422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** compound must have the same affinity.
141629 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** compound must have the same affinity. (See restriction (9)
141630 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** on the push-down optimization.)
141423 141631 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
141424 141632 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The parent and sub-query may contain WHERE clauses. Subject to
141425 141633 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** rules (11), (13) and (14), they may also contain ORDER BY,
141426 141634 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** LIMIT and OFFSET clauses. The subquery cannot use any compound
141427 141635 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** operator other than UNION ALL because all the other compound
@@ -141636,23 +141844,11 @@
141636 141844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141637 141845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Restriction (23) */
141638 141846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (p->selFlags & SF_Recursive) ) return 0;
141639 141847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141640 141848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Restriction (17h) */
141641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(ii=0; ii<pSub->pEList->nExpr; ii++){
141642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- char aff;
141643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSub->pEList->a[ii].pExpr!=0 );
141644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aff = sqlite3ExprAffinity(pSub->pEList->a[ii].pExpr);
141645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(pSub1=pSub->pPrior; pSub1; pSub1=pSub1->pPrior){
141646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSub1->pEList!=0 );
141647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSub1->pEList->nExpr>ii );
141648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pSub1->pEList->a[ii].pExpr!=0 );
141649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3ExprAffinity(pSub1->pEList->a[ii].pExpr)!=aff ){
141650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 0;
141651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
141652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
141653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
141849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( compoundHasDifferentAffinities(pSub) ) return 0;
141654 141850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141655 141851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->nSrc>1 ){
141656 141852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nSelect>500 ) return 0;
141657 141853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OptimizationDisabled(db, SQLITE_FlttnUnionAll) ) return 0;
141658 141854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aCsrMap = sqlite3DbMallocZero(db, ((i64)pParse->nTab+1)*sizeof(int));
@@ -141659,11 +141855,11 @@
141659 141855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aCsrMap ) aCsrMap[0] = pParse->nTab;
141660 141856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141661 141857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141662 141858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141663 141859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/***** If we reach this point, flattening is permitted. *****/
141664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("flatten %u.%p from term %d\n",
141860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x4,pParse,p,("flatten %u.%p from term %d\n",
141665 141861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->selId, pSub, iFrom));
141666 141862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141667 141863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Authorize the subquery */
141668 141864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = pSubitem->zName;
141669 141865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
TESTONLY(i =) sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0);
@@ -141738,11 +141934,11 @@
141738 141934 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141739 141935 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pPrior = pPrior;
141740 141936 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pPrior ) pPrior->pNext = pNew;
141741 141937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->pNext = p;
141742 141938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pPrior = pNew;
141743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(2,pParse,p,("compound-subquery flattener"
141939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x4,pParse,p,("compound-subquery flattener"
141744 141940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" creates %u as peer\n",pNew->selId));
141745 141941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141746 141942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSubitem->pSelect==0 );
141747 141943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141748 141944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFree(db, aCsrMap);
@@ -141918,12 +142114,12 @@
141918 142114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3AggInfoPersistWalkerInit(&w, pParse);
141919 142115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkSelect(&w,pSub1);
141920 142116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectDelete(db, pSub1);
141921 142117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141922 142118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
141923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x100 ){
141924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,("After flattening:\n"));
142119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x4 ){
142120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x4,pParse,p,("After flattening:\n"));
141925 142121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
141926 142122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
141927 142123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
141928 142124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
141929 142125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
@@ -142293,16 +142489,18 @@
142293 142489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
142294 142490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** (7) The inner query is a Common Table Expression (CTE) that should
142295 142491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be materialized. (This restriction is implemented in the calling
142296 142492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** routine.)
142297 142493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
142298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** (8) The subquery may not be a compound that uses UNION, INTERSECT,
142299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** or EXCEPT. (We could, perhaps, relax this restriction to allow
142300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** this case if none of the comparisons operators between left and
142301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** right arms of the compound use a collation other than BINARY.
142302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** But it is a lot of work to check that case for an obscure and
142303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** minor optimization, so we omit it for now.)
142494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (8) If the subquery is a compound that uses UNION, INTERSECT,
142495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or EXCEPT, then all of the result set columns for all arms of
142496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the compound must use the BINARY collating sequence.
142497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
142498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (9) If the subquery is a compound, then all arms of the compound must
142499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have the same affinity. (This is the same as restriction (17h)
142500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** for query flattening.)
142501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
142304 142502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
142305 142503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return 0 if no changes are made and non-zero if one or more WHERE clause
142306 142504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** terms are duplicated into the subquery.
142307 142505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
142308 142506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int pushDownWhereTerms(
@@ -142315,24 +142513,48 @@
142315 142513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nChng = 0;
142316 142514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWhere==0 ) return 0;
142317 142515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubq->selFlags & (SF_Recursive|SF_MultiPart) ) return 0;
142318 142516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.jointype & (JT_LTORJ|JT_RIGHT) ) return 0;
142319 142517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
142320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_WINDOWFUNC
142321 142518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubq->pPrior ){
142322 142519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select *pSel;
142520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int notUnionAll = 0;
142323 142521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pSel=pSubq; pSel; pSel=pSel->pPrior){
142324 142522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
u8 op = pSel->op;
142325 142523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( op==TK_ALL || op==TK_SELECT
142326 142524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| op==TK_UNION || op==TK_INTERSECT || op==TK_EXCEPT );
142327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( op!=TK_ALL && op!=TK_SELECT ) return 0; /* restriction (8) */
142525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( op!=TK_ALL && op!=TK_SELECT ){
142526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ notUnionAll = 1;
142527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_WINDOWFUNC
142328 142529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSel->pWin ) return 0; /* restriction (6b) */
142530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
142531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( compoundHasDifferentAffinities(pSubq) ){
142533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0; /* restriction (9) */
142534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( notUnionAll ){
142536 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If any of the compound arms are connected using UNION, INTERSECT,
142537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** or EXCEPT, then we must ensure that none of the columns use a
142538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** non-BINARY collating sequence. */
142539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pSel=pSubq; pSel; pSel=pSel->pPrior){
142540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
142541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const ExprList *pList = pSel->pEList;
142542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pList!=0 );
142543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<pList->nExpr; ii++){
142544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CollSeq *pColl = sqlite3ExprCollSeq(pParse, pList->a[ii].pExpr);
142545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( !sqlite3IsBinary(pColl) ){
142546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0; /* Restriction (8) */
142547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
142329 142550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
142330 142551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
142552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_WINDOWFUNC
142331 142553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubq->pWin && pSubq->pWin->pPartition==0 ) return 0;
142554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
142332 142555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
142333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
142334 142556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
142335 142557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
142336 142558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Only the first term of a compound can have a WITH clause. But make
142337 142559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sure no other terms are marked SF_Recursive in case something changes
142338 142560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the future.
@@ -143332,12 +143554,12 @@
143332 143554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (elistFlags & (EP_HasFunc|EP_Subquery))!=0 ){
143333 143555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->selFlags |= SF_ComplexResult;
143334 143556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143335 143557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143336 143558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
143337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x100 ){
143338 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,("After result-set wildcard expansion:\n"));
143559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x8 ){
143560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x8,pParse,p,("After result-set wildcard expansion:\n"));
143339 143561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
143340 143562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143341 143563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
143342 143564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return WRC_Continue;
143343 143565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -143467,10 +143689,177 @@
143467 143689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ) return;
143468 143690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ResolveSelectNames(pParse, p, pOuterNC);
143469 143691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ) return;
143470 143692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3SelectAddTypeInfo(pParse, p);
143471 143693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143694 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143695 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if TREETRACE_ENABLED
143696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
143697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Display all information about an AggInfo object
143698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
143699 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void printAggInfo(AggInfo *pAggInfo){
143700 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int ii;
143701 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<pAggInfo->nColumn; ii++){
143702 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
143703 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DebugPrintf(
143704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d"
143705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " iSorterColumn=%d %s\n",
143706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ii, pCol->pTab ? pCol->pTab->zName : "NULL",
143707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->iTable, pCol->iColumn, pAggInfo->iFirstReg+ii,
143708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol->iSorterColumn,
143709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ii>=pAggInfo->nAccumulator ? "" : " Accumulator");
143710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
143711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(ii=0; ii<pAggInfo->nFunc; ii++){
143713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
143714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ii, AggInfoFuncReg(pAggInfo,ii));
143715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0);
143716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif /* TREETRACE_ENABLED */
143719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
143721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Analyze the arguments to aggregate functions. Create new pAggInfo->aCol[]
143722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** entries for columns that are arguments to aggregate functions but which
143723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are not otherwise used.
143724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The aCol[] entries in AggInfo prior to nAccumulator are columns that
143726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are referenced outside of aggregate functions. These might be columns
143727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that are part of the GROUP by clause, for example. Other database engines
143728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** would throw an error if there is a column reference that is not in the
143729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** GROUP BY clause and that is not part of an aggregate function argument.
143730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** But SQLite allows this.
143731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The aCol[] entries beginning with the aCol[nAccumulator] and following
143733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** are column references that are used exclusively as arguments to
143734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aggregate functions. This routine is responsible for computing
143735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (or recomputing) those aCol[] entries.
143736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
143737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void analyzeAggFuncArgs(
143738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AggInfo *pAggInfo,
143739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NameContext *pNC
143740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
143741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
143742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo!=0 );
143743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo->iFirstReg==0 );
143744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNC->ncFlags |= NC_InAggFunc;
143745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pAggInfo->nFunc; i++){
143746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
143747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( ExprUseXList(pExpr) );
143748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprAnalyzeAggList(pNC, pExpr->x.pList);
143749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifndef SQLITE_OMIT_WINDOWFUNC
143750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( !IsWindowFunc(pExpr) );
143751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ExprHasProperty(pExpr, EP_WinFunc) ){
143752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprAnalyzeAggregates(pNC, pExpr->y.pWin->pFilter);
143753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
143755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNC->ncFlags &= ~NC_InAggFunc;
143757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
143760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** An index on expressions is being used in the inner loop of an
143761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aggregate query with a GROUP BY clause. This routine attempts
143762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to adjust the AggInfo object to take advantage of index and to
143763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** perhaps use the index as a covering index.
143764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
143766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void optimizeAggregateUseOfIndexedExpr(
143767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Parsing context */
143768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Select *pSelect, /* The SELECT statement being processed */
143769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AggInfo *pAggInfo, /* The aggregate info */
143770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ NameContext *pNC /* Name context used to resolve agg-func args */
143771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
143772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo->iFirstReg==0 );
143773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo->nColumn = pAggInfo->nAccumulator;
143774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ALWAYS(pAggInfo->nSortingColumn>0) ){
143775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pAggInfo->nColumn==0 ){
143776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo->nSortingColumn = 0;
143777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
143778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo->nSortingColumn =
143779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo->aCol[pAggInfo->nColumn-1].iSorterColumn+1;
143780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ analyzeAggFuncArgs(pAggInfo, pNC);
143783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if TREETRACE_ENABLED
143784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x20 ){
143785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexedExpr *pIEpr;
143786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x20, pParse, pSelect,
143787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ("AggInfo (possibly) adjusted for Indexed Exprs\n"));
143788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewSelect(0, pSelect, 0);
143789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(pIEpr=pParse->pIdxEpr; pIEpr; pIEpr=pIEpr->pIENext){
143790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printf("data-cursor=%d index={%d,%d}\n",
143791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIEpr->iDataCur, pIEpr->iIdxCur, pIEpr->iIdxCol);
143792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewExpr(0, pIEpr->pExpr, 0);
143793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printAggInfo(pAggInfo);
143795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #else
143797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(pSelect);
143798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(pParse);
143799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
143800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
143803 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Walker callback for aggregateConvertIndexedExprRefToColumn().
143804 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
143805 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int aggregateIdxEprRefToColCallback(Walker *pWalker, Expr *pExpr){
143806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ AggInfo *pAggInfo;
143807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ struct AggInfo_col *pCol;
143808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ UNUSED_PARAMETER(pWalker);
143809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->pAggInfo==0 ) return WRC_Continue;
143810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->op==TK_AGG_COLUMN ) return WRC_Continue;
143811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->op==TK_AGG_FUNCTION ) return WRC_Continue;
143812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->op==TK_IF_NULL_ROW ) return WRC_Continue;
143813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo = pExpr->pAggInfo;
143814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pExpr->iAgg>=0 && pExpr->iAgg<pAggInfo->nColumn );
143815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCol = &pAggInfo->aCol[pExpr->iAgg];
143816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->op = TK_AGG_COLUMN;
143817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iTable = pCol->iTable;
143818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pExpr->iColumn = pCol->iColumn;
143819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Prune;
143820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
143823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Convert every pAggInfo->aFunc[].pExpr such that any node within
143824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** those expressions that has pAppInfo set is changed into a TK_AGG_COLUMN
143825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** opcode.
143826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
143827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void aggregateConvertIndexedExprRefToColumn(AggInfo *pAggInfo){
143828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
143829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Walker w;
143830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ memset(&w, 0, sizeof(w));
143831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ w.xExprCallback = aggregateIdxEprRefToColCallback;
143832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pAggInfo->nFunc; i++){
143833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3WalkExpr(&w, pAggInfo->aFunc[i].pFExpr);
143834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
143838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
143839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Allocate a block of registers so that there is one register for each
143840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pAggInfo->aCol[] and pAggInfo->aFunc[] entry in pAggInfo. The first
143841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** register in this block is stored in pAggInfo->iFirstReg.
143842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine may only be called once for each AggInfo object. Prior
143844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to calling this routine:
143845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The aCol[] and aFunc[] arrays may be modified
143847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The AggInfoColumnReg() and AggInfoFuncReg() macros may not be used
143848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** After clling this routine:
143850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The aCol[] and aFunc[] arrays are fixed
143852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** * The AggInfoColumnReg() and AggInfoFuncReg() macros may be used
143853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
143854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
143855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static void assignAggregateRegisters(Parse *pParse, AggInfo *pAggInfo){
143856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo!=0 );
143857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo->iFirstReg==0 );
143858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo->iFirstReg = pParse->nMem + 1;
143859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->nMem += pAggInfo->nColumn + pAggInfo->nFunc;
143860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
143472 143861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143473 143862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143474 143863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Reset the aggregate accumulator.
143475 143864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
143476 143865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The aggregate accumulator is a set of memory cells that hold
@@ -143481,28 +143870,17 @@
143481 143870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void resetAccumulator(Parse *pParse, AggInfo *pAggInfo){
143482 143871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Vdbe *v = pParse->pVdbe;
143483 143872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
143484 143873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func *pFunc;
143485 143874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nReg = pAggInfo->nFunc + pAggInfo->nColumn;
143875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo->iFirstReg>0 );
143486 143876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->db->pParse==pParse );
143487 143877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->db->mallocFailed==0 || pParse->nErr!=0 );
143488 143878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nReg==0 ) return;
143489 143879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pParse->nErr ) return;
143490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef SQLITE_DEBUG
143491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* Verify that all AggInfo registers are within the range specified by
143492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** AggInfo.mnReg..AggInfo.mxReg */
143493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( nReg==pAggInfo->mxReg-pAggInfo->mnReg+1 );
143494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pAggInfo->nColumn; i++){
143495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pAggInfo->aCol[i].iMem>=pAggInfo->mnReg
143496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pAggInfo->aCol[i].iMem<=pAggInfo->mxReg );
143497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
143498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pAggInfo->nFunc; i++){
143499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pAggInfo->aFunc[i].iMem>=pAggInfo->mnReg
143500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pAggInfo->aFunc[i].iMem<=pAggInfo->mxReg );
143501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
143502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
143503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->mnReg, pAggInfo->mxReg);
143880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_Null, 0, pAggInfo->iFirstReg,
143881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pAggInfo->iFirstReg+nReg-1);
143504 143882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pFunc=pAggInfo->aFunc, i=0; i<pAggInfo->nFunc; i++, pFunc++){
143505 143883 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pFunc->iDistinct>=0 ){
143506 143884 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pE = pFunc->pFExpr;
143507 143885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseXList(pE) );
143508 143886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pE->x.pList==0 || pE->x.pList->nExpr!=1 ){
@@ -143530,19 +143908,20 @@
143530 143908 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func *pF;
143531 143909 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
143532 143910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pList;
143533 143911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseXList(pF->pFExpr) );
143534 143912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pList = pF->pFExpr->x.pList;
143535 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_AggFinal, pF->iMem, pList ? pList->nExpr : 0);
143913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_AggFinal, AggInfoFuncReg(pAggInfo,i),
143914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pList ? pList->nExpr : 0);
143536 143915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
143537 143916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143538 143917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143539 143918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143540 143919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143541 143920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
143542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Update the accumulator memory cells for an aggregate based on
143543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** the current cursor position.
143921 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Generate code that will update the accumulator memory cells for an
143922 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** aggregate based on the current cursor position.
143544 143923 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
143545 143924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If regAcc is non-zero and there are no min() or max() aggregates
143546 143925 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in pAggInfo, then only populate the pAggInfo->nAccumulator accumulator
143547 143926 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** registers if register regAcc contains 0. The caller will take care
143548 143927 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of setting and clearing regAcc.
@@ -143558,10 +143937,12 @@
143558 143937 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regHit = 0;
143559 143938 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrHitTest = 0;
143560 143939 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func *pF;
143561 143940 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_col *pC;
143562 143941 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143942 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pAggInfo->iFirstReg>0 );
143943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->nErr ) return;
143563 143944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->directMode = 1;
143564 143945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pF=pAggInfo->aFunc; i<pAggInfo->nFunc; i++, pF++){
143565 143946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg;
143566 143947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int addrNext = 0;
143567 143948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regAgg;
@@ -143618,11 +143999,11 @@
143618 143999 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColl = pParse->db->pDfltColl;
143619 144000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143620 144001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( regHit==0 && pAggInfo->nAccumulator ) regHit = ++pParse->nMem;
143621 144002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4(v, OP_CollSeq, regHit, 0, 0, (char *)pColl, P4_COLLSEQ);
143622 144003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143623 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, pF->iMem);
144004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp3(v, OP_AggStep, 0, regAgg, AggInfoFuncReg(pAggInfo,i));
143624 144005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAppendP4(v, pF->pFunc, P4_FUNCDEF);
143625 144006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP5(v, (u8)nArg);
143626 144007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempRange(pParse, regAgg, nArg);
143627 144008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( addrNext ){
143628 144009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeResolveLabel(v, addrNext);
@@ -143633,11 +144014,11 @@
143633 144014 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143634 144015 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( regHit ){
143635 144016 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
addrHitTest = sqlite3VdbeAddOp1(v, OP_If, regHit); VdbeCoverage(v);
143636 144017 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143637 144018 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0, pC=pAggInfo->aCol; i<pAggInfo->nAccumulator; i++, pC++){
143638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprCode(pParse, pC->pCExpr, pC->iMem);
144019 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3ExprCode(pParse, pC->pCExpr, AggInfoColumnReg(pAggInfo,i));
143639 144020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143640 144021 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143641 144022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->directMode = 0;
143642 144023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( addrHitTest ){
143643 144024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeJumpHereOrPopInst(v, addrHitTest);
@@ -143729,11 +144110,11 @@
143729 144110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sWalker.xExprCallback = havingToWhereExprCb;
143730 144111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sWalker.u.pSelect = p;
143731 144112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkExpr(&sWalker, p->pHaving);
143732 144113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
143733 144114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sWalker.eCode && (sqlite3TreeTrace & 0x100)!=0 ){
143734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n"));
144115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x100,pParse,p,("Move HAVING terms into WHERE:\n"));
143735 144116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
143736 144117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143737 144118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
143738 144119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143739 144120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -143861,12 +144242,12 @@
143861 144242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143862 144243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pEList->a[0].pExpr = pExpr;
143863 144244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->selFlags &= ~SF_Aggregate;
143864 144245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143865 144246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
143866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x400 ){
143867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x400,pParse,p,("After count-of-view optimization:\n"));
144247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x200 ){
144248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x200,pParse,p,("After count-of-view optimization:\n"));
143868 144249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
143869 144250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143870 144251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
143871 144252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
143872 144253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -143938,12 +144319,12 @@
143938 144319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
143939 144320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143940 144321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->mallocFailed==0 );
143941 144322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
143942 144323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
143943 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p, ("begin processing:\n", pParse->addrExplain));
143944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x10100 ){
144324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x1,pParse,p, ("begin processing:\n", pParse->addrExplain));
144325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x10000 ){
143945 144326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (sqlite3TreeTrace & 0x10001)==0x10000 ){
143946 144327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewLine(0, "In sqlite3Select() at %s:%d",
143947 144328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
__FILE__, __LINE__);
143948 144329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143949 144330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ShowSelect(p);
@@ -143959,12 +144340,12 @@
143959 144340 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDest->eDest==SRT_Except || pDest->eDest==SRT_Discard ||
143960 144341 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDest->eDest==SRT_DistQueue || pDest->eDest==SRT_DistFifo );
143961 144342 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* All of these destinations are also able to ignore the ORDER BY clause */
143962 144343 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pOrderBy ){
143963 144344 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
143964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p, ("dropping superfluous ORDER BY:\n"));
143965 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x100 ){
144345 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x800,pParse,p, ("dropping superfluous ORDER BY:\n"));
144346 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x800 ){
143966 144347 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewExprList(0, p->pOrderBy, 0, "ORDERBY");
143967 144348 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143968 144349 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
143969 144350 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ParserAddCleanup(pParse,
143970 144351 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void(*)(sqlite3*,void*))sqlite3ExprListDelete,
@@ -143980,12 +144361,12 @@
143980 144361 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto select_end;
143981 144362 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143982 144363 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( db->mallocFailed==0 );
143983 144364 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( p->pEList!=0 );
143984 144365 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
143985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x104 ){
143986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x104,pParse,p, ("after name resolution:\n"));
144366 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x10 ){
144367 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x10,pParse,p, ("after name resolution:\n"));
143987 144368 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
143988 144369 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
143989 144370 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
143990 144371 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
143991 144372 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the SF_UFSrcCheck flag is set, then this function is being called
@@ -144022,12 +144403,12 @@
144022 144403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WindowRewrite(pParse, p) ){
144023 144404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pParse->nErr );
144024 144405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto select_end;
144025 144406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144026 144407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
144027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->pWin && (sqlite3TreeTrace & 0x108)!=0 ){
144028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x104,pParse,p, ("after window rewrite:\n"));
144408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->pWin && (sqlite3TreeTrace & 0x40)!=0 ){
144409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x40,pParse,p, ("after window rewrite:\n"));
144029 144410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
144030 144411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144031 144412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144032 144413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_OMIT_WINDOWFUNC */
144033 144414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList = p->pSrc;
@@ -144054,11 +144435,11 @@
144054 144435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144055 144436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pItem->fg.jointype & (JT_LEFT|JT_RIGHT))==JT_LEFT
144056 144437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& sqlite3ExprImpliesNonNullRow(p->pWhere, pItem->iCursor)
144057 144438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& OptimizationEnabled(db, SQLITE_SimplifyJoin)
144058 144439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
144059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,
144440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x1000,pParse,p,
144060 144441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
("LEFT-JOIN simplifies to JOIN on term %d\n",i));
144061 144442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pItem->fg.jointype &= ~(JT_LEFT|JT_OUTER);
144062 144443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem->iCursor>=0 );
144063 144444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
unsetJoinExpr(p->pWhere, pItem->iCursor,
144064 144445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabList->a[0].fg.jointype & JT_LTORJ);
@@ -144110,11 +144491,11 @@
144110 144491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pSub->pLimit==0 /* Condition (1) */
144111 144492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pSub->selFlags & SF_OrderByReqd)==0 /* Condition (2) */
144112 144493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (p->selFlags & SF_OrderByReqd)==0 /* Condition (3) and (4) */
144113 144494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& OptimizationEnabled(db, SQLITE_OmitOrderBy)
144114 144495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
144115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,
144496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x800,pParse,p,
144116 144497 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
("omit superfluous ORDER BY on %r FROM-clause subquery\n",i+1));
144117 144498 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ParserAddCleanup(pParse,
144118 144499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(void(*)(sqlite3*,void*))sqlite3ExprListDelete,
144119 144500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->pOrderBy);
144120 144501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub->pOrderBy = 0;
@@ -144165,12 +144546,12 @@
144165 144546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** procedure.
144166 144547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144167 144548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pPrior ){
144168 144549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = multiSelect(pParse, p, pDest);
144169 144550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
144170 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x1,pParse,p,("end compound-select processing\n"));
144171 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
144551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x400,pParse,p,("end compound-select processing\n"));
144552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3TreeTrace & 0x400)!=0 && ExplainQueryPlanParent(pParse)==0 ){
144172 144553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
144173 144554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144174 144555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144175 144556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pNext==0 ) ExplainQueryPlanPop(pParse);
144176 144557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -144186,17 +144567,17 @@
144186 144567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& p->pWhere->op==TK_AND
144187 144568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& OptimizationEnabled(db, SQLITE_PropagateConst)
144188 144569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& propagateConstants(pParse, p)
144189 144570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
144190 144571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
144191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x100 ){
144192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,("After constant propagation:\n"));
144572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x2000 ){
144573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2000,pParse,p,("After constant propagation:\n"));
144193 144574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
144194 144575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144195 144576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144196 144577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
144197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,("Constant propagation not helpful\n"));
144578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2000,pParse,p,("Constant propagation not helpful\n"));
144198 144579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144199 144580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144200 144581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_COUNTOFVIEW_OPTIMIZATION
144201 144582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( OptimizationEnabled(db, SQLITE_QueryFlattener|SQLITE_CountOfView)
144202 144583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& countOfViewOptimization(pParse, p)
@@ -144265,19 +144646,19 @@
144265 144646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pItem->fg.isCte==0
144266 144647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| (pItem->u2.pCteUse->eM10d!=M10d_Yes && pItem->u2.pCteUse->nUse<2))
144267 144648 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pushDownWhereTerms(pParse, pSub, p->pWhere, pItem)
144268 144649 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
144269 144650 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
144270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x100 ){
144271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,
144651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x4000 ){
144652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x4000,pParse,p,
144272 144653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
("After WHERE-clause push-down into subquery %d:\n", pSub->selId));
144273 144654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
144274 144655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144275 144656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144276 144657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pItem->pSelect && (pItem->pSelect->selFlags & SF_PushDown)!=0 );
144277 144658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
144278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x100,pParse,p,("Push-down not possible\n"));
144659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x4000,pParse,p,("Push-down not possible\n"));
144279 144660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144280 144661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144281 144662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
zSavedAuthContext = pParse->zAuthContext;
144282 144663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse->zAuthContext = pItem->zName;
144283 144664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -144388,12 +144769,12 @@
144388 144769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pGroupBy = p->pGroupBy;
144389 144770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pHaving = p->pHaving;
144390 144771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.isTnct = (p->selFlags & SF_Distinct)!=0;
144391 144772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144392 144773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
144393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x400 ){
144394 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x400,pParse,p,("After all FROM-clause analysis:\n"));
144774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x8000 ){
144775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x8000,pParse,p,("After all FROM-clause analysis:\n"));
144395 144776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
144396 144777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144397 144778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144398 144779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144399 144780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the query is DISTINCT with an ORDER BY but is not an aggregate, and
@@ -144425,12 +144806,12 @@
144425 144806 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** original setting of the SF_Distinct flag, not the current setting */
144426 144807 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( sDistinct.isTnct );
144427 144808 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sDistinct.isTnct = 2;
144428 144809 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144429 144810 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
144430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x400 ){
144431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x400,pParse,p,("Transform DISTINCT into GROUP BY:\n"));
144811 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x20000 ){
144812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x20000,pParse,p,("Transform DISTINCT into GROUP BY:\n"));
144432 144813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
144433 144814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144434 144815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144435 144816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144436 144817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -144512,11 +144893,11 @@
144512 144893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144513 144894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( WHERE_USE_LIMIT==SF_FixedLimit );
144514 144895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144515 144896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144516 144897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Begin the database scan. */
144517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereBegin\n"));
144898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereBegin\n"));
144518 144899 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, sSort.pOrderBy,
144519 144900 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pEList, p, wctrlFlags, p->nSelectRow);
144520 144901 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ) goto select_end;
144521 144902 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereOutputRowCount(pWInfo) < p->nSelectRow ){
144522 144903 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->nSelectRow = sqlite3WhereOutputRowCount(pWInfo);
@@ -144529,11 +144910,11 @@
144529 144910 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSort.labelOBLopt = sqlite3WhereOrderByLimitOptLabel(pWInfo);
144530 144911 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sSort.nOBSat==sSort.pOrderBy->nExpr ){
144531 144912 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSort.pOrderBy = 0;
144532 144913 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144533 144914 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144534 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
144915 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereBegin returns\n"));
144535 144916 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144536 144917 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If sorting index that was created by a prior OP_OpenEphemeral
144537 144918 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** instruction ended up not being needed, then change the OP_OpenEphemeral
144538 144919 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** into an OP_Noop.
144539 144920 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -144568,11 +144949,11 @@
144568 144949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereContinueLabel(pWInfo),
144569 144950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereBreakLabel(pWInfo));
144570 144951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144571 144952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* End the database scan loop.
144572 144953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
144954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
144574 144955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereEnd(pWInfo);
144575 144956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144576 144957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
144577 144958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This case when there exist aggregate functions or a GROUP BY clause
144578 144959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** or both */
@@ -144654,11 +145035,10 @@
144654 145035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sNC, 0, sizeof(sNC));
144655 145036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sNC.pParse = pParse;
144656 145037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sNC.pSrcList = pTabList;
144657 145038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sNC.uNC.pAggInfo = pAggInfo;
144658 145039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VVA_ONLY( sNC.ncFlags = NC_UAggInfo; )
144659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pAggInfo->mnReg = pParse->nMem+1;
144660 145040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0;
144661 145041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->pGroupBy = pGroupBy;
144662 145042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprAnalyzeAggList(&sNC, pEList);
144663 145043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy);
144664 145044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pHaving ){
@@ -144675,49 +145055,21 @@
144675 145055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pGroupBy==0 && p->pHaving==0 && pAggInfo->nFunc==1 ){
144676 145056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
minMaxFlag = minMaxQuery(db, pAggInfo->aFunc[0].pFExpr, &pMinMaxOrderBy);
144677 145057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
144678 145058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
minMaxFlag = WHERE_ORDERBY_NORMAL;
144679 145059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pAggInfo->nFunc; i++){
144681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
144682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( ExprUseXList(pExpr) );
144683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sNC.ncFlags |= NC_InAggFunc;
144684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprAnalyzeAggList(&sNC, pExpr->x.pList);
144685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifndef SQLITE_OMIT_WINDOWFUNC
144686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( !IsWindowFunc(pExpr) );
144687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( ExprHasProperty(pExpr, EP_WinFunc) ){
144688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3ExprAnalyzeAggregates(&sNC, pExpr->y.pWin->pFilter);
144689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
144690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #endif
144691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sNC.ncFlags &= ~NC_InAggFunc;
144692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
144693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pAggInfo->mxReg = pParse->nMem;
145060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ analyzeAggFuncArgs(pAggInfo, &sNC);
144694 145061 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( db->mallocFailed ) goto select_end;
144695 145062 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
144696 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3TreeTrace & 0x400 ){
144697 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int ii;
144698 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x400,pParse,p,("After aggregate analysis %p:\n", pAggInfo));
145063 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x20 ){
145064 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x20,pParse,p,("After aggregate analysis %p:\n", pAggInfo));
144699 145065 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
144700 145066 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( minMaxFlag ){
144701 145067 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("MIN/MAX Optimization (0x%02x) adds:\n", minMaxFlag);
144702 145068 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewExprList(0, pMinMaxOrderBy, 0, "ORDERBY");
144703 145069 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144704 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(ii=0; ii<pAggInfo->nColumn; ii++){
144705 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- struct AggInfo_col *pCol = &pAggInfo->aCol[ii];
144706 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DebugPrintf(
144707 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- "agg-column[%d] pTab=%s iTable=%d iColumn=%d iMem=%d"
144708 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- " iSorterColumn=%d\n",
144709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ii, pCol->pTab ? pCol->pTab->zName : "NULL",
144710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iTable, pCol->iColumn, pCol->iMem,
144711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pCol->iSorterColumn);
144712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3TreeViewExpr(0, pAggInfo->aCol[ii].pCExpr, 0);
144713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
144714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(ii=0; ii<pAggInfo->nFunc; ii++){
144715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DebugPrintf("agg-func[%d]: iMem=%d\n",
144716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ii, pAggInfo->aFunc[ii].iMem);
144717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3TreeViewExpr(0, pAggInfo->aFunc[ii].pFExpr, 0);
144718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
145070 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printAggInfo(pAggInfo);
144719 145071 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144720 145072 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
144721 145073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144722 145074 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144723 145075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Processing for aggregates with GROUP BY is very different and
@@ -144782,21 +145134,25 @@
144782 145134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This might involve two separate loops with an OP_Sort in between, or
144783 145135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it might be a single loop that uses an index to extract information
144784 145136 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** in the right order to begin with.
144785 145137 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144786 145138 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_Gosub, regReset, addrReset);
144787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereBegin\n"));
145139 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereBegin\n"));
144788 145140 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pGroupBy, pDistinct,
144789 145141 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p, (sDistinct.isTnct==2 ? WHERE_DISTINCTBY : WHERE_GROUPBY)
144790 145142 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
| (orderByGrp ? WHERE_SORTBYGROUP : 0) | distFlag, 0
144791 145143 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
144792 145144 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ){
144793 145145 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(db, pDistinct);
144794 145146 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto select_end;
144795 145147 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145148 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->pIdxEpr ){
145149 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ optimizeAggregateUseOfIndexedExpr(pParse, p, pAggInfo, &sNC);
145150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
145151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assignAggregateRegisters(pParse, pAggInfo);
144796 145152 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eDist = sqlite3WhereIsDistinct(pWInfo);
144797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
145153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereBegin returns\n"));
144798 145154 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereIsOrdered(pWInfo)==pGroupBy->nExpr ){
144799 145155 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* The optimizer is able to deliver rows in group by order so
144800 145156 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** we do not have to sort. The OP_OpenEphemeral table will be
144801 145157 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** cancelled later because we still need to use the pKeyInfo
144802 145158 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -144841,19 +145197,36 @@
144841 145197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
regRecord = sqlite3GetTempReg(pParse);
144842 145198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase, nCol, regRecord);
144843 145199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_SorterInsert, pAggInfo->sortingIdx, regRecord);
144844 145200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempReg(pParse, regRecord);
144845 145201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ReleaseTempRange(pParse, regBase, nCol);
144846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
145202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
144847 145203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereEnd(pWInfo);
144848 145204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->sortingIdxPTab = sortPTab = pParse->nTab++;
144849 145205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sortOut = sqlite3GetTempReg(pParse);
144850 145206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp3(v, OP_OpenPseudo, sortPTab, sortOut, nCol);
144851 145207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_SorterSort, pAggInfo->sortingIdx, addrEnd);
144852 145208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeComment((v, "GROUP BY sort")); VdbeCoverage(v);
144853 145209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAggInfo->useSortingIdx = 1;
144854 145210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
145212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* If there entries in pAgggInfo->aFunc[] that contain subexpressions
145213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** that are indexed (and that were previously identified and tagged
145214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** in optimizeAggregateUseOfIndexedExpr()) then those subexpressions
145215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** must now be converted into a TK_AGG_COLUMN node so that the value
145216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is correctly pulled from the index rather than being recomputed. */
145217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pParse->pIdxEpr ){
145218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aggregateConvertIndexedExprRefToColumn(pAggInfo);
145219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if TREETRACE_ENABLED
145220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3TreeTrace & 0x20 ){
145221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x20, pParse, p,
145222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ("AggInfo function expressions converted to reference index\n"));
145223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3TreeViewSelect(0, p, 0);
145224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ printAggInfo(pAggInfo);
145225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
145226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #endif
145227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
144855 145228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
144856 145229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the index or temporary table used by the GROUP BY sort
144857 145230 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will naturally deliver rows in the order required by the ORDER BY
144858 145231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** clause, cancel the ephemeral table open coded earlier.
144859 145232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
@@ -144919,11 +145292,11 @@
144919 145292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
144920 145293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( groupBySort ){
144921 145294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp2(v, OP_SorterNext, pAggInfo->sortingIdx,addrTopOfLoop);
144922 145295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverage(v);
144923 145296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
144924 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
145297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
144925 145298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereEnd(pWInfo);
144926 145299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeToNoop(v, addrSortingIdx);
144927 145300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
144928 145301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(db, pDistinct);
144929 145302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -145029,11 +145402,12 @@
145029 145402 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Open a read-only cursor, execute the OP_Count, close the cursor. */
145030 145403 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp4Int(v, OP_OpenRead, iCsr, (int)iRoot, iDb, 1);
145031 145404 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pKeyInfo ){
145032 145405 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeChangeP4(v, -1, (char *)pKeyInfo, P4_KEYINFO);
145033 145406 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3VdbeAddOp2(v, OP_Count, iCsr, pAggInfo->aFunc[0].iMem);
145407 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assignAggregateRegisters(pParse, pAggInfo);
145408 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3VdbeAddOp2(v, OP_Count, iCsr, AggInfoFuncReg(pAggInfo,0));
145035 145409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3VdbeAddOp1(v, OP_Close, iCsr);
145036 145410 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
explainSimpleCount(pParse, pTab, pBest);
145037 145411 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
145038 145412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int regAcc = 0; /* "populate accumulators" flag */
145039 145413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExprList *pDistinct = 0;
@@ -145065,10 +145439,11 @@
145065 145439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pAggInfo->nFunc==1 && pAggInfo->aFunc[0].iDistinct>=0 ){
145066 145440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( ExprUseXList(pAggInfo->aFunc[0].pFExpr) );
145067 145441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDistinct = pAggInfo->aFunc[0].pFExpr->x.pList;
145068 145442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
distFlag = pDistinct ? (WHERE_WANT_DISTINCT|WHERE_AGG_DISTINCT) : 0;
145069 145443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assignAggregateRegisters(pParse, pAggInfo);
145070 145445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145071 145446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* This case runs if the aggregate has no GROUP BY clause. The
145072 145447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** processing is much simpler since there is only a single row
145073 145448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of output.
145074 145449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
@@ -145081,17 +145456,17 @@
145081 145456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** be an appropriate ORDER BY expression for the optimization.
145082 145457 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
145083 145458 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( minMaxFlag==WHERE_ORDERBY_NORMAL || pMinMaxOrderBy!=0 );
145084 145459 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pMinMaxOrderBy==0 || pMinMaxOrderBy->nExpr==1 );
145085 145460 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145086 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereBegin\n"));
145461 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereBegin\n"));
145087 145462 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo = sqlite3WhereBegin(pParse, pTabList, pWhere, pMinMaxOrderBy,
145088 145463 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pDistinct, p, minMaxFlag|distFlag, 0);
145089 145464 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo==0 ){
145090 145465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
goto select_end;
145091 145466 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145092 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereBegin returns\n"));
145467 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereBegin returns\n"));
145093 145468 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
eDist = sqlite3WhereIsDistinct(pWInfo);
145094 145469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
updateAccumulator(pParse, regAcc, pAggInfo, eDist);
145095 145470 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( eDist!=WHERE_DISTINCT_NOOP ){
145096 145471 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct AggInfo_func *pF = pAggInfo->aFunc;
145097 145472 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pF ){
@@ -145101,11 +145476,11 @@
145101 145476 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145102 145477 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( regAcc ) sqlite3VdbeAddOp2(v, OP_Integer, 1, regAcc);
145103 145478 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( minMaxFlag ){
145104 145479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereMinMaxOptEarlyOut(v, pWInfo);
145105 145480 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,p,("WhereEnd\n"));
145481 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x2,pParse,p,("WhereEnd\n"));
145107 145482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereEnd(pWInfo);
145108 145483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
finalizeAggFunctions(pParse, pAggInfo);
145109 145484 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145110 145485 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145111 145486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSort.pOrderBy = 0;
@@ -145148,11 +145523,11 @@
145148 145523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprListDelete(db, pMinMaxOrderBy);
145149 145524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
145150 145525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pAggInfo && !db->mallocFailed ){
145151 145526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pAggInfo->nColumn; i++){
145152 145527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr = pAggInfo->aCol[i].pCExpr;
145153 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( pExpr!=0 );
145528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr==0 ) continue;
145154 145529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->pAggInfo==pAggInfo );
145155 145530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pExpr->iAgg==i );
145156 145531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145157 145532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<pAggInfo->nFunc; i++){
145158 145533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Expr *pExpr = pAggInfo->aFunc[i].pFExpr;
@@ -145162,12 +145537,12 @@
145162 145537 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145163 145538 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145164 145539 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
145165 145540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
145166 145541 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if TREETRACE_ENABLED
145167 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(0x1,pParse,p,("end processing\n"));
145168 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (sqlite3TreeTrace & 0x2000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
145542 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x1,pParse,p,("end processing\n"));
145543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3TreeTrace & 0x40000)!=0 && ExplainQueryPlanParent(pParse)==0 ){
145169 145544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, p, 0);
145170 145545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
145171 145546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
145172 145547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlanPop(pParse);
145173 145548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -145437,11 +145812,11 @@
145437 145812 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p ){
145438 145813 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Trigger *pTrig = (Trigger *)sqliteHashData(p);
145439 145814 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTrig->pTabSchema==pTab->pSchema
145440 145815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pTrig->table
145441 145816 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& 0==sqlite3StrICmp(pTrig->table, pTab->zName)
145442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- && pTrig->pTabSchema!=pTmpSchema
145817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && (pTrig->pTabSchema!=pTmpSchema || pTrig->bReturning)
145443 145818 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
145444 145819 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTrig->pNext = pList;
145445 145820 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pList = pTrig;
145446 145821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pTrig->op==TK_RETURNING ){
145447 145822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
@@ -150944,10 +151319,11 @@
150944 151319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_TRANSCONS 0x00200000 /* Uses a transitive constraint */
150945 151320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_BLOOMFILTER 0x00400000 /* Consider using a Bloom-filter */
150946 151321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_SELFCULL 0x00800000 /* nOut reduced by extra WHERE terms */
150947 151322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_OMIT_OFFSET 0x01000000 /* Set offset counter to zero */
150948 151323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#define WHERE_VIEWSCAN 0x02000000 /* A full-scan of a VIEW or subquery */
151324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #define WHERE_EXPRIDX 0x04000000 /* Uses an index-on-expressions */
150949 151325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150950 151326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* !defined(SQLITE_WHEREINT_H) */
150951 151327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
150952 151328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** End of whereInt.h ********************************************/
150953 151329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/************** Continuing where we left off in wherecode.c ******************/
@@ -151289,11 +151665,11 @@
151289 151665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->wtFlags |= TERM_LIKECOND;
151290 151666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
151291 151667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->wtFlags |= TERM_CODED;
151292 151668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151293 151669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef WHERETRACE_ENABLED
151294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x20000 ){
151670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3WhereTrace & 0x4001)==0x4001 ){
151295 151671 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("DISABLE-");
151296 151672 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereTermPrint(pTerm, (int)(pTerm - (pTerm->pWC->a)));
151297 151673 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
151298 151674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
151299 151675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->iParent<0 ) break;
@@ -152276,17 +152652,19 @@
152276 152652 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTabItem = &pWInfo->pTabList->a[pLevel->iFrom];
152277 152653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iCur = pTabItem->iCursor;
152278 152654 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLevel->notReady = notReady & ~sqlite3WhereGetMask(&pWInfo->sMaskSet, iCur);
152279 152655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
bRev = (pWInfo->revMask>>iLevel)&1;
152280 152656 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeModuleComment((v, "Begin WHERE-loop%d: %s",iLevel,pTabItem->pTab->zName));
152281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if WHERETRACE_ENABLED /* 0x20800 */
152282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x800 ){
152657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if WHERETRACE_ENABLED /* 0x4001 */
152658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x1 ){
152283 152659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("Coding level %d of %d: notReady=%llx iFrom=%d\n",
152284 152660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLevel, pWInfo->nLevel, (u64)notReady, pLevel->iFrom);
152285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3WhereLoopPrint(pLoop, pWC);
152661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x1000 ){
152662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3WhereLoopPrint(pLoop, pWC);
152663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
152286 152664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
152287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x20000 ){
152665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3WhereTrace & 0x4001)==0x4001 ){
152288 152666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iLevel==0 ){
152289 152667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("WHERE clause being coded:\n");
152290 152668 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewExpr(0, pWInfo->pWhere, 0);
152291 152669 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
152292 152670 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("All WHERE-clause terms before coding:\n");
@@ -153206,11 +153584,11 @@
153206 153584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pAndExpr->pLeft = pOrExpr;
153207 153585 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pOrExpr = pAndExpr;
153208 153586 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153209 153587 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Loop through table entries that match term pOrTerm. */
153210 153588 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ExplainQueryPlan((pParse, 1, "INDEX %d", ii+1));
153211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0xffff, ("Subplan for OR-clause:\n"));
153589 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0xffffffff, ("Subplan for OR-clause:\n"));
153212 153590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0, 0,
153213 153591 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERE_OR_SUBCLAUSE, iCovCur);
153214 153592 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSubWInfo || pParse->nErr );
153215 153593 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSubWInfo ){
153216 153594 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop *pSubLoop;
@@ -153443,16 +153821,16 @@
153443 153821 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverageIf(v, (x&1)==1);
153444 153822 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeCoverageIf(v, (x&1)==0);
153445 153823 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153446 153824 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
153447 153825 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef WHERETRACE_ENABLED /* 0xffff */
153826 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef WHERETRACE_ENABLED /* 0xffffffff */
153449 153827 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3WhereTrace ){
153450 153828 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
VdbeNoopComment((v, "WhereTerm[%d] (%p) priority=%d",
153451 153829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWC->nTerm-j, pTerm, iLoop));
153452 153830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x800 ){
153831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x4000 ){
153454 153832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("Coding auxiliary constraint:\n");
153455 153833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereTermPrint(pTerm, pWC->nTerm-j);
153456 153834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153457 153835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
153458 153836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprIfFalse(pParse, pE, addrCont, SQLITE_JUMPIFNULL);
@@ -153477,12 +153855,12 @@
153477 153855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTerm->eOperator & (WO_EQ|WO_IS))==0 ) continue;
153478 153856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTerm->eOperator & WO_EQUIV)==0 ) continue;
153479 153857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm->leftCursor!=iCur ) continue;
153480 153858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTabItem->fg.jointype & (JT_LEFT|JT_LTORJ|JT_RIGHT) ) continue;
153481 153859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pE = pTerm->pExpr;
153482 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #ifdef WHERETRACE_ENABLED /* 0x800 */
153483 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x800 ){
153860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #ifdef WHERETRACE_ENABLED /* 0x4001 */
153861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3WhereTrace & 0x4001)==0x4001 ){
153484 153862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("Coding transitive constraint:\n");
153485 153863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereTermPrint(pTerm, pWC->nTerm-j);
153486 153864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153487 153865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
153488 153866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( !ExprHasProperty(pE, EP_OuterON) );
@@ -153593,17 +153971,17 @@
153593 153971 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprIfFalse(pParse, pTerm->pExpr, addrCont, SQLITE_JUMPIFNULL);
153594 153972 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->wtFlags |= TERM_CODED;
153595 153973 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153596 153974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153597 153975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
153598 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- #if WHERETRACE_ENABLED /* 0x20800 */
153599 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x20000 ){
153976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ #if WHERETRACE_ENABLED /* 0x4001 */
153977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x4000 ){
153600 153978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("All WHERE-clause terms after coding level %d:\n",
153601 153979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLevel);
153602 153980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereClausePrint(pWC);
153603 153981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153604 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x800 ){
153982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x1 ){
153605 153983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("End Coding level %d: notReady=%llx\n",
153606 153984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
iLevel, (u64)pLevel->notReady);
153607 153985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
153608 153986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
153609 153987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return pLevel->notReady;
@@ -156259,11 +156637,11 @@
156259 156637 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** are no-ops.
156260 156638 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
156261 156639 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if !defined(SQLITE_OMIT_VIRTUALTABLE) && defined(WHERETRACE_ENABLED)
156262 156640 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void whereTraceIndexInfoInputs(sqlite3_index_info *p){
156263 156641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
156264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !sqlite3WhereTrace ) return;
156642 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3WhereTrace & 0x10)==0 ) return;
156265 156643 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nConstraint; i++){
156266 156644 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(
156267 156645 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" constraint[%d]: col=%d termid=%d op=%d usabled=%d collseq=%s\n",
156268 156646 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i,
156269 156647 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aConstraint[i].iColumn,
@@ -156279,11 +156657,11 @@
156279 156657 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aOrderBy[i].desc);
156280 156658 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
156281 156659 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
156282 156660 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void whereTraceIndexInfoOutputs(sqlite3_index_info *p){
156283 156661 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
156284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( !sqlite3WhereTrace ) return;
156662 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (sqlite3WhereTrace & 0x10)==0 ) return;
156285 156663 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nConstraint; i++){
156286 156664 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(" usage[%d]: argvIdx=%d omit=%d\n",
156287 156665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
i,
156288 156666 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aConstraintUsage[i].argvIndex,
156289 156667 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->aConstraintUsage[i].omit);
@@ -157296,11 +157674,11 @@
157296 157674 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** using the method described in the header comment for this function. */
157297 157675 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nDiff!=1 || pUpper==0 || pLower==0 ){
157298 157676 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nAdjust = (sqlite3LogEst(p->nSample) - sqlite3LogEst(nDiff));
157299 157677 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->nOut -= nAdjust;
157300 157678 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pbDone = 1;
157301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x10, ("range skip-scan regions: %u..%u adjust=%d est=%d\n",
157679 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x20, ("range skip-scan regions: %u..%u adjust=%d est=%d\n",
157302 157680 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nLower, nUpper, nAdjust*-1, pLoop->nOut));
157303 157681 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157304 157682 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
157305 157683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
157306 157684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( *pbDone==0 );
@@ -157474,11 +157852,11 @@
157474 157852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nNew = 10; assert( 10==sqlite3LogEst(2) );
157475 157853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157476 157854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nNew<nOut ){
157477 157855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOut = nNew;
157478 157856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157479 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x10, ("STAT4 range scan: %u..%u est=%d\n",
157857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x20, ("STAT4 range scan: %u..%u est=%d\n",
157480 157858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(u32)iLower, (u32)iUpper, nOut));
157481 157859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157482 157860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
157483 157861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int bDone = 0;
157484 157862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereRangeSkipScanEst(pParse, pLower, pUpper, pLoop, &bDone);
@@ -157507,11 +157885,11 @@
157507 157885 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOut -= (pLower!=0) + (pUpper!=0);
157508 157886 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nNew<10 ) nNew = 10;
157509 157887 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nNew<nOut ) nOut = nNew;
157510 157888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(WHERETRACE_ENABLED)
157511 157889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pLoop->nOut>nOut ){
157512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x10,("Range scan lowers nOut from %d to %d\n",
157890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x20,("Range scan lowers nOut from %d to %d\n",
157513 157891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->nOut, nOut));
157514 157892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157515 157893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
157516 157894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->nOut = (LogEst)nOut;
157517 157895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
@@ -157572,11 +157950,11 @@
157572 157950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc!=SQLITE_OK ) return rc;
157573 157951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bOk==0 ) return SQLITE_NOTFOUND;
157574 157952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder->nRecValid = nEq;
157575 157953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
157576 157954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereKeyStats(pParse, p, pRec, 0, a);
157577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x10,("equality scan regions %s(%d): %d\n",
157955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x20,("equality scan regions %s(%d): %d\n",
157578 157956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zName, nEq-1, (int)a[1]));
157579 157957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnRow = a[1];
157580 157958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
157581 157959 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
157582 157960 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -157622,11 +158000,11 @@
157622 158000 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157623 158001 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
157624 158002 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK ){
157625 158003 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRowEst > nRow0 ) nRowEst = nRow0;
157626 158004 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pnRow = nRowEst;
157627 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x10,("IN row estimate: est=%d\n", nRowEst));
158005 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x20,("IN row estimate: est=%d\n", nRowEst));
157628 158006 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157629 158007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pBuilder->nRecValid==nRecValid );
157630 158008 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
157631 158009 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157632 158010 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif /* SQLITE_ENABLE_STAT4 */
@@ -157731,11 +158109,11 @@
157731 158109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(" f %06x %d-%d", p->wsFlags, p->nLTerm,p->nSkip);
157732 158110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
157733 158111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(" f %06x N %d", p->wsFlags, p->nLTerm);
157734 158112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157735 158113 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut);
157736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
158114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( p->nLTerm && (sqlite3WhereTrace & 0x4000)!=0 ){
157737 158115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
157738 158116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i=0; i<p->nLTerm; i++){
157739 158117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereTermPrint(p->aLTerm[i], i);
157740 158118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
157741 158119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -158609,11 +158987,11 @@
158609 158987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to be true for half or more of the rows in the table.
158610 158988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** See tag-202002240-1 */
158611 158989 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& pNew->nOut+10 > pProbe->aiRowLogEst[0]
158612 158990 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
158613 158991 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if WHERETRACE_ENABLED /* 0x01 */
158614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x01 ){
158992 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x20 ){
158615 158993 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(
158616 158994 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"STAT4 determines term has low selectivity:\n");
158617 158995 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereTermPrint(pTerm, 999);
158618 158996 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158619 158997 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
@@ -158646,13 +159024,21 @@
158646 159024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Set rCostIdx to the cost of visiting selected rows in index. Add
158647 159025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** it to pNew->rRun, which is currently set to the cost of the index
158648 159026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** seek only. Then, if this is a non-covering index, add the cost of
158649 159027 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** visiting the rows in the main table. */
158650 159028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSrc->pTab->szTabRow>0 );
158651 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
159029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pProbe->idxType==SQLITE_IDXTYPE_IPK ){
159030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* The pProbe->szIdxRow is low for an IPK table since the interior
159031 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pages are small. Thuse szIdxRow gives a good estimate of seek cost.
159032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** But the leaf pages are full-size, so pProbe->szIdxRow would badly
159033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** under-estimate the scanning cost. */
159034 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rCostIdx = pNew->nOut + 16;
159035 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
159036 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rCostIdx = pNew->nOut + 1 + (15*pProbe->szIdxRow)/pSrc->pTab->szTabRow;
159037 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
158652 159038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = sqlite3LogEstAdd(rLogSize, rCostIdx);
158653 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK))==0 ){
159039 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pNew->wsFlags & (WHERE_IDX_ONLY|WHERE_IPK|WHERE_EXPRIDX))==0 ){
158654 159040 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = sqlite3LogEstAdd(pNew->rRun, pNew->nOut + 16);
158655 159041 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158656 159042 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ApplyCostMultiplier(pNew->rRun, pProbe->pTable->costMult);
158657 159043 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
158658 159044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
nOutUnadjusted = pNew->nOut;
@@ -158800,21 +159186,44 @@
158800 159186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
158801 159187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158802 159188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158803 159189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 0;
158804 159190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
159192 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /*
159193 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pIdx is an index containing expressions. Check it see if any of the
159194 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expressions in the index match the pExpr expression.
159195 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ */
159196 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ static int exprIsCoveredByIndex(
159197 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Expr *pExpr,
159198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Index *pIdx,
159199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int iTabCur
159200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
159201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i;
159202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pIdx->nColumn; i++){
159203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->aiColumn[i]==XN_EXPR
159204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && sqlite3ExprCompare(0, pExpr, pIdx->aColExpr->a[i].pExpr, iTabCur)==0
159205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ){
159206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 1;
159207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
159210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
158805 159211 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
158806 159212 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
158807 159213 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Structure passed to the whereIsCoveringIndex Walker callback.
158808 159214 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
159215 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ typedef struct CoveringIndexCheck CoveringIndexCheck;
158809 159216 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct CoveringIndexCheck {
158810 159217 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx; /* The index */
158811 159218 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTabCur; /* Cursor number for the corresponding table */
159219 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 bExpr; /* Uses an indexed expression */
159220 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u8 bUnidx; /* Uses an unindexed column not within an indexed expr */
158812 159221 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
};
158813 159222 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
158814 159223 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
158815 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Information passed in is pWalk->u.pCovIdxCk. Call is pCk.
159224 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Information passed in is pWalk->u.pCovIdxCk. Call it pCk.
158816 159225 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
158817 159226 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the Expr node references the table with cursor pCk->iTabCur, then
158818 159227 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** make sure that column is covered by the index pCk->pIdx. We know that
158819 159228 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** all columns less than 63 (really BMS-1) are covered, so we don't need
158820 159229 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to check them. But we do need to check any column at 63 or greater.
@@ -158822,75 +159231,107 @@
158822 159231 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If the index does not cover the column, then set pWalk->eCode to
158823 159232 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** non-zero and return WRC_Abort to stop the search.
158824 159233 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
158825 159234 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** If this node does not disprove that the index can be a covering index,
158826 159235 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then just return WRC_Continue, to continue the search.
159236 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
159237 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If pCk->pIdx contains indexed expressions and one of those expressions
159238 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** matches pExpr, then prune the search.
158827 159239 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
158828 159240 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static int whereIsCoveringIndexWalkCallback(Walker *pWalk, Expr *pExpr){
158829 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i; /* Loop counter */
158830 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const Index *pIdx; /* The index of interest */
158831 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- const i16 *aiColumn; /* Columns contained in the index */
158832 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- u16 nColumn; /* Number of columns in the index */
158833 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pExpr->op!=TK_COLUMN && pExpr->op!=TK_AGG_COLUMN ) return WRC_Continue;
158834 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pExpr->iColumn<(BMS-1) ) return WRC_Continue;
158835 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pExpr->iTable!=pWalk->u.pCovIdxCk->iTabCur ) return WRC_Continue;
158836 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pIdx = pWalk->u.pCovIdxCk->pIdx;
158837 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- aiColumn = pIdx->aiColumn;
158838 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nColumn = pIdx->nColumn;
158839 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<nColumn; i++){
158840 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( aiColumn[i]==pExpr->iColumn ) return WRC_Continue;
158841 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
158842 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pWalk->eCode = 1;
158843 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return WRC_Abort;
159241 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i; /* Loop counter */
159242 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const Index *pIdx; /* The index of interest */
159243 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ const i16 *aiColumn; /* Columns contained in the index */
159244 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u16 nColumn; /* Number of columns in the index */
159245 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ CoveringIndexCheck *pCk; /* Info about this search */
159246 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+
159247 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCk = pWalk->u.pCovIdxCk;
159248 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx = pCk->pIdx;
159249 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pExpr->op==TK_COLUMN || pExpr->op==TK_AGG_COLUMN) ){
159250 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* if( pExpr->iColumn<(BMS-1) && pIdx->bHasExpr==0 ) return WRC_Continue;*/
159251 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pExpr->iTable!=pCk->iTabCur ) return WRC_Continue;
159252 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pIdx = pWalk->u.pCovIdxCk->pIdx;
159253 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ aiColumn = pIdx->aiColumn;
159254 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nColumn = pIdx->nColumn;
159255 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<nColumn; i++){
159256 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( aiColumn[i]==pExpr->iColumn ) return WRC_Continue;
159257 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159258 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCk->bUnidx = 1;
159259 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Abort;
159260 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( pIdx->bHasExpr
159261 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ && exprIsCoveredByIndex(pExpr, pIdx, pWalk->u.pCovIdxCk->iTabCur) ){
159262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pCk->bExpr = 1;
159263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Prune;
159264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return WRC_Continue;
158844 159266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158845 159267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
158846 159268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
158847 159269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
158848 159270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** pIdx is an index that covers all of the low-number columns used by
158849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** pWInfo->pSelect (columns from 0 through 62). But there are columns
158850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** in pWInfo->pSelect beyond 62. This routine tries to answer the question
158851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** of whether pIdx covers *all* columns in the query.
158852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
158853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** Return 0 if pIdx is a covering index. Return non-zero if pIdx is
158854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** not a covering index or if we are unable to determine if pIdx is a
158855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** covering index.
158856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- **
158857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine is an optimization. It is always safe to return non-zero.
158858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** But returning zero when non-zero should have been returned can lead to
158859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** incorrect bytecode and assertion faults.
159271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** pWInfo->pSelect (columns from 0 through 62) or an index that has
159272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expressions terms. Hence, we cannot determine whether or not it is
159273 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** a covering index by using the colUsed bitmasks. We have to do a search
159274 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to see if the index is covering. This routine does that search.
159275 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
159276 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The return value is one of these:
159277 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
159278 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** 0 The index is definitely not a covering index
159279 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
159280 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WHERE_IDX_ONLY The index is definitely a covering index
159281 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
159282 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** WHERE_EXPRIDX The index is likely a covering index, but it is
159283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** difficult to determine precisely because of the
159284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** expressions that are indexed. Score it as a
159285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** covering index, but still keep the main table open
159286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** just in case we need it.
159287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
159288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine is an optimization. It is always safe to return zero.
159289 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** But returning one of the other two values when zero should have been
159290 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** returned can lead to incorrect bytecode and assertion faults.
158860 159291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
158861 159292 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static SQLITE_NOINLINE u32 whereIsCoveringIndex(
158862 159293 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereInfo *pWInfo, /* The WHERE clause context */
158863 159294 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx, /* Index that is being tested */
158864 159295 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iTabCur /* Cursor for the table being indexed */
158865 159296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
158866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int i;
159297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int i, rc;
158867 159298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct CoveringIndexCheck ck;
158868 159299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Walker w;
158869 159300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pWInfo->pSelect==0 ){
158870 159301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* We don't have access to the full query, so we cannot check to see
158871 159302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** if pIdx is covering. Assume it is not. */
158872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
158873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
158874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- for(i=0; i<pIdx->nColumn; i++){
158875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( pIdx->aiColumn[i]>=BMS-1 ) break;
158876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
158877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( i>=pIdx->nColumn ){
158878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* pIdx does not index any columns greater than 62, but we know from
158879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** colMask that columns greater than 62 are used, so this is not a
158880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** covering index */
158881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return 1;
159303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
159304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->bHasExpr==0 ){
159306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ for(i=0; i<pIdx->nColumn; i++){
159307 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pIdx->aiColumn[i]>=BMS-1 ) break;
159308 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159309 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( i>=pIdx->nColumn ){
159310 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* pIdx does not index any columns greater than 62, but we know from
159311 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** colMask that columns greater than 62 are used, so this is not a
159312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** covering index */
159313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return 0;
159314 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
158882 159315 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158883 159316 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ck.pIdx = pIdx;
158884 159317 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
ck.iTabCur = iTabCur;
159318 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ck.bExpr = 0;
159319 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ck.bUnidx = 0;
158885 159320 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&w, 0, sizeof(w));
158886 159321 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xExprCallback = whereIsCoveringIndexWalkCallback;
158887 159322 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.xSelectCallback = sqlite3SelectWalkNoop;
158888 159323 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
w.u.pCovIdxCk = &ck;
158889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- w.eCode = 0;
158890 159324 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WalkSelect(&w, pWInfo->pSelect);
158891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- return w.eCode;
159325 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( ck.bUnidx ){
159326 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = 0;
159327 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( ck.bExpr ){
159328 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = WHERE_EXPRIDX;
159329 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
159330 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = WHERE_IDX_ONLY;
159331 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159332 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ return rc;
158892 159333 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
158893 159334 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
158894 159335 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
158895 159336 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Add all WhereLoop objects for a single table of the join where the table
158896 159337 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** is identified by pBuilder->pNew->iTab. That table is guaranteed to be
@@ -158971,11 +159412,11 @@
158971 159412 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.nColumn = 1;
158972 159413 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.aiColumn = &aiColumnPk;
158973 159414 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.aiRowLogEst = aiRowEstPk;
158974 159415 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.onError = OE_Replace;
158975 159416 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.pTable = pTab;
158976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sPk.szIdxRow = pTab->szTabRow;
159417 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sPk.szIdxRow = 3; /* TUNING: Interior rows of IPK table are very small */
158977 159418 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sPk.idxType = SQLITE_IDXTYPE_IPK;
158978 159419 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiRowEstPk[0] = pTab->nRowLogEst;
158979 159420 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aiRowEstPk[1] = 0;
158980 159421 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pFirst = pSrc->pTab->pIndex;
158981 159422 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pSrc->fg.notIndexed==0 ){
@@ -159102,18 +159543,42 @@
159102 159543 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = rSize;
159103 159544 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc ) break;
159104 159545 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
159105 159546 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask m;
159106 159547 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pProbe->isCovering ){
159107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED;
159108 159548 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = 0;
159549 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED;
159109 159550 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
159110 159551 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
m = pSrc->colUsed & pProbe->colNotIdxed;
159111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( m==TOPBIT ){
159112 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- m = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor);
159552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->wsFlags = WHERE_INDEXED;
159553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( m==TOPBIT || (pProbe->bHasExpr && !pProbe->bHasVCol && m!=0) ){
159554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ u32 isCov = whereIsCoveringIndex(pWInfo, pProbe, pSrc->iCursor);
159555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isCov==0 ){
159556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x200,
159557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ("-> %s is not a covering index"
159558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " according to whereIsCoveringIndex()\n", pProbe->zName));
159559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( m!=0 );
159560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
159561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ m = 0;
159562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->wsFlags |= isCov;
159563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( isCov & WHERE_IDX_ONLY ){
159564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x200,
159565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ("-> %s is a covering expression index"
159566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " according to whereIsCoveringIndex()\n", pProbe->zName));
159567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else{
159568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( isCov==WHERE_EXPRIDX );
159569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x200,
159570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ("-> %s might be a covering expression index"
159571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ " according to whereIsCoveringIndex()\n", pProbe->zName));
159572 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159573 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
159574 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( m==0 ){
159575 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x200,
159576 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ("-> %s a covering index according to bitmasks\n",
159577 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pProbe->zName, m==0 ? "is" : "is not"));
159578 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pNew->wsFlags = WHERE_IDX_ONLY | WHERE_INDEXED;
159113 159579 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159114 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pNew->wsFlags = (m==0) ? (WHERE_IDX_ONLY|WHERE_INDEXED) : WHERE_INDEXED;
159115 159580 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159116 159581 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159117 159582 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Full scan via index */
159118 159583 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( b
159119 159584 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
|| !HasRowid(pTab)
@@ -159282,11 +159747,11 @@
159282 159747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_CONSTRAINT ){
159283 159748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the xBestIndex method returns SQLITE_CONSTRAINT, that means
159284 159749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that the particular combination of parameters provided is unusable.
159285 159750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Make no entries in the loop table.
159286 159751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
159287 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0xffff, (" ^^^^--- non-viable plan rejected!\n"));
159752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0xffffffff, (" ^^^^--- non-viable plan rejected!\n"));
159288 159753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_OK;
159289 159754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159290 159755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
159291 159756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159292 159757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -159393,11 +159858,11 @@
159393 159858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopInsert(pBuilder, pNew);
159394 159859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew->u.vtab.needFree ){
159395 159860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_free(pNew->u.vtab.idxStr);
159396 159861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->u.vtab.needFree = 0;
159397 159862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159398 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0xffff, (" bIn=%d prereqIn=%04llx prereqOut=%04llx\n",
159863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0xffffffff, (" bIn=%d prereqIn=%04llx prereqOut=%04llx\n",
159399 159864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*pbIn, (sqlite3_uint64)mPrereq,
159400 159865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(sqlite3_uint64)(pNew->prereq & ~mPrereq)));
159401 159866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159402 159867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
159403 159868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -159585,11 +160050,11 @@
159585 160050 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return SQLITE_NOMEM_BKPT;
159586 160051 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159587 160052 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159588 160053 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* First call xBestIndex() with all constraints usable. */
159589 160054 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE(0x800, ("BEGIN %s.addVirtual()\n", pSrc->pTab->zName));
159590 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x40, (" VirtualOne: all usable\n"));
160055 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x800, (" VirtualOne: all usable\n"));
159591 160056 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddVirtualOne(
159592 160057 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder, mPrereq, ALLBITS, 0, p, mNoOmit, &bIn, &bRetry
159593 160058 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
159594 160059 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bRetry ){
159595 160060 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( rc==SQLITE_OK );
@@ -159610,11 +160075,11 @@
159610 160075 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Bitmask mBestNoIn = 0;
159611 160076 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159612 160077 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the plan produced by the earlier call uses an IN(...) term, call
159613 160078 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** xBestIndex again, this time with IN(...) terms disabled. */
159614 160079 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bIn ){
159615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x40, (" VirtualOne: all usable w/o IN\n"));
160080 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x800, (" VirtualOne: all usable w/o IN\n"));
159616 160081 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddVirtualOne(
159617 160082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder, mPrereq, ALLBITS, WO_IN, p, mNoOmit, &bIn, 0);
159618 160083 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( bIn==0 );
159619 160084 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mBestNoIn = pNew->prereq & ~mPrereq;
159620 160085 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mBestNoIn==0 ){
@@ -159636,11 +160101,11 @@
159636 160101 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mThis>mPrev && mThis<mNext ) mNext = mThis;
159637 160102 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159638 160103 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
mPrev = mNext;
159639 160104 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mNext==ALLBITS ) break;
159640 160105 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( mNext==mBest || mNext==mBestNoIn ) continue;
159641 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x40, (" VirtualOne: mPrev=%04llx mNext=%04llx\n",
160106 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x800, (" VirtualOne: mPrev=%04llx mNext=%04llx\n",
159642 160107 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(sqlite3_uint64)mPrev, (sqlite3_uint64)mNext));
159643 160108 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddVirtualOne(
159644 160109 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder, mPrereq, mNext|mPrereq, 0, p, mNoOmit, &bIn, 0);
159645 160110 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pNew->prereq==mPrereq ){
159646 160111 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
seenZero = 1;
@@ -159650,21 +160115,21 @@
159650 160115 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159651 160116 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the calls to xBestIndex() in the above loop did not find a plan
159652 160117 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that requires no source tables at all (i.e. one guaranteed to be
159653 160118 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** usable), make a call here with all source tables disabled */
159654 160119 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && seenZero==0 ){
159655 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x40, (" VirtualOne: all disabled\n"));
160120 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x800, (" VirtualOne: all disabled\n"));
159656 160121 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddVirtualOne(
159657 160122 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder, mPrereq, mPrereq, 0, p, mNoOmit, &bIn, 0);
159658 160123 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( bIn==0 ) seenZeroNoIN = 1;
159659 160124 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159660 160125 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159661 160126 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the calls to xBestIndex() have so far failed to find a plan
159662 160127 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** that requires no source tables at all and does not use an IN(...)
159663 160128 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** operator, make a final call to obtain one here. */
159664 160129 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( rc==SQLITE_OK && seenZeroNoIN==0 ){
159665 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x40, (" VirtualOne: all disabled and w/o IN\n"));
160130 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x800, (" VirtualOne: all disabled and w/o IN\n"));
159666 160131 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddVirtualOne(
159667 160132 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pBuilder, mPrereq, mPrereq, WO_IN, p, mNoOmit, &bIn, 0);
159668 160133 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159669 160134 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159670 160135 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -159716,11 +160181,11 @@
159716 160181 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i, j;
159717 160182 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159718 160183 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSubBuild = *pBuilder;
159719 160184 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSubBuild.pOrSet = &sCur;
159720 160185 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
159721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x200, ("Begin processing OR-clause %p\n", pTerm));
160186 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x400, ("Begin processing OR-clause %p\n", pTerm));
159722 160187 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
159723 160188 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pOrTerm->eOperator & WO_AND)!=0 ){
159724 160189 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSubBuild.pWC = &pOrTerm->u.pAndInfo->wc;
159725 160190 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( pOrTerm->leftCursor==iCur ){
159726 160191 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
tempWC.pWInfo = pWC->pWInfo;
@@ -159733,13 +160198,13 @@
159733 160198 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
159734 160199 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
159735 160200 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159736 160201 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sCur.n = 0;
159737 160202 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef WHERETRACE_ENABLED
159738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x200, ("OR-term %d of %p has %d subterms:\n",
160203 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x400, ("OR-term %d of %p has %d subterms:\n",
159739 160204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(int)(pOrTerm-pOrWC->a), pTerm, sSubBuild.pWC->nTerm));
159740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x400 ){
160205 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x20000 ){
159741 160206 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereClausePrint(sSubBuild.pWC);
159742 160207 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159743 160208 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
159744 160209 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifndef SQLITE_OMIT_VIRTUALTABLE
159745 160210 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( IsVirtual(pItem->pTab) ){
@@ -159797,11 +160262,11 @@
159797 160262 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->rRun = sSum.a[i].rRun + 1;
159798 160263 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->nOut = sSum.a[i].nOut;
159799 160264 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pNew->prereq = sSum.a[i].prereq;
159800 160265 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopInsert(pBuilder, pNew);
159801 160266 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0x200, ("End processing OR-clause %p\n", pTerm));
160267 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0x400, ("End processing OR-clause %p\n", pTerm));
159803 160268 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159804 160269 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159805 160270 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return rc;
159806 160271 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
159807 160272 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -160145,12 +160610,12 @@
160145 160610 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iColumn>=XN_ROWID ){
160146 160611 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOBExpr->op!=TK_COLUMN && pOBExpr->op!=TK_AGG_COLUMN ) continue;
160147 160612 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOBExpr->iTable!=iCur ) continue;
160148 160613 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pOBExpr->iColumn!=iColumn ) continue;
160149 160614 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
160150 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Expr *pIdxExpr = pIndex->aColExpr->a[j].pExpr;
160151 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3ExprCompareSkip(pOBExpr, pIdxExpr, iCur) ){
160615 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Expr *pIxExpr = pIndex->aColExpr->a[j].pExpr;
160616 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3ExprCompareSkip(pOBExpr, pIxExpr, iCur) ){
160152 160617 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
160153 160618 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160154 160619 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160155 160620 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iColumn!=XN_ROWID ){
160156 160621 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pColl = sqlite3ExprNNCollSeq(pWInfo->pParse, pOrderBy->a[i].pExpr);
@@ -160278,41 +160743,60 @@
160278 160743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Return the cost of sorting nRow rows, assuming that the keys have
160279 160744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** nOrderby columns and that the first nSorted columns are already in
160280 160745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** order.
160281 160746 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
160282 160747 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static LogEst whereSortingCost(
160283 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WhereInfo *pWInfo,
160284 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- LogEst nRow,
160285 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nOrderBy,
160286 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- int nSorted
160748 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WhereInfo *pWInfo, /* Query planning context */
160749 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst nRow, /* Estimated number of rows to sort */
160750 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nOrderBy, /* Number of ORDER BY clause terms */
160751 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ int nSorted /* Number of initial ORDER BY terms naturally in order */
160287 160752 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
160288 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* TUNING: Estimated cost of a full external sort, where N is
160753 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Estimated cost of a full external sort, where N is
160289 160754 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** the number of rows to sort is:
160290 160755 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
160291 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cost = (3.0 * N * log(N)).
160756 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cost = (K * N * log(N)).
160292 160757 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
160293 160758 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Or, if the order-by clause has X terms but only the last Y
160294 160759 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** terms are out of order, then block-sorting will reduce the
160295 160760 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** sorting cost to:
160296 160761 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
160297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cost = (3.0 * N * log(N)) * (Y/X)
160762 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** cost = (K * N * log(N)) * (Y/X)
160298 160763 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
160299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** The (Y/X) term is implemented using stack variable rScale
160300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** below.
160764 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** The constant K is at least 2.0 but will be larger if there are a
160765 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** large number of columns to be sorted, as the sorting time is
160766 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** proportional to the amount of content to be sorted. The algorithm
160767 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** does not currently distinguish between fat columns (BLOBs and TEXTs)
160768 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** and skinny columns (INTs). It just uses the number of columns as
160769 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an approximation for the row width.
160770 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
160771 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** And extra factor of 2.0 or 3.0 is added to the sorting cost if the sort
160772 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** is built using OP_IdxInsert and OP_Sort rather than with OP_SorterInsert.
160301 160773 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
160302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- LogEst rScale, rSortCost;
160303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- assert( nOrderBy>0 && 66==sqlite3LogEst(100) );
160304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rScale = sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66;
160305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rSortCost = nRow + rScale + 16;
160774 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ LogEst rSortCost, nCol;
160775 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWInfo->pSelect!=0 );
160776 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ assert( pWInfo->pSelect->pEList!=0 );
160777 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TUNING: sorting cost proportional to the number of output columns: */
160778 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nCol = sqlite3LogEst((pWInfo->pSelect->pEList->nExpr+59)/30);
160779 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rSortCost = nRow + nCol;
160780 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nSorted>0 ){
160781 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* Scale the result by (Y/X) */
160782 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rSortCost += sqlite3LogEst((nOrderBy-nSorted)*100/nOrderBy) - 66;
160783 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
160306 160784 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
160307 160785 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Multiple by log(M) where M is the number of output rows.
160308 160786 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** Use the LIMIT for M if it is smaller. Or if this sort is for
160309 160787 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** a DISTINCT operator, M will be the number of distinct output
160310 160788 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** rows, so fudge it downwards a bit.
160311 160789 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
160312 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 && pWInfo->iLimit<nRow ){
160313 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- nRow = pWInfo->iLimit;
160790 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( (pWInfo->wctrlFlags & WHERE_USE_LIMIT)!=0 ){
160791 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rSortCost += 10; /* TUNING: Extra 2.0x if using LIMIT */
160792 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( nSorted!=0 ){
160793 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rSortCost += 6; /* TUNING: Extra 1.5x if also using partial sort */
160794 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
160795 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( pWInfo->iLimit<nRow ){
160796 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ nRow = pWInfo->iLimit;
160797 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
160314 160798 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else if( (pWInfo->wctrlFlags & WHERE_WANT_DISTINCT) ){
160315 160799 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* TUNING: In the sort for a DISTINCT operator, assume that the DISTINCT
160316 160800 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** reduces the number of output rows by a factor of 2 */
160317 160801 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nRow>10 ){ nRow -= 10; assert( 10==sqlite3LogEst(2) ); }
160318 160802 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -160460,15 +160944,15 @@
160460 160944 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( aSortCost[isOrdered]==0 ){
160461 160945 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aSortCost[isOrdered] = whereSortingCost(
160462 160946 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo, nRowEst, nOrderBy, isOrdered
160463 160947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
160464 160948 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160465 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- /* TUNING: Add a small extra penalty (5) to sorting as an
160949 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ /* TUNING: Add a small extra penalty (3) to sorting as an
160466 160950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** extra encouragment to the query planner to select a plan
160467 160951 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** where the rows emerge in the correct order without any sorting
160468 160952 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** required. */
160469 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 5;
160953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rCost = sqlite3LogEstAdd(rUnsorted, aSortCost[isOrdered]) + 3;
160470 160954 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
160471 160955 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE(0x002,
160472 160956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
("---- sort cost=%-3d (%d/%d) increases cost %3d to %-3d\n",
160473 160957 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
aSortCost[isOrdered], (nOrderBy-isOrdered), nOrderBy,
160474 160958 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rUnsorted, rCost));
@@ -160812,11 +161296,11 @@
160812 161296 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( scan.iEquiv>1 ) pLoop->wsFlags |= WHERE_TRANSCONS;
160813 161297 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_DEBUG
160814 161298 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->cId = '0';
160815 161299 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
160816 161300 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef WHERETRACE_ENABLED
160817 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace ){
161301 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x02 ){
160818 161302 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("whereShortCut() used to compute solution\n");
160819 161303 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160820 161304 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
160821 161305 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return 1;
160822 161306 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -160942,11 +161426,11 @@
160942 161426 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
160943 161427 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160944 161428 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160945 161429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
160946 161430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pTerm<pEnd ) continue;
160947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0xffff, ("-> drop loop %c not used\n", pLoop->cId));
161431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0xffffffff, ("-> drop loop %c not used\n", pLoop->cId));
160948 161432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
notReady &= ~pLoop->maskSelf;
160949 161433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(pTerm=pWInfo->sWC.a; pTerm<pEnd; pTerm++){
160950 161434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( (pTerm->prereqAll & pLoop->maskSelf)!=0 ){
160951 161435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pTerm->wtFlags |= TERM_CODED;
160952 161436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -161002,11 +161486,11 @@
161002 161486 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
&& (pTab->tabFlags & TF_HasStat1)!=0
161003 161487 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
161004 161488 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
testcase( pItem->fg.jointype & JT_LEFT );
161005 161489 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->wsFlags |= WHERE_BLOOMFILTER;
161006 161490 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->wsFlags &= ~WHERE_IDX_ONLY;
161007 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0xffff, (
161491 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0xffffffff, (
161008 161492 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"-> use Bloom-filter on loop %c because there are ~%.1e "
161009 161493 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
"lookups into %s which has only ~%.1e rows\n",
161010 161494 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pLoop->cId, (double)sqlite3LogEstToInt(nSearch), pTab->zName,
161011 161495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
(double)sqlite3LogEstToInt(pTab->nRowLogEst)));
161012 161496 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -161015,17 +161499,17 @@
161015 161499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161016 161500 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161017 161501 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
161018 161502 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
161019 161503 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** This is an sqlite3ParserAddCleanup() callback that is invoked to
161020 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** free the Parse->pIdxExpr list when the Parse object is destroyed.
161504 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** free the Parse->pIdxEpr list when the Parse object is destroyed.
161021 161505 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
161022 161506 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static void whereIndexedExprCleanup(sqlite3 *db, void *pObject){
161023 161507 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Parse *pParse = (Parse*)pObject;
161024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- while( pParse->pIdxExpr!=0 ){
161025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IndexedExpr *p = pParse->pIdxExpr;
161026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->pIdxExpr = p->pIENext;
161508 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ while( pParse->pIdxEpr!=0 ){
161509 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexedExpr *p = pParse->pIdxEpr;
161510 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->pIdxEpr = p->pIENext;
161027 161511 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ExprDelete(db, p->pExpr);
161028 161512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DbFreeNN(db, p);
161029 161513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161030 161514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161031 161515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
@@ -161033,17 +161517,17 @@
161033 161517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** The index pIdx is used by a query and contains one or more expressions.
161034 161518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** In other words pIdx is an index on an expression. iIdxCur is the cursor
161035 161519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** number for the index and iDataCur is the cursor number for the corresponding
161036 161520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** table.
161037 161521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
**
161038 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** This routine adds IndexedExpr entries to the Parse->pIdxExpr field for
161522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine adds IndexedExpr entries to the Parse->pIdxEpr field for
161039 161523 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** each of the expressions in the index so that the expression code generator
161040 161524 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** will know to replace occurrences of the indexed expression with
161041 161525 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** references to the corresponding column of the index.
161042 161526 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
161043 161527 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
static SQLITE_NOINLINE void whereAddIndexedExpr(
161044 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- Parse *pParse, /* Add IndexedExpr entries to pParse->pIdxExpr */
161528 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ Parse *pParse, /* Add IndexedExpr entries to pParse->pIdxEpr */
161045 161529 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Index *pIdx, /* The index-on-expression that contains the expressions */
161046 161530 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iIdxCur, /* Cursor number for pIdx */
161047 161531 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
SrcItem *pTabItem /* The FROM clause entry for the table */
161048 161532 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
161049 161533 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
@@ -161068,20 +161552,20 @@
161068 161552 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
continue;
161069 161553 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161070 161554 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3ExprIsConstant(pExpr) ) continue;
161071 161555 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p = sqlite3DbMallocRaw(pParse->db, sizeof(IndexedExpr));
161072 161556 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p==0 ) break;
161073 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- p->pIENext = pParse->pIdxExpr;
161557 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ p->pIENext = pParse->pIdxEpr;
161074 161558 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pExpr = sqlite3ExprDup(pParse->db, pExpr, 0);
161075 161559 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iDataCur = pTabItem->iCursor;
161076 161560 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iIdxCur = iIdxCur;
161077 161561 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iIdxCol = i;
161078 161562 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->bMaybeNullRow = bMaybeNullRow;
161079 161563 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
161080 161564 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->zIdxName = pIdx->zName;
161081 161565 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
161082 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- pParse->pIdxExpr = p;
161566 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ pParse->pIdxEpr = p;
161083 161567 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->pIENext==0 ){
161084 161568 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3ParserAddCleanup(pParse, whereIndexedExprCleanup, pParse);
161085 161569 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161086 161570 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161087 161571 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -161369,30 +161853,30 @@
161369 161853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161370 161854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161371 161855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
161372 161856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* Construct the WhereLoop objects */
161373 161857 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(WHERETRACE_ENABLED)
161374 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0xffff ){
161858 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0xffffffff ){
161375 161859 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("*** Optimizer Start *** (wctrlFlags: 0x%x",wctrlFlags);
161376 161860 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( wctrlFlags & WHERE_USE_LIMIT ){
161377 161861 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(", limit: %d", iAuxArg);
161378 161862 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161379 161863 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf(")\n");
161380 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x100 ){
161864 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x8000 ){
161381 161865 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
Select sSelect;
161382 161866 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
memset(&sSelect, 0, sizeof(sSelect));
161383 161867 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSelect.selFlags = SF_WhereBegin;
161384 161868 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSelect.pSrc = pTabList;
161385 161869 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSelect.pWhere = pWhere;
161386 161870 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSelect.pOrderBy = pOrderBy;
161387 161871 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sSelect.pEList = pResultSet;
161388 161872 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3TreeViewSelect(0, &sSelect, 0);
161389 161873 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161390 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- }
161391 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x100 ){ /* Display all terms of the WHERE clause */
161392 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3DebugPrintf("---- WHERE clause at start of analysis:\n");
161393 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3WhereClausePrint(sWLB.pWC);
161874 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x4000 ){ /* Display all WHERE clause terms */
161875 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3DebugPrintf("---- WHERE clause at start of analysis:\n");
161876 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3WhereClausePrint(sWLB.pWC);
161877 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }
161394 161878 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161395 161879 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
161396 161880 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
161397 161881 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( nTabList!=1 || whereShortCut(&sWLB)==0 ){
161398 161882 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = whereLoopAddAll(&sWLB);
@@ -161404,11 +161888,11 @@
161404 161888 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** changed based on STAT4 information while computing subsequent loops,
161405 161889 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** then we need to rerun the whole loop building process so that all
161406 161890 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** loops will be built using the revised truthProb values. */
161407 161891 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sWLB.bldFlags2 & SQLITE_BLDF2_2NDPASS ){
161408 161892 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WHERETRACE_ALL_LOOPS(pWInfo, sWLB.pWC);
161409 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0xffff,
161893 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0xffffffff,
161410 161894 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
("**** Redo all loop computations due to"
161411 161895 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
" TERM_HIGHTRUTH changes ****\n"));
161412 161896 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( pWInfo->pLoops ){
161413 161897 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
WhereLoop *p = pWInfo->pLoops;
161414 161898 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->pLoops = p->pNextLoop;
@@ -161490,15 +161974,15 @@
161490 161974 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
161491 161975 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
whereCheckIfBloomFilterIsUseful(pWInfo);
161492 161976 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161493 161977 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
161494 161978 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#if defined(WHERETRACE_ENABLED)
161495 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- if( sqlite3WhereTrace & 0x100 ){ /* Display all terms of the WHERE clause */
161979 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ if( sqlite3WhereTrace & 0x4000 ){ /* Display all terms of the WHERE clause */
161496 161980 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3DebugPrintf("---- WHERE clause at end of analysis:\n");
161497 161981 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3WhereClausePrint(sWLB.pWC);
161498 161982 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
161499 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- WHERETRACE(0xffff,("*** Optimizer Finished ***\n"));
161983 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ WHERETRACE(0xffffffff,("*** Optimizer Finished ***\n"));
161500 161984 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
#endif
161501 161985 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pWInfo->pParse->nQueryLoop += pWInfo->nRowOut;
161502 161986 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
161503 161987 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/* If the caller is an UPDATE or DELETE statement that is requesting
161504 161988 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** to use a one-pass algorithm, determine if this is appropriate.
@@ -162028,11 +162512,11 @@
162028 162512 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
last = iEnd;
162029 162513 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
162030 162514 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
last = pWInfo->iEndWhere;
162031 162515 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
162032 162516 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( pIdx->bHasExpr ){
162033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- IndexedExpr *p = pParse->pIdxExpr;
162517 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ IndexedExpr *p = pParse->pIdxEpr;
162034 162518 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
while( p ){
162035 162519 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( p->iIdxCur==pLevel->iIdxCur ){
162036 162520 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iDataCur = -1;
162037 162521 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->iIdxCur = -1;
162038 162522 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
@@ -163199,11 +163683,11 @@
163199 163683 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
163200 163684 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
163201 163685 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pSub = sqlite3SelectNew(
163202 163686 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParse, pSublist, pSrc, pWhere, pGroupBy, pHaving, pSort, 0, 0
163203 163687 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
);
163204 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- SELECTTRACE(1,pParse,pSub,
163688 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ TREETRACE(0x40,pParse,pSub,
163205 163689 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
("New window-function subquery in FROM clause of (%u/%p)\n",
163206 163690 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->selId, p));
163207 163691 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
p->pSrc = sqlite3SrcListAppend(pParse, 0, 0, 0);
163208 163692 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( pSub!=0 || p->pSrc==0 ); /* Due to db->mallocFailed test inside
163209 163693 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** of sqlite3DbMallocRawNN() called from
@@ -176360,10 +176844,13 @@
176360 176844 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iNew = *(int*)pArg;
176361 176845 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*(int*)pArg = sqlite3BtreeGetRequestedReserve(pBtree);
176362 176846 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( iNew>=0 && iNew<=255 ){
176363 176847 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3BtreeSetPageSize(pBtree, 0, iNew, 0);
176364 176848 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
176849 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ rc = SQLITE_OK;
176850 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ }else if( op==SQLITE_FCNTL_RESET_CACHE ){
176851 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3BtreeClearCache(pBtree);
176365 176852 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = SQLITE_OK;
176366 176853 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}else{
176367 176854 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nSave = db->busyHandler.nBusy;
176368 176855 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
rc = sqlite3OsFileControl(fd, op, pArg);
176369 176856 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
db->busyHandler.nBusy = nSave;
@@ -213942,28 +214429,28 @@
213942 214429 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pCsr->isAgg ){
213943 214430 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_text(ctx, pCsr->zPagetype, -1, SQLITE_STATIC);
213944 214431 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
213945 214432 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
213946 214433 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 4: /* ncell */
213947 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_int(ctx, pCsr->nCell);
214434 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int64(ctx, pCsr->nCell);
213948 214435 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
213949 214436 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 5: /* payload */
213950 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_int(ctx, pCsr->nPayload);
214437 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int64(ctx, pCsr->nPayload);
213951 214438 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
213952 214439 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 6: /* unused */
213953 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_int(ctx, pCsr->nUnused);
214440 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int64(ctx, pCsr->nUnused);
213954 214441 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
213955 214442 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 7: /* mx_payload */
213956 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_int(ctx, pCsr->nMxPayload);
214443 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int64(ctx, pCsr->nMxPayload);
213957 214444 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
213958 214445 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 8: /* pgoffset */
213959 214446 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( !pCsr->isAgg ){
213960 214447 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_int64(ctx, pCsr->iOffset);
213961 214448 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
213962 214449 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
213963 214450 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 9: /* pgsize */
213964 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_int(ctx, pCsr->szPage);
214451 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ sqlite3_result_int64(ctx, pCsr->szPage);
213965 214452 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
break;
213966 214453 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
case 10: { /* schema */
213967 214454 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3 *db = sqlite3_context_db_handle(ctx);
213968 214455 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int iDb = pCsr->iDb;
213969 214456 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_result_text(ctx, db->aDb[iDb].zDbSName, -1, SQLITE_STATIC);
@@ -238535,11 +239022,11 @@
238535 239022 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int nArg, /* Number of args */
238536 239023 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
sqlite3_value **apUnused /* Function arguments */
238537 239024 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
){
238538 239025 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
assert( nArg==0 );
238539 239026 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
UNUSED_PARAM2(nArg, apUnused);
238540 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- sqlite3_result_text(pCtx, "fts5: 2022-11-16 12:10:08 89c459e766ea7e9165d0beeb124708b955a4950d0f4792f457465d71b158d318", -1, SQLITE_TRANSIENT);
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);
238541 239028 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
238542 239029 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
238543 239030 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
238544 239031 { 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
238545 239032 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
** by this module.
238546 239033 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!